<?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>226816</bug_id>
          
          <creation_ts>2021-06-09 07:13:30 -0700</creation_ts>
          <short_desc>[iOS 15 Regression]: scroll position resets when using scroll snap</short_desc>
          <delta_ts>2021-07-01 11:04:45 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Liam DeBeasi">ldebeasi</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>augus.dupin</cc>
    
    <cc>johannes.odland</cc>
    
    <cc>mrobinson</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1768163</commentid>
    <comment_count>0</comment_count>
    <who name="Liam DeBeasi">ldebeasi</who>
    <bug_when>2021-06-09 07:13:30 -0700</bug_when>
    <thetext>On iOS 15 beta 1, it appears that scroll snapping is broken and resets the scroll position whenever you try to scroll.

Steps to reproduce:

1. Open https://webkit.org/demos/scroll-snap/ on a device running iOS 15.
2. Go to the second demo (the one that says &quot;This second container shows what basic scroll snapping can do for us&quot;)
3. Try to scroll.
4. Observe that the scroll position is reset to the beginning when you let go of the screen.

Expected Behavior:

I would expect that scrolling continues until the container snaps into place.

Actual Behavior:

Scrolling resets to the beginning. Alternatively, it could be that WebKit is snapping back to the first element, but I am not entirely sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768204</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-09 09:32:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/79081301&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771353</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-21 11:00:04 -0700</bug_when>
    <thetext>This affects tesla.com</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771601</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-21 21:49:18 -0700</bug_when>
    <thetext>Two possible issues here. One is that I&apos;m not convinced that the logic towards the end of closestSnapOffsetWithInfoAndAxis() is correct.

Secondly, and more seriously, we&apos;re snapping in the WebContent process when receiving notifications about scrolls from the UI process, which is also snapping, and these are fighting with each other.

UI process:

  * frame #0: 0x0000000128b37e05 WebCore`std::__1::pair&lt;float, unsigned int&gt; WebCore::closestSnapOffsetWithInfoAndAxis&lt;WebCore::ScrollSnapOffsetsInfo&lt;float, WebCore::FloatRect&gt;, WebCore::FloatSize, float&gt;(info=0x0000000145eafe08, axis=Vertical, viewportSize={ width = 980.0, height = 1924.89063 }, scrollDestinationOffset=351.090332, velocity=2.98693037, originalOffsetForDirectionalSnapping= Has Value=false ) at ScrollSnapOffsetsInfo.cpp:146:56
    frame #1: 0x0000000128b3796b WebCore`std::__1::pair&lt;float, unsigned int&gt; WebCore::ScrollSnapOffsetsInfo&lt;float, WebCore::FloatRect&gt;::closestSnapOffset&lt;WebCore::FloatSize&gt;(this=0x0000000145eafe08, axis=Vertical, viewportSize={ width = 980.0, height = 1924.89063 }, scrollDestinationOffset=351.090332, velocity=2.98693037, originalPositionForDirectionalSnapping= Has Value=false ) const at ScrollSnapOffsetsInfo.cpp:387:12
    frame #2: 0x0000000114f65d52 WebKit`WebKit::RemoteScrollingCoordinatorProxy::closestSnapOffsetForMainFrameScrolling(this=0x0000000145ee62f8, axis=Vertical, scrollDestination=153.333328, velocity=2.98693037, currentIndex=0x0000000145ee636c) const at RemoteScrollingCoordinatorProxyIOS.mm:244:68
    frame #3: 0x0000000114f659a4 WebKit`WebKit::RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping(this=0x0000000145ee62f8, maxScrollOffsets=(width = 0, height = 139.33333333333326), velocity=(x = 0, y = 2.986930437998057), topInset=66, targetContentOffset=(x = 0, y = 153.33333333333334)) at RemoteScrollingCoordinatorProxyIOS.mm:209:39
    frame #4: 0x0000000114d044da WebKit`-[WKWebView(self=Failed to get the &apos;some&apos; field from optional &apos;self&apos;, _cmd=&quot;scrollViewWillEndDragging:withVelocity:targetContentOffset:&quot;, scrollView=Failed to get the &apos;some&apos; field from optional &apos;scrollView&apos;, velocity=(x = 0, y = 2.986930437998057), targetContentOffset=(x = 0, y = 153.33333333333334)) scrollViewWillEndDragging:withVelocity:targetContentOffset:] at WKWebViewIOS.mm:1589:22

WebContent process:

  * frame #0: 0x00000002128a0834 WebCore`std::__1::pair&lt;WebCore::LayoutUnit, unsigned int&gt; WebCore::closestSnapOffsetWithInfoAndAxis&lt;WebCore::ScrollSnapOffsetsInfo&lt;WebCore::LayoutUnit, WebCore::LayoutRect&gt;, WebCore::LayoutSize, WebCore::LayoutUnit&gt;(info=0x000000022a4edc10, axis=Vertical, viewportSize={ width = 980px (62720), height = 1708px (109312) }, scrollDestinationOffset={ 57px (3648) }, velocity=0, originalOffsetForDirectionalSnapping= Has Value=false ) at ScrollSnapOffsetsInfo.cpp:146:56
    frame #1: 0x00000002128a033d WebCore`std::__1::pair&lt;WebCore::LayoutUnit, unsigned int&gt; WebCore::ScrollSnapOffsetsInfo&lt;WebCore::LayoutUnit, WebCore::LayoutRect&gt;::closestSnapOffset&lt;WebCore::LayoutSize&gt;(this=0x000000022a4edc10, axis=Vertical, viewportSize={ width = 980px (62720), height = 1708px (109312) }, scrollDestinationOffset={ 57px (3648) }, velocity=0, originalPositionForDirectionalSnapping= Has Value=false ) const at ScrollSnapOffsetsInfo.cpp:381:12
    frame #2: 0x00000002129159f2 WebCore`WebCore::ScrollController::setNearestScrollSnapIndexForAxisAndOffset(this=0x0000000230af6528, axis=Vertical, offset=57) at ScrollController.cpp:157:55
    frame #3: 0x000000021291462c WebCore`WebCore::ScrollController::setActiveScrollSnapIndicesForOffset(this=0x0000000230af6528, offset={ x = 0, y = 57 }) at ScrollController.cpp:190:5
    frame #4: 0x0000000212913c7f WebCore`WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset(this=0x0000000230af6510) at ScrollAnimator.cpp:277:24
    frame #5: 0x00000002129145c7 WebCore`WebCore::ScrollAnimator::setCurrentPosition(this=0x0000000230af6510, position={ x = 0.0, y = 57.0 }) at ScrollAnimator.cpp:270:5
    frame #6: 0x000000021292b20b WebCore`WebCore::ScrollableArea::notifyScrollPositionChanged(this=0x000000022efc8010, position={ x = 0, y = 57 }) at ScrollableArea.cpp:171:22
    frame #7: 0x0000000212887a06 WebCore`WebCore::AsyncScrollingCoordinator::reconcileScrollingState(this=0x000000022a4cb5e8, frameView=0x000000022efc8010, scrollPosition={ x = 0.0, y = 57.0 }, layoutViewportOriginOrOverrideRect=0x00007ffeef4f1cb8, scrollType=User, viewportRectStability=ChangingObscuredInsetsInteractively, scrollingLayerPositionAction=SetApproximate) at AsyncScrollingCoordinator.cpp:417:15
    frame #8: 0x00000001f1a82219 WebKit`WebKit::WebPage::updateVisibleContentRects(this=0x00007f9100008208, visibleContentRectUpdateInfo=0x000000022a441000, oldestTimestamp=(m_value = 2837791.1456069001)) at WebPageIOS.mm:4151:31
    frame #9: 0x00000001f1fb6375 WebKit`WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate(this=0x000000022a4ec050) at ViewUpdateDispatcher.cpp:88:22
    frame #10: 0x00000001f1fc8a7d WebKit`WebKit::ViewUpdateDispatcher::visibleContentRectUpdate(this=0x000000022a4110b8)::$_1::operator()() at ViewUpdateDispatcher.cpp:73:28
    frame #11: 0x00000001f1fc88ee WebKit`WTF::Detail::CallableWrapper&lt;WebKit::ViewUpdateDispatcher::visibleContentRectUpdate(WTF::ObjectIdentifier&lt;WebCore::PageIdentifierType&gt;, WebKit::VisibleContentRectUpdateInfo const&amp;)::$_1, void&gt;::call(this=0x000000022a4110b0) at Function.h:53:39</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771623</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-22 01:27:09 -0700</bug_when>
    <thetext>Here&apos;s what I&apos;m seeing:

Expected behavior:
When either dragging the scroll view and releasing or momentum scrolling (without enough momentum to move to the next scroll position), the view should animate while snapping back to the previous snap point.

Actual behavior:
When dragging the scroll view and releasing, the view animates back as expected. When using momentum scrolling (but not enough to move to the next snap position), the view snaps back without animation.

So there are two issues here, I think:

1. The lack of animation when snapping back after a momentum scrolling. I&apos;m investigating this now. 
2. Whether momentum scrolls *should* snap back at all. It&apos;s arguable that any momentum scroll at all, no matter how small should always snap to the next snap position. This is a very trivial change.

Regardless of what happens for 2, there are situations where we must snap back and in those cases it should animate back to the original snap position.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771672</commentid>
    <comment_count>5</comment_count>
      <attachid>431966</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-22 08:02:29 -0700</bug_when>
    <thetext>Created attachment 431966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771673</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-22 08:12:39 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #3)
&gt; Two possible issues here. One is that I&apos;m not convinced that the logic
&gt; towards the end of closestSnapOffsetWithInfoAndAxis() is correct.
&gt; 
&gt; Secondly, and more seriously, we&apos;re snapping in the WebContent process when
&gt; receiving notifications about scrolls from the UI process, which is also
&gt; snapping, and these are fighting with each other.
&gt; 

I also noticed this the other day. I think the call to closestSnapOffset in the WebContent process does not actually snap, but updates the value of m_activeSnapIndexX/m_activesnapIndexY in ScrollSnapAnimatorState. You can see that ScrollController::updateActiveScrollSnapIndexForClientOffset only ultimately calls m_scrollSnapState-&gt;setActiveSnapIndexForAxis(axis, index). Still, this seems completely unnecessary since the same value should also be in the serialized ScrollingTree update. I don&apos;t totally understand why the code was designed to constantly recalculate the &quot;active snap point&quot; like this. I&apos;m going to write a patch to try to remove this, but I don&apos;t think it will ultimately change behavior or fix this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771674</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-22 08:14:22 -0700</bug_when>
    <thetext>I have uploaded a patch which I think fixes the issue with tesla.com and the webkit.org demo. What it does is to always move to the next or previous scroll point for momentum scrolling. This should also ensure that &quot;strong&quot; iOS momentum scrolls work properly with `scroll-snap-stop`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771683</commentid>
    <comment_count>8</comment_count>
      <attachid>431968</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-22 09:11:10 -0700</bug_when>
    <thetext>Created attachment 431968
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771781</commentid>
    <comment_count>9</comment_count>
      <attachid>431968</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-22 14:05:58 -0700</bug_when>
    <thetext>Comment on attachment 431968
Patch

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

r+ but please add a test.

&gt; Source/WebKit/ChangeLog:14
&gt; +        No new tests because iOS doesn&apos;t currently run scroll snap tests relying on EventSender.

iOS can run touch-based tests with UIScriptController. There are lots in fast/scrolling/ios

&gt; Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:235
&gt; +std::pair&lt;float, std::optional&lt;unsigned&gt;&gt; RemoteScrollingCoordinatorProxy::closestSnapOffsetForMainFrameScrolling(ScrollEventAxis axis, float scrollOrigin, float scrollDestination, float velocity) const

scrollOrigin is a confusing name. Call it currentScrollOffset?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771911</commentid>
    <comment_count>10</comment_count>
      <attachid>432037</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-23 06:56:47 -0700</bug_when>
    <thetext>Created attachment 432037
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771977</commentid>
    <comment_count>11</comment_count>
      <attachid>432062</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-23 09:43:22 -0700</bug_when>
    <thetext>Created attachment 432062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772094</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-23 16:00:58 -0700</bug_when>
    <thetext>Committed r279195 (239085@main): &lt;https://commits.webkit.org/239085@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432062.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772105</commentid>
    <comment_count>13</comment_count>
    <who name="Liam DeBeasi">ldebeasi</who>
    <bug_when>2021-06-23 16:20:02 -0700</bug_when>
    <thetext>Thank you! I will give it a test whenever it comes out on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774169</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-07-01 11:04:45 -0700</bug_when>
    <thetext>*** Bug 227580 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431966</attachid>
            <date>2021-06-22 08:02:29 -0700</date>
            <delta_ts>2021-06-22 09:10:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226816-20210622170227.patch</filename>
            <type>text/plain</type>
            <size>10486</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQyNmViMTY2ZmIyZWRkOTJi
Mjk0NjQyM2E3YmZjZTgyN2ZhN2ZjODUuLmE5ODhiNDEwM2Q0ZmY0NzRlZmU0ODM2ZTBlZmI5MTg5
YzUyNmU3YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjEtMDYtMjIgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtpT1MgMTUgUmVncmVz
c2lvbl06IHNjcm9sbCBwb3NpdGlvbiByZXNldHMgd2hlbiB1c2luZyBzY3JvbGwgc25hcAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODE2CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83OTA4MTMwMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUbyBpbXByb3ZlIHNjcm9sbGluZyBmbHVpZGl0eSBvbiBp
T1MsIGhhdmUgYW55IHNvcnQgb2YgbW9tZW50dW0gc2Nyb2xsIHRyaWdnZXIgZGlyZWN0aW9uYWwK
KyAgICAgICAgc2Nyb2xsIHNuYXBwaW5nLiBUaGlzIG1lYW5zIHRoYXQgYW55IG1vbWVudHVtIHNj
cm9sbCB3aWxsIG1vdmUgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgc2Nyb2xsCisgICAgICAgIHBv
c2l0aW9uIGFuZCBub3Qgc25hcCBiYWNrLiBUaGlzIGltcHJvdmVzIGJlaGF2aW9yIG9uIHRlc2xh
LmNvbSBhbmQgYWxzbyBvbiB0aGUgc2Nyb2xsCisgICAgICAgIHNuYXBwaW5nIGRlbW8gb24gdGhl
IFdlYktpdCBwYWdlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9T
Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRo
VmVsb2NpdHk6dGFyZ2V0Q29udGVudE9mZnNldDpdKTogUGFzcyB0aGUgY3VycmVudCBzY3JvbGwg
b2Zmc2V0IHRvCisgICAgICAgIHRoZSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LiBQ
YXNzaW5nIGEgdmFsdWUgZm9yIHRoaXMgb2Zmc2V0IGlzIHRoZSB0cmlnZ2VyIGZvciBkaXJlY3Rp
b25hbCBzY3JvbGwKKyAgICAgICAgc25hcHBpbmcuCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Lmg6IFVwZGF0ZSBtZXRo
b2QgZGVmaW5pdGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3Mv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNl
dEZvclNuYXBwaW5nKTogUGFzcyB0aGUgY3VycmVudCBvZmZzZXQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFp
bkZyYW1lU2Nyb2xsaW5nIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbToK
KyAgICAgICAgKC1bV0tTY3JvbGxpbmdOb2RlU2Nyb2xsVmlld0RlbGVnYXRlIHNjcm9sbFZpZXdX
aWxsRW5kRHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6IEVuYWJs
ZQorICAgICAgICBkaXJlY3Rpb25hbCBzY3JvbGwgc25hcHBpbmcgZm9yIFJlbmRlckxheWVycy4K
KwogMjAyMS0wNi0yMiAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZ1bmN0aW9ucyBkaXNwYXRjaGVkIHRvIFdvcmtRdWV1ZSBhcmUgc29tZXRpbWVzIGRl
c3Ryb3llZCBpbiB0aGUgY2FsbGluZyB0aHJlYWQgZHVlIHRvIGJsb2NrIHJlZmNvdW50aW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCmluZGV4
IGUyMTliZjI0OTYzNzJjMzhjNzcwODFiMzM2ZDBlNTdkNWExNzYxN2MuLmI4ZGYxMzc1OTFiZWM1
NWJlODE0YmE2NWM5YmIyMmZmMmUwYjAzZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCkBAIC0xNTg2LDcgKzE1ODYsNyBAQCAtICh2b2lk
KXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0
aFZlbG9jaXR5OihDR1BvaQogCiAgICAgICAgIENHUmVjdCB1bm9ic2N1cmVkUmVjdCA9IFVJRWRn
ZUluc2V0c0luc2V0UmVjdChzZWxmLmJvdW5kcywgb2JzY3VyZWRJbnNldCk7CiAKLSAgICAgICAg
Y29vcmRpbmF0b3ItPmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyhtYXhTY3Jv
bGxPZmZzZXRzLCB2ZWxvY2l0eSwgdW5vYnNjdXJlZFJlY3Qub3JpZ2luLnksIHRhcmdldENvbnRl
bnRPZmZzZXQpOworICAgICAgICBjb29yZGluYXRvci0+YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNl
dEZvclNuYXBwaW5nKG1heFNjcm9sbE9mZnNldHMsIHZlbG9jaXR5LCB1bm9ic2N1cmVkUmVjdC5v
cmlnaW4ueSwgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCB0YXJnZXRDb250ZW50T2Zmc2V0KTsK
ICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eS5oCmluZGV4IDdlOWIxN2U4Yzk4NTM0ZGM3OTlhNmEwYzE3MzAxZmViM2E3ZGE3NGMu
LmJmYTczOTM5YjlkYmNhN2JlMjI2ZGE5YWYwOTI3MTQ2YzkyMjM1MjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaApAQCAtMTAwLDcgKzEwMCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0U2Nyb2xsKFdlYkNv
cmU6OlNjcm9sbGluZ05vZGVJRCk7CiAgICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZURpZEVuZFNj
cm9sbChXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi0gICAgdm9pZCBhZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBpbmcoQ0dTaXpl
IG1heFNjcm9sbERpbWVuc2lvbnMsIENHUG9pbnQgdmVsb2NpdHksIENHRmxvYXQgdG9wSW5zZXQs
IENHUG9pbnQqIHRhcmdldENvbnRlbnRPZmZzZXQpOworICAgIHZvaWQgYWRqdXN0VGFyZ2V0Q29u
dGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxEaW1lbnNpb25zLCBDR1BvaW50
IHZlbG9jaXR5LCBDR0Zsb2F0IHRvcEluc2V0LCBDR1BvaW50IGN1cnJlbnRDb250ZW50T2Zmc2V0
LCBDR1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KTsKICAgICBib29sIGhhc0FjdGl2ZVNuYXBQ
b2ludCgpIGNvbnN0OwogICAgIENHUG9pbnQgbmVhcmVzdEFjdGl2ZUNvbnRlbnRJbnNldEFkanVz
dGVkU25hcE9mZnNldChDR0Zsb2F0IHRvcEluc2V0LCBjb25zdCBDR1BvaW50JikgY29uc3Q7CiAg
ICAgYm9vbCBzaG91bGRTZXRTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3QoKSBjb25zdDsK
QEAgLTEyMSw3ICsxMjEsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKICAgICBib29sIHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Ny
b2xsRXZlbnRBeGlzKSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3Jl
OjpTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0
eSkgY29uc3Q7CisgICAgc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4g
Y2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZl
bnRBeGlzLCBmbG9hdCBzY3JvbGxPcmlnaW4sIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9h
dCB2ZWxvY2l0eSkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgc2VuZFVJU3RhdGVDaGFuZ2Vk
SWZOZWNlc3NhcnkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eUlPUy5tbQppbmRleCA2ZWVmOTllMmI4YmFlMTY0YzhkODY4OGJlZTdl
NjdjZjZiNmVlODcyLi5jYzhjZDViODZlZjFmNTY4ZTVjM2NkODNkNTc3ZGI5MGRlMDdlOTQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5SU9TLm1tCkBAIC0xOTYsMTkgKzE5NiwxOSBAQCB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHk6OmVzdGFibGlzaExheWVyVHJlZVNjcm9sbGluZ1JlbGF0aW9ucyhjb25zdAog
fQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eTo6YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6
ZSBtYXhTY3JvbGxPZmZzZXRzLCBDR1BvaW50IHZlbG9jaXR5LCBDR0Zsb2F0IHRvcEluc2V0LCBD
R1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KQordm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5OjphZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBpbmcoQ0dTaXplIG1h
eFNjcm9sbE9mZnNldHMsIENHUG9pbnQgdmVsb2NpdHksIENHRmxvYXQgdG9wSW5zZXQsIENHUG9p
bnQgY3VycmVudENvbnRlbnRPZmZzZXQsIENHUG9pbnQqIHRhcmdldENvbnRlbnRPZmZzZXQpCiB7
CiAgICAgLy8gVGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIG1heFNjcm9sbE9mZnNldHMgaXMgdG8g
ZW5zdXJlIHRoYXQgd2Ugd29uJ3QgaW50ZXJmZXJlIHdpdGggcnViYmVyLWJhbmRpbmcgd2hlbiBz
Y3JvbGxpbmcgdG8gdGhlIGVkZ2Ugb2YgdGhlIHBhZ2UuCiAgICAgaWYgKHNob3VsZFNuYXBGb3JN
YWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSkg
ewogICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAgICAgIHN0ZDo6dGll
KHBvdGVudGlhbFNuYXBQb3NpdGlvbiwgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KSA9IGNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgdGFyZ2V0Q29udGVudE9mZnNldC0+eCwgdmVsb2NpdHku
eCk7CisgICAgICAgIHN0ZDo6dGllKHBvdGVudGlhbFNuYXBQb3NpdGlvbiwgbV9jdXJyZW50SG9y
aXpvbnRhbFNuYXBQb2ludEluZGV4KSA9IGNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Ny
b2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY3VycmVudENvbnRl
bnRPZmZzZXQueCwgdGFyZ2V0Q29udGVudE9mZnNldC0+eCwgdmVsb2NpdHkueCk7CiAgICAgICAg
IGlmICh0YXJnZXRDb250ZW50T2Zmc2V0LT54ID4gMCAmJiB0YXJnZXRDb250ZW50T2Zmc2V0LT54
IDwgbWF4U2Nyb2xsT2Zmc2V0cy53aWR0aCkKICAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZz
ZXQtPnggPSBzdGQ6Om1pbjxmbG9hdD4obWF4U2Nyb2xsT2Zmc2V0cy53aWR0aCwgcG90ZW50aWFs
U25hcFBvc2l0aW9uKTsKICAgICB9CiAKICAgICBpZiAoc2hvdWxkU25hcEZvck1haW5GcmFtZVNj
cm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSkgewogICAgICAgICBm
bG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAgICAgIHN0ZDo6dGllKHBvdGVudGlhbFNu
YXBQb3NpdGlvbiwgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25h
cE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZl
cnRpY2FsLCB0YXJnZXRDb250ZW50T2Zmc2V0LT55LCB2ZWxvY2l0eS55KTsKKyAgICAgICAgc3Rk
Ojp0aWUocG90ZW50aWFsU25hcFBvc2l0aW9uLCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4KSA9IGNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGN1cnJlbnRDb250ZW50T2Zmc2V0LnksIHRhcmdldENv
bnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnkpOwogICAgICAgICBpZiAobV9jdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCkKICAgICAgICAgICAgIHBvdGVudGlhbFNuYXBQb3NpdGlvbiAtPSB0
b3BJbnNldDsKIApAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eTo6c2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVuCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+PiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNl
dEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgc2Nyb2xs
RGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KSBjb25zdAorc3RkOjpwYWlyPGZsb2F0LCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y2xv
c2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRBeGlzIGF4aXMs
IGZsb2F0IHNjcm9sbE9yaWdpbiwgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9j
aXR5KSBjb25zdAogewogICAgIFNjcm9sbGluZ1RyZWVOb2RlKiByb290ID0gbV9zY3JvbGxpbmdU
cmVlLT5yb290Tm9kZSgpOwogICAgIEFTU0VSVChyb290ICYmIHJvb3QtPmlzRnJhbWVTY3JvbGxp
bmdOb2RlKCkpOwpAQCAtMjQwLDcgKzI0MCw4IEBAIHN0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4+IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNsb3NlCiAg
ICAgY29uc3QgYXV0byYgc25hcE9mZnNldHNJbmZvID0gcm9vdFNjcm9sbGluZ05vZGUtPnNuYXBP
ZmZzZXRzSW5mbygpOwogCiAgICAgZmxvYXQgc2NhbGVkU2Nyb2xsRGVzdGluYXRpb24gPSBzY3Jv
bGxEZXN0aW5hdGlvbiAvIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpOwot
ICAgIGF1dG8gW3Jhd0Nsb3Nlc3RTbmFwT2Zmc2V0LCBuZXdJbmRleF0gPSBzbmFwT2Zmc2V0c0lu
Zm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgcm9vdFNjcm9sbGluZ05vZGUtPmxheW91dFZpZXdw
b3J0KCkuc2l6ZSgpLCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2NpdHkpOworICAgIGZs
b2F0IHNjYWxlZFNjcm9sbE9yaWdpbiA9IHNjcm9sbE9yaWdpbiAvIG1fd2ViUGFnZVByb3h5LmRp
c3BsYXllZENvbnRlbnRTY2FsZSgpOworICAgIGF1dG8gW3Jhd0Nsb3Nlc3RTbmFwT2Zmc2V0LCBu
ZXdJbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgcm9vdFNj
cm9sbGluZ05vZGUtPmxheW91dFZpZXdwb3J0KCkuc2l6ZSgpLCBzY2FsZWRTY3JvbGxEZXN0aW5h
dGlvbiwgdmVsb2NpdHksIHNjYWxlZFNjcm9sbE9yaWdpbik7CiAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHJhd0Nsb3Nlc3RTbmFwT2Zmc2V0ICogbV93ZWJQYWdlUHJveHkuZGlzcGxheWVkQ29u
dGVudFNjYWxlKCksIG5ld0luZGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lv
cy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCmluZGV4IDY1NjRiNmEw
MGExNzZhZTUxMThlNTIzZTQ5ODI5ODI0Nzk2ZjhhYmYuLjI4NGZiNmFhZTQ3NWIzNGE2Yzc1MzFj
YzQyMTk2NGY0OWM1MzE1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jl
bW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KQEAgLTEwOSwxNCArMTA5LDE0IEBA
IC0gKHZvaWQpc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xs
VmlldyB3aXRoVmVsb2NpdHk6KENHUG9pCiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIHZpZXdwb3J0
U2l6ZShzdGF0aWNfY2FzdDxmbG9hdD4oQ0dSZWN0R2V0V2lkdGgoW3Njcm9sbFZpZXcgYm91bmRz
XSkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oQ0dSZWN0R2V0SGVpZ2h0KFtzY3JvbGxWaWV3IGJvdW5k
c10pKSk7CiAgICAgY29uc3QgYXV0byYgc25hcE9mZnNldHNJbmZvID0gX3Njcm9sbGluZ1RyZWVO
b2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zbmFwT2Zmc2V0c0luZm8oKTsKICAgICBpZiAo
IXNuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGF1dG8gW3BvdGVudGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJbmZv
LmNsb3Nlc3RTbmFwT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwg
dmlld3BvcnRTaXplLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54KTsKKyAgICAgICAgYXV0
byBbcG90ZW50aWFsU25hcFBvc2l0aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2Vz
dFNuYXBPZmZzZXQoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCB2aWV3cG9y
dFNpemUsIGhvcml6b250YWxUYXJnZXQsIHZlbG9jaXR5LngsIHNjcm9sbFZpZXcuY29udGVudE9m
ZnNldC54KTsKICAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05v
ZGUoKS5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGluZGV4KTsKICAgICAgICAg
aWYgKGhvcml6b250YWxUYXJnZXQgPj0gMCAmJiBob3Jpem9udGFsVGFyZ2V0IDw9IHNjcm9sbFZp
ZXcuY29udGVudFNpemUud2lkdGgpCiAgICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54
ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwogICAgIH0KIAogICAgIGlmICghc25hcE9mZnNldHNJ
bmZvLnZlcnRpY2FsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gW3BvdGVu
dGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zm
c2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHZpZXdwb3J0U2l6ZSwgdmVy
dGljYWxUYXJnZXQsIHZlbG9jaXR5LngpOworICAgICAgICBhdXRvIFtwb3RlbnRpYWxTbmFwUG9z
aXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChXZWJDb3Jl
OjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB2aWV3cG9ydFNpemUsIHZlcnRpY2FsVGFyZ2V0
LCB2ZWxvY2l0eS55LCBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQueSk7CiAgICAgICAgIF9zY3Jv
bGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3VycmVudFZlcnRpY2Fs
U25hcFBvaW50SW5kZXgoaW5kZXgpOwogICAgICAgICBpZiAodmVydGljYWxUYXJnZXQgPj0gMCAm
JiB2ZXJ0aWNhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLmhlaWdodCkKICAgICAg
ICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431968</attachid>
            <date>2021-06-22 09:11:10 -0700</date>
            <delta_ts>2021-06-23 06:56:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226816-20210622181108.patch</filename>
            <type>text/plain</type>
            <size>10586</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQyNmViMTY2ZmIyZWRkOTJi
Mjk0NjQyM2E3YmZjZTgyN2ZhN2ZjODUuLjUyNTdmOTYxYzlmMTMxZjc3YjFjZjAyOTViNTBhMWRk
NjhlMmYyZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMjEtMDYtMjIgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtpT1MgMTUgUmVncmVz
c2lvbl06IHNjcm9sbCBwb3NpdGlvbiByZXNldHMgd2hlbiB1c2luZyBzY3JvbGwgc25hcAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODE2CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83OTA4MTMwMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUbyBpbXByb3ZlIHNjcm9sbGluZyBmbHVpZGl0eSBvbiBp
T1MsIGhhdmUgYW55IHNvcnQgb2YgbW9tZW50dW0gc2Nyb2xsIHRyaWdnZXIgZGlyZWN0aW9uYWwK
KyAgICAgICAgc2Nyb2xsIHNuYXBwaW5nLiBUaGlzIG1lYW5zIHRoYXQgYW55IG1vbWVudHVtIHNj
cm9sbCB3aWxsIG1vdmUgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgc2Nyb2xsCisgICAgICAgIHBv
c2l0aW9uIGFuZCBub3Qgc25hcCBiYWNrLiBUaGlzIGltcHJvdmVzIGJlaGF2aW9yIG9uIHRlc2xh
LmNvbSBhbmQgYWxzbyBvbiB0aGUgc2Nyb2xsCisgICAgICAgIHNuYXBwaW5nIGRlbW8gb24gdGhl
IFdlYktpdCBwYWdlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIGlPUyBkb2Vzbid0
IGN1cnJlbnRseSBydW4gc2Nyb2xsIHNuYXAgdGVzdHMgcmVseWluZyBvbiBFdmVudFNlbmRlci4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IHNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdl
dENvbnRlbnRPZmZzZXQ6XSk6IFBhc3MgdGhlIGN1cnJlbnQgc2Nyb2xsIG9mZnNldCB0bworICAg
ICAgICB0aGUgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS4gUGFzc2luZyBhIHZhbHVl
IGZvciB0aGlzIG9mZnNldCBpcyB0aGUgdHJpZ2dlciBmb3IgZGlyZWN0aW9uYWwgc2Nyb2xsCisg
ICAgICAgIHNuYXBwaW5nLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oOiBVcGRhdGUgbWV0aG9kIGRlZmluaXRpb25z
LgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyk6
IFBhc3MgdGhlIGN1cnJlbnQgb2Zmc2V0LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGlu
ZyBjb25zdCk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9z
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW06CisgICAgICAgICgtW1dL
U2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5n
OndpdGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBFbmFibGUKKyAgICAgICAgZGly
ZWN0aW9uYWwgc2Nyb2xsIHNuYXBwaW5nIGZvciBSZW5kZXJMYXllcnMuCisKIDIwMjEtMDYtMjIg
IEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBGdW5jdGlv
bnMgZGlzcGF0Y2hlZCB0byBXb3JrUXVldWUgYXJlIHNvbWV0aW1lcyBkZXN0cm95ZWQgaW4gdGhl
IGNhbGxpbmcgdGhyZWFkIGR1ZSB0byBibG9jayByZWZjb3VudGluZwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQppbmRleCBlMjE5YmYyNDk2Mzcy
YzM4Yzc3MDgxYjMzNmQwZTU3ZDVhMTc2MTdjLi5iOGRmMTM3NTkxYmVjNTViZTgxNGJhNjVjOWJi
MjJmZjJlMGIwM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9z
L1dLV2ViVmlld0lPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dL
V2ViVmlld0lPUy5tbQpAQCAtMTU4Niw3ICsxNTg2LDcgQEAgLSAodm9pZClzY3JvbGxWaWV3V2ls
bEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQ
b2kKIAogICAgICAgICBDR1JlY3QgdW5vYnNjdXJlZFJlY3QgPSBVSUVkZ2VJbnNldHNJbnNldFJl
Y3Qoc2VsZi5ib3VuZHMsIG9ic2N1cmVkSW5zZXQpOwogCi0gICAgICAgIGNvb3JkaW5hdG9yLT5h
ZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBpbmcobWF4U2Nyb2xsT2Zmc2V0cywgdmVs
b2NpdHksIHVub2JzY3VyZWRSZWN0Lm9yaWdpbi55LCB0YXJnZXRDb250ZW50T2Zmc2V0KTsKKyAg
ICAgICAgY29vcmRpbmF0b3ItPmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyht
YXhTY3JvbGxPZmZzZXRzLCB2ZWxvY2l0eSwgdW5vYnNjdXJlZFJlY3Qub3JpZ2luLnksIHNjcm9s
bFZpZXcuY29udGVudE9mZnNldCwgdGFyZ2V0Q29udGVudE9mZnNldCk7CiAgICAgfQogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaAppbmRl
eCA3ZTliMTdlOGM5ODUzNGRjNzk5YTZhMGMxNzMwMWZlYjNhN2RhNzRjLi5iZmE3MzkzOWI5ZGJj
YTdiZTIyNmRhOWFmMDkyNzE0NmM5MjIzNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFNjcm9sbChXZWJDb3JlOjpTY3JvbGxpbmdO
b2RlSUQpOwogICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRTY3JvbGwoV2ViQ29yZTo6
U2Nyb2xsaW5nTm9kZUlEKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQg
YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxEaW1l
bnNpb25zLCBDR1BvaW50IHZlbG9jaXR5LCBDR0Zsb2F0IHRvcEluc2V0LCBDR1BvaW50KiB0YXJn
ZXRDb250ZW50T2Zmc2V0KTsKKyAgICB2b2lkIGFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JT
bmFwcGluZyhDR1NpemUgbWF4U2Nyb2xsRGltZW5zaW9ucywgQ0dQb2ludCB2ZWxvY2l0eSwgQ0dG
bG9hdCB0b3BJbnNldCwgQ0dQb2ludCBjdXJyZW50Q29udGVudE9mZnNldCwgQ0dQb2ludCogdGFy
Z2V0Q29udGVudE9mZnNldCk7CiAgICAgYm9vbCBoYXNBY3RpdmVTbmFwUG9pbnQoKSBjb25zdDsK
ICAgICBDR1BvaW50IG5lYXJlc3RBY3RpdmVDb250ZW50SW5zZXRBZGp1c3RlZFNuYXBPZmZzZXQo
Q0dGbG9hdCB0b3BJbnNldCwgY29uc3QgQ0dQb2ludCYpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxk
U2V0U2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVGYXN0KCkgY29uc3Q7CkBAIC0xMjEsNyArMTIx
LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgYm9vbCBz
aG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpcykg
Y29uc3Q7Ci0gICAgc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gY2xv
c2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRB
eGlzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHkpIGNvbnN0OworICAg
IHN0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IGNsb3Nlc3RTbmFwT2Zm
c2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpcywgZmxvYXQg
c2Nyb2xsT3JpZ2luLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHkpIGNv
bnN0OwogI2VuZGlmCiAKICAgICB2b2lkIHNlbmRVSVN0YXRlQ2hhbmdlZElmTmVjZXNzYXJ5KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9z
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJv
eHlJT1MubW0KaW5kZXggNmVlZjk5ZTJiOGJhZTE2NGM4ZDg2ODhiZWU3ZTY3Y2Y2YjZlZTg3Mi4u
Y2M4Y2Q1Yjg2ZWYxZjU2OGU1YzNjZDgzZDU3N2RiOTBkZTA3ZTk0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvclByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQpAQCAt
MTk2LDE5ICsxOTYsMTkgQEAgdm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojpl
c3RhYmxpc2hMYXllclRyZWVTY3JvbGxpbmdSZWxhdGlvbnMoY29uc3QKIH0KIAogI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6
OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyhDR1NpemUgbWF4U2Nyb2xsT2Zm
c2V0cywgQ0dQb2ludCB2ZWxvY2l0eSwgQ0dGbG9hdCB0b3BJbnNldCwgQ0dQb2ludCogdGFyZ2V0
Q29udGVudE9mZnNldCkKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRq
dXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxPZmZzZXRz
LCBDR1BvaW50IHZlbG9jaXR5LCBDR0Zsb2F0IHRvcEluc2V0LCBDR1BvaW50IGN1cnJlbnRDb250
ZW50T2Zmc2V0LCBDR1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KQogewogICAgIC8vIFRoZSBi
b3VuZHMgY2hlY2tpbmcgd2l0aCBtYXhTY3JvbGxPZmZzZXRzIGlzIHRvIGVuc3VyZSB0aGF0IHdl
IHdvbid0IGludGVyZmVyZSB3aXRoIHJ1YmJlci1iYW5kaW5nIHdoZW4gc2Nyb2xsaW5nIHRvIHRo
ZSBlZGdlIG9mIHRoZSBwYWdlLgogICAgIGlmIChzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xs
aW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpIHsKICAgICAgICAgZmxv
YXQgcG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFw
UG9zaXRpb24sIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25h
cE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwsIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5LngpOworICAgICAgICBz
dGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9p
bnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3Jl
OjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGN1cnJlbnRDb250ZW50T2Zmc2V0LngsIHRh
cmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5LngpOwogICAgICAgICBpZiAodGFyZ2V0Q29u
dGVudE9mZnNldC0+eCA+IDAgJiYgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA8IG1heFNjcm9sbE9m
ZnNldHMud2lkdGgpCiAgICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gc3RkOjpt
aW48ZmxvYXQ+KG1heFNjcm9sbE9mZnNldHMud2lkdGgsIHBvdGVudGlhbFNuYXBQb3NpdGlvbik7
CiAgICAgfQogCiAgICAgaWYgKHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29y
ZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpIHsKICAgICAgICAgZmxvYXQgcG90ZW50aWFs
U25hcFBvc2l0aW9uOwotICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1f
Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgpID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWlu
RnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdGFyZ2V0
Q29udGVudE9mZnNldC0+eSwgdmVsb2NpdHkueSk7CisgICAgICAgIHN0ZDo6dGllKHBvdGVudGlh
bFNuYXBQb3NpdGlvbiwgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0
U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6
OlZlcnRpY2FsLCBjdXJyZW50Q29udGVudE9mZnNldC55LCB0YXJnZXRDb250ZW50T2Zmc2V0LT55
LCB2ZWxvY2l0eS55KTsKICAgICAgICAgaWYgKG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5k
ZXgpCiAgICAgICAgICAgICBwb3RlbnRpYWxTbmFwUG9zaXRpb24gLT0gdG9wSW5zZXQ7CiAKQEAg
LTIzMiw3ICsyMzIsNyBAQCBib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNo
b3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVT
Y3JvbGxpbmcoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBm
bG9hdCB2ZWxvY2l0eSkgY29uc3QKK3N0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4+IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNsb3Nlc3RTbmFwT2Zmc2V0
Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBzY3JvbGxP
cmlnaW4sIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgY29uc3QKIHsK
ICAgICBTY3JvbGxpbmdUcmVlTm9kZSogcm9vdCA9IG1fc2Nyb2xsaW5nVHJlZS0+cm9vdE5vZGUo
KTsKICAgICBBU1NFUlQocm9vdCAmJiByb290LT5pc0ZyYW1lU2Nyb2xsaW5nTm9kZSgpKTsKQEAg
LTI0MCw3ICsyNDAsOCBAQCBzdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
PiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZQogICAgIGNvbnN0IGF1dG8m
IHNuYXBPZmZzZXRzSW5mbyA9IHJvb3RTY3JvbGxpbmdOb2RlLT5zbmFwT2Zmc2V0c0luZm8oKTsK
IAogICAgIGZsb2F0IHNjYWxlZFNjcm9sbERlc3RpbmF0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24g
LyBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKTsKLSAgICBhdXRvIFtyYXdD
bG9zZXN0U25hcE9mZnNldCwgbmV3SW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFw
T2Zmc2V0KGF4aXMsIHJvb3RTY3JvbGxpbmdOb2RlLT5sYXlvdXRWaWV3cG9ydCgpLnNpemUoKSwg
c2NhbGVkU2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5KTsKKyAgICBmbG9hdCBzY2FsZWRTY3Jv
bGxPcmlnaW4gPSBzY3JvbGxPcmlnaW4gLyBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50
U2NhbGUoKTsKKyAgICBhdXRvIFtyYXdDbG9zZXN0U25hcE9mZnNldCwgbmV3SW5kZXhdID0gc25h
cE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHJvb3RTY3JvbGxpbmdOb2RlLT5s
YXlvdXRWaWV3cG9ydCgpLnNpemUoKSwgc2NhbGVkU2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5
LCBzY2FsZWRTY3JvbGxPcmlnaW4pOwogICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdDbG9z
ZXN0U25hcE9mZnNldCAqIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpLCBu
ZXdJbmRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQppbmRleCA2NTY0YjZhMDBhMTc2YWU1MTE4ZTUy
M2U0OTgyOTgyNDc5NmY4YWJmLi4yODRmYjZhYWU0NzViMzRhNmM3NTMxY2M0MjE5NjRmNDljNTMx
NTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUv
aW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TLm1tCkBAIC0xMDksMTQgKzEwOSwxNCBAQCAtICh2b2lkKXNjcm9s
bFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9j
aXR5OihDR1BvaQogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWV3cG9ydFNpemUoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KENHUmVjdEdldFdpZHRoKFtzY3JvbGxWaWV3IGJvdW5kc10pKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KENHUmVjdEdldEhlaWdodChbc2Nyb2xsVmlldyBib3VuZHNdKSkpOwogICAgIGNv
bnN0IGF1dG8mIHNuYXBPZmZzZXRzSW5mbyA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5z
Y3JvbGxpbmdOb2RlKCkuc25hcE9mZnNldHNJbmZvKCk7CiAgICAgaWYgKCFzbmFwT2Zmc2V0c0lu
Zm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIFtwb3Rl
bnRpYWxTbmFwUG9zaXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9m
ZnNldChXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHZpZXdwb3J0U2l6ZSwg
aG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCk7CisgICAgICAgIGF1dG8gW3BvdGVudGlhbFNu
YXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KFdl
YkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgdmlld3BvcnRTaXplLCBob3Jpem9u
dGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQueCk7CiAgICAg
ICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRleCk7CiAgICAgICAgIGlmIChob3Jpem9udGFs
VGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXpl
LndpZHRoKQogICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9IHBvdGVudGlhbFNu
YXBQb3NpdGlvbjsKICAgICB9CiAKICAgICBpZiAoIXNuYXBPZmZzZXRzSW5mby52ZXJ0aWNhbFNu
YXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIFtwb3RlbnRpYWxTbmFwUG9zaXRp
b24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChXZWJDb3JlOjpT
Y3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB2aWV3cG9ydFNpemUsIHZlcnRpY2FsVGFyZ2V0LCB2
ZWxvY2l0eS54KTsKKyAgICAgICAgYXV0byBbcG90ZW50aWFsU25hcFBvc2l0aW9uLCBpbmRleF0g
PSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoV2ViQ29yZTo6U2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCwgdmlld3BvcnRTaXplLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwg
c2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LnkpOwogICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVE
ZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4
KGluZGV4KTsKICAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxUYXJn
ZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCiAgICAgICAgICAgICB0YXJnZXRD
b250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432037</attachid>
            <date>2021-06-23 06:56:47 -0700</date>
            <delta_ts>2021-06-23 09:43:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226816-20210623155645.patch</filename>
            <type>text/plain</type>
            <size>17420</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI4MWI0OTk5OTg1ZDJmMDI5
ODJkNTc1MGUxYjBhMmQyYzBhNTg3MWEuLjhmY2Q1MGE2YzNlMmY2MDJjYTZkZGIwZTEzMTBkZmE1
Y2JkNTM5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjEtMDYtMjIgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtpT1MgMTUgUmVncmVz
c2lvbl06IHNjcm9sbCBwb3NpdGlvbiByZXNldHMgd2hlbiB1c2luZyBzY3JvbGwgc25hcAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODE2CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83OTA4MTMwMT4KKworICAgICAgICBSZXZpZXdlZCBieSBTaW1v
biBGcmFzZXIuCisKKyAgICAgICAgVG8gaW1wcm92ZSBzY3JvbGxpbmcgZmx1aWRpdHkgb24gaU9T
LCBoYXZlIGFueSBzb3J0IG9mIG1vbWVudHVtIHNjcm9sbCB0cmlnZ2VyIGRpcmVjdGlvbmFsCisg
ICAgICAgIHNjcm9sbCBzbmFwcGluZy4gVGhpcyBtZWFucyB0aGF0IGFueSBtb21lbnR1bSBzY3Jv
bGwgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHNjcm9sbAorICAgICAgICBwb3Np
dGlvbiBhbmQgbm90IHNuYXAgYmFjay4gVGhpcyBpbXByb3ZlcyBiZWhhdmlvciBvbiB0ZXNsYS5j
b20gYW5kIGFsc28gb24gdGhlIHNjcm9sbAorICAgICAgICBzbmFwcGluZyBkZW1vIG9uIHRoZSBX
ZWJLaXQgcGFnZS4KKworICAgICAgICBUZXN0czogZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1z
bmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW1haW4tZnJhbWUuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWlu
LW92ZXJmbG93LXNjcm9sbC1hcmVhLmh0bWwKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9z
L1dLV2ViVmlld0lPUy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZpZXdXaWxsRW5k
RHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6IFBhc3MgdGhlIGN1
cnJlbnQgc2Nyb2xsIG9mZnNldCB0bworICAgICAgICB0aGUgUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS4gUGFzc2luZyBhIHZhbHVlIGZvciB0aGlzIG9mZnNldCBpcyB0aGUgdHJpZ2dl
ciBmb3IgZGlyZWN0aW9uYWwgc2Nyb2xsCisgICAgICAgIHNuYXBwaW5nLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5o
OiBVcGRhdGUgbWV0aG9kIGRlZmluaXRpb25zLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdl
dENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyk6IFBhc3MgdGhlIGN1cnJlbnQgb2Zmc2V0LgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25h
cE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyBjb25zdCk6IERpdHRvLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MubW06CisgICAgICAgICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0
ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zm
c2V0Ol0pOiBFbmFibGUKKyAgICAgICAgZGlyZWN0aW9uYWwgc2Nyb2xsIHNuYXBwaW5nIGZvciBS
ZW5kZXJMYXllcnMuCisKIDIwMjEtMDYtMjIgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBNZXNzYWdlIGRyb3BwZWQgd2hlbiByZXN0b3Jpbmcgd2Vi
cGFnZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2Vi
Vmlld0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9T
Lm1tCmluZGV4IGUyMTliZjI0OTYzNzJjMzhjNzcwODFiMzM2ZDBlNTdkNWExNzYxN2MuLmI4ZGYx
Mzc1OTFiZWM1NWJlODE0YmE2NWM5YmIyMmZmMmUwYjAzZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCkBAIC0xNTg2LDcgKzE1ODYsNyBA
QCAtICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9s
bFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaQogCiAgICAgICAgIENHUmVjdCB1bm9ic2N1cmVkUmVj
dCA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChzZWxmLmJvdW5kcywgb2JzY3VyZWRJbnNldCk7CiAK
LSAgICAgICAgY29vcmRpbmF0b3ItPmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGlu
ZyhtYXhTY3JvbGxPZmZzZXRzLCB2ZWxvY2l0eSwgdW5vYnNjdXJlZFJlY3Qub3JpZ2luLnksIHRh
cmdldENvbnRlbnRPZmZzZXQpOworICAgICAgICBjb29yZGluYXRvci0+YWRqdXN0VGFyZ2V0Q29u
dGVudE9mZnNldEZvclNuYXBwaW5nKG1heFNjcm9sbE9mZnNldHMsIHZlbG9jaXR5LCB1bm9ic2N1
cmVkUmVjdC5vcmlnaW4ueSwgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCB0YXJnZXRDb250ZW50
T2Zmc2V0KTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eS5oCmluZGV4IDdlOWIxN2U4Yzk4NTM0ZGM3OTlhNmEwYzE3MzAxZmVi
M2E3ZGE3NGMuLjFkN2JjM2Q2NWU2N2Q3YjBkMzczMjQ5MjQ1ZjE3MzJiMTBiZTcwOTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaApAQCAtMTAwLDcg
KzEwMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0U2Ny
b2xsKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCk7CiAgICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9k
ZURpZEVuZFNjcm9sbChXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpOwogI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCi0gICAgdm9pZCBhZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBp
bmcoQ0dTaXplIG1heFNjcm9sbERpbWVuc2lvbnMsIENHUG9pbnQgdmVsb2NpdHksIENHRmxvYXQg
dG9wSW5zZXQsIENHUG9pbnQqIHRhcmdldENvbnRlbnRPZmZzZXQpOworICAgIHZvaWQgYWRqdXN0
VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxEaW1lbnNpb25z
LCBDR1BvaW50IHZlbG9jaXR5LCBDR0Zsb2F0IHRvcEluc2V0LCBDR1BvaW50IGN1cnJlbnRDb250
ZW50T2Zmc2V0LCBDR1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KTsKICAgICBib29sIGhhc0Fj
dGl2ZVNuYXBQb2ludCgpIGNvbnN0OwogICAgIENHUG9pbnQgbmVhcmVzdEFjdGl2ZUNvbnRlbnRJ
bnNldEFkanVzdGVkU25hcE9mZnNldChDR0Zsb2F0IHRvcEluc2V0LCBjb25zdCBDR1BvaW50Jikg
Y29uc3Q7CiAgICAgYm9vbCBzaG91bGRTZXRTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3Qo
KSBjb25zdDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKICAgICBib29sIHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2Vi
Q29yZTo6U2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGlu
ZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9h
dCB2ZWxvY2l0eSkgY29uc3Q7CisgICAgc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6
U2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBjdXJyZW50U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzY3JvbGxE
ZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHkpIGNvbnN0OwogI2VuZGlmCiAKICAgICB2b2lkIHNl
bmRVSVN0YXRlQ2hhbmdlZElmTmVjZXNzYXJ5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9z
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KaW5kZXggNmVlZjk5ZTJiOGJh
ZTE2NGM4ZDg2ODhiZWU3ZTY3Y2Y2YjZlZTg3Mi4uY2YyZTI1ZGVmMzI3NDRkNDUyYzNiMmRjOTFi
NTc1NDRhYTEwMTQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQpAQCAtMTk2LDE5ICsxOTYsMTkgQEAgdm9pZCBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojplc3RhYmxpc2hMYXllclRyZWVTY3JvbGxpbmdS
ZWxhdGlvbnMoY29uc3QKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRG
b3JTbmFwcGluZyhDR1NpemUgbWF4U2Nyb2xsT2Zmc2V0cywgQ0dQb2ludCB2ZWxvY2l0eSwgQ0dG
bG9hdCB0b3BJbnNldCwgQ0dQb2ludCogdGFyZ2V0Q29udGVudE9mZnNldCkKK3ZvaWQgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNu
YXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxPZmZzZXRzLCBDR1BvaW50IHZlbG9jaXR5LCBDR0Zsb2F0
IHRvcEluc2V0LCBDR1BvaW50IGN1cnJlbnRDb250ZW50T2Zmc2V0LCBDR1BvaW50KiB0YXJnZXRD
b250ZW50T2Zmc2V0KQogewogICAgIC8vIFRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCBtYXhTY3Jv
bGxPZmZzZXRzIGlzIHRvIGVuc3VyZSB0aGF0IHdlIHdvbid0IGludGVyZmVyZSB3aXRoIHJ1YmJl
ci1iYW5kaW5nIHdoZW4gc2Nyb2xsaW5nIHRvIHRoZSBlZGdlIG9mIHRoZSBwYWdlLgogICAgIGlm
IChzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbCkpIHsKICAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uOwot
ICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1fY3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGlu
ZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHRhcmdldENvbnRlbnRPZmZz
ZXQtPngsIHZlbG9jaXR5LngpOworICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRp
b24sIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNl
dEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwsIGN1cnJlbnRDb250ZW50T2Zmc2V0LngsIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9j
aXR5LngpOwogICAgICAgICBpZiAodGFyZ2V0Q29udGVudE9mZnNldC0+eCA+IDAgJiYgdGFyZ2V0
Q29udGVudE9mZnNldC0+eCA8IG1heFNjcm9sbE9mZnNldHMud2lkdGgpCiAgICAgICAgICAgICB0
YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gc3RkOjptaW48ZmxvYXQ+KG1heFNjcm9sbE9mZnNldHMu
d2lkdGgsIHBvdGVudGlhbFNuYXBQb3NpdGlvbik7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZFNu
YXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCkpIHsKICAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAgICAgICBzdGQ6
OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5k
ZXgpID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdGFyZ2V0Q29udGVudE9mZnNldC0+eSwgdmVsb2NpdHku
eSk7CisgICAgICAgIHN0ZDo6dGllKHBvdGVudGlhbFNuYXBQb3NpdGlvbiwgbV9jdXJyZW50VmVy
dGljYWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9s
bGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjdXJyZW50Q29udGVudE9m
ZnNldC55ICsgdG9wSW5zZXQsIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnkpOwog
ICAgICAgICBpZiAobV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCkKICAgICAgICAgICAg
IHBvdGVudGlhbFNuYXBQb3NpdGlvbiAtPSB0b3BJbnNldDsKIApAQCAtMjMyLDcgKzIzMiw3IEBA
IGJvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2hvdWxkU25hcEZvck1haW5G
cmFtZVNjcm9sbGluZyhTY3JvbGxFdmVuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGQ6OnBh
aXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxF
dmVudEF4aXMgYXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KSBj
b25zdAorc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3Jv
bGxpbmcoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGN1cnJlbnRTY3JvbGxPZmZzZXQsIGZs
b2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgY29uc3QKIHsKICAgICBTY3Jv
bGxpbmdUcmVlTm9kZSogcm9vdCA9IG1fc2Nyb2xsaW5nVHJlZS0+cm9vdE5vZGUoKTsKICAgICBB
U1NFUlQocm9vdCAmJiByb290LT5pc0ZyYW1lU2Nyb2xsaW5nTm9kZSgpKTsKQEAgLTI0MCw3ICsy
NDAsOCBAQCBzdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZQogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZz
ZXRzSW5mbyA9IHJvb3RTY3JvbGxpbmdOb2RlLT5zbmFwT2Zmc2V0c0luZm8oKTsKIAogICAgIGZs
b2F0IHNjYWxlZFNjcm9sbERlc3RpbmF0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLyBtX3dlYlBh
Z2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKTsKLSAgICBhdXRvIFtyYXdDbG9zZXN0U25h
cE9mZnNldCwgbmV3SW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4
aXMsIHJvb3RTY3JvbGxpbmdOb2RlLT5sYXlvdXRWaWV3cG9ydCgpLnNpemUoKSwgc2NhbGVkU2Ny
b2xsRGVzdGluYXRpb24sIHZlbG9jaXR5KTsKKyAgICBmbG9hdCBzY2FsZWRDdXJyZW50U2Nyb2xs
T2Zmc2V0ID0gY3VycmVudFNjcm9sbE9mZnNldCAvIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENv
bnRlbnRTY2FsZSgpOworICAgIGF1dG8gW3Jhd0Nsb3Nlc3RTbmFwT2Zmc2V0LCBuZXdJbmRleF0g
PSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgcm9vdFNjcm9sbGluZ05v
ZGUtPmxheW91dFZpZXdwb3J0KCkuc2l6ZSgpLCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiwgdmVs
b2NpdHksIHNjYWxlZEN1cnJlbnRTY3JvbGxPZmZzZXQpOwogICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihyYXdDbG9zZXN0U25hcE9mZnNldCAqIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRl
bnRTY2FsZSgpLCBuZXdJbmRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3Mv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQppbmRleCA2NTY0YjZhMDBh
MTc2YWU1MTE4ZTUyM2U0OTgyOTgyNDc5NmY4YWJmLi4yODRmYjZhYWU0NzViMzRhNmM3NTMxY2M0
MjE5NjRmNDljNTMxNTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCkBAIC0xMDksMTQgKzEwOSwxNCBAQCAt
ICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZp
ZXcgd2l0aFZlbG9jaXR5OihDR1BvaQogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWV3cG9ydFNp
emUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KENHUmVjdEdldFdpZHRoKFtzY3JvbGxWaWV3IGJvdW5kc10p
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KENHUmVjdEdldEhlaWdodChbc2Nyb2xsVmlldyBib3VuZHNd
KSkpOwogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzSW5mbyA9IF9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc25hcE9mZnNldHNJbmZvKCk7CiAgICAgaWYgKCFz
bmFwT2Zmc2V0c0luZm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAg
ICBhdXRvIFtwb3RlbnRpYWxTbmFwUG9zaXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5j
bG9zZXN0U25hcE9mZnNldChXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHZp
ZXdwb3J0U2l6ZSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCk7CisgICAgICAgIGF1dG8g
W3BvdGVudGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RT
bmFwT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgdmlld3BvcnRT
aXplLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBzY3JvbGxWaWV3LmNvbnRlbnRPZmZz
ZXQueCk7CiAgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRleCk7CiAgICAgICAgIGlm
IChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdldCA8PSBzY3JvbGxWaWV3
LmNvbnRlbnRTaXplLndpZHRoKQogICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9
IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKICAgICB9CiAKICAgICBpZiAoIXNuYXBPZmZzZXRzSW5m
by52ZXJ0aWNhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIFtwb3RlbnRp
YWxTbmFwUG9zaXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNl
dChXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB2aWV3cG9ydFNpemUsIHZlcnRp
Y2FsVGFyZ2V0LCB2ZWxvY2l0eS54KTsKKyAgICAgICAgYXV0byBbcG90ZW50aWFsU25hcFBvc2l0
aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoV2ViQ29yZTo6
U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdmlld3BvcnRTaXplLCB2ZXJ0aWNhbFRhcmdldCwg
dmVsb2NpdHkueSwgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LnkpOwogICAgICAgICBfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNu
YXBQb2ludEluZGV4KGluZGV4KTsKICAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYg
dmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCiAgICAgICAg
ICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDZhOWYzZTg0NjMxYjBiZTllNmY1OTc0ZDYwZjZmNDkxYmQ1YTg3YmMuLjkzMzhlZTc2YTA5
NjBjZTNhZWE5ZWI0MGNmODU0Y2NlM2UzMDc3NWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAy
MS0wNi0yMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW2lPUyAxNSBSZWdyZXNzaW9uXTogc2Nyb2xsIHBvc2l0aW9uIHJlc2V0cyB3aGVuIHVzaW5n
IHNjcm9sbCBzbmFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjY4MTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5MDgxMzAxPgorCisgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL2lv
cy9zY3JvbGwtc25hcC13aXRoLW1vbWVudHVtLXNjcm9sbC1pbi1tYWluLWZyYW1lLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdp
dGgtbW9tZW50dW0tc2Nyb2xsLWluLW1haW4tZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW92
ZXJmbG93LXNjcm9sbC1hcmVhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9z
Y3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW92ZXJmbG93
LXNjcm9sbC1hcmVhLmh0bWw6IEFkZGVkLgorCiAyMDIxLTA2LTIxICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXByb3ZlIG1vcmUgb2YgdGhlIENTUyBsaXN0IHN0
eWxlIGltcGxlbWVudGF0aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxp
bmcvaW9zL3Njcm9sbC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW1haW4tZnJhbWUtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdp
dGgtbW9tZW50dW0tc2Nyb2xsLWluLW1haW4tZnJhbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgzMzExZTVlNDRjMmJhYWViMmZiMDQzNmFiMWZkMjU2ODM1Y2QwNjQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLXNuYXAtd2l0aC1tb21l
bnR1bS1zY3JvbGwtaW4tbWFpbi1mcmFtZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAor
VmVyaWZpZXMgdGhhdCBhIG1vbWVudHVtIHNjcm9sbCBhbHdheXMgbW92ZXMgdG8gdGhlIG5leHQg
b3IgcHJldmlvdXMgc25hcCBwb3NpdGlvbiBubyBtYXR0ZXIgaG93IGZhciBhd2F5IGl0IGlzLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworRkFJTCBkb2N1bWVudC5ib2R5LnNjcm9s
bFRvcCBzaG91bGQgYmUgNTAwLiBXYXMgMC4KK0ZBSUwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3Ag
c2hvdWxkIGJlIDEwMDAuIFdhcyAwLgorRkFJTCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCBzaG91
bGQgYmUgNTAwLiBXYXMgMC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKK1NvbWUg
dGVzdHMgZmFpbGVkLgorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3Qvc2Nyb2xsaW5nL2lvcy9zY3JvbGwtc25hcC13aXRoLW1vbWVudHVtLXNjcm9sbC1pbi1t
YWluLWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLXNu
YXAtd2l0aC1tb21lbnR1bS1zY3JvbGwtaW4tbWFpbi1mcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRh
ZGYwZDY1MzMyNmU3MGE0MGQxYWIxZjkxMGJjYzlhM2E0YmU5YjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLXNuYXAtd2l0aC1tb21lbnR1
bS1zY3JvbGwtaW4tbWFpbi1mcmFtZS5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBo
dG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBB
c3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZD10cnVlIEFzeW5jRnJhbWVTY3JvbGxpbmdFbmFi
bGVkPXRydWUgXSAtLT4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29u
dGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHVzZXItc2NhbGFibGU9
bm8iPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3Njcmlw
dD4KKzxzdHlsZT4KK2JvZHkgeworICAgIHNjcm9sbC1zbmFwLXR5cGU6IGJvdGggbWFuZGF0b3J5
OworfQorCisuYmxvY2sgeworICAgIGhlaWdodDogNTAwcHg7CisgICAgYm9yZGVyOiAxcHggc29s
aWQgYmxhY2s7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICBzY3JvbGwtc25hcC1h
bGlnbjogc3RhcnQ7Cit9Cis8L3N0eWxlPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cisg
ICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48L2Rp
dj4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0iYmxvY2si
PjwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJi
bG9jayI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAgIDxkaXYgY2xh
c3M9ImJsb2NrIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+CisgICAgPGRp
diBjbGFzcz0iYmxvY2siPjwvZGl2PgorPC9ib2R5PgorCis8c2NyaXB0PgoranNUZXN0SXNBc3lu
YyA9IHRydWU7CisKK2FzeW5jIGZ1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGRlc2NyaXB0aW9u
KCJWZXJpZmllcyB0aGF0IGEgbW9tZW50dW0gc2Nyb2xsIGFsd2F5cyBtb3ZlcyB0byB0aGUgbmV4
dCBvciBwcmV2aW91cyBzbmFwIHBvc2l0aW9uIG5vIG1hdHRlciBob3cgZmFyIGF3YXkgaXQgaXMu
Iik7CisKKyAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhd2FpdCBVSUhlbHBlci5kcmFnRnJvbVBvaW50VG9Qb2ludCgxNTAsIDUwLCAxNTAsIDMwMCwg
MC4xKTsKKyAgICBhd2FpdCBVSUhlbHBlci53YWl0Rm9yVGFyZ2V0U2Nyb2xsQW5pbWF0aW9uVG9T
ZXR0bGUoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCk7CisgICAgc2hvdWxkQmUoImRvY3VtZW50
LmJvZHkuc2Nyb2xsVG9wIiwgIjUwMCIpOworCisgICAgYXdhaXQgVUlIZWxwZXIuZHJhZ0Zyb21Q
b2ludFRvUG9pbnQoMTUwLCA1MCwgMTUwLCAzMDAsIDAuMSk7CisgICAgYXdhaXQgVUlIZWxwZXIu
d2FpdEZvclRhcmdldFNjcm9sbEFuaW1hdGlvblRvU2V0dGxlKGRvY3VtZW50LnNjcm9sbGluZ0Vs
ZW1lbnQpOworICAgIHNob3VsZEJlKCJkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCIsICIxMDAwIik7
CisKKyAgICBhd2FpdCBVSUhlbHBlci5kcmFnRnJvbVBvaW50VG9Qb2ludCgxNTAsIDEwLCAxNTAs
IDM1MCwgMC4xKTsKKyAgICBhd2FpdCBVSUhlbHBlci53YWl0Rm9yVGFyZ2V0U2Nyb2xsQW5pbWF0
aW9uVG9TZXR0bGUoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCk7CisgICAgc2hvdWxkQmUoImRv
Y3VtZW50LmJvZHkuc2Nyb2xsVG9wIiwgIjUwMCIpOworICAgZmluaXNoSlNUZXN0KCk7Cit9Cis8
L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5n
L2lvcy9zY3JvbGwtc25hcC13aXRoLW1vbWVudHVtLXNjcm9sbC1pbi1vdmVyZmxvdy1zY3JvbGwt
YXJlYS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xs
LXNuYXAtd2l0aC1tb21lbnR1bS1zY3JvbGwtaW4tb3ZlcmZsb3ctc2Nyb2xsLWFyZWEtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmU4MDk0NzlmYzhhNWE4YWQwNGY0ODVkZjBlOTRkYWNkZjljNjFk
MDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Ny
b2xsLXNuYXAtd2l0aC1tb21lbnR1bS1zY3JvbGwtaW4tb3ZlcmZsb3ctc2Nyb2xsLWFyZWEtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorI1BJRCBVTlJFU1BPTlNJVkUgLSBXZWJLaXRUZXN0
UnVubmVyQXBwIChwaWQgMjQ3MTYpCitGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5
RG9uZSB0byBiZSBjYWxsZWQKKworI0VPRgorI0VPRgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW92
ZXJmbG93LXNjcm9sbC1hcmVhLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mv
c2Nyb2xsLXNuYXAtd2l0aC1tb21lbnR1bS1zY3JvbGwtaW4tb3ZlcmZsb3ctc2Nyb2xsLWFyZWEu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40MThjMGZhNjBkYjM0MzAwYTU5MWJjODlhODJiYWJlMTJhMjg5MTk1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9s
bC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW92ZXJmbG93LXNjcm9sbC1hcmVhLmh0bWwK
QEAgLTAsMCArMSw1NiBAQAorPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIEFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVk
PXRydWUgQXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQ9dHJ1ZSBdIC0tPgorPGh0bWw+Cis8aGVh
ZD4KKzxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGlu
aXRpYWwtc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ubyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jl
c291cmNlcy91aS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHN0eWxlPgorI3Njcm9sbGVyIHsKKyAg
ICBvdmVyZmxvdzogc2Nyb2xsOworICAgIHNjcm9sbC1zbmFwLXR5cGU6IGJvdGggbWFuZGF0b3J5
OworICAgIHdpZHRoOiA1MDBweDsKKyAgICBoZWlnaHQ6IDUwMHB4OworfQorCisuYmxvY2sgewor
ICAgIGhlaWdodDogNTAwcHg7CisgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgYm94
LXNpemluZzogYm9yZGVyLWJveDsKKyAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7Cit9Cis8
L3N0eWxlPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPGRpdiBpZD0ic2Nyb2xs
ZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xh
c3M9ImJsb2NrIj48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAg
ICAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+CisgICAgPC9kaXY+Cis8L2JvZHk+CisKKzxz
Y3JpcHQ+Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCgp
Cit7CisgICAgZGVzY3JpcHRpb24oIlZlcmlmaWVzIHRoYXQgYSBtb21lbnR1bSBzY3JvbGwgYWx3
YXlzIG1vdmVzIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHNuYXAgcG9zaXRpb24gbm8gbWF0dGVy
IGhvdyBmYXIgYXdheSBpdCBpcy4iKTsKKworICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF3YWl0IFVJSGVscGVyLmRyYWdGcm9tUG9pbnRUb1BvaW50
KDE1MCwgMzIwLCAxNTAsIDMwMCwgMC4wMSk7CisgICAgYXdhaXQgVUlIZWxwZXIud2FpdEZvclRh
cmdldFNjcm9sbEFuaW1hdGlvblRvU2V0dGxlKHNjcm9sbGVyKTsKKyAgICBzaG91bGRCZSgic2Ny
b2xsZXIuc2Nyb2xsVG9wIiwgIjUwMCIpOworCisgICAgYXdhaXQgVUlIZWxwZXIuZHJhZ0Zyb21Q
b2ludFRvUG9pbnQoMTUwLCAzMjAsIDE1MCwgMzAwLCAwLjAxKTsKKyAgICBhd2FpdCBVSUhlbHBl
ci53YWl0Rm9yVGFyZ2V0U2Nyb2xsQW5pbWF0aW9uVG9TZXR0bGUoc2Nyb2xsZXIpOworICAgIHNo
b3VsZEJlKCJzY3JvbGxlci5zY3JvbGxUb3AiLCAiMTAwMCIpOworCisgICAgYXdhaXQgVUlIZWxw
ZXIuZHJhZ0Zyb21Qb2ludFRvUG9pbnQoMTUwLCAzMDAsIDE1MCwgMzIwLCAwLjAxKTsKKyAgICBh
d2FpdCBVSUhlbHBlci53YWl0Rm9yVGFyZ2V0U2Nyb2xsQW5pbWF0aW9uVG9TZXR0bGUoc2Nyb2xs
ZXIpOworICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxUb3AiLCAiNTAwIik7CisgICBmaW5p
c2hKU1Rlc3QoKTsKK30KKzwvc2NyaXB0PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432062</attachid>
            <date>2021-06-23 09:43:22 -0700</date>
            <delta_ts>2021-06-23 16:00:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226816-20210623184320.patch</filename>
            <type>text/plain</type>
            <size>17745</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI4MWI0OTk5OTg1ZDJmMDI5
ODJkNTc1MGUxYjBhMmQyYzBhNTg3MWEuLjhmY2Q1MGE2YzNlMmY2MDJjYTZkZGIwZTEzMTBkZmE1
Y2JkNTM5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjEtMDYtMjIgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtpT1MgMTUgUmVncmVz
c2lvbl06IHNjcm9sbCBwb3NpdGlvbiByZXNldHMgd2hlbiB1c2luZyBzY3JvbGwgc25hcAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODE2CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83OTA4MTMwMT4KKworICAgICAgICBSZXZpZXdlZCBieSBTaW1v
biBGcmFzZXIuCisKKyAgICAgICAgVG8gaW1wcm92ZSBzY3JvbGxpbmcgZmx1aWRpdHkgb24gaU9T
LCBoYXZlIGFueSBzb3J0IG9mIG1vbWVudHVtIHNjcm9sbCB0cmlnZ2VyIGRpcmVjdGlvbmFsCisg
ICAgICAgIHNjcm9sbCBzbmFwcGluZy4gVGhpcyBtZWFucyB0aGF0IGFueSBtb21lbnR1bSBzY3Jv
bGwgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHNjcm9sbAorICAgICAgICBwb3Np
dGlvbiBhbmQgbm90IHNuYXAgYmFjay4gVGhpcyBpbXByb3ZlcyBiZWhhdmlvciBvbiB0ZXNsYS5j
b20gYW5kIGFsc28gb24gdGhlIHNjcm9sbAorICAgICAgICBzbmFwcGluZyBkZW1vIG9uIHRoZSBX
ZWJLaXQgcGFnZS4KKworICAgICAgICBUZXN0czogZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1z
bmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW1haW4tZnJhbWUuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWlu
LW92ZXJmbG93LXNjcm9sbC1hcmVhLmh0bWwKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9z
L1dLV2ViVmlld0lPUy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZpZXdXaWxsRW5k
RHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6IFBhc3MgdGhlIGN1
cnJlbnQgc2Nyb2xsIG9mZnNldCB0bworICAgICAgICB0aGUgUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS4gUGFzc2luZyBhIHZhbHVlIGZvciB0aGlzIG9mZnNldCBpcyB0aGUgdHJpZ2dl
ciBmb3IgZGlyZWN0aW9uYWwgc2Nyb2xsCisgICAgICAgIHNuYXBwaW5nLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5o
OiBVcGRhdGUgbWV0aG9kIGRlZmluaXRpb25zLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdl
dENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyk6IFBhc3MgdGhlIGN1cnJlbnQgb2Zmc2V0LgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25h
cE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyBjb25zdCk6IERpdHRvLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MubW06CisgICAgICAgICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdEZWxlZ2F0
ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zm
c2V0Ol0pOiBFbmFibGUKKyAgICAgICAgZGlyZWN0aW9uYWwgc2Nyb2xsIHNuYXBwaW5nIGZvciBS
ZW5kZXJMYXllcnMuCisKIDIwMjEtMDYtMjIgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBNZXNzYWdlIGRyb3BwZWQgd2hlbiByZXN0b3Jpbmcgd2Vi
cGFnZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2Vi
Vmlld0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9T
Lm1tCmluZGV4IGUyMTliZjI0OTYzNzJjMzhjNzcwODFiMzM2ZDBlNTdkNWExNzYxN2MuLmI4ZGYx
Mzc1OTFiZWM1NWJlODE0YmE2NWM5YmIyMmZmMmUwYjAzZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCkBAIC0xNTg2LDcgKzE1ODYsNyBA
QCAtICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9s
bFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaQogCiAgICAgICAgIENHUmVjdCB1bm9ic2N1cmVkUmVj
dCA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChzZWxmLmJvdW5kcywgb2JzY3VyZWRJbnNldCk7CiAK
LSAgICAgICAgY29vcmRpbmF0b3ItPmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGlu
ZyhtYXhTY3JvbGxPZmZzZXRzLCB2ZWxvY2l0eSwgdW5vYnNjdXJlZFJlY3Qub3JpZ2luLnksIHRh
cmdldENvbnRlbnRPZmZzZXQpOworICAgICAgICBjb29yZGluYXRvci0+YWRqdXN0VGFyZ2V0Q29u
dGVudE9mZnNldEZvclNuYXBwaW5nKG1heFNjcm9sbE9mZnNldHMsIHZlbG9jaXR5LCB1bm9ic2N1
cmVkUmVjdC5vcmlnaW4ueSwgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCB0YXJnZXRDb250ZW50
T2Zmc2V0KTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eS5oCmluZGV4IDdlOWIxN2U4Yzk4NTM0ZGM3OTlhNmEwYzE3MzAxZmVi
M2E3ZGE3NGMuLjFkN2JjM2Q2NWU2N2Q3YjBkMzczMjQ5MjQ1ZjE3MzJiMTBiZTcwOTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaApAQCAtMTAwLDcg
KzEwMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0U2Ny
b2xsKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCk7CiAgICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9k
ZURpZEVuZFNjcm9sbChXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpOwogI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCi0gICAgdm9pZCBhZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBp
bmcoQ0dTaXplIG1heFNjcm9sbERpbWVuc2lvbnMsIENHUG9pbnQgdmVsb2NpdHksIENHRmxvYXQg
dG9wSW5zZXQsIENHUG9pbnQqIHRhcmdldENvbnRlbnRPZmZzZXQpOworICAgIHZvaWQgYWRqdXN0
VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxEaW1lbnNpb25z
LCBDR1BvaW50IHZlbG9jaXR5LCBDR0Zsb2F0IHRvcEluc2V0LCBDR1BvaW50IGN1cnJlbnRDb250
ZW50T2Zmc2V0LCBDR1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KTsKICAgICBib29sIGhhc0Fj
dGl2ZVNuYXBQb2ludCgpIGNvbnN0OwogICAgIENHUG9pbnQgbmVhcmVzdEFjdGl2ZUNvbnRlbnRJ
bnNldEFkanVzdGVkU25hcE9mZnNldChDR0Zsb2F0IHRvcEluc2V0LCBjb25zdCBDR1BvaW50Jikg
Y29uc3Q7CiAgICAgYm9vbCBzaG91bGRTZXRTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3Qo
KSBjb25zdDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKICAgICBib29sIHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2Vi
Q29yZTo6U2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGlu
ZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9h
dCB2ZWxvY2l0eSkgY29uc3Q7CisgICAgc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6
U2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBjdXJyZW50U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzY3JvbGxE
ZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHkpIGNvbnN0OwogI2VuZGlmCiAKICAgICB2b2lkIHNl
bmRVSVN0YXRlQ2hhbmdlZElmTmVjZXNzYXJ5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9z
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KaW5kZXggNmVlZjk5ZTJiOGJh
ZTE2NGM4ZDg2ODhiZWU3ZTY3Y2Y2YjZlZTg3Mi4uY2YyZTI1ZGVmMzI3NDRkNDUyYzNiMmRjOTFi
NTc1NDRhYTEwMTQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQpAQCAtMTk2LDE5ICsxOTYsMTkgQEAgdm9pZCBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojplc3RhYmxpc2hMYXllclRyZWVTY3JvbGxpbmdS
ZWxhdGlvbnMoY29uc3QKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRG
b3JTbmFwcGluZyhDR1NpemUgbWF4U2Nyb2xsT2Zmc2V0cywgQ0dQb2ludCB2ZWxvY2l0eSwgQ0dG
bG9hdCB0b3BJbnNldCwgQ0dQb2ludCogdGFyZ2V0Q29udGVudE9mZnNldCkKK3ZvaWQgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNu
YXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxPZmZzZXRzLCBDR1BvaW50IHZlbG9jaXR5LCBDR0Zsb2F0
IHRvcEluc2V0LCBDR1BvaW50IGN1cnJlbnRDb250ZW50T2Zmc2V0LCBDR1BvaW50KiB0YXJnZXRD
b250ZW50T2Zmc2V0KQogewogICAgIC8vIFRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCBtYXhTY3Jv
bGxPZmZzZXRzIGlzIHRvIGVuc3VyZSB0aGF0IHdlIHdvbid0IGludGVyZmVyZSB3aXRoIHJ1YmJl
ci1iYW5kaW5nIHdoZW4gc2Nyb2xsaW5nIHRvIHRoZSBlZGdlIG9mIHRoZSBwYWdlLgogICAgIGlm
IChzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbCkpIHsKICAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uOwot
ICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1fY3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGlu
ZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHRhcmdldENvbnRlbnRPZmZz
ZXQtPngsIHZlbG9jaXR5LngpOworICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRp
b24sIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNl
dEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwsIGN1cnJlbnRDb250ZW50T2Zmc2V0LngsIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9j
aXR5LngpOwogICAgICAgICBpZiAodGFyZ2V0Q29udGVudE9mZnNldC0+eCA+IDAgJiYgdGFyZ2V0
Q29udGVudE9mZnNldC0+eCA8IG1heFNjcm9sbE9mZnNldHMud2lkdGgpCiAgICAgICAgICAgICB0
YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gc3RkOjptaW48ZmxvYXQ+KG1heFNjcm9sbE9mZnNldHMu
d2lkdGgsIHBvdGVudGlhbFNuYXBQb3NpdGlvbik7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZFNu
YXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCkpIHsKICAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAgICAgICBzdGQ6
OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5k
ZXgpID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdGFyZ2V0Q29udGVudE9mZnNldC0+eSwgdmVsb2NpdHku
eSk7CisgICAgICAgIHN0ZDo6dGllKHBvdGVudGlhbFNuYXBQb3NpdGlvbiwgbV9jdXJyZW50VmVy
dGljYWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9s
bGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjdXJyZW50Q29udGVudE9m
ZnNldC55ICsgdG9wSW5zZXQsIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnkpOwog
ICAgICAgICBpZiAobV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCkKICAgICAgICAgICAg
IHBvdGVudGlhbFNuYXBQb3NpdGlvbiAtPSB0b3BJbnNldDsKIApAQCAtMjMyLDcgKzIzMiw3IEBA
IGJvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2hvdWxkU25hcEZvck1haW5G
cmFtZVNjcm9sbGluZyhTY3JvbGxFdmVuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGQ6OnBh
aXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxF
dmVudEF4aXMgYXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KSBj
b25zdAorc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3Jv
bGxpbmcoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGN1cnJlbnRTY3JvbGxPZmZzZXQsIGZs
b2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgY29uc3QKIHsKICAgICBTY3Jv
bGxpbmdUcmVlTm9kZSogcm9vdCA9IG1fc2Nyb2xsaW5nVHJlZS0+cm9vdE5vZGUoKTsKICAgICBB
U1NFUlQocm9vdCAmJiByb290LT5pc0ZyYW1lU2Nyb2xsaW5nTm9kZSgpKTsKQEAgLTI0MCw3ICsy
NDAsOCBAQCBzdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZQogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZz
ZXRzSW5mbyA9IHJvb3RTY3JvbGxpbmdOb2RlLT5zbmFwT2Zmc2V0c0luZm8oKTsKIAogICAgIGZs
b2F0IHNjYWxlZFNjcm9sbERlc3RpbmF0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLyBtX3dlYlBh
Z2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKTsKLSAgICBhdXRvIFtyYXdDbG9zZXN0U25h
cE9mZnNldCwgbmV3SW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4
aXMsIHJvb3RTY3JvbGxpbmdOb2RlLT5sYXlvdXRWaWV3cG9ydCgpLnNpemUoKSwgc2NhbGVkU2Ny
b2xsRGVzdGluYXRpb24sIHZlbG9jaXR5KTsKKyAgICBmbG9hdCBzY2FsZWRDdXJyZW50U2Nyb2xs
T2Zmc2V0ID0gY3VycmVudFNjcm9sbE9mZnNldCAvIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENv
bnRlbnRTY2FsZSgpOworICAgIGF1dG8gW3Jhd0Nsb3Nlc3RTbmFwT2Zmc2V0LCBuZXdJbmRleF0g
PSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgcm9vdFNjcm9sbGluZ05v
ZGUtPmxheW91dFZpZXdwb3J0KCkuc2l6ZSgpLCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiwgdmVs
b2NpdHksIHNjYWxlZEN1cnJlbnRTY3JvbGxPZmZzZXQpOwogICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihyYXdDbG9zZXN0U25hcE9mZnNldCAqIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRl
bnRTY2FsZSgpLCBuZXdJbmRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3Mv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQppbmRleCA2NTY0YjZhMDBh
MTc2YWU1MTE4ZTUyM2U0OTgyOTgyNDc5NmY4YWJmLi4yODRmYjZhYWU0NzViMzRhNmM3NTMxY2M0
MjE5NjRmNDljNTMxNTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCkBAIC0xMDksMTQgKzEwOSwxNCBAQCAt
ICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZp
ZXcgd2l0aFZlbG9jaXR5OihDR1BvaQogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aWV3cG9ydFNp
emUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KENHUmVjdEdldFdpZHRoKFtzY3JvbGxWaWV3IGJvdW5kc10p
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KENHUmVjdEdldEhlaWdodChbc2Nyb2xsVmlldyBib3VuZHNd
KSkpOwogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzSW5mbyA9IF9zY3JvbGxpbmdUcmVlTm9k
ZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc25hcE9mZnNldHNJbmZvKCk7CiAgICAgaWYgKCFz
bmFwT2Zmc2V0c0luZm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAg
ICBhdXRvIFtwb3RlbnRpYWxTbmFwUG9zaXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5j
bG9zZXN0U25hcE9mZnNldChXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHZp
ZXdwb3J0U2l6ZSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCk7CisgICAgICAgIGF1dG8g
W3BvdGVudGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RT
bmFwT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgdmlld3BvcnRT
aXplLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBzY3JvbGxWaWV3LmNvbnRlbnRPZmZz
ZXQueCk7CiAgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRleCk7CiAgICAgICAgIGlm
IChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdldCA8PSBzY3JvbGxWaWV3
LmNvbnRlbnRTaXplLndpZHRoKQogICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9
IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKICAgICB9CiAKICAgICBpZiAoIXNuYXBPZmZzZXRzSW5m
by52ZXJ0aWNhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIFtwb3RlbnRp
YWxTbmFwUG9zaXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNl
dChXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB2aWV3cG9ydFNpemUsIHZlcnRp
Y2FsVGFyZ2V0LCB2ZWxvY2l0eS54KTsKKyAgICAgICAgYXV0byBbcG90ZW50aWFsU25hcFBvc2l0
aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoV2ViQ29yZTo6
U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdmlld3BvcnRTaXplLCB2ZXJ0aWNhbFRhcmdldCwg
dmVsb2NpdHkueSwgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LnkpOwogICAgICAgICBfc2Nyb2xs
aW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNhbFNu
YXBQb2ludEluZGV4KGluZGV4KTsKICAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYg
dmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCiAgICAgICAg
ICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDZhOWYzZTg0NjMxYjBiZTllNmY1OTc0ZDYwZjZmNDkxYmQ1YTg3YmMuLjkzMzhlZTc2YTA5
NjBjZTNhZWE5ZWI0MGNmODU0Y2NlM2UzMDc3NWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAy
MS0wNi0yMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW2lPUyAxNSBSZWdyZXNzaW9uXTogc2Nyb2xsIHBvc2l0aW9uIHJlc2V0cyB3aGVuIHVzaW5n
IHNjcm9sbCBzbmFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjY4MTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5MDgxMzAxPgorCisgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL2lv
cy9zY3JvbGwtc25hcC13aXRoLW1vbWVudHVtLXNjcm9sbC1pbi1tYWluLWZyYW1lLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdp
dGgtbW9tZW50dW0tc2Nyb2xsLWluLW1haW4tZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW92
ZXJmbG93LXNjcm9sbC1hcmVhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9z
Y3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW92ZXJmbG93
LXNjcm9sbC1hcmVhLmh0bWw6IEFkZGVkLgorCiAyMDIxLTA2LTIxICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXByb3ZlIG1vcmUgb2YgdGhlIENTUyBsaXN0IHN0
eWxlIGltcGxlbWVudGF0aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxp
bmcvaW9zL3Njcm9sbC1zbmFwLXdpdGgtbW9tZW50dW0tc2Nyb2xsLWluLW1haW4tZnJhbWUtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvaW9zL3Njcm9sbC1zbmFwLXdp
dGgtbW9tZW50dW0tc2Nyb2xsLWluLW1haW4tZnJhbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgzMzExZTVlNDRjMmJhYWViMmZiMDQzNmFiMWZkMjU2ODM1Y2QwNjQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLXNuYXAtd2l0aC1tb21l
bnR1bS1zY3JvbGwtaW4tbWFpbi1mcmFtZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAor
VmVyaWZpZXMgdGhhdCBhIG1vbWVudHVtIHNjcm9sbCBhbHdheXMgbW92ZXMgdG8gdGhlIG5leHQg
b3IgcHJldmlvdXMgc25hcCBwb3NpdGlvbiBubyBtYXR0ZXIgaG93IGZhciBhd2F5IGl0IGlzLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworRkFJTCBkb2N1bWVudC5ib2R5LnNjcm9s
bFRvcCBzaG91bGQgYmUgNTAwLiBXYXMgMC4KK0ZBSUwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3Ag
c2hvdWxkIGJlIDEwMDAuIFdhcyAwLgorRkFJTCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCBzaG91
bGQgYmUgNTAwLiBXYXMgMC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKK1NvbWUg
dGVzdHMgZmFpbGVkLgorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3Qvc2Nyb2xsaW5nL2lvcy9zY3JvbGwtc25hcC13aXRoLW1vbWVudHVtLXNjcm9sbC1pbi1t
YWluLWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLXNu
YXAtd2l0aC1tb21lbnR1bS1zY3JvbGwtaW4tbWFpbi1mcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRh
ZGYwZDY1MzMyNmU3MGE0MGQxYWIxZjkxMGJjYzlhM2E0YmU5YjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLXNuYXAtd2l0aC1tb21lbnR1
bS1zY3JvbGwtaW4tbWFpbi1mcmFtZS5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBo
dG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBB
c3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZD10cnVlIEFzeW5jRnJhbWVTY3JvbGxpbmdFbmFi
bGVkPXRydWUgXSAtLT4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29u
dGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHVzZXItc2NhbGFibGU9
bm8iPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3Njcmlw
dD4KKzxzdHlsZT4KK2JvZHkgeworICAgIHNjcm9sbC1zbmFwLXR5cGU6IGJvdGggbWFuZGF0b3J5
OworfQorCisuYmxvY2sgeworICAgIGhlaWdodDogNTAwcHg7CisgICAgYm9yZGVyOiAxcHggc29s
aWQgYmxhY2s7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICBzY3JvbGwtc25hcC1h
bGlnbjogc3RhcnQ7Cit9Cis8L3N0eWxlPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cisg
ICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48L2Rp
dj4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0iYmxvY2si
PjwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJi
bG9jayI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAgIDxkaXYgY2xh
c3M9ImJsb2NrIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+CisgICAgPGRp
diBjbGFzcz0iYmxvY2siPjwvZGl2PgorPC9ib2R5PgorCis8c2NyaXB0PgoranNUZXN0SXNBc3lu
YyA9IHRydWU7CisKK2FzeW5jIGZ1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGRlc2NyaXB0aW9u
KCJWZXJpZmllcyB0aGF0IGEgbW9tZW50dW0gc2Nyb2xsIGFsd2F5cyBtb3ZlcyB0byB0aGUgbmV4
dCBvciBwcmV2aW91cyBzbmFwIHBvc2l0aW9uIG5vIG1hdHRlciBob3cgZmFyIGF3YXkgaXQgaXMu
Iik7CisKKyAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhd2FpdCBVSUhlbHBlci5kcmFnRnJvbVBvaW50VG9Qb2ludCgxNTAsIDUwLCAxNTAsIDMwMCwg
MC4xKTsKKyAgICBhd2FpdCBVSUhlbHBlci53YWl0Rm9yVGFyZ2V0U2Nyb2xsQW5pbWF0aW9uVG9T
ZXR0bGUoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCk7CisgICAgc2hvdWxkQmUoImRvY3VtZW50
LmJvZHkuc2Nyb2xsVG9wIiwgIjUwMCIpOworCisgICAgYXdhaXQgVUlIZWxwZXIuZHJhZ0Zyb21Q
b2ludFRvUG9pbnQoMTUwLCA1MCwgMTUwLCAzMDAsIDAuMSk7CisgICAgYXdhaXQgVUlIZWxwZXIu
d2FpdEZvclRhcmdldFNjcm9sbEFuaW1hdGlvblRvU2V0dGxlKGRvY3VtZW50LnNjcm9sbGluZ0Vs
ZW1lbnQpOworICAgIHNob3VsZEJlKCJkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCIsICIxMDAwIik7
CisKKyAgICBhd2FpdCBVSUhlbHBlci5kcmFnRnJvbVBvaW50VG9Qb2ludCgxNTAsIDEwLCAxNTAs
IDM1MCwgMC4xKTsKKyAgICBhd2FpdCBVSUhlbHBlci53YWl0Rm9yVGFyZ2V0U2Nyb2xsQW5pbWF0
aW9uVG9TZXR0bGUoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCk7CisgICAgc2hvdWxkQmUoImRv
Y3VtZW50LmJvZHkuc2Nyb2xsVG9wIiwgIjUwMCIpOworICAgZmluaXNoSlNUZXN0KCk7Cit9Cis8
L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5n
L2lvcy9zY3JvbGwtc25hcC13aXRoLW1vbWVudHVtLXNjcm9sbC1pbi1vdmVyZmxvdy1zY3JvbGwt
YXJlYS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xs
LXNuYXAtd2l0aC1tb21lbnR1bS1zY3JvbGwtaW4tb3ZlcmZsb3ctc2Nyb2xsLWFyZWEtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhjZGFmMTg3MGRiNDRjYTQxYTIxNjQwNjNjM2YxYmUwNGVlNzEw
ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Ny
b2xsLXNuYXAtd2l0aC1tb21lbnR1bS1zY3JvbGwtaW4tb3ZlcmZsb3ctc2Nyb2xsLWFyZWEtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1ZlcmlmaWVzIHRoYXQgYSBtb21lbnR1bSBzY3Jv
bGwgYWx3YXlzIG1vdmVzIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHNuYXAgcG9zaXRpb24gbm8g
bWF0dGVyIGhvdyBmYXIgYXdheSBpdCBpcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xsVG9wIGlzIDEwMDAKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xs
VG9wIGlzIDY1MDAKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xsVG9wIGlzIDEwMDAKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLXNuYXAtd2l0aC1tb21lbnR1bS1zY3Jv
bGwtaW4tb3ZlcmZsb3ctc2Nyb2xsLWFyZWEuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xs
aW5nL2lvcy9zY3JvbGwtc25hcC13aXRoLW1vbWVudHVtLXNjcm9sbC1pbi1vdmVyZmxvdy1zY3Jv
bGwtYXJlYS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyOTdhOTgxODM4MzRmZmJhYzk2OTY3NmZhZmJmYTU3
NjdlNmJiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9p
b3Mvc2Nyb2xsLXNuYXAtd2l0aC1tb21lbnR1bS1zY3JvbGwtaW4tb3ZlcmZsb3ctc2Nyb2xsLWFy
ZWEuaHRtbApAQCAtMCwwICsxLDU4IEBACis8IURPQ1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgQXN5bmNPdmVyZmxvd1Njcm9sbGlu
Z0VuYWJsZWQ9dHJ1ZSBBc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZD10cnVlIF0gLS0+Cis8aHRt
bD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13
aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCB1c2VyLXNjYWxhYmxlPW5vIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vcmVzb3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c3R5bGU+Cisjc2Nyb2xs
ZXIgeworICAgIG92ZXJmbG93OiBzY3JvbGw7CisgICAgc2Nyb2xsLXNuYXAtdHlwZTogYm90aCBt
YW5kYXRvcnk7CisgICAgd2lkdGg6IDUwMHB4OworICAgIGhlaWdodDogNTAwcHg7Cit9CisKKy5i
bG9jayB7CisgICAgaGVpZ2h0OiA1MDBweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsK
KyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFy
dDsKK30KKzwvc3R5bGU+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8ZGl2IGlk
PSJzY3JvbGxlciI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48L2Rpdj4KKyAgICAgICAg
PGRpdiBzdHlsZT0iaGVpZ2h0OiA1MDBweCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJs
b2NrIj48L2Rpdj4KKyAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OiA1MDAwcHgiPjwvZGl2Pgor
ICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJs
b2NrIj48L2Rpdj4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKworPHNjcmlwdD4KK2pzVGVzdElzQXN5
bmMgPSB0cnVlOworCithc3luYyBmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBkZXNjcmlwdGlv
bigiVmVyaWZpZXMgdGhhdCBhIG1vbWVudHVtIHNjcm9sbCBhbHdheXMgbW92ZXMgdG8gdGhlIG5l
eHQgb3IgcHJldmlvdXMgc25hcCBwb3NpdGlvbiBubyBtYXR0ZXIgaG93IGZhciBhd2F5IGl0IGlz
LiIpOworCisgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXdhaXQgVUlIZWxwZXIuZHJhZ0Zyb21Qb2ludFRvUG9pbnQoMTUwLCAzMjAsIDE1MCwgMzAw
LCAwLjAxKTsKKyAgICBhd2FpdCBVSUhlbHBlci53YWl0Rm9yVGFyZ2V0U2Nyb2xsQW5pbWF0aW9u
VG9TZXR0bGUoc2Nyb2xsZXIpOworICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxUb3AiLCAi
MTAwMCIpOworCisgICAgYXdhaXQgVUlIZWxwZXIuZHJhZ0Zyb21Qb2ludFRvUG9pbnQoMTUwLCAz
MjAsIDE1MCwgMzAwLCAwLjAxKTsKKyAgICBhd2FpdCBVSUhlbHBlci53YWl0Rm9yVGFyZ2V0U2Ny
b2xsQW5pbWF0aW9uVG9TZXR0bGUoc2Nyb2xsZXIpOworICAgIHNob3VsZEJlKCJzY3JvbGxlci5z
Y3JvbGxUb3AiLCAiNjUwMCIpOworCisgICAgYXdhaXQgVUlIZWxwZXIuZHJhZ0Zyb21Qb2ludFRv
UG9pbnQoMTUwLCAzMDAsIDE1MCwgMzIwLCAwLjAxKTsKKyAgICBhd2FpdCBVSUhlbHBlci53YWl0
Rm9yVGFyZ2V0U2Nyb2xsQW5pbWF0aW9uVG9TZXR0bGUoc2Nyb2xsZXIpOworICAgIHNob3VsZEJl
KCJzY3JvbGxlci5zY3JvbGxUb3AiLCAiMTAwMCIpOworICAgZmluaXNoSlNUZXN0KCk7Cit9Cis8
L3NjcmlwdD4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>