<?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>147685</bug_id>
          
          <creation_ts>2015-08-05 09:46:56 -0700</creation_ts>
          <short_desc>Toggle GPS state based on page visibility to save battery</short_desc>
          <delta_ts>2015-08-06 15:38:06 -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>WebCore Misc.</component>
          <version>528+ (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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1115035</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-05 09:46:56 -0700</bug_when>
    <thetext>Toggle GPS state based on page visibility to save battery. At the moment, if the site you&apos;re viewing watches your position and you switch tab, the GPS stays on. This is bad for battery life.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115095</commentid>
    <comment_count>1</comment_count>
      <attachid>258293</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-05 13:04:13 -0700</bug_when>
    <thetext>Created attachment 258293
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115202</commentid>
    <comment_count>2</comment_count>
      <attachid>258293</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-05 17:38:38 -0700</bug_when>
    <thetext>Comment on attachment 258293
Patch

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

Hehe, I did find a reason to r- :)

&gt; Source/WebCore/Modules/geolocation/GeolocationController.cpp:90
&gt; +    if (!m_page.isVisible() &amp;&amp; updating)

If I register an observer with the page visible:
    m_isUpdating = true;
Then the page become a background tab:
    m_isUpdating = false;
    m_observers.isEmpty() is false
The background page remove the observers:
    m_isUpdating = false;
    m_observers.isEmpty() is true
The page comes back to visible
    -&gt;We start updating on a Controller without observers

...actually, wouldn&apos;t we start updating on view state changes even without observers involved at any point?

&gt; LayoutTests/fast/dom/Geolocation/startUpdatingOnlyWhenPageVisible.html:26
&gt; +        shouldBeFalse(&quot;internals.isGeolocationClientUpdating()&quot;);

IMHO, that is the wrong way to test.

You can test this from end to end, including any bug in the WebKit layer. Instead of observing if the controller is updating, you should observe if the Mock object is updating or not.
If you do that, the only source of bug should be the Provider&apos;s implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115229</commentid>
    <comment_count>3</comment_count>
      <attachid>258293</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-05 18:50:14 -0700</bug_when>
    <thetext>Comment on attachment 258293
Patch

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

&gt;&gt; Source/WebCore/Modules/geolocation/GeolocationController.cpp:90
&gt;&gt; +    if (!m_page.isVisible() &amp;&amp; updating)
&gt; 
&gt; If I register an observer with the page visible:
&gt;     m_isUpdating = true;
&gt; Then the page become a background tab:
&gt;     m_isUpdating = false;
&gt;     m_observers.isEmpty() is false
&gt; The background page remove the observers:
&gt;     m_isUpdating = false;
&gt;     m_observers.isEmpty() is true
&gt; The page comes back to visible
&gt;     -&gt;We start updating on a Controller without observers
&gt; 
&gt; ...actually, wouldn&apos;t we start updating on view state changes even without observers involved at any point?

Your last step says:
&quot;&quot;&quot;
The page comes back to visible
    -&gt;We start updating on a Controller without observers
&quot;&quot;&quot;

Why would this happen? In the viewStateDidChange handler, I only start updating if there are observers:
if (changed &amp; ViewState::IsVisible &amp;&amp; !m_observers.isEmpty())

&gt; Source/WebCore/Modules/geolocation/GeolocationController.cpp:147
&gt; +    if (changed &amp; ViewState::IsVisible &amp;&amp; !m_observers.isEmpty())

... see &apos;&amp;&amp; !m_observers.isEmpty()&apos; check here.

&gt;&gt; LayoutTests/fast/dom/Geolocation/startUpdatingOnlyWhenPageVisible.html:26
&gt;&gt; +        shouldBeFalse(&quot;internals.isGeolocationClientUpdating()&quot;);
&gt; 
&gt; IMHO, that is the wrong way to test.
&gt; 
&gt; You can test this from end to end, including any bug in the WebKit layer. Instead of observing if the controller is updating, you should observe if the Mock object is updating or not.
&gt; If you do that, the only source of bug should be the Provider&apos;s implementation.

I did it this way for several reasons:
1. Doing it end to end means we need to add a Geolocation client virtual function and provide implementations in subclasses, only for the purpose of testing. Also, in the case of testing, we are using the Mock client and adding better coverage for this mock client is not an objective I think
2. Some clients (such as the Mock client) will crash if startUpdating() or stopUpdating() is called several times in a row. Therefore, we would anyway need to keep a boolean on the GeolocationController to know the &quot;isUpdating&quot; state to make sure we call startUpdating() / stopUpdating() only when necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115262</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-05 20:55:14 -0700</bug_when>
    <thetext>Haha, crap, I was too eager to r- :)

You spread the states in too many places. What about having a single function that updates both the update state and high accuracy of the client based on the current internal state?

I have to admit I did not understand your arguments against testing end-to-end... :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115357</commentid>
    <comment_count>5</comment_count>
      <attachid>258370</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-06 09:52:51 -0700</bug_when>
    <thetext>Created attachment 258370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115358</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-06 09:53:58 -0700</bug_when>
    <thetext>The tests are not checking that the geolocation *provider* is active. I moved the isGeolocationProviderActive() test function from internals to testRunner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115451</commentid>
    <comment_count>7</comment_count>
      <attachid>258370</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-06 14:28:35 -0700</bug_when>
    <thetext>Comment on attachment 258370
Patch

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

&gt; Tools/ChangeLog:8
&gt; +        Add testRunner.isGeolocationProvider() test support function.

isGeolocationProvider-&gt; isGeolocationProviderActive

&gt; LayoutTests/fast/dom/Geolocation/startUpdatingOnlyWhenPageVisible.html:29
&gt; +        setTimeout(checkNotUpdatingAndShowPage, 150);

150 is a bit on the slow side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115463</commentid>
    <comment_count>8</comment_count>
      <attachid>258401</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-06 14:45:18 -0700</bug_when>
    <thetext>Created attachment 258401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115474</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-06 15:10:29 -0700</bug_when>
    <thetext>rdar://problem/22178457</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115492</commentid>
    <comment_count>10</comment_count>
      <attachid>258401</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 15:38:01 -0700</bug_when>
    <thetext>Comment on attachment 258401
Patch

Clearing flags on attachment: 258401

Committed r188068: &lt;http://trac.webkit.org/changeset/188068&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115493</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 15:38:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258293</attachid>
            <date>2015-08-05 13:04:13 -0700</date>
            <delta_ts>2015-08-06 09:52:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147685-20150805130405.patch</filename>
            <type>text/plain</type>
            <size>14197</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3ODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODEzOTJiYTI0MTA2Yjdm
YjU0NDRiMzcyMzBhZmQzMWE3NjMyMGQ0ZS4uYzczNDhjYmE1NThhMGFkNDdhNWEyNTg4OTViYzY2
OGM4YWYzNTdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTA4LTA1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVG9nZ2xlIEdQUyBzdGF0ZSBi
YXNlZCBvbiBwYWdlIHZpc2liaWxpdHkgdG8gc2F2ZSBiYXR0ZXJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc2ODUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUb2dnbGUgR1BTIHN0YXRlIGJhc2VkIG9u
IHBhZ2UgdmlzaWJpbGl0eSB0byBzYXZlIGJhdHRlcnkuIFByZXZpb3VzbHksCisgICAgICAgIGlm
IHRoZSBzaXRlIHlvdSB3ZXJlIHZpZXdpbmcgd2FzIHdhdGNoaW5nIHlvdXIgcG9zaXRpb24gYW5k
IHlvdQorICAgICAgICBzd2l0Y2hlZCB0YWIsIHRoZSBHUFMgd291bGQgc3RheSBvbi4gVGhpcyB3
YXMgYmFkIGZvciBiYXR0ZXJ5IGxpZmUuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZG9tL0dlb2xv
Y2F0aW9uL3N0YXJ0VXBkYXRpbmdPbmx5V2hlblBhZ2VWaXNpYmxlLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3N0b3BVcGRhdGluZ0ZvckhpZGRlblBhZ2UuaHRtbAor
CisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVyOjphZGRPYnNlcnZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnJlbW92ZU9ic2VydmVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6c2V0VXBkYXRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVyOjp2aWV3U3RhdGVEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVyOjplcnJvck9j
Y3VycmVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0
aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVy
Ojppc1VwZGF0aW5nKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6OmlzR2VvbG9jYXRpb25DbGllbnRVcGRhdGluZyk6CisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5p
ZGw6CisKIDIwMTUtMDgtMDQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBTdWJmcmFtZXMgd2l0aCBubyBjdXJyZW50IEhpc3RvcnlJdGVtIHNob3VsZCBub3QgcHJl
dmVudCBwYWdlLWNhY2hpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Vv
bG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAppbmRleCAwZGYwNmZhYjll
Y2NmZGJmYWZhZGE0NjAzNDhhMmEzZjBmM2YxYTMyLi5lYmE2MWJhYzA1NGRjMTM4ZmJhNGQ0MTE4
MDk3NzVkODMwNjcwNTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xv
Y2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC02NCw3ICs2NCw3
IEBAIHZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjphZGRPYnNlcnZlcihHZW9sb2NhdGlvbiog
b2JzZXJ2ZXIsIGJvb2wgZW5hYmxlSGlnaEFjCiAgICAgaWYgKGVuYWJsZUhpZ2hBY2N1cmFjeSkK
ICAgICAgICAgbV9jbGllbnQuc2V0RW5hYmxlSGlnaEFjY3VyYWN5KHRydWUpOwogICAgIGlmICh3
YXNFbXB0eSkKLSAgICAgICAgbV9jbGllbnQuc3RhcnRVcGRhdGluZygpOworICAgICAgICBzZXRV
cGRhdGluZyh0cnVlKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnJlbW92ZU9i
c2VydmVyKEdlb2xvY2F0aW9uKiBvYnNlcnZlcikKQEAgLTc2LDExICs3NiwyNyBAQCB2b2lkIEdl
b2xvY2F0aW9uQ29udHJvbGxlcjo6cmVtb3ZlT2JzZXJ2ZXIoR2VvbG9jYXRpb24qIG9ic2VydmVy
KQogICAgIG1faGlnaEFjY3VyYWN5T2JzZXJ2ZXJzLnJlbW92ZShvYnNlcnZlcik7CiAKICAgICBp
ZiAobV9vYnNlcnZlcnMuaXNFbXB0eSgpKQotICAgICAgICBtX2NsaWVudC5zdG9wVXBkYXRpbmco
KTsKKyAgICAgICAgc2V0VXBkYXRpbmcoZmFsc2UpOwogICAgIGVsc2UgaWYgKG1faGlnaEFjY3Vy
YWN5T2JzZXJ2ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgbV9jbGllbnQuc2V0RW5hYmxlSGlnaEFj
Y3VyYWN5KGZhbHNlKTsKIH0KIAordm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnNldFVwZGF0
aW5nKGJvb2wgdXBkYXRpbmcpCit7CisgICAgaWYgKG1faXNVcGRhdGluZyA9PSB1cGRhdGluZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG8gbm90IHN0YXJ0IHVwZGF0aW5nIHVudGlsIHRo
ZSBwYWdlIGJlY29tZXMgdmlzaWJsZS4KKyAgICBpZiAoIW1fcGFnZS5pc1Zpc2libGUoKSAmJiB1
cGRhdGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1VwZGF0aW5nID0gdXBkYXRpbmc7
CisgICAgaWYgKHVwZGF0aW5nKQorICAgICAgICBtX2NsaWVudC5zdGFydFVwZGF0aW5nKCk7Cisg
ICAgZWxzZQorICAgICAgICBtX2NsaWVudC5zdG9wVXBkYXRpbmcoKTsKK30KKwogdm9pZCBHZW9s
b2NhdGlvbkNvbnRyb2xsZXI6OnJlcXVlc3RQZXJtaXNzaW9uKEdlb2xvY2F0aW9uKiBnZW9sb2Nh
dGlvbikKIHsKICAgICBpZiAoIW1fcGFnZS5pc1Zpc2libGUoKSkgewpAQCAtMTI0LDggKzE0MCwx
MyBAQCBHZW9sb2NhdGlvblBvc2l0aW9uKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6Omxhc3RQb3Np
dGlvbigpCiAgICAgcmV0dXJuIG1fY2xpZW50Lmxhc3RQb3NpdGlvbigpOwogfQogCi12b2lkIEdl
b2xvY2F0aW9uQ29udHJvbGxlcjo6dmlld1N0YXRlRGlkQ2hhbmdlKFZpZXdTdGF0ZTo6RmxhZ3Ms
IFZpZXdTdGF0ZTo6RmxhZ3MpCit2b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6dmlld1N0YXRl
RGlkQ2hhbmdlKFZpZXdTdGF0ZTo6RmxhZ3Mgb2xkVmlld1N0YXRlLCBWaWV3U3RhdGU6OkZsYWdz
IG5ld1ZpZXdTdGF0ZSkKIHsKKyAgICAvLyBUb2dnbGUgR1BTIGJhc2VkIG9uIHBhZ2UgdmlzaWJp
bGl0eSB0byBzYXZlIGJhdHRlcnkuCisgICAgVmlld1N0YXRlOjpGbGFncyBjaGFuZ2VkID0gb2xk
Vmlld1N0YXRlIF4gbmV3Vmlld1N0YXRlOworICAgIGlmIChjaGFuZ2VkICYgVmlld1N0YXRlOjpJ
c1Zpc2libGUgJiYgIW1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgc2V0VXBkYXRpbmco
bmV3Vmlld1N0YXRlICYgVmlld1N0YXRlOjpJc1Zpc2libGUpOworCiAgICAgaWYgKCFtX3BhZ2Uu
aXNWaXNpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmgKaW5kZXgg
ZGRlYTZjNWE3ZWZiNWQ4YzJiMDFiMjE4OGU2MzFlMTgwZWMwMDVjNC4uMmFiOWJmMmQyNmUwNzJj
OTg1MDdlODZkMzA1ZmNlZmE3ZTcyMWZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCkBAIC02NSwx
MCArNjUsMTQgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBjaGFy
KiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0YXRpYyBHZW9sb2NhdGlvbkNvbnRyb2xsZXIqIGZy
b20oUGFnZSogcGFnZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R2VvbG9jYXRpb25Db250cm9sbGVy
Kj4oU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdlLCBzdXBwbGVtZW50TmFtZSgpKSk7IH0KIAor
ICAgIGJvb2wgaXNVcGRhdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNVcGRhdGluZzsgfQorCiBw
cml2YXRlOgogICAgIFBhZ2UmIG1fcGFnZTsKICAgICBHZW9sb2NhdGlvbkNsaWVudCYgbV9jbGll
bnQ7CiAKKyAgICB2b2lkIHNldFVwZGF0aW5nKGJvb2wpOworCiAgICAgdmlydHVhbCB2b2lkIHZp
ZXdTdGF0ZURpZENoYW5nZShWaWV3U3RhdGU6OkZsYWdzIG9sZFZpZXdTdGF0ZSwgVmlld1N0YXRl
OjpGbGFncyBuZXdWaWV3U3RhdGUpIG92ZXJyaWRlOwogCiAgICAgUmVmUHRyPEdlb2xvY2F0aW9u
UG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOwpAQCAtODAsNiArODQsOCBAQCBwcml2YXRlOgogCiAg
ICAgLy8gV2hpbGUgdGhlIHBhZ2UgaXMgbm90IHZpc2libGUsIHdlIHBlbmQgcGVybWlzc2lvbiBy
ZXF1ZXN0cy4KICAgICBIYXNoU2V0PFJlZlB0cjxHZW9sb2NhdGlvbj4+IG1fcGVuZGVkUGVybWlz
c2lvblJlcXVlc3Q7CisKKyAgICBib29sIG1faXNVcGRhdGluZyB7IGZhbHNlIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5k
ZXggNWEyMjBiMTJlY2Q0YzQ2ZjdhMTA3NTViYWRjNjdkMjU4YjNhNDRhYi4uNzJkMDk5OGZkYmY1
OWJiNzMxYmUwMjg0ZGFkN2NmNDY1MDA5MWYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCkBAIC0xNjU2LDYgKzE2NTcsMTYgQEAgdm9pZCBJbnRlcm5hbHM6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKEV4Y2VwdGlvbkNvZGUmKQogICAgIGRvY3VtZW50LT5mcmFtZSgpLT5l
ZGl0b3IoKS50b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpOwogfQogCitib29sIEludGVybmFs
czo6aXNHZW9sb2NhdGlvbkNsaWVudFVwZGF0aW5nKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoR0VP
TE9DQVRJT04pCisgICAgYXV0byogcGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5wYWdlKCk7Cisg
ICAgcmV0dXJuIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZnJvbShwYWdlKS0+aXNVcGRhdGluZygp
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogdW5zaWduZWQgSW50ZXJu
YWxzOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgZmlu
ZE9wdGlvbnMsIGNvbnN0IFN0cmluZyYgbWFya01hdGNoZXMsIEV4Y2VwdGlvbkNvZGUmKQogewog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgKaW5kZXggZDY0MzUwOWI1MjBmNDQwODkwZWZiMTU2ZGVkZmZlMzVkNGM1
NjFkNS4uMDBmZTEzZjFlMzRiNWQwNTkxYmJkMjY3MTVhMTNkZjEzMzYzMzU0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0yMjAsNiArMjIwLDggQEAgcHVibGljOgogICAgIGJv
b2wgaXNPdmVyd3JpdGVNb2RlRW5hYmxlZChFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB0b2dn
bGVPdmVyd3JpdGVNb2RlRW5hYmxlZChFeGNlcHRpb25Db2RlJik7CiAKKyAgICBib29sIGlzR2Vv
bG9jYXRpb25DbGllbnRVcGRhdGluZygpIGNvbnN0OworCiAgICAgdW5zaWduZWQgY291bnRNYXRj
aGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBmaW5kT3B0aW9ucywgY29uc3QgU3Ry
aW5nJiBtYXJrTWF0Y2hlcywgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZTY3JvbGxhYmxlQXJlYXMoRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaWRsCmluZGV4IDZmNzRiY2FmNWVmYTQxMGYzNWY1Y2MyYzViYmNmYTc2YmY2OWZhZTIu
LjE5OTg5MzNlNjhiZjRjZDcwOWU3MGZkZGE5MzFkM2IwMGY4ZDJjZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTE3MCw2ICsxNzAsOCBAQCBlbnVtIE1lZGlhQ29udHJv
bEV2ZW50IHsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBsb25nIGxhc3RTcGVsbENoZWNrUmVxdWVz
dFNlcXVlbmNlKCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gbG9uZyBsYXN0U3BlbGxDaGVja1By
b2Nlc3NlZFNlcXVlbmNlKCk7CiAKKyAgICBib29sZWFuIGlzR2VvbG9jYXRpb25DbGllbnRVcGRh
dGluZygpOworCiAgICAgc2VxdWVuY2U8RE9NU3RyaW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
KCk7CiAgICAgdm9pZCBzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKHNlcXVlbmNlPERPTVN0cmlu
Zz4gbGFuZ3VhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc0NGEyM2RlNzEwNGIwZmNlZDgxNDE4N2ZjNjkyNDEy
MTE3M2FkNTcuLmE2ZWIwNWNjMjcwMjI1ZmVjOTFhMmI2YWQ0MWVjNGY5ZWFlOTBiMzAgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAxNS0wOC0wNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIFRvZ2dsZSBHUFMgc3RhdGUgYmFzZWQgb24gcGFnZSB2aXNpYmlsaXR5
IHRvIHNhdmUgYmF0dGVyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ3Njg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIGxheW91dCB0ZXN0cyB0byBjaGVjayB0aGF0IHRoZSBHZW9sb2NhdGlvbkNs
aWVudCBzdGFydHMgYW5kIHN0b3BzCisgICAgICAgIHVwZGF0aW5nIHdoZW4gcGFnZSB2aXNpYmls
aXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9zdGFydFVwZGF0
aW5nT25seVdoZW5QYWdlVmlzaWJsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL0dlb2xvY2F0aW9uL3N0YXJ0VXBkYXRpbmdPbmx5V2hlblBhZ2VWaXNpYmxlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3N0b3BVcGRhdGluZ0Zvckhp
ZGRlblBhZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2Nh
dGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRkZW5QYWdlLmh0bWw6IEFkZGVkLgorCiAyMDE1LTA4LTA0
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgU3ViZnJhbWVzIHdp
dGggbm8gY3VycmVudCBIaXN0b3J5SXRlbSBzaG91bGQgbm90IHByZXZlbnQgcGFnZS1jYWNoaW5n
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdGFydFVwZGF0
aW5nT25seVdoZW5QYWdlVmlzaWJsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9HZW9sb2NhdGlvbi9zdGFydFVwZGF0aW5nT25seVdoZW5QYWdlVmlzaWJsZS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzc5YzliMGI3ZDc3NjdkODZiYWE0OWU1NjkwZGNkZDVlMTQxMjRhMAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3N0YXJ0
VXBkYXRpbmdPbmx5V2hlblBhZ2VWaXNpYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIwIEBA
CitUZXN0cyB0aGF0IHRoZSBHZW9sb2NhdGlvbkNsaWVudCBvbmx5IHN0YXJ0cyB1cGRhdGluZyB3
aGVuIHRoZSBwYWdlIGJlY29tZXMgdmlzaWJsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUGFnZSBpcyBpbml0aWFsbHkgdmlzaWJsZQorUEFTUyBkb2N1bWVudC5oaWRkZW4gaXMg
ZmFsc2UKK1BBU1MgaW50ZXJuYWxzLmlzR2VvbG9jYXRpb25DbGllbnRVcGRhdGluZygpIGlzIGZh
bHNlCitDaGFuZ2luZyBwYWdlIHZpc2liaWxpdHkgdG8gJ2hpZGRlbicKK1BhZ2UgdmlzaWJpbGl0
eSBjaGFuZ2VkIHRvIGZhbHNlCitQQVNTIGludGVybmFscy5pc0dlb2xvY2F0aW9uQ2xpZW50VXBk
YXRpbmcoKSBpcyBmYWxzZQorQWRkaW5nIEdlb2xvY2F0aW9uIHdhdGNoZXIKK1BBU1MgaW50ZXJu
YWxzLmlzR2VvbG9jYXRpb25DbGllbnRVcGRhdGluZygpIGlzIGZhbHNlCitDaGFuZ2luZyBwYWdl
IHZpc2liaWxpdHkgdG8gJ3Zpc2libGUnCitQYWdlIHZpc2liaWxpdHkgY2hhbmdlZCB0byB0cnVl
CitQQVNTIGludGVybmFscy5pc0dlb2xvY2F0aW9uQ2xpZW50VXBkYXRpbmcoKSBiZWNhbWUgdHJ1
ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3N0YXJ0VXBkYXRpbmdP
bmx5V2hlblBhZ2VWaXNpYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9zdGFydFVwZGF0aW5nT25seVdoZW5QYWdlVmlzaWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxZjJm
MzMzMmJjMWFmMGNiNTQyZmZjMjQzNDQwM2Q3N2U3NzdiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdGFydFVwZGF0aW5nT25seVdoZW5QYWdl
VmlzaWJsZS5odG1sCkBAIC0wLDAgKzEsNTQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHNjcmlwdD4KKwor
ZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGhlIEdlb2xvY2F0aW9uQ2xpZW50IG9ubHkgc3RhcnRz
IHVwZGF0aW5nIHdoZW4gdGhlIHBhZ2UgYmVjb21lcyB2aXNpYmxlIik7Cit3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CisKK2Z1bmN0aW9uIGdlb2xvY2F0aW9uV2F0Y2hGdW5jdGlvbigpCit7
Cit9CisKK2Z1bmN0aW9uIGNoZWNrTm90VXBkYXRpbmdBbmRTaG93UGFnZSgpCit7CisgICAgc2hv
dWxkQmVGYWxzZSgiaW50ZXJuYWxzLmlzR2VvbG9jYXRpb25DbGllbnRVcGRhdGluZygpIik7Cisg
ICAgZGVidWcoIkNoYW5naW5nIHBhZ2UgdmlzaWJpbGl0eSB0byAndmlzaWJsZSciKTsKKyAgICB0
ZXN0UnVubmVyLnNldFBhZ2VWaXNpYmlsaXR5KCJ2aXNpYmxlIik7Cit9CisKK2Z1bmN0aW9uIG9u
VmlzaWJpbGl0eUNoYW5nZSgpIHsKKyAgICBkZWJ1ZygiUGFnZSB2aXNpYmlsaXR5IGNoYW5nZWQg
dG8gIiArICFkb2N1bWVudC5oaWRkZW4pOworICAgIGlmIChkb2N1bWVudC5oaWRkZW4pIHsKKyAg
ICAgICAgc2hvdWxkQmVGYWxzZSgiaW50ZXJuYWxzLmlzR2VvbG9jYXRpb25DbGllbnRVcGRhdGlu
ZygpIik7CisgICAgICAgIGRlYnVnKCJBZGRpbmcgR2VvbG9jYXRpb24gd2F0Y2hlciIpOworICAg
ICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihnZW9sb2NhdGlvbldhdGNo
RnVuY3Rpb24pOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrTm90VXBkYXRpbmdBbmRTaG93UGFn
ZSwgMTUwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2hvdWxkQmVjb21lRXF1YWwoImludGVybmFs
cy5pc0dlb2xvY2F0aW9uQ2xpZW50VXBkYXRpbmcoKSIsICJ0cnVlIiwgZmluaXNoSlNUZXN0KTsK
K30KKworZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsIG9uVmlz
aWJpbGl0eUNoYW5nZSwgZmFsc2UpCisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRl
c3RSdW5uZXIuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKHRydWUpOworICAgIHRlc3RSdW5uZXIu
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oMSwgMiwgMyk7Cit9CisKK2Z1bmN0aW9uIHJ1blRl
c3QoKQoreworICAgIGRlYnVnKCJQYWdlIGlzIGluaXRpYWxseSB2aXNpYmxlIik7CisgICAgc2hv
dWxkQmVGYWxzZSgiZG9jdW1lbnQuaGlkZGVuIik7CisgICAgc2hvdWxkQmVGYWxzZSgiaW50ZXJu
YWxzLmlzR2VvbG9jYXRpb25DbGllbnRVcGRhdGluZygpIik7CisKKyAgICBkZWJ1ZygiQ2hhbmdp
bmcgcGFnZSB2aXNpYmlsaXR5IHRvICdoaWRkZW4nIik7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICB0ZXN0UnVubmVyLnNldFBhZ2VWaXNpYmlsaXR5KCJoaWRkZW4iKTsKK30K
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vR2VvbG9jYXRpb24vc3RvcFVwZGF0aW5nRm9ySGlkZGVuUGFnZS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRk
ZW5QYWdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTYxN2Y3MzE2YTA3OWFhMjdjOWJmNTYy
YTkyOWI0OGQ2Y2FlNzA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
R2VvbG9jYXRpb24vc3RvcFVwZGF0aW5nRm9ySGlkZGVuUGFnZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwyMCBAQAorVGVzdHMgdGhhdCB0aGUgR2VvbG9jYXRpb25DbGllbnQgc3RvcHMgdXBkYXRp
bmcgd2hlbiB0aGUgcGFnZSBiZWNvbWVzIGhpZGRlbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUGFnZSBpcyBpbml0aWFsbHkgdmlzaWJsZQorUEFTUyBkb2N1bWVudC5oaWRkZW4g
aXMgZmFsc2UKK1BBU1MgaW50ZXJuYWxzLmlzR2VvbG9jYXRpb25DbGllbnRVcGRhdGluZygpIGlz
IGZhbHNlCitBZGRpbmcgR2VvbG9jYXRpb24gd2F0Y2hlcgorUEFTUyBpbnRlcm5hbHMuaXNHZW9s
b2NhdGlvbkNsaWVudFVwZGF0aW5nKCkgYmVjYW1lIHRydWUKK0NoYW5naW5nIHBhZ2UgdmlzaWJp
bGl0eSB0byAnaGlkZGVuJworUGFnZSB2aXNpYmlsaXR5IGNoYW5nZWQgdG8gZmFsc2UKK1BBU1Mg
aW50ZXJuYWxzLmlzR2VvbG9jYXRpb25DbGllbnRVcGRhdGluZygpIGJlY2FtZSBmYWxzZQorQ2hh
bmdpbmcgcGFnZSB2aXNpYmlsaXR5IHRvICd2aXNpYmxlJworUGFnZSB2aXNpYmlsaXR5IGNoYW5n
ZWQgdG8gdHJ1ZQorUEFTUyBpbnRlcm5hbHMuaXNHZW9sb2NhdGlvbkNsaWVudFVwZGF0aW5nKCkg
YmVjYW1lIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdG9w
VXBkYXRpbmdGb3JIaWRkZW5QYWdlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2Nh
dGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRkZW5QYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhlN2ZlMjkz
NjcxNzdkN2E1ZjNjOTM3ZTU3ZmJmMWMyYzFkNjFiMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3N0b3BVcGRhdGluZ0ZvckhpZGRlblBhZ2UuaHRt
bApAQCAtMCwwICsxLDU4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9u
KCJUZXN0cyB0aGF0IHRoZSBHZW9sb2NhdGlvbkNsaWVudCBzdG9wcyB1cGRhdGluZyB3aGVuIHRo
ZSBwYWdlIGJlY29tZXMgaGlkZGVuIik7Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisK
K2Z1bmN0aW9uIGdlb2xvY2F0aW9uV2F0Y2hGdW5jdGlvbigpCit7Cit9CisKK2Z1bmN0aW9uIHNo
b3dQYWdlKCkKK3sKKyAgICBkZWJ1ZygiQ2hhbmdpbmcgcGFnZSB2aXNpYmlsaXR5IHRvICd2aXNp
YmxlJyIpOworICAgIHRlc3RSdW5uZXIuc2V0UGFnZVZpc2liaWxpdHkoInZpc2libGUiKTsKK30K
KworZnVuY3Rpb24gb25WaXNpYmlsaXR5Q2hhbmdlKCkgeworICAgIGRlYnVnKCJQYWdlIHZpc2li
aWxpdHkgY2hhbmdlZCB0byAiICsgIWRvY3VtZW50LmhpZGRlbik7CisgICAgaWYgKGRvY3VtZW50
LmhpZGRlbikKKyAgICAgICAgc2hvdWxkQmVjb21lRXF1YWwoImludGVybmFscy5pc0dlb2xvY2F0
aW9uQ2xpZW50VXBkYXRpbmcoKSIsICJmYWxzZSIsIHNob3dQYWdlKTsKKyAgICBlbHNlCisgICAg
ICAgIHNob3VsZEJlY29tZUVxdWFsKCJpbnRlcm5hbHMuaXNHZW9sb2NhdGlvbkNsaWVudFVwZGF0
aW5nKCkiLCAidHJ1ZSIsIGZpbmlzaEpTVGVzdCk7Cit9CisKK2RvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLCBvblZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKQorCitp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLnNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbih0cnVlKTsKKyAgICB0ZXN0UnVubmVyLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
KDEsIDIsIDMpOworfQorCitmdW5jdGlvbiBoaWRlUGFnZSgpCit7CisgICAgZGVidWcoIkNoYW5n
aW5nIHBhZ2UgdmlzaWJpbGl0eSB0byAnaGlkZGVuJyIpOworICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRQYWdlVmlzaWJpbGl0eSgiaGlkZGVuIik7Cit9
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGRlYnVnKCJQYWdlIGlzIGluaXRpYWxseSB2
aXNpYmxlIik7CisgICAgc2hvdWxkQmVGYWxzZSgiZG9jdW1lbnQuaGlkZGVuIik7CisgICAgc2hv
dWxkQmVGYWxzZSgiaW50ZXJuYWxzLmlzR2VvbG9jYXRpb25DbGllbnRVcGRhdGluZygpIik7CisK
KyAgICBkZWJ1ZygiQWRkaW5nIEdlb2xvY2F0aW9uIHdhdGNoZXIiKTsKKyAgICBuYXZpZ2F0b3Iu
Z2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihnZW9sb2NhdGlvbldhdGNoRnVuY3Rpb24pOworCisg
ICAgc2hvdWxkQmVjb21lRXF1YWwoImludGVybmFscy5pc0dlb2xvY2F0aW9uQ2xpZW50VXBkYXRp
bmcoKSIsICJ0cnVlIiwgaGlkZVBhZ2UpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258370</attachid>
            <date>2015-08-06 09:52:51 -0700</date>
            <delta_ts>2015-08-06 14:45:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147685-20150806095242.patch</filename>
            <type>text/plain</type>
            <size>24243</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVkZmI2ZmMxMGFmNmZh
MjA1ODhjMDFkZjYzODYwZTA1ZjFiYjQzYS4uYTU5ZGVhNWE1NzBlODBlYTZkZWFkZjZjMjk3OWIw
MWUzZDQ1NmZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA4LTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVG9nZ2xlIEdQUyBzdGF0ZSBi
YXNlZCBvbiBwYWdlIHZpc2liaWxpdHkgdG8gc2F2ZSBiYXR0ZXJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc2ODUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUb2dnbGUgR1BTIHN0YXRlIGJhc2VkIG9u
IHBhZ2UgdmlzaWJpbGl0eSB0byBzYXZlIGJhdHRlcnkuIFByZXZpb3VzbHksCisgICAgICAgIGlm
IHRoZSBzaXRlIHlvdSB3ZXJlIHZpZXdpbmcgd2FzIHdhdGNoaW5nIHlvdXIgcG9zaXRpb24gYW5k
IHlvdQorICAgICAgICBzd2l0Y2hlZCB0YWIsIHRoZSBHUFMgd291bGQgc3RheSBvbi4gVGhpcyB3
YXMgYmFkIGZvciBiYXR0ZXJ5IGxpZmUuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZG9tL0dlb2xv
Y2F0aW9uL3N0YXJ0VXBkYXRpbmdPbmx5V2hlblBhZ2VWaXNpYmxlLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3N0b3BVcGRhdGluZ0ZvckhpZGRlblBhZ2UuaHRtbAor
CisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVyOjphZGRPYnNlcnZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnZpZXdTdGF0ZURpZENo
YW5nZSk6CisKIDIwMTUtMDgtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBDcmFzaCB3aGVuIHJlbW92aW5nIGNoaWxkcmVuIG9mIGEgTWF0aE1MU2VsZWN0RWxl
bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9s
b2NhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDBkZjA2ZmFiOWVjY2ZkYmZhZmFkYTQ2
MDM0OGEyYTNmMGYzZjFhMzIuLmY2YmM2ZmU2Y2QxNjA5ZjViMDJkMTcxNDcxZDFmMGY3MmFhYmVh
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9j
YXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0
aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBHZW9s
b2NhdGlvbkNvbnRyb2xsZXI6OmFkZE9ic2VydmVyKEdlb2xvY2F0aW9uKiBvYnNlcnZlciwgYm9v
bCBlbmFibGVIaWdoQWMKIAogICAgIGlmIChlbmFibGVIaWdoQWNjdXJhY3kpCiAgICAgICAgIG1f
Y2xpZW50LnNldEVuYWJsZUhpZ2hBY2N1cmFjeSh0cnVlKTsKLSAgICBpZiAod2FzRW1wdHkpCisg
ICAgaWYgKHdhc0VtcHR5ICYmIG1fcGFnZS5pc1Zpc2libGUoKSkKICAgICAgICAgbV9jbGllbnQu
c3RhcnRVcGRhdGluZygpOwogfQogCkBAIC0xMjQsOCArMTI0LDE3IEBAIEdlb2xvY2F0aW9uUG9z
aXRpb24qIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6bGFzdFBvc2l0aW9uKCkKICAgICByZXR1cm4g
bV9jbGllbnQubGFzdFBvc2l0aW9uKCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVy
Ojp2aWV3U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpGbGFncywgVmlld1N0YXRlOjpGbGFncykK
K3ZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjp2aWV3U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRl
OjpGbGFncyBvbGRWaWV3U3RhdGUsIFZpZXdTdGF0ZTo6RmxhZ3MgbmV3Vmlld1N0YXRlKQogewor
ICAgIC8vIFRvZ2dsZSBHUFMgYmFzZWQgb24gcGFnZSB2aXNpYmlsaXR5IHRvIHNhdmUgYmF0dGVy
eS4KKyAgICBWaWV3U3RhdGU6OkZsYWdzIGNoYW5nZWQgPSBvbGRWaWV3U3RhdGUgXiBuZXdWaWV3
U3RhdGU7CisgICAgaWYgKGNoYW5nZWQgJiBWaWV3U3RhdGU6OklzVmlzaWJsZSAmJiAhbV9vYnNl
cnZlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChuZXdWaWV3U3RhdGUgJiBWaWV3U3RhdGU6
OklzVmlzaWJsZSkKKyAgICAgICAgICAgIG1fY2xpZW50LnN0YXJ0VXBkYXRpbmcoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9jbGllbnQuc3RvcFVwZGF0aW5nKCk7CisgICAgfQorCiAg
ICAgaWYgKCFtX3BhZ2UuaXNWaXNpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGRmZDYyNTc5YjgwNWY3
YmI4Y2U5NjAzOTQ5ZDJlN2VhN2FiYTgzZjcuLjRkMmZlMDBjMTJkNWU5NzIwZGNiZjk0MzI1MDli
MThmODQwNjU3YmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxNS0wOC0wNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIFRvZ2dsZSBHUFMgc3RhdGUgYmFzZWQgb24gcGFnZSB2aXNp
YmlsaXR5IHRvIHNhdmUgYmF0dGVyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3Njg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHRlc3RSdW5uZXIuaXNHZW9sb2NhdGlvblByb3ZpZGVyKCkgdGVz
dCBzdXBwb3J0IGZ1bmN0aW9uLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5l
ci5jcHA6CisgICAgICAgIChpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmVDYWxsYmFjayk6Cisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTW9ja0dl
b2xvY2F0aW9uUHJvdmlkZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTW9ja0dl
b2xvY2F0aW9uUHJvdmlkZXIubW06CisgICAgICAgICgtW01vY2tHZW9sb2NhdGlvblByb3ZpZGVy
IGlzQWN0aXZlXSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMu
bW06CisgICAgICAgIChUZXN0UnVubmVyOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcDoKKyAgICAgICAg
KFRlc3RSdW5uZXI6OmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oOgorICAgICAgICAoV1RSOjpH
ZW9sb2NhdGlvblByb3ZpZGVyTW9jazo6aXNBY3RpdmUpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGw6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
aDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
Y3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3Rp
dmUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5l
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxl
KToKKwogMjAxNS0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGwgb3V0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzE4Nzk3Mi4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKaW5kZXggNTAzNDAzMTE0YjBl
YjA4Zjc2ZjNhOWE0YjE2NDFhOTcwYzIwOTNiOS4uOTUxNDBkMjZhMjFjMmJjYzFlOTQyYTMxNGVm
OWNiZGM2ZTc5NTNiOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5l
ci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKQEAgLTY0Niw2
ICs2NDYsMTIgQEAgc3RhdGljIEpTVmFsdWVSZWYgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHNDYWxsYmFjayhKU0NvbnRleHQKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHMoKSk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGlzR2VvbG9jYXRp
b25Qcm92aWRlckFjdGl2ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9v
bGVhbihjb250ZXh0LCBjb250cm9sbGVyLT5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSk7
Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlQmFja05hdmlnYXRpb25DYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1w
bGVtZW50YXRpb24KQEAgLTIwMzMsNiArMjAzOSw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIFRlc3RS
dW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgIm9yaWdpbnNXaXRoQXBwbGljYXRp
b25DYWNoZSIsIG9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZUNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgImdvQmFjayIsIGdvQmFja0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sIAogICAgICAgICB7ICJp
Z25vcmVMZWdhY3lXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMiLCBpZ25vcmVMZWdh
Y3lXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHNDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAg
ICAgICB7ICJpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUiLCBpc0dlb2xvY2F0aW9uUHJvdmlk
ZXJBY3RpdmVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJpc0NvbW1hbmRFbmFibGVkIiwg
aXNDb21tYW5kRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImtlZXBXZWJIaXN0
b3J5Iiwga2VlcFdlYkhpc3RvcnlDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJudW1iZXJP
ZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyIsIG51bWJlck9mUGVuZGluZ0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L1Rlc3RSdW5uZXIuaAppbmRleCBjZGVmY2IwY2UyNjdkMTMzZTgwOWJiZTRiYjM1NjNmM2EyN2E5
MGM2Li44ZTZkNzQxMjg1NzBiY2EzYjVjZDMyODFhOGNkYzFhNTIwZDM2NjRlIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdFJ1bm5lci5oCkBAIC03Niw2ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGtl
ZXBXZWJIaXN0b3J5KCk7CiAgICAgdm9pZCBub3RpZnlEb25lKCk7CiAgICAgaW50IG51bWJlck9m
UGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7CisgICAgYm9vbCBpc0dlb2xv
Y2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKICAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0
cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKTsKICAgICBKU1N0cmluZ1JlZiBwYXRoVG9M
b2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYgdXJsKTsKICAgICB2b2lkIHF1
ZXVlQmFja05hdmlnYXRpb24oaW50IGhvd0ZhckJhY2t3YXJkKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5oIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL01vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmgKaW5kZXggYmEzYTg0MmE5
ODEwZDQwZjI0NDU3NDE1MmI3MzU5OWUxOTJjMjZkZS4uNzI2NWRjZGQ1ZWQyN2YyNTE3NzllOTg0
YTdjYjAwODFkYTczNGFjMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL01v
Y2tHZW9sb2NhdGlvblByb3ZpZGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL01v
Y2tHZW9sb2NhdGlvblByb3ZpZGVyLmgKQEAgLTQ0LDYgKzQ0LDcgQEAgQGludGVyZmFjZSBNb2Nr
R2VvbG9jYXRpb25Qcm92aWRlciA6IE5TT2JqZWN0PFdlYkdlb2xvY2F0aW9uUHJvdmlkZXI+IHsK
IC0gKHZvaWQpc2V0UG9zaXRpb25VbmF2YWlsYWJsZUVycm9yV2l0aE1lc3NhZ2U6KE5TU3RyaW5n
ICopZXJyb3JNZXNzYWdlOwogCiAtICh2b2lkKXN0b3BUaW1lcjsKKy0gKEJPT0wpaXNBY3RpdmU7
CiAKIEBlbmQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL01v
Y2tHZW9sb2NhdGlvblByb3ZpZGVyLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL01vY2tH
ZW9sb2NhdGlvblByb3ZpZGVyLm1tCmluZGV4IDQ3MmNkMzhmNGMyNGY0ZTNlMGIzNGRlNGJjNjJj
M2ZlMjZhMjdlNDYuLjE3ZTZjNDZiYTM5Zjg5NWMwYWNmYTkxZTVmZTYzMjQ0MGNjMjJlOTUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRl
ci5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTW9ja0dlb2xvY2F0aW9uUHJvdmlk
ZXIubW0KQEAgLTExNSw2ICsxMTUsMTEgQEAgLSAodm9pZClzdG9wVGltZXIKICAgICBfdGltZXIg
PSAwOwogfQogCistIChCT09MKWlzQWN0aXZlCit7CisgICAgcmV0dXJuICFfcmVnaXN0ZXJlZFZp
ZXdzLmlzRW1wdHkoKTsKK30KKwogLSAodm9pZCl0aW1lckZpcmVkCiB7CiAgICAgX3RpbWVyID0g
MDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggZWIzNGVj
ZDAxNWFkNTI0N2MwMzZkMDk2YjAxODRiMzI2ZTUxODJlMS4uZjJjYjQxMDU3YWY0MjI5NDgyZmRm
ZTUwNjRkMTMwNDVjMmU4YWZlZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KQEAgLTI1NCw2ICsyNTQsMTEgQEAgaW50IFRlc3RSdW5uZXI6Om51bWJlck9mUGVu
ZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKICAgICByZXR1cm4gWyhVSURlbGVn
YXRlICopW1ttYWluRnJhbWUgd2ViVmlld10gVUlEZWxlZ2F0ZV0gbnVtYmVyT2ZQZW5kaW5nR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHNdOwogfQogCitib29sIFRlc3RSdW5uZXI6OmlzR2Vv
bG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpCit7CisgICAgcmV0dXJuIE1vY2tHZW9sb2NhdGlvblBy
b3ZpZGVyLnNoYXJlZC5pc0FjdGl2ZTsKK30KKwogc2l6ZV90IFRlc3RSdW5uZXI6OndlYkhpc3Rv
cnlJdGVtQ291bnQoKQogewogICAgIHJldHVybiBbW1tXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVk
SGlzdG9yeV0gYWxsSXRlbXNdIGNvdW50XTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0
UnVubmVyV2luLmNwcAppbmRleCA3NDQ1NTE0MDg4NjQzMzA3MGE4NjJkODk4YWE5ZWVhNDQ1OGY5
NTY5Li5lYTRkYWVkZTQyYzgwYzYzMDZhMjRhYzU3MzQ2NWZmZjVhZDA3NzRkIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCkBAIC0yNDEsNiArMjQxLDEzIEBA
IGludCBUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cygpCiAgICAgcmV0dXJuIC0xOwogfQogCitib29sIFRlc3RSdW5uZXI6OmlzR2VvbG9jYXRp
b25Qcm92aWRlckFjdGl2ZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9j
YXRpb24gbGF5b3V0IHRlc3RzLgorICAgIHByaW50ZigiRVJST1I6IFRlc3RSdW5uZXI6OmlzR2Vv
bG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIG5vdCBpbXBsZW1lbnRlZFxuIik7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCiBzaXplX3QgVGVzdFJ1bm5lcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCiB7
CiAgICAgQ09NUHRyPElXZWJIaXN0b3J5PiBoaXN0b3J5OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCmluZGV4IGM2Mzk4NDI5MTFlNmM3Y2Jk
MDczMjg4YWY1MmFmMjExNzcxZTFkZWMuLjgwMjIyM2VjMzY1OTI5Y2RiMDU5YjJmNGY4NmQyZGM2
Yjc0MDI1MzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Q
cm92aWRlck1vY2suaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJv
dmlkZXJNb2NrLmgKQEAgLTQxLDYgKzQxLDggQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnRVcGRh
dGluZyhXS0dlb2xvY2F0aW9uTWFuYWdlclJlZik7CiAgICAgdm9pZCBzdG9wVXBkYXRpbmcoV0tH
ZW9sb2NhdGlvbk1hbmFnZXJSZWYpOwogCisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNBY3RpdmU7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHNlbmRQb3NpdGlvbklmTmVl
ZGVkKCk7CiAgICAgdm9pZCBzZW5kRXJyb3JJZk5lZWRlZCgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5l
ci5pZGwKaW5kZXggYTc4YTQ0ZTFiMjE4MzZhMTdmZjc1YTAwMDk3ZDc3NmU0YTJjMWVlNy4uMjYy
NTQ0MzkyOGEzYWM5ZDU4YWY5MDM2NTE0NjA4MzIwYmQwNTk4ZiAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RS
dW5uZXIuaWRsCkBAIC0xNjksNiArMTY5LDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAg
IHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2xlYW4gdmFsdWUpOwogICAgIHZvaWQg
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBkb3VibGUgYWNjdXJhY3ksIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgb2JqZWN0
IGFsdGl0dWRlLCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGVBY2N1cmFjeSwgb3B0aW9uYWwgb2Jq
ZWN0IGhlYWRpbmcsIG9wdGlvbmFsIG9iamVjdCBzcGVlZCk7CiAgICAgdm9pZCBzZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoRE9NU3RyaW5nIGVycm9yTWVzc2FnZSk7
CisgICAgYm9vbGVhbiBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIAogICAgIC8vIE1l
ZGlhU3RyZWFtCiAgICAgdm9pZCBzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2xlYW4gdmFsdWUp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcAppbmRleCBmYWFmMDBhYjRjMjMzM2FlZWNkMGIyMWYzNzliYjM2MGJi
OTU4ZWMyLi43ZTc3MzIyNDQ4MmQ5MTg1NTE4ZDVlYzc3MTAwZTQyNWZlNWZmYTY2IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcApAQCAtNDY0LDYgKzQ2NCwxNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJybwog
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgZXJyb3JNZXNzYWdlKTsKIH0KIAorYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNHZW9sb2Nh
dGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3QKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklz
R2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSk7CisgICAgV0tUeXBlUmVmIHJlc3VsdFRvUGFzcyA9
IDA7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShwYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOworICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gaXNBY3RpdmUoQWRvcHRXSywgc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihyZXN1bHRUb1Bhc3MpKTsKKworICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShpc0FjdGl2
ZS5nZXQoKSk7Cit9CisKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcm1pc3Np
b24oYm9vbCBlbmFibGVkKQogewogICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oCmluZGV4IGYwNDlmMWZmMWNhZTM3ODhiNzk4NDkyZmU5NGIzODcwOTlhNzRkMzAuLmEy
M2Y2NGE4N2Y3N2RkMWQ1YTcyMjljYzZmNmYzNGM2NDRlZWI1Y2IgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKQEAg
LTkxLDYgKzkxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGJvb2wpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0
dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRp
dHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91
YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGlu
ZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQpOwogICAgIHZvaWQgc2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2Fn
ZSk7CisgICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdDsKIAogICAg
IC8vIE1lZGlhU3RyZWFtLgogICAgIHZvaWQgc2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuY3BwCmluZGV4IDE3NzFmZGU4YjM0MjRmNmYzMzY0NzliZTA3YjQ5ODI2OGY4MDYxMjEuLmQ5
YzMyZWYzOTE3OGY4ZDhjZWZiMmJlZjMzYWJmMzY0Y2E3YTRlNTggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcApAQCAtNjk5
LDYgKzY5OSwxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihi
b29sIGVuYWJsZWQpCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIAorYm9vbCBUZXN0UnVubmVyOjppc0dlb2xvY2F0
aW9uUHJvdmlkZXJBY3RpdmUoKQoreworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7Cit9CisKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9u
Z2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYganNBbHRpdHVkZSwgSlNWYWx1ZVJl
ZiBqc0FsdGl0dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYganNIZWFkaW5nLCBKU1ZhbHVlUmVmIGpz
U3BlZWQpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oCmluZGV4IDA2NmM0YjA0ZGNkOWZiYjAwOGZkMjQ5NDdiMjFmMjAxYWViZTEy
MjcuLjQxNDA2YjMxNjgxMDU0NjM2NDM3YzE2MzBjYTcxMWU1YzQ5YTM0NjcgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCkBAIC0y
NTYsNiArMjU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGJvb2wpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0
dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYgYWx0aXR1
ZGUsIEpTVmFsdWVSZWYgYWx0aXR1ZGVBY2N1cmFjeSwgSlNWYWx1ZVJlZiBoZWFkaW5nLCBKU1Zh
bHVlUmVmIHNwZWVkKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFp
bGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKTsKKyAgICBib29sIGlzR2VvbG9jYXRpb25Q
cm92aWRlckFjdGl2ZSgpOwogCiAgICAgLy8gTWVkaWFTdHJlYW0KICAgICB2b2lkIHNldFVzZXJN
ZWRpYVBlcm1pc3Npb24oYm9vbCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCmluZGV4IGQzOWUwZTA3ZTA0ZTRlZGE3ODk5ZmJiNDdkNjdjNGMzNzNlMzQyODEuLjYw
NDNiNTEyZGQ3Yzk5MWMxODAzNzc0OWJjZDRmYjVmNTgyZGQ4YWIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xNDc4LDYgKzE0NzgsMTEgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6aGFuZGxlR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXS0dlb2xv
Y2F0aW9uUGVybWlzc2lvblIKICAgICBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0SWZQb3NzaWJsZSgpOwogfQogCitib29sIFRlc3RDb250cm9sbGVyOjppc0dlb2xv
Y2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2dlb2xvY2F0aW9u
UHJvdmlkZXItPmlzQWN0aXZlKCk7Cit9CisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFVzZXJN
ZWRpYVBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewogICAgIG1faXNVc2VyTWVkaWFQZXJtaXNz
aW9uU2V0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRl
eCAyMGEzNjg1MThlYWNiZjJiNWZlNmRlYWJlYmUyY2Q3M2MzNzBjYWYwLi5jZGZjYWZmOTM4YzJh
ODNjYjhhMzhkMTlkMjgwNzU5OTVlNzNlOTE3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCkBAIC04OSw2ICs4OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91
YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9v
bCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29s
IHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91
YmxlIHNwZWVkKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFi
bGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UpOwogICAgIHZvaWQgaGFuZGxlR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdChXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWYp
OworICAgIGJvb2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3Q7CiAKICAgICAv
LyBNZWRpYVN0cmVhbS4KICAgICB2b2lkIHNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9vbCk7CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IDc2ODk1OTRmNWQx
NzFlNTcxNDU0MzcwODBkNjY3ZTY3ZmIwYjkwYzYuLjdhMzZkNDllNjlmNGVkZjg4NTRiOTk0NmFj
NmMwOWQ5MTk0MWMzZjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCkBAIC02NDIsNiArNjQyLDEyIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9j
YXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpKSB7CisgICAgICAgIGJv
b2wgaXNBY3RpdmUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNHZW9sb2NhdGlvblBy
b3ZpZGVyQWN0aXZlKCk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0KEFk
b3B0V0ssIFdLQm9vbGVhbkNyZWF0ZShpc0FjdGl2ZSkpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKwogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSXNXb3JrUXVldWVFbXB0eSIpKSB7CiAgICAgICAgIGJvb2wgaXNFbXB0eSA9IFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0
eSgpOwogICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdChBZG9wdFdLLCBXS0Jv
b2xlYW5DcmVhdGUoaXNFbXB0eSkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFkNmVmYWRhZGExNzE1YjZlOTE4N2Q2YmJi
NmI4NWZiZGVkZGQ2MWUuLjk5ZGMwYTJkNzljZTdmNDQ4NTA1NjY4Mjg0MTM5YWEyMzc1M2RiMDcg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNS0wOC0wNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIFRvZ2dsZSBHUFMgc3RhdGUgYmFzZWQgb24gcGFnZSB2aXNp
YmlsaXR5IHRvIHNhdmUgYmF0dGVyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3Njg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIGxheW91dCB0ZXN0cyB0byBjaGVjayB0aGF0IHRoZSBHZW9sb2Nh
dGlvbkNsaWVudCBzdGFydHMgYW5kIHN0b3BzCisgICAgICAgIHVwZGF0aW5nIHdoZW4gcGFnZSB2
aXNpYmlsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9zdGFy
dFVwZGF0aW5nT25seVdoZW5QYWdlVmlzaWJsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3N0YXJ0VXBkYXRpbmdPbmx5V2hlblBhZ2VWaXNpYmxl
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3N0b3BVcGRhdGlu
Z0ZvckhpZGRlblBhZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9H
ZW9sb2NhdGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRkZW5QYWdlLmh0bWw6IEFkZGVkLgorCiAyMDE1
LTA4LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtFUzZd
IENsYXNzIHBhcnNlciBkb2VzIG5vdCBhbGxvdyBtZXRob2RzIG5hbWVkIHNldCBhbmQgZ2V0Lgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc3RhcnRVcGRhdGlu
Z09ubHlXaGVuUGFnZVZpc2libGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
R2VvbG9jYXRpb24vc3RhcnRVcGRhdGluZ09ubHlXaGVuUGFnZVZpc2libGUtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjJmMGRhNTkyYjFmMDIyZDY2NzhmODJiODc5YTUzYjQ4MDc0YTc2NTgKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdGFydFVw
ZGF0aW5nT25seVdoZW5QYWdlVmlzaWJsZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMCBAQAor
VGVzdHMgdGhhdCB0aGUgR2VvbG9jYXRpb25DbGllbnQgb25seSBzdGFydHMgdXBkYXRpbmcgd2hl
biB0aGUgcGFnZSBiZWNvbWVzIHZpc2libGUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BhZ2UgaXMgaW5pdGlhbGx5IHZpc2libGUKK1BBU1MgZG9jdW1lbnQuaGlkZGVuIGlzIGZh
bHNlCitQQVNTIHRlc3RSdW5uZXIuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgaXMgZmFs
c2UKK0NoYW5naW5nIHBhZ2UgdmlzaWJpbGl0eSB0byAnaGlkZGVuJworUGFnZSB2aXNpYmlsaXR5
IGNoYW5nZWQgdG8gZmFsc2UKK1BBU1MgdGVzdFJ1bm5lci5pc0dlb2xvY2F0aW9uUHJvdmlkZXJB
Y3RpdmUoKSBpcyBmYWxzZQorQWRkaW5nIEdlb2xvY2F0aW9uIHdhdGNoZXIKK1BBU1MgdGVzdFJ1
bm5lci5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBpcyBmYWxzZQorQ2hhbmdpbmcgcGFn
ZSB2aXNpYmlsaXR5IHRvICd2aXNpYmxlJworUGFnZSB2aXNpYmlsaXR5IGNoYW5nZWQgdG8gdHJ1
ZQorUEFTUyB0ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGJlY2FtZSB0
cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc3RhcnRVcGRhdGlu
Z09ubHlXaGVuUGFnZVZpc2libGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0
aW9uL3N0YXJ0VXBkYXRpbmdPbmx5V2hlblBhZ2VWaXNpYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Zi
M2UyZjdiZDFiZjMxNGRlYzNlMzIzZDFkMzc4MGQ4ZjE5OTRmMwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3N0YXJ0VXBkYXRpbmdPbmx5V2hlblBh
Z2VWaXNpYmxlLmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8c2NyaXB0Pgor
CitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0aGUgR2VvbG9jYXRpb25DbGllbnQgb25seSBzdGFy
dHMgdXBkYXRpbmcgd2hlbiB0aGUgcGFnZSBiZWNvbWVzIHZpc2libGUiKTsKK3dpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKworZnVuY3Rpb24gZ2VvbG9jYXRpb25XYXRjaEZ1bmN0aW9uKCkK
K3sKK30KKworZnVuY3Rpb24gY2hlY2tOb3RVcGRhdGluZ0FuZFNob3dQYWdlKCkKK3sKKyAgICBz
aG91bGRCZUZhbHNlKCJ0ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIik7
CisgICAgZGVidWcoIkNoYW5naW5nIHBhZ2UgdmlzaWJpbGl0eSB0byAndmlzaWJsZSciKTsKKyAg
ICB0ZXN0UnVubmVyLnNldFBhZ2VWaXNpYmlsaXR5KCJ2aXNpYmxlIik7Cit9CisKK2Z1bmN0aW9u
IG9uVmlzaWJpbGl0eUNoYW5nZSgpIHsKKyAgICBkZWJ1ZygiUGFnZSB2aXNpYmlsaXR5IGNoYW5n
ZWQgdG8gIiArICFkb2N1bWVudC5oaWRkZW4pOworICAgIGlmIChkb2N1bWVudC5oaWRkZW4pIHsK
KyAgICAgICAgc2hvdWxkQmVGYWxzZSgidGVzdFJ1bm5lci5pc0dlb2xvY2F0aW9uUHJvdmlkZXJB
Y3RpdmUoKSIpOworICAgICAgICBkZWJ1ZygiQWRkaW5nIEdlb2xvY2F0aW9uIHdhdGNoZXIiKTsK
KyAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oZ2VvbG9jYXRpb25X
YXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja05vdFVwZGF0aW5nQW5kU2hv
d1BhZ2UsIDE1MCk7CisgICAgfSBlbHNlCisgICAgICAgIHNob3VsZEJlY29tZUVxdWFsKCJ0ZXN0
UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIiwgInRydWUiLCBmaW5pc2hKU1Rl
c3QpOworfQorCitkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIiwg
b25WaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSkKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Cisg
ICAgdGVzdFJ1bm5lci5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24odHJ1ZSk7CisgICAgdGVzdFJ1
bm5lci5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbigxLCAyLCAzKTsKK30KKworZnVuY3Rpb24g
cnVuVGVzdCgpCit7CisgICAgZGVidWcoIlBhZ2UgaXMgaW5pdGlhbGx5IHZpc2libGUiKTsKKyAg
ICBzaG91bGRCZUZhbHNlKCJkb2N1bWVudC5oaWRkZW4iKTsKKyAgICBzaG91bGRCZUZhbHNlKCJ0
ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIik7CisKKyAgICBkZWJ1Zygi
Q2hhbmdpbmcgcGFnZSB2aXNpYmlsaXR5IHRvICdoaWRkZW4nIik7CisgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLnNldFBhZ2VWaXNpYmlsaXR5KCJoaWRkZW4i
KTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc3RvcFVwZGF0aW5nRm9ySGlkZGVuUGFnZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdG9wVXBkYXRpbmdG
b3JIaWRkZW5QYWdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTBkNzZhNjYyZGEyMWQ5OWNk
MGI4YzAxM2E0ZTIxMDdlYTEyYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vc3RvcFVwZGF0aW5nRm9ySGlkZGVuUGFnZS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyMCBAQAorVGVzdHMgdGhhdCB0aGUgR2VvbG9jYXRpb25DbGllbnQgc3RvcHMg
dXBkYXRpbmcgd2hlbiB0aGUgcGFnZSBiZWNvbWVzIGhpZGRlbgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUGFnZSBpcyBpbml0aWFsbHkgdmlzaWJsZQorUEFTUyBkb2N1bWVudC5o
aWRkZW4gaXMgZmFsc2UKK1BBU1MgdGVzdFJ1bm5lci5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3Rp
dmUoKSBpcyBmYWxzZQorQWRkaW5nIEdlb2xvY2F0aW9uIHdhdGNoZXIKK1BBU1MgdGVzdFJ1bm5l
ci5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBiZWNhbWUgdHJ1ZQorQ2hhbmdpbmcgcGFn
ZSB2aXNpYmlsaXR5IHRvICdoaWRkZW4nCitQYWdlIHZpc2liaWxpdHkgY2hhbmdlZCB0byBmYWxz
ZQorUEFTUyB0ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGJlY2FtZSBm
YWxzZQorQ2hhbmdpbmcgcGFnZSB2aXNpYmlsaXR5IHRvICd2aXNpYmxlJworUGFnZSB2aXNpYmls
aXR5IGNoYW5nZWQgdG8gdHJ1ZQorUEFTUyB0ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRl
ckFjdGl2ZSgpIGJlY2FtZSB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vc3RvcFVwZGF0aW5nRm9ySGlkZGVuUGFnZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vR2VvbG9jYXRpb24vc3RvcFVwZGF0aW5nRm9ySGlkZGVuUGFnZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmI4YmRkZDk2M2UxY2E5ZjZlNTNhZjc1Y2ExY2ZmNDI1ZjdlYjc4MjIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRk
ZW5QYWdlLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8c2NyaXB0PgorCitk
ZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0aGUgR2VvbG9jYXRpb25DbGllbnQgc3RvcHMgdXBkYXRp
bmcgd2hlbiB0aGUgcGFnZSBiZWNvbWVzIGhpZGRlbiIpOword2luZG93LmpzVGVzdElzQXN5bmMg
PSB0cnVlOworCitmdW5jdGlvbiBnZW9sb2NhdGlvbldhdGNoRnVuY3Rpb24oKQoreworfQorCitm
dW5jdGlvbiBzaG93UGFnZSgpCit7CisgICAgZGVidWcoIkNoYW5naW5nIHBhZ2UgdmlzaWJpbGl0
eSB0byAndmlzaWJsZSciKTsKKyAgICB0ZXN0UnVubmVyLnNldFBhZ2VWaXNpYmlsaXR5KCJ2aXNp
YmxlIik7Cit9CisKK2Z1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHsKKyAgICBkZWJ1Zygi
UGFnZSB2aXNpYmlsaXR5IGNoYW5nZWQgdG8gIiArICFkb2N1bWVudC5oaWRkZW4pOworICAgIGlm
IChkb2N1bWVudC5oaWRkZW4pCisgICAgICAgIHNob3VsZEJlY29tZUVxdWFsKCJ0ZXN0UnVubmVy
LmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIiwgImZhbHNlIiwgc2hvd1BhZ2UpOworICAg
IGVsc2UKKyAgICAgICAgc2hvdWxkQmVjb21lRXF1YWwoInRlc3RSdW5uZXIuaXNHZW9sb2NhdGlv
blByb3ZpZGVyQWN0aXZlKCkiLCAidHJ1ZSIsIGZpbmlzaEpTVGVzdCk7Cit9CisKK2RvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLCBvblZpc2liaWxpdHlDaGFuZ2Us
IGZhbHNlKQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLnNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbih0cnVlKTsKKyAgICB0ZXN0UnVubmVyLnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKDEsIDIsIDMpOworfQorCitmdW5jdGlvbiBoaWRlUGFnZSgpCit7CisgICAg
ZGVidWcoIkNoYW5naW5nIHBhZ2UgdmlzaWJpbGl0eSB0byAnaGlkZGVuJyIpOworICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRQYWdlVmlzaWJpbGl0eSgi
aGlkZGVuIik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGRlYnVnKCJQYWdlIGlz
IGluaXRpYWxseSB2aXNpYmxlIik7CisgICAgc2hvdWxkQmVGYWxzZSgiZG9jdW1lbnQuaGlkZGVu
Iik7CisgICAgc2hvdWxkQmVGYWxzZSgidGVzdFJ1bm5lci5pc0dlb2xvY2F0aW9uUHJvdmlkZXJB
Y3RpdmUoKSIpOworCisgICAgZGVidWcoIkFkZGluZyBHZW9sb2NhdGlvbiB3YXRjaGVyIik7Cisg
ICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oZ2VvbG9jYXRpb25XYXRjaEZ1
bmN0aW9uKTsKKworICAgIHNob3VsZEJlY29tZUVxdWFsKCJ0ZXN0UnVubmVyLmlzR2VvbG9jYXRp
b25Qcm92aWRlckFjdGl2ZSgpIiwgInRydWUiLCBoaWRlUGFnZSk7Cit9Cis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258401</attachid>
            <date>2015-08-06 14:45:18 -0700</date>
            <delta_ts>2015-08-06 15:38:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147685-20150806144509.patch</filename>
            <type>text/plain</type>
            <size>24254</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVkZmI2ZmMxMGFmNmZh
MjA1ODhjMDFkZjYzODYwZTA1ZjFiYjQzYS4uYTcwNjg1ZTYwZTg1OWU0ODhlNTM2MjBjMjA3NDUw
MTY2MDIwZGYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA4LTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVG9nZ2xlIEdQUyBzdGF0ZSBi
YXNlZCBvbiBwYWdlIHZpc2liaWxpdHkgdG8gc2F2ZSBiYXR0ZXJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc2ODUKKworICAgICAgICBSZXZpZXdl
ZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIFRvZ2dsZSBHUFMgc3RhdGUgYmFzZWQg
b24gcGFnZSB2aXNpYmlsaXR5IHRvIHNhdmUgYmF0dGVyeS4gUHJldmlvdXNseSwKKyAgICAgICAg
aWYgdGhlIHNpdGUgeW91IHdlcmUgdmlld2luZyB3YXMgd2F0Y2hpbmcgeW91ciBwb3NpdGlvbiBh
bmQgeW91CisgICAgICAgIHN3aXRjaGVkIHRhYiwgdGhlIEdQUyB3b3VsZCBzdGF5IG9uLiBUaGlz
IHdhcyBiYWQgZm9yIGJhdHRlcnkgbGlmZS4KKworICAgICAgICBUZXN0czogZmFzdC9kb20vR2Vv
bG9jYXRpb24vc3RhcnRVcGRhdGluZ09ubHlXaGVuUGFnZVZpc2libGUuaHRtbAorICAgICAgICAg
ICAgICAgZmFzdC9kb20vR2VvbG9jYXRpb24vc3RvcFVwZGF0aW5nRm9ySGlkZGVuUGFnZS5odG1s
CisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmFkZE9ic2VydmVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6dmlld1N0YXRlRGlk
Q2hhbmdlKToKKwogMjAxNS0wOC0wNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIENyYXNoIHdoZW4gcmVtb3ZpbmcgY2hpbGRyZW4gb2YgYSBNYXRoTUxTZWxlY3RF
bGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0
aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMGRmMDZmYWI5ZWNjZmRiZmFmYWRh
NDYwMzQ4YTJhM2YwZjNmMWEzMi4uZjZiYzZmZTZjZDE2MDlmNWIwMmQxNzE0NzFkMWYwZjcyYWFi
ZWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9s
b2NhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9j
YXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEdl
b2xvY2F0aW9uQ29udHJvbGxlcjo6YWRkT2JzZXJ2ZXIoR2VvbG9jYXRpb24qIG9ic2VydmVyLCBi
b29sIGVuYWJsZUhpZ2hBYwogCiAgICAgaWYgKGVuYWJsZUhpZ2hBY2N1cmFjeSkKICAgICAgICAg
bV9jbGllbnQuc2V0RW5hYmxlSGlnaEFjY3VyYWN5KHRydWUpOwotICAgIGlmICh3YXNFbXB0eSkK
KyAgICBpZiAod2FzRW1wdHkgJiYgbV9wYWdlLmlzVmlzaWJsZSgpKQogICAgICAgICBtX2NsaWVu
dC5zdGFydFVwZGF0aW5nKCk7CiB9CiAKQEAgLTEyNCw4ICsxMjQsMTcgQEAgR2VvbG9jYXRpb25Q
b3NpdGlvbiogR2VvbG9jYXRpb25Db250cm9sbGVyOjpsYXN0UG9zaXRpb24oKQogICAgIHJldHVy
biBtX2NsaWVudC5sYXN0UG9zaXRpb24oKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xs
ZXI6OnZpZXdTdGF0ZURpZENoYW5nZShWaWV3U3RhdGU6OkZsYWdzLCBWaWV3U3RhdGU6OkZsYWdz
KQordm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnZpZXdTdGF0ZURpZENoYW5nZShWaWV3U3Rh
dGU6OkZsYWdzIG9sZFZpZXdTdGF0ZSwgVmlld1N0YXRlOjpGbGFncyBuZXdWaWV3U3RhdGUpCiB7
CisgICAgLy8gVG9nZ2xlIEdQUyBiYXNlZCBvbiBwYWdlIHZpc2liaWxpdHkgdG8gc2F2ZSBiYXR0
ZXJ5LgorICAgIFZpZXdTdGF0ZTo6RmxhZ3MgY2hhbmdlZCA9IG9sZFZpZXdTdGF0ZSBeIG5ld1Zp
ZXdTdGF0ZTsKKyAgICBpZiAoY2hhbmdlZCAmIFZpZXdTdGF0ZTo6SXNWaXNpYmxlICYmICFtX29i
c2VydmVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG5ld1ZpZXdTdGF0ZSAmIFZpZXdTdGF0
ZTo6SXNWaXNpYmxlKQorICAgICAgICAgICAgbV9jbGllbnQuc3RhcnRVcGRhdGluZygpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2NsaWVudC5zdG9wVXBkYXRpbmcoKTsKKyAgICB9CisK
ICAgICBpZiAoIW1fcGFnZS5pc1Zpc2libGUoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGZkNjI1NzliODA1
ZjdiYjhjZTk2MDM5NDlkMmU3ZWE3YWJhODNmNy4uN2EyNzZlMDMwZDhiZmJiYjc0OTZhZDBjOGRm
NWRjODRiNjFhYmQxNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE1LTA4LTA2ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKKyAgICAgICAgVG9nZ2xlIEdQUyBzdGF0ZSBiYXNlZCBvbiBwYWdlIHZp
c2liaWxpdHkgdG8gc2F2ZSBiYXR0ZXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDc2ODUKKworICAgICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQ
b3VsYWluLgorCisgICAgICAgIEFkZCB0ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRlckFj
dGl2ZSgpIHRlc3Qgc3VwcG9ydCBmdW5jdGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlQ2Fs
bGJhY2spOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL01vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL01vY2tHZW9sb2NhdGlvblByb3ZpZGVyLm1tOgorICAgICAgICAoLVtNb2NrR2VvbG9jYXRp
b25Qcm92aWRlciBpc0FjdGl2ZV0pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9UZXN0
UnVubmVyTWFjLm1tOgorICAgICAgICAoVGVzdFJ1bm5lcjo6aXNHZW9sb2NhdGlvblByb3ZpZGVy
QWN0aXZlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHA6
CisgICAgICAgIChUZXN0UnVubmVyOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUpOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaDoKKyAgICAg
ICAgKFdUUjo6R2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OmlzQWN0aXZlKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNHZW9sb2NhdGlvblByb3ZpZGVy
QWN0aXZlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNHZW9sb2NhdGlvblBy
b3ZpZGVyQWN0aXZlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmlzR2VvbG9jYXRpb25Qcm92aWRl
ckFjdGl2ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZSk6CisKIDIwMTUtMDgtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsIG91dCBodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC8xODc5NzIuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
UnVubmVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IDUw
MzQwMzExNGIwZWIwOGY3NmYzYTlhNGIxNjQxYTk3MGMyMDkzYjkuLjk1MTQwZDI2YTIxYzJiY2Mx
ZTk0MmEzMTRlZjljYmRjNmU3OTUzYjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3Bw
CkBAIC02NDYsNiArNjQ2LDEyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG51bWJlck9mUGVuZGluZ0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzQ2FsbGJhY2soSlNDb250ZXh0CiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPm51bWJlck9mUGVuZGluZ0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBp
c0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RS
dW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1Zh
bHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+aXNHZW9sb2NhdGlvblByb3ZpZGVy
QWN0aXZlKCkpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZUJhY2tOYXZpZ2F0aW9uQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMgJiB3
aW5kb3dzIGltcGxlbWVudGF0aW9uCkBAIC0yMDMzLDYgKzIwMzksNyBAQCBKU1N0YXRpY0Z1bmN0
aW9uKiBUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUiLCBvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGVDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJnb0JhY2siLCBnb0JhY2tDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAKICAg
ICAgICAgeyAiaWdub3JlTGVnYWN5V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzIiwg
aWdub3JlTGVnYWN5V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAiaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlIiwgaXNHZW9sb2Nh
dGlvblByb3ZpZGVyQWN0aXZlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiaXNDb21tYW5k
RW5hYmxlZCIsIGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJr
ZWVwV2ViSGlzdG9yeSIsIGtlZXBXZWJIaXN0b3J5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAibnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMiLCBudW1iZXJP
ZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0NhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKaW5kZXggY2RlZmNiMGNlMjY3ZDEzM2U4MDliYmU0YmIz
NTYzZjNhMjdhOTBjNi4uOGU2ZDc0MTI4NTcwYmNhM2I1Y2QzMjgxYThjZGMxYTUyMGQzNjY0ZSAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaApAQCAtNzYsNiArNzYsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBrZWVwV2ViSGlzdG9yeSgpOwogICAgIHZvaWQgbm90aWZ5RG9uZSgpOwogICAgIGlu
dCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpOworICAgIGJv
b2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiAgICAgdm9pZCBvdmVycmlkZVByZWZl
cmVuY2UoSlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSk7CiAgICAgSlNTdHJpbmdS
ZWYgcGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmIHVybCk7CiAg
ICAgdm9pZCBxdWV1ZUJhY2tOYXZpZ2F0aW9uKGludCBob3dGYXJCYWNrd2FyZCk7CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIuaCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5oCmluZGV4
IGJhM2E4NDJhOTgxMGQ0MGYyNDQ1NzQxNTJiNzM1OTllMTkyYzI2ZGUuLjcyNjVkY2RkNWVkMjdm
MjUxNzc5ZTk4NGE3Y2IwMDgxZGE3MzRhYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5oCkBAIC00NCw2ICs0NCw3IEBAIEBpbnRl
cmZhY2UgTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIgOiBOU09iamVjdDxXZWJHZW9sb2NhdGlvblBy
b3ZpZGVyPiB7CiAtICh2b2lkKXNldFBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcldpdGhNZXNzYWdl
OihOU1N0cmluZyAqKWVycm9yTWVzc2FnZTsKIAogLSAodm9pZClzdG9wVGltZXI7CistIChCT09M
KWlzQWN0aXZlOwogCiBAZW5kCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5tbQppbmRleCA0NzJjZDM4ZjRjMjRmNGUzZTBi
MzRkZTRiYzYyYzNmZTI2YTI3ZTQ2Li4xN2U2YzQ2YmEzOWY4OTVjMGFjZmE5MWU1ZmU2MzI0NDBj
YzIyZTk1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTW9ja0dlb2xvY2F0
aW9uUHJvdmlkZXIubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL01vY2tHZW9sb2Nh
dGlvblByb3ZpZGVyLm1tCkBAIC0xMTUsNiArMTE1LDExIEBAIC0gKHZvaWQpc3RvcFRpbWVyCiAg
ICAgX3RpbWVyID0gMDsKIH0KIAorLSAoQk9PTClpc0FjdGl2ZQoreworICAgIHJldHVybiAhX3Jl
Z2lzdGVyZWRWaWV3cy5pc0VtcHR5KCk7Cit9CisKIC0gKHZvaWQpdGltZXJGaXJlZAogewogICAg
IF90aW1lciA9IDA7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1
bm5lck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCmlu
ZGV4IGViMzRlY2QwMTVhZDUyNDdjMDM2ZDA5NmIwMTg0YjMyNmU1MTgyZTEuLmYyY2I0MTA1N2Fm
NDIyOTQ4MmZkZmU1MDY0ZDEzMDQ1YzJlOGFmZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9UZXN0UnVubmVyTWFjLm1tCkBAIC0yNTQsNiArMjU0LDExIEBAIGludCBUZXN0UnVubmVyOjpu
dW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCiAgICAgcmV0dXJu
IFsoVUlEZWxlZ2F0ZSAqKVtbbWFpbkZyYW1lIHdlYlZpZXddIFVJRGVsZWdhdGVdIG51bWJlck9m
UGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzXTsKIH0KIAorYm9vbCBUZXN0UnVu
bmVyOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKQoreworICAgIHJldHVybiBNb2NrR2Vv
bG9jYXRpb25Qcm92aWRlci5zaGFyZWQuaXNBY3RpdmU7Cit9CisKIHNpemVfdCBUZXN0UnVubmVy
Ojp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKIHsKICAgICByZXR1cm4gW1tbV2ViSGlzdG9yeSBvcHRp
b25hbFNoYXJlZEhpc3RvcnldIGFsbEl0ZW1zXSBjb3VudF07CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKaW5kZXggNzQ0NTUxNDA4ODY0MzMwNzBhODYyZDg5OGFh
OWVlYTQ0NThmOTU2OS4uZWE0ZGFlZGU0MmM4MGM2MzA2YTI0YWM1NzM0NjVmZmY1YWQwNzc0ZCAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcApAQCAtMjQxLDYg
KzI0MSwxMyBAQCBpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHMoKQogICAgIHJldHVybiAtMTsKIH0KIAorYm9vbCBUZXN0UnVubmVyOjpp
c0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
Zm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICBwcmludGYoIkVSUk9SOiBUZXN0UnVu
bmVyOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBub3QgaW1wbGVtZW50ZWRcbiIpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogc2l6ZV90IFRlc3RSdW5uZXI6OndlYkhpc3RvcnlJdGVt
Q291bnQoKQogewogICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gaGlzdG9yeTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaAppbmRleCBjNjM5ODQy
OTExZTZjN2NiZDA3MzI4OGFmNTJhZjIxMTc3MWUxZGVjLi44MDIyMjNlYzM2NTkyOWNkYjA1OWIy
ZjRmODZkMmRjNmI3NDAyNTMwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dl
b2xvY2F0aW9uUHJvdmlkZXJNb2NrLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9s
b2NhdGlvblByb3ZpZGVyTW9jay5oCkBAIC00MSw2ICs0MSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHN0YXJ0VXBkYXRpbmcoV0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYpOwogICAgIHZvaWQgc3RvcFVw
ZGF0aW5nKFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmKTsKIAorICAgIGJvb2wgaXNBY3RpdmUoKSBj
b25zdCB7IHJldHVybiBtX2lzQWN0aXZlOyB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBzZW5kUG9z
aXRpb25JZk5lZWRlZCgpOwogICAgIHZvaWQgc2VuZEVycm9ySWZOZWVkZWQoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1
bm5lci5pZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L1Rlc3RSdW5uZXIuaWRsCmluZGV4IGE3OGE0NGUxYjIxODM2YTE3ZmY3NWEwMDA5N2Q3NzZlNGEy
YzFlZTcuLjI2MjU0NDM5MjhhM2FjOWQ1OGFmOTAzNjUxNDYwODMyMGJkMDU5OGYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1
bm5lci5pZGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9UZXN0UnVubmVyLmlkbApAQCAtMTY5LDYgKzE2OSw3IEBAIGludGVyZmFjZSBUZXN0UnVu
bmVyIHsKICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sZWFuIHZhbHVlKTsK
ICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91
YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlv
bmFsIG9iamVjdCBhbHRpdHVkZSwgb3B0aW9uYWwgb2JqZWN0IGFsdGl0dWRlQWNjdXJhY3ksIG9w
dGlvbmFsIG9iamVjdCBoZWFkaW5nLCBvcHRpb25hbCBvYmplY3Qgc3BlZWQpOwogICAgIHZvaWQg
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKERPTVN0cmluZyBlcnJv
ck1lc3NhZ2UpOworICAgIGJvb2xlYW4gaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiAK
ICAgICAvLyBNZWRpYVN0cmVhbQogICAgIHZvaWQgc2V0VXNlck1lZGlhUGVybWlzc2lvbihib29s
ZWFuIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggZmFhZjAwYWI0YzIzMzNhZWVjZDBiMjFm
Mzc5YmIzNjBiYjk1OGVjMi4uN2U3NzMyMjQ0ODJkOTE4NTUxOGQ1ZWM3NzEwMGU0MjVmZTVmZmE2
NiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTQ2NCw2ICs0NjQsMTYgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5n
UmVmIGVycm8KICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZSk7CiB9CiAKK2Jvb2wgSW5qZWN0ZWRCdW5kbGU6
OmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0Cit7CisgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpOworICAgIFdLVHlwZVJlZiByZXN1
bHRUb1Bhc3MgPSAwOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UocGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCAmcmVzdWx0VG9QYXNzKTsKKyAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzQWN0aXZlKEFkb3B0V0ssIHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4ocmVzdWx0VG9QYXNzKSk7CisKKyAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFs
dWUoaXNBY3RpdmUuZ2V0KCkpOworfQorCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRVc2VyTWVk
aWFQZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKIHsKICAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNlck1lZGlhUGVybWlzc2lv
biIpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuaAppbmRleCBmMDQ5ZjFmZjFjYWUzNzg4Yjc5ODQ5MmZlOTRiMzg3MDk5
YTc0ZDMwLi5hMjNmNjRhODdmNzdkZDFkNWE3MjI5Y2M2ZjZmMzRjNjQ0ZWViNWNiIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oCkBAIC05MSw2ICs5MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbihib29sKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRv
dWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHBy
b3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNj
dXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91
YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKTsKICAgICB2b2lk
IHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBl
cnJvck1lc3NhZ2UpOworICAgIGJvb2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29u
c3Q7CiAKICAgICAvLyBNZWRpYVN0cmVhbS4KICAgICB2b2lkIHNldFVzZXJNZWRpYVBlcm1pc3Np
b24oYm9vbCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAppbmRleCAxNzcxZmRlOGIzNDI0ZjZmMzM2NDc5YmUwN2I0OTgyNjhm
ODA2MTIxLi5kOWMzMmVmMzkxNzhmOGQ4Y2VmYjJiZWYzM2FiZjM2NGNhN2E0ZTU4IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAKQEAgLTY5OSw2ICs2OTksMTEgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBl
cm1pc3Npb24oYm9vbCBlbmFibGVkKQogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5z
ZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZW5hYmxlZCk7CiB9CiAKK2Jvb2wgVGVzdFJ1bm5lcjo6
aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkKK3sKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOworfQorCiB2b2lk
IFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBKU1ZhbHVlUmVmIGpzQWx0aXR1ZGUs
IEpTVmFsdWVSZWYganNBbHRpdHVkZUFjY3VyYWN5LCBKU1ZhbHVlUmVmIGpzSGVhZGluZywgSlNW
YWx1ZVJlZiBqc1NwZWVkKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCAwNjZjNGIwNGRjZDlmYmIwMDhmZDI0OTQ3YjIx
ZjIwMWFlYmUxMjI3Li40MTQwNmIzMTY4MTA1NDYzNjQzN2MxNjMwY2E3MTFlNWM0OWEzNDY3IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuaApAQCAtMjU2LDYgKzI1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbihib29sKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRv
dWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBKU1ZhbHVl
UmVmIGFsdGl0dWRlLCBKU1ZhbHVlUmVmIGFsdGl0dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYgaGVh
ZGluZywgSlNWYWx1ZVJlZiBzcGVlZCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdSZWYgbWVzc2FnZSk7CisgICAgYm9vbCBpc0dl
b2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIAogICAgIC8vIE1lZGlhU3RyZWFtCiAgICAgdm9p
ZCBzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2wpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAppbmRleCBkMzllMGUwN2UwNGU0ZWRhNzg5OWZiYjQ3ZDY3YzRjMzcz
ZTM0MjgxLi42MDQzYjUxMmRkN2M5OTFjMTgwMzc3NDliY2Q0ZmI1ZjU4MmRkOGFiIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMTQ3OCw2ICsxNDc4LDEx
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmhhbmRsZUdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QoV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SCiAgICAgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKTsKIH0KIAorYm9vbCBUZXN0Q29udHJvbGxl
cjo6aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9n
ZW9sb2NhdGlvblByb3ZpZGVyLT5pc0FjdGl2ZSgpOworfQorCiB2b2lkIFRlc3RDb250cm9sbGVy
OjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX2lzVXNlck1l
ZGlhUGVybWlzc2lvblNldCA9IHRydWU7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgKaW5kZXggMjBhMzY4NTE4ZWFjYmYyYjVmZTZkZWFiZWJlMmNkNzNjMzcwY2FmMC4uY2Rm
Y2FmZjkzOGMyYTgzY2I4YTM4ZDE5ZDI4MDc1OTk1ZTczZTkxNyAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtODksNiArODksNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1
cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVz
U3BlZWQsIGRvdWJsZSBzcGVlZCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
blVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKICAgICB2b2lkIGhh
bmRsZUdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV0tHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0UmVmKTsKKyAgICBib29sIGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0
OwogCiAgICAgLy8gTWVkaWFTdHJlYW0uCiAgICAgdm9pZCBzZXRVc2VyTWVkaWFQZXJtaXNzaW9u
KGJvb2wpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCA3
Njg5NTk0ZjVkMTcxZTU3MTQ1NDM3MDgwZDY2N2U2N2ZiMGI5MGM2Li43YTM2ZDQ5ZTY5ZjRlZGY4
ODU0Yjk5NDZhYzZjMDlkOTE5NDFjM2Y4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJ
bnZvY2F0aW9uLmNwcApAQCAtNjQyLDYgKzY0MiwxMiBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVk
QgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSkgewor
ICAgICAgICBib29sIGlzQWN0aXZlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzR2Vv
bG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOworICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IHJlc3VsdChBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUoaXNBY3RpdmUpKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIklzV29ya1F1ZXVlRW1wdHkiKSkgewogICAgICAgICBib29sIGlzRW1w
dHkgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLmlzV29y
a1F1ZXVlRW1wdHkoKTsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQoQWRv
cHRXSywgV0tCb29sZWFuQ3JlYXRlKGlzRW1wdHkpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxZDZlZmFkYWRhMTcxNWI2
ZTkxODdkNmJiYjZiODVmYmRlZGRkNjFlLi5iM2RjMDNlZTFmMzczYzI1YTM1NDQ3OWE3ZGUxMDM4
ODQ4MzVmMTk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTUtMDgtMDYgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBUb2dnbGUgR1BTIHN0YXRlIGJhc2VkIG9u
IHBhZ2UgdmlzaWJpbGl0eSB0byBzYXZlIGJhdHRlcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzY4NQorCisgICAgICAgIFJldmlld2VkIGJ5IEJl
bmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgQWRkIGxheW91dCB0ZXN0cyB0byBjaGVjayB0aGF0
IHRoZSBHZW9sb2NhdGlvbkNsaWVudCBzdGFydHMgYW5kIHN0b3BzCisgICAgICAgIHVwZGF0aW5n
IHdoZW4gcGFnZSB2aXNpYmlsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9HZW9s
b2NhdGlvbi9zdGFydFVwZGF0aW5nT25seVdoZW5QYWdlVmlzaWJsZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3N0YXJ0VXBkYXRpbmdPbmx5V2hl
blBhZ2VWaXNpYmxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9u
L3N0b3BVcGRhdGluZ0ZvckhpZGRlblBhZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRkZW5QYWdlLmh0bWw6IEFk
ZGVkLgorCiAyMDE1LTA4LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFtFUzZdIENsYXNzIHBhcnNlciBkb2VzIG5vdCBhbGxvdyBtZXRob2RzIG5hbWVkIHNl
dCBhbmQgZ2V0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24v
c3RhcnRVcGRhdGluZ09ubHlXaGVuUGFnZVZpc2libGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc3RhcnRVcGRhdGluZ09ubHlXaGVuUGFnZVZpc2libGUt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmMGRhNTkyYjFmMDIyZDY2NzhmODJiODc5YTUzYjQ4
MDc0YTc2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2Nh
dGlvbi9zdGFydFVwZGF0aW5nT25seVdoZW5QYWdlVmlzaWJsZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwyMCBAQAorVGVzdHMgdGhhdCB0aGUgR2VvbG9jYXRpb25DbGllbnQgb25seSBzdGFydHMg
dXBkYXRpbmcgd2hlbiB0aGUgcGFnZSBiZWNvbWVzIHZpc2libGUKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BhZ2UgaXMgaW5pdGlhbGx5IHZpc2libGUKK1BBU1MgZG9jdW1lbnQu
aGlkZGVuIGlzIGZhbHNlCitQQVNTIHRlc3RSdW5uZXIuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0
aXZlKCkgaXMgZmFsc2UKK0NoYW5naW5nIHBhZ2UgdmlzaWJpbGl0eSB0byAnaGlkZGVuJworUGFn
ZSB2aXNpYmlsaXR5IGNoYW5nZWQgdG8gZmFsc2UKK1BBU1MgdGVzdFJ1bm5lci5pc0dlb2xvY2F0
aW9uUHJvdmlkZXJBY3RpdmUoKSBpcyBmYWxzZQorQWRkaW5nIEdlb2xvY2F0aW9uIHdhdGNoZXIK
K1BBU1MgdGVzdFJ1bm5lci5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBpcyBmYWxzZQor
Q2hhbmdpbmcgcGFnZSB2aXNpYmlsaXR5IHRvICd2aXNpYmxlJworUGFnZSB2aXNpYmlsaXR5IGNo
YW5nZWQgdG8gdHJ1ZQorUEFTUyB0ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2
ZSgpIGJlY2FtZSB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24v
c3RhcnRVcGRhdGluZ09ubHlXaGVuUGFnZVZpc2libGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0dlb2xvY2F0aW9uL3N0YXJ0VXBkYXRpbmdPbmx5V2hlblBhZ2VWaXNpYmxlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNWU2OWFjMWNkZTZkYzAzZmY0Yzk5OGE0NjEyYWVkOWFjMTg3MjUyNQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3N0YXJ0VXBkYXRp
bmdPbmx5V2hlblBhZ2VWaXNpYmxlLmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+
Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0aGUgR2VvbG9jYXRpb25DbGll
bnQgb25seSBzdGFydHMgdXBkYXRpbmcgd2hlbiB0aGUgcGFnZSBiZWNvbWVzIHZpc2libGUiKTsK
K3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVuY3Rpb24gZ2VvbG9jYXRpb25XYXRj
aEZ1bmN0aW9uKCkKK3sKK30KKworZnVuY3Rpb24gY2hlY2tOb3RVcGRhdGluZ0FuZFNob3dQYWdl
KCkKK3sKKyAgICBzaG91bGRCZUZhbHNlKCJ0ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRl
ckFjdGl2ZSgpIik7CisgICAgZGVidWcoIkNoYW5naW5nIHBhZ2UgdmlzaWJpbGl0eSB0byAndmlz
aWJsZSciKTsKKyAgICB0ZXN0UnVubmVyLnNldFBhZ2VWaXNpYmlsaXR5KCJ2aXNpYmxlIik7Cit9
CisKK2Z1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHsKKyAgICBkZWJ1ZygiUGFnZSB2aXNp
YmlsaXR5IGNoYW5nZWQgdG8gIiArICFkb2N1bWVudC5oaWRkZW4pOworICAgIGlmIChkb2N1bWVu
dC5oaWRkZW4pIHsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgidGVzdFJ1bm5lci5pc0dlb2xvY2F0
aW9uUHJvdmlkZXJBY3RpdmUoKSIpOworICAgICAgICBkZWJ1ZygiQWRkaW5nIEdlb2xvY2F0aW9u
IHdhdGNoZXIiKTsKKyAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24o
Z2VvbG9jYXRpb25XYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja05vdFVw
ZGF0aW5nQW5kU2hvd1BhZ2UsIDUwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2hvdWxkQmVjb21l
RXF1YWwoInRlc3RSdW5uZXIuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkiLCAidHJ1ZSIs
IGZpbmlzaEpTVGVzdCk7Cit9CisKK2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxp
dHljaGFuZ2UiLCBvblZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKQorCitpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbih0cnVlKTsK
KyAgICB0ZXN0UnVubmVyLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKDEsIDIsIDMpOworfQor
CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBkZWJ1ZygiUGFnZSBpcyBpbml0aWFsbHkgdmlz
aWJsZSIpOworICAgIHNob3VsZEJlRmFsc2UoImRvY3VtZW50LmhpZGRlbiIpOworICAgIHNob3Vs
ZEJlRmFsc2UoInRlc3RSdW5uZXIuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkiKTsKKwor
ICAgIGRlYnVnKCJDaGFuZ2luZyBwYWdlIHZpc2liaWxpdHkgdG8gJ2hpZGRlbiciKTsKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIuc2V0UGFnZVZpc2liaWxp
dHkoImhpZGRlbiIpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRk
ZW5QYWdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3N0
b3BVcGRhdGluZ0ZvckhpZGRlblBhZ2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxMGQ3NmE2
NjJkYTIxZDk5Y2QwYjhjMDEzYTRlMjEwN2VhMTJiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRkZW5QYWdlLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDIwIEBACitUZXN0cyB0aGF0IHRoZSBHZW9sb2NhdGlvbkNs
aWVudCBzdG9wcyB1cGRhdGluZyB3aGVuIHRoZSBwYWdlIGJlY29tZXMgaGlkZGVuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQYWdlIGlzIGluaXRpYWxseSB2aXNpYmxlCitQQVNT
IGRvY3VtZW50LmhpZGRlbiBpcyBmYWxzZQorUEFTUyB0ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Q
cm92aWRlckFjdGl2ZSgpIGlzIGZhbHNlCitBZGRpbmcgR2VvbG9jYXRpb24gd2F0Y2hlcgorUEFT
UyB0ZXN0UnVubmVyLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGJlY2FtZSB0cnVlCitD
aGFuZ2luZyBwYWdlIHZpc2liaWxpdHkgdG8gJ2hpZGRlbicKK1BhZ2UgdmlzaWJpbGl0eSBjaGFu
Z2VkIHRvIGZhbHNlCitQQVNTIHRlc3RSdW5uZXIuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZl
KCkgYmVjYW1lIGZhbHNlCitDaGFuZ2luZyBwYWdlIHZpc2liaWxpdHkgdG8gJ3Zpc2libGUnCitQ
YWdlIHZpc2liaWxpdHkgY2hhbmdlZCB0byB0cnVlCitQQVNTIHRlc3RSdW5uZXIuaXNHZW9sb2Nh
dGlvblByb3ZpZGVyQWN0aXZlKCkgYmVjYW1lIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9HZW9sb2NhdGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRkZW5QYWdlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zdG9wVXBkYXRpbmdGb3JIaWRkZW5QYWdlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjhiZGRkOTYzZTFjYTlmNmU1M2FmNzVjYTFjZmY0MjVmN2ViNzgyMgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3N0b3BVcGRh
dGluZ0ZvckhpZGRlblBhZ2UuaHRtbApAQCAtMCwwICsxLDU4IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxz
Y3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHRoZSBHZW9sb2NhdGlvbkNsaWVudCBz
dG9wcyB1cGRhdGluZyB3aGVuIHRoZSBwYWdlIGJlY29tZXMgaGlkZGVuIik7Cit3aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7CisKK2Z1bmN0aW9uIGdlb2xvY2F0aW9uV2F0Y2hGdW5jdGlvbigp
Cit7Cit9CisKK2Z1bmN0aW9uIHNob3dQYWdlKCkKK3sKKyAgICBkZWJ1ZygiQ2hhbmdpbmcgcGFn
ZSB2aXNpYmlsaXR5IHRvICd2aXNpYmxlJyIpOworICAgIHRlc3RSdW5uZXIuc2V0UGFnZVZpc2li
aWxpdHkoInZpc2libGUiKTsKK30KKworZnVuY3Rpb24gb25WaXNpYmlsaXR5Q2hhbmdlKCkgewor
ICAgIGRlYnVnKCJQYWdlIHZpc2liaWxpdHkgY2hhbmdlZCB0byAiICsgIWRvY3VtZW50LmhpZGRl
bik7CisgICAgaWYgKGRvY3VtZW50LmhpZGRlbikKKyAgICAgICAgc2hvdWxkQmVjb21lRXF1YWwo
InRlc3RSdW5uZXIuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkiLCAiZmFsc2UiLCBzaG93
UGFnZSk7CisgICAgZWxzZQorICAgICAgICBzaG91bGRCZWNvbWVFcXVhbCgidGVzdFJ1bm5lci5p
c0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSIsICJ0cnVlIiwgZmluaXNoSlNUZXN0KTsKK30K
KworZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsIG9uVmlzaWJp
bGl0eUNoYW5nZSwgZmFsc2UpCisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RS
dW5uZXIuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKHRydWUpOworICAgIHRlc3RSdW5uZXIuc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oMSwgMiwgMyk7Cit9CisKK2Z1bmN0aW9uIGhpZGVQYWdl
KCkKK3sKKyAgICBkZWJ1ZygiQ2hhbmdpbmcgcGFnZSB2aXNpYmlsaXR5IHRvICdoaWRkZW4nIik7
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLnNldFBhZ2VW
aXNpYmlsaXR5KCJoaWRkZW4iKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgZGVi
dWcoIlBhZ2UgaXMgaW5pdGlhbGx5IHZpc2libGUiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJkb2N1
bWVudC5oaWRkZW4iKTsKKyAgICBzaG91bGRCZUZhbHNlKCJ0ZXN0UnVubmVyLmlzR2VvbG9jYXRp
b25Qcm92aWRlckFjdGl2ZSgpIik7CisKKyAgICBkZWJ1ZygiQWRkaW5nIEdlb2xvY2F0aW9uIHdh
dGNoZXIiKTsKKyAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihnZW9sb2Nh
dGlvbldhdGNoRnVuY3Rpb24pOworCisgICAgc2hvdWxkQmVjb21lRXF1YWwoInRlc3RSdW5uZXIu
aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkiLCAidHJ1ZSIsIGhpZGVQYWdlKTsKK30KKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>