<?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>195278</bug_id>
          
          <creation_ts>2019-03-04 08:11:03 -0800</creation_ts>
          <short_desc>Add testing API to hit-test and scroll overflow scrollers</short_desc>
          <delta_ts>2019-03-11 22:00:26 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>koivisto</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1512164</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-04 08:11:03 -0800</bug_when>
    <thetext>Existing tests use UI scripting, which is clumsy and slow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512178</commentid>
    <comment_count>1</comment_count>
      <attachid>363516</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-04 08:44:42 -0800</bug_when>
    <thetext>Created attachment 363516
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512623</commentid>
    <comment_count>2</comment_count>
      <attachid>363516</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2019-03-05 06:09:04 -0800</bug_when>
    <thetext>Comment on attachment 363516
patch

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

This looks good to me and would definitely allow to write more reliable tests. The only thing I wonder is whether new code should be behind a compilation flag so that it is only enabled for developer builds?

&gt; Source/WebCore/testing/Internals.cpp:1713
&gt; +    auto&amp; scrollingCoordinator = downcast&lt;AsyncScrollingCoordinator&gt;(*document-&gt;page()-&gt;scrollingCoordinator());

It seems that the Windows bots don&apos;t like this. No idea why... Maybe you need to protect some stuff with ENABLE(ASYNC_SCROLLING)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512665</commentid>
    <comment_count>3</comment_count>
      <attachid>363516</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-05 09:30:10 -0800</bug_when>
    <thetext>Comment on attachment 363516
patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        It would be useful to be able to test delegated user scrolling without using clumsy and slow UI scripting.

slow!?

&gt; Source/WebCore/ChangeLog:14
&gt; +        This mechanism currently supports subframes and overflow scrolling on iOS.

Will it support main frame scrolling, and macOS too?

&gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp:221
&gt; +void ScrollingStateScrollingNode::setRequestedDelegatedScrollPositionForTesting(const FloatPoint&amp; requestedDelegatedScrollPositionForTesting)
&gt; +{
&gt; +    m_requestedDelegatedScrollPositionForTesting = requestedDelegatedScrollPositionForTesting;
&gt; +    setPropertyChanged(RequestedDelegatedScrollPositionForTesting);
&gt; +}

I don&apos;t think doing this via a scrolling tree commit is the right approach. This will trigger a commit of any dirty state in the scrolling state tree, which may mask bugs.

I think we want to simulate a user scroll more directly. On iOS, this should actually scroll the UIScrollVIew, which would trigger the wasScrolledByDelegatedScrolling() code path. On macOS, it would enter the code path that is called form handling wheel events. I think we also want this test mode to disable messaging back to the main thread/UI process.

So I think we do need UIScriptController on iOS (and maybe macOS too), in conjunction with something that cuts of the dispatch in ThreadedScrollingTree::scrollingTreeNodeDidScroll() (macOS) and calling the scrolling coordinator in RemoteScrollingTree::scrollingTreeNodeDidScroll (iOS).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512745</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-05 11:58:09 -0800</bug_when>
    <thetext>&gt; slow!?

Yes, because swipe based scrolling needs long wait times stabilize. See the existing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512746</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-05 11:58:18 -0800</bug_when>
    <thetext>*to stabilize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512751</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-05 12:05:24 -0800</bug_when>
    <thetext>&gt; I think we want to simulate a user scroll more directly. On iOS, this should
&gt; actually scroll the UIScrollVIew, which would trigger the
&gt; wasScrolledByDelegatedScrolling() code path. On macOS, it would enter the
&gt; code path that is called form handling wheel events.

This patch does scroll UIScrollView on iOS triggering wasScrolledByDelegatedScrolling.

Mac support would be a separate patch.

&gt; I think we also want
&gt; this test mode to disable messaging back to the main thread/UI process.

Separate API and a separate patch.

&gt; So I think we do need UIScriptController on iOS (and maybe macOS too), in
&gt; conjunction with something that cuts of the dispatch in
&gt; ThreadedScrollingTree::scrollingTreeNodeDidScroll() (macOS) and calling the
&gt; scrolling coordinator in RemoteScrollingTree::scrollingTreeNodeDidScroll
&gt; (iOS).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512769</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-05 12:51:53 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #4)
&gt; &gt; slow!?
&gt; 
&gt; Yes, because swipe based scrolling needs long wait times stabilize. See the
&gt; existing tests.

It could be an instantaneous &quot;scroll to&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512770</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-05 12:52:50 -0800</bug_when>
    <thetext>UIScriptController already has immediateScrollToOffset(). It just needs a Frame or Document parameter, and some &quot;don&apos;t sync&quot; smarts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512772</commentid>
    <comment_count>9</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2019-03-05 13:00:12 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #8)
&gt; UIScriptController already has immediateScrollToOffset(). It just needs a
&gt; Frame or Document parameter, and some &quot;don&apos;t sync&quot; smarts.

Interesting. Does it work for overflow scroll? Does it allow to test UI =&gt; Web process sync?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512780</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-05 13:08:56 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #8)
&gt; UIScriptController already has immediateScrollToOffset(). It just needs a
&gt; Frame or Document parameter, and some &quot;don&apos;t sync&quot; smarts.

Any UIScriptController based API should probably take a point instead of Frame or Document so it also covers hit testing (can Frames and Documents even be reasonably passed to UIScriptController?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512811</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-05 13:44:55 -0800</bug_when>
    <thetext>I&apos;d rather the hit testing be a separate entry point. It&apos;s much easier to write a test that says &quot;scroll element E&quot; rathe than figuring out coords for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512840</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-05 14:36:51 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #11)
&gt; I&apos;d rather the hit testing be a separate entry point. It&apos;s much easier to
&gt; write a test that says &quot;scroll element E&quot; rathe than figuring out coords for
&gt; it.

Sure, thus this patch. 

It is unclear to me how to make DOM objects like Element available to UIScriptController. There are no existing examples. Since it is your baby I think you&apos;ll get the honours of implementing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1514872</commentid>
    <comment_count>13</comment_count>
      <attachid>364271</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-11 10:55:42 -0700</bug_when>
    <thetext>Created attachment 364271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515271</commentid>
    <comment_count>14</comment_count>
      <attachid>364271</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-11 21:59:42 -0700</bug_when>
    <thetext>Comment on attachment 364271
Patch

Clearing flags on attachment: 364271

Committed r242773: &lt;https://trac.webkit.org/changeset/242773&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515272</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-11 21:59:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515273</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-11 22:00:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/48797504&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363516</attachid>
            <date>2019-03-04 08:44:42 -0800</date>
            <delta_ts>2019-03-11 10:55:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>user-scroll-position-testing-4.patch</filename>
            <type>text/plain</type>
            <size>18938</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MjM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE5LTAzLTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgSW50ZXJuYWxzIEFQSSB0
byBzaW11bGF0ZSBkZWxlZ2F0ZWQgdXNlciBzY3JvbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTI3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IHdvdWxkIGJlIHVzZWZ1bCB0byBiZSBhYmxlIHRv
IHRlc3QgZGVsZWdhdGVkIHVzZXIgc2Nyb2xsaW5nIHdpdGhvdXQgdXNpbmcgY2x1bXN5IGFuZCBz
bG93IFVJIHNjcmlwdGluZy4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgSW50ZXJuYWxzLnNl
dERlbGVnYXRlZFNjcm9sbFBvc2l0aW9uIHRlc3RpbmcgZnVuY3Rpb24uIENhbGxpbmcgaXQgY2hh
bmdlcyB0aGUgZGVsZWdhdGVkCisgICAgICAgIChVSVNjcm9sbFZpZXcpIHNjcm9sbCBwb3NpdGlv
biB3aXRob3V0IHRyaWdnZXJpbmcgYW55IG9mIHRoZSBjb2RlIGludm9sdmVkIGluIG5vcm1hbCB3
ZWIgcHJvY2VzcyByZXF1ZXN0ZWQKKyAgICAgICAgc2Nyb2xsaW5nLiBUaGUgc2Nyb2xsIGRlbGVn
YXRlIChzY3JvbGxWaWV3RGlkU2Nyb2xsOikgZ2V0cyB0cmlnZ2VyZWQgYXMgaWYgdXNlciBoYWQg
c2Nyb2xsZWQgdGhlIHZpZXcuCisKKyAgICAgICAgVGhpcyBtZWNoYW5pc20gY3VycmVudGx5IHN1
cHBvcnRzIHN1YmZyYW1lcyBhbmQgb3ZlcmZsb3cgc2Nyb2xsaW5nIG9uIGlPUy4KKworICAgICAg
ICBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgZmV3IHNpbXBsZSB0ZXN0cyB1c2luZyB0aGUgbWVjaGFu
aXNtLgorCisgICAgICAgIFRlc3RzOiBmYXN0L3Njcm9sbGluZy9pb3MvdXNlci1mcmFtZS1zY3Jv
bGxpbmctdGlsZS11cGRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9zY3JvbGxpbmcvaW9z
L3VzZXItb3ZlcmZsb3ctc2Nyb2xsaW5nLXRpbGUtdXBkYXRlLmh0bWwKKworICAgICAgICAqIHBh
Z2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpz
ZXRSZXF1ZXN0ZWREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcpOgorCisgICAgICAg
IFRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gaXMgcGFzc2VkIGluIHNjcm9sbGluZyBzdGF0ZSBub2Rl
LgorCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnJlcXVl
c3RlZERlbGVnYXRlZFNjcm9sbFBvc2l0aW9uRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRE
ZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTktMDMtMDQgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBidWlsZC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMjQyMzQxKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3
IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFRpbGVkQmFja2luZyogdGlsZWRCYWNr
aW5nKCkgY29uc3QgZmluYWw7CiAKLSAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlE
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xsaW5nTm9kZUlEIHNj
cm9sbGluZ05vZGVJRCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFNjcm9sbGFibGVBcmVhKiBzY3Jv
bGxhYmxlQXJlYUZvclNjcm9sbExheWVySUQodWludDY0X3QpIGNvbnN0OwogICAgIGJvb2wgdXNl
c0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNDIzNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9B
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAwLDYgKzgw
MCwxNSBAQCB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlcG9ydFN5CiAgICAgICAg
IG1fcGFnZS0+cGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50KCktPmxvZ1Njcm9sbGluZ0V2ZW50KFBl
cmZvcm1hbmNlTG9nZ2luZ0NsaWVudDo6U2Nyb2xsaW5nRXZlbnQ6OlN3aXRjaGVkU2Nyb2xsaW5n
TW9kZSwgdGltZXN0YW1wLCByZWFzb25zKTsKIH0KIAordm9pZCBBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzZXREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcoU2Nyb2xsaW5nTm9k
ZUlEIHNjcm9sbGluZ05vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAg
YXV0byogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zdGF0ZU5vZGVGb3JJRChzY3JvbGxp
bmdOb2RlSUQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHNj
cm9sbGluZ05vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+KCpub2Rl
KTsKKyAgICBzY3JvbGxpbmdOb2RlLnNldFJlcXVlc3RlZERlbGVnYXRlZFNjcm9sbFBvc2l0aW9u
Rm9yVGVzdGluZyhwb3NpdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oCShy
ZXZpc2lvbiAyNDIzNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgcHVi
bGljOgogICAgIHZvaWQgcmVwb3J0RXhwb3NlZFVuZmlsbGVkQXJlYShNb25vdG9uaWNUaW1lLCB1
bnNpZ25lZCB1bmZpbGxlZEFyZWEpOwogICAgIHZvaWQgcmVwb3J0U3luY2hyb25vdXNTY3JvbGxp
bmdSZWFzb25zQ2hhbmdlZChNb25vdG9uaWNUaW1lLCBTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNv
bnMpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlv
bkZvclRlc3RpbmcoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBGbG9hdFBvaW50Jik7CisKIHByb3Rl
Y3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2Uq
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCShyZXZpc2lvbiAyNDIzNDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3QKICAgICAsIG1fcGFyZW50UmVsYXRpdmVTY3JvbGxhYmxl
UmVjdChzdGF0ZU5vZGUucGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCgpKQogICAgICwgbV9z
Y3JvbGxQb3NpdGlvbihzdGF0ZU5vZGUuc2Nyb2xsUG9zaXRpb24oKSkKICAgICAsIG1fcmVxdWVz
dGVkU2Nyb2xsUG9zaXRpb24oc3RhdGVOb2RlLnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpCisg
ICAgLCBtX3JlcXVlc3RlZERlbGVnYXRlZFNjcm9sbFBvc2l0aW9uRm9yVGVzdGluZyhzdGF0ZU5v
ZGUucmVxdWVzdGVkRGVsZWdhdGVkU2Nyb2xsUG9zaXRpb25Gb3JUZXN0aW5nKCkpCiAgICAgLCBt
X3Njcm9sbE9yaWdpbihzdGF0ZU5vZGUuc2Nyb2xsT3JpZ2luKCkpCiAjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKICAgICAsIG1fc25hcE9mZnNldHNJbmZvKHN0YXRlTm9kZS5tX3NuYXBPZmZz
ZXRzSW5mbykKQEAgLTIxMyw2ICsyMTQsMTIgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OnNldFJlcQogICAgIHNldFByb3BlcnR5Q2hhbmdlZChSZXF1ZXN0ZWRTY3JvbGxQb3Np
dGlvbik7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRSZXF1ZXN0
ZWREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcoY29uc3QgRmxvYXRQb2ludCYgcmVx
dWVzdGVkRGVsZWdhdGVkU2Nyb2xsUG9zaXRpb25Gb3JUZXN0aW5nKQoreworICAgIG1fcmVxdWVz
dGVkRGVsZWdhdGVkU2Nyb2xsUG9zaXRpb25Gb3JUZXN0aW5nID0gcmVxdWVzdGVkRGVsZWdhdGVk
U2Nyb2xsUG9zaXRpb25Gb3JUZXN0aW5nOworICAgIHNldFByb3BlcnR5Q2hhbmdlZChSZXF1ZXN0
ZWREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcpOworfQorCiB2b2lkIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0RXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcihib29s
IGV4cGVjdHNUZXN0VHJpZ2dlcikKIHsKICAgICBpZiAoZXhwZWN0c1Rlc3RUcmlnZ2VyID09IG1f
ZXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5o
CShyZXZpc2lvbiAyNDIzNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFNjcm9sbE9yaWdpbiwKICAgICAgICAgU2Nyb2xsYWJsZUFyZWFQ
YXJhbXMsCiAgICAgICAgIFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uLAorICAgICAgICBSZXF1ZXN0
ZWREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcsCiAjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKICAgICAgICAgSG9yaXpvbnRhbFNuYXBPZmZzZXRzLAogICAgICAgICBWZXJ0aWNh
bFNuYXBPZmZzZXRzLApAQCAtMTA2LDYgKzEwNyw5IEBAIHB1YmxpYzoKICAgICBib29sIHJlcXVl
c3RlZFNjcm9sbFBvc2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Ny
b2xsOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKTsK
IAorICAgIGNvbnN0IEZsb2F0UG9pbnQmIHJlcXVlc3RlZERlbGVnYXRlZFNjcm9sbFBvc2l0aW9u
Rm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdGVkRGVsZWdhdGVkU2Nyb2xsUG9z
aXRpb25Gb3JUZXN0aW5nOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZXF1ZXN0ZWRE
ZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcoY29uc3QgRmxvYXRQb2ludCYpOworCiAg
ICAgYm9vbCBleHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9l
eHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRFeHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyKGJvb2wpOwogCkBAIC0xMzEsNiArMTM1LDcg
QEAgcHJpdmF0ZToKICAgICBMYXlvdXRSZWN0IG1fcGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVj
dDsKICAgICBGbG9hdFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX3Jl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uOworICAgIEZsb2F0UG9pbnQgbV9yZXF1ZXN0ZWREZWxlZ2F0
ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3Rpbmc7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47
CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBTY3JvbGxTbmFwT2Zmc2V0c0luZm88
ZmxvYXQ+IG1fc25hcE9mZnNldHNJbmZvOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAkocmV2aXNpb24gMjQyMzQxKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQWN0
aXZpdHlTdGF0ZS5oIgogI2luY2x1ZGUgIkFuaW1hdGlvblRpbWVsaW5lLmgiCiAjaW5jbHVkZSAi
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgiCiAjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCiAjaW5jbHVkZSAiQXV0b2ZpbGwu
aCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKQEAgLTE0Niw3ICsxNDcsNiBA
QAogI2luY2x1ZGUgIlNXQ2xpZW50Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lz
dHJ5LmgiCiAjaW5jbHVkZSAiU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdNb21lbnR1bUNh
bGN1bGF0b3IuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgpAQCAtMTY4NSw2ICsxNjg1LDM1IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IEludGVybmFsczo6dW5jb25zdHJhaW4KICAgICByZXR1cm4geyB9OwogfQogCit2b2lkIElu
dGVybmFsczo6c2V0RGVsZWdhdGVkU2Nyb2xsUG9zaXRpb24oTm9kZSYgbm9kZSwgZmxvYXQgeCwg
ZmxvYXQgeSkKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsK
KworICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQgPSAwOworCisgICAgaWYgKGlz
PEhUTUxJRnJhbWVFbGVtZW50Pihub2RlKSkgeworICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3
ID0gZG93bmNhc3Q8SFRNTElGcmFtZUVsZW1lbnQ+KG5vZGUpLmNvbnRlbnRGcmFtZSgpLT52aWV3
KCkpCisgICAgICAgICAgICBzY3JvbGxpbmdOb2RlSUQgPSBmcmFtZVZpZXctPnNjcm9sbGluZ05v
ZGVJRCgpOworICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIGlm
IChhdXRvKiBmcmFtZVZpZXcgPSBkb2N1bWVudC0+dmlldygpKQorICAgICAgICAgICAgc2Nyb2xs
aW5nTm9kZUlEID0gZnJhbWVWaWV3LT5zY3JvbGxpbmdOb2RlSUQoKTsKKyAgICB9IGVsc2UgaWYg
KGlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGVs
ZW1lbnQucmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IGRvd25j
YXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCplbGVtZW50LnJlbmRlcmVyKCkpLmxheWVyKCkp
CisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nTm9kZUlEID0gbGF5ZXItPmJhY2tpbmcoKSA/IGxh
eWVyLT5iYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9u
Um9sZTo6U2Nyb2xsaW5nKSA6IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXNjcm9s
bGluZ05vZGVJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSBkb3duY2FzdDxBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yPigqZG9jdW1lbnQtPnBh
Z2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSk7CisgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
c2V0RGVsZWdhdGVkU2Nyb2xsUG9zaXRpb25Gb3JUZXN0aW5nKHNjcm9sbGluZ05vZGVJRCwge3gs
IHl9KTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPERPTVJlY3Q+PiBJbnRlcm5hbHM6OmxheW91dFZp
ZXdwb3J0UmVjdCgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHJldmlzaW9uIDI0MjM0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI0MCw2ICsyNDAsNyBAQCBwdWJsaWM6CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTY3Jv
bGxWaWV3UG9zaXRpb24oaW50IHgsIGludCB5KTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiB1bmNv
bnN0cmFpbmVkU2Nyb2xsVG8oRWxlbWVudCYsIGRvdWJsZSB4LCBkb3VibGUgeSk7CisgICAgdm9p
ZCBzZXREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbihOb2RlJiwgZmxvYXQgeCwgZmxvYXQgeSk7CiAK
ICAgICBFeGNlcHRpb25PcjxSZWY8RE9NUmVjdD4+IGxheW91dFZpZXdwb3J0UmVjdCgpOwogICAg
IEV4Y2VwdGlvbk9yPFJlZjxET01SZWN0Pj4gdmlzdWFsVmlld3BvcnRSZWN0KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAyNDIzNDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1OSw2
ICsyNTksOCBAQCBlbnVtIENvbXBvc2l0aW5nUG9saWN5IHsKICAgICAvLyBMaWtlIEVsZW1lbnQu
c2Nyb2xsVG8oKSwgYnV0IHdpdGhvdXQgY29uc3RhaW50cywgZm9yIHRlc3RpbmcgcnViYmVyLWJh
bmRpbmcuCiAgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIHVuY29uc3RyYWluZWRTY3JvbGxU
byhFbGVtZW50IGVsZW1lbnQsIHVucmVzdHJpY3RlZCBkb3VibGUgeCwgdW5yZXN0cmljdGVkIGRv
dWJsZSB5KTsKIAorICAgIHZvaWQgc2V0RGVsZWdhdGVkU2Nyb2xsUG9zaXRpb24oTm9kZSBub2Rl
LCB1bnJlc3RyaWN0ZWQgZmxvYXQgeCwgdW5yZXN0cmljdGVkIGZsb2F0IHkpOworCiAgICAgW01h
eVRocm93RXhjZXB0aW9uXSBET01SZWN0IGxheW91dFZpZXdwb3J0UmVjdCgpOwogICAgIFtNYXlU
aHJvd0V4Y2VwdGlvbl0gRE9NUmVjdCB2aXN1YWxWaWV3cG9ydFJlY3QoKTsKIApJbmRleDogU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI0MjM1NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTktMDMtMDQgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBJbnRlcm5hbHMgQVBJIHRvIHNpbXVsYXRlIGRl
bGVnYXRlZCB1c2VyIHNjcm9sbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk1Mjc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU+OjplbmNvZGUpOgorICAgICAgICAoQXJndW1lbnRDb2RlcjxTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+OjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKC1bV0tQcmVmZXJlbmNlcyBzZXRT
YWZlQnJvd3NpbmdFbmFibGVkOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW06CisgICAgICAg
IChXZWJLaXQ6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OmNvbW1pdFN0
YXRlQWZ0ZXJDaGlsZHJlbik6CisKIDIwMTktMDMtMDQgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNh
dGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdIEVuYWJsZSB3ZWIgcHJvY2VzcyBz
YW5kYm94CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
VHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAyNDIzNDEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q3VycmVudFZlcnRpY2FsU25hcE9mZnNldEluZGV4LCBjdXJy
ZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCkKICNlbmRpZgogICAgIFNDUk9MTElOR19OT0RFX0VO
Q09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhUGFyYW1zLCBz
Y3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMpCisgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkRGVsZWdhdGVkU2Nyb2xsUG9zaXRpb25G
b3JUZXN0aW5nLCByZXF1ZXN0ZWREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcpCiAg
ICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24sIHJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQogICAgIFNDUk9M
TElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNj
cm9sbFBvc2l0aW9uLCByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFtbWF0
aWNTY3JvbGwpCiAKQEAgLTIyOSw3ICsyMzAsOCBAQCBib29sIEFyZ3VtZW50Q29kZXI8U2Nyb2xs
aW5nU3RhdGVTY3JvbGxpCiAgICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6Q3VycmVudFZlcnRpY2FsU25hcE9mZnNldEluZGV4LCB1bnNpZ25lZCwg
c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgpOwogI2VuZGlmCiAgICAgU0NST0xMSU5H
X05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQ
YXJhbXMsIFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycywgc2V0U2Nyb2xsYWJsZUFyZWFQYXJhbWV0
ZXJzKTsKLSAgICAKKyAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpSZXF1ZXN0ZWREZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcsIEZs
b2F0UG9pbnQsIHNldFJlcXVlc3RlZERlbGVnYXRlZFNjcm9sbFBvc2l0aW9uRm9yVGVzdGluZyk7
CisKICAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikpIHsKICAgICAgICAgRmxvYXRQb2ludCBz
Y3JvbGxQb3NpdGlvbjsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzY3JvbGxQb3NpdGlv
bikpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCShyZXZpc2lvbiAyNDIzNDEpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsOCBAQCB2b2lk
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJCiAgICAgICAgIHx8IHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpUb3RhbENvbnRlbnRzU2l6ZSkKICAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0No
YW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRl
bnRzU2l6ZSkKICAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uKQotICAgICAgICB8
fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKSkgeworICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
T3JpZ2luKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkRGVsZWdhdGVkU2Nyb2xsUG9z
aXRpb25Gb3JUZXN0aW5nKSkgewogICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
ICAgICAgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3Jv
bGxMYXllcigpIGRlbGVnYXRlXTsKICAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9m
Q2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOwpAQCAtMjU5LDYgKzI2MCwxMiBAQCB2b2lkIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJCiAgICAgICAgICAgICBzY3JvbGxWaWV3
LmNvbnRlbnRJbnNldCA9IGluc2V0czsKICAgICAgICAgfQogCisgICAgICAgIGlmIChzY3JvbGxp
bmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6UmVxdWVzdGVkRGVsZWdhdGVkU2Nyb2xsUG9zaXRpb25Gb3JUZXN0aW5nKSkgeworICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzY3JvbGxWaWV3ID0gcmV0YWluUHRyKHNj
cm9sbFZpZXcpLCBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGluZ1N0YXRlTm9kZS5yZXF1ZXN0ZWRE
ZWxlZ2F0ZWRTY3JvbGxQb3NpdGlvbkZvclRlc3RpbmcoKV0geworICAgICAgICAgICAgICAgIHNj
cm9sbFZpZXcuZ2V0KCkuY29udGVudE9mZnNldCA9IHNjcm9sbFBvc2l0aW9uOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgICAg
IC8vIEZJWE1FOiBJZiBvbmx5IG9uZSBheGlzIHNuYXBzIGluIDJEIHNjcm9sbGluZywgdGhlIG90
aGVyIGF4aXMgd2lsbCBkZWNlbGVyYXRlIGZhc3QgYXMgd2VsbC4gSXMgdGhpcyB3aGF0IHdlIHdh
bnQ/CiAgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzKSB8fCBzY3Jv
bGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDIzNDEpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxOS0wMy0wNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIEludGVybmFscyBBUEkgdG8gc2ltdWxhdGUgZGVsZWdhdGVkIHVzZXIgc2Nyb2xsCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTUyNzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qvc2Nyb2xs
aW5nL2lvcy91c2VyLWZyYW1lLXNjcm9sbGluZy10aWxlLXVwZGF0ZS1leHBlY3RlZC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9pb3MvdXNlci1mcmFtZS1zY3JvbGxpbmct
dGlsZS11cGRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvaW9zL3Vz
ZXItb3ZlcmZsb3ctc2Nyb2xsaW5nLXRpbGUtdXBkYXRlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL2lvcy91c2VyLW92ZXJmbG93LXNjcm9sbGluZy10aWxl
LXVwZGF0ZS5odG1sOiBBZGRlZC4KKwogMjAxOS0wMy0wMiAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBTaGFyZSBtb3JlIGNvZGUgZm9yIHVwZGF0aW5n
IHRoZSBzdGF0ZSBvZiBmcmFtZSBzY3JvbGxpbmcgbm9kZXMKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvc2Nyb2xsaW5nL2lvcy91c2VyLWZyYW1lLXNjcm9sbGluZy10aWxlLXVwZGF0ZS1leHBlY3Rl
ZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lvcy91c2Vy
LWZyYW1lLXNjcm9sbGluZy10aWxlLXVwZGF0ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lvcy91c2VyLWZyYW1lLXNjcm9sbGluZy10
aWxlLXVwZGF0ZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAor
PGlmcmFtZSBpZD10ZXN0ZnJhbWUgd2lkdGg9MzAwIGhlaWdodD0zMDAgZnJhbWVib3JkZXI9bm9u
ZSBzcmNkb2M9IgorICAgIDxib2R5IHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuO2hlaWdo
dDoyNTAwcHg7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjBweCc+CisiPgorPGlmcmFtZT4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lvcy91c2VyLWZyYW1lLXNjcm9sbGluZy10
aWxlLXVwZGF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5n
L2lvcy91c2VyLWZyYW1lLXNjcm9sbGluZy10aWxlLXVwZGF0ZS5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lvcy91c2VyLWZyYW1lLXNjcm9sbGluZy10
aWxlLXVwZGF0ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIGludGVybmFs
cy5zZXR0aW5ncy5zZXRBc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCh0cnVlKTsKK30KK2Z1bmN0
aW9uIHRlc3QoKSB7CisgICAgaW50ZXJuYWxzLnNldERlbGVnYXRlZFNjcm9sbFBvc2l0aW9uKHRl
c3RmcmFtZSwgMCwgMjAwMCk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0idGVzdCgpIj4K
KzxpZnJhbWUgaWQ9dGVzdGZyYW1lIHdpZHRoPTMwMCBoZWlnaHQ9MzAwIGZyYW1lYm9yZGVyPW5v
bmUgc3JjZG9jPSIKKyAgICA8Ym9keSBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjpyZWQ7aGVpZ2h0
OjIzMDBweDtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MHB4Jz4KKyAgICBGQUlMCisgICAgPGRp
diBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjpncmVlbjt3aWR0aDozMDBweDtoZWlnaHQ6MzAwcHg7
cG9zaXRpb246YWJzb2x1dGU7bGVmdDowcHg7Ym90dG9tOjBweCc+PC9kaXY+CisiPgorPC9pZnJh
bWU+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3MvdXNlci1vdmVyZmxvdy1z
Y3JvbGxpbmctdGlsZS11cGRhdGUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3Njcm9sbGluZy9pb3MvdXNlci1vdmVyZmxvdy1zY3JvbGxpbmctdGlsZS11cGRh
dGUtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3Njcm9s
bGluZy9pb3MvdXNlci1vdmVyZmxvdy1zY3JvbGxpbmctdGlsZS11cGRhdGUtZXhwZWN0ZWQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGRpdiBz
dHlsZT0id2lkdGg6MzAwcHg7aGVpZ2h0OjMwMHB4O2JhY2tncm91bmQtY29sb3I6Z3JlZW4iPjwv
ZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvaW9zL3VzZXItb3ZlcmZsb3ct
c2Nyb2xsaW5nLXRpbGUtdXBkYXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9zY3JvbGxpbmcvaW9zL3VzZXItb3ZlcmZsb3ctc2Nyb2xsaW5nLXRpbGUtdXBkYXRlLmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvaW9zL3VzZXItb3Zl
cmZsb3ctc2Nyb2xsaW5nLXRpbGUtdXBkYXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KSB7CisgICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldEFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFi
bGVkKHRydWUpOworfQorZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBpbnRlcm5hbHMuc2V0RGVsZWdh
dGVkU2Nyb2xsUG9zaXRpb24odGVzdGVsZW1lbnQsIDAsIDIwMDApOworfQorPC9zY3JpcHQ+Cis8
Ym9keSBvbmxvYWQ9InRlc3QoKSI+Cis8ZGl2IGlkPXRlc3RlbGVtZW50IHN0eWxlPSJ3aWR0aDoz
MDBweDtoZWlnaHQ6MzAwcHg7b3ZlcmZsb3c6c2Nyb2xsIj4KKzxkaXYgc3R5bGU9J2JhY2tncm91
bmQtY29sb3I6cmVkO2hlaWdodDoyMzAwcHg7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjBweCc+
CisgICAgPGRpdiBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjpncmVlbjt3aWR0aDozMDBweDtoZWln
aHQ6MzAwcHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowcHg7Ym90dG9tOjBweCc+PC9kaXY+Cis8
L2Rpdj4KKzwvZGl2Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364271</attachid>
            <date>2019-03-11 10:55:42 -0700</date>
            <delta_ts>2019-03-11 21:59:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195278-20190311105542.patch</filename>
            <type>text/plain</type>
            <size>11063</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNjg4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDZkMDA2NjRkODc4NmQ3Y2JkMDIyNjg0NTRiNzNmMDkw
ZjlmZTMzYi4uNjZjOTc3MjY3YTI2NTg5NzlhYzRjOTBhZmZiMTU3YWNiYjc4MDE3YyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1
IEBACisyMDE5LTAzLTExICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCB0ZXN0aW5nIEFQSSB0byBoaXQtdGVzdCBhbmQgc2Nyb2xsIG92ZXJmbG93
IHNjcm9sbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk1Mjc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBBZGQgVUlTY3JpcHRDb250cm9sbGVyOjppbW1lZGlhdGVTY3JvbGxFbGVtZW50
QXRDb250ZW50UG9pbnRUb09mZnNldCgpIHRvIGVuYWJsZQorICAgICAgICB0ZXN0aW5nIG9mIHRo
ZSB2aWV3IGhpdC10ZXN0aW5nIGNvZGUgcGF0aCwgYW5kIGltbWVkaWF0ZSBzY3JvbGxpbmcgb2Yg
b3ZlcmZsb3c6c2Nyb2xsLgorICAgICAgICAKKyAgICAgICAgVGVzdHM6IHNjcm9sbGluZ2Nvb3Jk
aW5hdG9yL2lvcy9zY3JvbGwtZWxlbWVudC1hdC1wb2ludC5odG1sCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpV
SVNjcmlwdENvbnRyb2xsZXI6OmltbWVkaWF0ZVNjcm9sbEVsZW1lbnRBdENvbnRlbnRQb2ludFRv
T2Zmc2V0KToKKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5k
aW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlVJ
U2NyaXB0Q29udHJvbGxlcjo6aW1tZWRpYXRlU2Nyb2xsRWxlbWVudEF0Q29udGVudFBvaW50VG9P
ZmZzZXQpOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2Ny
aXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6ZW5jbG9zaW5nU2Nyb2xsVmlld0luY2x1
ZGluZ1NlbGYpOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OmltbWVkaWF0ZVNj
cm9sbEVsZW1lbnRBdENvbnRlbnRQb2ludFRvT2Zmc2V0KToKKwogMjAxOS0wMy0wOCAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBEZXZp
Y2UgT3JpZW50YXRpb24gLyBNb3Rpb24gcGVybWlzc2lvbiBBUEkKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IGFkMjY5OGVlNDNj
NGZjZTk4YTE5N2U4MDEwZGI1ZmI0YWE4ZjFmZmYuLmJkODRiY2ZkOTJhMDY2YmIxNDI0NTgyYzc3
ZjhjOTU3NGY1ODJlZTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNj
cmlwdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2Ny
aXB0Q29udHJvbGxlcklPUy5tbQpAQCAtMjQ4LDYgKzI0OCwxMCBAQCB2b2lkIFVJU2NyaXB0Q29u
dHJvbGxlcjo6aW1tZWRpYXRlU2Nyb2xsVG9PZmZzZXQobG9uZyB4LCBsb25nIHkpCiAgICAgW2dX
ZWJTY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6Y29udGVudE9mZnNldEJvdW5kZWRJblZhbGlk
UmFuZ2UoZ1dlYlNjcm9sbFZpZXcsIENHUG9pbnRNYWtlKHgsIHkpKSBhbmltYXRlZDpOT107CiB9
CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjppbW1lZGlhdGVTY3JvbGxFbGVtZW50QXRDb250
ZW50UG9pbnRUb09mZnNldChsb25nIHgsIGxvbmcgeSwgbG9uZyB4U2Nyb2xsT2Zmc2V0LCBsb25n
IHlTY3JvbGxPZmZzZXQpCit7Cit9CisKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjppbW1lZGlh
dGVab29tVG9TY2FsZShkb3VibGUgc2NhbGUpCiB7CiAgICAgW2dXZWJTY3JvbGxWaWV3IHNldFpv
b21TY2FsZTpzY2FsZSBhbmltYXRlZDpOT107CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRD
b250cm9sbGVyLmlkbAppbmRleCA1MTYyYjU1OGVlZDk2NmRiNTU5YThjZjYwZTlmNDEwMjQxMjZm
ZTYzLi5mNThkNjIxNGY0MWZjMDU3ODFjNzg3YmE4ZjZhNGQzYTgyMDhhMWNkIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlw
dENvbnRyb2xsZXIuaWRsCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250
ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKQEAgLTUyLDcgKzUyLDcgQEAgaW50
ZXJmYWNlIFVJU2NyaXB0Q29udHJvbGxlciB7CiAKICAgICAvLyBJbnRlcmFjdGlvbi4KICAgICAv
LyBUaGVzZSBmdW5jdGlvbnMgcG9zdCBldmVudHMgYXN5bmNocm9ub3VzbHkuIFRoZSBjYWxsYmFj
ayBpcyBmaXJlZCB3aGVuIHRoZSBldmVudHMgaGF2ZSBiZWVuIGRpc3BhdGNoZWQsIGJ1dCBhbnkK
LSAgICAvLyByZXN1bHRpbmcgYmVoYXZpb3IgbWF5IGFsc28gYmUgYXN5bmNocm9ub3VzLgorICAg
IC8vIHJlc3VsdGluZyBiZWhhdmlvciBtYXkgYWxzbyBiZSBhc3luY2hyb25vdXMuIFBvaW50cyBh
cmUgaW4gImdsb2JhbCIgKFdLV2ViVmlldykgY29vcmRpbmF0ZXMuCiAgICAgdm9pZCB0b3VjaERv
d25BdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBsb25nIHRvdWNoQ291bnQsIG9iamVjdCBjYWxsYmFj
ayk7CiAgICAgdm9pZCBsaWZ0VXBBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBsb25nIHRvdWNoQ291
bnQsIG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBzaW5nbGVUYXBBdFBvaW50KGxvbmcgeCwg
bG9uZyB5LCBvYmplY3QgY2FsbGJhY2spOwpAQCAtMjUwLDYgKzI1MCw5IEBAIGludGVyZmFjZSBV
SVNjcmlwdENvbnRyb2xsZXIgewogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9PZmZzZXQobG9u
ZyB4LCBsb25nIHkpOyAvLyBTZXQgdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgVUkgcHJvY2Vz
cyB3aXRob3V0IGFuaW1hdGlvbi4KICAgICB2b2lkIGltbWVkaWF0ZVpvb21Ub1NjYWxlKGRvdWJs
ZSBzY2FsZSk7IC8vIFNldCB0aGUgem9vbSBzY2FsZSBpbiB0aGUgVUkgcHJvY2VzcyB3aXRob3V0
IGFuaW1hdGlvbi4KIAorICAgIC8vIEZpbmQgdGhlIHNjcm9sbGVyIGZvciB0aGUgZ2l2ZW4gcG9p
bnQgaW4gY29udGVudCAoImFic29sdXRlIikgY29vcmRpbmF0ZXMsIGFuZCBkbyBhbiBpbW1lZGlh
dGUgc2Nyb2xsLgorICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsRWxlbWVudEF0Q29udGVudFBvaW50
VG9PZmZzZXQobG9uZyB4LCBsb25nIHksIGxvbmcgeE9mZnNldCwgbG9uZyB5T2Zmc2V0KTsKKwog
ICAgIC8vIFZpZXcgc3RhdGUKICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIHpvb21TY2Fs
ZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIG1pbmltdW1ab29tU2NhbGU7CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENv
bnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlT
Y3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA1NzQ0YTBiNTNhYTYzNjcxNjczYzUwNmY2NTlhMDJk
Zjk1YzA5ZTU0Li45Nzc5MzQ0ZTEyNzVhMGYzNjA1YTFiZTNiMDRiODNkNWU0NDBmNDlmIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENv
bnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0
L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTM5Myw2ICszOTMsMTAgQEAgdm9pZCBVSVNjcmlw
dENvbnRyb2xsZXI6OmltbWVkaWF0ZVNjcm9sbFRvT2Zmc2V0KGxvbmcgeCwgbG9uZyB5KQogewog
fQogCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6aW1tZWRpYXRlU2Nyb2xsRWxlbWVudEF0Q29u
dGVudFBvaW50VG9PZmZzZXQobG9uZyB4LCBsb25nIHksIGxvbmcgeFNjcm9sbE9mZnNldCwgbG9u
ZyB5U2Nyb2xsT2Zmc2V0KQoreworfQorCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6aW1tZWRp
YXRlWm9vbVRvU2NhbGUoZG91YmxlIHNjYWxlKQogewogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmggYi9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaApp
bmRleCA5Mzk2MjcwMjk5NzkyZGQzZjk3NjhhZmFjNWRhZGE0ZGI5N2UwNTZiLi43MTdlOWE1YTE4
ZTQ4MDg1NTllNzE4ZTAyODNiZWM5OGY1OGFiM2E2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaApA
QCAtMTI4LDYgKzEyOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0KGxvbmcg
eCwgbG9uZyB5KTsKIAogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9PZmZzZXQobG9uZyB4LCBs
b25nIHkpOworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsRWxlbWVudEF0Q29udGVudFBvaW50VG9P
ZmZzZXQobG9uZyB4LCBsb25nIHksIGxvbmcgeFNjcm9sbE9mZnNldCwgbG9uZyB5U2Nyb2xsT2Zm
c2V0KTsKICAgICB2b2lkIGltbWVkaWF0ZVpvb21Ub1NjYWxlKGRvdWJsZSBzY2FsZSk7CiAKICAg
ICB2b2lkIGJlZ2luQmFja1N3aXBlKEpTVmFsdWVSZWYgY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IDdj
YzQ5NzY2ZWJkYzAwYWVkNzg4ZjEyOTEzMmQ5NzgwMGU1ZjU0ZTUuLjdiY2Q0N2ZhNjE0Yzc1MWNj
ZmVkZmE3ZTM3OTU3MTU2ZjY0OGRjMmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTU1OCw2ICs1NTgsMjQgQEAgdm9p
ZCBVSVNjcmlwdENvbnRyb2xsZXI6OmltbWVkaWF0ZVNjcm9sbFRvT2Zmc2V0KGxvbmcgeCwgbG9u
ZyB5KQogICAgIFt3ZWJWaWV3LnNjcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpjb250ZW50T2Zm
c2V0Qm91bmRlZEluVmFsaWRSYW5nZSh3ZWJWaWV3LnNjcm9sbFZpZXcsIENHUG9pbnRNYWtlKHgs
IHkpKSBhbmltYXRlZDpOT107CiB9CiAKK3N0YXRpYyBVSVNjcm9sbFZpZXcgKmVuY2xvc2luZ1Nj
cm9sbFZpZXdJbmNsdWRpbmdTZWxmKFVJVmlldyAqdmlldykKK3sKKyAgICBkbyB7CisgICAgICAg
IGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFVJU2Nyb2xsVmlldyAqPih2aWV3KTsKKyAgICB9IHdoaWxl
ICgodmlldyA9IFt2aWV3IHN1cGVydmlld10pKTsKKworICAgIHJldHVybiBuaWw7Cit9CisKK3Zv
aWQgVUlTY3JpcHRDb250cm9sbGVyOjppbW1lZGlhdGVTY3JvbGxFbGVtZW50QXRDb250ZW50UG9p
bnRUb09mZnNldChsb25nIHgsIGxvbmcgeSwgbG9uZyB4U2Nyb2xsT2Zmc2V0LCBsb25nIHlTY3Jv
bGxPZmZzZXQpCit7CisgICAgVUlWaWV3ICpjb250ZW50VmlldyA9IHBsYXRmb3JtQ29udGVudFZp
ZXcoKTsKKyAgICBVSVZpZXcgKmhpdFZpZXcgPSBbY29udGVudFZpZXcgaGl0VGVzdDpDR1BvaW50
TWFrZSh4LCB5KSB3aXRoRXZlbnQ6bmlsXTsKKyAgICBVSVNjcm9sbFZpZXcgKmVuY2xvc2luZ1Nj
cm9sbFZpZXcgPSBlbmNsb3NpbmdTY3JvbGxWaWV3SW5jbHVkaW5nU2VsZihoaXRWaWV3KTsKKyAg
ICBbZW5jbG9zaW5nU2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OkNHUG9pbnRNYWtlKHhTY3Jv
bGxPZmZzZXQsIHlTY3JvbGxPZmZzZXQpXTsKK30KKwogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6
OmltbWVkaWF0ZVpvb21Ub1NjYWxlKGRvdWJsZSBzY2FsZSkKIHsKICAgICBUZXN0UnVubmVyV0tX
ZWJWaWV3ICp3ZWJWaWV3ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtVmlldygpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQ1NDE3NmNlMWZhNGYxZjU1MTI1ODdiYjM2ZjNl
MmFlZTYxMDEyM2MuLjk5ZTk0ZjJlM2UyOWViZmFiMjM0NDc5ZTEzYzI3YjBhMWUyMjNjZGYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wMy0xMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJh
c2VyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgdGVzdGluZyBBUEkgdG8gaGl0LXRlc3QgYW5k
IHNjcm9sbCBvdmVyZmxvdyBzY3JvbGxlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTI3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhlIHRlc3QgbG9hZHMgYSBzY2FsZWQgcGFnZSB3
aXRoIGFjY2VsZXJhdGVkIG92ZXJmbG93OnNjcm9sbCwgYW5kIGhpdC10ZXN0cworICAgICAgICBu
ZWFyIHRoZSB0b3AtbGVmdCBhbmQgYm90dG9tLXJpZ2h0IGNvcm5lcnMgdG8gdGVzdCB0aGUgcG9p
bnQgY29udmVyc2lvbiBsb2dpYy4KKworICAgICAgICAqIHNjcm9sbGluZ2Nvb3JkaW5hdG9yL2lv
cy9zY3JvbGwtZWxlbWVudC1hdC1wb2ludC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHNjcm9sbGluZ2Nvb3JkaW5hdG9yL2lvcy9zY3JvbGwtZWxlbWVudC1hdC1wb2ludC5odG1sOiBB
ZGRlZC4KKwogMjAxOS0wMy0xMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBNYXJrIHR3byB0ZXN0cyBhcyBmYWlsaW5nIGFmdGVyIHIyNDI2MjQKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3Njcm9sbGluZ2Nvb3JkaW5hdG9yL2lvcy9zY3JvbGwtZWxl
bWVudC1hdC1wb2ludC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zY3JvbGxpbmdjb29yZGlu
YXRvci9pb3Mvc2Nyb2xsLWVsZW1lbnQtYXQtcG9pbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZkNDk0ZTVjYmNmMWMzMmRkMTBmNWQwMjg3OGVlMWRjNjZjNmM3NjEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9zY3JvbGxpbmdjb29yZGluYXRvci9pb3Mvc2Nyb2xsLWVsZW1lbnQt
YXQtcG9pbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOCBAQAorUEFTUyBzY3JvbGxUb3BBZnRl
ck91dHNpZGVUb3BMZWZ0IGlzIDAKK1BBU1Mgc2Nyb2xsVG9wQWZ0ZXJJbnNpZGVUb3BMZWZ0IGlz
IDIwMAorUEFTUyBzY3JvbGxUb3BBZnRlck91dHNpZGVCb3R0b21SaWdodCBpcyAyMDAKK1BBU1Mg
c2Nyb2xsVG9wQWZ0ZXJJbnNpZGVCb3R0b21SaWdodCBpcyA0MDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zY3JvbGxpbmdjb29yZGluYXRvci9pb3Mvc2Nyb2xsLWVsZW1lbnQtYXQtcG9pbnQuaHRtbCBi
L0xheW91dFRlc3RzL3Njcm9sbGluZ2Nvb3JkaW5hdG9yL2lvcy9zY3JvbGwtZWxlbWVudC1hdC1w
b2ludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkMmE3YmQ0Y2VlMWY4Njk0YzFhMjVlMzUyZDNkNWEwOGJk
YjVjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zY3JvbGxpbmdjb29yZGluYXRv
ci9pb3Mvc2Nyb2xsLWVsZW1lbnQtYXQtcG9pbnQuaHRtbApAQCAtMCwwICsxLDgyIEBACis8IURP
Q1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZpZXdwb3J0
PXRydWUgXSAtLT4KKworPGh0bWw+Cis8aGVhZD4KKyAgICA8IS0tVHJpZ2dlciBzb21lIHNjYWxp
bmcgLS0+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPTUwMCI+IAor
ICAgIAorICAgIDxzdHlsZT4KKyAgICAgICAgYm9keSB7CisgICAgICAgICAgICBoZWlnaHQ6IDIw
MDBweDsKKyAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgI3Njcm9sbGVyIHsKKyAgICAgICAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgICAgICAgIHdp
ZHRoOiAzMDBweDsKKyAgICAgICAgICAgIGhlaWdodDogMzAwcHg7CisgICAgICAgICAgICBib3Jk
ZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7
CisgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsOworICAgICAgICAgICAgLXdlYmtpdC1vdmVy
Zmxvdy1zY3JvbGxpbmc6IHRvdWNoOworICAgICAgICB9CisgICAgICAgIC5jb250ZW50IHsKKyAg
ICAgICAgICAgIGhlaWdodDogMTAwMHB4OworICAgICAgICB9CisgICAgPC9zdHlsZT4KKyAgICA8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdD4KKyAgICAgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgYXN5
bmMgZnVuY3Rpb24gdHJ5U2Nyb2xsQXQoeCwgeSwgeFNjcm9sbE9mZnNldCwgeVNjcm9sbE9mZnNl
dCkKKyAgICAgICAgeworICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7
CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChgCisgICAgICAgICAgICAg
ICAgICAgIHVpQ29udHJvbGxlci5pbW1lZGlhdGVTY3JvbGxFbGVtZW50QXRDb250ZW50UG9pbnRU
b09mZnNldCgke3h9LCAke3l9LCAke3hTY3JvbGxPZmZzZXR9LCAke3lTY3JvbGxPZmZzZXR9LCB0
cnVlKTtgLCByZXNvbHZlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAg
bGV0IHNjcm9sbFRvcEFmdGVyT3V0c2lkZVRvcExlZnQ7CisgICAgICAgIGxldCBzY3JvbGxUb3BB
ZnRlckluc2lkZVRvcExlZnQ7CisgICAgICAgIGxldCBzY3JvbGxUb3BBZnRlck91dHNpZGVCb3R0
b21SaWdodDsKKyAgICAgICAgbGV0IHNjcm9sbFRvcEFmdGVySW5zaWRlQm90dG9tUmlnaHQ7CisK
KyAgICAgICAgYXN5bmMgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCF0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KQorICAgICAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgICAgICAvLyBUZXN0IG5lYXIgdGhlIGNvcm5lcnMgdG8gZXhlcmNpc2UgdGhlIHBvaW50
IGNvbnZlcnNpb24gbG9naWMuCisgICAgICAgICAgICAvLyBEb24ndCBjYWxsIHNob3VsZEJlKCkg
dW50aWwgdGhlIGVuZCBiZWNhdXNlIGl0IGluc2VydHMgY29udGVudCwgb2Zmc2V0dGluZyB0aGUg
c2Nyb2xsZXIuCisgICAgICAgICAgICBhd2FpdCB0cnlTY3JvbGxBdCg5LCA5LCAwLCAxMDApOwor
ICAgICAgICAgICAgc2Nyb2xsVG9wQWZ0ZXJPdXRzaWRlVG9wTGVmdCA9IHNjcm9sbGVyLnNjcm9s
bFRvcDsKKworICAgICAgICAgICAgYXdhaXQgdHJ5U2Nyb2xsQXQoMTIsIDEyLCAwLCAyMDApOwor
ICAgICAgICAgICAgc2Nyb2xsVG9wQWZ0ZXJJbnNpZGVUb3BMZWZ0ID0gc2Nyb2xsZXIuc2Nyb2xs
VG9wOworCisgICAgICAgICAgICBhd2FpdCB0cnlTY3JvbGxBdCgzMTEsIDMxMSwgMCwgMzAwKTsK
KyAgICAgICAgICAgIHNjcm9sbFRvcEFmdGVyT3V0c2lkZUJvdHRvbVJpZ2h0ID0gc2Nyb2xsZXIu
c2Nyb2xsVG9wOworCisgICAgICAgICAgICBhd2FpdCB0cnlTY3JvbGxBdCgzMDgsIDMwOCwgMCwg
NDAwKTsKKyAgICAgICAgICAgIHNjcm9sbFRvcEFmdGVySW5zaWRlQm90dG9tUmlnaHQgPSBzY3Jv
bGxlci5zY3JvbGxUb3A7CisKKyAgICAgICAgICAgIHNob3VsZEJlKCdzY3JvbGxUb3BBZnRlck91
dHNpZGVUb3BMZWZ0JywgJzAnKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCdzY3JvbGxUb3BBZnRl
ckluc2lkZVRvcExlZnQnLCAnMjAwJyk7CisgICAgICAgICAgICBzaG91bGRCZSgnc2Nyb2xsVG9w
QWZ0ZXJPdXRzaWRlQm90dG9tUmlnaHQnLCAnMjAwJyk7CisgICAgICAgICAgICBzaG91bGRCZSgn
c2Nyb2xsVG9wQWZ0ZXJJbnNpZGVCb3R0b21SaWdodCcsICc0MDAnKTsKKworICAgICAgICAgICAg
ZmluaXNoSlNUZXN0KCk7IAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0ic2Nyb2xsZXIiPgorICAgICAgICA8ZGl2IGNsYXNz
PSJjb250ZW50Ij4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>