<?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>220835</bug_id>
          
          <creation_ts>2021-01-21 16:06:29 -0800</creation_ts>
          <short_desc>Send the end XRSessionEvent after the platform-specific steps for session shutdown have completed</short_desc>
          <delta_ts>2021-01-28 10:14:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebXR</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ada Chan">adachan</reporter>
          <assigned_to name="Ada Chan">adachan</assigned_to>
          <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>svillar</cc>
    
    <cc>tsavell</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1721391</commentid>
    <comment_count>0</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-21 16:06:29 -0800</bug_when>
    <thetext>Send the end XRSessionEvent after the platform-specific steps for session shutdown have completed.

Will need a way for the PlatformXR::Device to notify the WebXRSession when the platform has completed the session shutdown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721393</commentid>
    <comment_count>1</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-21 16:08:06 -0800</bug_when>
    <thetext>rdar://72014363</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721413</commentid>
    <comment_count>2</comment_count>
      <attachid>418099</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-21 16:44:59 -0800</bug_when>
    <thetext>Created attachment 418099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721447</commentid>
    <comment_count>3</comment_count>
      <attachid>418099</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-01-21 18:17:30 -0800</bug_when>
    <thetext>Comment on attachment 418099
Patch

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

&gt; Source/WebCore/Modules/webxr/WebXRSession.h:106
&gt; +    void shutdown(InitiatedBySystem);

Should the parameter have a default value?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721618</commentid>
    <comment_count>4</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-22 10:17:16 -0800</bug_when>
    <thetext>(In reply to Dean Jackson from comment #3)
&gt; Comment on attachment 418099 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=418099&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.h:106
&gt; &gt; +    void shutdown(InitiatedBySystem);
&gt; 
&gt; Should the parameter have a default value?

I don&apos;t think it&apos;s needed as it&apos;s a private method in WebXRSession and it&apos;s only called twice (once with each value). By leaving out the default value, it forces the caller to think about which value to use when calling it.

Do you think there&apos;s a good reason for a default value here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721813</commentid>
    <comment_count>5</comment_count>
      <attachid>418209</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-22 19:59:15 -0800</bug_when>
    <thetext>Created attachment 418209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721814</commentid>
    <comment_count>6</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-22 20:00:51 -0800</bug_when>
    <thetext>Some minor updates to the last version:
- Added [MayThrowException] to the end() method in WebXRSession.idl.
- A couple of comment changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721911</commentid>
    <comment_count>7</comment_count>
      <attachid>418209</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-24 09:48:48 -0800</bug_when>
    <thetext>Comment on attachment 418209
Patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +

Any thoughts on how we could test this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721989</commentid>
    <comment_count>8</comment_count>
      <attachid>418209</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-01-25 01:25:02 -0800</bug_when>
    <thetext>Comment on attachment 418209
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt; +
&gt; 
&gt; Any thoughts on how we could test this?

Maybe using the WebFakeXRDevice we have in WebCore/testing?

I guess we should at least test the following situations
* supports shutdown notification with InitiatedBySystem::Yes and InitiatedBySystem::No
* *does not* support shutdown notification with InitiatedBySystem::Yes and InitiatedBySystem::No

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:391
&gt; +        return Exception { InvalidStateError };

I don&apos;t remember something like this in the spec. I guess you should report an issue in the specs github along with a test for the WPT test suite.

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:415
&gt; +// MARK: - TrackingAndRenderingClient

What&apos;s this?

&gt; Source/WebCore/platform/xr/PlatformXR.h:53
&gt; +    // TODO: handle visibility changes

WebKit uses FIXME instead of TODO

&gt; Source/WebCore/platform/xr/PlatformXR.h:77
&gt; +    virtual bool willNotifySessionShutdown() const { return false; }

This is a bit of bikeshedding but willDoXXX() methods in Webkit normally are called before a DoXXX() method, i.e., are used to let clients set up themselves for a later call. In this case I think it&apos;s better to use something like supportsSessionShutdownNotification().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722130</commentid>
    <comment_count>9</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-25 10:47:54 -0800</bug_when>
    <thetext>(In reply to Sergio Villar Senin from comment #8)
&gt; Comment on attachment 418209 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=418209&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:16
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; Any thoughts on how we could test this?
&gt; 
&gt; Maybe using the WebFakeXRDevice we have in WebCore/testing?
&gt; 
&gt; I guess we should at least test the following situations
&gt; * supports shutdown notification with InitiatedBySystem::Yes and
&gt; InitiatedBySystem::No
&gt; * *does not* support shutdown notification with InitiatedBySystem::Yes and
&gt; InitiatedBySystem::No

I&apos;ll take a look at the existing webxr layout tests to see how I can use WebFakeXRDevice to test these situations.

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:391
&gt; &gt; +        return Exception { InvalidStateError };
&gt; 
&gt; I don&apos;t remember something like this in the spec. I guess you should report
&gt; an issue in the specs github along with a test for the WPT test suite.

This is more of my attempt to simplify the handling of this situation. A more complicated alternative would be to save off the end promise (so we&apos;ll end up storing a list of these end promises) and resolve them when the session termination has completed.

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:415
&gt; &gt; +// MARK: - TrackingAndRenderingClient
&gt; 
&gt; What&apos;s this?

It&apos;s a protocol that WebXRSession implements. PlatformXR::Device communicates session updates (such as when the session termination has completed) through this protocol.

&gt; 
&gt; &gt; Source/WebCore/platform/xr/PlatformXR.h:53
&gt; &gt; +    // TODO: handle visibility changes
&gt; 
&gt; WebKit uses FIXME instead of TODO

OK, will fix.

&gt; 
&gt; &gt; Source/WebCore/platform/xr/PlatformXR.h:77
&gt; &gt; +    virtual bool willNotifySessionShutdown() const { return false; }
&gt; 
&gt; This is a bit of bikeshedding but willDoXXX() methods in Webkit normally are
&gt; called before a DoXXX() method, i.e., are used to let clients set up
&gt; themselves for a later call. In this case I think it&apos;s better to use
&gt; something like supportsSessionShutdownNotification().

That&apos;s a good idea. I&apos;ll switch to the method name you suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722611</commentid>
    <comment_count>10</comment_count>
      <attachid>418451</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-26 11:26:56 -0800</bug_when>
    <thetext>Created attachment 418451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722613</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-01-26 11:28:12 -0800</bug_when>
    <thetext>This patch modifies the imported WPT tests. Please ensure that any changes on the tests (not coming from a WPT import) are exported to WPT. Please see https://trac.webkit.org/wiki/WPTExportProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722738</commentid>
    <comment_count>12</comment_count>
      <attachid>418478</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-26 14:57:08 -0800</bug_when>
    <thetext>Created attachment 418478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722740</commentid>
    <comment_count>13</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-26 14:58:47 -0800</bug_when>
    <thetext>Added new tests under http/wpt/webxr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722742</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-01-26 15:00:49 -0800</bug_when>
    <thetext>(In reply to Ada Chan from comment #13)
&gt; Added new tests under http/wpt/webxr.

Are these tests coming from upstream web-platform-tests (wpt) or did you write them? If they are imported from upstream wpt, they need to go under LayoutTests/imported/w3c/web-platform-tests/. If you wrote them, you put them in the right place already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722744</commentid>
    <comment_count>15</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-26 15:11:21 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #14)
&gt; (In reply to Ada Chan from comment #13)
&gt; &gt; Added new tests under http/wpt/webxr.
&gt; 
&gt; Are these tests coming from upstream web-platform-tests (wpt) or did you
&gt; write them? If they are imported from upstream wpt, they need to go under
&gt; LayoutTests/imported/w3c/web-platform-tests/. If you wrote them, you put
&gt; them in the right place already.

Yes, I wrote these tests, not from upstream wpt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722745</commentid>
    <comment_count>16</comment_count>
      <attachid>418478</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-01-26 15:12:49 -0800</bug_when>
    <thetext>Comment on attachment 418478
Patch

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

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:61
&gt; +    m_device-&gt;setTrackingAndRenderingClient(makeWeakPtr((PlatformXR::TrackingAndRenderingClient*)this));

Please don&apos;t use C-casts (static_cast&lt;&gt; is preferred). Also, why is this cast needed?

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:323
&gt; +    Ref&lt;WebXRSession&gt; protectedThis(*this);

I think we like this pattern more nowadays:
auto protectedThis = makeRef(*this);

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:390
&gt; +    if (m_ended)

I am looking at the spec [1] but I don&apos;t see this behavior specified anyway. Why should we throw in this case?

[1] https://immersive-web.github.io/webxr/#dom-xrsession-end

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:391
&gt; +        return Exception { InvalidStateError };

Please provide a proper error message as second parameter.

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:400
&gt; +    m_endPromise = WTF::makeUnique&lt;EndPromise&gt;(WTFMove(promise));

WTF:: should not me needed.

Also why the makeUnique? Cannot we just do m_endPromise = WTFMove(promise) and have the data member use Optional&lt;EndPromise&gt;?

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:415
&gt; +// MARK: - TrackingAndRenderingClient

Not sure what that is. We don&apos;t do this in WebKit usually :)

&gt; Source/WebCore/Modules/webxr/WebXRSession.h:84
&gt;  

You will likely need something like this to avoid your earlier cast:
    using EventTargetWithInlineData::weakPtrFactory;
    using WeakValueType = EventTargetWithInlineData::WeakValueType;

&gt; Source/WebCore/Modules/webxr/WebXRSession.h:105
&gt; +    enum class InitiatedBySystem { No, Yes };

enum class InitiatedBySystem : bool { No, Yes };

&gt; Source/WebCore/platform/xr/PlatformXR.h:73
&gt; +    void setTrackingAndRenderingClient(WeakPtr&lt;TrackingAndRenderingClient&gt;&amp;&amp; client) { m_trackingAndRenderingClient = client; }

= WTFMove(client)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722778</commentid>
    <comment_count>17</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-26 16:46:25 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #16)
&gt; Comment on attachment 418478 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=418478&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:61
&gt; &gt; +    m_device-&gt;setTrackingAndRenderingClient(makeWeakPtr((PlatformXR::TrackingAndRenderingClient*)this));
&gt; 
&gt; Please don&apos;t use C-casts (static_cast&lt;&gt; is preferred). Also, why is this
&gt; cast needed?

Thanks for your later suggestion, I don&apos;t need this cast anymore.

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:323
&gt; &gt; +    Ref&lt;WebXRSession&gt; protectedThis(*this);
&gt; 
&gt; I think we like this pattern more nowadays:
&gt; auto protectedThis = makeRef(*this);

Got it!

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:390
&gt; &gt; +    if (m_ended)
&gt; 
&gt; I am looking at the spec [1] but I don&apos;t see this behavior specified anyway.
&gt; Why should we throw in this case?
&gt; 
&gt; [1] https://immersive-web.github.io/webxr/#dom-xrsession-end

It simplifies the handling of this scenario, and turns out this matches Chromium&apos;s behavior too.

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:391
&gt; &gt; +        return Exception { InvalidStateError };
&gt; 
&gt; Please provide a proper error message as second parameter.

Done.

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:400
&gt; &gt; +    m_endPromise = WTF::makeUnique&lt;EndPromise&gt;(WTFMove(promise));
&gt; 
&gt; WTF:: should not me needed.

Removed.

&gt; 
&gt; Also why the makeUnique? Cannot we just do m_endPromise = WTFMove(promise)
&gt; and have the data member use Optional&lt;EndPromise&gt;?

Yep, I&apos;ve followed your suggestion.

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:415
&gt; &gt; +// MARK: - TrackingAndRenderingClient
&gt; 
&gt; Not sure what that is. We don&apos;t do this in WebKit usually :)

Oh I see. It was the strangeness of the comment! I&apos;ll remove it.

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.h:84
&gt; &gt;  
&gt; 
&gt; You will likely need something like this to avoid your earlier cast:
&gt;     using EventTargetWithInlineData::weakPtrFactory;
&gt;     using WeakValueType = EventTargetWithInlineData::WeakValueType;
&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.h:105
&gt; &gt; +    enum class InitiatedBySystem { No, Yes };
&gt; 
&gt; enum class InitiatedBySystem : bool { No, Yes };

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/xr/PlatformXR.h:73
&gt; &gt; +    void setTrackingAndRenderingClient(WeakPtr&lt;TrackingAndRenderingClient&gt;&amp;&amp; client) { m_trackingAndRenderingClient = client; }
&gt; 
&gt; = WTFMove(client)

Fixed.

Thanks for the feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722779</commentid>
    <comment_count>18</comment_count>
      <attachid>418489</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-26 16:52:47 -0800</bug_when>
    <thetext>Created attachment 418489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722786</commentid>
    <comment_count>19</comment_count>
      <attachid>418489</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-01-26 17:16:20 -0800</bug_when>
    <thetext>Comment on attachment 418489
Patch

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

r=me with changes

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:391
&gt; +        return Exception { InvalidStateError, &quot;Cannot end a session more than once&quot; };

return Exception { InvalidStateError, &quot;Cannot end a session more than once&quot;_s };

is slightly more efficient since the second parameter is a String.

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:400
&gt; +    m_endPromise = WTFMove(promise);

I would suggest adding the following assertion right before the assignment, just to make sure we never overwrite an existing promise (which would then never get resolved):
ASSERT(!m_endPromise);

&gt; Source/WebCore/Modules/webxr/WebXRSession.h:89
&gt; +    void sessionDidEnd() final;

Does this really need to be public?

&gt; LayoutTests/platform/mac/TestExpectations:2261
&gt; +# --- Start WebXR tests --- #

I would just use:
# WebXR tests

&gt; LayoutTests/platform/mac/TestExpectations:2263
&gt; +http/wpt/webxr/xrSession_end_device_reports_shutdown.https.html [ Pass ]

You likely want to [ Skip ] http/wpt/webxr in LayoutTests/TestExpectations, like we do for imported/w3c/web-platform-tests/webxr already. If the tests are not skipped globally, then it makes no sense to enabled them for specific platforms.

&gt; LayoutTests/platform/mac/TestExpectations:2266
&gt; +# --- End WebXR tests --- #

I don&apos;t think we need this end comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722787</commentid>
    <comment_count>20</comment_count>
      <attachid>418489</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-01-26 17:17:51 -0800</bug_when>
    <thetext>Comment on attachment 418489
Patch

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

&gt; LayoutTests/platform/mac/TestExpectations:2264
&gt; +http/wpt/webxr/xrSession_ended_by_system.https.html [ Pass ]

Do you foresee that we&apos;ll add tests to http/wpt/webxr that don&apos;t pass on macOS? If not, I&apos;d suggest marking the whole folder as [ Pass ]:
http/wpt/webxr [ Pass ]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722788</commentid>
    <comment_count>21</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-26 17:19:05 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #20)
&gt; Comment on attachment 418489 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=418489&amp;action=review
&gt; 
&gt; &gt; LayoutTests/platform/mac/TestExpectations:2264
&gt; &gt; +http/wpt/webxr/xrSession_ended_by_system.https.html [ Pass ]
&gt; 
&gt; Do you foresee that we&apos;ll add tests to http/wpt/webxr that don&apos;t pass on
&gt; macOS? If not, I&apos;d suggest marking the whole folder as [ Pass ]:
&gt; http/wpt/webxr [ Pass ]

That&apos;s a good point. I&apos;ll change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722792</commentid>
    <comment_count>22</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-26 17:33:28 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #19)
&gt; Comment on attachment 418489 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=418489&amp;action=review
&gt; 
&gt; r=me with changes
&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:391
&gt; &gt; +        return Exception { InvalidStateError, &quot;Cannot end a session more than once&quot; };
&gt; 
&gt; return Exception { InvalidStateError, &quot;Cannot end a session more than
&gt; once&quot;_s };
&gt; 
&gt; is slightly more efficient since the second parameter is a String.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:400
&gt; &gt; +    m_endPromise = WTFMove(promise);
&gt; 
&gt; I would suggest adding the following assertion right before the assignment,
&gt; just to make sure we never overwrite an existing promise (which would then
&gt; never get resolved):
&gt; ASSERT(!m_endPromise);

Good idea. Fixed.

&gt; 
&gt; &gt; Source/WebCore/Modules/webxr/WebXRSession.h:89
&gt; &gt; +    void sessionDidEnd() final;
&gt; 
&gt; Does this really need to be public?

Nope, moved it to private.

&gt; 
&gt; &gt; LayoutTests/platform/mac/TestExpectations:2261
&gt; &gt; +# --- Start WebXR tests --- #
&gt; 
&gt; I would just use:
&gt; # WebXR tests

Fixed.

&gt; 
&gt; &gt; LayoutTests/platform/mac/TestExpectations:2263
&gt; &gt; +http/wpt/webxr/xrSession_end_device_reports_shutdown.https.html [ Pass ]
&gt; 
&gt; You likely want to [ Skip ] http/wpt/webxr in LayoutTests/TestExpectations,
&gt; like we do for imported/w3c/web-platform-tests/webxr already. If the tests
&gt; are not skipped globally, then it makes no sense to enabled them for
&gt; specific platforms.

I see. I added the skip in LayoutTests/TestExpectations.

&gt; 
&gt; &gt; LayoutTests/platform/mac/TestExpectations:2266
&gt; &gt; +# --- End WebXR tests --- #
&gt; 
&gt; I don&apos;t think we need this end comment.

OK, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722794</commentid>
    <comment_count>23</comment_count>
      <attachid>418493</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-26 17:39:59 -0800</bug_when>
    <thetext>Created attachment 418493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722880</commentid>
    <comment_count>24</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-01-27 02:35:26 -0800</bug_when>
    <thetext>A couple of comments about the tests. You&apos;re adding a lot of resource files from WPT that are already in LayoutTests/imported/w3c/web-platform-tests/webxr/resources. I don&apos;t see the point of importing them in a different directory.

Secondly, some of them might indeed be non exportable to WPT as you&apos;re testing a WebKit implementation detail but http/ does not seem the best place to me to put those on.

Last but not least, I still believe that if we want to throw exceptions in the end() method then we must send a PR to the specs and the corresponding tests to the WPT test suite. The fact that Chrome does it reinforces that idea.

BTW would you mind adding those tests also to the WPE TestExpectations file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722978</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-01-27 07:34:42 -0800</bug_when>
    <thetext>(In reply to Sergio Villar Senin from comment #24)
&gt; A couple of comments about the tests. You&apos;re adding a lot of resource files
&gt; from WPT that are already in
&gt; LayoutTests/imported/w3c/web-platform-tests/webxr/resources. I don&apos;t see the
&gt; point of importing them in a different directory.

It is true that tests in http/wpt/ have access to resources in LayoutTests/imported/w3c/web-platform-tests/webxr/ so there is no need for duplication. IIRC, when the WPT server runs, files under http/wpt/ are exposed under imported/w3c/web-platform-tests/webkit/

&gt; 
&gt; Secondly, some of them might indeed be non exportable to WPT as you&apos;re
&gt; testing a WebKit implementation detail but http/ does not seem the best
&gt; place to me to put those on.

I personally don&apos;t see an issue with putting browser-specific tests under http/tests/wpt as long as they use the WPT infrastructure.

&gt; 
&gt; Last but not least, I still believe that if we want to throw exceptions in
&gt; the end() method then we must send a PR to the specs and the corresponding
&gt; tests to the WPT test suite. The fact that Chrome does it reinforces that
&gt; idea.

Maybe filing an issue against the spec on GitHub at least?

&gt; 
&gt; BTW would you mind adding those tests also to the WPE TestExpectations file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723071</commentid>
    <comment_count>26</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-27 11:12:42 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #25)
&gt; (In reply to Sergio Villar Senin from comment #24)
&gt; &gt; A couple of comments about the tests. You&apos;re adding a lot of resource files
&gt; &gt; from WPT that are already in
&gt; &gt; LayoutTests/imported/w3c/web-platform-tests/webxr/resources. I don&apos;t see the
&gt; &gt; point of importing them in a different directory.
&gt; 
&gt; It is true that tests in http/wpt/ have access to resources in
&gt; LayoutTests/imported/w3c/web-platform-tests/webxr/ so there is no need for
&gt; duplication. IIRC, when the WPT server runs, files under http/wpt/ are
&gt; exposed under imported/w3c/web-platform-tests/webkit/

I have removed the files in resources and updated the paths to those files in the tests.

&gt; 
&gt; &gt; 
&gt; &gt; Secondly, some of them might indeed be non exportable to WPT as you&apos;re
&gt; &gt; testing a WebKit implementation detail but http/ does not seem the best
&gt; &gt; place to me to put those on.
&gt; 
&gt; I personally don&apos;t see an issue with putting browser-specific tests under
&gt; http/tests/wpt as long as they use the WPT infrastructure.
&gt; 
&gt; &gt; 
&gt; &gt; Last but not least, I still believe that if we want to throw exceptions in
&gt; &gt; the end() method then we must send a PR to the specs and the corresponding
&gt; &gt; tests to the WPT test suite. The fact that Chrome does it reinforces that
&gt; &gt; idea.
&gt; 
&gt; Maybe filing an issue against the spec on GitHub at least?

I&apos;ll look into it.

&gt; 
&gt; &gt; 
&gt; &gt; BTW would you mind adding those tests also to the WPE TestExpectations file?

I&apos;ll add them to wpe/TestExpectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723078</commentid>
    <comment_count>27</comment_count>
      <attachid>418567</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-27 11:20:57 -0800</bug_when>
    <thetext>Created attachment 418567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723126</commentid>
    <comment_count>28</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-27 13:59:05 -0800</bug_when>
    <thetext>I&apos;ve filed an issue against the spec regarding XRSession.end():
https://github.com/immersive-web/webxr/issues/1166</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723135</commentid>
    <comment_count>29</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-27 14:14:24 -0800</bug_when>
    <thetext>Committed r271988: &lt;https://trac.webkit.org/changeset/271988&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 418567.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723381</commentid>
    <comment_count>30</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2021-01-28 09:06:09 -0800</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/271988/webkit

introduced 3 constantly failing tests:

http/wpt/webxr/xrSession_end_device_reports_shutdown.https.html
http/wpt/webxr/xrSession_reject_multiple_end.https.html
http/wpt/webxr/xrSession_ended_by_system.https.html 

History:
https://results.webkit.org/?suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;test=http%2Fwpt%2Fwebxr%2FxrSession_end_device_reports_shutdown.https.html&amp;test=http%2Fwpt%2Fwebxr%2FxrSession_ended_by_system.https.html&amp;test=http%2Fwpt%2Fwebxr%2FxrSession_reject_multiple_end.https.html

This did not fail on EWS because these tests only run in Big Sur</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723407</commentid>
    <comment_count>31</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2021-01-28 10:14:23 -0800</bug_when>
    <thetext>Thanks Truitt!

I&apos;ve filed: https://bugs.webkit.org/show_bug.cgi?id=221092</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418099</attachid>
            <date>2021-01-21 16:44:59 -0800</date>
            <delta_ts>2021-01-22 19:59:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220835-20210121164436.patch</filename>
            <type>text/plain</type>
            <size>10207</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxNjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVlMTk3NzBlMWJiNGQz
YTEwYjA0YTM0OGQ1ZmI5YjIxMzI4ZDRlMS4uOTI2NGY3NTkxN2Y4MTQ0OGVmYTczNmYwMjgyMTdj
OTZkY2U0NDg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIxLTAxLTIxICBBZGEg
Q2hhbiAgPGFkYS5jaGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIHRoZSBlbmQgWFJTZXNz
aW9uRXZlbnQgYWZ0ZXIgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIGZvciBzZXNzaW9uIHNo
dXRkb3duIGhhdmUgY29tcGxldGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjA4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIEFkZCB0aGUgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgcHJvdG9j
b2wgdGhhdCB0aGUgRGV2aWNlIGNhbiBob2xkIGEgd2VhayBwb2ludGVyCisgICAgICAgIG9mIGFu
IGluc3RhbmNlIHdoaWxlIHRoZSB0cmFja2luZyBhbmQgcmVuZGVyaW5nIHNlc3Npb24gaXMgaGFw
cGVuaW5nLgorICAgICAgICBXZWJYUlNlc3Npb24gaW1wbGVtZW50cyB0aGF0IHByb3RvY29sIHRv
IGhhbmRsZSBjbGVhbnVwIGFmdGVyIHNodXRkb3duIGhhcyBjb21wbGV0ZWQuCisgICAgICAgIC0g
Rm9yIHBsYXRmb3JtcyB0byByZXBvcnQgYXN5bmNocm9ub3VzIGNvbXBsZXRpb24gb2YgdGhlIHNl
c3Npb24gc2h1dGRvd24sIHRoZXkKKyAgICAgICAgY2FuIGltcGxlbWVudCBQbGF0Zm9ybVhSOjpE
ZXZpY2U6OndpbGxOb3RpZnlTZXNzaW9uU2h1dGRvd24oKSB0byByZXR1cm4gdHJ1ZS4KKyAgICAg
ICAgVGhpcyB3YXkgV2ViWFJTZXNzaW9uIHdpbGwgd2FpdCBmb3IgdGhlIHNodXRkb3duIGNvbXBs
ZXRpb24gKHZpYSB0aGUKKyAgICAgICAgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ6OnNlc3Np
b25EaWRFbmQoKSBjYWxsYmFjaykgYmVmb3JlIHNlbmRpbmcgdGhlCisgICAgICAgIGVuZCBYUlNl
c3Npb25FdmVudCBhbmQgcmVzb2x2aW5nIHRoZSBYUlNlc3Npb246OmVuZCgpIHByb21pc2UuCisK
KyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJYUlNlc3Npb246OldlYlhSU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlNlc3Npb246OnNodXRkb3duKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlhSU2Vzc2lvbjo6ZGlk
Q29tcGxldGVTaHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlNlc3Npb246OmVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlNlc3Npb246OnNlc3Npb25EaWRFbmQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0veHIv
UGxhdGZvcm1YUi5oOgorICAgICAgICAoUGxhdGZvcm1YUjo6RGV2aWNlOjpzZXRUcmFja2luZ0Fu
ZFJlbmRlcmluZ0NsaWVudCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6OndpbGxOb3Rp
ZnlTZXNzaW9uU2h1dGRvd24gY29uc3QpOgorCiAyMDIxLTAxLTIwICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVVByb2Nlc3NdIE1hcmsgSU9TdXJmYWNlIGJh
Y2tpbmcgZm9yIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMJ3MgZGlzcGxheUJ1ZmZlciBhcyBvd25l
ZCBieSB0aGUgV2ViUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJ4ci9XZWJYUlNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJY
UlNlc3Npb24uY3BwCmluZGV4IGI2NjNkNTJkMDZiYjIwOWE0MzcxZjdhMjEzMTM5ODg1M2E3OGY1
YWIuLjkyNGQwMDFhNGJlYjg1YjMxZmY4MGI1MDdhMGU2OTVmNGM5Y2JjNzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKQEAgLTU4LDYgKzU4LDcg
QEAgV2ViWFJTZXNzaW9uOjpXZWJYUlNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJYUlN5
c3RlbSYgc3lzdGVtLCBYUlNlc3Npb25Nb2QKICAgICAsIG1fYW5pbWF0aW9uVGltZXIoKnRoaXMs
ICZXZWJYUlNlc3Npb246OmFuaW1hdGlvblRpbWVyRmlyZWQpCiB7CiAgICAgbV9kZXZpY2UtPmlu
aXRpYWxpemVUcmFja2luZ0FuZFJlbmRlcmluZyhtb2RlKTsKKyAgICBtX2RldmljZS0+c2V0VHJh
Y2tpbmdBbmRSZW5kZXJpbmdDbGllbnQobWFrZVdlYWtQdHIodGhpcykpOwogCiAgICAgc3VzcGVu
ZElmTmVlZGVkKCk7CiB9CkBAIC0zMTcsOCArMzE4LDIwIEBAIEludFNpemUgV2ViWFJTZXNzaW9u
OjpyZWNvbW1lbmRlZFdlYkdMRnJhbWVidWZmZXJSZXNvbHV0aW9uKCkgY29uc3QKIH0KIAogLy8g
aHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jc2h1dC1kb3duLXRoZS1zZXNz
aW9uCi12b2lkIFdlYlhSU2Vzc2lvbjo6c2h1dGRvd24oKQordm9pZCBXZWJYUlNlc3Npb246OnNo
dXRkb3duKEluaXRpYXRlZEJ5U3lzdGVtIGluaXRpYXRlZEJ5U3lzdGVtKQogeworICAgIFJlZjxX
ZWJYUlNlc3Npb24+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgaWYgKG1fZW5kZWQpIHsK
KyAgICAgICAgLy8gVGhpcyBtZXRob2Qgd2FzIGNhbGxlZCBlYXJsaWVyIHdpdGggaW5pdGlhdGVk
QnlTeXN0ZW09Tm8gd2hlbiB0aGUKKyAgICAgICAgLy8gc2Vzc2lvbiB0ZXJtaW5hdGlvbiB3YXMg
cmVxdWVzdGVkIG1hbnVhbGx5IHZpYSBYUlNlc3Npb24uZW5kKCkuIFdoZW4KKyAgICAgICAgLy8g
dGhlIHN5c3RlbSBoYXMgY29tcGxldGVkIHRoZSBzaHV0ZG93biwgdGhpcyBtZXRob2QgaXMgbm93
IGNhbGxlZCBhZ2FpbgorICAgICAgICAvLyB3aXRoIGluaXRpYXRlZEJ5U3lzdGVtPVllcyB0byBk
byB0aGUgZmluYWwgY2xlYW51cC4KKyAgICAgICAgaWYgKGluaXRpYXRlZEJ5U3lzdGVtID09IElu
aXRpYXRlZEJ5U3lzdGVtOjpZZXMpCisgICAgICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyAxLiBMZXQgc2Vzc2lvbiBiZSB0aGUg
dGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3QuCiAgICAgLy8gMi4gU2V0IHNlc3Npb24ncyBlbmRlZCB2
YWx1ZSB0byB0cnVlLgogICAgIG1fZW5kZWQgPSB0cnVlOwpAQCAtMzI3LDYgKzM0MCwxNCBAQCB2
b2lkIFdlYlhSU2Vzc2lvbjo6c2h1dGRvd24oKQogICAgIC8vIDQuIFJlbW92ZSBzZXNzaW9uIGZy
b20gdGhlIGxpc3Qgb2YgaW5saW5lIHNlc3Npb25zLgogICAgIG1feHJTeXN0ZW0uc2Vzc2lvbkVu
ZGVkKCp0aGlzKTsKIAorICAgIGlmIChpbml0aWF0ZWRCeVN5c3RlbSA9PSBJbml0aWF0ZWRCeVN5
c3RlbTo6WWVzKSB7CisgICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGUgc2Vzc2lvbiB0ZXJt
aW5hdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBzeXN0ZW0gcmF0aGVyIHRoYW4KKyAgICAgICAg
Ly8gdmlhIFhSU2Vzc2lvbi5lbmQoKS4gU2luY2UgdGhlIHN5c3RlbSBoYXMgY29tcGxldGVkIHRo
ZSBzZXNzaW9uIHNodXRkb3duLCB3ZSBjYW4KKyAgICAgICAgLy8gaW1tZWRpYXRlbHkgZG8gdGhl
IGZpbmFsIGNsZWFudXAuCisgICAgICAgIGRpZENvbXBsZXRlU2h1dGRvd24oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIC8vIFRPRE86IGNvbXBsZXRlIHRoZSBpbXBsZW1lbnRhdGlv
bgogICAgIC8vIDUuIFJlamVjdCBhbnkgb3V0c3RhbmRpbmcgcHJvbWlzZXMgcmV0dXJuZWQgYnkg
c2Vzc2lvbiB3aXRoIGFuIEludmFsaWRTdGF0ZUVycm9yLCBleGNlcHQgZm9yIGFueSBwcm9taXNl
cyByZXR1cm5lZCBieSBlbmQoKS4KICAgICAvLyA2LiBJZiBubyBvdGhlciBmZWF0dXJlcyBvZiB0
aGUgdXNlciBhZ2VudCBhcmUgYWN0aXZlbHkgdXNpbmcgdGhlbSwgcGVyZm9ybSB0aGUgbmVjZXNz
YXJ5IHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIHRvIHNodXQgZG93biB0aGUgZGV2aWNlJ3MgdHJh
Y2tpbmcgYW5kIHJlbmRlcmluZyBjYXBhYmlsaXRpZXMuIFRoaXMgTVVTVCBpbmNsdWRlOgpAQCAt
MzM2LDMwICszNTcsNTAgQEAgdm9pZCBXZWJYUlNlc3Npb246OnNodXRkb3duKCkKICAgICBpZiAo
bV9kZXZpY2UpCiAgICAgICAgIG1fZGV2aWNlLT5zaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5n
KCk7CiAKKyAgICAvLyBJZiBkZXZpY2Ugd2lsbCBub3QgcmVwb3J0IHNodXQgZG93biBjb21wbGV0
aW9uIHZpYSB0aGUgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQsCisgICAgLy8gY29tcGxldGUg
dGhlIHNodXRkb3duIGNsZWFudXAgaGVyZS4KKyAgICBpZiAoIW1fZGV2aWNlIHx8ICFtX2Rldmlj
ZS0+d2lsbE5vdGlmeVNlc3Npb25TaHV0ZG93bigpKQorICAgICAgICBkaWRDb21wbGV0ZVNodXRk
b3duKCk7Cit9CisKK3ZvaWQgV2ViWFJTZXNzaW9uOjpkaWRDb21wbGV0ZVNodXRkb3duKCkKK3sK
KyAgICBpZiAobV9kZXZpY2UpCisgICAgICAgIG1fZGV2aWNlLT5zZXRUcmFja2luZ0FuZFJlbmRl
cmluZ0NsaWVudChudWxscHRyKTsKKworICAgIC8vIFJlc29sdmUgZW5kIHByb21pc2UgZnJvbSBY
UlNlc3Npb246OmVuZCgpCisgICAgaWYgKG1fZW5kUHJvbWlzZSkgeworICAgICAgICBtX2VuZFBy
b21pc2UtPnJlc29sdmUoKTsKKyAgICAgICAgbV9lbmRQcm9taXNlID0gbnVsbHB0cjsKKyAgICB9
CisKKyAgICAvLyBGcm9tIGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvI3No
dXQtZG93bi10aGUtc2Vzc2lvbgogICAgIC8vIDcuIFF1ZXVlIGEgdGFzayB0aGF0IGZpcmVzIGFu
IFhSU2Vzc2lvbkV2ZW50IG5hbWVkIGVuZCBvbiBzZXNzaW9uLgogICAgIGF1dG8gZXZlbnQgPSBY
UlNlc3Npb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRFdmVudCwgeyBtYWtlUmVmUHRy
KCp0aGlzKSB9KTsKICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3Vy
Y2U6OldlYlhSLCBXVEZNb3ZlKGV2ZW50KSk7CiB9CiAKIC8vIGh0dHBzOi8vaW1tZXJzaXZlLXdl
Yi5naXRodWIuaW8vd2VieHIvI2RvbS14cnNlc3Npb24tZW5kCi12b2lkIFdlYlhSU2Vzc2lvbjo6
ZW5kKEVuZFByb21pc2UmJiBwcm9taXNlKQorRXhjZXB0aW9uT3I8dm9pZD4gV2ViWFJTZXNzaW9u
OjplbmQoRW5kUHJvbWlzZSYmIHByb21pc2UpCiB7Ci0gICAgLy8gVGhlIHNodXRkb3duKCkgY2Fs
bCBiZWxsb3cgbWlnaHQgcmVtb3ZlIHRoZSBzb2xlIHJlZmVyZW5jZSB0byBzZXNzaW9uCisgICAg
Ly8gVGhlIHNodXRkb3duKCkgY2FsbCBiZWxvdyBtaWdodCByZW1vdmUgdGhlIHNvbGUgcmVmZXJl
bmNlIHRvIHNlc3Npb24KICAgICAvLyB0aGF0IGNvdWxkIGV4aXN0ICh0aGUgWFJTeXN0ZW0gb3du
cyB0aGUgc2Vzc2lvbnMpIHNvIGxldCdzIHByb3RlY3QgdGhpcy4KICAgICBSZWY8V2ViWFJTZXNz
aW9uPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIGlmIChtX2VuZGVkKQorICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKKwogICAgIC8vIDEuIExldCBw
cm9taXNlIGJlIGEgbmV3IFByb21pc2UuCiAgICAgLy8gMi4gU2h1dCBkb3duIHRoZSB0YXJnZXQg
WFJTZXNzaW9uIG9iamVjdC4KLSAgICBpZiAoIW1fZW5kZWQpCi0gICAgICAgIHNodXRkb3duKCk7
CisgICAgc2h1dGRvd24oSW5pdGlhdGVkQnlTeXN0ZW06Ok5vKTsKIAogICAgIC8vIDMuIFF1ZXVl
IGEgdGFzayB0byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0gICAgcXVldWVUYXNrS2Vl
cGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpXZWJYUiwgW3Byb21pc2UgPSBXVEZN
b3ZlKHByb21pc2UpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgLy8gMy4xIFdhaXQgdW50aWwgYW55
IHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIHJlbGF0ZWQgdG8gc2h1dHRpbmcgZG93biB0aGUgc2Vz
c2lvbiBoYXZlIGNvbXBsZXRlZC4KLSAgICAgICAgLy8gMy4yIFJlc29sdmUgcHJvbWlzZS4KLSAg
ICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7Ci0gICAgfSk7CisgICAgLy8gMy4xIFdhaXQgdW50aWwg
YW55IHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIHJlbGF0ZWQgdG8gc2h1dHRpbmcgZG93biB0aGUg
c2Vzc2lvbiBoYXZlIGNvbXBsZXRlZC4KKyAgICAvLyAzLjIgUmVzb2x2ZSBwcm9taXNlLgorICAg
IG1fZW5kUHJvbWlzZSA9IFdURjo6bWFrZVVuaXF1ZTxFbmRQcm9taXNlPihXVEZNb3ZlKHByb21p
c2UpKTsKIAogICAgIC8vIDQuIFJldHVybiBwcm9taXNlLgorICAgIHJldHVybiB7IH07CiB9CiAK
IGNvbnN0IGNoYXIqIFdlYlhSU2Vzc2lvbjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CkBA
IC0zNzEsNiArNDEyLDE1IEBAIHZvaWQgV2ViWFJTZXNzaW9uOjpzdG9wKCkKIHsKIH0KIAorLy8g
TUFSSzogLSBUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudAorCit2b2lkIFdlYlhSU2Vzc2lvbjo6
c2Vzc2lvbkRpZEVuZCgpCit7CisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGFzIGEgcmVzdWx0
IG9mIGZpbmlzaGluZyB0aGUgc2h1dGRvd24gaW5pdGlhdGVkCisgICAgLy8gZnJvbSBYUlNlc3Np
b246OmVuZCgpLCBvciBzZXNzaW9uIHRlcm1pbmF0aW9uIHRyaWdnZXJlZCBieSB0aGUgc3lzdGVt
LgorICAgIHNodXRkb3duKEluaXRpYXRlZEJ5U3lzdGVtOjpZZXMpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCWFIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaAppbmRleCBlNGMyN2RiNGI5MGQ5MjFlMjE1NTVh
NmEyODY5MDZlOThjNjNhMGU4Li5kZWRkZTIzMTAzYWI3M2NkOGYyZGQzZWE3Y2FiNDdhZDk5ODY1
ZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmgKQEAg
LTUyLDcgKzUyLDcgQEAgY2xhc3MgV2ViWFJSZWZlcmVuY2VTcGFjZTsKIGNsYXNzIFdlYlhSU3lz
dGVtOwogc3RydWN0IFhSUmVuZGVyU3RhdGVJbml0OwogCi1jbGFzcyBXZWJYUlNlc3Npb24gZmlu
YWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJYUlNlc3Npb24+LCBwdWJsaWMgRXZlbnRUYXJnZXRX
aXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitjbGFzcyBXZWJYUlNlc3Np
b24gZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJYUlNlc3Npb24+LCBwdWJsaWMgRXZlbnRU
YXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFBsYXRm
b3JtWFI6OlRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEKFdlYlhSU2Vzc2lvbik7CiBwdWJsaWM6CiAgICAgdXNpbmcgUmVxdWVzdFJlZmVyZW5j
ZVNwYWNlUHJvbWlzZSA9IERPTVByb21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8V2ViWFJSZWZl
cmVuY2VTcGFjZT4+OwpAQCAtODIsNyArODIsMTAgQEAgcHVibGljOgogICAgIC8vIEV2ZW50VGFy
Z2V0LgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsgfQogCi0gICAgdm9pZCBlbmQoRW5kUHJvbWlzZSYmKTsKKyAgICAvLyBQbGF0Zm9y
bVhSOjpUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudAorICAgIHZvaWQgc2Vzc2lvbkRpZEVuZCgp
IGZpbmFsOworCisgICAgRXhjZXB0aW9uT3I8dm9pZD4gZW5kKEVuZFByb21pc2UmJik7CiAgICAg
Ym9vbCBlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kZWQ7IH0KIAogICAgIFhSU2Vzc2lvbk1v
ZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpAQCAtOTksNyArMTAyLDkgQEAgcHJp
dmF0ZToKICAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNodXRkb3duKCk7Cisg
ICAgZW51bSBjbGFzcyBJbml0aWF0ZWRCeVN5c3RlbSB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIHNo
dXRkb3duKEluaXRpYXRlZEJ5U3lzdGVtKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlU2h1dGRvd24o
KTsKIAogICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVB
bmltYXRpb24oKTsKQEAgLTExMSw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgIFhSVmlzaWJpbGl0
eVN0YXRlIG1fdmlzaWJpbGl0eVN0YXRlOwogICAgIFJlZjxXZWJYUklucHV0U291cmNlQXJyYXk+
IG1faW5wdXRTb3VyY2VzOwogICAgIGJvb2wgbV9lbmRlZCB7IGZhbHNlIH07CisgICAgc3RkOjp1
bmlxdWVfcHRyPEVuZFByb21pc2U+IG1fZW5kUHJvbWlzZTsKIAogICAgIFdlYlhSU3lzdGVtJiBt
X3hyU3lzdGVtOwogICAgIFhSU2Vzc2lvbk1vZGUgbV9tb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0veHIvUGxhdGZvcm1YUi5oCmluZGV4IDY0NTUwZjRlMDFiZjAwNWJlZGUxODRjMGZlYTRkYjkz
MTI2NDhiNjQuLjVhOGRhZjE1NjljMTMwY2YyZTZkNzNjMTIxMzE0NzcwZjU0NDRlMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmgKQEAgLTQ0LDYgKzQ0LDE0IEBAIGVu
dW0gY2xhc3MgUmVmZXJlbmNlU3BhY2VUeXBlIHsKIAogI2lmIEVOQUJMRShXRUJYUikKIAorY2xh
c3MgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8VHJh
Y2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5UcmFja2lu
Z0FuZFJlbmRlcmluZ0NsaWVudCgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXNz
aW9uRGlkRW5kKCkgPSAwOworICAgIC8vIFRPRE86IGhhbmRsZSB2aXNpYmlsaXR5IGNoYW5nZXMK
K307CisKIGNsYXNzIERldmljZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxEZXZpY2U+IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZXZp
Y2UpOwpAQCAtNjEsNiArNjksMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGluaXRp
YWxpemVUcmFja2luZ0FuZFJlbmRlcmluZyhTZXNzaW9uTW9kZSkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKCkgPSAwOworICAgIHZvaWQgc2V0VHJh
Y2tpbmdBbmRSZW5kZXJpbmdDbGllbnQoV2Vha1B0cjxUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVu
dD4mJiBjbGllbnQpIHsgbV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCA9IGNsaWVudDsgfQor
CisgICAgLy8gSWYgdGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLCB0aGF0IG1lYW5zIHRoZSBkZXZp
Y2Ugd2lsbCBub3RpZnkgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQKKyAgICAvLyB3aGVuIHRo
ZSBwbGF0Zm9ybSBoYXMgY29tcGxldGVkIGFsbCBzdGVwcyB0byBzaHV0IGRvd24gdGhlIFhSIHNl
c3Npb24uCisgICAgdmlydHVhbCBib29sIHdpbGxOb3RpZnlTZXNzaW9uU2h1dGRvd24oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgRGV2aWNlKCkgPSBkZWZhdWx0
OwpAQCAtNzIsNiArODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgRW5hYmxlZEZlYXR1cmVzUGVyTW9k
ZU1hcCBtX2VuYWJsZWRGZWF0dXJlc01hcDsKIAogICAgIGJvb2wgbV9zdXBwb3J0c09yaWVudGF0
aW9uVHJhY2tpbmcgeyBmYWxzZSB9OworICAgIFdlYWtQdHI8VHJhY2tpbmdBbmRSZW5kZXJpbmdD
bGllbnQ+IG1fdHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ7CiB9OwogCiBjbGFzcyBJbnN0YW5j
ZSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418209</attachid>
            <date>2021-01-22 19:59:15 -0800</date>
            <delta_ts>2021-01-26 11:26:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220835-20210122195914.patch</filename>
            <type>text/plain</type>
            <size>10835</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxNjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVlMTk3NzBlMWJiNGQz
YTEwYjA0YTM0OGQ1ZmI5YjIxMzI4ZDRlMS4uOTI2NGY3NTkxN2Y4MTQ0OGVmYTczNmYwMjgyMTdj
OTZkY2U0NDg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIxLTAxLTIxICBBZGEg
Q2hhbiAgPGFkYS5jaGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIHRoZSBlbmQgWFJTZXNz
aW9uRXZlbnQgYWZ0ZXIgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIGZvciBzZXNzaW9uIHNo
dXRkb3duIGhhdmUgY29tcGxldGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjA4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIEFkZCB0aGUgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgcHJvdG9j
b2wgdGhhdCB0aGUgRGV2aWNlIGNhbiBob2xkIGEgd2VhayBwb2ludGVyCisgICAgICAgIG9mIGFu
IGluc3RhbmNlIHdoaWxlIHRoZSB0cmFja2luZyBhbmQgcmVuZGVyaW5nIHNlc3Npb24gaXMgaGFw
cGVuaW5nLgorICAgICAgICBXZWJYUlNlc3Npb24gaW1wbGVtZW50cyB0aGF0IHByb3RvY29sIHRv
IGhhbmRsZSBjbGVhbnVwIGFmdGVyIHNodXRkb3duIGhhcyBjb21wbGV0ZWQuCisgICAgICAgIC0g
Rm9yIHBsYXRmb3JtcyB0byByZXBvcnQgYXN5bmNocm9ub3VzIGNvbXBsZXRpb24gb2YgdGhlIHNl
c3Npb24gc2h1dGRvd24sIHRoZXkKKyAgICAgICAgY2FuIGltcGxlbWVudCBQbGF0Zm9ybVhSOjpE
ZXZpY2U6OndpbGxOb3RpZnlTZXNzaW9uU2h1dGRvd24oKSB0byByZXR1cm4gdHJ1ZS4KKyAgICAg
ICAgVGhpcyB3YXkgV2ViWFJTZXNzaW9uIHdpbGwgd2FpdCBmb3IgdGhlIHNodXRkb3duIGNvbXBs
ZXRpb24gKHZpYSB0aGUKKyAgICAgICAgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ6OnNlc3Np
b25EaWRFbmQoKSBjYWxsYmFjaykgYmVmb3JlIHNlbmRpbmcgdGhlCisgICAgICAgIGVuZCBYUlNl
c3Npb25FdmVudCBhbmQgcmVzb2x2aW5nIHRoZSBYUlNlc3Npb246OmVuZCgpIHByb21pc2UuCisK
KyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJYUlNlc3Npb246OldlYlhSU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlNlc3Npb246OnNodXRkb3duKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlhSU2Vzc2lvbjo6ZGlk
Q29tcGxldGVTaHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlNlc3Npb246OmVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlNlc3Npb246OnNlc3Npb25EaWRFbmQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0veHIv
UGxhdGZvcm1YUi5oOgorICAgICAgICAoUGxhdGZvcm1YUjo6RGV2aWNlOjpzZXRUcmFja2luZ0Fu
ZFJlbmRlcmluZ0NsaWVudCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6OndpbGxOb3Rp
ZnlTZXNzaW9uU2h1dGRvd24gY29uc3QpOgorCiAyMDIxLTAxLTIwICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVVByb2Nlc3NdIE1hcmsgSU9TdXJmYWNlIGJh
Y2tpbmcgZm9yIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMJ3MgZGlzcGxheUJ1ZmZlciBhcyBvd25l
ZCBieSB0aGUgV2ViUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJ4ci9XZWJYUlNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJY
UlNlc3Npb24uY3BwCmluZGV4IGI2NjNkNTJkMDZiYjIwOWE0MzcxZjdhMjEzMTM5ODg1M2E3OGY1
YWIuLjI1ZGQzMmNiOTdkYmFjMDUzOWMyZTk0OGEzMTg2OGIwNDY5NTViYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKQEAgLTU4LDYgKzU4LDcg
QEAgV2ViWFJTZXNzaW9uOjpXZWJYUlNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJYUlN5
c3RlbSYgc3lzdGVtLCBYUlNlc3Npb25Nb2QKICAgICAsIG1fYW5pbWF0aW9uVGltZXIoKnRoaXMs
ICZXZWJYUlNlc3Npb246OmFuaW1hdGlvblRpbWVyRmlyZWQpCiB7CiAgICAgbV9kZXZpY2UtPmlu
aXRpYWxpemVUcmFja2luZ0FuZFJlbmRlcmluZyhtb2RlKTsKKyAgICBtX2RldmljZS0+c2V0VHJh
Y2tpbmdBbmRSZW5kZXJpbmdDbGllbnQobWFrZVdlYWtQdHIodGhpcykpOwogCiAgICAgc3VzcGVu
ZElmTmVlZGVkKCk7CiB9CkBAIC0zMTcsOCArMzE4LDIwIEBAIEludFNpemUgV2ViWFJTZXNzaW9u
OjpyZWNvbW1lbmRlZFdlYkdMRnJhbWVidWZmZXJSZXNvbHV0aW9uKCkgY29uc3QKIH0KIAogLy8g
aHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jc2h1dC1kb3duLXRoZS1zZXNz
aW9uCi12b2lkIFdlYlhSU2Vzc2lvbjo6c2h1dGRvd24oKQordm9pZCBXZWJYUlNlc3Npb246OnNo
dXRkb3duKEluaXRpYXRlZEJ5U3lzdGVtIGluaXRpYXRlZEJ5U3lzdGVtKQogeworICAgIFJlZjxX
ZWJYUlNlc3Npb24+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgaWYgKG1fZW5kZWQpIHsK
KyAgICAgICAgLy8gVGhpcyBtZXRob2Qgd2FzIGNhbGxlZCBlYXJsaWVyIHdpdGggaW5pdGlhdGVk
QnlTeXN0ZW09Tm8gd2hlbiB0aGUKKyAgICAgICAgLy8gc2Vzc2lvbiB0ZXJtaW5hdGlvbiB3YXMg
cmVxdWVzdGVkIG1hbnVhbGx5IHZpYSBYUlNlc3Npb24uZW5kKCkuIFdoZW4KKyAgICAgICAgLy8g
dGhlIHN5c3RlbSBoYXMgY29tcGxldGVkIHRoZSBzaHV0ZG93biwgdGhpcyBtZXRob2QgaXMgbm93
IGNhbGxlZCBhZ2FpbgorICAgICAgICAvLyB3aXRoIGluaXRpYXRlZEJ5U3lzdGVtPVllcyB0byBk
byB0aGUgZmluYWwgY2xlYW51cC4KKyAgICAgICAgaWYgKGluaXRpYXRlZEJ5U3lzdGVtID09IElu
aXRpYXRlZEJ5U3lzdGVtOjpZZXMpCisgICAgICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyAxLiBMZXQgc2Vzc2lvbiBiZSB0aGUg
dGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3QuCiAgICAgLy8gMi4gU2V0IHNlc3Npb24ncyBlbmRlZCB2
YWx1ZSB0byB0cnVlLgogICAgIG1fZW5kZWQgPSB0cnVlOwpAQCAtMzI3LDYgKzM0MCwxNCBAQCB2
b2lkIFdlYlhSU2Vzc2lvbjo6c2h1dGRvd24oKQogICAgIC8vIDQuIFJlbW92ZSBzZXNzaW9uIGZy
b20gdGhlIGxpc3Qgb2YgaW5saW5lIHNlc3Npb25zLgogICAgIG1feHJTeXN0ZW0uc2Vzc2lvbkVu
ZGVkKCp0aGlzKTsKIAorICAgIGlmIChpbml0aWF0ZWRCeVN5c3RlbSA9PSBJbml0aWF0ZWRCeVN5
c3RlbTo6WWVzKSB7CisgICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGUgc2Vzc2lvbiB0ZXJt
aW5hdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBzeXN0ZW0gcmF0aGVyIHRoYW4KKyAgICAgICAg
Ly8gdmlhIFhSU2Vzc2lvbi5lbmQoKS4gU2luY2UgdGhlIHN5c3RlbSBoYXMgY29tcGxldGVkIHRo
ZSBzZXNzaW9uIHNodXRkb3duLCB3ZSBjYW4KKyAgICAgICAgLy8gaW1tZWRpYXRlbHkgZG8gdGhl
IGZpbmFsIGNsZWFudXAuCisgICAgICAgIGRpZENvbXBsZXRlU2h1dGRvd24oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIC8vIFRPRE86IGNvbXBsZXRlIHRoZSBpbXBsZW1lbnRhdGlv
bgogICAgIC8vIDUuIFJlamVjdCBhbnkgb3V0c3RhbmRpbmcgcHJvbWlzZXMgcmV0dXJuZWQgYnkg
c2Vzc2lvbiB3aXRoIGFuIEludmFsaWRTdGF0ZUVycm9yLCBleGNlcHQgZm9yIGFueSBwcm9taXNl
cyByZXR1cm5lZCBieSBlbmQoKS4KICAgICAvLyA2LiBJZiBubyBvdGhlciBmZWF0dXJlcyBvZiB0
aGUgdXNlciBhZ2VudCBhcmUgYWN0aXZlbHkgdXNpbmcgdGhlbSwgcGVyZm9ybSB0aGUgbmVjZXNz
YXJ5IHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIHRvIHNodXQgZG93biB0aGUgZGV2aWNlJ3MgdHJh
Y2tpbmcgYW5kIHJlbmRlcmluZyBjYXBhYmlsaXRpZXMuIFRoaXMgTVVTVCBpbmNsdWRlOgpAQCAt
MzM2LDMwICszNTcsNTAgQEAgdm9pZCBXZWJYUlNlc3Npb246OnNodXRkb3duKCkKICAgICBpZiAo
bV9kZXZpY2UpCiAgICAgICAgIG1fZGV2aWNlLT5zaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5n
KCk7CiAKKyAgICAvLyBJZiBkZXZpY2Ugd2lsbCBub3QgcmVwb3J0IHNodXRkb3duIGNvbXBsZXRp
b24gdmlhIHRoZSBUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCwKKyAgICAvLyBjb21wbGV0ZSB0
aGUgc2h1dGRvd24gY2xlYW51cCBoZXJlLgorICAgIGlmICghbV9kZXZpY2UgfHwgIW1fZGV2aWNl
LT53aWxsTm90aWZ5U2Vzc2lvblNodXRkb3duKCkpCisgICAgICAgIGRpZENvbXBsZXRlU2h1dGRv
d24oKTsKK30KKwordm9pZCBXZWJYUlNlc3Npb246OmRpZENvbXBsZXRlU2h1dGRvd24oKQorewor
ICAgIGlmIChtX2RldmljZSkKKyAgICAgICAgbV9kZXZpY2UtPnNldFRyYWNraW5nQW5kUmVuZGVy
aW5nQ2xpZW50KG51bGxwdHIpOworCisgICAgLy8gUmVzb2x2ZSBlbmQgcHJvbWlzZSBmcm9tIFhS
U2Vzc2lvbjo6ZW5kKCkKKyAgICBpZiAobV9lbmRQcm9taXNlKSB7CisgICAgICAgIG1fZW5kUHJv
bWlzZS0+cmVzb2x2ZSgpOworICAgICAgICBtX2VuZFByb21pc2UgPSBudWxscHRyOworICAgIH0K
KworICAgIC8vIEZyb20gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jc2h1
dC1kb3duLXRoZS1zZXNzaW9uCiAgICAgLy8gNy4gUXVldWUgYSB0YXNrIHRoYXQgZmlyZXMgYW4g
WFJTZXNzaW9uRXZlbnQgbmFtZWQgZW5kIG9uIHNlc3Npb24uCiAgICAgYXV0byBldmVudCA9IFhS
U2Vzc2lvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuZEV2ZW50LCB7IG1ha2VSZWZQdHIo
KnRoaXMpIH0pOwogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJj
ZTo6V2ViWFIsIFdURk1vdmUoZXZlbnQpKTsKIH0KIAogLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2Vi
LmdpdGh1Yi5pby93ZWJ4ci8jZG9tLXhyc2Vzc2lvbi1lbmQKLXZvaWQgV2ViWFJTZXNzaW9uOjpl
bmQoRW5kUHJvbWlzZSYmIHByb21pc2UpCitFeGNlcHRpb25Pcjx2b2lkPiBXZWJYUlNlc3Npb246
OmVuZChFbmRQcm9taXNlJiYgcHJvbWlzZSkKIHsKLSAgICAvLyBUaGUgc2h1dGRvd24oKSBjYWxs
IGJlbGxvdyBtaWdodCByZW1vdmUgdGhlIHNvbGUgcmVmZXJlbmNlIHRvIHNlc3Npb24KKyAgICAv
LyBUaGUgc2h1dGRvd24oKSBjYWxsIGJlbG93IG1pZ2h0IHJlbW92ZSB0aGUgc29sZSByZWZlcmVu
Y2UgdG8gc2Vzc2lvbgogICAgIC8vIHRoYXQgY291bGQgZXhpc3QgKHRoZSBYUlN5c3RlbSBvd25z
IHRoZSBzZXNzaW9ucykgc28gbGV0J3MgcHJvdGVjdCB0aGlzLgogICAgIFJlZjxXZWJYUlNlc3Np
b24+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgaWYgKG1fZW5kZWQpCisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworCiAgICAgLy8gMS4gTGV0IHBy
b21pc2UgYmUgYSBuZXcgUHJvbWlzZS4KICAgICAvLyAyLiBTaHV0IGRvd24gdGhlIHRhcmdldCBY
UlNlc3Npb24gb2JqZWN0LgotICAgIGlmICghbV9lbmRlZCkKLSAgICAgICAgc2h1dGRvd24oKTsK
KyAgICBzaHV0ZG93bihJbml0aWF0ZWRCeVN5c3RlbTo6Tm8pOwogCiAgICAgLy8gMy4gUXVldWUg
YSB0YXNrIHRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICBxdWV1ZVRhc2tLZWVw
aW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6OldlYlhSLCBbcHJvbWlzZSA9IFdURk1v
dmUocHJvbWlzZSldICgpIG11dGFibGUgewotICAgICAgICAvLyAzLjEgV2FpdCB1bnRpbCBhbnkg
cGxhdGZvcm0tc3BlY2lmaWMgc3RlcHMgcmVsYXRlZCB0byBzaHV0dGluZyBkb3duIHRoZSBzZXNz
aW9uIGhhdmUgY29tcGxldGVkLgotICAgICAgICAvLyAzLjIgUmVzb2x2ZSBwcm9taXNlLgotICAg
ICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICB9KTsKKyAgICAvLyAzLjEgV2FpdCB1bnRpbCBh
bnkgcGxhdGZvcm0tc3BlY2lmaWMgc3RlcHMgcmVsYXRlZCB0byBzaHV0dGluZyBkb3duIHRoZSBz
ZXNzaW9uIGhhdmUgY29tcGxldGVkLgorICAgIC8vIDMuMiBSZXNvbHZlIHByb21pc2UuCisgICAg
bV9lbmRQcm9taXNlID0gV1RGOjptYWtlVW5pcXVlPEVuZFByb21pc2U+KFdURk1vdmUocHJvbWlz
ZSkpOwogCiAgICAgLy8gNC4gUmV0dXJuIHByb21pc2UuCisgICAgcmV0dXJuIHsgfTsKIH0KIAog
Y29uc3QgY2hhciogV2ViWFJTZXNzaW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAg
LTM3MSw2ICs0MTIsMTUgQEAgdm9pZCBXZWJYUlNlc3Npb246OnN0b3AoKQogewogfQogCisvLyBN
QVJLOiAtIFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50CisKK3ZvaWQgV2ViWFJTZXNzaW9uOjpz
ZXNzaW9uRGlkRW5kKCkKK3sKKyAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgYXMgYSByZXN1bHQg
b2YgZmluaXNoaW5nIHRoZSBzaHV0ZG93biBpbml0aWF0ZWQKKyAgICAvLyBmcm9tIFhSU2Vzc2lv
bjo6ZW5kKCksIG9yIHNlc3Npb24gdGVybWluYXRpb24gdHJpZ2dlcmVkIGJ5IHRoZSBzeXN0ZW0u
CisgICAgc2h1dGRvd24oSW5pdGlhdGVkQnlTeXN0ZW06Olllcyk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJYUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oCmluZGV4IGU0YzI3ZGI0YjkwZDkyMWUyMTU1NWE2
YTI4NjkwNmU5OGM2M2EwZTguLmRlZGRlMjMxMDNhYjczY2Q4ZjJkZDNlYTdjYWI0N2FkOTk4NjVl
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaApAQCAt
NTIsNyArNTIsNyBAQCBjbGFzcyBXZWJYUlJlZmVyZW5jZVNwYWNlOwogY2xhc3MgV2ViWFJTeXN0
ZW07CiBzdHJ1Y3QgWFJSZW5kZXJTdGF0ZUluaXQ7CiAKLWNsYXNzIFdlYlhSU2Vzc2lvbiBmaW5h
bCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlhSU2Vzc2lvbj4sIHB1YmxpYyBFdmVudFRhcmdldFdp
dGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIFdlYlhSU2Vzc2lv
biBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlhSU2Vzc2lvbj4sIHB1YmxpYyBFdmVudFRh
cmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgUGxhdGZv
cm1YUjo6VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgewogICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoV2ViWFJTZXNzaW9uKTsKIHB1YmxpYzoKICAgICB1c2luZyBSZXF1ZXN0UmVmZXJlbmNl
U3BhY2VQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElETEludGVyZmFjZTxXZWJYUlJlZmVy
ZW5jZVNwYWNlPj47CkBAIC04Miw3ICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gRXZlbnRUYXJn
ZXQuCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOyB9CiAKLSAgICB2b2lkIGVuZChFbmRQcm9taXNlJiYpOworICAgIC8vIFBsYXRmb3Jt
WFI6OlRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50CisgICAgdm9pZCBzZXNzaW9uRGlkRW5kKCkg
ZmluYWw7CisKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBlbmQoRW5kUHJvbWlzZSYmKTsKICAgICBi
b29sIGVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmRlZDsgfQogCiAgICAgWFJTZXNzaW9uTW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkBAIC05OSw3ICsxMDIsOSBAQCBwcml2
YXRlOgogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2h1dGRvd24oKTsKKyAg
ICBlbnVtIGNsYXNzIEluaXRpYXRlZEJ5U3lzdGVtIHsgTm8sIFllcyB9OworICAgIHZvaWQgc2h1
dGRvd24oSW5pdGlhdGVkQnlTeXN0ZW0pOworICAgIHZvaWQgZGlkQ29tcGxldGVTaHV0ZG93bigp
OwogCiAgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7CiAgICAgdm9pZCBzY2hlZHVsZUFu
aW1hdGlvbigpOwpAQCAtMTExLDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgWFJWaXNpYmlsaXR5
U3RhdGUgbV92aXNpYmlsaXR5U3RhdGU7CiAgICAgUmVmPFdlYlhSSW5wdXRTb3VyY2VBcnJheT4g
bV9pbnB1dFNvdXJjZXM7CiAgICAgYm9vbCBtX2VuZGVkIHsgZmFsc2UgfTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8RW5kUHJvbWlzZT4gbV9lbmRQcm9taXNlOwogCiAgICAgV2ViWFJTeXN0ZW0mIG1f
eHJTeXN0ZW07CiAgICAgWFJTZXNzaW9uTW9kZSBtX21vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5pZGwKaW5kZXggNWMwNDhjMGY0NjYzODJlNjQwMzhi
OWFhYzA2OWNmODAxNzMxOTI4ZS4uOTg5NWU2Mzc0YWI4M2FhY2E1MGQwZjU5ZjE1ZWZmMjQ0ZDU2
ZTNlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Np
b24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlk
bApAQCAtNDUsNyArNDUsNyBAQAogICAgIHVuc2lnbmVkIGxvbmcgcmVxdWVzdEFuaW1hdGlvbkZy
YW1lKFhSRnJhbWVSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2spOwogICAgIHVuZGVmaW5lZCBjYW5j
ZWxBbmltYXRpb25GcmFtZSh1bnNpZ25lZCBsb25nIGhhbmRsZSk7CiAKLSAgICBQcm9taXNlPHVu
ZGVmaW5lZD4gZW5kKCk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSBQcm9taXNlPHVuZGVmaW5l
ZD4gZW5kKCk7CiAKICAgICAvLyBFdmVudHMKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9u
ZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oCmluZGV4IDY0NTUwZjRl
MDFiZjAwNWJlZGUxODRjMGZlYTRkYjkzMTI2NDhiNjQuLjU4YjM0NzE0MTIzMWM4NGJhMDE4MDY2
MTY3MGM4YmQxYjNmOWI3MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hy
L1BsYXRmb3JtWFIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhS
LmgKQEAgLTQ0LDYgKzQ0LDE1IEBAIGVudW0gY2xhc3MgUmVmZXJlbmNlU3BhY2VUeXBlIHsKIAog
I2lmIEVOQUJMRShXRUJYUikKIAorY2xhc3MgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgOiBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5UcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCgpID0gZGVmYXVsdDsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXNzaW9uRGlkRW5kKCkgPSAwOworICAgIC8vIFRPRE86IGhh
bmRsZSBmcmFtZSB1cGRhdGUKKyAgICAvLyBUT0RPOiBoYW5kbGUgdmlzaWJpbGl0eSBjaGFuZ2Vz
Cit9OworCiBjbGFzcyBEZXZpY2UgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8RGV2aWNlPiB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGV2
aWNlKTsKQEAgLTYxLDYgKzcwLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbml0
aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcoU2Vzc2lvbk1vZGUpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2h1dERvd25UcmFja2luZ0FuZFJlbmRlcmluZygpID0gMDsKKyAgICB2b2lkIHNldFRy
YWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50KFdlYWtQdHI8VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGll
bnQ+JiYgY2xpZW50KSB7IG1fdHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgPSBjbGllbnQ7IH0K
KworICAgIC8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhhdCBtZWFucyB0aGUgZGV2
aWNlIHdpbGwgbm90aWZ5IFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50CisgICAgLy8gd2hlbiB0
aGUgcGxhdGZvcm0gaGFzIGNvbXBsZXRlZCBhbGwgc3RlcHMgdG8gc2h1dCBkb3duIHRoZSBYUiBz
ZXNzaW9uLgorICAgIHZpcnR1YWwgYm9vbCB3aWxsTm90aWZ5U2Vzc2lvblNodXRkb3duKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJvdGVjdGVkOgogICAgIERldmljZSgpID0gZGVmYXVs
dDsKQEAgLTcyLDYgKzg2LDcgQEAgcHJvdGVjdGVkOgogICAgIEVuYWJsZWRGZWF0dXJlc1Blck1v
ZGVNYXAgbV9lbmFibGVkRmVhdHVyZXNNYXA7CiAKICAgICBib29sIG1fc3VwcG9ydHNPcmllbnRh
dGlvblRyYWNraW5nIHsgZmFsc2UgfTsKKyAgICBXZWFrUHRyPFRyYWNraW5nQW5kUmVuZGVyaW5n
Q2xpZW50PiBtX3RyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50OwogfTsKIAogY2xhc3MgSW5zdGFu
Y2Ugewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418451</attachid>
            <date>2021-01-26 11:26:56 -0800</date>
            <delta_ts>2021-01-26 14:57:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220835-20210126112655.patch</filename>
            <type>text/plain</type>
            <size>25184</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiNmY5NDczZjZiYWFk
NWExY2ZjZjI4YTMwZDkxNjM2NjBhYTU5OC4uOTVjOGM0OWI1MjZlY2YxMGM3MDNiMjg0OTk3ZDc2
OGZmM2ViODhmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIxLTAxLTI2ICBBZGEg
Q2hhbiAgPGFkYS5jaGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIHRoZSBlbmQgWFJTZXNz
aW9uRXZlbnQgYWZ0ZXIgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIGZvciBzZXNzaW9uIHNo
dXRkb3duIGhhdmUgY29tcGxldGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjA4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0czogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4
ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLmh0bWwKKyAgICAg
ICAgICAgICAgIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJTZXNzaW9u
X2VuZGVkX2J5X3N5c3RlbS5odHRwcy5odG1sCisgICAgICAgICAgICAgICBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0
dHBzLmh0bWwKKworICAgICAgICAtIEFkZCB0aGUgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQg
cHJvdG9jb2wgdGhhdCB0aGUgRGV2aWNlIGNhbiBob2xkIGEKKyAgICAgICAgd2VhayByZWZlcmVu
Y2UgdG8gZHVyaW5nIGEgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBzZXNzaW9uLiBXZWJYUlNlc3Np
b24KKyAgICAgICAgaW1wbGVtZW50cyB0aGF0IHByb3RvY29sIHRvIGhhbmRsZSBjbGVhbnVwIGFm
dGVyIHNodXRkb3duIGhhcyBjb21wbGV0ZWQuCisgICAgICAgIC0gRm9yIHBsYXRmb3JtcyB0byBy
ZXBvcnQgYXN5bmNocm9ub3VzIGNvbXBsZXRpb24gb2YgdGhlIHNlc3Npb24gc2h1dGRvd24sCisg
ICAgICAgIHRoZXkgY2FuIGltcGxlbWVudCBQbGF0Zm9ybVhSOjpEZXZpY2U6OnN1cHBvcnRzU2Vz
c2lvblNodXRkb3duTm90aWZpY2F0aW9uKCkKKyAgICAgICAgdG8gcmV0dXJuIHRydWUuIFRoaXMg
d2F5IFdlYlhSU2Vzc2lvbiB3aWxsIHdhaXQgZm9yIHRoZSBzaHV0ZG93biBjb21wbGV0aW9uCisg
ICAgICAgICh2aWEgdGhlIFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50OjpzZXNzaW9uRGlkRW5k
KCkgY2FsbGJhY2spIGJlZm9yZSBzZW5kaW5nCisgICAgICAgIHRoZSBlbmQgWFJTZXNzaW9uRXZl
bnQgYW5kIHJlc29sdmluZyB0aGUgWFJTZXNzaW9uOjplbmQoKSBwcm9taXNlLgorCisgICAgICAg
ICogTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
WFJTZXNzaW9uOjpXZWJYUlNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9u
OjpzaHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlNlc3Npb246OmRpZENvbXBsZXRl
U2h1dGRvd24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjplbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpzZXNzaW9uRGlkRW5kKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJT
ZXNzaW9uLmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmg6CisgICAgICAg
IChQbGF0Zm9ybVhSOjpEZXZpY2U6OnNldFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50KToKKyAg
ICAgICAgKFBsYXRmb3JtWFI6OkRldmljZTo6c3VwcG9ydHNTZXNzaW9uU2h1dGRvd25Ob3RpZmlj
YXRpb24gY29uc3QpOgorICAgICAgICAqIHRlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZFhSRGV2aWNlOjpzaW11bGF0ZVNodXRkb3duQ29tcGxl
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZFhSRGV2aWNlOjpzaHV0RG93blRyYWNr
aW5nQW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkZha2VYUkRldmljZTo6c2V0
U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJGYWtl
WFJEZXZpY2U6OnNpbXVsYXRlU2h1dGRvd24pOgorICAgICAgICAqIHRlc3RpbmcvV2ViRmFrZVhS
RGV2aWNlLmg6CisgICAgICAgICogdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaWRsOgorCiAyMDIx
LTAxLTI1ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgVHdpdHRl
ciBQaVAgdmlkZW8gcGF1c2VzIHdoZW4gc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKaW5kZXggYjY2M2Q1MmQwNmJiMjA5YTQzNzFmN2Ey
MTMxMzk4ODUzYTc4ZjVhYi4uYmFjYjQ3N2NlMGQ4NGNjN2MzNTM3M2MwMDAxMDUwMzk0NTRkNThh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNwcApA
QCAtNTgsNiArNTgsNyBAQCBXZWJYUlNlc3Npb246OldlYlhSU2Vzc2lvbihEb2N1bWVudCYgZG9j
dW1lbnQsIFdlYlhSU3lzdGVtJiBzeXN0ZW0sIFhSU2Vzc2lvbk1vZAogICAgICwgbV9hbmltYXRp
b25UaW1lcigqdGhpcywgJldlYlhSU2Vzc2lvbjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKIHsKICAg
ICBtX2RldmljZS0+aW5pdGlhbGl6ZVRyYWNraW5nQW5kUmVuZGVyaW5nKG1vZGUpOworICAgIG1f
ZGV2aWNlLT5zZXRUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudChtYWtlV2Vha1B0cigoUGxhdGZv
cm1YUjo6VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQqKXRoaXMpKTsKIAogICAgIHN1c3BlbmRJ
Zk5lZWRlZCgpOwogfQpAQCAtMzE3LDggKzMxOCwyMCBAQCBJbnRTaXplIFdlYlhSU2Vzc2lvbjo6
cmVjb21tZW5kZWRXZWJHTEZyYW1lYnVmZmVyUmVzb2x1dGlvbigpIGNvbnN0CiB9CiAKIC8vIGh0
dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvI3NodXQtZG93bi10aGUtc2Vzc2lv
bgotdm9pZCBXZWJYUlNlc3Npb246OnNodXRkb3duKCkKK3ZvaWQgV2ViWFJTZXNzaW9uOjpzaHV0
ZG93bihJbml0aWF0ZWRCeVN5c3RlbSBpbml0aWF0ZWRCeVN5c3RlbSkKIHsKKyAgICBSZWY8V2Vi
WFJTZXNzaW9uPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIGlmIChtX2VuZGVkKSB7Cisg
ICAgICAgIC8vIFRoaXMgbWV0aG9kIHdhcyBjYWxsZWQgZWFybGllciB3aXRoIGluaXRpYXRlZEJ5
U3lzdGVtPU5vIHdoZW4gdGhlCisgICAgICAgIC8vIHNlc3Npb24gdGVybWluYXRpb24gd2FzIHJl
cXVlc3RlZCBtYW51YWxseSB2aWEgWFJTZXNzaW9uLmVuZCgpLiBXaGVuCisgICAgICAgIC8vIHRo
ZSBzeXN0ZW0gaGFzIGNvbXBsZXRlZCB0aGUgc2h1dGRvd24sIHRoaXMgbWV0aG9kIGlzIG5vdyBj
YWxsZWQgYWdhaW4KKyAgICAgICAgLy8gd2l0aCBpbml0aWF0ZWRCeVN5c3RlbT1ZZXMgdG8gZG8g
dGhlIGZpbmFsIGNsZWFudXAuCisgICAgICAgIGlmIChpbml0aWF0ZWRCeVN5c3RlbSA9PSBJbml0
aWF0ZWRCeVN5c3RlbTo6WWVzKQorICAgICAgICAgICAgZGlkQ29tcGxldGVTaHV0ZG93bigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gMS4gTGV0IHNlc3Npb24gYmUgdGhlIHRh
cmdldCBYUlNlc3Npb24gb2JqZWN0LgogICAgIC8vIDIuIFNldCBzZXNzaW9uJ3MgZW5kZWQgdmFs
dWUgdG8gdHJ1ZS4KICAgICBtX2VuZGVkID0gdHJ1ZTsKQEAgLTMyNyw2ICszNDAsMTQgQEAgdm9p
ZCBXZWJYUlNlc3Npb246OnNodXRkb3duKCkKICAgICAvLyA0LiBSZW1vdmUgc2Vzc2lvbiBmcm9t
IHRoZSBsaXN0IG9mIGlubGluZSBzZXNzaW9ucy4KICAgICBtX3hyU3lzdGVtLnNlc3Npb25FbmRl
ZCgqdGhpcyk7CiAKKyAgICBpZiAoaW5pdGlhdGVkQnlTeXN0ZW0gPT0gSW5pdGlhdGVkQnlTeXN0
ZW06OlllcykgeworICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlIHNlc3Npb24gdGVybWlu
YXRpb24gd2FzIHRyaWdnZXJlZCBieSB0aGUgc3lzdGVtIHJhdGhlciB0aGFuCisgICAgICAgIC8v
IHZpYSBYUlNlc3Npb24uZW5kKCkuIFNpbmNlIHRoZSBzeXN0ZW0gaGFzIGNvbXBsZXRlZCB0aGUg
c2Vzc2lvbiBzaHV0ZG93biwgd2UgY2FuCisgICAgICAgIC8vIGltbWVkaWF0ZWx5IGRvIHRoZSBm
aW5hbCBjbGVhbnVwLgorICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICAvLyBUT0RPOiBjb21wbGV0ZSB0aGUgaW1wbGVtZW50YXRpb24K
ICAgICAvLyA1LiBSZWplY3QgYW55IG91dHN0YW5kaW5nIHByb21pc2VzIHJldHVybmVkIGJ5IHNl
c3Npb24gd2l0aCBhbiBJbnZhbGlkU3RhdGVFcnJvciwgZXhjZXB0IGZvciBhbnkgcHJvbWlzZXMg
cmV0dXJuZWQgYnkgZW5kKCkuCiAgICAgLy8gNi4gSWYgbm8gb3RoZXIgZmVhdHVyZXMgb2YgdGhl
IHVzZXIgYWdlbnQgYXJlIGFjdGl2ZWx5IHVzaW5nIHRoZW0sIHBlcmZvcm0gdGhlIG5lY2Vzc2Fy
eSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyB0byBzaHV0IGRvd24gdGhlIGRldmljZSdzIHRyYWNr
aW5nIGFuZCByZW5kZXJpbmcgY2FwYWJpbGl0aWVzLiBUaGlzIE1VU1QgaW5jbHVkZToKQEAgLTMz
NiwzMCArMzU3LDUwIEBAIHZvaWQgV2ViWFJTZXNzaW9uOjpzaHV0ZG93bigpCiAgICAgaWYgKG1f
ZGV2aWNlKQogICAgICAgICBtX2RldmljZS0+c2h1dERvd25UcmFja2luZ0FuZFJlbmRlcmluZygp
OwogCisgICAgLy8gSWYgZGV2aWNlIHdpbGwgbm90IHJlcG9ydCBzaHV0ZG93biBjb21wbGV0aW9u
IHZpYSB0aGUgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQsCisgICAgLy8gY29tcGxldGUgdGhl
IHNodXRkb3duIGNsZWFudXAgaGVyZS4KKyAgICBpZiAoIW1fZGV2aWNlIHx8ICFtX2RldmljZS0+
c3VwcG9ydHNTZXNzaW9uU2h1dGRvd25Ob3RpZmljYXRpb24oKSkKKyAgICAgICAgZGlkQ29tcGxl
dGVTaHV0ZG93bigpOworfQorCit2b2lkIFdlYlhSU2Vzc2lvbjo6ZGlkQ29tcGxldGVTaHV0ZG93
bigpCit7CisgICAgaWYgKG1fZGV2aWNlKQorICAgICAgICBtX2RldmljZS0+c2V0VHJhY2tpbmdB
bmRSZW5kZXJpbmdDbGllbnQobnVsbHB0cik7CisKKyAgICAvLyBSZXNvbHZlIGVuZCBwcm9taXNl
IGZyb20gWFJTZXNzaW9uOjplbmQoKQorICAgIGlmIChtX2VuZFByb21pc2UpIHsKKyAgICAgICAg
bV9lbmRQcm9taXNlLT5yZXNvbHZlKCk7CisgICAgICAgIG1fZW5kUHJvbWlzZSA9IG51bGxwdHI7
CisgICAgfQorCisgICAgLy8gRnJvbSBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dl
YnhyLyNzaHV0LWRvd24tdGhlLXNlc3Npb24KICAgICAvLyA3LiBRdWV1ZSBhIHRhc2sgdGhhdCBm
aXJlcyBhbiBYUlNlc3Npb25FdmVudCBuYW1lZCBlbmQgb24gc2Vzc2lvbi4KICAgICBhdXRvIGV2
ZW50ID0gWFJTZXNzaW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZW5kRXZlbnQsIHsgbWFr
ZVJlZlB0cigqdGhpcykgfSk7CiAgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCp0aGlzLCBU
YXNrU291cmNlOjpXZWJYUiwgV1RGTW92ZShldmVudCkpOwogfQogCiAvLyBodHRwczovL2ltbWVy
c2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyNkb20teHJzZXNzaW9uLWVuZAotdm9pZCBXZWJYUlNl
c3Npb246OmVuZChFbmRQcm9taXNlJiYgcHJvbWlzZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFdlYlhS
U2Vzc2lvbjo6ZW5kKEVuZFByb21pc2UmJiBwcm9taXNlKQogewotICAgIC8vIFRoZSBzaHV0ZG93
bigpIGNhbGwgYmVsbG93IG1pZ2h0IHJlbW92ZSB0aGUgc29sZSByZWZlcmVuY2UgdG8gc2Vzc2lv
bgorICAgIC8vIFRoZSBzaHV0ZG93bigpIGNhbGwgYmVsb3cgbWlnaHQgcmVtb3ZlIHRoZSBzb2xl
IHJlZmVyZW5jZSB0byBzZXNzaW9uCiAgICAgLy8gdGhhdCBjb3VsZCBleGlzdCAodGhlIFhSU3lz
dGVtIG93bnMgdGhlIHNlc3Npb25zKSBzbyBsZXQncyBwcm90ZWN0IHRoaXMuCiAgICAgUmVmPFdl
YlhSU2Vzc2lvbj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBpZiAobV9lbmRlZCkKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CisKICAgICAvLyAx
LiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBQcm9taXNlLgogICAgIC8vIDIuIFNodXQgZG93biB0aGUg
dGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3QuCi0gICAgaWYgKCFtX2VuZGVkKQotICAgICAgICBzaHV0
ZG93bigpOworICAgIHNodXRkb3duKEluaXRpYXRlZEJ5U3lzdGVtOjpObyk7CiAKICAgICAvLyAz
LiBRdWV1ZSBhIHRhc2sgdG8gcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICAgIHF1ZXVl
VGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6V2ViWFIsIFtwcm9taXNl
ID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIC8vIDMuMSBXYWl0IHVu
dGlsIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyByZWxhdGVkIHRvIHNodXR0aW5nIGRvd24g
dGhlIHNlc3Npb24gaGF2ZSBjb21wbGV0ZWQuCi0gICAgICAgIC8vIDMuMiBSZXNvbHZlIHByb21p
c2UuCi0gICAgICAgIHByb21pc2UucmVzb2x2ZSgpOwotICAgIH0pOworICAgIC8vIDMuMSBXYWl0
IHVudGlsIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyByZWxhdGVkIHRvIHNodXR0aW5nIGRv
d24gdGhlIHNlc3Npb24gaGF2ZSBjb21wbGV0ZWQuCisgICAgLy8gMy4yIFJlc29sdmUgcHJvbWlz
ZS4KKyAgICBtX2VuZFByb21pc2UgPSBXVEY6Om1ha2VVbmlxdWU8RW5kUHJvbWlzZT4oV1RGTW92
ZShwcm9taXNlKSk7CiAKICAgICAvLyA0LiBSZXR1cm4gcHJvbWlzZS4KKyAgICByZXR1cm4geyB9
OwogfQogCiBjb25zdCBjaGFyKiBXZWJYUlNlc3Npb246OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBj
b25zdApAQCAtMzcxLDYgKzQxMiwxNSBAQCB2b2lkIFdlYlhSU2Vzc2lvbjo6c3RvcCgpCiB7CiB9
CiAKKy8vIE1BUks6IC0gVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQKKwordm9pZCBXZWJYUlNl
c3Npb246OnNlc3Npb25EaWRFbmQoKQoreworICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBhcyBh
IHJlc3VsdCBvZiBmaW5pc2hpbmcgdGhlIHNodXRkb3duIGluaXRpYXRlZAorICAgIC8vIGZyb20g
WFJTZXNzaW9uOjplbmQoKSwgb3Igc2Vzc2lvbiB0ZXJtaW5hdGlvbiB0cmlnZ2VyZWQgYnkgdGhl
IHN5c3RlbS4KKyAgICBzaHV0ZG93bihJbml0aWF0ZWRCeVN5c3RlbTo6WWVzKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmgKaW5kZXggZTRjMjdkYjRiOTBkOTIx
ZTIxNTU1YTZhMjg2OTA2ZTk4YzYzYTBlOC4uZGVkZGUyMzEwM2FiNzNjZDhmMmRkM2VhN2NhYjQ3
YWQ5OTg2NWU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJY
UlNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lv
bi5oCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIFdlYlhSUmVmZXJlbmNlU3BhY2U7CiBjbGFzcyBX
ZWJYUlN5c3RlbTsKIHN0cnVjdCBYUlJlbmRlclN0YXRlSW5pdDsKIAotY2xhc3MgV2ViWFJTZXNz
aW9uIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPiwgcHVibGljIEV2ZW50
VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgV2Vi
WFJTZXNzaW9uIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPiwgcHVibGlj
IEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1Ymxp
YyBQbGF0Zm9ybVhSOjpUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChXZWJYUlNlc3Npb24pOwogcHVibGljOgogICAgIHVzaW5nIFJlcXVlc3RS
ZWZlcmVuY2VTcGFjZVByb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPFdl
YlhSUmVmZXJlbmNlU3BhY2U+PjsKQEAgLTgyLDcgKzgyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBF
dmVudFRhcmdldC4KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7IH0KIAotICAgIHZvaWQgZW5kKEVuZFByb21pc2UmJik7CisgICAgLy8g
UGxhdGZvcm1YUjo6VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQKKyAgICB2b2lkIHNlc3Npb25E
aWRFbmQoKSBmaW5hbDsKKworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGVuZChFbmRQcm9taXNlJiYp
OwogICAgIGJvb2wgZW5kZWQoKSBjb25zdCB7IHJldHVybiBtX2VuZGVkOyB9CiAKICAgICBYUlNl
c3Npb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KQEAgLTk5LDcgKzEwMiw5
IEBAIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBzaHV0ZG93
bigpOworICAgIGVudW0gY2xhc3MgSW5pdGlhdGVkQnlTeXN0ZW0geyBObywgWWVzIH07CisgICAg
dm9pZCBzaHV0ZG93bihJbml0aWF0ZWRCeVN5c3RlbSk7CisgICAgdm9pZCBkaWRDb21wbGV0ZVNo
dXRkb3duKCk7CiAKICAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHNj
aGVkdWxlQW5pbWF0aW9uKCk7CkBAIC0xMTEsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBYUlZp
c2liaWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlTdGF0ZTsKICAgICBSZWY8V2ViWFJJbnB1dFNvdXJj
ZUFycmF5PiBtX2lucHV0U291cmNlczsKICAgICBib29sIG1fZW5kZWQgeyBmYWxzZSB9OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxFbmRQcm9taXNlPiBtX2VuZFByb21pc2U7CiAKICAgICBXZWJYUlN5
c3RlbSYgbV94clN5c3RlbTsKICAgICBYUlNlc3Npb25Nb2RlIG1fbW9kZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbAppbmRleCA1YzA0OGMwZjQ2NjM4
MmU2NDAzOGI5YWFjMDY5Y2Y4MDE3MzE5MjhlLi45ODk1ZTYzNzRhYjgzYWFjYTUwZDBmNTlmMTVl
ZmYyNDRkNTZlM2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dl
YlhSU2Vzc2lvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNl
c3Npb24uaWRsCkBAIC00NSw3ICs0NSw3IEBACiAgICAgdW5zaWduZWQgbG9uZyByZXF1ZXN0QW5p
bWF0aW9uRnJhbWUoWFJGcmFtZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFjayk7CiAgICAgdW5kZWZp
bmVkIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHVuc2lnbmVkIGxvbmcgaGFuZGxlKTsKIAotICAgIFBy
b21pc2U8dW5kZWZpbmVkPiBlbmQoKTsKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIFByb21pc2U8
dW5kZWZpbmVkPiBlbmQoKTsKIAogICAgIC8vIEV2ZW50cwogICAgIGF0dHJpYnV0ZSBFdmVudEhh
bmRsZXIgb25lbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0
Zm9ybVhSLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmgKaW5kZXgg
NjQ1NTBmNGUwMWJmMDA1YmVkZTE4NGMwZmVhNGRiOTMxMjY0OGI2NC4uOTI3N2UyNzQ5MDA2MTBi
ZGMyNjljZTdmNWU3YjdkYzU0YWYxNGIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0veHIvUGxhdGZvcm1YUi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1Bs
YXRmb3JtWFIuaApAQCAtNDQsNiArNDQsMTUgQEAgZW51bSBjbGFzcyBSZWZlcmVuY2VTcGFjZVR5
cGUgewogCiAjaWYgRU5BQkxFKFdFQlhSKQogCitjbGFzcyBUcmFja2luZ0FuZFJlbmRlcmluZ0Ns
aWVudCA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudD4g
eworcHVibGljOgorICAgIHZpcnR1YWwgflRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50KCkgPSBk
ZWZhdWx0OworCisgICAgdmlydHVhbCB2b2lkIHNlc3Npb25EaWRFbmQoKSA9IDA7CisgICAgLy8g
RklYTUU6IGhhbmRsZSBmcmFtZSB1cGRhdGUKKyAgICAvLyBGSVhNRTogaGFuZGxlIHZpc2liaWxp
dHkgY2hhbmdlcworfTsKKwogY2xhc3MgRGV2aWNlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPERl
dmljZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERldmljZSk7CkBAIC02MSw2ICs3MCwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgaW5pdGlhbGl6ZVRyYWNraW5nQW5kUmVuZGVyaW5nKFNlc3Npb25Nb2RlKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNodXREb3duVHJhY2tpbmdBbmRSZW5kZXJpbmcoKSA9IDA7CisgICAg
dm9pZCBzZXRUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudChXZWFrUHRyPFRyYWNraW5nQW5kUmVu
ZGVyaW5nQ2xpZW50PiYmIGNsaWVudCkgeyBtX3RyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50ID0g
Y2xpZW50OyB9CisKKyAgICAvLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoYXQgbWVh
bnMgdGhlIGRldmljZSB3aWxsIG5vdGlmeSBUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudAorICAg
IC8vIHdoZW4gdGhlIHBsYXRmb3JtIGhhcyBjb21wbGV0ZWQgYWxsIHN0ZXBzIHRvIHNodXQgZG93
biB0aGUgWFIgc2Vzc2lvbi4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZXNzaW9uU2h1dGRv
d25Ob3RpZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgRGV2aWNlKCkgPSBkZWZhdWx0OwpAQCAtNzIsNiArODYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
RW5hYmxlZEZlYXR1cmVzUGVyTW9kZU1hcCBtX2VuYWJsZWRGZWF0dXJlc01hcDsKIAogICAgIGJv
b2wgbV9zdXBwb3J0c09yaWVudGF0aW9uVHJhY2tpbmcgeyBmYWxzZSB9OworICAgIFdlYWtQdHI8
VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ+IG1fdHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ7
CiB9OwogCiBjbGFzcyBJbnN0YW5jZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL1dlYkZha2VYUkRldmljZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZha2VY
UkRldmljZS5jcHAKaW5kZXggMmZhZGYzOTMyNTA1ZGE1NGFiZTE3ZDE5MTJlNDAxMTkyMWE0OTU3
NC4uYTQ3YzFlY2E3ZGVkY2VkYTUwNTBhZDk3YmM0N2Q4NTY1YmE1OTBlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcApAQCAtMzksNiArMzksMTggQEAgdm9p
ZCBGYWtlWFJWaWV3OjpzZXRGaWVsZE9mVmlldyhGYWtlWFJWaWV3SW5pdDo6RmllbGRPZlZpZXdJ
bml0IGZvdikKICAgICBtX2ZvdiA9IGZvdjsKIH0KIAordm9pZCBTaW11bGF0ZWRYUkRldmljZTo6
c2ltdWxhdGVTaHV0ZG93bkNvbXBsZXRlZCgpCit7CisgICAgaWYgKG1fdHJhY2tpbmdBbmRSZW5k
ZXJpbmdDbGllbnQpCisgICAgICAgIG1fdHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQtPnNlc3Np
b25EaWRFbmQoKTsKK30KKwordm9pZCBTaW11bGF0ZWRYUkRldmljZTo6c2h1dERvd25UcmFja2lu
Z0FuZFJlbmRlcmluZygpCit7CisgICAgaWYgKG1fc3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlv
bikKKyAgICAgICAgc2ltdWxhdGVTaHV0ZG93bkNvbXBsZXRlZCgpOworfQorCiBXZWJGYWtlWFJE
ZXZpY2U6OldlYkZha2VYUkRldmljZSgpID0gZGVmYXVsdDsKIAogdm9pZCBXZWJGYWtlWFJEZXZp
Y2U6OnNldFZpZXdzKGNvbnN0IFZlY3RvcjxGYWtlWFJWaWV3SW5pdD4mIHZpZXdzKQpAQCAtMTU2
LDYgKzE2OCwxNiBAQCBFeGNlcHRpb25PcjxSZWY8RmFrZVhSVmlldz4+IFdlYkZha2VYUkRldmlj
ZTo6cGFyc2VWaWV3KGNvbnN0IEZha2VYUlZpZXdJbml0JiBpbgogICAgIHJldHVybiBmYWtlVmll
dzsKIH0KIAordm9pZCBXZWJGYWtlWFJEZXZpY2U6OnNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmlj
YXRpb24oKQoreworICAgIG1fZGV2aWNlLnNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24o
dHJ1ZSk7Cit9CisKK3ZvaWQgV2ViRmFrZVhSRGV2aWNlOjpzaW11bGF0ZVNodXRkb3duKCkKK3sK
KyAgICBtX2RldmljZS5zaW11bGF0ZVNodXRkb3duQ29tcGxldGVkKCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJYUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmggYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL1dlYkZha2VYUkRldmljZS5oCmluZGV4IDk3YTFiOTU3MTllN2IzMmJmODQxNGJjZmEz
NGQ2OTBlZDczNjc3MGYuLjg0N2JiY2IxNzQ0ODQ0OGYwZWM3ZThjZWIxYjZmZDZlOWZhYzk1ODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaApAQCAtNjksMTQgKzY5
LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZsb29yT3JpZ2luKFJlZlB0cjxXZWJYUlJpZ2lk
VHJhbnNmb3JtPiYmIG9yaWdpbikgeyBtX2Zsb29yT3JpZ2luID0gV1RGTW92ZShvcmlnaW4pOyB9
CiAgICAgdm9pZCBzZXRFbXVsYXRlZFBvc2l0aW9uKGJvb2wgZW11bGF0ZWQpIHsgbV9lbXVsYXRl
ZFBvc2l0aW9uID0gZW11bGF0ZWQ7IH0KICAgICBWZWN0b3I8UmVmPEZha2VYUlZpZXc+PiYgdmll
d3MoKSB7IHJldHVybiBtX3ZpZXdzOyB9CisgICAgdm9pZCBzZXRTdXBwb3J0c1NodXRkb3duTm90
aWZpY2F0aW9uKGJvb2wgc3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbikgeyBtX3N1cHBvcnRz
U2h1dGRvd25Ob3RpZmljYXRpb24gPSBzdXBwb3J0c1NodXRkb3duTm90aWZpY2F0aW9uOyB9Cisg
ICAgdm9pZCBzaW11bGF0ZVNodXRkb3duQ29tcGxldGVkKCk7CiBwcml2YXRlOgogICAgIHZvaWQg
aW5pdGlhbGl6ZVRyYWNraW5nQW5kUmVuZGVyaW5nKFBsYXRmb3JtWFI6OlNlc3Npb25Nb2RlKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNodXREb3duVHJhY2tpbmdBbmRSZW5kZXJpbmcoKSBmaW5hbCB7
IH0KKyAgICB2b2lkIHNodXREb3duVHJhY2tpbmdBbmRSZW5kZXJpbmcoKSBmaW5hbDsKKyAgICBi
b29sIHN1cHBvcnRzU2Vzc2lvblNodXRkb3duTm90aWZpY2F0aW9uKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9zdXBwb3J0c1NodXRkb3duTm90aWZpY2F0aW9uOyB9CiAgICAgT3B0aW9uYWw8VmVj
dG9yPEZha2VYUkJvdW5kc1BvaW50Pj4gbV9uYXRpdmVCb3VuZHNHZW9tZXRyeTsKICAgICBSZWZQ
dHI8V2ViWFJSaWdpZFRyYW5zZm9ybT4gbV92aWV3ZXJPcmlnaW47CiAgICAgUmVmUHRyPFdlYlhS
UmlnaWRUcmFuc2Zvcm0+IG1fZmxvb3JPcmlnaW47CiAgICAgYm9vbCBtX2VtdWxhdGVkUG9zaXRp
b24geyBmYWxzZSB9OwogICAgIFZlY3RvcjxSZWY8RmFrZVhSVmlldz4+IG1fdmlld3M7CisgICAg
Ym9vbCBtX3N1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24geyBmYWxzZSB9OwogfTsKIAogY2xh
c3MgV2ViRmFrZVhSRGV2aWNlIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViRmFrZVhSRGV2
aWNlPiB7CkBAIC0xMDcsNiArMTExLDEwIEBAIHB1YmxpYzoKIAogICAgIFNpbXVsYXRlZFhSRGV2
aWNlJiBzaW11bGF0ZWRYUkRldmljZSgpIHsgcmV0dXJuIG1fZGV2aWNlOyB9CiAKKyAgICB2b2lk
IHNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24oKTsKKworICAgIHZvaWQgc2ltdWxhdGVT
aHV0ZG93bigpOworCiBwcml2YXRlOgogICAgIFdlYkZha2VYUkRldmljZSgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5pZGwKaW5kZXggOTQ2MjU3MTZlZDA2YmU5
ZTJkOTY0NTAwNDAyM2FjNzYxMTllYjUzZS4uYjNmODkxZmM2Yjk1ODU1OTFhZTQzZGJkMzM0MTFl
NzdiNjA2NWE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJE
ZXZpY2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmlk
bApAQCAtNjAsNCArNjAsMTAgQEAKIAogICAvLyBVc2VkIHRvIGNvbm5lY3QgYW5kIHNlbmQgaW5w
dXQgZXZlbnRzCiAgIFdlYkZha2VYUklucHV0Q29udHJvbGxlciBzaW11bGF0ZUlucHV0U291cmNl
Q29ubmVjdGlvbihGYWtlWFJJbnB1dFNvdXJjZUluaXQgaW5wdXRTb3VyY2UpOworCisgIC8vIFNl
dCB1cCB0aGUgZGV2aWNlIHNvIGl0J2xsIG5vdGlmeSBzZXNzaW9uIHdoZW4gdGhlIHN5c3RlbSBo
YXMgY29tcGxldGVkIGFsbCBzdGVwcyBmb3Igc2Vzc2lvbiBzaHV0ZG93bgorICB1bmRlZmluZWQg
c2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbigpOworCisgIC8vIFNpbXVsYXRlIHNlc3Np
b24gc2h1dGRvd24gdHJpZ2dlcmVkIGJ5IHN5c3RlbQorICB1bmRlZmluZWQgc2ltdWxhdGVTaHV0
ZG93bigpOwogfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBlNmZhZDBkNjllOWJmZWU4YTdjZWM3Njc1ZWZjNmQ2YWJmZjFi
ZDNlLi44NjJhMDc4NDhkODg5NDExMGUzYzI3Y2VkNmZkZTBkMmFmYzI1ZDFkIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMjEtMDEtMjYgIEFkYSBDaGFuICA8YWRhLmNoYW5AYXBwbGUuY29tPgor
CisgICAgICAgIFNlbmQgdGhlIGVuZCBYUlNlc3Npb25FdmVudCBhZnRlciB0aGUgcGxhdGZvcm0t
c3BlY2lmaWMgc3RlcHMgZm9yIHNlc3Npb24gc2h1dGRvd24gaGF2ZSBjb21wbGV0ZWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDgzNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjEtMDEtMjUgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRh
cmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtydW4td2Via2l0LXRlc3RzXSBTdXBwb3J0IHB5dGhv
biBsYXlvdXQgdGVzdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IGZlNzgxNTZj
ZmM4ZTA5YzZmYzY4ODhjNmZhM2EyNWY0OGEyNmRjNTUuLmFhYjVlMGUxY2QxMmQ3ODQ2OThlYTkz
YmU2NjI1OTlmZmJkMDQ4OWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIxLTAxLTI2ICBBZGEgQ2hhbiAgPGFkYS5jaGFuQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTZW5kIHRoZSBlbmQgWFJTZXNzaW9uRXZlbnQgYWZ0ZXIgdGhlIHBsYXRmb3JtLXNw
ZWNpZmljIHN0ZXBzIGZvciBzZXNzaW9uIHNodXRkb3duIGhhdmUgY29tcGxldGVkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA4MzUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hy
U2Vzc2lvbl9lbmRfZGV2aWNlX3JlcG9ydHNfc2h1dGRvd24uaHR0cHMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0
ZW0uaHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvd2VieHIveHJTZXNzaW9uX2VuZGVkX2J5X3N5c3RlbS5odHRwcy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBs
ZV9lbmQuaHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBsZV9lbmQuaHR0cHMuaHRtbDogQWRk
ZWQuCisKIDIwMjEtMDEtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBTdXBwb3J0IEFib3J0U2lnbmFsIGluIGFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIHRvIHVu
c3Vic2NyaWJlIGZyb20gZXZlbnRzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNlX3JlcG9ydHNf
c2h1dGRvd24uaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRk
b3duLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OGNjOGI0NjMxOGY1MGM2ZWIzZWFm
YWViNjgzMGFlMWJjMjYyZDkzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBv
cnRzX3NodXRkb3duLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBl
bmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBlbmRzIGFuZCBkZXZpY2UgcmVw
b3J0cyB3aGVuIHNodXRkb3duIGhhcyBjb21wbGV0ZWQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZW5kX2Rl
dmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNlX3JlcG9ydHNf
c2h1dGRvd24uaHR0cHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGMzNDQ1ZTZiMGNiZjEyOTQ0ZTA1Zjhj
NWViYmExMTRjNWFkMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRz
X3NodXRkb3duLmh0dHBzLmh0bWwKQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
Ym9keT4KKyAgPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4K
KyAgPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcz48L3NjcmlwdD4K
KyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJ4cl91dGlsLmpzIj48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9InJlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+Cisg
IDxjYW52YXM+PC9jYW52YXM+CisKKyAgPHNjcmlwdD4KKyAgICBjb25zdCB0ZXN0TmFtZSA9ICJl
bmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBlbmRzIGFuZCBkZXZpY2UgcmVw
b3J0cyB3aGVuIHNodXRkb3duIGhhcyBjb21wbGV0ZWQiOworICAgIGxldCB3YXRjaGVyRG9uZSA9
IG5ldyBFdmVudCgid2F0Y2hlcmRvbmUiKTsKKyAgICBjb25zdCBmYWtlRGV2aWNlSW5pdFBhcmFt
cyA9IFRSQUNLRURfSU1NRVJTSVZFX0RFVklDRTsKKworICAgIGxldCB0ZXN0RnVuY3Rpb24gPSBm
dW5jdGlvbihzZXNzaW9uLCB0ZXN0RGV2aWNlQ29udHJvbGxlciwgdCkgeworICAgICAgdGVzdERl
dmljZUNvbnRyb2xsZXIuc2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbigpOworICAgICAg
bGV0IGV2ZW50V2F0Y2hlciA9IG5ldyBFdmVudFdhdGNoZXIodCwgc2Vzc2lvbiwgWyJlbmQiLCAi
d2F0Y2hlcmRvbmUiXSk7CisgICAgICBsZXQgZXZlbnRQcm9taXNlID0gZXZlbnRXYXRjaGVyLndh
aXRfZm9yKFsiZW5kIiwgIndhdGNoZXJkb25lIl0pOworCisgICAgICBmdW5jdGlvbiBvblNlc3Np
b25FbmQoZXZlbnQpIHsKKyAgICAgICAgdC5zdGVwKCAoKSA9PiB7CisgICAgICAgICAgYXNzZXJ0
X2VxdWFscyhldmVudC5zZXNzaW9uLCBzZXNzaW9uKTsKKworICAgICAgICAgIGxldCBldmVudFNl
c3Npb24gPSBldmVudC5zZXNzaW9uOworICAgICAgICAgIGFzc2VydF9lcXVhbHMoZXZlbnRTZXNz
aW9uLCBldmVudC5zZXNzaW9uLAorICAgICAgICAgICAgIlhSU2Vzc2lvbkV2ZW50LnNlc3Npb24g
cmV0dXJucyB0aGUgc2FtZSBvYmplY3QuIik7CisKKyAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNo
RXZlbnQod2F0Y2hlckRvbmUpOworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICAgIHNlc3Npb24u
YWRkRXZlbnRMaXN0ZW5lcigiZW5kIiwgb25TZXNzaW9uRW5kLCBmYWxzZSk7CisgICAgICBzZXNz
aW9uLmVuZCgpOworCisgICAgICByZXR1cm4gZXZlbnRQcm9taXNlOworICAgIH07CisKKyAgICB4
cl9zZXNzaW9uX3Byb21pc2VfdGVzdCh0ZXN0TmFtZSwgdGVzdEZ1bmN0aW9uLAorICAgICAgZmFr
ZURldmljZUluaXRQYXJhbXMsICdpbW1lcnNpdmUtdnInKTsKKyAgPC9zY3JpcHQ+Cis8L2JvZHk+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0ZW0uaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25f
ZW5kZWRfYnlfc3lzdGVtLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYWFlNWZmZmQ4
ZDRiYzcyMTVlMzVhMDRlYTE1NTVkYWYzZDI0YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZW5k
ZWRfYnlfc3lzdGVtLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKKworUEFTUyBl
bmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBpcyBlbmRlZCBieSBzeXN0ZW0K
K1BBU1MgZW5kIGV2ZW50IGZpcmVzIHdoZW4gaW1tZXJzaXZlIHNlc3Npb24gaXMgZW5kZWQgYnkg
c3lzdGVtIGFuZCBkZXZpY2UgcmVwb3J0cyBzaHV0ZG93biBjb21wbGV0ZQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vz
c2lvbl9lbmRlZF9ieV9zeXN0ZW0uaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJTZXNzaW9uX2VuZGVkX2J5X3N5c3RlbS5odHRw
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI5MTQ4NzQyMDRhMWMzMmU0NDNjNTc3NmEwOGY3ODNiZTYzNWJj
MjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0ZW0uaHR0cHMuaHRtbApAQCAt
MCwwICsxLDUzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5PgorICA8c2NyaXB0IHNyYz0vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3dlYnhyX3V0aWwuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYnhy
X3Rlc3RfY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgPGNhbnZhcz48L2NhbnZhcz4KKworICA8
c2NyaXB0PgorICAgIGNvbnN0IHRlc3REZXZpY2VOb3RSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRl
TmFtZSA9ICJlbmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBpcyBlbmRlZCBi
eSBzeXN0ZW0iOworICAgIGNvbnN0IHRlc3REZXZpY2VSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRl
TmFtZSA9ICJlbmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBpcyBlbmRlZCBi
eSBzeXN0ZW0gYW5kIGRldmljZSByZXBvcnRzIHNodXRkb3duIGNvbXBsZXRlIjsKKworICAgIGxl
dCB3YXRjaGVyRG9uZSA9IG5ldyBFdmVudCgid2F0Y2hlcmRvbmUiKTsKKyAgICBjb25zdCBmYWtl
RGV2aWNlSW5pdFBhcmFtcyA9IFRSQUNLRURfSU1NRVJTSVZFX0RFVklDRTsKKworICAgIGxldCB0
ZXN0RGV2aWNlTm90UmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZSA9IGZ1bmN0aW9uKHNlc3Npb24s
IHRlc3REZXZpY2VDb250cm9sbGVyLCB0KSB7CisgICAgICB0ZXN0RW5kU2Vzc2lvbkJ5U3lzdGVt
KHNlc3Npb24sIHRlc3REZXZpY2VDb250cm9sbGVyLCB0KTsKKyAgICB9OworCisgICAgbGV0IHRl
c3REZXZpY2VSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRlID0gZnVuY3Rpb24oc2Vzc2lvbiwgdGVz
dERldmljZUNvbnRyb2xsZXIsIHQpIHsKKyAgICAgIHRlc3REZXZpY2VDb250cm9sbGVyLnNldFN1
cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24oKTsKKyAgICAgIHRlc3RFbmRTZXNzaW9uQnlTeXN0
ZW0oc2Vzc2lvbiwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQpOworICAgIH07CisKKyAgICBsZXQg
dGVzdEVuZFNlc3Npb25CeVN5c3RlbSA9IGZ1bmN0aW9uKHNlc3Npb24sIHRlc3REZXZpY2VDb250
cm9sbGVyLCB0KSB7CisgICAgICBsZXQgZXZlbnRXYXRjaGVyID0gbmV3IEV2ZW50V2F0Y2hlcih0
LCBzZXNzaW9uLCBbImVuZCIsICJ3YXRjaGVyZG9uZSJdKTsKKyAgICAgIGxldCBldmVudFByb21p
c2UgPSBldmVudFdhdGNoZXIud2FpdF9mb3IoWyJlbmQiLCAid2F0Y2hlcmRvbmUiXSk7CisKKyAg
ICAgIGZ1bmN0aW9uIG9uU2Vzc2lvbkVuZChldmVudCkgeworICAgICAgICB0LnN0ZXAoICgpID0+
IHsKKyAgICAgICAgICBhc3NlcnRfZXF1YWxzKGV2ZW50LnNlc3Npb24sIHNlc3Npb24pOworCisg
ICAgICAgICAgbGV0IGV2ZW50U2Vzc2lvbiA9IGV2ZW50LnNlc3Npb247CisgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyhldmVudFNlc3Npb24sIGV2ZW50LnNlc3Npb24sCisgICAgICAgICAgICAiWFJT
ZXNzaW9uRXZlbnQuc2Vzc2lvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdC4iKTsKKworICAgICAg
ICAgIHNlc3Npb24uZGlzcGF0Y2hFdmVudCh3YXRjaGVyRG9uZSk7CisgICAgICAgIH0pOworICAg
ICAgfQorICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJlbmQiLCBvblNlc3Npb25FbmQs
IGZhbHNlKTsKKworICAgICAgdGVzdERldmljZUNvbnRyb2xsZXIuc2ltdWxhdGVTaHV0ZG93bigp
OworCisgICAgICByZXR1cm4gZXZlbnRQcm9taXNlOworICAgIH07CisKKyAgICB4cl9zZXNzaW9u
X3Byb21pc2VfdGVzdCh0ZXN0RGV2aWNlTm90UmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZU5hbWUs
IHRlc3REZXZpY2VOb3RSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRlLAorICAgICAgZmFrZURldmlj
ZUluaXRQYXJhbXMsICdpbW1lcnNpdmUtdnInKTsKKyAgICB4cl9zZXNzaW9uX3Byb21pc2VfdGVz
dCh0ZXN0RGV2aWNlUmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZU5hbWUsIHRlc3REZXZpY2VSZXBv
cnRpbmdTaHV0ZG93bkNvbXBsZXRlLAorICAgICAgZmFrZURldmljZUluaXRQYXJhbXMsICdpbW1l
cnNpdmUtdnInKTsKKworICA8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJTZXNzaW9uX3JlamVj
dF9tdWx0aXBsZV9lbmQuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxlX2Vu
ZC5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg5NzUzM2VjNDg3OTNkMTM0NmE3MDRk
YTQwNjIyNzQyNzY1ZWNjYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBsZV9l
bmQuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIFJlamVjdCBtdWx0
aXBsZSBjYWxscyB0byBYUlNlc3Npb24uZW5kKCkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fcmVqZWN0X211
bHRpcGxlX2VuZC5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxlX2VuZC5odHRwcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRjNWE2Mjc4ZTAyMTVmOWU1NjNkZTA1MmRkOTJiYjM0ZjU3MWU5NTEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwKQEAgLTAs
MCArMSwyMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8Ym9keT4KKyAgPHNjcmlwdCBzcmM9L3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93
ZWJ4cl91dGlsLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJ4cl90
ZXN0X2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgIDxjYW52YXM+PC9jYW52YXM+CisKKyAgPHNj
cmlwdD4KKyAgICBjb25zdCB0ZXN0TmFtZSA9ICJSZWplY3QgbXVsdGlwbGUgY2FsbHMgdG8gWFJT
ZXNzaW9uLmVuZCgpIjsKKyAgICBjb25zdCBmYWtlRGV2aWNlSW5pdFBhcmFtcyA9IFRSQUNLRURf
SU1NRVJTSVZFX0RFVklDRTsKKworICAgIGxldCB0ZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihzZXNz
aW9uLCB0ZXN0RGV2aWNlQ29udHJvbGxlciwgdCkgeworICAgICAgc2Vzc2lvbi5lbmQoKTsKKyAg
ICAgIHJldHVybiBwcm9taXNlX3JlamVjdHNfZG9tKHQsICJJbnZhbGlkU3RhdGVFcnJvciIsIHNl
c3Npb24uZW5kKCkpCisgICAgfTsKKworICAgIHhyX3Nlc3Npb25fcHJvbWlzZV90ZXN0KHRlc3RO
YW1lLCB0ZXN0RnVuY3Rpb24sCisgICAgICBmYWtlRGV2aWNlSW5pdFBhcmFtcywgJ2ltbWVyc2l2
ZS12cicpOworICA8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rl
c3RFeHBlY3RhdGlvbnMKaW5kZXggOTI2NzZiNGQ2ZTE5NjU5ZjI3MDA2YTgwMmU2YjYyNmZkNDk0
Y2U5Mi4uMDIyZmJlODM1OTUzMzQ3N2NhMzFmMWZkZGQxYzM0NmJhZmRiZmY2MSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTIyNTcsMyArMjI1NywxMCBA
QCB3ZWJraXQub3JnL2IvMjIwMDc3IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vi
cnRjL3Byb3RvY29sL2NyeXB0by1zdWl0ZQogd2Via2l0Lm9yZy9iLzIyMDMzMiBbIEJpZ1N1cisg
XSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21pbWVzbmlmZi9taW1lLXR5cGVzL2No
YXJzZXQtcGFyYW1ldGVyLndpbmRvdy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogd2Via2l0Lm9y
Zy9iLzIyMDU1MiBbIEJpZ1N1cisgXSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXdl
Ym0taW5pdC1pbnNpZGUtc2VnbWVudC5odG1sIFsgRmFpbHVyZSBdCisKKyMgLS0tIFN0YXJ0IFdl
YlhSIHRlc3RzIC0tLSAjCitpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hy
U2Vzc2lvbl9lbmQuaHR0cHMuaHRtbCBbIFBhc3MgXQoraW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJ4ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxlX2VuZC5odHRwcy5odG1sIFsg
UGFzcyBdCitpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9l
bmRfZGV2aWNlX3JlcG9ydHNfc2h1dGRvd24uaHR0cHMuaHRtbCBbIFBhc3MgXQoraW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0
dHBzLmh0bWwgWyBQYXNzIF0KKyMgLS0tIEVuZCBXZWJYUiB0ZXN0cyAtLS0gIwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418478</attachid>
            <date>2021-01-26 14:57:08 -0800</date>
            <delta_ts>2021-01-26 17:03:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220835-20210126145708.patch</filename>
            <type>text/plain</type>
            <size>53261</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiNmY5NDczZjZiYWFk
NWExY2ZjZjI4YTMwZDkxNjM2NjBhYTU5OC4uZjhmNTkyM2YyMWEyNTkzMjJhNDhmY2RhN2U1Nzg4
ZWEzYWZjZWViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIxLTAxLTI2ICBBZGEg
Q2hhbiAgPGFkYS5jaGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIHRoZSBlbmQgWFJTZXNz
aW9uRXZlbnQgYWZ0ZXIgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIGZvciBzZXNzaW9uIHNo
dXRkb3duIGhhdmUgY29tcGxldGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjA4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0czogaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2Vf
cmVwb3J0c19zaHV0ZG93bi5odHRwcy5odG1sCisgICAgICAgICAgICAgICBodHRwL3dwdC93ZWJ4
ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwKKwor
ICAgICAgICAtIEFkZCB0aGUgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgcHJvdG9jb2wgdGhh
dCB0aGUgRGV2aWNlIGNhbiBob2xkIGEKKyAgICAgICAgd2VhayByZWZlcmVuY2UgdG8gZHVyaW5n
IGEgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBzZXNzaW9uLiBXZWJYUlNlc3Npb24KKyAgICAgICAg
aW1wbGVtZW50cyB0aGF0IHByb3RvY29sIHRvIGhhbmRsZSBjbGVhbnVwIGFmdGVyIHNodXRkb3du
IGhhcyBjb21wbGV0ZWQuCisgICAgICAgIC0gRm9yIHBsYXRmb3JtcyB0byByZXBvcnQgYXN5bmNo
cm9ub3VzIGNvbXBsZXRpb24gb2YgdGhlIHNlc3Npb24gc2h1dGRvd24sCisgICAgICAgIHRoZXkg
Y2FuIGltcGxlbWVudCBQbGF0Zm9ybVhSOjpEZXZpY2U6OnN1cHBvcnRzU2Vzc2lvblNodXRkb3du
Tm90aWZpY2F0aW9uKCkKKyAgICAgICAgdG8gcmV0dXJuIHRydWUuIFRoaXMgd2F5IFdlYlhSU2Vz
c2lvbiB3aWxsIHdhaXQgZm9yIHRoZSBzaHV0ZG93biBjb21wbGV0aW9uCisgICAgICAgICh2aWEg
dGhlIFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50OjpzZXNzaW9uRGlkRW5kKCkgY2FsbGJhY2sp
IGJlZm9yZSBzZW5kaW5nCisgICAgICAgIHRoZSBlbmQgWFJTZXNzaW9uRXZlbnQgYW5kIHJlc29s
dmluZyB0aGUgWFJTZXNzaW9uOjplbmQoKSBwcm9taXNlLgorCisgICAgICAgICogTW9kdWxlcy93
ZWJ4ci9XZWJYUlNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpX
ZWJYUlNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpzaHV0ZG93bik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlNlc3Npb246OmRpZENvbXBsZXRlU2h1dGRvd24pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViWFJTZXNzaW9uOjpzZXNzaW9uRGlkRW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dl
YlhSU2Vzc2lvbi5oOgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbDoK
KyAgICAgICAgKiBwbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmg6CisgICAgICAgIChQbGF0Zm9ybVhS
OjpEZXZpY2U6OnNldFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50KToKKyAgICAgICAgKFBsYXRm
b3JtWFI6OkRldmljZTo6c3VwcG9ydHNTZXNzaW9uU2h1dGRvd25Ob3RpZmljYXRpb24gY29uc3Qp
OgorICAgICAgICAqIHRlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXVsYXRlZFhSRGV2aWNlOjpzaW11bGF0ZVNodXRkb3duQ29tcGxldGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXVsYXRlZFhSRGV2aWNlOjpzaHV0RG93blRyYWNraW5nQW5kUmVuZGVy
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkZha2VYUkRldmljZTo6c2V0U3VwcG9ydHNTaHV0
ZG93bk5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJGYWtlWFJEZXZpY2U6OnNp
bXVsYXRlU2h1dGRvd24pOgorICAgICAgICAqIHRlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmg6Cisg
ICAgICAgICogdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaWRsOgorCiAyMDIxLTAxLTI1ICBQZW5n
IExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgVHdpdHRlciBQaVAgdmlkZW8g
cGF1c2VzIHdoZW4gc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dl
YlhSU2Vzc2lvbi5jcHAKaW5kZXggYjY2M2Q1MmQwNmJiMjA5YTQzNzFmN2EyMTMxMzk4ODUzYTc4
ZjVhYi4uYmFjYjQ3N2NlMGQ4NGNjN2MzNTM3M2MwMDAxMDUwMzk0NTRkNThhNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNwcApAQCAtNTgsNiArNTgs
NyBAQCBXZWJYUlNlc3Npb246OldlYlhSU2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFdlYlhS
U3lzdGVtJiBzeXN0ZW0sIFhSU2Vzc2lvbk1vZAogICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhp
cywgJldlYlhSU2Vzc2lvbjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKIHsKICAgICBtX2RldmljZS0+
aW5pdGlhbGl6ZVRyYWNraW5nQW5kUmVuZGVyaW5nKG1vZGUpOworICAgIG1fZGV2aWNlLT5zZXRU
cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudChtYWtlV2Vha1B0cigoUGxhdGZvcm1YUjo6VHJhY2tp
bmdBbmRSZW5kZXJpbmdDbGllbnQqKXRoaXMpKTsKIAogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwog
fQpAQCAtMzE3LDggKzMxOCwyMCBAQCBJbnRTaXplIFdlYlhSU2Vzc2lvbjo6cmVjb21tZW5kZWRX
ZWJHTEZyYW1lYnVmZmVyUmVzb2x1dGlvbigpIGNvbnN0CiB9CiAKIC8vIGh0dHBzOi8vaW1tZXJz
aXZlLXdlYi5naXRodWIuaW8vd2VieHIvI3NodXQtZG93bi10aGUtc2Vzc2lvbgotdm9pZCBXZWJY
UlNlc3Npb246OnNodXRkb3duKCkKK3ZvaWQgV2ViWFJTZXNzaW9uOjpzaHV0ZG93bihJbml0aWF0
ZWRCeVN5c3RlbSBpbml0aWF0ZWRCeVN5c3RlbSkKIHsKKyAgICBSZWY8V2ViWFJTZXNzaW9uPiBw
cm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIGlmIChtX2VuZGVkKSB7CisgICAgICAgIC8vIFRo
aXMgbWV0aG9kIHdhcyBjYWxsZWQgZWFybGllciB3aXRoIGluaXRpYXRlZEJ5U3lzdGVtPU5vIHdo
ZW4gdGhlCisgICAgICAgIC8vIHNlc3Npb24gdGVybWluYXRpb24gd2FzIHJlcXVlc3RlZCBtYW51
YWxseSB2aWEgWFJTZXNzaW9uLmVuZCgpLiBXaGVuCisgICAgICAgIC8vIHRoZSBzeXN0ZW0gaGFz
IGNvbXBsZXRlZCB0aGUgc2h1dGRvd24sIHRoaXMgbWV0aG9kIGlzIG5vdyBjYWxsZWQgYWdhaW4K
KyAgICAgICAgLy8gd2l0aCBpbml0aWF0ZWRCeVN5c3RlbT1ZZXMgdG8gZG8gdGhlIGZpbmFsIGNs
ZWFudXAuCisgICAgICAgIGlmIChpbml0aWF0ZWRCeVN5c3RlbSA9PSBJbml0aWF0ZWRCeVN5c3Rl
bTo6WWVzKQorICAgICAgICAgICAgZGlkQ29tcGxldGVTaHV0ZG93bigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgLy8gMS4gTGV0IHNlc3Npb24gYmUgdGhlIHRhcmdldCBYUlNlc3Np
b24gb2JqZWN0LgogICAgIC8vIDIuIFNldCBzZXNzaW9uJ3MgZW5kZWQgdmFsdWUgdG8gdHJ1ZS4K
ICAgICBtX2VuZGVkID0gdHJ1ZTsKQEAgLTMyNyw2ICszNDAsMTQgQEAgdm9pZCBXZWJYUlNlc3Np
b246OnNodXRkb3duKCkKICAgICAvLyA0LiBSZW1vdmUgc2Vzc2lvbiBmcm9tIHRoZSBsaXN0IG9m
IGlubGluZSBzZXNzaW9ucy4KICAgICBtX3hyU3lzdGVtLnNlc3Npb25FbmRlZCgqdGhpcyk7CiAK
KyAgICBpZiAoaW5pdGlhdGVkQnlTeXN0ZW0gPT0gSW5pdGlhdGVkQnlTeXN0ZW06Olllcykgewor
ICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlIHNlc3Npb24gdGVybWluYXRpb24gd2FzIHRy
aWdnZXJlZCBieSB0aGUgc3lzdGVtIHJhdGhlciB0aGFuCisgICAgICAgIC8vIHZpYSBYUlNlc3Np
b24uZW5kKCkuIFNpbmNlIHRoZSBzeXN0ZW0gaGFzIGNvbXBsZXRlZCB0aGUgc2Vzc2lvbiBzaHV0
ZG93biwgd2UgY2FuCisgICAgICAgIC8vIGltbWVkaWF0ZWx5IGRvIHRoZSBmaW5hbCBjbGVhbnVw
LgorICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICAvLyBUT0RPOiBjb21wbGV0ZSB0aGUgaW1wbGVtZW50YXRpb24KICAgICAvLyA1LiBS
ZWplY3QgYW55IG91dHN0YW5kaW5nIHByb21pc2VzIHJldHVybmVkIGJ5IHNlc3Npb24gd2l0aCBh
biBJbnZhbGlkU3RhdGVFcnJvciwgZXhjZXB0IGZvciBhbnkgcHJvbWlzZXMgcmV0dXJuZWQgYnkg
ZW5kKCkuCiAgICAgLy8gNi4gSWYgbm8gb3RoZXIgZmVhdHVyZXMgb2YgdGhlIHVzZXIgYWdlbnQg
YXJlIGFjdGl2ZWx5IHVzaW5nIHRoZW0sIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBwbGF0Zm9ybS1z
cGVjaWZpYyBzdGVwcyB0byBzaHV0IGRvd24gdGhlIGRldmljZSdzIHRyYWNraW5nIGFuZCByZW5k
ZXJpbmcgY2FwYWJpbGl0aWVzLiBUaGlzIE1VU1QgaW5jbHVkZToKQEAgLTMzNiwzMCArMzU3LDUw
IEBAIHZvaWQgV2ViWFJTZXNzaW9uOjpzaHV0ZG93bigpCiAgICAgaWYgKG1fZGV2aWNlKQogICAg
ICAgICBtX2RldmljZS0+c2h1dERvd25UcmFja2luZ0FuZFJlbmRlcmluZygpOwogCisgICAgLy8g
SWYgZGV2aWNlIHdpbGwgbm90IHJlcG9ydCBzaHV0ZG93biBjb21wbGV0aW9uIHZpYSB0aGUgVHJh
Y2tpbmdBbmRSZW5kZXJpbmdDbGllbnQsCisgICAgLy8gY29tcGxldGUgdGhlIHNodXRkb3duIGNs
ZWFudXAgaGVyZS4KKyAgICBpZiAoIW1fZGV2aWNlIHx8ICFtX2RldmljZS0+c3VwcG9ydHNTZXNz
aW9uU2h1dGRvd25Ob3RpZmljYXRpb24oKSkKKyAgICAgICAgZGlkQ29tcGxldGVTaHV0ZG93bigp
OworfQorCit2b2lkIFdlYlhSU2Vzc2lvbjo6ZGlkQ29tcGxldGVTaHV0ZG93bigpCit7CisgICAg
aWYgKG1fZGV2aWNlKQorICAgICAgICBtX2RldmljZS0+c2V0VHJhY2tpbmdBbmRSZW5kZXJpbmdD
bGllbnQobnVsbHB0cik7CisKKyAgICAvLyBSZXNvbHZlIGVuZCBwcm9taXNlIGZyb20gWFJTZXNz
aW9uOjplbmQoKQorICAgIGlmIChtX2VuZFByb21pc2UpIHsKKyAgICAgICAgbV9lbmRQcm9taXNl
LT5yZXNvbHZlKCk7CisgICAgICAgIG1fZW5kUHJvbWlzZSA9IG51bGxwdHI7CisgICAgfQorCisg
ICAgLy8gRnJvbSBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyNzaHV0LWRv
d24tdGhlLXNlc3Npb24KICAgICAvLyA3LiBRdWV1ZSBhIHRhc2sgdGhhdCBmaXJlcyBhbiBYUlNl
c3Npb25FdmVudCBuYW1lZCBlbmQgb24gc2Vzc2lvbi4KICAgICBhdXRvIGV2ZW50ID0gWFJTZXNz
aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZW5kRXZlbnQsIHsgbWFrZVJlZlB0cigqdGhp
cykgfSk7CiAgICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCp0aGlzLCBUYXNrU291cmNlOjpX
ZWJYUiwgV1RGTW92ZShldmVudCkpOwogfQogCiAvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0
aHViLmlvL3dlYnhyLyNkb20teHJzZXNzaW9uLWVuZAotdm9pZCBXZWJYUlNlc3Npb246OmVuZChF
bmRQcm9taXNlJiYgcHJvbWlzZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFdlYlhSU2Vzc2lvbjo6ZW5k
KEVuZFByb21pc2UmJiBwcm9taXNlKQogewotICAgIC8vIFRoZSBzaHV0ZG93bigpIGNhbGwgYmVs
bG93IG1pZ2h0IHJlbW92ZSB0aGUgc29sZSByZWZlcmVuY2UgdG8gc2Vzc2lvbgorICAgIC8vIFRo
ZSBzaHV0ZG93bigpIGNhbGwgYmVsb3cgbWlnaHQgcmVtb3ZlIHRoZSBzb2xlIHJlZmVyZW5jZSB0
byBzZXNzaW9uCiAgICAgLy8gdGhhdCBjb3VsZCBleGlzdCAodGhlIFhSU3lzdGVtIG93bnMgdGhl
IHNlc3Npb25zKSBzbyBsZXQncyBwcm90ZWN0IHRoaXMuCiAgICAgUmVmPFdlYlhSU2Vzc2lvbj4g
cHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBpZiAobV9lbmRlZCkKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CisKICAgICAvLyAxLiBMZXQgcHJvbWlz
ZSBiZSBhIG5ldyBQcm9taXNlLgogICAgIC8vIDIuIFNodXQgZG93biB0aGUgdGFyZ2V0IFhSU2Vz
c2lvbiBvYmplY3QuCi0gICAgaWYgKCFtX2VuZGVkKQotICAgICAgICBzaHV0ZG93bigpOworICAg
IHNodXRkb3duKEluaXRpYXRlZEJ5U3lzdGVtOjpObyk7CiAKICAgICAvLyAzLiBRdWV1ZSBhIHRh
c2sgdG8gcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICAgIHF1ZXVlVGFza0tlZXBpbmdP
YmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6V2ViWFIsIFtwcm9taXNlID0gV1RGTW92ZShw
cm9taXNlKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIC8vIDMuMSBXYWl0IHVudGlsIGFueSBwbGF0
Zm9ybS1zcGVjaWZpYyBzdGVwcyByZWxhdGVkIHRvIHNodXR0aW5nIGRvd24gdGhlIHNlc3Npb24g
aGF2ZSBjb21wbGV0ZWQuCi0gICAgICAgIC8vIDMuMiBSZXNvbHZlIHByb21pc2UuCi0gICAgICAg
IHByb21pc2UucmVzb2x2ZSgpOwotICAgIH0pOworICAgIC8vIDMuMSBXYWl0IHVudGlsIGFueSBw
bGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyByZWxhdGVkIHRvIHNodXR0aW5nIGRvd24gdGhlIHNlc3Np
b24gaGF2ZSBjb21wbGV0ZWQuCisgICAgLy8gMy4yIFJlc29sdmUgcHJvbWlzZS4KKyAgICBtX2Vu
ZFByb21pc2UgPSBXVEY6Om1ha2VVbmlxdWU8RW5kUHJvbWlzZT4oV1RGTW92ZShwcm9taXNlKSk7
CiAKICAgICAvLyA0LiBSZXR1cm4gcHJvbWlzZS4KKyAgICByZXR1cm4geyB9OwogfQogCiBjb25z
dCBjaGFyKiBXZWJYUlNlc3Npb246OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdApAQCAtMzcx
LDYgKzQxMiwxNSBAQCB2b2lkIFdlYlhSU2Vzc2lvbjo6c3RvcCgpCiB7CiB9CiAKKy8vIE1BUks6
IC0gVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQKKwordm9pZCBXZWJYUlNlc3Npb246OnNlc3Np
b25EaWRFbmQoKQoreworICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBhcyBhIHJlc3VsdCBvZiBm
aW5pc2hpbmcgdGhlIHNodXRkb3duIGluaXRpYXRlZAorICAgIC8vIGZyb20gWFJTZXNzaW9uOjpl
bmQoKSwgb3Igc2Vzc2lvbiB0ZXJtaW5hdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHN5c3RlbS4KKyAg
ICBzaHV0ZG93bihJbml0aWF0ZWRCeVN5c3RlbTo6WWVzKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VieHIvV2ViWFJTZXNzaW9uLmgKaW5kZXggZTRjMjdkYjRiOTBkOTIxZTIxNTU1YTZhMjg2
OTA2ZTk4YzYzYTBlOC4uZGVkZGUyMzEwM2FiNzNjZDhmMmRkM2VhN2NhYjQ3YWQ5OTg2NWU2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oCkBAIC01Miw3
ICs1Miw3IEBAIGNsYXNzIFdlYlhSUmVmZXJlbmNlU3BhY2U7CiBjbGFzcyBXZWJYUlN5c3RlbTsK
IHN0cnVjdCBYUlJlbmRlclN0YXRlSW5pdDsKIAotY2xhc3MgV2ViWFJTZXNzaW9uIGZpbmFsIDog
cHVibGljIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElu
bGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgV2ViWFJTZXNzaW9uIGZp
bmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0
V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBQbGF0Zm9ybVhS
OjpUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChXZWJYUlNlc3Npb24pOwogcHVibGljOgogICAgIHVzaW5nIFJlcXVlc3RSZWZlcmVuY2VTcGFj
ZVByb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPFdlYlhSUmVmZXJlbmNl
U3BhY2U+PjsKQEAgLTgyLDcgKzgyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBFdmVudFRhcmdldC4K
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7IH0KIAotICAgIHZvaWQgZW5kKEVuZFByb21pc2UmJik7CisgICAgLy8gUGxhdGZvcm1YUjo6
VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQKKyAgICB2b2lkIHNlc3Npb25EaWRFbmQoKSBmaW5h
bDsKKworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGVuZChFbmRQcm9taXNlJiYpOwogICAgIGJvb2wg
ZW5kZWQoKSBjb25zdCB7IHJldHVybiBtX2VuZGVkOyB9CiAKICAgICBYUlNlc3Npb25Nb2RlIG1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KQEAgLTk5LDcgKzEwMiw5IEBAIHByaXZhdGU6
CiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBzaHV0ZG93bigpOworICAgIGVu
dW0gY2xhc3MgSW5pdGlhdGVkQnlTeXN0ZW0geyBObywgWWVzIH07CisgICAgdm9pZCBzaHV0ZG93
bihJbml0aWF0ZWRCeVN5c3RlbSk7CisgICAgdm9pZCBkaWRDb21wbGV0ZVNodXRkb3duKCk7CiAK
ICAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0
aW9uKCk7CkBAIC0xMTEsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBYUlZpc2liaWxpdHlTdGF0
ZSBtX3Zpc2liaWxpdHlTdGF0ZTsKICAgICBSZWY8V2ViWFJJbnB1dFNvdXJjZUFycmF5PiBtX2lu
cHV0U291cmNlczsKICAgICBib29sIG1fZW5kZWQgeyBmYWxzZSB9OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxFbmRQcm9taXNlPiBtX2VuZFByb21pc2U7CiAKICAgICBXZWJYUlN5c3RlbSYgbV94clN5
c3RlbTsKICAgICBYUlNlc3Npb25Nb2RlIG1fbW9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbAppbmRleCA1YzA0OGMwZjQ2NjM4MmU2NDAzOGI5YWFj
MDY5Y2Y4MDE3MzE5MjhlLi45ODk1ZTYzNzRhYjgzYWFjYTUwZDBmNTlmMTVlZmYyNDRkNTZlM2U1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaWRsCkBA
IC00NSw3ICs0NSw3IEBACiAgICAgdW5zaWduZWQgbG9uZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
WFJGcmFtZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFjayk7CiAgICAgdW5kZWZpbmVkIGNhbmNlbEFu
aW1hdGlvbkZyYW1lKHVuc2lnbmVkIGxvbmcgaGFuZGxlKTsKIAotICAgIFByb21pc2U8dW5kZWZp
bmVkPiBlbmQoKTsKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIFByb21pc2U8dW5kZWZpbmVkPiBl
bmQoKTsKIAogICAgIC8vIEV2ZW50cwogICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25lbmQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmgKaW5kZXggNjQ1NTBmNGUwMWJm
MDA1YmVkZTE4NGMwZmVhNGRiOTMxMjY0OGI2NC4uOTI3N2UyNzQ5MDA2MTBiZGMyNjljZTdmNWU3
YjdkYzU0YWYxNGIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxh
dGZvcm1YUi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuaApA
QCAtNDQsNiArNDQsMTUgQEAgZW51bSBjbGFzcyBSZWZlcmVuY2VTcGFjZVR5cGUgewogCiAjaWYg
RU5BQkxFKFdFQlhSKQogCitjbGFzcyBUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCA6IHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudD4geworcHVibGljOgor
ICAgIHZpcnR1YWwgflRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50KCkgPSBkZWZhdWx0OworCisg
ICAgdmlydHVhbCB2b2lkIHNlc3Npb25EaWRFbmQoKSA9IDA7CisgICAgLy8gRklYTUU6IGhhbmRs
ZSBmcmFtZSB1cGRhdGUKKyAgICAvLyBGSVhNRTogaGFuZGxlIHZpc2liaWxpdHkgY2hhbmdlcwor
fTsKKwogY2xhc3MgRGV2aWNlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPERldmljZT4gewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERldmlj
ZSk7CkBAIC02MSw2ICs3MCwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZVRyYWNraW5nQW5kUmVuZGVyaW5nKFNlc3Npb25Nb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNodXREb3duVHJhY2tpbmdBbmRSZW5kZXJpbmcoKSA9IDA7CisgICAgdm9pZCBzZXRUcmFj
a2luZ0FuZFJlbmRlcmluZ0NsaWVudChXZWFrUHRyPFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50
PiYmIGNsaWVudCkgeyBtX3RyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50ID0gY2xpZW50OyB9CisK
KyAgICAvLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoYXQgbWVhbnMgdGhlIGRldmlj
ZSB3aWxsIG5vdGlmeSBUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudAorICAgIC8vIHdoZW4gdGhl
IHBsYXRmb3JtIGhhcyBjb21wbGV0ZWQgYWxsIHN0ZXBzIHRvIHNodXQgZG93biB0aGUgWFIgc2Vz
c2lvbi4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZXNzaW9uU2h1dGRvd25Ob3RpZmljYXRp
b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgRGV2aWNlKCkg
PSBkZWZhdWx0OwpAQCAtNzIsNiArODYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgRW5hYmxlZEZlYXR1
cmVzUGVyTW9kZU1hcCBtX2VuYWJsZWRGZWF0dXJlc01hcDsKIAogICAgIGJvb2wgbV9zdXBwb3J0
c09yaWVudGF0aW9uVHJhY2tpbmcgeyBmYWxzZSB9OworICAgIFdlYWtQdHI8VHJhY2tpbmdBbmRS
ZW5kZXJpbmdDbGllbnQ+IG1fdHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ7CiB9OwogCiBjbGFz
cyBJbnN0YW5jZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZha2VY
UkRldmljZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5jcHAK
aW5kZXggMmZhZGYzOTMyNTA1ZGE1NGFiZTE3ZDE5MTJlNDAxMTkyMWE0OTU3NC4uYTQ3YzFlY2E3
ZGVkY2VkYTUwNTBhZDk3YmM0N2Q4NTY1YmE1OTBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvV2ViRmFrZVhSRGV2aWNlLmNwcApAQCAtMzksNiArMzksMTggQEAgdm9pZCBGYWtlWFJWaWV3
OjpzZXRGaWVsZE9mVmlldyhGYWtlWFJWaWV3SW5pdDo6RmllbGRPZlZpZXdJbml0IGZvdikKICAg
ICBtX2ZvdiA9IGZvdjsKIH0KIAordm9pZCBTaW11bGF0ZWRYUkRldmljZTo6c2ltdWxhdGVTaHV0
ZG93bkNvbXBsZXRlZCgpCit7CisgICAgaWYgKG1fdHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQp
CisgICAgICAgIG1fdHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQtPnNlc3Npb25EaWRFbmQoKTsK
K30KKwordm9pZCBTaW11bGF0ZWRYUkRldmljZTo6c2h1dERvd25UcmFja2luZ0FuZFJlbmRlcmlu
ZygpCit7CisgICAgaWYgKG1fc3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbikKKyAgICAgICAg
c2ltdWxhdGVTaHV0ZG93bkNvbXBsZXRlZCgpOworfQorCiBXZWJGYWtlWFJEZXZpY2U6OldlYkZh
a2VYUkRldmljZSgpID0gZGVmYXVsdDsKIAogdm9pZCBXZWJGYWtlWFJEZXZpY2U6OnNldFZpZXdz
KGNvbnN0IFZlY3RvcjxGYWtlWFJWaWV3SW5pdD4mIHZpZXdzKQpAQCAtMTU2LDYgKzE2OCwxNiBA
QCBFeGNlcHRpb25PcjxSZWY8RmFrZVhSVmlldz4+IFdlYkZha2VYUkRldmljZTo6cGFyc2VWaWV3
KGNvbnN0IEZha2VYUlZpZXdJbml0JiBpbgogICAgIHJldHVybiBmYWtlVmlldzsKIH0KIAordm9p
ZCBXZWJGYWtlWFJEZXZpY2U6OnNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24oKQorewor
ICAgIG1fZGV2aWNlLnNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24odHJ1ZSk7Cit9CisK
K3ZvaWQgV2ViRmFrZVhSRGV2aWNlOjpzaW11bGF0ZVNodXRkb3duKCkKK3sKKyAgICBtX2Rldmlj
ZS5zaW11bGF0ZVNodXRkb3duQ29tcGxldGVkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJYUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZh
a2VYUkRldmljZS5oCmluZGV4IDk3YTFiOTU3MTllN2IzMmJmODQxNGJjZmEzNGQ2OTBlZDczNjc3
MGYuLjg0N2JiY2IxNzQ0ODQ0OGYwZWM3ZThjZWIxYjZmZDZlOWZhYzk1ODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaApAQCAtNjksMTQgKzY5LDE4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEZsb29yT3JpZ2luKFJlZlB0cjxXZWJYUlJpZ2lkVHJhbnNmb3JtPiYm
IG9yaWdpbikgeyBtX2Zsb29yT3JpZ2luID0gV1RGTW92ZShvcmlnaW4pOyB9CiAgICAgdm9pZCBz
ZXRFbXVsYXRlZFBvc2l0aW9uKGJvb2wgZW11bGF0ZWQpIHsgbV9lbXVsYXRlZFBvc2l0aW9uID0g
ZW11bGF0ZWQ7IH0KICAgICBWZWN0b3I8UmVmPEZha2VYUlZpZXc+PiYgdmlld3MoKSB7IHJldHVy
biBtX3ZpZXdzOyB9CisgICAgdm9pZCBzZXRTdXBwb3J0c1NodXRkb3duTm90aWZpY2F0aW9uKGJv
b2wgc3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbikgeyBtX3N1cHBvcnRzU2h1dGRvd25Ob3Rp
ZmljYXRpb24gPSBzdXBwb3J0c1NodXRkb3duTm90aWZpY2F0aW9uOyB9CisgICAgdm9pZCBzaW11
bGF0ZVNodXRkb3duQ29tcGxldGVkKCk7CiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZVRy
YWNraW5nQW5kUmVuZGVyaW5nKFBsYXRmb3JtWFI6OlNlc3Npb25Nb2RlKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIHNodXREb3duVHJhY2tpbmdBbmRSZW5kZXJpbmcoKSBmaW5hbCB7IH0KKyAgICB2b2lk
IHNodXREb3duVHJhY2tpbmdBbmRSZW5kZXJpbmcoKSBmaW5hbDsKKyAgICBib29sIHN1cHBvcnRz
U2Vzc2lvblNodXRkb3duTm90aWZpY2F0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdXBw
b3J0c1NodXRkb3duTm90aWZpY2F0aW9uOyB9CiAgICAgT3B0aW9uYWw8VmVjdG9yPEZha2VYUkJv
dW5kc1BvaW50Pj4gbV9uYXRpdmVCb3VuZHNHZW9tZXRyeTsKICAgICBSZWZQdHI8V2ViWFJSaWdp
ZFRyYW5zZm9ybT4gbV92aWV3ZXJPcmlnaW47CiAgICAgUmVmUHRyPFdlYlhSUmlnaWRUcmFuc2Zv
cm0+IG1fZmxvb3JPcmlnaW47CiAgICAgYm9vbCBtX2VtdWxhdGVkUG9zaXRpb24geyBmYWxzZSB9
OwogICAgIFZlY3RvcjxSZWY8RmFrZVhSVmlldz4+IG1fdmlld3M7CisgICAgYm9vbCBtX3N1cHBv
cnRzU2h1dGRvd25Ob3RpZmljYXRpb24geyBmYWxzZSB9OwogfTsKIAogY2xhc3MgV2ViRmFrZVhS
RGV2aWNlIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViRmFrZVhSRGV2aWNlPiB7CkBAIC0x
MDcsNiArMTExLDEwIEBAIHB1YmxpYzoKIAogICAgIFNpbXVsYXRlZFhSRGV2aWNlJiBzaW11bGF0
ZWRYUkRldmljZSgpIHsgcmV0dXJuIG1fZGV2aWNlOyB9CiAKKyAgICB2b2lkIHNldFN1cHBvcnRz
U2h1dGRvd25Ob3RpZmljYXRpb24oKTsKKworICAgIHZvaWQgc2ltdWxhdGVTaHV0ZG93bigpOwor
CiBwcml2YXRlOgogICAgIFdlYkZha2VYUkRldmljZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL1dlYkZha2VYUkRldmljZS5pZGwKaW5kZXggOTQ2MjU3MTZlZDA2YmU5ZTJkOTY0NTAwNDAy
M2FjNzYxMTllYjUzZS4uYjNmODkxZmM2Yjk1ODU1OTFhZTQzZGJkMzM0MTFlNzdiNjA2NWE0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmlkbApAQCAtNjAsNCAr
NjAsMTAgQEAKIAogICAvLyBVc2VkIHRvIGNvbm5lY3QgYW5kIHNlbmQgaW5wdXQgZXZlbnRzCiAg
IFdlYkZha2VYUklucHV0Q29udHJvbGxlciBzaW11bGF0ZUlucHV0U291cmNlQ29ubmVjdGlvbihG
YWtlWFJJbnB1dFNvdXJjZUluaXQgaW5wdXRTb3VyY2UpOworCisgIC8vIFNldCB1cCB0aGUgZGV2
aWNlIHNvIGl0J2xsIG5vdGlmeSBzZXNzaW9uIHdoZW4gdGhlIHN5c3RlbSBoYXMgY29tcGxldGVk
IGFsbCBzdGVwcyBmb3Igc2Vzc2lvbiBzaHV0ZG93bgorICB1bmRlZmluZWQgc2V0U3VwcG9ydHNT
aHV0ZG93bk5vdGlmaWNhdGlvbigpOworCisgIC8vIFNpbXVsYXRlIHNlc3Npb24gc2h1dGRvd24g
dHJpZ2dlcmVkIGJ5IHN5c3RlbQorICB1bmRlZmluZWQgc2ltdWxhdGVTaHV0ZG93bigpOwogfTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlNmZhZDBkNjllOWJmZWU4YTdjZWM3Njc1ZWZjNmQ2YWJmZjFiZDNlLi40ZWIzZDdm
MjdkMTM0NDhlMWI5ZWRhYTc0OTA1NGFlY2IxNTYwZmFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMjEtMDEtMjYgIEFkYSBDaGFuICA8YWRhLmNoYW5AYXBwbGUuY29tPgorCisgICAgICAgIFNl
bmQgdGhlIGVuZCBYUlNlc3Npb25FdmVudCBhZnRlciB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgc3Rl
cHMgZm9yIHNlc3Npb24gc2h1dGRvd24gaGF2ZSBjb21wbGV0ZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDgzNQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3Rh
dGlvbnM6CisgICAgICAgICogaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX2NoZWNrLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl9tYXRo
X3V0aWxzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2Vi
eHJfdGVzdF9hc3NlcnRzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci9yZXNv
dXJjZXMvd2VieHJfdGVzdF9jb25zdGFudHNfZmFrZV93b3JsZC5qczogQWRkZWQuCisgICAgICAg
ICogaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3Rlc3RfY29uc3RhbnRzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdXRpbC5qczogQWRk
ZWQuCisgICAgICAgICogaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2VfcmVwb3J0
c19zaHV0ZG93bi5odHRwcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci94
clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLWV4cGVjdGVkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0
ZW0uaHR0cHMuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC93cHQvd2VieHIveHJTZXNzaW9u
X2VuZGVkX2J5X3N5c3RlbS5odHRwcy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3dwdC93ZWJ4ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxlX2VuZC5odHRwcy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxl
X2VuZC5odHRwcy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKwogMjAyMS0wMS0yNSAgSm9uYXRoYW4g
QmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3J1bi13ZWJraXQtdGVzdHNd
IFN1cHBvcnQgcHl0aG9uIGxheW91dCB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX2NoZWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfY2hlY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDhlNWIz
ODdkYzg4NTg4OTIxY2NmYTQ5ZGQxNGRiNTgwMDk5MDBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX2NoZWNrLmh0bWwKQEAgLTAs
MCArMSwxNyBAQAorPHNjcmlwdCBzcmM9d2VieHJfdXRpbC5qcz48L3NjcmlwdD4KKzxzY3JpcHQ+
CisndXNlIHN0cmljdCc7CitsZXQgZGVmaW5lZE9iamVjdHMgPSBbXTsKK2xldCB1bmRlZmluZWRP
YmplY3RzID0gW107CisKK2ZvckVhY2hXZWJ4ck9iamVjdCgob2JqLCBuYW1lKSA9PiB7CisgICAg
aWYob2JqID09IHVuZGVmaW5lZCkgeworICAgICAgICB1bmRlZmluZWRPYmplY3RzLnB1c2gobmFt
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVmaW5lZE9iamVjdHMucHVzaChuYW1lKTsKKyAg
ICB9Cit9KTsKKword2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7IHVuZGVmaW5lZE9iamVjdHMs
IGRlZmluZWRPYmplY3RzfSwgJyonKTsKKworPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2Vz
L3dlYnhyX21hdGhfdXRpbHMuanMgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJj
ZXMvd2VieHJfbWF0aF91dGlscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjU1ZmI3Mjk3ODY5MDQyN2FhYzM4
Yjg0ZDFlYWMyNGU4MzhkMGViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC93
cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX21hdGhfdXRpbHMuanMKQEAgLTAsMCArMSw2MSBAQAor
Ly8gfG1hdHJpeHwgLSBGbG9hdDMyQXJyYXksIHxpbnB1dHwgLSBwb2ludC1saWtlIGRpY3QgKG11
c3QgaGF2ZSB4LCB5LCB6LCB3KQorbGV0IHRyYW5zZm9ybV9wb2ludF9ieV9tYXRyaXggPSBmdW5j
dGlvbihtYXRyaXgsIGlucHV0KSB7CisgIHJldHVybiB7CisgICAgeCA6IG1hdHJpeFswXSAqIGlu
cHV0LnggKyBtYXRyaXhbNF0gKiBpbnB1dC55ICsgbWF0cml4WzhdICogaW5wdXQueiArIG1hdHJp
eFsxMl0gKiBpbnB1dC53LAorICAgIHkgOiBtYXRyaXhbMV0gKiBpbnB1dC54ICsgbWF0cml4WzVd
ICogaW5wdXQueSArIG1hdHJpeFs5XSAqIGlucHV0LnogKyBtYXRyaXhbMTNdICogaW5wdXQudywK
KyAgICB6IDogbWF0cml4WzJdICogaW5wdXQueCArIG1hdHJpeFs2XSAqIGlucHV0LnkgKyBtYXRy
aXhbMTBdICogaW5wdXQueiArIG1hdHJpeFsxNF0gKiBpbnB1dC53LAorICAgIHcgOiBtYXRyaXhb
M10gKiBpbnB1dC54ICsgbWF0cml4WzddICogaW5wdXQueSArIG1hdHJpeFsxMV0gKiBpbnB1dC56
ICsgbWF0cml4WzE1XSAqIGlucHV0LncsCisgIH07Cit9CisKKy8vIENyZWF0ZXMgYSB1bml0LWxl
bmd0aCBxdWF0ZXJuaW9uLgorLy8gfGlucHV0fCAtIHBvaW50LWxpa2UgZGljdCAobXVzdCBoYXZl
IHgsIHksIHosIHcpCitsZXQgbm9ybWFsaXplX3F1YXRlcm5pb24gPSBmdW5jdGlvbihpbnB1dCkg
eworICBjb25zdCBsZW5ndGhfc3F1YXJlZCA9IGlucHV0LnggKiBpbnB1dC54ICsgaW5wdXQueSAq
IGlucHV0LnkgKyBpbnB1dC56ICogaW5wdXQueiArIGlucHV0LncgKiBpbnB1dC53OworICBjb25z
dCBsZW5ndGggPSBNYXRoLnNxcnQobGVuZ3RoX3NxdWFyZWQpOworCisgIHJldHVybiB7eCA6IGlu
cHV0LnggLyBsZW5ndGgsIHkgOiBpbnB1dC55IC8gbGVuZ3RoLCB6IDogaW5wdXQueiAvIGxlbmd0
aCwgdyA6IGlucHV0LncgLyBsZW5ndGh9OworfQorCisvLyB8aW5wdXR8IC0gcG9pbnQtbGlrZSBk
aWN0IChtdXN0IGhhdmUgeCwgeSwgeiwgdykKK2xldCBjb25qdWdhdGVfcXVhdGVybmlvbiA9IGZ1
bmN0aW9uKGlucHV0KSB7CisgIHJldHVybiB7eCA6IC1pbnB1dC54LCB5IDogLWlucHV0LnksIHog
OiAtaW5wdXQueiwgdyA6IGlucHV0Lnd9OworfQorCitsZXQgbXVsdGlwbHlfcXVhdGVybmlvbnMg
PSBmdW5jdGlvbihxMSwgcTIpIHsKKyAgcmV0dXJuIHsKKyAgICB3IDogcTEudyAqIHEyLncgLSBx
MS54ICogcTIueCAtIHExLnkgKiBxMi55IC0gcTEueiAqIHEyLnosCisgICAgeCA6IHExLncgKiBx
Mi54ICsgcTEueCAqIHEyLncgKyBxMS55ICogcTIueiAtIHExLnogKiBxMi55LAorICAgIHkgOiBx
MS53ICogcTIueSAtIHExLnggKiBxMi56ICsgcTEueSAqIHEyLncgKyBxMS56ICogcTIueCwKKyAg
ICB6IDogcTEudyAqIHEyLnogKyBxMS54ICogcTIueSAtIHExLnkgKiBxMi54ICsgcTEueiAqIHEy
LncsCisgIH0KK30KKworLy8gfHBvaW50fCAtIHBvaW50LWxpa2UgZGljdCAobXVzdCBoYXZlIHgs
IHksIHosIHcpCitsZXQgbm9ybWFsaXplX3BlcnNwZWN0aXZlID0gZnVuY3Rpb24ocG9pbnQpIHsK
KyAgaWYocG9pbnQudyA9PSAwIHx8IHBvaW50LncgPT0gMSkgcmV0dXJuIHBvaW50OworCisgIHJl
dHVybiB7CisgICAgeCA6IHBvaW50LnggLyBwb2ludC53LAorICAgIHkgOiBwb2ludC55IC8gcG9p
bnQudywKKyAgICB6IDogcG9pbnQueiAvIHBvaW50LncsCisgICAgdyA6IDEKKyAgfTsKK30KKwor
Ly8gfHF1YXRlcm5pb258IC0gcG9pbnQtbGlrZSBkaWN0IChtdXN0IGhhdmUgeCwgeSwgeiwgdyks
CisvLyB8aW5wdXR8IC0gcG9pbnQtbGlrZSBkaWN0IChtdXN0IGhhdmUgeCwgeSwgeiwgdykKK2xl
dCB0cmFuc2Zvcm1fcG9pbnRfYnlfcXVhdGVybmlvbiA9IGZ1bmN0aW9uKHF1YXRlcm5pb24sIGlu
cHV0KSB7CisgIGNvbnN0IHFfbm9ybWFsaXplZCA9IG5vcm1hbGl6ZV9xdWF0ZXJuaW9uKHF1YXRl
cm5pb24pOworICBjb25zdCBxX2NvbmogPSBjb25qdWdhdGVfcXVhdGVybmlvbihxX25vcm1hbGl6
ZWQpOworICBjb25zdCBwX2luID0gbm9ybWFsaXplX3BlcnNwZWN0aXZlKGlucHV0KTsKKworICAv
LyBjb25zdHJ1Y3QgYSBxdWF0ZXJuaW9uIG91dCBvZiB0aGUgcG9pbnQgKHRha2UgeHl6ICYgemVy
byB0aGUgcmVhbCBwYXJ0KS4KKyAgY29uc3QgcCA9IHt4IDogcF9pbi54LCB5IDogcF9pbi55LCB6
IDogcF9pbi56LCB3IDogMH07CisKKyAgLy8gdHJhbnNmb3JtIHRoZSBpbnB1dCBwb2ludAorICBj
b25zdCBwX211bCA9IG11bHRpcGx5X3F1YXRlcm5pb25zKCBxX25vcm1hbGl6ZWQsIG11bHRpcGx5
X3F1YXRlcm5pb25zKHAsIHFfY29uaikgKTsKKworICAvLyBhZGQgYmFjayB0aGUgdyBjb21wb25l
bnQgb2YgdGhlIGlucHV0CisgIHJldHVybiB7IHggOiBwX211bC54LCB5IDogcF9tdWwueSwgeiA6
IHBfbXVsLnosIHcgOiBwX2luLncgfTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
d3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2Fzc2VydHMuanMgYi9MYXlvdXRUZXN0cy9o
dHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdGVzdF9hc3NlcnRzLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM4ZjEzNjRjZTAzY2U5Njg5MGNkYTk3ZGNjMjI2YjhlNDcyZGQzMzIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdGVzdF9hc3Nl
cnRzLmpzCkBAIC0wLDAgKzEsMTU5IEBACisvLyBVdGlsaXR5IGFzc2VydCBmdW5jdGlvbnMuCisv
LyBSZWxpZXMgb24gcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIHRvIGJlIGluY2x1ZGVkIGJlZm9y
ZSB0aGlzIGZpbGUuCisvLyBSZWxpZXMgb24gd2VieHJfdGVzdF9jb25zdGFudHMuanMgdG8gYmUg
aW5jbHVkZWQgYmVmb3JlIHRoaXMgZmlsZS4KKworLy8gfHAxfCwgfHAyfCAtIG9iamVjdHMgd2l0
aCB4LCB5LCB6LCB3IGNvbXBvbmVudHMgdGhhdCBhcmUgZmxvYXRpbmcgcG9pbnQgbnVtYmVycwor
Ly8gfGVwc2lsb258IC0gZmxvYXQgc3BlY2lmeWluZyBwcmVjaXNpb24KKy8vIHxwcmVmaXh8IC0g
c3RyaW5nIHVzZWQgYXMgYSBwcmVmaXggZm9yIGxvZ2dpbmcKK2NvbnN0IGFzc2VydF9wb2ludF9h
cHByb3hfZXF1YWxzID0gZnVuY3Rpb24ocDEsIHAyLCBlcHNpbG9uID0gRkxPQVRfRVBTSUxPTiwg
cHJlZml4ID0gIiIpIHsKKyAgaWYgKHAxID09IG51bGwgJiYgcDIgPT0gbnVsbCkgeworICAgIHJl
dHVybjsKKyAgfQorCisgIGFzc2VydF9ub3RfZXF1YWxzKHAxLCBudWxsLCBwcmVmaXggKyAicDEg
bXVzdCBiZSBub24tbnVsbCIpOworICBhc3NlcnRfbm90X2VxdWFscyhwMiwgbnVsbCwgcHJlZml4
ICsgInAyIG11c3QgYmUgbm9uLW51bGwiKTsKKworICBsZXQgbWlzbWF0Y2hlZF9jb21wb25lbnQg
PSBudWxsOworICBmb3IgKGNvbnN0IHYgb2YgWyd4JywgJ3knLCAneicsICd3J10pIHsKKyAgICBp
ZiAoTWF0aC5hYnMocDFbdl0gLSBwMlt2XSkgPiBlcHNpbG9uKSB7CisgICAgICBtaXNtYXRjaGVk
X2NvbXBvbmVudCA9IHY7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZiAobWlzbWF0
Y2hlZF9jb21wb25lbnQgIT09IG51bGwpIHsKKyAgICBsZXQgZXJyb3JfbWVzc2FnZSA9IHByZWZp
eCArICcgUG9pbnQgY29tcGFyaXNvbiBmYWlsZWQuXG4nOworICAgIGVycm9yX21lc3NhZ2UgKz0g
YCBwMToge3g6ICR7cDEueH0sIHk6ICR7cDEueX0sIHo6ICR7cDEuen0sIHc6ICR7cDEud319XG5g
OworICAgIGVycm9yX21lc3NhZ2UgKz0gYCBwMjoge3g6ICR7cDIueH0sIHk6ICR7cDIueX0sIHo6
ICR7cDIuen0sIHc6ICR7cDIud319XG5gOworICAgIGVycm9yX21lc3NhZ2UgKz0gYCBEaWZmZXJl
bmNlIGluIGNvbXBvbmVudCAke21pc21hdGNoZWRfY29tcG9uZW50fSBleGNlZWRlZCB0aGUgZ2l2
ZW4gZXBzaWxvbi5cbmA7CisgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMocDJbbWlzbWF0Y2hlZF9j
b21wb25lbnRdLCBwMVttaXNtYXRjaGVkX2NvbXBvbmVudF0sIGVwc2lsb24sIGVycm9yX21lc3Nh
Z2UpOworICB9Cit9OworCisvLyB8cDF8LCB8cDJ8IC0gb2JqZWN0cyB3aXRoIHgsIHksIHosIHcg
Y29tcG9uZW50cyB0aGF0IGFyZSBmbG9hdGluZyBwb2ludCBudW1iZXJzCisvLyB8ZXBzaWxvbnwg
LSBmbG9hdCBzcGVjaWZ5aW5nIHByZWNpc2lvbgorLy8gfHByZWZpeHwgLSBzdHJpbmcgdXNlZCBh
cyBhIHByZWZpeCBmb3IgbG9nZ2luZworY29uc3QgYXNzZXJ0X3BvaW50X3NpZ25pZmljYW50bHlf
bm90X2VxdWFscyA9IGZ1bmN0aW9uKHAxLCBwMiwgZXBzaWxvbiA9IEZMT0FUX0VQU0lMT04sIHBy
ZWZpeCA9ICIiKSB7CisKKyAgYXNzZXJ0X25vdF9lcXVhbHMocDEsIG51bGwsIHByZWZpeCArICJw
MSBtdXN0IGJlIG5vbi1udWxsIik7CisgIGFzc2VydF9ub3RfZXF1YWxzKHAyLCBudWxsLCBwcmVm
aXggKyAicDIgbXVzdCBiZSBub24tbnVsbCIpOworCisgIGxldCBtaXNtYXRjaGVkX2NvbXBvbmVu
dCA9IG51bGw7CisgIGZvciAoY29uc3QgdiBvZiBbJ3gnLCAneScsICd6JywgJ3cnXSkgeworICAg
IGlmIChNYXRoLmFicyhwMVt2XSAtIHAyW3ZdKSA+IGVwc2lsb24pIHsKKyAgICAgIG1pc21hdGNo
ZWRfY29tcG9uZW50ID0gdjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChtaXNt
YXRjaGVkX2NvbXBvbmVudCA9PT0gbnVsbCkgeworICAgIGxldCBlcnJvcl9tZXNzYWdlID0gcHJl
Zml4ICsgJyBQb2ludCBjb21wYXJpc29uIGZhaWxlZC5cbic7CisgICAgZXJyb3JfbWVzc2FnZSAr
PSBgIHAxOiB7eDogJHtwMS54fSwgeTogJHtwMS55fSwgejogJHtwMS56fSwgdzogJHtwMS53fX1c
bmA7CisgICAgZXJyb3JfbWVzc2FnZSArPSBgIHAyOiB7eDogJHtwMi54fSwgeTogJHtwMi55fSwg
ejogJHtwMi56fSwgdzogJHtwMi53fX1cbmA7CisgICAgZXJyb3JfbWVzc2FnZSArPSBgIERpZmZl
cmVuY2UgaW4gY29tcG9uZW50cyBkaWQgbm90IGV4Y2VlZGVkIHRoZSBnaXZlbiBlcHNpbG9uLlxu
YDsKKyAgICBhc3NlcnRfdW5yZWFjaGVkKGVycm9yX21lc3NhZ2UpOworICB9Cit9OworCisvLyB8
dDF8LCB8dDJ8IC0gb2JqZWN0cyBjb250YWluaW5nIHBvc2l0aW9uIGFuZCBvcmllbnRhdGlvbi4K
Ky8vIHxlcHNpbG9ufCAtIGZsb2F0IHNwZWNpZnlpbmcgcHJlY2lzaW9uCisvLyB8cHJlZml4fCAt
IHN0cmluZyB1c2VkIGFzIGEgcHJlZml4IGZvciBsb2dnaW5nCitjb25zdCBhc3NlcnRfdHJhbnNm
b3JtX2FwcHJveF9lcXVhbHMgPSBmdW5jdGlvbih0MSwgdDIsIGVwc2lsb24gPSBGTE9BVF9FUFNJ
TE9OLCBwcmVmaXggPSAiIikgeworICBpZiAodDEgPT0gbnVsbCAmJiB0MiA9PSBudWxsKSB7Cisg
ICAgcmV0dXJuOworICB9CisKKyAgYXNzZXJ0X25vdF9lcXVhbHModDEsIG51bGwsIHByZWZpeCAr
ICJ0MSBtdXN0IGJlIG5vbi1udWxsIik7CisgIGFzc2VydF9ub3RfZXF1YWxzKHQyLCBudWxsLCBw
cmVmaXggKyAidDIgbXVzdCBiZSBub24tbnVsbCIpOworCisgIGFzc2VydF9wb2ludF9hcHByb3hf
ZXF1YWxzKHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbiwgZXBzaWxvbiwgcHJlZml4ICsgInBvc2l0
aW9ucyBtdXN0IGJlIGVxdWFsIik7CisgIGFzc2VydF9wb2ludF9hcHByb3hfZXF1YWxzKHQxLm9y
aWVudGF0aW9uLCB0Mi5vcmllbnRhdGlvbiwgZXBzaWxvbiwgcHJlZml4ICsgIm9yaWVudGF0aW9u
cyBtdXN0IGJlIGVxdWFsIik7Cit9OworCisvLyB8bTF8LCB8bTJ8IC0gYXJyYXlzIG9mIGZsb2F0
aW5nIHBvaW50IG51bWJlcnMKKy8vIHxlcHNpbG9ufCAtIGZsb2F0IHNwZWNpZnlpbmcgcHJlY2lz
aW9uCisvLyB8cHJlZml4fCAtIHN0cmluZyB1c2VkIGFzIGEgcHJlZml4IGZvciBsb2dnaW5nCitj
b25zdCBhc3NlcnRfbWF0cml4X2FwcHJveF9lcXVhbHMgPSBmdW5jdGlvbihtMSwgbTIsIGVwc2ls
b24gPSBGTE9BVF9FUFNJTE9OLCBwcmVmaXggPSAiIikgeworICBpZiAobTEgPT0gbnVsbCAmJiBt
MiA9PSBudWxsKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgYXNzZXJ0X25vdF9lcXVhbHMobTEs
IG51bGwsIHByZWZpeCArICJtMSBtdXN0IGJlIG5vbi1udWxsIik7CisgIGFzc2VydF9ub3RfZXF1
YWxzKG0yLCBudWxsLCBwcmVmaXggKyAibTIgbXVzdCBiZSBub24tbnVsbCIpOworCisgIGFzc2Vy
dF9lcXVhbHMobTEubGVuZ3RoLCAxNiwgcHJlZml4ICsgIm0xIG11c3QgaGF2ZSBsZW5ndGggb2Yg
MTYiKTsKKyAgYXNzZXJ0X2VxdWFscyhtMi5sZW5ndGgsIDE2LCBwcmVmaXggKyAibTIgbXVzdCBo
YXZlIGxlbmd0aCBvZiAxNiIpOworCisgIGxldCBtaXNtYXRjaGVkX2VsZW1lbnQgPSAtMTsKKyAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7CisgICAgaWYgKE1hdGguYWJzKG0xW2ldIC0g
bTJbaV0pID4gZXBzaWxvbikgeworICAgICAgbWlzbWF0Y2hlZF9lbGVtZW50ID0gaTsKKyAgICAg
IGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChtaXNtYXRjaGVkX2VsZW1lbnQgPiAtMSkgewor
ICAgIGxldCBlcnJvcl9tZXNzYWdlID0gcHJlZml4ICsgJ01hdHJpeCBjb21wYXJpc29uIGZhaWxl
ZC5cbic7CisgICAgZXJyb3JfbWVzc2FnZSArPSAnIERpZmZlcmVuY2UgaW4gZWxlbWVudCAnICsg
bWlzbWF0Y2hlZF9lbGVtZW50ICsKKyAgICAgICAgJyBleGNlZWRlZCB0aGUgZ2l2ZW4gZXBzaWxv
bi5cbic7CisKKyAgICBlcnJvcl9tZXNzYWdlICs9ICcgTWF0cml4IDE6IFsnICsgbTEuam9pbign
LCcpICsgJ11cbic7CisgICAgZXJyb3JfbWVzc2FnZSArPSAnIE1hdHJpeCAyOiBbJyArIG0yLmpv
aW4oJywnKSArICddXG4nOworCisgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMoCisgICAgICAgIG0x
W21pc21hdGNoZWRfZWxlbWVudF0sIG0yW21pc21hdGNoZWRfZWxlbWVudF0sIGVwc2lsb24sCisg
ICAgICAgIGVycm9yX21lc3NhZ2UpOworICB9Cit9OworCisvLyB8bTF8LCB8bTJ8IC0gYXJyYXlz
IG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMKKy8vIHxlcHNpbG9ufCAtIGZsb2F0IHNwZWNpZnlp
bmcgcHJlY2lzaW9uCisvLyB8cHJlZml4fCAtIHN0cmluZyB1c2VkIGFzIGEgcHJlZml4IGZvciBs
b2dnaW5nCitjb25zdCBhc3NlcnRfbWF0cml4X3NpZ25pZmljYW50bHlfbm90X2VxdWFscyA9IGZ1
bmN0aW9uKG0xLCBtMiwgZXBzaWxvbiA9IEZMT0FUX0VQU0lMT04sIHByZWZpeCA9ICIiKSB7Cisg
IGlmIChtMSA9PSBudWxsICYmIG0yID09IG51bGwpIHsKKyAgICByZXR1cm47CisgIH0KKworICBh
c3NlcnRfbm90X2VxdWFscyhtMSwgbnVsbCwgcHJlZml4ICsgIm0xIG11c3QgYmUgbm9uLW51bGwi
KTsKKyAgYXNzZXJ0X25vdF9lcXVhbHMobTIsIG51bGwsIHByZWZpeCArICJtMiBtdXN0IGJlIG5v
bi1udWxsIik7CisKKyAgYXNzZXJ0X2VxdWFscyhtMS5sZW5ndGgsIDE2LCBwcmVmaXggKyAibTEg
bXVzdCBoYXZlIGxlbmd0aCBvZiAxNiIpOworICBhc3NlcnRfZXF1YWxzKG0yLmxlbmd0aCwgMTYs
IHByZWZpeCArICJtMiBtdXN0IGhhdmUgbGVuZ3RoIG9mIDE2Iik7CisKKyAgbGV0IG1pc21hdGNo
ID0gZmFsc2U7CisgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkgeworICAgIGlmIChNYXRo
LmFicyhtMVtpXSAtIG0yW2ldKSA+IGVwc2lsb24pIHsKKyAgICAgIG1pc21hdGNoID0gdHJ1ZTsK
KyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmICghbWlzbWF0Y2gpIHsKKyAgICBsZXQg
bTFfc3RyID0gJ1snOworICAgIGxldCBtMl9zdHIgPSAnWyc7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxNjsgKytpKSB7CisgICAgICBtMV9zdHIgKz0gbTFbaV0gKyAoaSA8IDE1ID8gJywgJyA6
ICcnKTsKKyAgICAgIG0yX3N0ciArPSBtMltpXSArIChpIDwgMTUgPyAnLCAnIDogJycpOworICAg
IH0KKyAgICBtMV9zdHIgKz0gJ10nOworICAgIG0yX3N0ciArPSAnXSc7CisKKyAgICBsZXQgZXJy
b3JfbWVzc2FnZSA9IHByZWZpeCArICdNYXRyaXggY29tcGFyaXNvbiBmYWlsZWQuXG4nOworICAg
IGVycm9yX21lc3NhZ2UgKz0KKyAgICAgICAgJyBObyBlbGVtZW50IGV4Y2VlZGVkIHRoZSBnaXZl
biBlcHNpbG9uICcgKyBlcHNpbG9uICsgJy5cbic7CisKKyAgICBlcnJvcl9tZXNzYWdlICs9ICcg
TWF0cml4IEE6ICcgKyBtMV9zdHIgKyAnXG4nOworICAgIGVycm9yX21lc3NhZ2UgKz0gJyBNYXRy
aXggQjogJyArIG0yX3N0ciArICdcbic7CisKKyAgICBhc3NlcnRfdW5yZWFjaGVkKGVycm9yX21l
c3NhZ2UpOworICB9Cit9OworCisvLyB8cjF8LCB8cjJ8IC0gWFJSYXkgb2JqZWN0cworLy8gfGVw
c2lsb258IC0gZmxvYXQgc3BlY2lmeWluZyBwcmVjaXNpb24KKy8vIHxwcmVmaXh8IC0gc3RyaW5n
IHVzZWQgYXMgYSBwcmVmaXggZm9yIGxvZ2dpbmcKK2NvbnN0IGFzc2VydF9yYXlfYXBwcm94X2Vx
dWFscyA9IGZ1bmN0aW9uKHIxLCByMiwgZXBzaWxvbiA9IEZMT0FUX0VQU0lMT04sIHByZWZpeCA9
ICIiKSB7CisgIGFzc2VydF9wb2ludF9hcHByb3hfZXF1YWxzKHIxLm9yaWdpbiwgcjIub3JpZ2lu
LCBlcHNpbG9uLCBwcmVmaXggKyAib3JpZ2luOiIpOworICBhc3NlcnRfcG9pbnRfYXBwcm94X2Vx
dWFscyhyMS5kaXJlY3Rpb24sIHIyLmRpcmVjdGlvbiwgZXBzaWxvbiwgcHJlZml4ICsgImRpcmVj
dGlvbjoiKTsKKyAgYXNzZXJ0X21hdHJpeF9hcHByb3hfZXF1YWxzKHIxLm1hdHJpeCwgcjIubWF0
cml4LCBlcHNpbG9uLCBwcmVmaXggKyAibWF0cml4OiIpOworfTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50cy5qcyBi
L0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50
cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xMzlhYjc3NTY4NGM0MjdlMzliYzUwNzE5MjI2Yzk2ZmNiZDNhNWQ1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2Vz
L3dlYnhyX3Rlc3RfY29uc3RhbnRzLmpzCkBAIC0wLDAgKzEsMTczIEBACisvLyBhc3NlcnRfZXF1
YWxzIGNhbiBmYWlsIHdoZW4gY29tcGFyaW5nIGZsb2F0cyBkdWUgdG8gcHJlY2lzaW9uIGVycm9y
cywgc28KKy8vIHVzZSBhc3NlcnRfYXBwcm94X2VxdWFscyB3aXRoIHRoaXMgY29uc3RhbnQgaW5z
dGVhZAorY29uc3QgRkxPQVRfRVBTSUxPTiA9IDAuMDAxOworCisvLyBJZGVudGl0eSBtYXRyaXgK
K2NvbnN0IElERU5USVRZX01BVFJJWCA9IFsxLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxXTsKKworY29uc3QgSURFTlRJVFlf
VFJBTlNGT1JNID0geworICAgIHBvc2l0aW9uOiBbMCwgMCwgMF0sCisgICAgb3JpZW50YXRpb246
IFswLCAwLCAwLCAxXSwKK307CisKKy8vIEEgdmFsaWQgcG9zZSBtYXRyaXgvdHJhbnNmb3JtIGZv
ciAgd2hlbiB3ZSBkb24ndCBjYXJlIGFib3V0IHNwZWNpZmljIHZhbHVlcworLy8gTm90ZSB0aGF0
IHRoZXNlIHR3byBzaG91bGQgYmUgaWRlbnRpY2FsLCBqdXN0IGRpZmZlcmVudCByZXByZXNlbnRh
dGlvbnMKK2NvbnN0IFZBTElEX1BPU0VfTUFUUklYID0gWzAsIDEsIDAsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
MSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsIDFdOworCitj
b25zdCBWQUxJRF9QT1NFX1RSQU5TRk9STSA9IHsKKyAgICBwb3NpdGlvbjogWzEsIDEsIDFdLAor
ICAgIG9yaWVudGF0aW9uOiBbMC41LCAwLjUsIDAuNSwgMC41XQorfTsKKworY29uc3QgVkFMSURf
UFJPSkVDVElPTl9NQVRSSVggPQorICAgIFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAzLCAyLCAt
MSwgLTEsIDAsIDAsIC0wLjIsIDBdOworCisvLyBUaGlzIGlzIGEgZGVjb21wb3NlZCB2ZXJzaW9u
IG9mIHRoZSBhYm92ZS4KK2NvbnN0IFZBTElEX0ZJRUxEX09GX1ZJRVcgPSB7CisgICAgdXBEZWdy
ZWVzOiA3MS41NjUsCisgICAgZG93bkRlZ3JlZXM6IC00NSwKKyAgICBsZWZ0RGVncmVlczotNjMu
NDM0OSwKKyAgICByaWdodERlZ3JlZXM6IDc1Ljk2MzcKK307CisKKy8vIEEgdmFsaWQgaW5wdXQg
Z3JpcCBtYXRyaXggZm9yICB3aGVuIHdlIGRvbid0IGNhcmUgYWJvdXQgc3BlY2lmaWMgdmFsdWVz
Citjb25zdCBWQUxJRF9HUklQID0gWzEsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgIDAs
IDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAg
ICAgICAgIDQsIDMsIDIsIDFdOworCitjb25zdCBWQUxJRF9HUklQX1RSQU5TRk9STSA9IHsKKyAg
ICBwb3NpdGlvbjogWzQsIDMsIDJdLAorICAgIG9yaWVudGF0aW9uOiBbMCwgMCwgMCwgMV0KK307
CisKKy8vIEEgdmFsaWQgaW5wdXQgcG9pbnRlciBvZmZzZXQgZm9yICB3aGVuIHdlIGRvbid0IGNh
cmUgYWJvdXQgc3BlY2lmaWMgdmFsdWVzCitjb25zdCBWQUxJRF9QT0lOVEVSID0gWzEsIDAsIDAs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDFdOwor
Citjb25zdCBWQUxJRF9QT0lOVEVSX1RSQU5TRk9STSA9IHsKKyAgICBwb3NpdGlvbjogWzAsIDAs
IDFdLAorICAgIG9yaWVudGF0aW9uOiBbMCwgMCwgMCwgMV0KK307CisKKy8vIEEgVmFsaWQgTG9j
YWwgdG8gZmxvb3IgbWF0cml4L3RyYW5zZm9ybSBmb3Igd2hlbiB3ZSBkb24ndCBjYXJlIGFib3V0
IHNwZWNpZmljCisvLyB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGlkZW50aWNh
bCwganVzdCBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zLgorY29uc3QgVkFMSURfRkxPT1JfT1JJ
R0lOX01BVFJJWCA9IFsxLCAwLCAgICAwLCAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCAxLCAgICAwLCAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAgICAxLCAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxLCAxLjY1LCAtMSwgMV07CisKK2NvbnN0IFZBTElEX0ZMT09SX09SSUdJTiA9IHsKKyAg
ICBwb3NpdGlvbjogWy0xLjAsIC0xLjY1LCAxLjBdLAorICAgIG9yaWVudGF0aW9uOiBbMCwgMCwg
MCwgMV0KK307CisKK2NvbnN0IFZBTElEX0JPVU5EUyA9IFsKKyAgICB7IHg6IDMuMCwgejogLTIu
MCB9LAorICAgIHsgeDogMy41LCB6OiAwLjAgfSwKKyAgICB7IHg6IDMuMCwgejogMi4wIH0sCisg
ICAgeyB4OiAtMy4wLCB6OiAyLjAgfSwKKyAgICB7IHg6IC0zLjUsIHo6IDAuMCB9LAorICAgIHsg
eDogLTMuMCwgejogLTIuMCB9CitdOworCitjb25zdCBWQUxJRF9SRVNPTFVUSU9OID0geworICAg
IHdpZHRoOiAyMDAsCisgICAgaGVpZ2h0OiAyMDAKK307CisKK2NvbnN0IExFRlRfT0ZGU0VUID0g
eworICAgIHBvc2l0aW9uOiBbLTAuMSwgMCwgMF0sCisgICAgb3JpZW50YXRpb246IFswLCAwLCAw
LCAxXQorfTsKKworY29uc3QgUklHSFRfT0ZGU0VUID0geworICAgIHBvc2l0aW9uOiBbMC4xLCAw
LCAwXSwKKyAgICBvcmllbnRhdGlvbjogWzAsIDAsIDAsIDFdCit9OworCitjb25zdCBWQUxJRF9W
SUVXUyA9IFt7CisgICAgICAgIGV5ZToibGVmdCIsCisgICAgICAgIHByb2plY3Rpb25NYXRyaXg6
IFZBTElEX1BST0pFQ1RJT05fTUFUUklYLAorICAgICAgICB2aWV3T2Zmc2V0OiBMRUZUX09GRlNF
VCwKKyAgICAgICAgcmVzb2x1dGlvbjogVkFMSURfUkVTT0xVVElPTgorICAgIH0sIHsKKyAgICAg
ICAgZXllOiJyaWdodCIsCisgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IFZBTElEX1BST0pFQ1RJ
T05fTUFUUklYLAorICAgICAgICB2aWV3T2Zmc2V0OiBSSUdIVF9PRkZTRVQsCisgICAgICAgIHJl
c29sdXRpb246IFZBTElEX1JFU09MVVRJT04KKyAgICB9LAorXTsKKworY29uc3QgTk9OX0lNTUVS
U0lWRV9WSUVXUyA9IFt7CisgICAgICAgIGV5ZTogIm5vbmUiLAorICAgICAgICBwcm9qZWN0aW9u
TWF0cml4OiBWQUxJRF9QUk9KRUNUSU9OX01BVFJJWCwKKyAgICAgICAgdmlld09mZnNldDogSURF
TlRJVFlfVFJBTlNGT1JNLAorICAgICAgICByZXNvbHV0aW9uOiBWQUxJRF9SRVNPTFVUSU9OLAor
ICAgIH0KK107CisKK2NvbnN0IEFMTF9GRUFUVVJFUyA9IFsKKyAgJ3ZpZXdlcicsCisgICdsb2Nh
bCcsCisgICdsb2NhbC1mbG9vcicsCisgICdib3VuZGVkLWZsb29yJywKKyAgJ3VuYm91bmRlZCcs
CisgICdoaXQtdGVzdCcsCisgICdkb20tb3ZlcmxheScsCisgICdsaWdodC1lc3RpbWF0aW9uJywK
KyAgJ2FuY2hvcnMnLAorXTsKKworY29uc3QgVFJBQ0tFRF9JTU1FUlNJVkVfREVWSUNFID0gewor
ICAgIHN1cHBvcnRzSW1tZXJzaXZlOiB0cnVlLAorICAgIHN1cHBvcnRlZE1vZGVzOiBbICJpbmxp
bmUiLCAiaW1tZXJzaXZlLXZyIl0sCisgICAgdmlld3M6IFZBTElEX1ZJRVdTLAorICAgIHZpZXdl
ck9yaWdpbjogSURFTlRJVFlfVFJBTlNGT1JNLAorICAgIHN1cHBvcnRlZEZlYXR1cmVzOiBBTExf
RkVBVFVSRVMKK307CisKK2NvbnN0IElNTUVSU0lWRV9BUl9ERVZJQ0UgPSB7CisgIHN1cHBvcnRz
SW1tZXJzaXZlOiB0cnVlLAorICBzdXBwb3J0ZWRNb2RlczogWyAiaW5saW5lIiwgImltbWVyc2l2
ZS1hciJdLAorICB2aWV3czogVkFMSURfVklFV1MsCisgIHZpZXdlck9yaWdpbjogSURFTlRJVFlf
VFJBTlNGT1JNLAorICBzdXBwb3J0ZWRGZWF0dXJlczogQUxMX0ZFQVRVUkVTCit9OworCitjb25z
dCBWQUxJRF9OT05fSU1NRVJTSVZFX0RFVklDRSA9IHsKKyAgICBzdXBwb3J0c0ltbWVyc2l2ZTog
ZmFsc2UsCisgICAgc3VwcG9ydGVkTW9kZXM6IFsiaW5saW5lIl0sCisgICAgdmlld3M6IE5PTl9J
TU1FUlNJVkVfVklFV1MsCisgICAgdmlld2VyT3JpZ2luOiBJREVOVElUWV9UUkFOU0ZPUk0sCisg
ICAgc3VwcG9ydGVkRmVhdHVyZXM6IEFMTF9GRUFUVVJFUworfTsKKworY29uc3QgVkFMSURfQ09O
VFJPTExFUiA9IHsKKyAgICBoYW5kZWRuZXNzOiAibm9uZSIsCisgICAgdGFyZ2V0UmF5TW9kZTog
InRyYWNrZWQtcG9pbnRlciIsCisgICAgcG9pbnRlck9yaWdpbjogVkFMSURfUE9JTlRFUl9UUkFO
U0ZPUk0sCisgICAgcHJvZmlsZXM6IFtdCit9OworCitjb25zdCBSSUdIVF9DT05UUk9MTEVSID0g
eworICAgIGhhbmRlZG5lc3M6ICJyaWdodCIsCisgICAgdGFyZ2V0UmF5TW9kZTogInRyYWNrZWQt
cG9pbnRlciIsCisgICAgcG9pbnRlck9yaWdpbjogVkFMSURfUE9JTlRFUl9UUkFOU0ZPUk0sCisg
ICAgcHJvZmlsZXM6IFtdCit9OworCitjb25zdCBTQ1JFRU5fQ09OVFJPTExFUiA9IHsKKyAgICBo
YW5kZWRuZXNzOiAibm9uZSIsCisgICAgdGFyZ2V0UmF5TW9kZTogInNjcmVlbiIsCisgICAgcG9p
bnRlck9yaWdpbjogVkFMSURfUE9JTlRFUl9UUkFOU0ZPUk0sCisgICAgcHJvZmlsZXM6IFtdCit9
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhy
X3Rlc3RfY29uc3RhbnRzX2Zha2Vfd29ybGQuanMgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4
ci9yZXNvdXJjZXMvd2VieHJfdGVzdF9jb25zdGFudHNfZmFrZV93b3JsZC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43ZTQyOGUyMTU1MGY2YTUyNDYxY2I4NDcwZGVlMGFhNDRlM2Y0NTc4Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3Rlc3RfY29u
c3RhbnRzX2Zha2Vfd29ybGQuanMKQEAgLTAsMCArMSw3OSBAQAorJ3VzZSBzdHJpY3QnOworCisv
LyBUaGlzIGZpbGUgaW50cm9kdWNlcyBjb25zdGFudHMgdXNlZCB0byBtb2NrIGZha2Ugd29ybGQg
Zm9yIHRoZSBwdXJwb3NlcyBvZiBoaXQgdGVzdC4KKworLy8gR2VuZXJhdGVzIEZha2VYUldvcmxk
SW5pdCBkaWN0aW9uYXJ5IHdpdGggZ2l2ZW4gZGltZW5zaW9ucy4KKy8vIFRoZSBnZW5lcmF0ZWQg
ZmFrZSB3b3JsZCB3aWxsIGhhdmUgZmxvb3IgYW5kIGZyb250IHdhbGwgdHJlYXRlZCBhcyBwbGFu
ZXMsCisvLyBzaWRlIHdhbGxzIHRyZWF0ZWQgYXMgbWVzaGVzLCBhbmQgY2VpbGluZyB0cmVhdGVk
IGFzIHBvaW50cy4KKy8vIHdpZHRoIC0gWCBheGlzLCBpbiBtZXRlcnMKKy8vIGhlaWdodCAtIFkg
YXhpcywgaW4gbWV0ZXJzCisvLyBsZW5ndGggLSBaIGF4aXMsIGluIG1ldGVycworZnVuY3Rpb24g
Y3JlYXRlRmFrZVdvcmxkKAorICB3aWR0aCwgaGVpZ2h0LCBsZW5ndGgsCisgIGZyb250X3dhbGxf
YW5kX2Zsb29yX3R5cGUgPSAicGxhbmUiLAorICBzaWRlX3dhbGxzX3R5cGUgPSAibWVzaCIsCisg
IGNlaWxpbmdfdHlwZSA9ICJwb2ludCIpIHsKKyAgLy8gVmVydGljZXM6CisgIGNvbnN0IEJPVFRP
TV9MRUZUX0ZST05UID0geyB4OiAtd2lkdGgvMiwgeTogMCwgejogLWxlbmd0aC8yLCB3OiAxfTsK
KyAgY29uc3QgQk9UVE9NX1JJR0hUX0ZST05UID0geyB4OiB3aWR0aC8yLCB5OiAwLCB6OiAtbGVu
Z3RoLzIsIHc6IDF9OworCisgIGNvbnN0IFRPUF9MRUZUX0ZST05UID0geyB4OiAtd2lkdGgvMiwg
eTogaGVpZ2h0LCB6OiAtbGVuZ3RoLzIsIHc6IDF9OworICBjb25zdCBUT1BfUklHSFRfRlJPTlQg
PSB7IHg6IHdpZHRoLzIsIHk6IGhlaWdodCwgejogLWxlbmd0aC8yLCB3OiAxfTsKKworICBjb25z
dCBCT1RUT01fTEVGVF9CQUNLID0geyB4OiAtd2lkdGgvMiwgeTogMCwgejogbGVuZ3RoLzIsIHc6
IDF9OworICBjb25zdCBCT1RUT01fUklHSFRfQkFDSyA9IHsgeDogd2lkdGgvMiwgeTogMCwgejog
bGVuZ3RoLzIsIHc6IDF9OworCisgIGNvbnN0IFRPUF9MRUZUX0JBQ0sgPSB7IHg6IC13aWR0aC8y
LCB5OiBoZWlnaHQsIHo6IGxlbmd0aC8yLCB3OiAxfTsKKyAgY29uc3QgVE9QX1JJR0hUX0JBQ0sg
PSB7IHg6IHdpZHRoLzIsIHk6IGhlaWdodCwgejogbGVuZ3RoLzIsIHc6IDF9OworCisgIC8vIEZh
Y2VzOgorICBjb25zdCBGUk9OVF9XQUxMX0FORF9GTE9PUl9GQUNFUyA9IFsKKyAgICAvLyBGcm9u
dCB3YWxsOgorICAgIHsgdmVydGljZXM6IFtCT1RUT01fTEVGVF9GUk9OVCwgQk9UVE9NX1JJR0hU
X0ZST05ULCBUT1BfUklHSFRfRlJPTlRdIH0sCisgICAgeyB2ZXJ0aWNlczogW0JPVFRPTV9MRUZU
X0ZST05ULCBUT1BfUklHSFRfRlJPTlQsIFRPUF9MRUZUX0ZST05UXSB9LAorICAgIC8vIEZsb29y
OgorICAgIHsgdmVydGljZXM6IFtCT1RUT01fTEVGVF9GUk9OVCwgQk9UVE9NX1JJR0hUX0ZST05U
LCBCT1RUT01fUklHSFRfQkFDS10gfSwKKyAgICB7IHZlcnRpY2VzOiBbQk9UVE9NX0xFRlRfRlJP
TlQsIEJPVFRPTV9MRUZUX0JBQ0ssIEJPVFRPTV9SSUdIVF9CQUNLXSB9LAorICBdOworCisgIGNv
bnN0IENFSUxJTkdfRkFDRVMgPSBbCisgICAgLy8gQ2VpbGluZzoKKyAgICB7IHZlcnRpY2VzOiBb
VE9QX0xFRlRfRlJPTlQsIFRPUF9SSUdIVF9GUk9OVCwgVE9QX1JJR0hUX0JBQ0tdIH0sCisgICAg
eyB2ZXJ0aWNlczogW1RPUF9MRUZUX0ZST05ULCBUT1BfTEVGVF9CQUNLLCBUT1BfUklHSFRfQkFD
S10gfSwKKyAgXTsKKworICBjb25zdCBTSURFX1dBTExTX0ZBQ0VTID0gWworICAgIC8vIExlZnQ6
CisgICAgeyB2ZXJ0aWNlczogW0JPVFRPTV9MRUZUX0ZST05ULCBUT1BfTEVGVF9GUk9OVCwgVE9Q
X0xFRlRfQkFDS10gfSwKKyAgICB7IHZlcnRpY2VzOiBbQk9UVE9NX0xFRlRfRlJPTlQsIEJPVFRP
TV9MRUZUX0JBQ0ssIFRPUF9MRUZUX0JBQ0tdIH0sCisgICAgLy8gUmlnaHQ6CisgICAgeyB2ZXJ0
aWNlczogW0JPVFRPTV9SSUdIVF9GUk9OVCwgVE9QX1JJR0hUX0ZST05ULCBUT1BfUklHSFRfQkFD
S10gfSwKKyAgICB7IHZlcnRpY2VzOiBbQk9UVE9NX1JJR0hUX0ZST05ULCBCT1RUT01fUklHSFRf
QkFDSywgVE9QX1JJR0hUX0JBQ0tdIH0sCisgIF07CisKKyAgLy8gUmVnaW9uczoKKyAgY29uc3Qg
RlJPTlRfV0FMTF9BTkRfRkxPT1JfUkVHSU9OID0geworICAgIHR5cGU6IGZyb250X3dhbGxfYW5k
X2Zsb29yX3R5cGUsCisgICAgZmFjZXM6IEZST05UX1dBTExfQU5EX0ZMT09SX0ZBQ0VTLAorICB9
OworCisgIGNvbnN0IFNJREVfV0FMTFNfUkVHSU9OID0geworICAgIHR5cGU6IHNpZGVfd2FsbHNf
dHlwZSwKKyAgICBmYWNlczogU0lERV9XQUxMU19GQUNFUywKKyAgfTsKKworICBjb25zdCBDRUlM
SU5HX1JFR0lPTiA9IHsKKyAgICB0eXBlOiBjZWlsaW5nX3R5cGUsCisgICAgZmFjZXM6IENFSUxJ
TkdfRkFDRVMsCisgIH07CisKKyAgcmV0dXJuIHsKKyAgICBoaXRUZXN0UmVnaW9ucyA6IFsKKyAg
ICAgIEZST05UX1dBTExfQU5EX0ZMT09SX1JFR0lPTiwKKyAgICAgIFNJREVfV0FMTFNfUkVHSU9O
LAorICAgICAgQ0VJTElOR19SRUdJT04sCisgICAgXQorICB9OworfQorCitjb25zdCBWQUxJRF9G
QUtFX1dPUkxEID0gY3JlYXRlRmFrZVdvcmxkKDUuMCwgMi4wLCA1LjApOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3V0aWwuanMgYi9MYXlv
dXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdXRpbC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hOTg3Y2ExZjQ0MjBjMTZiM2U1NTYyMDExNWQ1MzZhNjM1YWUzNjk1Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3V0aWwuanMK
QEAgLTAsMCArMSwyNDYgQEAKKyd1c2Ugc3RyaWN0JzsKKworLy8gVGhlc2UgdGVzdHMgcmVseSBv
biB0aGUgVXNlciBBZ2VudCBwcm92aWRpbmcgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlCisvLyBX
ZWJYUiBUZXN0aW5nIEFQSSAoaHR0cHM6Ly9naXRodWIuY29tL2ltbWVyc2l2ZS13ZWIvd2VieHIt
dGVzdC1hcGkpLgorLy8KKy8vIEluIENocm9taXVtLWJhc2VkIGJyb3dzZXJzLCB0aGlzIGltcGxl
bWVudGF0aW9uIGlzIHByb3ZpZGVkIGJ5IGEgSmF2YVNjcmlwdAorLy8gc2hpbSBpbiBvcmRlciB0
byByZWR1Y2UgdGhlIGFtb3VudCBvZiB0ZXN0LW9ubHkgY29kZSBzaGlwcGVkIHRvIHVzZXJzLiBU
bworLy8gZW5hYmxlIHRoZXNlIHRlc3RzIHRoZSBicm93c2VyIG11c3QgYmUgcnVuIHdpdGggdGhl
c2Ugb3B0aW9uczoKKy8vCisvLyAgIC0tZW5hYmxlLWJsaW5rLWZlYXR1cmVzPU1vam9KUyxNb2pv
SlNUZXN0CisKKy8vIERlYnVnZ2luZyBtZXNzYWdlIGhlbHBlciwgYnkgZGVmYXVsdCBkb2VzIG5v
dGhpbmcuIEltcGxlbWVudGF0aW9ucyBjYW4KKy8vIG92ZXJyaWRlIHRoaXMuCit2YXIgeHJfZGVi
dWcgPSBmdW5jdGlvbihuYW1lLCBtc2cpIHt9OworCitmdW5jdGlvbiB4cl9wcm9taXNlX3Rlc3Qo
bmFtZSwgZnVuYywgcHJvcGVydGllcykgeworICBwcm9taXNlX3Rlc3QoYXN5bmMgKHQpID0+IHsK
KyAgICAvLyBQZXJmb3JtIGFueSByZXF1aXJlZCB0ZXN0IHNldHVwOgorICAgIHhyX2RlYnVnKG5h
bWUsICdzZXR1cCcpOworCisgICAgLy8gT25seSBzZXQgdXAgb25jZS4KKyAgICBpZiAoIW5hdmln
YXRvci54ci50ZXN0KSB7CisgICAgICAvLyBMb2FkIHRlc3Qtb25seSBBUEkgaGVscGVycy4KKyAg
ICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAg
ICAgc2NyaXB0LnNyYyA9ICcvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkuanMnOworICAgICAgc2Ny
aXB0LmFzeW5jID0gZmFsc2U7CisgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUs
IHJlamVjdCkgPT4geworICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4geyByZXNvbHZlKCk7
IH07CisgICAgICAgIHNjcmlwdC5vbmVycm9yID0gZSA9PiB7IHJlamVjdChlKTsgfTsKKyAgICAg
IH0pCisgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CisgICAgICBhd2Fp
dCBwOworCisgICAgICBpZiAoaXNDaHJvbWl1bUJhc2VkKSB7CisgICAgICAgIC8vIENocm9tZSBz
ZXR1cAorICAgICAgICBhd2FpdCBsb2FkQ2hyb21pdW1SZXNvdXJjZXMoKTsKKyAgICAgIH0gZWxz
ZSBpZiAoaXNXZWJLaXRCYXNlZCkgeworICAgICAgICAvLyBXZWJLaXQgc2V0dXAKKyAgICAgICAg
YXdhaXQgc2V0dXBXZWJLaXRXZWJYUlRlc3RBUEkoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IGFzc2VydF9pbXBsZW1lbnRzKGZhbHNlLCAibWlzc2luZyBuYXZpZ2F0b3IueHIudGVzdCIpOwor
ICAgICAgfQorICAgIH0KKworICAgIC8vIEVpdGhlciB0aGUgdGVzdCBhcGkgbmVlZHMgdG8gYmUg
cG9seWZpbGxlZCBhbmQgaXQncyBub3Qgc2V0IHVwIGFib3ZlLCBvcgorICAgIC8vIHNvbWV0aGlu
ZyBoYXBwZW5lZCB0byBvbmUgb2YgdGhlIGtub3duIHBvbHlmaWxscyBhbmQgaXQgZmFpbGVkIHRv
IGJlCisgICAgLy8gc2V0dXAgcHJvcGVybHkuIEVpdGhlciB3YXksIHRoZSBmYWN0IHRoYXQgeHJf
cHJvbWlzZV90ZXN0IGlzIGJlaW5nIHVzZWQKKyAgICAvLyBtZWFucyB0aGF0IHRoZSB0ZXN0cyBl
eHBlY3QgbmF2aWdhdG9yLnhyLnRlc3QgdG8gYmUgc2V0LiBCeSByZWplY3Rpbmcgbm93CisgICAg
Ly8gd2UgY2FuIGhvcGVmdWxseSBwcm92aWRlIGEgY2xlYXJlciBpbmRpY2F0aW9uIG9mIHdoYXQg
d2VudCB3cm9uZy4KKyAgICBpZiAoIW5hdmlnYXRvci54ci50ZXN0KSB7CisgICAgICAvLyBXZSBj
YW4ndCB1c2UgYXNzZXJ0X3RydWUgaGVyZSBiZWNhdXNlIGl0IGNhdXNlcyB0aGUgd3B0IHRlc3Ro
YXJuZXNzCisgICAgICAvLyB0byB0cmVhdCB0aGlzIGFzIGEgdGVzdCBwYWdlIGFuZCBub3QgYXMg
YSB0ZXN0LgorICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJObyBuYXZpZ2F0b3IueHIudGVz
dCBvYmplY3QgZm91bmQsIGV2ZW4gYWZ0ZXIgYXR0ZW1wdGVkIGxvYWQiKTsKKyAgICB9CisKKyAg
ICAvLyBFbnN1cmUgdGhhdCBhbnkgZGV2aWNlcyBhcmUgZGlzY29ubmVjdGVkIHdoZW4gZG9uZS4g
SWYgdGhpcyB3ZXJlIGRvbmUgaW4KKyAgICAvLyBhIC50aGVuKCkgZm9yIHRoZSBzdWNjZXNzIGNh
c2UsIGEgdGVzdCB0aGF0IGV4cGVjdGVkIGZhaWx1cmUgd291bGQKKyAgICAvLyBhbHJlYWR5IGJl
IG1hcmtlZCBkb25lIGF0IHRoZSB0aW1lIHRoYXQgcnVucyBhbmQgdGhlIHNodXRkb3duIHdvdWxk
CisgICAgLy8gaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgdGVzdC4KKyAgICB0LmFkZF9jbGVhbnVw
KGFzeW5jICgpID0+IHsKKyAgICAgIC8vIEVuc3VyZSBzeXN0ZW0gc3RhdGUgaXMgY2xlYW5lZCB1
cC4KKyAgICAgIHhyX2RlYnVnKG5hbWUsICdjbGVhbnVwJyk7CisgICAgICBhd2FpdCBuYXZpZ2F0
b3IueHIudGVzdC5kaXNjb25uZWN0QWxsRGV2aWNlcygpOworICAgIH0pOworCisgICAgeHJfZGVi
dWcobmFtZSwgJ21haW4nKTsKKyAgICByZXR1cm4gZnVuYyh0KTsKKyAgfSwgbmFtZSwgcHJvcGVy
dGllcyk7Cit9CisKKy8vIEEgdXRpbGl0eSBmdW5jdGlvbiBmb3Igd2FpdGluZyBvbmUgYW5pbWF0
aW9uIGZyYW1lIGJlZm9yZSBydW5uaW5nIHRoZSBjYWxsYmFjaworLy8KKy8vIFRoaXMgaXMgb25s
eSBuZWVkZWQgYWZ0ZXIgY2FsbGluZyBGYWtlWFJEZXZpY2UgbWV0aG9kcyBvdXRzaWRlIG9mIGFu
IGFuaW1hdGlvbiBmcmFtZQorLy8KKy8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gcGFwZXIgb3Zl
ciB0aGUgcG90ZW50aWFsIHJhY2UgYWxsb3dlZCBieSB0aGUgIm5leHQgYW5pbWF0aW9uIGZyYW1l
IgorLy8gY29uY2VwdCBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLXRlc3Qt
YXBpLyN4cnNlc3Npb24tbmV4dC1hbmltYXRpb24tZnJhbWUKK2Z1bmN0aW9uIHJlcXVlc3RTa2lw
QW5pbWF0aW9uRnJhbWUoc2Vzc2lvbiwgY2FsbGJhY2spIHsKKyBzZXNzaW9uLnJlcXVlc3RBbmlt
YXRpb25GcmFtZSgoKSA9PiB7CisgIHNlc3Npb24ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxi
YWNrKTsKKyB9KTsKK30KKworLy8gQSB0ZXN0IGZ1bmN0aW9uIHdoaWNoIHJ1bnMgdGhyb3VnaCB0
aGUgY29tbW9uIHN0ZXBzIG9mIHJlcXVlc3RpbmcgYSBzZXNzaW9uLgorLy8gQ2FsbHMgdGhlIHBh
c3NlZCBpbiB0ZXN0IGZ1bmN0aW9uIHdpdGggdGhlIHNlc3Npb24sIHRoZSBjb250cm9sbGVyIGZv
ciB0aGUKKy8vIGRldmljZSwgYW5kIHRoZSB0ZXN0IG9iamVjdC4KKy8vIFJlcXVpcmVzIGEgd2Vi
Z2xDYW52YXMgb24gdGhlIHBhZ2UuCitmdW5jdGlvbiB4cl9zZXNzaW9uX3Byb21pc2VfdGVzdCgK
KyAgICBuYW1lLCBmdW5jLCBmYWtlRGV2aWNlSW5pdCwgc2Vzc2lvbk1vZGUsIHNlc3Npb25Jbml0
LCBwcm9wZXJ0aWVzLCBnbGNvbnRleHRQcm9wZXJ0aWVzUGFyYW0sIGdsbGF5ZXJQcm9wZXJ0aWVz
UGFyYW0pIHsKKyAgbGV0IHRlc3REZXZpY2VDb250cm9sbGVyOworICBsZXQgdGVzdFNlc3Npb247
CisgIGxldCBzZXNzaW9uT2JqZWN0cyA9IHt9OworICBjb25zdCBnbGNvbnRleHRQcm9wZXJ0aWVz
ID0gKGdsY29udGV4dFByb3BlcnRpZXNQYXJhbSkgPyBnbGNvbnRleHRQcm9wZXJ0aWVzUGFyYW0g
OiB7fTsKKyAgY29uc3QgZ2xsYXllclByb3BlcnRpZXMgPSAoZ2xsYXllclByb3BlcnRpZXNQYXJh
bSkgPyBnbGxheWVyUHJvcGVydGllc1BhcmFtIDoge307CisKKyAgY29uc3Qgd2ViZ2xDYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF07CisgIC8vIFdlIGNh
bid0IHVzZSBhc3NlcnRfdHJ1ZSBoZXJlIGJlY2F1c2UgaXQgY2F1c2VzIHRoZSB3cHQgdGVzdGhh
cm5lc3MgdG8gdHJlYXQKKyAgLy8gdGhpcyBhcyBhIHRlc3QgcGFnZSBhbmQgbm90IGFzIGEgdGVz
dC4KKyAgaWYgKCF3ZWJnbENhbnZhcykgeworICAgIHByb21pc2VfdGVzdChhc3luYyAodCkgPT4g
eworICAgICAgUHJvbWlzZS5yZWplY3QoJ3hyX3Nlc3Npb25fcHJvbWlzZV90ZXN0IHJlcXVpcmVz
IGEgY2FudmFzIG9uIHRoZSBwYWdlIScpOworICAgIH0sIG5hbWUsIHByb3BlcnRpZXMpOworICB9
CisgIGxldCBnbCA9IHdlYmdsQ2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywge2FscGhhOiBmYWxz
ZSwgYW50aWFsaWFzOiBmYWxzZSwgLi4uZ2xjb250ZXh0UHJvcGVydGllc30pOworICBzZXNzaW9u
T2JqZWN0cy5nbCA9IGdsOworCisgIHhyX3Byb21pc2VfdGVzdCgKKyAgICAgIG5hbWUsCisgICAg
ICAodCkgPT4geworICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGFueSBwZW5kaW5nIHNlc3Npb25z
IGFyZSBlbmRlZCB3aGVuIGRvbmUuIFRoaXMgbmVlZHMgdG8KKyAgICAgICAgICAvLyB1c2UgYSBj
bGVhbnVwIGZ1bmN0aW9uIHRvIGVuc3VyZSBwcm9wZXIgc2VxdWVuY2luZy4gSWYgdGhpcyB3ZXJl
CisgICAgICAgICAgLy8gZG9uZSBpbiBhIC50aGVuKCkgZm9yIHRoZSBzdWNjZXNzIGNhc2UsIGEg
dGVzdCB0aGF0IGV4cGVjdGVkCisgICAgICAgICAgLy8gZmFpbHVyZSB3b3VsZCBhbHJlYWR5IGJl
IG1hcmtlZCBkb25lIGF0IHRoZSB0aW1lIHRoYXQgcnVucywgYW5kIHRoZQorICAgICAgICAgIC8v
IHNodXRkb3duIHdvdWxkIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IHRlc3Qgd2hpY2ggbWF5IGhh
dmUgc3RhcnRlZC4KKyAgICAgICAgICB0LmFkZF9jbGVhbnVwKGFzeW5jICgpID0+IHsKKyAgICAg
ICAgICAgIC8vIElmIGEgc2Vzc2lvbiB3YXMgY3JlYXRlZCwgZW5kIGl0LgorICAgICAgICAgICAg
aWYgKHRlc3RTZXNzaW9uKSB7CisgICAgICAgICAgICAgIGF3YWl0IHRlc3RTZXNzaW9uLmVuZCgp
LmNhdGNoKCgpID0+IHt9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKworICAgICAg
ICAgIHJldHVybiBuYXZpZ2F0b3IueHIudGVzdC5zaW11bGF0ZURldmljZUNvbm5lY3Rpb24oZmFr
ZURldmljZUluaXQpCisgICAgICAgICAgICAgIC50aGVuKChjb250cm9sbGVyKSA9PiB7CisgICAg
ICAgICAgICAgICAgdGVzdERldmljZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgICAgICAg
ICAgICAgIHJldHVybiBnbC5tYWtlWFJDb21wYXRpYmxlKCk7CisgICAgICAgICAgICAgIH0pCisg
ICAgICAgICAgICAgIC50aGVuKCgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+
IHsKKyAgICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBzZXNzaW9uIHJlcXVlc3Qg
aW4gYSB1c2VyIGdlc3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgeHJfZGVidWcobmFtZSwg
J3NpbXVsYXRlVXNlckFjdGl2YXRpb24nKTsKKyAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0
b3IueHIudGVzdC5zaW11bGF0ZVVzZXJBY3RpdmF0aW9uKCgpID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHhyX2RlYnVnKG5hbWUsICdkb2N1bWVudC5oYXNGb2N1cygpPScgKyBkb2N1bWVu
dC5oYXNGb2N1cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci54ci5yZXF1
ZXN0U2Vzc2lvbihzZXNzaW9uTW9kZSwgc2Vzc2lvbkluaXQgfHwge30pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLnRoZW4oKHNlc3Npb24pID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhyX2RlYnVnKG5hbWUsICdzZXNzaW9uIHN0YXJ0Jyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXN0U2Vzc2lvbiA9IHNlc3Npb247CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXNzaW9uLm1vZGUgPSBzZXNzaW9uTW9kZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxldCBnbExheWVyID0gbmV3IFhSV2ViR0xMYXllcihzZXNzaW9uLCBn
bCwgZ2xsYXllclByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xM
YXllci5jb250ZXh0ID0gZ2w7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXNz
aW9uIG11c3QgaGF2ZSBhIGJhc2VMYXllciBvciBmcmFtZSByZXF1ZXN0cworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBpZ25vcmVkLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Vzc2lvbi51cGRhdGVSZW5kZXJTdGF0ZSh7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZUxheWVyOiBnbExheWVyCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25PYmpl
Y3RzLmdsTGF5ZXIgPSBnbExheWVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJf
ZGVidWcobmFtZSwgJ3Nlc3Npb24udmlzaWJpbGl0eVN0YXRlPScgKyBzZXNzaW9uLnZpc2liaWxp
dHlTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZ1bmMoc2Vz
c2lvbiwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQsIHNlc3Npb25PYmplY3RzKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0
Y2goKGVycikgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJfZGVidWcobmFt
ZSwgJ2Vycm9yOiAnICsgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVj
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2Vzc2lvbiB3aXRoIHBhcmFt
cyAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShz
ZXNzaW9uTW9kZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgd2FzIHJl
amVjdGVkIG9uIGRldmljZSAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBK
U09OLnN0cmluZ2lmeShmYWtlRGV2aWNlSW5pdCkgKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcgd2l0aCBlcnJvcjogJyArIGVycik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIH0pKTsK
KyAgICAgIH0sCisgICAgICBwcm9wZXJ0aWVzKTsKK30KKworCisvLyBUaGlzIGZ1bmN0aW9uIHdy
YXBzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBpbiBhCisvLyBzaW11bGF0ZVVzZXJBY3RpdmF0aW9u
KCkgY2FsbCwgYW5kIHJlc29sdmVzIHRoZSBwcm9taXNlIHdpdGggdGhlCisvLyByZXN1bHQgb2Yg
ZnVuYygpLCBvciBhbiBlcnJvciBpZiBvbmUgaXMgdGhyb3duCitmdW5jdGlvbiBwcm9taXNlX3Np
bXVsYXRlX3VzZXJfYWN0aXZhdGlvbihmdW5jKSB7CisgIHJldHVybiBuZXcgUHJvbWlzZSgocmVz
b2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgbmF2aWdhdG9yLnhyLnRlc3Quc2ltdWxhdGVVc2VyQWN0
aXZhdGlvbigoKSA9PiB7CisgICAgICB0cnkgeyBsZXQgYSA9IGZ1bmMoKTsgcmVzb2x2ZShhKTsg
fSBjYXRjaChlKSB7IHJlamVjdChlKTsgfQorICAgIH0pOworICB9KTsKK30KKworLy8gVGhpcyBm
dW5jdGlvbnMgY2FsbHMgYSBjYWxsYmFjayB3aXRoIGVhY2ggQVBJIG9iamVjdCBhcyBzcGVjaWZp
ZWQKKy8vIGJ5IGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvc3BlYy9sYXRl
c3QvLCBhbGxvd2luZworLy8gY2hlY2tzIHRvIGJlIG1hZGUgb24gYWxsIG9qZWN0cy4KKy8vIEFy
Z3VlbWVudHM6CisvLyAgICAgIGNhbGxiYWNrOiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdHdv
IGFyZ3VlbWVudHMsIHRoZSBmaXJzdAorLy8gICAgICAgICAgICAgICAgYmVpbmcgdGhlIEFQSSBv
YmplY3QsIHRoZSBzZWNvbmQgYmVpbmcgdGhlIG5hbWUgb2YKKy8vICAgICAgICAgICAgICAgIHRo
YXQgQVBJIG9iamVjdC4KK2Z1bmN0aW9uIGZvckVhY2hXZWJ4ck9iamVjdChjYWxsYmFjaykgewor
ICBjYWxsYmFjayh3aW5kb3cubmF2aWdhdG9yLnhyLCAnbmF2aWdhdG9yLnhyJyk7CisgIGNhbGxi
YWNrKHdpbmRvdy5YUlNlc3Npb24sICdYUlNlc3Npb24nKTsKKyAgY2FsbGJhY2sod2luZG93LlhS
U2Vzc2lvbkNyZWF0aW9uT3B0aW9ucywgJ1hSU2Vzc2lvbkNyZWF0aW9uT3B0aW9ucycpOworICBj
YWxsYmFjayh3aW5kb3cuWFJGcmFtZVJlcXVlc3RDYWxsYmFjaywgJ1hSRnJhbWVSZXF1ZXN0Q2Fs
bGJhY2snKTsKKyAgY2FsbGJhY2sod2luZG93LlhSUHJlc2VudGF0aW9uQ29udGV4dCwgJ1hSUHJl
c2VudGF0aW9uQ29udGV4dCcpOworICBjYWxsYmFjayh3aW5kb3cuWFJGcmFtZSwgJ1hSRnJhbWUn
KTsKKyAgY2FsbGJhY2sod2luZG93LlhSTGF5ZXIsICdYUkxheWVyJyk7CisgIGNhbGxiYWNrKHdp
bmRvdy5YUlZpZXcsICdYUlZpZXcnKTsKKyAgY2FsbGJhY2sod2luZG93LlhSVmlld3BvcnQsICdY
UlZpZXdwb3J0Jyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUlZpZXdlclBvc2UsICdYUlZpZXdlclBv
c2UnKTsKKyAgY2FsbGJhY2sod2luZG93LlhSV2ViR0xMYXllciwgJ1hSV2ViR0xMYXllcicpOwor
ICBjYWxsYmFjayh3aW5kb3cuWFJXZWJHTExheWVySW5pdCwgJ1hSV2ViR0xMYXllckluaXQnKTsK
KyAgY2FsbGJhY2sod2luZG93LlhSQ29vcmRpbmF0ZVN5c3RlbSwgJ1hSQ29vcmRpbmF0ZVN5c3Rl
bScpOworICBjYWxsYmFjayh3aW5kb3cuWFJGcmFtZU9mUmVmZXJlbmNlLCAnWFJGcmFtZU9mUmVm
ZXJlbmNlJyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUlN0YWdlQm91bmRzLCAnWFJTdGFnZUJvdW5k
cycpOworICBjYWxsYmFjayh3aW5kb3cuWFJTZXNzaW9uRXZlbnQsICdYUlNlc3Npb25FdmVudCcp
OworICBjYWxsYmFjayh3aW5kb3cuWFJDb29yZGluYXRlU3lzdGVtRXZlbnQsICdYUkNvb3JkaW5h
dGVTeXN0ZW1FdmVudCcpOworfQorCisvLyBDb2RlIGZvciBsb2FkaW5nIHRlc3QgQVBJIGluIENo
cm9taXVtLgorYXN5bmMgZnVuY3Rpb24gbG9hZENocm9taXVtUmVzb3VyY2VzKCkgeworICBsZXQg
Y2hyb21pdW1SZXNvdXJjZXMgPSBbCisgICAgJy9nZW4vbW9qby9wdWJsaWMvbW9qb20vYmFzZS90
aW1lLm1vam9tLmpzJywKKyAgICAnL2dlbi9tb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3NoYXJlZF9t
ZW1vcnkubW9qb20uanMnLAorICAgICcvZ2VuL21vam8vcHVibGljL21vam9tL2Jhc2UvdW5ndWVz
c2FibGVfdG9rZW4ubW9qb20uanMnLAorICAgICcvZ2VuL2dwdS9pcGMvY29tbW9uL3N5bmNfdG9r
ZW4ubW9qb20uanMnLAorICAgICcvZ2VuL2dwdS9pcGMvY29tbW9uL21haWxib3gubW9qb20uanMn
LAorICAgICcvZ2VuL2dwdS9pcGMvY29tbW9uL21haWxib3hfaG9sZGVyLm1vam9tLmpzJywKKyAg
ICAnL2dlbi91aS9nZngvZ2VvbWV0cnkvbW9qb20vZ2VvbWV0cnkubW9qb20uanMnLAorICAgICcv
Z2VuL3VpL2dmeC9tb2pvbS9uYXRpdmVfaGFuZGxlX3R5cGVzLm1vam9tLmpzJywKKyAgICAnL2dl
bi91aS9nZngvbW9qb20vYnVmZmVyX3R5cGVzLm1vam9tLmpzJywKKyAgICAnL2dlbi91aS9nZngv
bW9qb20vY29sb3Jfc3BhY2UubW9qb20uanMnLAorICAgICcvZ2VuL3VpL2dmeC9tb2pvbS9kaXNw
bGF5X2NvbG9yX3NwYWNlcy5tb2pvbS5qcycsCisgICAgJy9nZW4vdWkvZ2Z4L21vam9tL2dwdV9m
ZW5jZV9oYW5kbGUubW9qb20uanMnLAorICAgICcvZ2VuL3VpL2dmeC9tb2pvbS90cmFuc2Zvcm0u
bW9qb20uanMnLAorICAgICcvZ2VuL3VpL2Rpc3BsYXkvbW9qb20vZGlzcGxheS5tb2pvbS5qcycs
CisgICAgJy9nZW4vZGV2aWNlL2dhbWVwYWQvcHVibGljL21vam9tL2dhbWVwYWQubW9qb20uanMn
LAorICAgICcvZ2VuL2RldmljZS92ci9wdWJsaWMvbW9qb20vdnJfc2VydmljZS5tb2pvbS5qcycs
CisgICAgJy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcycsCisg
ICAgJy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcycsCisgICAgLy8gUmVxdWlyZWQg
b25seSBieSByZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcworICAgICcvcmVzb3VyY2Vz
L3Rlc3Rkcml2ZXIuanMnLAorICAgICcvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzJywK
KyAgXTsKKworICAvLyBUaGlzIGluZnJhc3RydWN0dXJlIGlzIGFsc28gdXNlZCBieSBDaHJvbWl1
bS1zcGVjaWZpYyBpbnRlcm5hbCB0ZXN0cyB0aGF0CisgIC8vIG1heSBuZWVkIGFkZGl0aW9uYWwg
cmVzb3VyY2VzIChlLmcuIGludGVybmFsIEFQSSBleHRlbnNpb25zKSwgdGhpcyBhbGxvd3MKKyAg
Ly8gdGhvc2UgdGVzdHMgdG8gcmVseSBvbiB0aGlzIGluZnJhc3RydWN0dXJlIHdoaWxlIGVuc3Vy
aW5nIHRoYXQgbm8gdGVzdHMKKyAgLy8gbWFrZSBpdCBpbnRvIHB1YmxpYyBXUFRzIHRoYXQgcmVs
eSBvbiBBUElzIG91dHNpZGUgb2YgdGhlIHdlYnhyIHRlc3QgQVBJLgorICBpZiAodHlwZW9mKGFk
ZGl0aW9uYWxDaHJvbWl1bVJlc291cmNlcykgIT09ICd1bmRlZmluZWQnKSB7CisgICAgY2hyb21p
dW1SZXNvdXJjZXMgPSBjaHJvbWl1bVJlc291cmNlcy5jb25jYXQoYWRkaXRpb25hbENocm9taXVt
UmVzb3VyY2VzKTsKKyAgfQorCisgIGF3YWl0IGxvYWRNb2pvUmVzb3VyY2VzKGNocm9taXVtUmVz
b3VyY2VzKTsKKworICB4cl9kZWJ1ZyA9IG5hdmlnYXRvci54ci50ZXN0LkRlYnVnOworfQorCitm
dW5jdGlvbiBzZXR1cFdlYktpdFdlYlhSVGVzdEFQSSgpIHsKKyAgLy8gV2ViS2l0IHNldHVwLiBU
aGUgaW50ZXJuYWxzIG9iamVjdCBpcyB1c2VkIGJ5IHRoZSBXZWJLaXQgdGVzdCBydW5uZXIKKyAg
Ly8gdG8gcHJvdmlkZSBKUyBhY2Nlc3MgdG8gaW50ZXJuYWwgQVBJcy4gSW4gdGhpcyBjYXNlIGl0
J3MgdXNlZCB0bworICAvLyBlbnN1cmUgdGhhdCBYUlRlc3QgaXMgb25seSBleHBvc2VkIHRvIHdw
dCB0ZXN0cy4KKyAgbmF2aWdhdG9yLnhyLnRlc3QgPSBpbnRlcm5hbHMueHJUZXN0OworICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3dw
dC93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNl
X3JlcG9ydHNfc2h1dGRvd24uaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4Y2M4YjQ2
MzE4ZjUwYzZlYjNlYWZhZWI2ODMwYWUxYmMyNjJkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRk
b3duLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBlbmQgZXZlbnQg
ZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBlbmRzIGFuZCBkZXZpY2UgcmVwb3J0cyB3aGVu
IHNodXRkb3duIGhhcyBjb21wbGV0ZWQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93
cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2VfcmVwb3J0c19zaHV0ZG93bi5odHRwcy5odG1s
IGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2VfcmVwb3J0
c19zaHV0ZG93bi5odHRwcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwYzM0NDVlNmIwY2JmMTI5NDRlMDVm
OGM1ZWJiYTExNGM1YWQwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3dw
dC93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLmh0bWwK
QEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8Ym9keT4KKyAgPHNjcmlwdCBzcmM9
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9L3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy93ZWJ4cl91dGlsLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93
ZWJ4cl90ZXN0X2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgIDxjYW52YXM+PC9jYW52YXM+CisK
KyAgPHNjcmlwdD4KKyAgICBjb25zdCB0ZXN0TmFtZSA9ICJlbmQgZXZlbnQgZmlyZXMgd2hlbiBp
bW1lcnNpdmUgc2Vzc2lvbiBlbmRzIGFuZCBkZXZpY2UgcmVwb3J0cyB3aGVuIHNodXRkb3duIGhh
cyBjb21wbGV0ZWQiOworICAgIGxldCB3YXRjaGVyRG9uZSA9IG5ldyBFdmVudCgid2F0Y2hlcmRv
bmUiKTsKKyAgICBjb25zdCBmYWtlRGV2aWNlSW5pdFBhcmFtcyA9IFRSQUNLRURfSU1NRVJTSVZF
X0RFVklDRTsKKworICAgIGxldCB0ZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihzZXNzaW9uLCB0ZXN0
RGV2aWNlQ29udHJvbGxlciwgdCkgeworICAgICAgdGVzdERldmljZUNvbnRyb2xsZXIuc2V0U3Vw
cG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbigpOworICAgICAgbGV0IGV2ZW50V2F0Y2hlciA9IG5l
dyBFdmVudFdhdGNoZXIodCwgc2Vzc2lvbiwgWyJlbmQiLCAid2F0Y2hlcmRvbmUiXSk7CisgICAg
ICBsZXQgZXZlbnRQcm9taXNlID0gZXZlbnRXYXRjaGVyLndhaXRfZm9yKFsiZW5kIiwgIndhdGNo
ZXJkb25lIl0pOworCisgICAgICBmdW5jdGlvbiBvblNlc3Npb25FbmQoZXZlbnQpIHsKKyAgICAg
ICAgdC5zdGVwKCAoKSA9PiB7CisgICAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5zZXNzaW9u
LCBzZXNzaW9uKTsKKworICAgICAgICAgIGxldCBldmVudFNlc3Npb24gPSBldmVudC5zZXNzaW9u
OworICAgICAgICAgIGFzc2VydF9lcXVhbHMoZXZlbnRTZXNzaW9uLCBldmVudC5zZXNzaW9uLAor
ICAgICAgICAgICAgIlhSU2Vzc2lvbkV2ZW50LnNlc3Npb24gcmV0dXJucyB0aGUgc2FtZSBvYmpl
Y3QuIik7CisKKyAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoRXZlbnQod2F0Y2hlckRvbmUpOwor
ICAgICAgICB9KTsKKyAgICAgIH0KKyAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiZW5k
Iiwgb25TZXNzaW9uRW5kLCBmYWxzZSk7CisgICAgICBzZXNzaW9uLmVuZCgpOworCisgICAgICBy
ZXR1cm4gZXZlbnRQcm9taXNlOworICAgIH07CisKKyAgICB4cl9zZXNzaW9uX3Byb21pc2VfdGVz
dCh0ZXN0TmFtZSwgdGVzdEZ1bmN0aW9uLAorICAgICAgZmFrZURldmljZUluaXRQYXJhbXMsICdp
bW1lcnNpdmUtdnInKTsKKyAgPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9z
eXN0ZW0uaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhYWU1ZmZmZDhkNGJjNzIxNWUz
NWEwNGVhMTU1NWRhZjNkMjRiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRw
L3dwdC93ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDQgQEAKKworUEFTUyBlbmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vz
c2lvbiBpcyBlbmRlZCBieSBzeXN0ZW0KK1BBU1MgZW5kIGV2ZW50IGZpcmVzIHdoZW4gaW1tZXJz
aXZlIHNlc3Npb24gaXMgZW5kZWQgYnkgc3lzdGVtIGFuZCBkZXZpY2UgcmVwb3J0cyBzaHV0ZG93
biBjb21wbGV0ZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNl
c3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93
ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjkx
NDg3NDIwNGExYzMyZTQ0M2M1Nzc2YTA4Zjc4M2JlNjM1YmMyOAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0ZW0uaHR0
cHMuaHRtbApAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5PgorICA8c2Ny
aXB0IHNyYz0vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3dlYnhyX3V0aWwuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3dlYnhyX3Rlc3RfY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgPGNhbnZhcz48L2Nh
bnZhcz4KKworICA8c2NyaXB0PgorICAgIGNvbnN0IHRlc3REZXZpY2VOb3RSZXBvcnRpbmdTaHV0
ZG93bkNvbXBsZXRlTmFtZSA9ICJlbmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lv
biBpcyBlbmRlZCBieSBzeXN0ZW0iOworICAgIGNvbnN0IHRlc3REZXZpY2VSZXBvcnRpbmdTaHV0
ZG93bkNvbXBsZXRlTmFtZSA9ICJlbmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lv
biBpcyBlbmRlZCBieSBzeXN0ZW0gYW5kIGRldmljZSByZXBvcnRzIHNodXRkb3duIGNvbXBsZXRl
IjsKKworICAgIGxldCB3YXRjaGVyRG9uZSA9IG5ldyBFdmVudCgid2F0Y2hlcmRvbmUiKTsKKyAg
ICBjb25zdCBmYWtlRGV2aWNlSW5pdFBhcmFtcyA9IFRSQUNLRURfSU1NRVJTSVZFX0RFVklDRTsK
KworICAgIGxldCB0ZXN0RGV2aWNlTm90UmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZSA9IGZ1bmN0
aW9uKHNlc3Npb24sIHRlc3REZXZpY2VDb250cm9sbGVyLCB0KSB7CisgICAgICB0ZXN0RW5kU2Vz
c2lvbkJ5U3lzdGVtKHNlc3Npb24sIHRlc3REZXZpY2VDb250cm9sbGVyLCB0KTsKKyAgICB9Owor
CisgICAgbGV0IHRlc3REZXZpY2VSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRlID0gZnVuY3Rpb24o
c2Vzc2lvbiwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQpIHsKKyAgICAgIHRlc3REZXZpY2VDb250
cm9sbGVyLnNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24oKTsKKyAgICAgIHRlc3RFbmRT
ZXNzaW9uQnlTeXN0ZW0oc2Vzc2lvbiwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQpOworICAgIH07
CisKKyAgICBsZXQgdGVzdEVuZFNlc3Npb25CeVN5c3RlbSA9IGZ1bmN0aW9uKHNlc3Npb24sIHRl
c3REZXZpY2VDb250cm9sbGVyLCB0KSB7CisgICAgICBsZXQgZXZlbnRXYXRjaGVyID0gbmV3IEV2
ZW50V2F0Y2hlcih0LCBzZXNzaW9uLCBbImVuZCIsICJ3YXRjaGVyZG9uZSJdKTsKKyAgICAgIGxl
dCBldmVudFByb21pc2UgPSBldmVudFdhdGNoZXIud2FpdF9mb3IoWyJlbmQiLCAid2F0Y2hlcmRv
bmUiXSk7CisKKyAgICAgIGZ1bmN0aW9uIG9uU2Vzc2lvbkVuZChldmVudCkgeworICAgICAgICB0
LnN0ZXAoICgpID0+IHsKKyAgICAgICAgICBhc3NlcnRfZXF1YWxzKGV2ZW50LnNlc3Npb24sIHNl
c3Npb24pOworCisgICAgICAgICAgbGV0IGV2ZW50U2Vzc2lvbiA9IGV2ZW50LnNlc3Npb247Cisg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudFNlc3Npb24sIGV2ZW50LnNlc3Npb24sCisgICAg
ICAgICAgICAiWFJTZXNzaW9uRXZlbnQuc2Vzc2lvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdC4i
KTsKKworICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hFdmVudCh3YXRjaGVyRG9uZSk7CisgICAg
ICAgIH0pOworICAgICAgfQorICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJlbmQiLCBv
blNlc3Npb25FbmQsIGZhbHNlKTsKKworICAgICAgdGVzdERldmljZUNvbnRyb2xsZXIuc2ltdWxh
dGVTaHV0ZG93bigpOworCisgICAgICByZXR1cm4gZXZlbnRQcm9taXNlOworICAgIH07CisKKyAg
ICB4cl9zZXNzaW9uX3Byb21pc2VfdGVzdCh0ZXN0RGV2aWNlTm90UmVwb3J0aW5nU2h1dGRvd25D
b21wbGV0ZU5hbWUsIHRlc3REZXZpY2VOb3RSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRlLAorICAg
ICAgZmFrZURldmljZUluaXRQYXJhbXMsICdpbW1lcnNpdmUtdnInKTsKKyAgICB4cl9zZXNzaW9u
X3Byb21pc2VfdGVzdCh0ZXN0RGV2aWNlUmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZU5hbWUsIHRl
c3REZXZpY2VSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRlLAorICAgICAgZmFrZURldmljZUluaXRQ
YXJhbXMsICdpbW1lcnNpdmUtdnInKTsKKworICA8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVf
ZW5kLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vz
c2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
ODk3NTMzZWM0ODc5M2QxMzQ2YTcwNGRhNDA2MjI3NDI3NjVlY2NhCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBsZV9l
bmQuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIFJlamVjdCBtdWx0
aXBsZSBjYWxscyB0byBYUlNlc3Npb24uZW5kKCkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC93cHQvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBsZV9lbmQuaHR0cHMuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5k
Lmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM1YTYyNzhlMDIxNWY5ZTU2M2RlMDUyZGQ5MmJiMzRm
NTcxZTk1MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hy
U2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwKQEAgLTAsMCArMSwyMSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8Ym9keT4KKyAgPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJ4cl91dGlsLmpz
Ij48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50
cy5qcyI+PC9zY3JpcHQ+CisgIDxjYW52YXM+PC9jYW52YXM+CisKKyAgPHNjcmlwdD4KKyAgICBj
b25zdCB0ZXN0TmFtZSA9ICJSZWplY3QgbXVsdGlwbGUgY2FsbHMgdG8gWFJTZXNzaW9uLmVuZCgp
IjsKKyAgICBjb25zdCBmYWtlRGV2aWNlSW5pdFBhcmFtcyA9IFRSQUNLRURfSU1NRVJTSVZFX0RF
VklDRTsKKworICAgIGxldCB0ZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihzZXNzaW9uLCB0ZXN0RGV2
aWNlQ29udHJvbGxlciwgdCkgeworICAgICAgc2Vzc2lvbi5lbmQoKTsKKyAgICAgIHJldHVybiBw
cm9taXNlX3JlamVjdHNfZG9tKHQsICJJbnZhbGlkU3RhdGVFcnJvciIsIHNlc3Npb24uZW5kKCkp
CisgICAgfTsKKworICAgIHhyX3Nlc3Npb25fcHJvbWlzZV90ZXN0KHRlc3ROYW1lLCB0ZXN0RnVu
Y3Rpb24sCisgICAgICBmYWtlRGV2aWNlSW5pdFBhcmFtcywgJ2ltbWVyc2l2ZS12cicpOworICA8
L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlv
bnMKaW5kZXggOTI2NzZiNGQ2ZTE5NjU5ZjI3MDA2YTgwMmU2YjYyNmZkNDk0Y2U5Mi4uYmQ1ZmM3
YzI2NzI3ZWJlMDcyNWI1OGU4YWRhYmRjZDQzNjEwZmY4YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTIyNTcsMyArMjI1NywxMCBAQCB3ZWJraXQub3Jn
L2IvMjIwMDc3IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb3RvY29s
L2NyeXB0by1zdWl0ZQogd2Via2l0Lm9yZy9iLzIyMDMzMiBbIEJpZ1N1cisgXSBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21pbWVzbmlmZi9taW1lLXR5cGVzL2NoYXJzZXQtcGFyYW1l
dGVyLndpbmRvdy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIyMDU1MiBb
IEJpZ1N1cisgXSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXdlYm0taW5pdC1pbnNp
ZGUtc2VnbWVudC5odG1sIFsgRmFpbHVyZSBdCisKKyMgLS0tIFN0YXJ0IFdlYlhSIHRlc3RzIC0t
LSAjCitpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9lbmQu
aHR0cHMuaHRtbCBbIFBhc3MgXQoraHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2Vf
cmVwb3J0c19zaHV0ZG93bi5odHRwcy5odG1sIFsgUGFzcyBdCitodHRwL3dwdC93ZWJ4ci94clNl
c3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLmh0bWwgWyBQYXNzIF0KK2h0dHAvd3B0L3dlYnhy
L3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwgWyBQYXNzIF0KKyMgLS0t
IEVuZCBXZWJYUiB0ZXN0cyAtLS0gIwo=
</data>
<flag name="commit-queue"
          id="436468"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418489</attachid>
            <date>2021-01-26 16:52:47 -0800</date>
            <delta_ts>2021-01-26 17:39:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220835-20210126165244.patch</filename>
            <type>text/plain</type>
            <size>53788</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiNmY5NDczZjZiYWFk
NWExY2ZjZjI4YTMwZDkxNjM2NjBhYTU5OC4uODQ0ODdkODFhZDJlODRkYmFiM2E0Y2NmMTVkMTAw
OWRjMjQ5MDgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTAxLTI2ICBBZGEg
Q2hhbiAgPGFkYS5jaGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIHRoZSBlbmQgWFJTZXNz
aW9uRXZlbnQgYWZ0ZXIgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIGZvciBzZXNzaW9uIHNo
dXRkb3duIGhhdmUgY29tcGxldGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjA4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0czogaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2Vf
cmVwb3J0c19zaHV0ZG93bi5odHRwcy5odG1sCisgICAgICAgICAgICAgICBodHRwL3dwdC93ZWJ4
ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwKKwor
ICAgICAgICAtIEFkZCB0aGUgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgcHJvdG9jb2wgdGhh
dCB0aGUgRGV2aWNlIGNhbiBob2xkIGEKKyAgICAgICAgd2VhayByZWZlcmVuY2UgdG8gZHVyaW5n
IGEgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBzZXNzaW9uLiBXZWJYUlNlc3Npb24KKyAgICAgICAg
aW1wbGVtZW50cyB0aGF0IHByb3RvY29sIHRvIGhhbmRsZSBjbGVhbnVwIGFmdGVyIHNodXRkb3du
IGhhcyBjb21wbGV0ZWQuCisgICAgICAgIC0gRm9yIHBsYXRmb3JtcyB0byByZXBvcnQgYXN5bmNo
cm9ub3VzIGNvbXBsZXRpb24gb2YgdGhlIHNlc3Npb24gc2h1dGRvd24sCisgICAgICAgIHRoZXkg
Y2FuIGltcGxlbWVudCBQbGF0Zm9ybVhSOjpEZXZpY2U6OnN1cHBvcnRzU2Vzc2lvblNodXRkb3du
Tm90aWZpY2F0aW9uKCkKKyAgICAgICAgdG8gcmV0dXJuIHRydWUuIFRoaXMgd2F5IFdlYlhSU2Vz
c2lvbiB3aWxsIHdhaXQgZm9yIHRoZSBzaHV0ZG93biBjb21wbGV0aW9uCisgICAgICAgICh2aWEg
dGhlIFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50OjpzZXNzaW9uRGlkRW5kKCkgY2FsbGJhY2sp
IGJlZm9yZSBzZW5kaW5nCisgICAgICAgIHRoZSBlbmQgWFJTZXNzaW9uRXZlbnQgYW5kIHJlc29s
dmluZyB0aGUgWFJTZXNzaW9uOjplbmQoKSBwcm9taXNlLgorICAgICAgICAtIFVwZGF0ZSBXZWJY
UlNlc3Npb246OmVuZCgpIHRvIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yIGlmIGNhbGxlZCBt
b3JlCisgICAgICAgIHRoYW4gb25jZS4gVGhpcyBhbHNvIG1hdGNoZXMgQ2hyb21pdW0ncyBjdXJy
ZW50IGJlaGF2aW9yLgorCisgICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpXZWJYUlNlc3Npb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpzaHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJYUlNlc3Npb246OmRpZENvbXBsZXRlU2h1dGRvd24pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
WFJTZXNzaW9uOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpzZXNzaW9u
RGlkRW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS94
ci9QbGF0Zm9ybVhSLmg6CisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6OnNldFRyYWNraW5n
QW5kUmVuZGVyaW5nQ2xpZW50KToKKyAgICAgICAgKFBsYXRmb3JtWFI6OkRldmljZTo6c3VwcG9y
dHNTZXNzaW9uU2h1dGRvd25Ob3RpZmljYXRpb24gY29uc3QpOgorICAgICAgICAqIHRlc3Rpbmcv
V2ViRmFrZVhSRGV2aWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZFhSRGV2aWNl
OjpzaW11bGF0ZVNodXRkb3duQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRl
ZFhSRGV2aWNlOjpzaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkZha2VYUkRldmljZTo6c2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJGYWtlWFJEZXZpY2U6OnNpbXVsYXRlU2h1dGRvd24pOgorICAg
ICAgICAqIHRlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmg6CisgICAgICAgICogdGVzdGluZy9XZWJG
YWtlWFJEZXZpY2UuaWRsOgorCiAyMDIxLTAxLTI1ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVHdpdHRlciBQaVAgdmlkZW8gcGF1c2VzIHdoZW4gc2Nyb2xsaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKaW5kZXgg
YjY2M2Q1MmQwNmJiMjA5YTQzNzFmN2EyMTMxMzk4ODUzYTc4ZjVhYi4uNmQxYzg4MTVkNGY2ODc5
ZTY2Yzk5YjU3MzgzNjdjZjBjMDVkMTNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VieHIvV2ViWFJTZXNzaW9uLmNwcApAQCAtNTgsNiArNTgsNyBAQCBXZWJYUlNlc3Npb246Oldl
YlhSU2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFdlYlhSU3lzdGVtJiBzeXN0ZW0sIFhSU2Vz
c2lvbk1vZAogICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJldlYlhSU2Vzc2lvbjo6YW5p
bWF0aW9uVGltZXJGaXJlZCkKIHsKICAgICBtX2RldmljZS0+aW5pdGlhbGl6ZVRyYWNraW5nQW5k
UmVuZGVyaW5nKG1vZGUpOworICAgIG1fZGV2aWNlLT5zZXRUcmFja2luZ0FuZFJlbmRlcmluZ0Ns
aWVudChtYWtlV2Vha1B0cigqdGhpcykpOwogCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CkBA
IC0zMTcsOCArMzE4LDIwIEBAIEludFNpemUgV2ViWFJTZXNzaW9uOjpyZWNvbW1lbmRlZFdlYkdM
RnJhbWVidWZmZXJSZXNvbHV0aW9uKCkgY29uc3QKIH0KIAogLy8gaHR0cHM6Ly9pbW1lcnNpdmUt
d2ViLmdpdGh1Yi5pby93ZWJ4ci8jc2h1dC1kb3duLXRoZS1zZXNzaW9uCi12b2lkIFdlYlhSU2Vz
c2lvbjo6c2h1dGRvd24oKQordm9pZCBXZWJYUlNlc3Npb246OnNodXRkb3duKEluaXRpYXRlZEJ5
U3lzdGVtIGluaXRpYXRlZEJ5U3lzdGVtKQogeworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpOworCisgICAgaWYgKG1fZW5kZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZXRo
b2Qgd2FzIGNhbGxlZCBlYXJsaWVyIHdpdGggaW5pdGlhdGVkQnlTeXN0ZW09Tm8gd2hlbiB0aGUK
KyAgICAgICAgLy8gc2Vzc2lvbiB0ZXJtaW5hdGlvbiB3YXMgcmVxdWVzdGVkIG1hbnVhbGx5IHZp
YSBYUlNlc3Npb24uZW5kKCkuIFdoZW4KKyAgICAgICAgLy8gdGhlIHN5c3RlbSBoYXMgY29tcGxl
dGVkIHRoZSBzaHV0ZG93biwgdGhpcyBtZXRob2QgaXMgbm93IGNhbGxlZCBhZ2FpbgorICAgICAg
ICAvLyB3aXRoIGluaXRpYXRlZEJ5U3lzdGVtPVllcyB0byBkbyB0aGUgZmluYWwgY2xlYW51cC4K
KyAgICAgICAgaWYgKGluaXRpYXRlZEJ5U3lzdGVtID09IEluaXRpYXRlZEJ5U3lzdGVtOjpZZXMp
CisgICAgICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICAvLyAxLiBMZXQgc2Vzc2lvbiBiZSB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmpl
Y3QuCiAgICAgLy8gMi4gU2V0IHNlc3Npb24ncyBlbmRlZCB2YWx1ZSB0byB0cnVlLgogICAgIG1f
ZW5kZWQgPSB0cnVlOwpAQCAtMzI3LDYgKzM0MCwxNCBAQCB2b2lkIFdlYlhSU2Vzc2lvbjo6c2h1
dGRvd24oKQogICAgIC8vIDQuIFJlbW92ZSBzZXNzaW9uIGZyb20gdGhlIGxpc3Qgb2YgaW5saW5l
IHNlc3Npb25zLgogICAgIG1feHJTeXN0ZW0uc2Vzc2lvbkVuZGVkKCp0aGlzKTsKIAorICAgIGlm
IChpbml0aWF0ZWRCeVN5c3RlbSA9PSBJbml0aWF0ZWRCeVN5c3RlbTo6WWVzKSB7CisgICAgICAg
IC8vIElmIHdlIGdldCBoZXJlLCB0aGUgc2Vzc2lvbiB0ZXJtaW5hdGlvbiB3YXMgdHJpZ2dlcmVk
IGJ5IHRoZSBzeXN0ZW0gcmF0aGVyIHRoYW4KKyAgICAgICAgLy8gdmlhIFhSU2Vzc2lvbi5lbmQo
KS4gU2luY2UgdGhlIHN5c3RlbSBoYXMgY29tcGxldGVkIHRoZSBzZXNzaW9uIHNodXRkb3duLCB3
ZSBjYW4KKyAgICAgICAgLy8gaW1tZWRpYXRlbHkgZG8gdGhlIGZpbmFsIGNsZWFudXAuCisgICAg
ICAgIGRpZENvbXBsZXRlU2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IC8vIFRPRE86IGNvbXBsZXRlIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgIC8vIDUuIFJlamVjdCBh
bnkgb3V0c3RhbmRpbmcgcHJvbWlzZXMgcmV0dXJuZWQgYnkgc2Vzc2lvbiB3aXRoIGFuIEludmFs
aWRTdGF0ZUVycm9yLCBleGNlcHQgZm9yIGFueSBwcm9taXNlcyByZXR1cm5lZCBieSBlbmQoKS4K
ICAgICAvLyA2LiBJZiBubyBvdGhlciBmZWF0dXJlcyBvZiB0aGUgdXNlciBhZ2VudCBhcmUgYWN0
aXZlbHkgdXNpbmcgdGhlbSwgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IHBsYXRmb3JtLXNwZWNpZmlj
IHN0ZXBzIHRvIHNodXQgZG93biB0aGUgZGV2aWNlJ3MgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBj
YXBhYmlsaXRpZXMuIFRoaXMgTVVTVCBpbmNsdWRlOgpAQCAtMzM2LDMwICszNTcsNTAgQEAgdm9p
ZCBXZWJYUlNlc3Npb246OnNodXRkb3duKCkKICAgICBpZiAobV9kZXZpY2UpCiAgICAgICAgIG1f
ZGV2aWNlLT5zaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKCk7CiAKKyAgICAvLyBJZiBkZXZp
Y2Ugd2lsbCBub3QgcmVwb3J0IHNodXRkb3duIGNvbXBsZXRpb24gdmlhIHRoZSBUcmFja2luZ0Fu
ZFJlbmRlcmluZ0NsaWVudCwKKyAgICAvLyBjb21wbGV0ZSB0aGUgc2h1dGRvd24gY2xlYW51cCBo
ZXJlLgorICAgIGlmICghbV9kZXZpY2UgfHwgIW1fZGV2aWNlLT5zdXBwb3J0c1Nlc3Npb25TaHV0
ZG93bk5vdGlmaWNhdGlvbigpKQorICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7Cit9CisK
K3ZvaWQgV2ViWFJTZXNzaW9uOjpkaWRDb21wbGV0ZVNodXRkb3duKCkKK3sKKyAgICBpZiAobV9k
ZXZpY2UpCisgICAgICAgIG1fZGV2aWNlLT5zZXRUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudChu
dWxscHRyKTsKKworICAgIC8vIFJlc29sdmUgZW5kIHByb21pc2UgZnJvbSBYUlNlc3Npb246OmVu
ZCgpCisgICAgaWYgKG1fZW5kUHJvbWlzZSkgeworICAgICAgICBtX2VuZFByb21pc2UtPnJlc29s
dmUoKTsKKyAgICAgICAgbV9lbmRQcm9taXNlID0gV1RGOjpudWxsb3B0OworICAgIH0KKworICAg
IC8vIEZyb20gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jc2h1dC1kb3du
LXRoZS1zZXNzaW9uCiAgICAgLy8gNy4gUXVldWUgYSB0YXNrIHRoYXQgZmlyZXMgYW4gWFJTZXNz
aW9uRXZlbnQgbmFtZWQgZW5kIG9uIHNlc3Npb24uCiAgICAgYXV0byBldmVudCA9IFhSU2Vzc2lv
bkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuZEV2ZW50LCB7IG1ha2VSZWZQdHIoKnRoaXMp
IH0pOwogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6V2Vi
WFIsIFdURk1vdmUoZXZlbnQpKTsKIH0KIAogLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1
Yi5pby93ZWJ4ci8jZG9tLXhyc2Vzc2lvbi1lbmQKLXZvaWQgV2ViWFJTZXNzaW9uOjplbmQoRW5k
UHJvbWlzZSYmIHByb21pc2UpCitFeGNlcHRpb25Pcjx2b2lkPiBXZWJYUlNlc3Npb246OmVuZChF
bmRQcm9taXNlJiYgcHJvbWlzZSkKIHsKLSAgICAvLyBUaGUgc2h1dGRvd24oKSBjYWxsIGJlbGxv
dyBtaWdodCByZW1vdmUgdGhlIHNvbGUgcmVmZXJlbmNlIHRvIHNlc3Npb24KKyAgICAvLyBUaGUg
c2h1dGRvd24oKSBjYWxsIGJlbG93IG1pZ2h0IHJlbW92ZSB0aGUgc29sZSByZWZlcmVuY2UgdG8g
c2Vzc2lvbgogICAgIC8vIHRoYXQgY291bGQgZXhpc3QgKHRoZSBYUlN5c3RlbSBvd25zIHRoZSBz
ZXNzaW9ucykgc28gbGV0J3MgcHJvdGVjdCB0aGlzLgotICAgIFJlZjxXZWJYUlNlc3Npb24+IHBy
b3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpOworCisgICAgaWYgKG1fZW5kZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciwgIkNhbm5vdCBlbmQgYSBzZXNzaW9uIG1vcmUgdGhhbiBvbmNlIiB9Owor
CiAgICAgLy8gMS4gTGV0IHByb21pc2UgYmUgYSBuZXcgUHJvbWlzZS4KICAgICAvLyAyLiBTaHV0
IGRvd24gdGhlIHRhcmdldCBYUlNlc3Npb24gb2JqZWN0LgotICAgIGlmICghbV9lbmRlZCkKLSAg
ICAgICAgc2h1dGRvd24oKTsKKyAgICBzaHV0ZG93bihJbml0aWF0ZWRCeVN5c3RlbTo6Tm8pOwog
CiAgICAgLy8gMy4gUXVldWUgYSB0YXNrIHRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoK
LSAgICBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoKnRoaXMsIFRhc2tTb3VyY2U6OldlYlhS
LCBbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldICgpIG11dGFibGUgewotICAgICAgICAvLyAz
LjEgV2FpdCB1bnRpbCBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgc3RlcHMgcmVsYXRlZCB0byBzaHV0
dGluZyBkb3duIHRoZSBzZXNzaW9uIGhhdmUgY29tcGxldGVkLgotICAgICAgICAvLyAzLjIgUmVz
b2x2ZSBwcm9taXNlLgotICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICB9KTsKKyAgICAv
LyAzLjEgV2FpdCB1bnRpbCBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgc3RlcHMgcmVsYXRlZCB0byBz
aHV0dGluZyBkb3duIHRoZSBzZXNzaW9uIGhhdmUgY29tcGxldGVkLgorICAgIC8vIDMuMiBSZXNv
bHZlIHByb21pc2UuCisgICAgbV9lbmRQcm9taXNlID0gV1RGTW92ZShwcm9taXNlKTsKIAogICAg
IC8vIDQuIFJldHVybiBwcm9taXNlLgorICAgIHJldHVybiB7IH07CiB9CiAKIGNvbnN0IGNoYXIq
IFdlYlhSU2Vzc2lvbjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CkBAIC0zNzEsNiArNDEy
LDEzIEBAIHZvaWQgV2ViWFJTZXNzaW9uOjpzdG9wKCkKIHsKIH0KIAordm9pZCBXZWJYUlNlc3Np
b246OnNlc3Npb25EaWRFbmQoKQoreworICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBhcyBhIHJl
c3VsdCBvZiBmaW5pc2hpbmcgdGhlIHNodXRkb3duIGluaXRpYXRlZAorICAgIC8vIGZyb20gWFJT
ZXNzaW9uOjplbmQoKSwgb3Igc2Vzc2lvbiB0ZXJtaW5hdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHN5
c3RlbS4KKyAgICBzaHV0ZG93bihJbml0aWF0ZWRCeVN5c3RlbTo6WWVzKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmgKaW5kZXggZTRjMjdkYjRiOTBkOTIxZTIx
NTU1YTZhMjg2OTA2ZTk4YzYzYTBlOC4uNzQ1OTc0YTcyMGU2MzhkMDUzNTViNTllMTYxNzI3OTA5
YTc2MmU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNl
c3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5o
CkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIFdlYlhSUmVmZXJlbmNlU3BhY2U7CiBjbGFzcyBXZWJY
UlN5c3RlbTsKIHN0cnVjdCBYUlJlbmRlclN0YXRlSW5pdDsKIAotY2xhc3MgV2ViWFJTZXNzaW9u
IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPiwgcHVibGljIEV2ZW50VGFy
Z2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgV2ViWFJT
ZXNzaW9uIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPiwgcHVibGljIEV2
ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBQ
bGF0Zm9ybVhSOjpUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChXZWJYUlNlc3Npb24pOwogcHVibGljOgogICAgIHVzaW5nIFJlcXVlc3RSZWZl
cmVuY2VTcGFjZVByb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPFdlYlhS
UmVmZXJlbmNlU3BhY2U+PjsKQEAgLTY0LDYgKzY0LDkgQEAgcHVibGljOgogICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViWFJT
ZXNzaW9uPjo6ZGVyZWY7CiAKKyAgICB1c2luZyBUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudDo6
d2Vha1B0ckZhY3Rvcnk7CisgICAgdXNpbmcgV2Vha1ZhbHVlVHlwZSA9IFRyYWNraW5nQW5kUmVu
ZGVyaW5nQ2xpZW50OjpXZWFrVmFsdWVUeXBlOworCiAgICAgWFJFbnZpcm9ubWVudEJsZW5kTW9k
ZSBlbnZpcm9ubWVudEJsZW5kTW9kZSgpIGNvbnN0OwogICAgIFhSSW50ZXJhY3Rpb25Nb2RlIGlu
dGVyYWN0aW9uTW9kZSgpIGNvbnN0OwogICAgIFhSVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlT
dGF0ZSgpIGNvbnN0OwpAQCAtODIsNyArODUsMTAgQEAgcHVibGljOgogICAgIC8vIEV2ZW50VGFy
Z2V0LgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsgfQogCi0gICAgdm9pZCBlbmQoRW5kUHJvbWlzZSYmKTsKKyAgICAvLyBQbGF0Zm9y
bVhSOjpUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudAorICAgIHZvaWQgc2Vzc2lvbkRpZEVuZCgp
IGZpbmFsOworCisgICAgRXhjZXB0aW9uT3I8dm9pZD4gZW5kKEVuZFByb21pc2UmJik7CiAgICAg
Ym9vbCBlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kZWQ7IH0KIAogICAgIFhSU2Vzc2lvbk1v
ZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpAQCAtOTksNyArMTA1LDkgQEAgcHJp
dmF0ZToKICAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNodXRkb3duKCk7Cisg
ICAgZW51bSBjbGFzcyBJbml0aWF0ZWRCeVN5c3RlbSA6IGJvb2wgeyBObywgWWVzIH07CisgICAg
dm9pZCBzaHV0ZG93bihJbml0aWF0ZWRCeVN5c3RlbSk7CisgICAgdm9pZCBkaWRDb21wbGV0ZVNo
dXRkb3duKCk7CiAKICAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHNj
aGVkdWxlQW5pbWF0aW9uKCk7CkBAIC0xMTEsNiArMTE5LDcgQEAgcHJpdmF0ZToKICAgICBYUlZp
c2liaWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlTdGF0ZTsKICAgICBSZWY8V2ViWFJJbnB1dFNvdXJj
ZUFycmF5PiBtX2lucHV0U291cmNlczsKICAgICBib29sIG1fZW5kZWQgeyBmYWxzZSB9OworICAg
IE9wdGlvbmFsPEVuZFByb21pc2U+IG1fZW5kUHJvbWlzZTsKIAogICAgIFdlYlhSU3lzdGVtJiBt
X3hyU3lzdGVtOwogICAgIFhSU2Vzc2lvbk1vZGUgbV9tb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaWRsIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaWRsCmluZGV4IDVjMDQ4YzBmNDY2MzgyZTY0MDM4
YjlhYWMwNjljZjgwMTczMTkyOGUuLjk4OTVlNjM3NGFiODNhYWNhNTBkMGY1OWYxNWVmZjI0NGQ1
NmUzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNz
aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5p
ZGwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICB1bnNpZ25lZCBsb25nIHJlcXVlc3RBbmltYXRpb25G
cmFtZShYUkZyYW1lUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrKTsKICAgICB1bmRlZmluZWQgY2Fu
Y2VsQW5pbWF0aW9uRnJhbWUodW5zaWduZWQgbG9uZyBoYW5kbGUpOwogCi0gICAgUHJvbWlzZTx1
bmRlZmluZWQ+IGVuZCgpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gUHJvbWlzZTx1bmRlZmlu
ZWQ+IGVuZCgpOwogCiAgICAgLy8gRXZlbnRzCiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBv
bmVuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuaAppbmRleCA2NDU1MGY0
ZTAxYmYwMDViZWRlMTg0YzBmZWE0ZGI5MzEyNjQ4YjY0Li5iOWVmNDVjMGM2OTcxNGFlODNjNzA0
NDU0ZDk1NGJkNTFlYTQ3NjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94
ci9QbGF0Zm9ybVhSLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1Y
Ui5oCkBAIC00NCw2ICs0NCwxNSBAQCBlbnVtIGNsYXNzIFJlZmVyZW5jZVNwYWNlVHlwZSB7CiAK
ICNpZiBFTkFCTEUoV0VCWFIpCiAKK2NsYXNzIFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50IDog
cHVibGljIENhbk1ha2VXZWFrUHRyPFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50PiB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQoKSA9IGRlZmF1bHQ7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2Vzc2lvbkRpZEVuZCgpID0gMDsKKyAgICAvLyBGSVhNRTog
aGFuZGxlIGZyYW1lIHVwZGF0ZQorICAgIC8vIEZJWE1FOiBoYW5kbGUgdmlzaWJpbGl0eSBjaGFu
Z2VzCit9OworCiBjbGFzcyBEZXZpY2UgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8RGV2aWNlPiB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
RGV2aWNlKTsKQEAgLTYxLDYgKzcwLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBp
bml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcoU2Vzc2lvbk1vZGUpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2h1dERvd25UcmFja2luZ0FuZFJlbmRlcmluZygpID0gMDsKKyAgICB2b2lkIHNl
dFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50KFdlYWtQdHI8VHJhY2tpbmdBbmRSZW5kZXJpbmdD
bGllbnQ+JiYgY2xpZW50KSB7IG1fdHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgPSBXVEZNb3Zl
KGNsaWVudCk7IH0KKworICAgIC8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhhdCBt
ZWFucyB0aGUgZGV2aWNlIHdpbGwgbm90aWZ5IFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50Cisg
ICAgLy8gd2hlbiB0aGUgcGxhdGZvcm0gaGFzIGNvbXBsZXRlZCBhbGwgc3RlcHMgdG8gc2h1dCBk
b3duIHRoZSBYUiBzZXNzaW9uLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1Nlc3Npb25TaHV0
ZG93bk5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByb3RlY3RlZDoK
ICAgICBEZXZpY2UoKSA9IGRlZmF1bHQ7CkBAIC03Miw2ICs4Niw3IEBAIHByb3RlY3RlZDoKICAg
ICBFbmFibGVkRmVhdHVyZXNQZXJNb2RlTWFwIG1fZW5hYmxlZEZlYXR1cmVzTWFwOwogCiAgICAg
Ym9vbCBtX3N1cHBvcnRzT3JpZW50YXRpb25UcmFja2luZyB7IGZhbHNlIH07CisgICAgV2Vha1B0
cjxUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudD4gbV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVu
dDsKIH07CiAKIGNsYXNzIEluc3RhbmNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFr
ZVhSRGV2aWNlLmNwcAppbmRleCAyZmFkZjM5MzI1MDVkYTU0YWJlMTdkMTkxMmU0MDExOTIxYTQ5
NTc0Li5hNDdjMWVjYTdkZWRjZWRhNTA1MGFkOTdiYzQ3ZDg1NjViYTU5MGVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuY3BwCkBAIC0zOSw2ICszOSwxOCBAQCB2
b2lkIEZha2VYUlZpZXc6OnNldEZpZWxkT2ZWaWV3KEZha2VYUlZpZXdJbml0OjpGaWVsZE9mVmll
d0luaXQgZm92KQogICAgIG1fZm92ID0gZm92OwogfQogCit2b2lkIFNpbXVsYXRlZFhSRGV2aWNl
OjpzaW11bGF0ZVNodXRkb3duQ29tcGxldGVkKCkKK3sKKyAgICBpZiAobV90cmFja2luZ0FuZFJl
bmRlcmluZ0NsaWVudCkKKyAgICAgICAgbV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudC0+c2Vz
c2lvbkRpZEVuZCgpOworfQorCit2b2lkIFNpbXVsYXRlZFhSRGV2aWNlOjpzaHV0RG93blRyYWNr
aW5nQW5kUmVuZGVyaW5nKCkKK3sKKyAgICBpZiAobV9zdXBwb3J0c1NodXRkb3duTm90aWZpY2F0
aW9uKQorICAgICAgICBzaW11bGF0ZVNodXRkb3duQ29tcGxldGVkKCk7Cit9CisKIFdlYkZha2VY
UkRldmljZTo6V2ViRmFrZVhSRGV2aWNlKCkgPSBkZWZhdWx0OwogCiB2b2lkIFdlYkZha2VYUkRl
dmljZTo6c2V0Vmlld3MoY29uc3QgVmVjdG9yPEZha2VYUlZpZXdJbml0PiYgdmlld3MpCkBAIC0x
NTYsNiArMTY4LDE2IEBAIEV4Y2VwdGlvbk9yPFJlZjxGYWtlWFJWaWV3Pj4gV2ViRmFrZVhSRGV2
aWNlOjpwYXJzZVZpZXcoY29uc3QgRmFrZVhSVmlld0luaXQmIGluCiAgICAgcmV0dXJuIGZha2VW
aWV3OwogfQogCit2b2lkIFdlYkZha2VYUkRldmljZTo6c2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlm
aWNhdGlvbigpCit7CisgICAgbV9kZXZpY2Uuc2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlv
bih0cnVlKTsKK30KKwordm9pZCBXZWJGYWtlWFJEZXZpY2U6OnNpbXVsYXRlU2h1dGRvd24oKQor
eworICAgIG1fZGV2aWNlLnNpbXVsYXRlU2h1dGRvd25Db21wbGV0ZWQoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmgKaW5kZXggOTdhMWI5NTcxOWU3YjMyYmY4NDE0YmNm
YTM0ZDY5MGVkNzM2NzcwZi4uODQ3YmJjYjE3NDQ4NDQ4ZjBlYzdlOGNlYjFiNmZkNmU5ZmFjOTU4
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5oCkBAIC02OSwxNCAr
NjksMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Rmxvb3JPcmlnaW4oUmVmUHRyPFdlYlhSUmln
aWRUcmFuc2Zvcm0+JiYgb3JpZ2luKSB7IG1fZmxvb3JPcmlnaW4gPSBXVEZNb3ZlKG9yaWdpbik7
IH0KICAgICB2b2lkIHNldEVtdWxhdGVkUG9zaXRpb24oYm9vbCBlbXVsYXRlZCkgeyBtX2VtdWxh
dGVkUG9zaXRpb24gPSBlbXVsYXRlZDsgfQogICAgIFZlY3RvcjxSZWY8RmFrZVhSVmlldz4+JiB2
aWV3cygpIHsgcmV0dXJuIG1fdmlld3M7IH0KKyAgICB2b2lkIHNldFN1cHBvcnRzU2h1dGRvd25O
b3RpZmljYXRpb24oYm9vbCBzdXBwb3J0c1NodXRkb3duTm90aWZpY2F0aW9uKSB7IG1fc3VwcG9y
dHNTaHV0ZG93bk5vdGlmaWNhdGlvbiA9IHN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb247IH0K
KyAgICB2b2lkIHNpbXVsYXRlU2h1dGRvd25Db21wbGV0ZWQoKTsKIHByaXZhdGU6CiAgICAgdm9p
ZCBpbml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcoUGxhdGZvcm1YUjo6U2Vzc2lvbk1vZGUp
IGZpbmFsIHsgfQotICAgIHZvaWQgc2h1dERvd25UcmFja2luZ0FuZFJlbmRlcmluZygpIGZpbmFs
IHsgfQorICAgIHZvaWQgc2h1dERvd25UcmFja2luZ0FuZFJlbmRlcmluZygpIGZpbmFsOworICAg
IGJvb2wgc3VwcG9ydHNTZXNzaW9uU2h1dGRvd25Ob3RpZmljYXRpb24oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3N1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb247IH0KICAgICBPcHRpb25hbDxW
ZWN0b3I8RmFrZVhSQm91bmRzUG9pbnQ+PiBtX25hdGl2ZUJvdW5kc0dlb21ldHJ5OwogICAgIFJl
ZlB0cjxXZWJYUlJpZ2lkVHJhbnNmb3JtPiBtX3ZpZXdlck9yaWdpbjsKICAgICBSZWZQdHI8V2Vi
WFJSaWdpZFRyYW5zZm9ybT4gbV9mbG9vck9yaWdpbjsKICAgICBib29sIG1fZW11bGF0ZWRQb3Np
dGlvbiB7IGZhbHNlIH07CiAgICAgVmVjdG9yPFJlZjxGYWtlWFJWaWV3Pj4gbV92aWV3czsKKyAg
ICBib29sIG1fc3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbiB7IGZhbHNlIH07CiB9OwogCiBj
bGFzcyBXZWJGYWtlWFJEZXZpY2UgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJGYWtlWFJE
ZXZpY2U+IHsKQEAgLTEwNyw2ICsxMTEsMTAgQEAgcHVibGljOgogCiAgICAgU2ltdWxhdGVkWFJE
ZXZpY2UmIHNpbXVsYXRlZFhSRGV2aWNlKCkgeyByZXR1cm4gbV9kZXZpY2U7IH0KIAorICAgIHZv
aWQgc2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbigpOworCisgICAgdm9pZCBzaW11bGF0
ZVNodXRkb3duKCk7CisKIHByaXZhdGU6CiAgICAgV2ViRmFrZVhSRGV2aWNlKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmlkbAppbmRleCA5NDYyNTcxNmVkMDZi
ZTllMmQ5NjQ1MDA0MDIzYWM3NjExOWViNTNlLi5iM2Y4OTFmYzZiOTU4NTU5MWFlNDNkYmQzMzQx
MWU3N2I2MDY1YTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZha2VY
UkRldmljZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2Uu
aWRsCkBAIC02MCw0ICs2MCwxMCBAQAogCiAgIC8vIFVzZWQgdG8gY29ubmVjdCBhbmQgc2VuZCBp
bnB1dCBldmVudHMKICAgV2ViRmFrZVhSSW5wdXRDb250cm9sbGVyIHNpbXVsYXRlSW5wdXRTb3Vy
Y2VDb25uZWN0aW9uKEZha2VYUklucHV0U291cmNlSW5pdCBpbnB1dFNvdXJjZSk7CisKKyAgLy8g
U2V0IHVwIHRoZSBkZXZpY2Ugc28gaXQnbGwgbm90aWZ5IHNlc3Npb24gd2hlbiB0aGUgc3lzdGVt
IGhhcyBjb21wbGV0ZWQgYWxsIHN0ZXBzIGZvciBzZXNzaW9uIHNodXRkb3duCisgIHVuZGVmaW5l
ZCBzZXRTdXBwb3J0c1NodXRkb3duTm90aWZpY2F0aW9uKCk7CisKKyAgLy8gU2ltdWxhdGUgc2Vz
c2lvbiBzaHV0ZG93biB0cmlnZ2VyZWQgYnkgc3lzdGVtCisgIHVuZGVmaW5lZCBzaW11bGF0ZVNo
dXRkb3duKCk7CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU2ZmFkMGQ2OWU5YmZlZThhN2NlYzc2NzVlZmM2ZDZhYmZm
MWJkM2UuLjRlYjNkN2YyN2QxMzQ0OGUxYjllZGFhNzQ5MDU0YWVjYjE1NjBmYWIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNCBAQAorMjAyMS0wMS0yNiAgQWRhIENoYW4gIDxhZGEuY2hhbkBhcHBsZS5jb20+
CisKKyAgICAgICAgU2VuZCB0aGUgZW5kIFhSU2Vzc2lvbkV2ZW50IGFmdGVyIHRoZSBwbGF0Zm9y
bS1zcGVjaWZpYyBzdGVwcyBmb3Igc2Vzc2lvbiBzaHV0ZG93biBoYXZlIGNvbXBsZXRlZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwODM1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMv
d2VieHJfY2hlY2suaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC93cHQvd2VieHIvcmVzb3Vy
Y2VzL3dlYnhyX21hdGhfdXRpbHMuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhy
L3Jlc291cmNlcy93ZWJ4cl90ZXN0X2Fzc2VydHMuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
d3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50c19mYWtlX3dvcmxkLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdGVzdF9jb25z
dGFudHMuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4
cl91dGlsLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5k
X2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNlX3JlcG9ydHNfc2h1dGRvd24uaHR0cHMt
ZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC93cHQvd2VieHIveHJTZXNzaW9u
X2VuZGVkX2J5X3N5c3RlbS5odHRwcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC93
ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5k
Lmh0dHBzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9y
ZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorCiAyMDIxLTAx
LTI1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbcnVu
LXdlYmtpdC10ZXN0c10gU3VwcG9ydCBweXRob24gbGF5b3V0IHRlc3RzCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfY2hlY2suaHRtbCBiL0xh
eW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl9jaGVjay5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjJkOGU1YjM4N2RjODg1ODg5MjFjY2ZhNDlkZDE0ZGI1ODAwOTkwMGMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfY2hl
Y2suaHRtbApAQCAtMCwwICsxLDE3IEBACis8c2NyaXB0IHNyYz13ZWJ4cl91dGlsLmpzPjwvc2Ny
aXB0PgorPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKK2xldCBkZWZpbmVkT2JqZWN0cyA9IFtdOwor
bGV0IHVuZGVmaW5lZE9iamVjdHMgPSBbXTsKKworZm9yRWFjaFdlYnhyT2JqZWN0KChvYmosIG5h
bWUpID0+IHsKKyAgICBpZihvYmogPT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHVuZGVmaW5lZE9i
amVjdHMucHVzaChuYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWZpbmVkT2JqZWN0cy5w
dXNoKG5hbWUpOworICAgIH0KK30pOworCit3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsgdW5k
ZWZpbmVkT2JqZWN0cywgZGVmaW5lZE9iamVjdHN9LCAnKicpOworCis8L3NjcmlwdD4KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3dwdC93
ZWJ4ci9yZXNvdXJjZXMvd2VieHJfbWF0aF91dGlscy5qcyBiL0xheW91dFRlc3RzL2h0dHAvd3B0
L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl9tYXRoX3V0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNTVmYjcy
OTc4NjkwNDI3YWFjMzhiODRkMWVhYzI0ZTgzOGQwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfbWF0aF91dGlscy5qcwpAQCAt
MCwwICsxLDYxIEBACisvLyB8bWF0cml4fCAtIEZsb2F0MzJBcnJheSwgfGlucHV0fCAtIHBvaW50
LWxpa2UgZGljdCAobXVzdCBoYXZlIHgsIHksIHosIHcpCitsZXQgdHJhbnNmb3JtX3BvaW50X2J5
X21hdHJpeCA9IGZ1bmN0aW9uKG1hdHJpeCwgaW5wdXQpIHsKKyAgcmV0dXJuIHsKKyAgICB4IDog
bWF0cml4WzBdICogaW5wdXQueCArIG1hdHJpeFs0XSAqIGlucHV0LnkgKyBtYXRyaXhbOF0gKiBp
bnB1dC56ICsgbWF0cml4WzEyXSAqIGlucHV0LncsCisgICAgeSA6IG1hdHJpeFsxXSAqIGlucHV0
LnggKyBtYXRyaXhbNV0gKiBpbnB1dC55ICsgbWF0cml4WzldICogaW5wdXQueiArIG1hdHJpeFsx
M10gKiBpbnB1dC53LAorICAgIHogOiBtYXRyaXhbMl0gKiBpbnB1dC54ICsgbWF0cml4WzZdICog
aW5wdXQueSArIG1hdHJpeFsxMF0gKiBpbnB1dC56ICsgbWF0cml4WzE0XSAqIGlucHV0LncsCisg
ICAgdyA6IG1hdHJpeFszXSAqIGlucHV0LnggKyBtYXRyaXhbN10gKiBpbnB1dC55ICsgbWF0cml4
WzExXSAqIGlucHV0LnogKyBtYXRyaXhbMTVdICogaW5wdXQudywKKyAgfTsKK30KKworLy8gQ3Jl
YXRlcyBhIHVuaXQtbGVuZ3RoIHF1YXRlcm5pb24uCisvLyB8aW5wdXR8IC0gcG9pbnQtbGlrZSBk
aWN0IChtdXN0IGhhdmUgeCwgeSwgeiwgdykKK2xldCBub3JtYWxpemVfcXVhdGVybmlvbiA9IGZ1
bmN0aW9uKGlucHV0KSB7CisgIGNvbnN0IGxlbmd0aF9zcXVhcmVkID0gaW5wdXQueCAqIGlucHV0
LnggKyBpbnB1dC55ICogaW5wdXQueSArIGlucHV0LnogKiBpbnB1dC56ICsgaW5wdXQudyAqIGlu
cHV0Lnc7CisgIGNvbnN0IGxlbmd0aCA9IE1hdGguc3FydChsZW5ndGhfc3F1YXJlZCk7CisKKyAg
cmV0dXJuIHt4IDogaW5wdXQueCAvIGxlbmd0aCwgeSA6IGlucHV0LnkgLyBsZW5ndGgsIHogOiBp
bnB1dC56IC8gbGVuZ3RoLCB3IDogaW5wdXQudyAvIGxlbmd0aH07Cit9CisKKy8vIHxpbnB1dHwg
LSBwb2ludC1saWtlIGRpY3QgKG11c3QgaGF2ZSB4LCB5LCB6LCB3KQorbGV0IGNvbmp1Z2F0ZV9x
dWF0ZXJuaW9uID0gZnVuY3Rpb24oaW5wdXQpIHsKKyAgcmV0dXJuIHt4IDogLWlucHV0LngsIHkg
OiAtaW5wdXQueSwgeiA6IC1pbnB1dC56LCB3IDogaW5wdXQud307Cit9CisKK2xldCBtdWx0aXBs
eV9xdWF0ZXJuaW9ucyA9IGZ1bmN0aW9uKHExLCBxMikgeworICByZXR1cm4geworICAgIHcgOiBx
MS53ICogcTIudyAtIHExLnggKiBxMi54IC0gcTEueSAqIHEyLnkgLSBxMS56ICogcTIueiwKKyAg
ICB4IDogcTEudyAqIHEyLnggKyBxMS54ICogcTIudyArIHExLnkgKiBxMi56IC0gcTEueiAqIHEy
LnksCisgICAgeSA6IHExLncgKiBxMi55IC0gcTEueCAqIHEyLnogKyBxMS55ICogcTIudyArIHEx
LnogKiBxMi54LAorICAgIHogOiBxMS53ICogcTIueiArIHExLnggKiBxMi55IC0gcTEueSAqIHEy
LnggKyBxMS56ICogcTIudywKKyAgfQorfQorCisvLyB8cG9pbnR8IC0gcG9pbnQtbGlrZSBkaWN0
IChtdXN0IGhhdmUgeCwgeSwgeiwgdykKK2xldCBub3JtYWxpemVfcGVyc3BlY3RpdmUgPSBmdW5j
dGlvbihwb2ludCkgeworICBpZihwb2ludC53ID09IDAgfHwgcG9pbnQudyA9PSAxKSByZXR1cm4g
cG9pbnQ7CisKKyAgcmV0dXJuIHsKKyAgICB4IDogcG9pbnQueCAvIHBvaW50LncsCisgICAgeSA6
IHBvaW50LnkgLyBwb2ludC53LAorICAgIHogOiBwb2ludC56IC8gcG9pbnQudywKKyAgICB3IDog
MQorICB9OworfQorCisvLyB8cXVhdGVybmlvbnwgLSBwb2ludC1saWtlIGRpY3QgKG11c3QgaGF2
ZSB4LCB5LCB6LCB3KSwKKy8vIHxpbnB1dHwgLSBwb2ludC1saWtlIGRpY3QgKG11c3QgaGF2ZSB4
LCB5LCB6LCB3KQorbGV0IHRyYW5zZm9ybV9wb2ludF9ieV9xdWF0ZXJuaW9uID0gZnVuY3Rpb24o
cXVhdGVybmlvbiwgaW5wdXQpIHsKKyAgY29uc3QgcV9ub3JtYWxpemVkID0gbm9ybWFsaXplX3F1
YXRlcm5pb24ocXVhdGVybmlvbik7CisgIGNvbnN0IHFfY29uaiA9IGNvbmp1Z2F0ZV9xdWF0ZXJu
aW9uKHFfbm9ybWFsaXplZCk7CisgIGNvbnN0IHBfaW4gPSBub3JtYWxpemVfcGVyc3BlY3RpdmUo
aW5wdXQpOworCisgIC8vIGNvbnN0cnVjdCBhIHF1YXRlcm5pb24gb3V0IG9mIHRoZSBwb2ludCAo
dGFrZSB4eXogJiB6ZXJvIHRoZSByZWFsIHBhcnQpLgorICBjb25zdCBwID0ge3ggOiBwX2luLngs
IHkgOiBwX2luLnksIHogOiBwX2luLnosIHcgOiAwfTsKKworICAvLyB0cmFuc2Zvcm0gdGhlIGlu
cHV0IHBvaW50CisgIGNvbnN0IHBfbXVsID0gbXVsdGlwbHlfcXVhdGVybmlvbnMoIHFfbm9ybWFs
aXplZCwgbXVsdGlwbHlfcXVhdGVybmlvbnMocCwgcV9jb25qKSApOworCisgIC8vIGFkZCBiYWNr
IHRoZSB3IGNvbXBvbmVudCBvZiB0aGUgaW5wdXQKKyAgcmV0dXJuIHsgeCA6IHBfbXVsLngsIHkg
OiBwX211bC55LCB6IDogcF9tdWwueiwgdyA6IHBfaW4udyB9OworfQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3Rlc3RfYXNzZXJ0cy5qcyBi
L0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2Fzc2VydHMu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzhmMTM2NGNlMDNjZTk2ODkwY2RhOTdkY2MyMjZiOGU0NzJkZDMzMgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93
ZWJ4cl90ZXN0X2Fzc2VydHMuanMKQEAgLTAsMCArMSwxNTkgQEAKKy8vIFV0aWxpdHkgYXNzZXJ0
IGZ1bmN0aW9ucy4KKy8vIFJlbGllcyBvbiByZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMgdG8gYmUg
aW5jbHVkZWQgYmVmb3JlIHRoaXMgZmlsZS4KKy8vIFJlbGllcyBvbiB3ZWJ4cl90ZXN0X2NvbnN0
YW50cy5qcyB0byBiZSBpbmNsdWRlZCBiZWZvcmUgdGhpcyBmaWxlLgorCisvLyB8cDF8LCB8cDJ8
IC0gb2JqZWN0cyB3aXRoIHgsIHksIHosIHcgY29tcG9uZW50cyB0aGF0IGFyZSBmbG9hdGluZyBw
b2ludCBudW1iZXJzCisvLyB8ZXBzaWxvbnwgLSBmbG9hdCBzcGVjaWZ5aW5nIHByZWNpc2lvbgor
Ly8gfHByZWZpeHwgLSBzdHJpbmcgdXNlZCBhcyBhIHByZWZpeCBmb3IgbG9nZ2luZworY29uc3Qg
YXNzZXJ0X3BvaW50X2FwcHJveF9lcXVhbHMgPSBmdW5jdGlvbihwMSwgcDIsIGVwc2lsb24gPSBG
TE9BVF9FUFNJTE9OLCBwcmVmaXggPSAiIikgeworICBpZiAocDEgPT0gbnVsbCAmJiBwMiA9PSBu
dWxsKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgYXNzZXJ0X25vdF9lcXVhbHMocDEsIG51bGws
IHByZWZpeCArICJwMSBtdXN0IGJlIG5vbi1udWxsIik7CisgIGFzc2VydF9ub3RfZXF1YWxzKHAy
LCBudWxsLCBwcmVmaXggKyAicDIgbXVzdCBiZSBub24tbnVsbCIpOworCisgIGxldCBtaXNtYXRj
aGVkX2NvbXBvbmVudCA9IG51bGw7CisgIGZvciAoY29uc3QgdiBvZiBbJ3gnLCAneScsICd6Jywg
J3cnXSkgeworICAgIGlmIChNYXRoLmFicyhwMVt2XSAtIHAyW3ZdKSA+IGVwc2lsb24pIHsKKyAg
ICAgIG1pc21hdGNoZWRfY29tcG9uZW50ID0gdjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQor
CisgIGlmIChtaXNtYXRjaGVkX2NvbXBvbmVudCAhPT0gbnVsbCkgeworICAgIGxldCBlcnJvcl9t
ZXNzYWdlID0gcHJlZml4ICsgJyBQb2ludCBjb21wYXJpc29uIGZhaWxlZC5cbic7CisgICAgZXJy
b3JfbWVzc2FnZSArPSBgIHAxOiB7eDogJHtwMS54fSwgeTogJHtwMS55fSwgejogJHtwMS56fSwg
dzogJHtwMS53fX1cbmA7CisgICAgZXJyb3JfbWVzc2FnZSArPSBgIHAyOiB7eDogJHtwMi54fSwg
eTogJHtwMi55fSwgejogJHtwMi56fSwgdzogJHtwMi53fX1cbmA7CisgICAgZXJyb3JfbWVzc2Fn
ZSArPSBgIERpZmZlcmVuY2UgaW4gY29tcG9uZW50ICR7bWlzbWF0Y2hlZF9jb21wb25lbnR9IGV4
Y2VlZGVkIHRoZSBnaXZlbiBlcHNpbG9uLlxuYDsKKyAgICBhc3NlcnRfYXBwcm94X2VxdWFscyhw
MlttaXNtYXRjaGVkX2NvbXBvbmVudF0sIHAxW21pc21hdGNoZWRfY29tcG9uZW50XSwgZXBzaWxv
biwgZXJyb3JfbWVzc2FnZSk7CisgIH0KK307CisKKy8vIHxwMXwsIHxwMnwgLSBvYmplY3RzIHdp
dGggeCwgeSwgeiwgdyBjb21wb25lbnRzIHRoYXQgYXJlIGZsb2F0aW5nIHBvaW50IG51bWJlcnMK
Ky8vIHxlcHNpbG9ufCAtIGZsb2F0IHNwZWNpZnlpbmcgcHJlY2lzaW9uCisvLyB8cHJlZml4fCAt
IHN0cmluZyB1c2VkIGFzIGEgcHJlZml4IGZvciBsb2dnaW5nCitjb25zdCBhc3NlcnRfcG9pbnRf
c2lnbmlmaWNhbnRseV9ub3RfZXF1YWxzID0gZnVuY3Rpb24ocDEsIHAyLCBlcHNpbG9uID0gRkxP
QVRfRVBTSUxPTiwgcHJlZml4ID0gIiIpIHsKKworICBhc3NlcnRfbm90X2VxdWFscyhwMSwgbnVs
bCwgcHJlZml4ICsgInAxIG11c3QgYmUgbm9uLW51bGwiKTsKKyAgYXNzZXJ0X25vdF9lcXVhbHMo
cDIsIG51bGwsIHByZWZpeCArICJwMiBtdXN0IGJlIG5vbi1udWxsIik7CisKKyAgbGV0IG1pc21h
dGNoZWRfY29tcG9uZW50ID0gbnVsbDsKKyAgZm9yIChjb25zdCB2IG9mIFsneCcsICd5JywgJ3on
LCAndyddKSB7CisgICAgaWYgKE1hdGguYWJzKHAxW3ZdIC0gcDJbdl0pID4gZXBzaWxvbikgewor
ICAgICAgbWlzbWF0Y2hlZF9jb21wb25lbnQgPSB2OworICAgICAgYnJlYWs7CisgICAgfQorICB9
CisKKyAgaWYgKG1pc21hdGNoZWRfY29tcG9uZW50ID09PSBudWxsKSB7CisgICAgbGV0IGVycm9y
X21lc3NhZ2UgPSBwcmVmaXggKyAnIFBvaW50IGNvbXBhcmlzb24gZmFpbGVkLlxuJzsKKyAgICBl
cnJvcl9tZXNzYWdlICs9IGAgcDE6IHt4OiAke3AxLnh9LCB5OiAke3AxLnl9LCB6OiAke3AxLnp9
LCB3OiAke3AxLnd9fVxuYDsKKyAgICBlcnJvcl9tZXNzYWdlICs9IGAgcDI6IHt4OiAke3AyLnh9
LCB5OiAke3AyLnl9LCB6OiAke3AyLnp9LCB3OiAke3AyLnd9fVxuYDsKKyAgICBlcnJvcl9tZXNz
YWdlICs9IGAgRGlmZmVyZW5jZSBpbiBjb21wb25lbnRzIGRpZCBub3QgZXhjZWVkZWQgdGhlIGdp
dmVuIGVwc2lsb24uXG5gOworICAgIGFzc2VydF91bnJlYWNoZWQoZXJyb3JfbWVzc2FnZSk7Cisg
IH0KK307CisKKy8vIHx0MXwsIHx0MnwgLSBvYmplY3RzIGNvbnRhaW5pbmcgcG9zaXRpb24gYW5k
IG9yaWVudGF0aW9uLgorLy8gfGVwc2lsb258IC0gZmxvYXQgc3BlY2lmeWluZyBwcmVjaXNpb24K
Ky8vIHxwcmVmaXh8IC0gc3RyaW5nIHVzZWQgYXMgYSBwcmVmaXggZm9yIGxvZ2dpbmcKK2NvbnN0
IGFzc2VydF90cmFuc2Zvcm1fYXBwcm94X2VxdWFscyA9IGZ1bmN0aW9uKHQxLCB0MiwgZXBzaWxv
biA9IEZMT0FUX0VQU0lMT04sIHByZWZpeCA9ICIiKSB7CisgIGlmICh0MSA9PSBudWxsICYmIHQy
ID09IG51bGwpIHsKKyAgICByZXR1cm47CisgIH0KKworICBhc3NlcnRfbm90X2VxdWFscyh0MSwg
bnVsbCwgcHJlZml4ICsgInQxIG11c3QgYmUgbm9uLW51bGwiKTsKKyAgYXNzZXJ0X25vdF9lcXVh
bHModDIsIG51bGwsIHByZWZpeCArICJ0MiBtdXN0IGJlIG5vbi1udWxsIik7CisKKyAgYXNzZXJ0
X3BvaW50X2FwcHJveF9lcXVhbHModDEucG9zaXRpb24sIHQyLnBvc2l0aW9uLCBlcHNpbG9uLCBw
cmVmaXggKyAicG9zaXRpb25zIG11c3QgYmUgZXF1YWwiKTsKKyAgYXNzZXJ0X3BvaW50X2FwcHJv
eF9lcXVhbHModDEub3JpZW50YXRpb24sIHQyLm9yaWVudGF0aW9uLCBlcHNpbG9uLCBwcmVmaXgg
KyAib3JpZW50YXRpb25zIG11c3QgYmUgZXF1YWwiKTsKK307CisKKy8vIHxtMXwsIHxtMnwgLSBh
cnJheXMgb2YgZmxvYXRpbmcgcG9pbnQgbnVtYmVycworLy8gfGVwc2lsb258IC0gZmxvYXQgc3Bl
Y2lmeWluZyBwcmVjaXNpb24KKy8vIHxwcmVmaXh8IC0gc3RyaW5nIHVzZWQgYXMgYSBwcmVmaXgg
Zm9yIGxvZ2dpbmcKK2NvbnN0IGFzc2VydF9tYXRyaXhfYXBwcm94X2VxdWFscyA9IGZ1bmN0aW9u
KG0xLCBtMiwgZXBzaWxvbiA9IEZMT0FUX0VQU0lMT04sIHByZWZpeCA9ICIiKSB7CisgIGlmICht
MSA9PSBudWxsICYmIG0yID09IG51bGwpIHsKKyAgICByZXR1cm47CisgIH0KKworICBhc3NlcnRf
bm90X2VxdWFscyhtMSwgbnVsbCwgcHJlZml4ICsgIm0xIG11c3QgYmUgbm9uLW51bGwiKTsKKyAg
YXNzZXJ0X25vdF9lcXVhbHMobTIsIG51bGwsIHByZWZpeCArICJtMiBtdXN0IGJlIG5vbi1udWxs
Iik7CisKKyAgYXNzZXJ0X2VxdWFscyhtMS5sZW5ndGgsIDE2LCBwcmVmaXggKyAibTEgbXVzdCBo
YXZlIGxlbmd0aCBvZiAxNiIpOworICBhc3NlcnRfZXF1YWxzKG0yLmxlbmd0aCwgMTYsIHByZWZp
eCArICJtMiBtdXN0IGhhdmUgbGVuZ3RoIG9mIDE2Iik7CisKKyAgbGV0IG1pc21hdGNoZWRfZWxl
bWVudCA9IC0xOworICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAgICBpZiAoTWF0
aC5hYnMobTFbaV0gLSBtMltpXSkgPiBlcHNpbG9uKSB7CisgICAgICBtaXNtYXRjaGVkX2VsZW1l
bnQgPSBpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgaWYgKG1pc21hdGNoZWRfZWxl
bWVudCA+IC0xKSB7CisgICAgbGV0IGVycm9yX21lc3NhZ2UgPSBwcmVmaXggKyAnTWF0cml4IGNv
bXBhcmlzb24gZmFpbGVkLlxuJzsKKyAgICBlcnJvcl9tZXNzYWdlICs9ICcgRGlmZmVyZW5jZSBp
biBlbGVtZW50ICcgKyBtaXNtYXRjaGVkX2VsZW1lbnQgKworICAgICAgICAnIGV4Y2VlZGVkIHRo
ZSBnaXZlbiBlcHNpbG9uLlxuJzsKKworICAgIGVycm9yX21lc3NhZ2UgKz0gJyBNYXRyaXggMTog
WycgKyBtMS5qb2luKCcsJykgKyAnXVxuJzsKKyAgICBlcnJvcl9tZXNzYWdlICs9ICcgTWF0cml4
IDI6IFsnICsgbTIuam9pbignLCcpICsgJ11cbic7CisKKyAgICBhc3NlcnRfYXBwcm94X2VxdWFs
cygKKyAgICAgICAgbTFbbWlzbWF0Y2hlZF9lbGVtZW50XSwgbTJbbWlzbWF0Y2hlZF9lbGVtZW50
XSwgZXBzaWxvbiwKKyAgICAgICAgZXJyb3JfbWVzc2FnZSk7CisgIH0KK307CisKKy8vIHxtMXws
IHxtMnwgLSBhcnJheXMgb2YgZmxvYXRpbmcgcG9pbnQgbnVtYmVycworLy8gfGVwc2lsb258IC0g
ZmxvYXQgc3BlY2lmeWluZyBwcmVjaXNpb24KKy8vIHxwcmVmaXh8IC0gc3RyaW5nIHVzZWQgYXMg
YSBwcmVmaXggZm9yIGxvZ2dpbmcKK2NvbnN0IGFzc2VydF9tYXRyaXhfc2lnbmlmaWNhbnRseV9u
b3RfZXF1YWxzID0gZnVuY3Rpb24obTEsIG0yLCBlcHNpbG9uID0gRkxPQVRfRVBTSUxPTiwgcHJl
Zml4ID0gIiIpIHsKKyAgaWYgKG0xID09IG51bGwgJiYgbTIgPT0gbnVsbCkgeworICAgIHJldHVy
bjsKKyAgfQorCisgIGFzc2VydF9ub3RfZXF1YWxzKG0xLCBudWxsLCBwcmVmaXggKyAibTEgbXVz
dCBiZSBub24tbnVsbCIpOworICBhc3NlcnRfbm90X2VxdWFscyhtMiwgbnVsbCwgcHJlZml4ICsg
Im0yIG11c3QgYmUgbm9uLW51bGwiKTsKKworICBhc3NlcnRfZXF1YWxzKG0xLmxlbmd0aCwgMTYs
IHByZWZpeCArICJtMSBtdXN0IGhhdmUgbGVuZ3RoIG9mIDE2Iik7CisgIGFzc2VydF9lcXVhbHMo
bTIubGVuZ3RoLCAxNiwgcHJlZml4ICsgIm0yIG11c3QgaGF2ZSBsZW5ndGggb2YgMTYiKTsKKwor
ICBsZXQgbWlzbWF0Y2ggPSBmYWxzZTsKKyAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7
CisgICAgaWYgKE1hdGguYWJzKG0xW2ldIC0gbTJbaV0pID4gZXBzaWxvbikgeworICAgICAgbWlz
bWF0Y2ggPSB0cnVlOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgaWYgKCFtaXNtYXRj
aCkgeworICAgIGxldCBtMV9zdHIgPSAnWyc7CisgICAgbGV0IG0yX3N0ciA9ICdbJzsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAgICAgIG0xX3N0ciArPSBtMVtpXSArIChp
IDwgMTUgPyAnLCAnIDogJycpOworICAgICAgbTJfc3RyICs9IG0yW2ldICsgKGkgPCAxNSA/ICcs
ICcgOiAnJyk7CisgICAgfQorICAgIG0xX3N0ciArPSAnXSc7CisgICAgbTJfc3RyICs9ICddJzsK
KworICAgIGxldCBlcnJvcl9tZXNzYWdlID0gcHJlZml4ICsgJ01hdHJpeCBjb21wYXJpc29uIGZh
aWxlZC5cbic7CisgICAgZXJyb3JfbWVzc2FnZSArPQorICAgICAgICAnIE5vIGVsZW1lbnQgZXhj
ZWVkZWQgdGhlIGdpdmVuIGVwc2lsb24gJyArIGVwc2lsb24gKyAnLlxuJzsKKworICAgIGVycm9y
X21lc3NhZ2UgKz0gJyBNYXRyaXggQTogJyArIG0xX3N0ciArICdcbic7CisgICAgZXJyb3JfbWVz
c2FnZSArPSAnIE1hdHJpeCBCOiAnICsgbTJfc3RyICsgJ1xuJzsKKworICAgIGFzc2VydF91bnJl
YWNoZWQoZXJyb3JfbWVzc2FnZSk7CisgIH0KK307CisKKy8vIHxyMXwsIHxyMnwgLSBYUlJheSBv
YmplY3RzCisvLyB8ZXBzaWxvbnwgLSBmbG9hdCBzcGVjaWZ5aW5nIHByZWNpc2lvbgorLy8gfHBy
ZWZpeHwgLSBzdHJpbmcgdXNlZCBhcyBhIHByZWZpeCBmb3IgbG9nZ2luZworY29uc3QgYXNzZXJ0
X3JheV9hcHByb3hfZXF1YWxzID0gZnVuY3Rpb24ocjEsIHIyLCBlcHNpbG9uID0gRkxPQVRfRVBT
SUxPTiwgcHJlZml4ID0gIiIpIHsKKyAgYXNzZXJ0X3BvaW50X2FwcHJveF9lcXVhbHMocjEub3Jp
Z2luLCByMi5vcmlnaW4sIGVwc2lsb24sIHByZWZpeCArICJvcmlnaW46Iik7CisgIGFzc2VydF9w
b2ludF9hcHByb3hfZXF1YWxzKHIxLmRpcmVjdGlvbiwgcjIuZGlyZWN0aW9uLCBlcHNpbG9uLCBw
cmVmaXggKyAiZGlyZWN0aW9uOiIpOworICBhc3NlcnRfbWF0cml4X2FwcHJveF9lcXVhbHMocjEu
bWF0cml4LCByMi5tYXRyaXgsIGVwc2lsb24sIHByZWZpeCArICJtYXRyaXg6Iik7Cit9OwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3Rlc3Rf
Y29uc3RhbnRzLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhy
X3Rlc3RfY29uc3RhbnRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzOWFiNzc1Njg0YzQyN2UzOWJjNTA3MTky
MjZjOTZmY2JkM2E1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93
ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdGVzdF9jb25zdGFudHMuanMKQEAgLTAsMCArMSwxNzMgQEAK
Ky8vIGFzc2VydF9lcXVhbHMgY2FuIGZhaWwgd2hlbiBjb21wYXJpbmcgZmxvYXRzIGR1ZSB0byBw
cmVjaXNpb24gZXJyb3JzLCBzbworLy8gdXNlIGFzc2VydF9hcHByb3hfZXF1YWxzIHdpdGggdGhp
cyBjb25zdGFudCBpbnN0ZWFkCitjb25zdCBGTE9BVF9FUFNJTE9OID0gMC4wMDE7CisKKy8vIElk
ZW50aXR5IG1hdHJpeAorY29uc3QgSURFTlRJVFlfTUFUUklYID0gWzEsIDAsIDAsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDFdOworCitj
b25zdCBJREVOVElUWV9UUkFOU0ZPUk0gPSB7CisgICAgcG9zaXRpb246IFswLCAwLCAwXSwKKyAg
ICBvcmllbnRhdGlvbjogWzAsIDAsIDAsIDFdLAorfTsKKworLy8gQSB2YWxpZCBwb3NlIG1hdHJp
eC90cmFuc2Zvcm0gZm9yICB3aGVuIHdlIGRvbid0IGNhcmUgYWJvdXQgc3BlY2lmaWMgdmFsdWVz
CisvLyBOb3RlIHRoYXQgdGhlc2UgdHdvIHNob3VsZCBiZSBpZGVudGljYWwsIGp1c3QgZGlmZmVy
ZW50IHJlcHJlc2VudGF0aW9ucworY29uc3QgVkFMSURfUE9TRV9NQVRSSVggPSBbMCwgMSwgMCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwg
MSwgMSwgMV07CisKK2NvbnN0IFZBTElEX1BPU0VfVFJBTlNGT1JNID0geworICAgIHBvc2l0aW9u
OiBbMSwgMSwgMV0sCisgICAgb3JpZW50YXRpb246IFswLjUsIDAuNSwgMC41LCAwLjVdCit9Owor
Citjb25zdCBWQUxJRF9QUk9KRUNUSU9OX01BVFJJWCA9CisgICAgWzEsIDAsIDAsIDAsIDAsIDEs
IDAsIDAsIDMsIDIsIC0xLCAtMSwgMCwgMCwgLTAuMiwgMF07CisKKy8vIFRoaXMgaXMgYSBkZWNv
bXBvc2VkIHZlcnNpb24gb2YgdGhlIGFib3ZlLgorY29uc3QgVkFMSURfRklFTERfT0ZfVklFVyA9
IHsKKyAgICB1cERlZ3JlZXM6IDcxLjU2NSwKKyAgICBkb3duRGVncmVlczogLTQ1LAorICAgIGxl
ZnREZWdyZWVzOi02My40MzQ5LAorICAgIHJpZ2h0RGVncmVlczogNzUuOTYzNworfTsKKworLy8g
QSB2YWxpZCBpbnB1dCBncmlwIG1hdHJpeCBmb3IgIHdoZW4gd2UgZG9uJ3QgY2FyZSBhYm91dCBz
cGVjaWZpYyB2YWx1ZXMKK2NvbnN0IFZBTElEX0dSSVAgPSBbMSwgMCwgMCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgMCwgMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwK
KyAgICAgICAgICAgICAgICAgICAgNCwgMywgMiwgMV07CisKK2NvbnN0IFZBTElEX0dSSVBfVFJB
TlNGT1JNID0geworICAgIHBvc2l0aW9uOiBbNCwgMywgMl0sCisgICAgb3JpZW50YXRpb246IFsw
LCAwLCAwLCAxXQorfTsKKworLy8gQSB2YWxpZCBpbnB1dCBwb2ludGVyIG9mZnNldCBmb3IgIHdo
ZW4gd2UgZG9uJ3QgY2FyZSBhYm91dCBzcGVjaWZpYyB2YWx1ZXMKK2NvbnN0IFZBTElEX1BPSU5U
RVIgPSBbMSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
MCwgMCwgMSwgMV07CisKK2NvbnN0IFZBTElEX1BPSU5URVJfVFJBTlNGT1JNID0geworICAgIHBv
c2l0aW9uOiBbMCwgMCwgMV0sCisgICAgb3JpZW50YXRpb246IFswLCAwLCAwLCAxXQorfTsKKwor
Ly8gQSBWYWxpZCBMb2NhbCB0byBmbG9vciBtYXRyaXgvdHJhbnNmb3JtIGZvciB3aGVuIHdlIGRv
bid0IGNhcmUgYWJvdXQgc3BlY2lmaWMKKy8vIHZhbHVlcy4gIE5vdGUgdGhhdCB0aGVzZSBzaG91
bGQgYmUgaWRlbnRpY2FsLCBqdXN0IGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMuCitjb25zdCBW
QUxJRF9GTE9PUl9PUklHSU5fTUFUUklYID0gWzEsIDAsICAgIDAsICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsICAgIDAsICAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICAgIDEsICAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEsIDEuNjUsIC0xLCAxXTsKKworY29uc3QgVkFMSURfRkxPT1Jf
T1JJR0lOID0geworICAgIHBvc2l0aW9uOiBbLTEuMCwgLTEuNjUsIDEuMF0sCisgICAgb3JpZW50
YXRpb246IFswLCAwLCAwLCAxXQorfTsKKworY29uc3QgVkFMSURfQk9VTkRTID0gWworICAgIHsg
eDogMy4wLCB6OiAtMi4wIH0sCisgICAgeyB4OiAzLjUsIHo6IDAuMCB9LAorICAgIHsgeDogMy4w
LCB6OiAyLjAgfSwKKyAgICB7IHg6IC0zLjAsIHo6IDIuMCB9LAorICAgIHsgeDogLTMuNSwgejog
MC4wIH0sCisgICAgeyB4OiAtMy4wLCB6OiAtMi4wIH0KK107CisKK2NvbnN0IFZBTElEX1JFU09M
VVRJT04gPSB7CisgICAgd2lkdGg6IDIwMCwKKyAgICBoZWlnaHQ6IDIwMAorfTsKKworY29uc3Qg
TEVGVF9PRkZTRVQgPSB7CisgICAgcG9zaXRpb246IFstMC4xLCAwLCAwXSwKKyAgICBvcmllbnRh
dGlvbjogWzAsIDAsIDAsIDFdCit9OworCitjb25zdCBSSUdIVF9PRkZTRVQgPSB7CisgICAgcG9z
aXRpb246IFswLjEsIDAsIDBdLAorICAgIG9yaWVudGF0aW9uOiBbMCwgMCwgMCwgMV0KK307CisK
K2NvbnN0IFZBTElEX1ZJRVdTID0gW3sKKyAgICAgICAgZXllOiJsZWZ0IiwKKyAgICAgICAgcHJv
amVjdGlvbk1hdHJpeDogVkFMSURfUFJPSkVDVElPTl9NQVRSSVgsCisgICAgICAgIHZpZXdPZmZz
ZXQ6IExFRlRfT0ZGU0VULAorICAgICAgICByZXNvbHV0aW9uOiBWQUxJRF9SRVNPTFVUSU9OCisg
ICAgfSwgeworICAgICAgICBleWU6InJpZ2h0IiwKKyAgICAgICAgcHJvamVjdGlvbk1hdHJpeDog
VkFMSURfUFJPSkVDVElPTl9NQVRSSVgsCisgICAgICAgIHZpZXdPZmZzZXQ6IFJJR0hUX09GRlNF
VCwKKyAgICAgICAgcmVzb2x1dGlvbjogVkFMSURfUkVTT0xVVElPTgorICAgIH0sCitdOworCitj
b25zdCBOT05fSU1NRVJTSVZFX1ZJRVdTID0gW3sKKyAgICAgICAgZXllOiAibm9uZSIsCisgICAg
ICAgIHByb2plY3Rpb25NYXRyaXg6IFZBTElEX1BST0pFQ1RJT05fTUFUUklYLAorICAgICAgICB2
aWV3T2Zmc2V0OiBJREVOVElUWV9UUkFOU0ZPUk0sCisgICAgICAgIHJlc29sdXRpb246IFZBTElE
X1JFU09MVVRJT04sCisgICAgfQorXTsKKworY29uc3QgQUxMX0ZFQVRVUkVTID0gWworICAndmll
d2VyJywKKyAgJ2xvY2FsJywKKyAgJ2xvY2FsLWZsb29yJywKKyAgJ2JvdW5kZWQtZmxvb3InLAor
ICAndW5ib3VuZGVkJywKKyAgJ2hpdC10ZXN0JywKKyAgJ2RvbS1vdmVybGF5JywKKyAgJ2xpZ2h0
LWVzdGltYXRpb24nLAorICAnYW5jaG9ycycsCitdOworCitjb25zdCBUUkFDS0VEX0lNTUVSU0lW
RV9ERVZJQ0UgPSB7CisgICAgc3VwcG9ydHNJbW1lcnNpdmU6IHRydWUsCisgICAgc3VwcG9ydGVk
TW9kZXM6IFsgImlubGluZSIsICJpbW1lcnNpdmUtdnIiXSwKKyAgICB2aWV3czogVkFMSURfVklF
V1MsCisgICAgdmlld2VyT3JpZ2luOiBJREVOVElUWV9UUkFOU0ZPUk0sCisgICAgc3VwcG9ydGVk
RmVhdHVyZXM6IEFMTF9GRUFUVVJFUworfTsKKworY29uc3QgSU1NRVJTSVZFX0FSX0RFVklDRSA9
IHsKKyAgc3VwcG9ydHNJbW1lcnNpdmU6IHRydWUsCisgIHN1cHBvcnRlZE1vZGVzOiBbICJpbmxp
bmUiLCAiaW1tZXJzaXZlLWFyIl0sCisgIHZpZXdzOiBWQUxJRF9WSUVXUywKKyAgdmlld2VyT3Jp
Z2luOiBJREVOVElUWV9UUkFOU0ZPUk0sCisgIHN1cHBvcnRlZEZlYXR1cmVzOiBBTExfRkVBVFVS
RVMKK307CisKK2NvbnN0IFZBTElEX05PTl9JTU1FUlNJVkVfREVWSUNFID0geworICAgIHN1cHBv
cnRzSW1tZXJzaXZlOiBmYWxzZSwKKyAgICBzdXBwb3J0ZWRNb2RlczogWyJpbmxpbmUiXSwKKyAg
ICB2aWV3czogTk9OX0lNTUVSU0lWRV9WSUVXUywKKyAgICB2aWV3ZXJPcmlnaW46IElERU5USVRZ
X1RSQU5TRk9STSwKKyAgICBzdXBwb3J0ZWRGZWF0dXJlczogQUxMX0ZFQVRVUkVTCit9OworCitj
b25zdCBWQUxJRF9DT05UUk9MTEVSID0geworICAgIGhhbmRlZG5lc3M6ICJub25lIiwKKyAgICB0
YXJnZXRSYXlNb2RlOiAidHJhY2tlZC1wb2ludGVyIiwKKyAgICBwb2ludGVyT3JpZ2luOiBWQUxJ
RF9QT0lOVEVSX1RSQU5TRk9STSwKKyAgICBwcm9maWxlczogW10KK307CisKK2NvbnN0IFJJR0hU
X0NPTlRST0xMRVIgPSB7CisgICAgaGFuZGVkbmVzczogInJpZ2h0IiwKKyAgICB0YXJnZXRSYXlN
b2RlOiAidHJhY2tlZC1wb2ludGVyIiwKKyAgICBwb2ludGVyT3JpZ2luOiBWQUxJRF9QT0lOVEVS
X1RSQU5TRk9STSwKKyAgICBwcm9maWxlczogW10KK307CisKK2NvbnN0IFNDUkVFTl9DT05UUk9M
TEVSID0geworICAgIGhhbmRlZG5lc3M6ICJub25lIiwKKyAgICB0YXJnZXRSYXlNb2RlOiAic2Ny
ZWVuIiwKKyAgICBwb2ludGVyT3JpZ2luOiBWQUxJRF9QT0lOVEVSX1RSQU5TRk9STSwKKyAgICBw
cm9maWxlczogW10KK307CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9y
ZXNvdXJjZXMvd2VieHJfdGVzdF9jb25zdGFudHNfZmFrZV93b3JsZC5qcyBiL0xheW91dFRlc3Rz
L2h0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50c19mYWtlX3dvcmxk
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdlNDI4ZTIxNTUwZjZhNTI0NjFjYjg0NzBkZWUwYWE0NGUzZjQ1NzgK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMv
d2VieHJfdGVzdF9jb25zdGFudHNfZmFrZV93b3JsZC5qcwpAQCAtMCwwICsxLDc5IEBACisndXNl
IHN0cmljdCc7CisKKy8vIFRoaXMgZmlsZSBpbnRyb2R1Y2VzIGNvbnN0YW50cyB1c2VkIHRvIG1v
Y2sgZmFrZSB3b3JsZCBmb3IgdGhlIHB1cnBvc2VzIG9mIGhpdCB0ZXN0LgorCisvLyBHZW5lcmF0
ZXMgRmFrZVhSV29ybGRJbml0IGRpY3Rpb25hcnkgd2l0aCBnaXZlbiBkaW1lbnNpb25zLgorLy8g
VGhlIGdlbmVyYXRlZCBmYWtlIHdvcmxkIHdpbGwgaGF2ZSBmbG9vciBhbmQgZnJvbnQgd2FsbCB0
cmVhdGVkIGFzIHBsYW5lcywKKy8vIHNpZGUgd2FsbHMgdHJlYXRlZCBhcyBtZXNoZXMsIGFuZCBj
ZWlsaW5nIHRyZWF0ZWQgYXMgcG9pbnRzLgorLy8gd2lkdGggLSBYIGF4aXMsIGluIG1ldGVycwor
Ly8gaGVpZ2h0IC0gWSBheGlzLCBpbiBtZXRlcnMKKy8vIGxlbmd0aCAtIFogYXhpcywgaW4gbWV0
ZXJzCitmdW5jdGlvbiBjcmVhdGVGYWtlV29ybGQoCisgIHdpZHRoLCBoZWlnaHQsIGxlbmd0aCwK
KyAgZnJvbnRfd2FsbF9hbmRfZmxvb3JfdHlwZSA9ICJwbGFuZSIsCisgIHNpZGVfd2FsbHNfdHlw
ZSA9ICJtZXNoIiwKKyAgY2VpbGluZ190eXBlID0gInBvaW50IikgeworICAvLyBWZXJ0aWNlczoK
KyAgY29uc3QgQk9UVE9NX0xFRlRfRlJPTlQgPSB7IHg6IC13aWR0aC8yLCB5OiAwLCB6OiAtbGVu
Z3RoLzIsIHc6IDF9OworICBjb25zdCBCT1RUT01fUklHSFRfRlJPTlQgPSB7IHg6IHdpZHRoLzIs
IHk6IDAsIHo6IC1sZW5ndGgvMiwgdzogMX07CisKKyAgY29uc3QgVE9QX0xFRlRfRlJPTlQgPSB7
IHg6IC13aWR0aC8yLCB5OiBoZWlnaHQsIHo6IC1sZW5ndGgvMiwgdzogMX07CisgIGNvbnN0IFRP
UF9SSUdIVF9GUk9OVCA9IHsgeDogd2lkdGgvMiwgeTogaGVpZ2h0LCB6OiAtbGVuZ3RoLzIsIHc6
IDF9OworCisgIGNvbnN0IEJPVFRPTV9MRUZUX0JBQ0sgPSB7IHg6IC13aWR0aC8yLCB5OiAwLCB6
OiBsZW5ndGgvMiwgdzogMX07CisgIGNvbnN0IEJPVFRPTV9SSUdIVF9CQUNLID0geyB4OiB3aWR0
aC8yLCB5OiAwLCB6OiBsZW5ndGgvMiwgdzogMX07CisKKyAgY29uc3QgVE9QX0xFRlRfQkFDSyA9
IHsgeDogLXdpZHRoLzIsIHk6IGhlaWdodCwgejogbGVuZ3RoLzIsIHc6IDF9OworICBjb25zdCBU
T1BfUklHSFRfQkFDSyA9IHsgeDogd2lkdGgvMiwgeTogaGVpZ2h0LCB6OiBsZW5ndGgvMiwgdzog
MX07CisKKyAgLy8gRmFjZXM6CisgIGNvbnN0IEZST05UX1dBTExfQU5EX0ZMT09SX0ZBQ0VTID0g
WworICAgIC8vIEZyb250IHdhbGw6CisgICAgeyB2ZXJ0aWNlczogW0JPVFRPTV9MRUZUX0ZST05U
LCBCT1RUT01fUklHSFRfRlJPTlQsIFRPUF9SSUdIVF9GUk9OVF0gfSwKKyAgICB7IHZlcnRpY2Vz
OiBbQk9UVE9NX0xFRlRfRlJPTlQsIFRPUF9SSUdIVF9GUk9OVCwgVE9QX0xFRlRfRlJPTlRdIH0s
CisgICAgLy8gRmxvb3I6CisgICAgeyB2ZXJ0aWNlczogW0JPVFRPTV9MRUZUX0ZST05ULCBCT1RU
T01fUklHSFRfRlJPTlQsIEJPVFRPTV9SSUdIVF9CQUNLXSB9LAorICAgIHsgdmVydGljZXM6IFtC
T1RUT01fTEVGVF9GUk9OVCwgQk9UVE9NX0xFRlRfQkFDSywgQk9UVE9NX1JJR0hUX0JBQ0tdIH0s
CisgIF07CisKKyAgY29uc3QgQ0VJTElOR19GQUNFUyA9IFsKKyAgICAvLyBDZWlsaW5nOgorICAg
IHsgdmVydGljZXM6IFtUT1BfTEVGVF9GUk9OVCwgVE9QX1JJR0hUX0ZST05ULCBUT1BfUklHSFRf
QkFDS10gfSwKKyAgICB7IHZlcnRpY2VzOiBbVE9QX0xFRlRfRlJPTlQsIFRPUF9MRUZUX0JBQ0ss
IFRPUF9SSUdIVF9CQUNLXSB9LAorICBdOworCisgIGNvbnN0IFNJREVfV0FMTFNfRkFDRVMgPSBb
CisgICAgLy8gTGVmdDoKKyAgICB7IHZlcnRpY2VzOiBbQk9UVE9NX0xFRlRfRlJPTlQsIFRPUF9M
RUZUX0ZST05ULCBUT1BfTEVGVF9CQUNLXSB9LAorICAgIHsgdmVydGljZXM6IFtCT1RUT01fTEVG
VF9GUk9OVCwgQk9UVE9NX0xFRlRfQkFDSywgVE9QX0xFRlRfQkFDS10gfSwKKyAgICAvLyBSaWdo
dDoKKyAgICB7IHZlcnRpY2VzOiBbQk9UVE9NX1JJR0hUX0ZST05ULCBUT1BfUklHSFRfRlJPTlQs
IFRPUF9SSUdIVF9CQUNLXSB9LAorICAgIHsgdmVydGljZXM6IFtCT1RUT01fUklHSFRfRlJPTlQs
IEJPVFRPTV9SSUdIVF9CQUNLLCBUT1BfUklHSFRfQkFDS10gfSwKKyAgXTsKKworICAvLyBSZWdp
b25zOgorICBjb25zdCBGUk9OVF9XQUxMX0FORF9GTE9PUl9SRUdJT04gPSB7CisgICAgdHlwZTog
ZnJvbnRfd2FsbF9hbmRfZmxvb3JfdHlwZSwKKyAgICBmYWNlczogRlJPTlRfV0FMTF9BTkRfRkxP
T1JfRkFDRVMsCisgIH07CisKKyAgY29uc3QgU0lERV9XQUxMU19SRUdJT04gPSB7CisgICAgdHlw
ZTogc2lkZV93YWxsc190eXBlLAorICAgIGZhY2VzOiBTSURFX1dBTExTX0ZBQ0VTLAorICB9Owor
CisgIGNvbnN0IENFSUxJTkdfUkVHSU9OID0geworICAgIHR5cGU6IGNlaWxpbmdfdHlwZSwKKyAg
ICBmYWNlczogQ0VJTElOR19GQUNFUywKKyAgfTsKKworICByZXR1cm4geworICAgIGhpdFRlc3RS
ZWdpb25zIDogWworICAgICAgRlJPTlRfV0FMTF9BTkRfRkxPT1JfUkVHSU9OLAorICAgICAgU0lE
RV9XQUxMU19SRUdJT04sCisgICAgICBDRUlMSU5HX1JFR0lPTiwKKyAgICBdCisgIH07Cit9CisK
K2NvbnN0IFZBTElEX0ZBS0VfV09STEQgPSBjcmVhdGVGYWtlV29ybGQoNS4wLCAyLjAsIDUuMCk7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJf
dXRpbC5qcyBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl91dGls
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE5ODdjYTFmNDQyMGMxNmIzZTU1NjIwMTE1ZDUzNmE2MzVhZTM2OTUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMv
d2VieHJfdXRpbC5qcwpAQCAtMCwwICsxLDI0NiBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBUaGVz
ZSB0ZXN0cyByZWx5IG9uIHRoZSBVc2VyIEFnZW50IHByb3ZpZGluZyBhbiBpbXBsZW1lbnRhdGlv
biBvZiB0aGUKKy8vIFdlYlhSIFRlc3RpbmcgQVBJIChodHRwczovL2dpdGh1Yi5jb20vaW1tZXJz
aXZlLXdlYi93ZWJ4ci10ZXN0LWFwaSkuCisvLworLy8gSW4gQ2hyb21pdW0tYmFzZWQgYnJvd3Nl
cnMsIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQgYnkgYSBKYXZhU2NyaXB0CisvLyBz
aGltIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIHRlc3Qtb25seSBjb2RlIHNoaXBw
ZWQgdG8gdXNlcnMuIFRvCisvLyBlbmFibGUgdGhlc2UgdGVzdHMgdGhlIGJyb3dzZXIgbXVzdCBi
ZSBydW4gd2l0aCB0aGVzZSBvcHRpb25zOgorLy8KKy8vICAgLS1lbmFibGUtYmxpbmstZmVhdHVy
ZXM9TW9qb0pTLE1vam9KU1Rlc3QKKworLy8gRGVidWdnaW5nIG1lc3NhZ2UgaGVscGVyLCBieSBk
ZWZhdWx0IGRvZXMgbm90aGluZy4gSW1wbGVtZW50YXRpb25zIGNhbgorLy8gb3ZlcnJpZGUgdGhp
cy4KK3ZhciB4cl9kZWJ1ZyA9IGZ1bmN0aW9uKG5hbWUsIG1zZykge307CisKK2Z1bmN0aW9uIHhy
X3Byb21pc2VfdGVzdChuYW1lLCBmdW5jLCBwcm9wZXJ0aWVzKSB7CisgIHByb21pc2VfdGVzdChh
c3luYyAodCkgPT4geworICAgIC8vIFBlcmZvcm0gYW55IHJlcXVpcmVkIHRlc3Qgc2V0dXA6Cisg
ICAgeHJfZGVidWcobmFtZSwgJ3NldHVwJyk7CisKKyAgICAvLyBPbmx5IHNldCB1cCBvbmNlLgor
ICAgIGlmICghbmF2aWdhdG9yLnhyLnRlc3QpIHsKKyAgICAgIC8vIExvYWQgdGVzdC1vbmx5IEFQ
SSBoZWxwZXJzLgorICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
c2NyaXB0Jyk7CisgICAgICBzY3JpcHQuc3JjID0gJy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5q
cyc7CisgICAgICBzY3JpcHQuYXN5bmMgPSBmYWxzZTsKKyAgICAgIGNvbnN0IHAgPSBuZXcgUHJv
bWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9
PiB7IHJlc29sdmUoKTsgfTsKKyAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBlID0+IHsgcmVqZWN0
KGUpOyB9OworICAgICAgfSkKKyAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0
KTsKKyAgICAgIGF3YWl0IHA7CisKKyAgICAgIGlmIChpc0Nocm9taXVtQmFzZWQpIHsKKyAgICAg
ICAgLy8gQ2hyb21lIHNldHVwCisgICAgICAgIGF3YWl0IGxvYWRDaHJvbWl1bVJlc291cmNlcygp
OworICAgICAgfSBlbHNlIGlmIChpc1dlYktpdEJhc2VkKSB7CisgICAgICAgIC8vIFdlYktpdCBz
ZXR1cAorICAgICAgICBhd2FpdCBzZXR1cFdlYktpdFdlYlhSVGVzdEFQSSgpOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgYXNzZXJ0X2ltcGxlbWVudHMoZmFsc2UsICJtaXNzaW5nIG5hdmlnYXRv
ci54ci50ZXN0Iik7CisgICAgICB9CisgICAgfQorCisgICAgLy8gRWl0aGVyIHRoZSB0ZXN0IGFw
aSBuZWVkcyB0byBiZSBwb2x5ZmlsbGVkIGFuZCBpdCdzIG5vdCBzZXQgdXAgYWJvdmUsIG9yCisg
ICAgLy8gc29tZXRoaW5nIGhhcHBlbmVkIHRvIG9uZSBvZiB0aGUga25vd24gcG9seWZpbGxzIGFu
ZCBpdCBmYWlsZWQgdG8gYmUKKyAgICAvLyBzZXR1cCBwcm9wZXJseS4gRWl0aGVyIHdheSwgdGhl
IGZhY3QgdGhhdCB4cl9wcm9taXNlX3Rlc3QgaXMgYmVpbmcgdXNlZAorICAgIC8vIG1lYW5zIHRo
YXQgdGhlIHRlc3RzIGV4cGVjdCBuYXZpZ2F0b3IueHIudGVzdCB0byBiZSBzZXQuIEJ5IHJlamVj
dGluZyBub3cKKyAgICAvLyB3ZSBjYW4gaG9wZWZ1bGx5IHByb3ZpZGUgYSBjbGVhcmVyIGluZGlj
YXRpb24gb2Ygd2hhdCB3ZW50IHdyb25nLgorICAgIGlmICghbmF2aWdhdG9yLnhyLnRlc3QpIHsK
KyAgICAgIC8vIFdlIGNhbid0IHVzZSBhc3NlcnRfdHJ1ZSBoZXJlIGJlY2F1c2UgaXQgY2F1c2Vz
IHRoZSB3cHQgdGVzdGhhcm5lc3MKKyAgICAgIC8vIHRvIHRyZWF0IHRoaXMgYXMgYSB0ZXN0IHBh
Z2UgYW5kIG5vdCBhcyBhIHRlc3QuCisgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoIk5vIG5h
dmlnYXRvci54ci50ZXN0IG9iamVjdCBmb3VuZCwgZXZlbiBhZnRlciBhdHRlbXB0ZWQgbG9hZCIp
OworICAgIH0KKworICAgIC8vIEVuc3VyZSB0aGF0IGFueSBkZXZpY2VzIGFyZSBkaXNjb25uZWN0
ZWQgd2hlbiBkb25lLiBJZiB0aGlzIHdlcmUgZG9uZSBpbgorICAgIC8vIGEgLnRoZW4oKSBmb3Ig
dGhlIHN1Y2Nlc3MgY2FzZSwgYSB0ZXN0IHRoYXQgZXhwZWN0ZWQgZmFpbHVyZSB3b3VsZAorICAg
IC8vIGFscmVhZHkgYmUgbWFya2VkIGRvbmUgYXQgdGhlIHRpbWUgdGhhdCBydW5zIGFuZCB0aGUg
c2h1dGRvd24gd291bGQKKyAgICAvLyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCB0ZXN0LgorICAg
IHQuYWRkX2NsZWFudXAoYXN5bmMgKCkgPT4geworICAgICAgLy8gRW5zdXJlIHN5c3RlbSBzdGF0
ZSBpcyBjbGVhbmVkIHVwLgorICAgICAgeHJfZGVidWcobmFtZSwgJ2NsZWFudXAnKTsKKyAgICAg
IGF3YWl0IG5hdmlnYXRvci54ci50ZXN0LmRpc2Nvbm5lY3RBbGxEZXZpY2VzKCk7CisgICAgfSk7
CisKKyAgICB4cl9kZWJ1ZyhuYW1lLCAnbWFpbicpOworICAgIHJldHVybiBmdW5jKHQpOworICB9
LCBuYW1lLCBwcm9wZXJ0aWVzKTsKK30KKworLy8gQSB1dGlsaXR5IGZ1bmN0aW9uIGZvciB3YWl0
aW5nIG9uZSBhbmltYXRpb24gZnJhbWUgYmVmb3JlIHJ1bm5pbmcgdGhlIGNhbGxiYWNrCisvLwor
Ly8gVGhpcyBpcyBvbmx5IG5lZWRlZCBhZnRlciBjYWxsaW5nIEZha2VYUkRldmljZSBtZXRob2Rz
IG91dHNpZGUgb2YgYW4gYW5pbWF0aW9uIGZyYW1lCisvLworLy8gVGhpcyBpcyBzbyB0aGF0IHdl
IGNhbiBwYXBlciBvdmVyIHRoZSBwb3RlbnRpYWwgcmFjZSBhbGxvd2VkIGJ5IHRoZSAibmV4dCBh
bmltYXRpb24gZnJhbWUiCisvLyBjb25jZXB0IGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIu
aW8vd2VieHItdGVzdC1hcGkvI3hyc2Vzc2lvbi1uZXh0LWFuaW1hdGlvbi1mcmFtZQorZnVuY3Rp
b24gcmVxdWVzdFNraXBBbmltYXRpb25GcmFtZShzZXNzaW9uLCBjYWxsYmFjaykgeworIHNlc3Np
b24ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKKyAgc2Vzc2lvbi5yZXF1ZXN0QW5pbWF0
aW9uRnJhbWUoY2FsbGJhY2spOworIH0pOworfQorCisvLyBBIHRlc3QgZnVuY3Rpb24gd2hpY2gg
cnVucyB0aHJvdWdoIHRoZSBjb21tb24gc3RlcHMgb2YgcmVxdWVzdGluZyBhIHNlc3Npb24uCisv
LyBDYWxscyB0aGUgcGFzc2VkIGluIHRlc3QgZnVuY3Rpb24gd2l0aCB0aGUgc2Vzc2lvbiwgdGhl
IGNvbnRyb2xsZXIgZm9yIHRoZQorLy8gZGV2aWNlLCBhbmQgdGhlIHRlc3Qgb2JqZWN0LgorLy8g
UmVxdWlyZXMgYSB3ZWJnbENhbnZhcyBvbiB0aGUgcGFnZS4KK2Z1bmN0aW9uIHhyX3Nlc3Npb25f
cHJvbWlzZV90ZXN0KAorICAgIG5hbWUsIGZ1bmMsIGZha2VEZXZpY2VJbml0LCBzZXNzaW9uTW9k
ZSwgc2Vzc2lvbkluaXQsIHByb3BlcnRpZXMsIGdsY29udGV4dFByb3BlcnRpZXNQYXJhbSwgZ2xs
YXllclByb3BlcnRpZXNQYXJhbSkgeworICBsZXQgdGVzdERldmljZUNvbnRyb2xsZXI7CisgIGxl
dCB0ZXN0U2Vzc2lvbjsKKyAgbGV0IHNlc3Npb25PYmplY3RzID0ge307CisgIGNvbnN0IGdsY29u
dGV4dFByb3BlcnRpZXMgPSAoZ2xjb250ZXh0UHJvcGVydGllc1BhcmFtKSA/IGdsY29udGV4dFBy
b3BlcnRpZXNQYXJhbSA6IHt9OworICBjb25zdCBnbGxheWVyUHJvcGVydGllcyA9IChnbGxheWVy
UHJvcGVydGllc1BhcmFtKSA/IGdsbGF5ZXJQcm9wZXJ0aWVzUGFyYW0gOiB7fTsKKworICBjb25z
dCB3ZWJnbENhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjYW52YXMnKVsw
XTsKKyAgLy8gV2UgY2FuJ3QgdXNlIGFzc2VydF90cnVlIGhlcmUgYmVjYXVzZSBpdCBjYXVzZXMg
dGhlIHdwdCB0ZXN0aGFybmVzcyB0byB0cmVhdAorICAvLyB0aGlzIGFzIGEgdGVzdCBwYWdlIGFu
ZCBub3QgYXMgYSB0ZXN0LgorICBpZiAoIXdlYmdsQ2FudmFzKSB7CisgICAgcHJvbWlzZV90ZXN0
KGFzeW5jICh0KSA9PiB7CisgICAgICBQcm9taXNlLnJlamVjdCgneHJfc2Vzc2lvbl9wcm9taXNl
X3Rlc3QgcmVxdWlyZXMgYSBjYW52YXMgb24gdGhlIHBhZ2UhJyk7CisgICAgfSwgbmFtZSwgcHJv
cGVydGllcyk7CisgIH0KKyAgbGV0IGdsID0gd2ViZ2xDYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wn
LCB7YWxwaGE6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlLCAuLi5nbGNvbnRleHRQcm9wZXJ0aWVz
fSk7CisgIHNlc3Npb25PYmplY3RzLmdsID0gZ2w7CisKKyAgeHJfcHJvbWlzZV90ZXN0KAorICAg
ICAgbmFtZSwKKyAgICAgICh0KSA9PiB7CisgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgYW55IHBl
bmRpbmcgc2Vzc2lvbnMgYXJlIGVuZGVkIHdoZW4gZG9uZS4gVGhpcyBuZWVkcyB0bworICAgICAg
ICAgIC8vIHVzZSBhIGNsZWFudXAgZnVuY3Rpb24gdG8gZW5zdXJlIHByb3BlciBzZXF1ZW5jaW5n
LiBJZiB0aGlzIHdlcmUKKyAgICAgICAgICAvLyBkb25lIGluIGEgLnRoZW4oKSBmb3IgdGhlIHN1
Y2Nlc3MgY2FzZSwgYSB0ZXN0IHRoYXQgZXhwZWN0ZWQKKyAgICAgICAgICAvLyBmYWlsdXJlIHdv
dWxkIGFscmVhZHkgYmUgbWFya2VkIGRvbmUgYXQgdGhlIHRpbWUgdGhhdCBydW5zLCBhbmQgdGhl
CisgICAgICAgICAgLy8gc2h1dGRvd24gd291bGQgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgdGVz
dCB3aGljaCBtYXkgaGF2ZSBzdGFydGVkLgorICAgICAgICAgIHQuYWRkX2NsZWFudXAoYXN5bmMg
KCkgPT4geworICAgICAgICAgICAgLy8gSWYgYSBzZXNzaW9uIHdhcyBjcmVhdGVkLCBlbmQgaXQu
CisgICAgICAgICAgICBpZiAodGVzdFNlc3Npb24pIHsKKyAgICAgICAgICAgICAgYXdhaXQgdGVz
dFNlc3Npb24uZW5kKCkuY2F0Y2goKCkgPT4ge30pOworICAgICAgICAgICAgfQorICAgICAgICAg
IH0pOworCisgICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci54ci50ZXN0LnNpbXVsYXRlRGV2aWNl
Q29ubmVjdGlvbihmYWtlRGV2aWNlSW5pdCkKKyAgICAgICAgICAgICAgLnRoZW4oKGNvbnRyb2xs
ZXIpID0+IHsKKyAgICAgICAgICAgICAgICB0ZXN0RGV2aWNlQ29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsLm1ha2VYUkNvbXBhdGlibGUoKTsKKyAgICAg
ICAgICAgICAgfSkKKyAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gbmV3IFByb21pc2UoKHJlc29s
dmUsIHJlamVjdCkgPT4geworICAgICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlIHNl
c3Npb24gcmVxdWVzdCBpbiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICB4
cl9kZWJ1ZyhuYW1lLCAnc2ltdWxhdGVVc2VyQWN0aXZhdGlvbicpOworICAgICAgICAgICAgICAg
ICAgICAgIG5hdmlnYXRvci54ci50ZXN0LnNpbXVsYXRlVXNlckFjdGl2YXRpb24oKCkgPT4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgeHJfZGVidWcobmFtZSwgJ2RvY3VtZW50Lmhhc0ZvY3Vz
KCk9JyArIGRvY3VtZW50Lmhhc0ZvY3VzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbmF2
aWdhdG9yLnhyLnJlcXVlc3RTZXNzaW9uKHNlc3Npb25Nb2RlLCBzZXNzaW9uSW5pdCB8fCB7fSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoc2Vzc2lvbikgPT4geworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeHJfZGVidWcobmFtZSwgJ3Nlc3Npb24gc3RhcnQnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RTZXNzaW9uID0gc2Vzc2lvbjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24ubW9kZSA9IHNlc3Npb25Nb2RlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGdsTGF5ZXIgPSBuZXcgWFJXZWJHTExh
eWVyKHNlc3Npb24sIGdsLCBnbGxheWVyUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbExheWVyLmNvbnRleHQgPSBnbDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNlc3Npb24gbXVzdCBoYXZlIGEgYmFzZUxheWVyIG9yIGZyYW1lIHJlcXVlc3Rz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGlnbm9yZWQuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLnVwZGF0ZVJlbmRlclN0YXRlKHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlTGF5ZXI6IGdsTGF5ZXIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2Vzc2lvbk9iamVjdHMuZ2xMYXllciA9IGdsTGF5ZXI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4cl9kZWJ1ZyhuYW1lLCAnc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGU9JyArIHNl
c3Npb24udmlzaWJpbGl0eVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c29sdmUoZnVuYyhzZXNzaW9uLCB0ZXN0RGV2aWNlQ29udHJvbGxlciwgdCwgc2Vzc2lvbk9iamVj
dHMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4cl9kZWJ1ZyhuYW1lLCAnZXJyb3I6ICcgKyBlcnIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVqZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXNz
aW9uIHdpdGggcGFyYW1zICcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpT
T04uc3RyaW5naWZ5KHNlc3Npb25Nb2RlKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJyB3YXMgcmVqZWN0ZWQgb24gZGV2aWNlICcgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGZha2VEZXZpY2VJbml0KSArCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJyB3aXRoIGVycm9yOiAnICsgZXJyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgfSkpOworICAgICAgfSwKKyAgICAgIHByb3BlcnRpZXMpOworfQorCisKKy8vIFRo
aXMgZnVuY3Rpb24gd3JhcHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGluIGEKKy8vIHNpbXVsYXRl
VXNlckFjdGl2YXRpb24oKSBjYWxsLCBhbmQgcmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUK
Ky8vIHJlc3VsdCBvZiBmdW5jKCksIG9yIGFuIGVycm9yIGlmIG9uZSBpcyB0aHJvd24KK2Z1bmN0
aW9uIHByb21pc2Vfc2ltdWxhdGVfdXNlcl9hY3RpdmF0aW9uKGZ1bmMpIHsKKyAgcmV0dXJuIG5l
dyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAgICBuYXZpZ2F0b3IueHIudGVzdC5z
aW11bGF0ZVVzZXJBY3RpdmF0aW9uKCgpID0+IHsKKyAgICAgIHRyeSB7IGxldCBhID0gZnVuYygp
OyByZXNvbHZlKGEpOyB9IGNhdGNoKGUpIHsgcmVqZWN0KGUpOyB9CisgICAgfSk7CisgIH0pOwor
fQorCisvLyBUaGlzIGZ1bmN0aW9ucyBjYWxscyBhIGNhbGxiYWNrIHdpdGggZWFjaCBBUEkgb2Jq
ZWN0IGFzIHNwZWNpZmllZAorLy8gYnkgaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93
ZWJ4ci9zcGVjL2xhdGVzdC8sIGFsbG93aW5nCisvLyBjaGVja3MgdG8gYmUgbWFkZSBvbiBhbGwg
b2plY3RzLgorLy8gQXJndWVtZW50czoKKy8vICAgICAgY2FsbGJhY2s6IEEgY2FsbGJhY2sgZnVu
Y3Rpb24gd2l0aCB0d28gYXJndWVtZW50cywgdGhlIGZpcnN0CisvLyAgICAgICAgICAgICAgICBi
ZWluZyB0aGUgQVBJIG9iamVjdCwgdGhlIHNlY29uZCBiZWluZyB0aGUgbmFtZSBvZgorLy8gICAg
ICAgICAgICAgICAgdGhhdCBBUEkgb2JqZWN0LgorZnVuY3Rpb24gZm9yRWFjaFdlYnhyT2JqZWN0
KGNhbGxiYWNrKSB7CisgIGNhbGxiYWNrKHdpbmRvdy5uYXZpZ2F0b3IueHIsICduYXZpZ2F0b3Iu
eHInKTsKKyAgY2FsbGJhY2sod2luZG93LlhSU2Vzc2lvbiwgJ1hSU2Vzc2lvbicpOworICBjYWxs
YmFjayh3aW5kb3cuWFJTZXNzaW9uQ3JlYXRpb25PcHRpb25zLCAnWFJTZXNzaW9uQ3JlYXRpb25P
cHRpb25zJyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUkZyYW1lUmVxdWVzdENhbGxiYWNrLCAnWFJG
cmFtZVJlcXVlc3RDYWxsYmFjaycpOworICBjYWxsYmFjayh3aW5kb3cuWFJQcmVzZW50YXRpb25D
b250ZXh0LCAnWFJQcmVzZW50YXRpb25Db250ZXh0Jyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUkZy
YW1lLCAnWFJGcmFtZScpOworICBjYWxsYmFjayh3aW5kb3cuWFJMYXllciwgJ1hSTGF5ZXInKTsK
KyAgY2FsbGJhY2sod2luZG93LlhSVmlldywgJ1hSVmlldycpOworICBjYWxsYmFjayh3aW5kb3cu
WFJWaWV3cG9ydCwgJ1hSVmlld3BvcnQnKTsKKyAgY2FsbGJhY2sod2luZG93LlhSVmlld2VyUG9z
ZSwgJ1hSVmlld2VyUG9zZScpOworICBjYWxsYmFjayh3aW5kb3cuWFJXZWJHTExheWVyLCAnWFJX
ZWJHTExheWVyJyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUldlYkdMTGF5ZXJJbml0LCAnWFJXZWJH
TExheWVySW5pdCcpOworICBjYWxsYmFjayh3aW5kb3cuWFJDb29yZGluYXRlU3lzdGVtLCAnWFJD
b29yZGluYXRlU3lzdGVtJyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUkZyYW1lT2ZSZWZlcmVuY2Us
ICdYUkZyYW1lT2ZSZWZlcmVuY2UnKTsKKyAgY2FsbGJhY2sod2luZG93LlhSU3RhZ2VCb3VuZHMs
ICdYUlN0YWdlQm91bmRzJyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUlNlc3Npb25FdmVudCwgJ1hS
U2Vzc2lvbkV2ZW50Jyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUkNvb3JkaW5hdGVTeXN0ZW1FdmVu
dCwgJ1hSQ29vcmRpbmF0ZVN5c3RlbUV2ZW50Jyk7Cit9CisKKy8vIENvZGUgZm9yIGxvYWRpbmcg
dGVzdCBBUEkgaW4gQ2hyb21pdW0uCithc3luYyBmdW5jdGlvbiBsb2FkQ2hyb21pdW1SZXNvdXJj
ZXMoKSB7CisgIGxldCBjaHJvbWl1bVJlc291cmNlcyA9IFsKKyAgICAnL2dlbi9tb2pvL3B1Ymxp
Yy9tb2pvbS9iYXNlL3RpbWUubW9qb20uanMnLAorICAgICcvZ2VuL21vam8vcHVibGljL21vam9t
L2Jhc2Uvc2hhcmVkX21lbW9yeS5tb2pvbS5qcycsCisgICAgJy9nZW4vbW9qby9wdWJsaWMvbW9q
b20vYmFzZS91bmd1ZXNzYWJsZV90b2tlbi5tb2pvbS5qcycsCisgICAgJy9nZW4vZ3B1L2lwYy9j
b21tb24vc3luY190b2tlbi5tb2pvbS5qcycsCisgICAgJy9nZW4vZ3B1L2lwYy9jb21tb24vbWFp
bGJveC5tb2pvbS5qcycsCisgICAgJy9nZW4vZ3B1L2lwYy9jb21tb24vbWFpbGJveF9ob2xkZXIu
bW9qb20uanMnLAorICAgICcvZ2VuL3VpL2dmeC9nZW9tZXRyeS9tb2pvbS9nZW9tZXRyeS5tb2pv
bS5qcycsCisgICAgJy9nZW4vdWkvZ2Z4L21vam9tL25hdGl2ZV9oYW5kbGVfdHlwZXMubW9qb20u
anMnLAorICAgICcvZ2VuL3VpL2dmeC9tb2pvbS9idWZmZXJfdHlwZXMubW9qb20uanMnLAorICAg
ICcvZ2VuL3VpL2dmeC9tb2pvbS9jb2xvcl9zcGFjZS5tb2pvbS5qcycsCisgICAgJy9nZW4vdWkv
Z2Z4L21vam9tL2Rpc3BsYXlfY29sb3Jfc3BhY2VzLm1vam9tLmpzJywKKyAgICAnL2dlbi91aS9n
ZngvbW9qb20vZ3B1X2ZlbmNlX2hhbmRsZS5tb2pvbS5qcycsCisgICAgJy9nZW4vdWkvZ2Z4L21v
am9tL3RyYW5zZm9ybS5tb2pvbS5qcycsCisgICAgJy9nZW4vdWkvZGlzcGxheS9tb2pvbS9kaXNw
bGF5Lm1vam9tLmpzJywKKyAgICAnL2dlbi9kZXZpY2UvZ2FtZXBhZC9wdWJsaWMvbW9qb20vZ2Ft
ZXBhZC5tb2pvbS5qcycsCisgICAgJy9nZW4vZGV2aWNlL3ZyL3B1YmxpYy9tb2pvbS92cl9zZXJ2
aWNlLm1vam9tLmpzJywKKyAgICAnL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgt
aGVscGVyLmpzJywKKyAgICAnL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzJywKKyAg
ICAvLyBSZXF1aXJlZCBvbmx5IGJ5IHJlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzCisg
ICAgJy9yZXNvdXJjZXMvdGVzdGRyaXZlci5qcycsCisgICAgJy9yZXNvdXJjZXMvdGVzdGRyaXZl
ci12ZW5kb3IuanMnLAorICBdOworCisgIC8vIFRoaXMgaW5mcmFzdHJ1Y3R1cmUgaXMgYWxzbyB1
c2VkIGJ5IENocm9taXVtLXNwZWNpZmljIGludGVybmFsIHRlc3RzIHRoYXQKKyAgLy8gbWF5IG5l
ZWQgYWRkaXRpb25hbCByZXNvdXJjZXMgKGUuZy4gaW50ZXJuYWwgQVBJIGV4dGVuc2lvbnMpLCB0
aGlzIGFsbG93cworICAvLyB0aG9zZSB0ZXN0cyB0byByZWx5IG9uIHRoaXMgaW5mcmFzdHJ1Y3R1
cmUgd2hpbGUgZW5zdXJpbmcgdGhhdCBubyB0ZXN0cworICAvLyBtYWtlIGl0IGludG8gcHVibGlj
IFdQVHMgdGhhdCByZWx5IG9uIEFQSXMgb3V0c2lkZSBvZiB0aGUgd2VieHIgdGVzdCBBUEkuCisg
IGlmICh0eXBlb2YoYWRkaXRpb25hbENocm9taXVtUmVzb3VyY2VzKSAhPT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICBjaHJvbWl1bVJlc291cmNlcyA9IGNocm9taXVtUmVzb3VyY2VzLmNvbmNhdChhZGRp
dGlvbmFsQ2hyb21pdW1SZXNvdXJjZXMpOworICB9CisKKyAgYXdhaXQgbG9hZE1vam9SZXNvdXJj
ZXMoY2hyb21pdW1SZXNvdXJjZXMpOworCisgIHhyX2RlYnVnID0gbmF2aWdhdG9yLnhyLnRlc3Qu
RGVidWc7Cit9CisKK2Z1bmN0aW9uIHNldHVwV2ViS2l0V2ViWFJUZXN0QVBJKCkgeworICAvLyBX
ZWJLaXQgc2V0dXAuIFRoZSBpbnRlcm5hbHMgb2JqZWN0IGlzIHVzZWQgYnkgdGhlIFdlYktpdCB0
ZXN0IHJ1bm5lcgorICAvLyB0byBwcm92aWRlIEpTIGFjY2VzcyB0byBpbnRlcm5hbCBBUElzLiBJ
biB0aGlzIGNhc2UgaXQncyB1c2VkIHRvCisgIC8vIGVuc3VyZSB0aGF0IFhSVGVzdCBpcyBvbmx5
IGV4cG9zZWQgdG8gd3B0IHRlc3RzLgorICBuYXZpZ2F0b3IueHIudGVzdCA9IGludGVybmFscy54
clRlc3Q7CisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNlX3JlcG9ydHNfc2h1dGRv
d24uaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNz
aW9uX2VuZF9kZXZpY2VfcmVwb3J0c19zaHV0ZG93bi5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjhjYzhiNDYzMThmNTBjNmViM2VhZmFlYjY4MzBhZTFiYzI2MmQ5MwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNl
X3JlcG9ydHNfc2h1dGRvd24uaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQ
QVNTIGVuZCBldmVudCBmaXJlcyB3aGVuIGltbWVyc2l2ZSBzZXNzaW9uIGVuZHMgYW5kIGRldmlj
ZSByZXBvcnRzIHdoZW4gc2h1dGRvd24gaGFzIGNvbXBsZXRlZAorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRk
b3duLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5k
X2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBjMzQ0NWU2
YjBjYmYxMjk0NGUwNWY4YzVlYmJhMTE0YzVhZDAwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNlX3JlcG9ydHNfc2h1dGRv
d24uaHR0cHMuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5Pgor
ICA8c2NyaXB0IHNyYz0vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPjwvc2NyaXB0PgorICA8c2Ny
aXB0IHNyYz0vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzPjwvc2NyaXB0PgorICA8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3dlYnhyX3V0aWwuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3dlYnhyX3Rlc3RfY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgPGNhbnZh
cz48L2NhbnZhcz4KKworICA8c2NyaXB0PgorICAgIGNvbnN0IHRlc3ROYW1lID0gImVuZCBldmVu
dCBmaXJlcyB3aGVuIGltbWVyc2l2ZSBzZXNzaW9uIGVuZHMgYW5kIGRldmljZSByZXBvcnRzIHdo
ZW4gc2h1dGRvd24gaGFzIGNvbXBsZXRlZCI7CisgICAgbGV0IHdhdGNoZXJEb25lID0gbmV3IEV2
ZW50KCJ3YXRjaGVyZG9uZSIpOworICAgIGNvbnN0IGZha2VEZXZpY2VJbml0UGFyYW1zID0gVFJB
Q0tFRF9JTU1FUlNJVkVfREVWSUNFOworCisgICAgbGV0IHRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9u
KHNlc3Npb24sIHRlc3REZXZpY2VDb250cm9sbGVyLCB0KSB7CisgICAgICB0ZXN0RGV2aWNlQ29u
dHJvbGxlci5zZXRTdXBwb3J0c1NodXRkb3duTm90aWZpY2F0aW9uKCk7CisgICAgICBsZXQgZXZl
bnRXYXRjaGVyID0gbmV3IEV2ZW50V2F0Y2hlcih0LCBzZXNzaW9uLCBbImVuZCIsICJ3YXRjaGVy
ZG9uZSJdKTsKKyAgICAgIGxldCBldmVudFByb21pc2UgPSBldmVudFdhdGNoZXIud2FpdF9mb3Io
WyJlbmQiLCAid2F0Y2hlcmRvbmUiXSk7CisKKyAgICAgIGZ1bmN0aW9uIG9uU2Vzc2lvbkVuZChl
dmVudCkgeworICAgICAgICB0LnN0ZXAoICgpID0+IHsKKyAgICAgICAgICBhc3NlcnRfZXF1YWxz
KGV2ZW50LnNlc3Npb24sIHNlc3Npb24pOworCisgICAgICAgICAgbGV0IGV2ZW50U2Vzc2lvbiA9
IGV2ZW50LnNlc3Npb247CisgICAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudFNlc3Npb24sIGV2
ZW50LnNlc3Npb24sCisgICAgICAgICAgICAiWFJTZXNzaW9uRXZlbnQuc2Vzc2lvbiByZXR1cm5z
IHRoZSBzYW1lIG9iamVjdC4iKTsKKworICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hFdmVudCh3
YXRjaGVyRG9uZSk7CisgICAgICAgIH0pOworICAgICAgfQorICAgICAgc2Vzc2lvbi5hZGRFdmVu
dExpc3RlbmVyKCJlbmQiLCBvblNlc3Npb25FbmQsIGZhbHNlKTsKKyAgICAgIHNlc3Npb24uZW5k
KCk7CisKKyAgICAgIHJldHVybiBldmVudFByb21pc2U7CisgICAgfTsKKworICAgIHhyX3Nlc3Np
b25fcHJvbWlzZV90ZXN0KHRlc3ROYW1lLCB0ZXN0RnVuY3Rpb24sCisgICAgICBmYWtlRGV2aWNl
SW5pdFBhcmFtcywgJ2ltbWVyc2l2ZS12cicpOworICA8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0
ZW0uaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNz
aW9uX2VuZGVkX2J5X3N5c3RlbS5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmFhZTVm
ZmZkOGQ0YmM3MjE1ZTM1YTA0ZWExNTU1ZGFmM2QyNGJlNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0ZW0uaHR0cHMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIGVuZCBldmVudCBmaXJlcyB3aGVu
IGltbWVyc2l2ZSBzZXNzaW9uIGlzIGVuZGVkIGJ5IHN5c3RlbQorUEFTUyBlbmQgZXZlbnQgZmly
ZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBpcyBlbmRlZCBieSBzeXN0ZW0gYW5kIGRldmljZSBy
ZXBvcnRzIHNodXRkb3duIGNvbXBsZXRlCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
d3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0ZW0uaHR0cHMuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0ZW0uaHR0cHMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iOTE0ODc0MjA0YTFjMzJlNDQzYzU3NzZhMDhmNzgzYmU2MzViYzI4Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZGVk
X2J5X3N5c3RlbS5odHRwcy5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGJvZHk+CisgIDxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM+PC9zY3JpcHQ+
CisgIDxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+
CisgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2VieHJfdXRpbC5qcyI+PC9zY3JpcHQ+CisgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvd2VieHJfdGVzdF9jb25zdGFudHMuanMiPjwvc2NyaXB0Pgor
ICA8Y2FudmFzPjwvY2FudmFzPgorCisgIDxzY3JpcHQ+CisgICAgY29uc3QgdGVzdERldmljZU5v
dFJlcG9ydGluZ1NodXRkb3duQ29tcGxldGVOYW1lID0gImVuZCBldmVudCBmaXJlcyB3aGVuIGlt
bWVyc2l2ZSBzZXNzaW9uIGlzIGVuZGVkIGJ5IHN5c3RlbSI7CisgICAgY29uc3QgdGVzdERldmlj
ZVJlcG9ydGluZ1NodXRkb3duQ29tcGxldGVOYW1lID0gImVuZCBldmVudCBmaXJlcyB3aGVuIGlt
bWVyc2l2ZSBzZXNzaW9uIGlzIGVuZGVkIGJ5IHN5c3RlbSBhbmQgZGV2aWNlIHJlcG9ydHMgc2h1
dGRvd24gY29tcGxldGUiOworCisgICAgbGV0IHdhdGNoZXJEb25lID0gbmV3IEV2ZW50KCJ3YXRj
aGVyZG9uZSIpOworICAgIGNvbnN0IGZha2VEZXZpY2VJbml0UGFyYW1zID0gVFJBQ0tFRF9JTU1F
UlNJVkVfREVWSUNFOworCisgICAgbGV0IHRlc3REZXZpY2VOb3RSZXBvcnRpbmdTaHV0ZG93bkNv
bXBsZXRlID0gZnVuY3Rpb24oc2Vzc2lvbiwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQpIHsKKyAg
ICAgIHRlc3RFbmRTZXNzaW9uQnlTeXN0ZW0oc2Vzc2lvbiwgdGVzdERldmljZUNvbnRyb2xsZXIs
IHQpOworICAgIH07CisKKyAgICBsZXQgdGVzdERldmljZVJlcG9ydGluZ1NodXRkb3duQ29tcGxl
dGUgPSBmdW5jdGlvbihzZXNzaW9uLCB0ZXN0RGV2aWNlQ29udHJvbGxlciwgdCkgeworICAgICAg
dGVzdERldmljZUNvbnRyb2xsZXIuc2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbigpOwor
ICAgICAgdGVzdEVuZFNlc3Npb25CeVN5c3RlbShzZXNzaW9uLCB0ZXN0RGV2aWNlQ29udHJvbGxl
ciwgdCk7CisgICAgfTsKKworICAgIGxldCB0ZXN0RW5kU2Vzc2lvbkJ5U3lzdGVtID0gZnVuY3Rp
b24oc2Vzc2lvbiwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQpIHsKKyAgICAgIGxldCBldmVudFdh
dGNoZXIgPSBuZXcgRXZlbnRXYXRjaGVyKHQsIHNlc3Npb24sIFsiZW5kIiwgIndhdGNoZXJkb25l
Il0pOworICAgICAgbGV0IGV2ZW50UHJvbWlzZSA9IGV2ZW50V2F0Y2hlci53YWl0X2ZvcihbImVu
ZCIsICJ3YXRjaGVyZG9uZSJdKTsKKworICAgICAgZnVuY3Rpb24gb25TZXNzaW9uRW5kKGV2ZW50
KSB7CisgICAgICAgIHQuc3RlcCggKCkgPT4geworICAgICAgICAgIGFzc2VydF9lcXVhbHMoZXZl
bnQuc2Vzc2lvbiwgc2Vzc2lvbik7CisKKyAgICAgICAgICBsZXQgZXZlbnRTZXNzaW9uID0gZXZl
bnQuc2Vzc2lvbjsKKyAgICAgICAgICBhc3NlcnRfZXF1YWxzKGV2ZW50U2Vzc2lvbiwgZXZlbnQu
c2Vzc2lvbiwKKyAgICAgICAgICAgICJYUlNlc3Npb25FdmVudC5zZXNzaW9uIHJldHVybnMgdGhl
IHNhbWUgb2JqZWN0LiIpOworCisgICAgICAgICAgc2Vzc2lvbi5kaXNwYXRjaEV2ZW50KHdhdGNo
ZXJEb25lKTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlz
dGVuZXIoImVuZCIsIG9uU2Vzc2lvbkVuZCwgZmFsc2UpOworCisgICAgICB0ZXN0RGV2aWNlQ29u
dHJvbGxlci5zaW11bGF0ZVNodXRkb3duKCk7CisKKyAgICAgIHJldHVybiBldmVudFByb21pc2U7
CisgICAgfTsKKworICAgIHhyX3Nlc3Npb25fcHJvbWlzZV90ZXN0KHRlc3REZXZpY2VOb3RSZXBv
cnRpbmdTaHV0ZG93bkNvbXBsZXRlTmFtZSwgdGVzdERldmljZU5vdFJlcG9ydGluZ1NodXRkb3du
Q29tcGxldGUsCisgICAgICBmYWtlRGV2aWNlSW5pdFBhcmFtcywgJ2ltbWVyc2l2ZS12cicpOwor
ICAgIHhyX3Nlc3Npb25fcHJvbWlzZV90ZXN0KHRlc3REZXZpY2VSZXBvcnRpbmdTaHV0ZG93bkNv
bXBsZXRlTmFtZSwgdGVzdERldmljZVJlcG9ydGluZ1NodXRkb3duQ29tcGxldGUsCisgICAgICBm
YWtlRGV2aWNlSW5pdFBhcmFtcywgJ2ltbWVyc2l2ZS12cicpOworCisgIDwvc2NyaXB0PgorPC9i
b2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX3Jl
amVjdF9tdWx0aXBsZV9lbmQuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC93
cHQvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBsZV9lbmQuaHR0cHMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA4OTc1MzNlYzQ4NzkzZDEzNDZhNzA0ZGE0MDYyMjc0Mjc2NWVjY2EKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fcmVq
ZWN0X211bHRpcGxlX2VuZC5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BB
U1MgUmVqZWN0IG11bHRpcGxlIGNhbGxzIHRvIFhSU2Vzc2lvbi5lbmQoKQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxlX2Vu
ZC5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX3JlamVj
dF9tdWx0aXBsZV9lbmQuaHR0cHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzVhNjI3OGUwMjE1ZjllNTYz
ZGUwNTJkZDkyYmIzNGY1NzFlOTUxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC93cHQvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBsZV9lbmQuaHR0cHMuaHRtbApAQCAt
MCwwICsxLDIxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5PgorICA8c2NyaXB0IHNyYz0vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3dlYnhyX3V0aWwuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYnhy
X3Rlc3RfY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgPGNhbnZhcz48L2NhbnZhcz4KKworICA8
c2NyaXB0PgorICAgIGNvbnN0IHRlc3ROYW1lID0gIlJlamVjdCBtdWx0aXBsZSBjYWxscyB0byBY
UlNlc3Npb24uZW5kKCkiOworICAgIGNvbnN0IGZha2VEZXZpY2VJbml0UGFyYW1zID0gVFJBQ0tF
RF9JTU1FUlNJVkVfREVWSUNFOworCisgICAgbGV0IHRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uKHNl
c3Npb24sIHRlc3REZXZpY2VDb250cm9sbGVyLCB0KSB7CisgICAgICBzZXNzaW9uLmVuZCgpOwor
ICAgICAgcmV0dXJuIHByb21pc2VfcmVqZWN0c19kb20odCwgIkludmFsaWRTdGF0ZUVycm9yIiwg
c2Vzc2lvbi5lbmQoKSkKKyAgICB9OworCisgICAgeHJfc2Vzc2lvbl9wcm9taXNlX3Rlc3QodGVz
dE5hbWUsIHRlc3RGdW5jdGlvbiwKKyAgICAgIGZha2VEZXZpY2VJbml0UGFyYW1zLCAnaW1tZXJz
aXZlLXZyJyk7CisgIDwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA5MjY3NmI0ZDZlMTk2NTlmMjcwMDZhODAyZTZiNjI2ZmQ0
OTRjZTkyLi5iZDVmYzdjMjY3MjdlYmUwNzI1YjU4ZThhZGFiZGNkNDM2MTBmZjhiIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMjI1NywzICsyMjU3LDEw
IEBAIHdlYmtpdC5vcmcvYi8yMjAwNzcgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJydGMvcHJvdG9jb2wvY3J5cHRvLXN1aXRlCiB3ZWJraXQub3JnL2IvMjIwMzMyIFsgQmlnU3Vy
KyBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWltZXNuaWZmL21pbWUtdHlwZXMv
Y2hhcnNldC1wYXJhbWV0ZXIud2luZG93Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiB3ZWJraXQu
b3JnL2IvMjIwNTUyIFsgQmlnU3VyKyBdIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Ut
d2VibS1pbml0LWluc2lkZS1zZWdtZW50Lmh0bWwgWyBGYWlsdXJlIF0KKworIyAtLS0gU3RhcnQg
V2ViWFIgdGVzdHMgLS0tICMKK2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIv
eHJTZXNzaW9uX2VuZC5odHRwcy5odG1sIFsgUGFzcyBdCitodHRwL3dwdC93ZWJ4ci94clNlc3Np
b25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLmh0bWwgWyBQYXNzIF0KK2h0dHAv
d3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0ZW0uaHR0cHMuaHRtbCBbIFBhc3MgXQor
aHR0cC93cHQvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBsZV9lbmQuaHR0cHMuaHRtbCBb
IFBhc3MgXQorIyAtLS0gRW5kIFdlYlhSIHRlc3RzIC0tLSAjCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418493</attachid>
            <date>2021-01-26 17:39:59 -0800</date>
            <delta_ts>2021-01-27 11:20:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220835-20210126173958.patch</filename>
            <type>text/plain</type>
            <size>54346</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiNmY5NDczZjZiYWFk
NWExY2ZjZjI4YTMwZDkxNjM2NjBhYTU5OC4uODQ0ODdkODFhZDJlODRkYmFiM2E0Y2NmMTVkMTAw
OWRjMjQ5MDgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTAxLTI2ICBBZGEg
Q2hhbiAgPGFkYS5jaGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIHRoZSBlbmQgWFJTZXNz
aW9uRXZlbnQgYWZ0ZXIgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIGZvciBzZXNzaW9uIHNo
dXRkb3duIGhhdmUgY29tcGxldGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjA4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0czogaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2Vf
cmVwb3J0c19zaHV0ZG93bi5odHRwcy5odG1sCisgICAgICAgICAgICAgICBodHRwL3dwdC93ZWJ4
ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwKKwor
ICAgICAgICAtIEFkZCB0aGUgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgcHJvdG9jb2wgdGhh
dCB0aGUgRGV2aWNlIGNhbiBob2xkIGEKKyAgICAgICAgd2VhayByZWZlcmVuY2UgdG8gZHVyaW5n
IGEgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBzZXNzaW9uLiBXZWJYUlNlc3Npb24KKyAgICAgICAg
aW1wbGVtZW50cyB0aGF0IHByb3RvY29sIHRvIGhhbmRsZSBjbGVhbnVwIGFmdGVyIHNodXRkb3du
IGhhcyBjb21wbGV0ZWQuCisgICAgICAgIC0gRm9yIHBsYXRmb3JtcyB0byByZXBvcnQgYXN5bmNo
cm9ub3VzIGNvbXBsZXRpb24gb2YgdGhlIHNlc3Npb24gc2h1dGRvd24sCisgICAgICAgIHRoZXkg
Y2FuIGltcGxlbWVudCBQbGF0Zm9ybVhSOjpEZXZpY2U6OnN1cHBvcnRzU2Vzc2lvblNodXRkb3du
Tm90aWZpY2F0aW9uKCkKKyAgICAgICAgdG8gcmV0dXJuIHRydWUuIFRoaXMgd2F5IFdlYlhSU2Vz
c2lvbiB3aWxsIHdhaXQgZm9yIHRoZSBzaHV0ZG93biBjb21wbGV0aW9uCisgICAgICAgICh2aWEg
dGhlIFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50OjpzZXNzaW9uRGlkRW5kKCkgY2FsbGJhY2sp
IGJlZm9yZSBzZW5kaW5nCisgICAgICAgIHRoZSBlbmQgWFJTZXNzaW9uRXZlbnQgYW5kIHJlc29s
dmluZyB0aGUgWFJTZXNzaW9uOjplbmQoKSBwcm9taXNlLgorICAgICAgICAtIFVwZGF0ZSBXZWJY
UlNlc3Npb246OmVuZCgpIHRvIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yIGlmIGNhbGxlZCBt
b3JlCisgICAgICAgIHRoYW4gb25jZS4gVGhpcyBhbHNvIG1hdGNoZXMgQ2hyb21pdW0ncyBjdXJy
ZW50IGJlaGF2aW9yLgorCisgICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpXZWJYUlNlc3Npb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpzaHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJYUlNlc3Npb246OmRpZENvbXBsZXRlU2h1dGRvd24pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
WFJTZXNzaW9uOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpzZXNzaW9u
RGlkRW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS94
ci9QbGF0Zm9ybVhSLmg6CisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6OnNldFRyYWNraW5n
QW5kUmVuZGVyaW5nQ2xpZW50KToKKyAgICAgICAgKFBsYXRmb3JtWFI6OkRldmljZTo6c3VwcG9y
dHNTZXNzaW9uU2h1dGRvd25Ob3RpZmljYXRpb24gY29uc3QpOgorICAgICAgICAqIHRlc3Rpbmcv
V2ViRmFrZVhSRGV2aWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZFhSRGV2aWNl
OjpzaW11bGF0ZVNodXRkb3duQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRl
ZFhSRGV2aWNlOjpzaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkZha2VYUkRldmljZTo6c2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJGYWtlWFJEZXZpY2U6OnNpbXVsYXRlU2h1dGRvd24pOgorICAg
ICAgICAqIHRlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmg6CisgICAgICAgICogdGVzdGluZy9XZWJG
YWtlWFJEZXZpY2UuaWRsOgorCiAyMDIxLTAxLTI1ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVHdpdHRlciBQaVAgdmlkZW8gcGF1c2VzIHdoZW4gc2Nyb2xsaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKaW5kZXgg
YjY2M2Q1MmQwNmJiMjA5YTQzNzFmN2EyMTMxMzk4ODUzYTc4ZjVhYi4uMDUwYmQ4NTFiNzlmM2Y4
MjU2Y2RlNDZhODcwYzhhY2FkYjNiYjE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VieHIvV2ViWFJTZXNzaW9uLmNwcApAQCAtNTgsNiArNTgsNyBAQCBXZWJYUlNlc3Npb246Oldl
YlhSU2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFdlYlhSU3lzdGVtJiBzeXN0ZW0sIFhSU2Vz
c2lvbk1vZAogICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJldlYlhSU2Vzc2lvbjo6YW5p
bWF0aW9uVGltZXJGaXJlZCkKIHsKICAgICBtX2RldmljZS0+aW5pdGlhbGl6ZVRyYWNraW5nQW5k
UmVuZGVyaW5nKG1vZGUpOworICAgIG1fZGV2aWNlLT5zZXRUcmFja2luZ0FuZFJlbmRlcmluZ0Ns
aWVudChtYWtlV2Vha1B0cigqdGhpcykpOwogCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CkBA
IC0zMTcsOCArMzE4LDIwIEBAIEludFNpemUgV2ViWFJTZXNzaW9uOjpyZWNvbW1lbmRlZFdlYkdM
RnJhbWVidWZmZXJSZXNvbHV0aW9uKCkgY29uc3QKIH0KIAogLy8gaHR0cHM6Ly9pbW1lcnNpdmUt
d2ViLmdpdGh1Yi5pby93ZWJ4ci8jc2h1dC1kb3duLXRoZS1zZXNzaW9uCi12b2lkIFdlYlhSU2Vz
c2lvbjo6c2h1dGRvd24oKQordm9pZCBXZWJYUlNlc3Npb246OnNodXRkb3duKEluaXRpYXRlZEJ5
U3lzdGVtIGluaXRpYXRlZEJ5U3lzdGVtKQogeworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpOworCisgICAgaWYgKG1fZW5kZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZXRo
b2Qgd2FzIGNhbGxlZCBlYXJsaWVyIHdpdGggaW5pdGlhdGVkQnlTeXN0ZW09Tm8gd2hlbiB0aGUK
KyAgICAgICAgLy8gc2Vzc2lvbiB0ZXJtaW5hdGlvbiB3YXMgcmVxdWVzdGVkIG1hbnVhbGx5IHZp
YSBYUlNlc3Npb24uZW5kKCkuIFdoZW4KKyAgICAgICAgLy8gdGhlIHN5c3RlbSBoYXMgY29tcGxl
dGVkIHRoZSBzaHV0ZG93biwgdGhpcyBtZXRob2QgaXMgbm93IGNhbGxlZCBhZ2FpbgorICAgICAg
ICAvLyB3aXRoIGluaXRpYXRlZEJ5U3lzdGVtPVllcyB0byBkbyB0aGUgZmluYWwgY2xlYW51cC4K
KyAgICAgICAgaWYgKGluaXRpYXRlZEJ5U3lzdGVtID09IEluaXRpYXRlZEJ5U3lzdGVtOjpZZXMp
CisgICAgICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICAvLyAxLiBMZXQgc2Vzc2lvbiBiZSB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmpl
Y3QuCiAgICAgLy8gMi4gU2V0IHNlc3Npb24ncyBlbmRlZCB2YWx1ZSB0byB0cnVlLgogICAgIG1f
ZW5kZWQgPSB0cnVlOwpAQCAtMzI3LDYgKzM0MCwxNCBAQCB2b2lkIFdlYlhSU2Vzc2lvbjo6c2h1
dGRvd24oKQogICAgIC8vIDQuIFJlbW92ZSBzZXNzaW9uIGZyb20gdGhlIGxpc3Qgb2YgaW5saW5l
IHNlc3Npb25zLgogICAgIG1feHJTeXN0ZW0uc2Vzc2lvbkVuZGVkKCp0aGlzKTsKIAorICAgIGlm
IChpbml0aWF0ZWRCeVN5c3RlbSA9PSBJbml0aWF0ZWRCeVN5c3RlbTo6WWVzKSB7CisgICAgICAg
IC8vIElmIHdlIGdldCBoZXJlLCB0aGUgc2Vzc2lvbiB0ZXJtaW5hdGlvbiB3YXMgdHJpZ2dlcmVk
IGJ5IHRoZSBzeXN0ZW0gcmF0aGVyIHRoYW4KKyAgICAgICAgLy8gdmlhIFhSU2Vzc2lvbi5lbmQo
KS4gU2luY2UgdGhlIHN5c3RlbSBoYXMgY29tcGxldGVkIHRoZSBzZXNzaW9uIHNodXRkb3duLCB3
ZSBjYW4KKyAgICAgICAgLy8gaW1tZWRpYXRlbHkgZG8gdGhlIGZpbmFsIGNsZWFudXAuCisgICAg
ICAgIGRpZENvbXBsZXRlU2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IC8vIFRPRE86IGNvbXBsZXRlIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgIC8vIDUuIFJlamVjdCBh
bnkgb3V0c3RhbmRpbmcgcHJvbWlzZXMgcmV0dXJuZWQgYnkgc2Vzc2lvbiB3aXRoIGFuIEludmFs
aWRTdGF0ZUVycm9yLCBleGNlcHQgZm9yIGFueSBwcm9taXNlcyByZXR1cm5lZCBieSBlbmQoKS4K
ICAgICAvLyA2LiBJZiBubyBvdGhlciBmZWF0dXJlcyBvZiB0aGUgdXNlciBhZ2VudCBhcmUgYWN0
aXZlbHkgdXNpbmcgdGhlbSwgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IHBsYXRmb3JtLXNwZWNpZmlj
IHN0ZXBzIHRvIHNodXQgZG93biB0aGUgZGV2aWNlJ3MgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBj
YXBhYmlsaXRpZXMuIFRoaXMgTVVTVCBpbmNsdWRlOgpAQCAtMzM2LDMwICszNTcsNTEgQEAgdm9p
ZCBXZWJYUlNlc3Npb246OnNodXRkb3duKCkKICAgICBpZiAobV9kZXZpY2UpCiAgICAgICAgIG1f
ZGV2aWNlLT5zaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKCk7CiAKKyAgICAvLyBJZiBkZXZp
Y2Ugd2lsbCBub3QgcmVwb3J0IHNodXRkb3duIGNvbXBsZXRpb24gdmlhIHRoZSBUcmFja2luZ0Fu
ZFJlbmRlcmluZ0NsaWVudCwKKyAgICAvLyBjb21wbGV0ZSB0aGUgc2h1dGRvd24gY2xlYW51cCBo
ZXJlLgorICAgIGlmICghbV9kZXZpY2UgfHwgIW1fZGV2aWNlLT5zdXBwb3J0c1Nlc3Npb25TaHV0
ZG93bk5vdGlmaWNhdGlvbigpKQorICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7Cit9CisK
K3ZvaWQgV2ViWFJTZXNzaW9uOjpkaWRDb21wbGV0ZVNodXRkb3duKCkKK3sKKyAgICBpZiAobV9k
ZXZpY2UpCisgICAgICAgIG1fZGV2aWNlLT5zZXRUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudChu
dWxscHRyKTsKKworICAgIC8vIFJlc29sdmUgZW5kIHByb21pc2UgZnJvbSBYUlNlc3Npb246OmVu
ZCgpCisgICAgaWYgKG1fZW5kUHJvbWlzZSkgeworICAgICAgICBtX2VuZFByb21pc2UtPnJlc29s
dmUoKTsKKyAgICAgICAgbV9lbmRQcm9taXNlID0gV1RGOjpudWxsb3B0OworICAgIH0KKworICAg
IC8vIEZyb20gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jc2h1dC1kb3du
LXRoZS1zZXNzaW9uCiAgICAgLy8gNy4gUXVldWUgYSB0YXNrIHRoYXQgZmlyZXMgYW4gWFJTZXNz
aW9uRXZlbnQgbmFtZWQgZW5kIG9uIHNlc3Npb24uCiAgICAgYXV0byBldmVudCA9IFhSU2Vzc2lv
bkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuZEV2ZW50LCB7IG1ha2VSZWZQdHIoKnRoaXMp
IH0pOwogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6V2Vi
WFIsIFdURk1vdmUoZXZlbnQpKTsKIH0KIAogLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1
Yi5pby93ZWJ4ci8jZG9tLXhyc2Vzc2lvbi1lbmQKLXZvaWQgV2ViWFJTZXNzaW9uOjplbmQoRW5k
UHJvbWlzZSYmIHByb21pc2UpCitFeGNlcHRpb25Pcjx2b2lkPiBXZWJYUlNlc3Npb246OmVuZChF
bmRQcm9taXNlJiYgcHJvbWlzZSkKIHsKLSAgICAvLyBUaGUgc2h1dGRvd24oKSBjYWxsIGJlbGxv
dyBtaWdodCByZW1vdmUgdGhlIHNvbGUgcmVmZXJlbmNlIHRvIHNlc3Npb24KKyAgICAvLyBUaGUg
c2h1dGRvd24oKSBjYWxsIGJlbG93IG1pZ2h0IHJlbW92ZSB0aGUgc29sZSByZWZlcmVuY2UgdG8g
c2Vzc2lvbgogICAgIC8vIHRoYXQgY291bGQgZXhpc3QgKHRoZSBYUlN5c3RlbSBvd25zIHRoZSBz
ZXNzaW9ucykgc28gbGV0J3MgcHJvdGVjdCB0aGlzLgotICAgIFJlZjxXZWJYUlNlc3Npb24+IHBy
b3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpOworCisgICAgaWYgKG1fZW5kZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciwgIkNhbm5vdCBlbmQgYSBzZXNzaW9uIG1vcmUgdGhhbiBvbmNlIl9zIH07
CisKICAgICAvLyAxLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBQcm9taXNlLgogICAgIC8vIDIuIFNo
dXQgZG93biB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3QuCi0gICAgaWYgKCFtX2VuZGVkKQot
ICAgICAgICBzaHV0ZG93bigpOworICAgIHNodXRkb3duKEluaXRpYXRlZEJ5U3lzdGVtOjpObyk7
CiAKICAgICAvLyAzLiBRdWV1ZSBhIHRhc2sgdG8gcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBz
OgotICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6V2Vi
WFIsIFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIC8v
IDMuMSBXYWl0IHVudGlsIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyByZWxhdGVkIHRvIHNo
dXR0aW5nIGRvd24gdGhlIHNlc3Npb24gaGF2ZSBjb21wbGV0ZWQuCi0gICAgICAgIC8vIDMuMiBS
ZXNvbHZlIHByb21pc2UuCi0gICAgICAgIHByb21pc2UucmVzb2x2ZSgpOwotICAgIH0pOworICAg
IC8vIDMuMSBXYWl0IHVudGlsIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyByZWxhdGVkIHRv
IHNodXR0aW5nIGRvd24gdGhlIHNlc3Npb24gaGF2ZSBjb21wbGV0ZWQuCisgICAgLy8gMy4yIFJl
c29sdmUgcHJvbWlzZS4KKyAgICBBU1NFUlQoIW1fZW5kUHJvbWlzZSk7CisgICAgbV9lbmRQcm9t
aXNlID0gV1RGTW92ZShwcm9taXNlKTsKIAogICAgIC8vIDQuIFJldHVybiBwcm9taXNlLgorICAg
IHJldHVybiB7IH07CiB9CiAKIGNvbnN0IGNoYXIqIFdlYlhSU2Vzc2lvbjo6YWN0aXZlRE9NT2Jq
ZWN0TmFtZSgpIGNvbnN0CkBAIC0zNzEsNiArNDEzLDEzIEBAIHZvaWQgV2ViWFJTZXNzaW9uOjpz
dG9wKCkKIHsKIH0KIAordm9pZCBXZWJYUlNlc3Npb246OnNlc3Npb25EaWRFbmQoKQoreworICAg
IC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBhcyBhIHJlc3VsdCBvZiBmaW5pc2hpbmcgdGhlIHNodXRk
b3duIGluaXRpYXRlZAorICAgIC8vIGZyb20gWFJTZXNzaW9uOjplbmQoKSwgb3Igc2Vzc2lvbiB0
ZXJtaW5hdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHN5c3RlbS4KKyAgICBzaHV0ZG93bihJbml0aWF0
ZWRCeVN5c3RlbTo6WWVzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4
ci9XZWJYUlNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNz
aW9uLmgKaW5kZXggZTRjMjdkYjRiOTBkOTIxZTIxNTU1YTZhMjg2OTA2ZTk4YzYzYTBlOC4uNTU1
NDMwYzhjM2Y3MzEyMzFhYWY0ZjBjM2ZmYjU4MjlkNjkyOWIzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIFdl
YlhSUmVmZXJlbmNlU3BhY2U7CiBjbGFzcyBXZWJYUlN5c3RlbTsKIHN0cnVjdCBYUlJlbmRlclN0
YXRlSW5pdDsKIAotY2xhc3MgV2ViWFJTZXNzaW9uIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8
V2ViWFJTZXNzaW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBB
Y3RpdmVET01PYmplY3QgeworY2xhc3MgV2ViWFJTZXNzaW9uIGZpbmFsIDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViWFJTZXNzaW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1
YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBQbGF0Zm9ybVhSOjpUcmFja2luZ0FuZFJlbmRl
cmluZ0NsaWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChXZWJYUlNlc3Npb24pOwog
cHVibGljOgogICAgIHVzaW5nIFJlcXVlc3RSZWZlcmVuY2VTcGFjZVByb21pc2UgPSBET01Qcm9t
aXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPFdlYlhSUmVmZXJlbmNlU3BhY2U+PjsKQEAgLTY0LDYg
KzY0LDkgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPjo6cmVm
OwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPjo6ZGVyZWY7CiAKKyAgICB1c2lu
ZyBUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudDo6d2Vha1B0ckZhY3Rvcnk7CisgICAgdXNpbmcg
V2Vha1ZhbHVlVHlwZSA9IFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50OjpXZWFrVmFsdWVUeXBl
OworCiAgICAgWFJFbnZpcm9ubWVudEJsZW5kTW9kZSBlbnZpcm9ubWVudEJsZW5kTW9kZSgpIGNv
bnN0OwogICAgIFhSSW50ZXJhY3Rpb25Nb2RlIGludGVyYWN0aW9uTW9kZSgpIGNvbnN0OwogICAg
IFhSVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSgpIGNvbnN0OwpAQCAtODIsNyArODUs
NyBAQCBwdWJsaWM6CiAgICAgLy8gRXZlbnRUYXJnZXQuCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFjdGl2
ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKLSAgICB2b2lkIGVuZChF
bmRQcm9taXNlJiYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGVuZChFbmRQcm9taXNlJiYpOwog
ICAgIGJvb2wgZW5kZWQoKSBjb25zdCB7IHJldHVybiBtX2VuZGVkOyB9CiAKICAgICBYUlNlc3Np
b25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KQEAgLTk5LDcgKzEwMiwxMiBA
QCBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBv
dmVycmlkZTsKICAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2h1dGRvd24o
KTsKKyAgICAvLyBQbGF0Zm9ybVhSOjpUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudAorICAgIHZv
aWQgc2Vzc2lvbkRpZEVuZCgpIGZpbmFsOworCisgICAgZW51bSBjbGFzcyBJbml0aWF0ZWRCeVN5
c3RlbSA6IGJvb2wgeyBObywgWWVzIH07CisgICAgdm9pZCBzaHV0ZG93bihJbml0aWF0ZWRCeVN5
c3RlbSk7CisgICAgdm9pZCBkaWRDb21wbGV0ZVNodXRkb3duKCk7CiAKICAgICB2b2lkIGFuaW1h
dGlvblRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CkBAIC0xMTEs
NiArMTE5LDcgQEAgcHJpdmF0ZToKICAgICBYUlZpc2liaWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlT
dGF0ZTsKICAgICBSZWY8V2ViWFJJbnB1dFNvdXJjZUFycmF5PiBtX2lucHV0U291cmNlczsKICAg
ICBib29sIG1fZW5kZWQgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPEVuZFByb21pc2U+IG1fZW5k
UHJvbWlzZTsKIAogICAgIFdlYlhSU3lzdGVtJiBtX3hyU3lzdGVtOwogICAgIFhSU2Vzc2lvbk1v
ZGUgbV9tb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJY
UlNlc3Npb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24u
aWRsCmluZGV4IDVjMDQ4YzBmNDY2MzgyZTY0MDM4YjlhYWMwNjljZjgwMTczMTkyOGUuLjk4OTVl
NjM3NGFiODNhYWNhNTBkMGY1OWYxNWVmZjI0NGQ1NmUzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5pZGwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICB1
bnNpZ25lZCBsb25nIHJlcXVlc3RBbmltYXRpb25GcmFtZShYUkZyYW1lUmVxdWVzdENhbGxiYWNr
IGNhbGxiYWNrKTsKICAgICB1bmRlZmluZWQgY2FuY2VsQW5pbWF0aW9uRnJhbWUodW5zaWduZWQg
bG9uZyBoYW5kbGUpOwogCi0gICAgUHJvbWlzZTx1bmRlZmluZWQ+IGVuZCgpOworICAgIFtNYXlU
aHJvd0V4Y2VwdGlvbl0gUHJvbWlzZTx1bmRlZmluZWQ+IGVuZCgpOwogCiAgICAgLy8gRXZlbnRz
CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmVuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3hyL1BsYXRmb3JtWFIuaAppbmRleCA2NDU1MGY0ZTAxYmYwMDViZWRlMTg0YzBmZWE0ZGI5MzEy
NjQ4YjY0Li5iOWVmNDVjMGM2OTcxNGFlODNjNzA0NDU0ZDk1NGJkNTFlYTQ3NjZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oCkBAIC00NCw2ICs0NCwxNSBAQCBlbnVt
IGNsYXNzIFJlZmVyZW5jZVNwYWNlVHlwZSB7CiAKICNpZiBFTkFCTEUoV0VCWFIpCiAKK2NsYXNz
IFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50IDogcHVibGljIENhbk1ha2VXZWFrUHRyPFRyYWNr
aW5nQW5kUmVuZGVyaW5nQ2xpZW50PiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VHJhY2tpbmdB
bmRSZW5kZXJpbmdDbGllbnQoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2Vzc2lv
bkRpZEVuZCgpID0gMDsKKyAgICAvLyBGSVhNRTogaGFuZGxlIGZyYW1lIHVwZGF0ZQorICAgIC8v
IEZJWE1FOiBoYW5kbGUgdmlzaWJpbGl0eSBjaGFuZ2VzCit9OworCiBjbGFzcyBEZXZpY2UgOiBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8RGV2aWNlPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGV2aWNlKTsKQEAgLTYxLDYgKzcwLDExIEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJp
bmcoU2Vzc2lvbk1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2h1dERvd25UcmFja2luZ0Fu
ZFJlbmRlcmluZygpID0gMDsKKyAgICB2b2lkIHNldFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50
KFdlYWtQdHI8VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ+JiYgY2xpZW50KSB7IG1fdHJhY2tp
bmdBbmRSZW5kZXJpbmdDbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7IH0KKworICAgIC8vIElmIHRo
aXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhhdCBtZWFucyB0aGUgZGV2aWNlIHdpbGwgbm90aWZ5
IFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50CisgICAgLy8gd2hlbiB0aGUgcGxhdGZvcm0gaGFz
IGNvbXBsZXRlZCBhbGwgc3RlcHMgdG8gc2h1dCBkb3duIHRoZSBYUiBzZXNzaW9uLgorICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c1Nlc3Npb25TaHV0ZG93bk5vdGlmaWNhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKIHByb3RlY3RlZDoKICAgICBEZXZpY2UoKSA9IGRlZmF1bHQ7CkBA
IC03Miw2ICs4Niw3IEBAIHByb3RlY3RlZDoKICAgICBFbmFibGVkRmVhdHVyZXNQZXJNb2RlTWFw
IG1fZW5hYmxlZEZlYXR1cmVzTWFwOwogCiAgICAgYm9vbCBtX3N1cHBvcnRzT3JpZW50YXRpb25U
cmFja2luZyB7IGZhbHNlIH07CisgICAgV2Vha1B0cjxUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVu
dD4gbV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudDsKIH07CiAKIGNsYXNzIEluc3RhbmNlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcAppbmRleCAyZmFkZjM5
MzI1MDVkYTU0YWJlMTdkMTkxMmU0MDExOTIxYTQ5NTc0Li5hNDdjMWVjYTdkZWRjZWRhNTA1MGFk
OTdiYzQ3ZDg1NjViYTU5MGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dl
YkZha2VYUkRldmljZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJE
ZXZpY2UuY3BwCkBAIC0zOSw2ICszOSwxOCBAQCB2b2lkIEZha2VYUlZpZXc6OnNldEZpZWxkT2ZW
aWV3KEZha2VYUlZpZXdJbml0OjpGaWVsZE9mVmlld0luaXQgZm92KQogICAgIG1fZm92ID0gZm92
OwogfQogCit2b2lkIFNpbXVsYXRlZFhSRGV2aWNlOjpzaW11bGF0ZVNodXRkb3duQ29tcGxldGVk
KCkKK3sKKyAgICBpZiAobV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCkKKyAgICAgICAgbV90
cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudC0+c2Vzc2lvbkRpZEVuZCgpOworfQorCit2b2lkIFNp
bXVsYXRlZFhSRGV2aWNlOjpzaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKCkKK3sKKyAgICBp
ZiAobV9zdXBwb3J0c1NodXRkb3duTm90aWZpY2F0aW9uKQorICAgICAgICBzaW11bGF0ZVNodXRk
b3duQ29tcGxldGVkKCk7Cit9CisKIFdlYkZha2VYUkRldmljZTo6V2ViRmFrZVhSRGV2aWNlKCkg
PSBkZWZhdWx0OwogCiB2b2lkIFdlYkZha2VYUkRldmljZTo6c2V0Vmlld3MoY29uc3QgVmVjdG9y
PEZha2VYUlZpZXdJbml0PiYgdmlld3MpCkBAIC0xNTYsNiArMTY4LDE2IEBAIEV4Y2VwdGlvbk9y
PFJlZjxGYWtlWFJWaWV3Pj4gV2ViRmFrZVhSRGV2aWNlOjpwYXJzZVZpZXcoY29uc3QgRmFrZVhS
Vmlld0luaXQmIGluCiAgICAgcmV0dXJuIGZha2VWaWV3OwogfQogCit2b2lkIFdlYkZha2VYUkRl
dmljZTo6c2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbigpCit7CisgICAgbV9kZXZpY2Uu
c2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbih0cnVlKTsKK30KKwordm9pZCBXZWJGYWtl
WFJEZXZpY2U6OnNpbXVsYXRlU2h1dGRvd24oKQoreworICAgIG1fZGV2aWNlLnNpbXVsYXRlU2h1
dGRvd25Db21wbGV0ZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJG
YWtlWFJEZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmgK
aW5kZXggOTdhMWI5NTcxOWU3YjMyYmY4NDE0YmNmYTM0ZDY5MGVkNzM2NzcwZi4uODQ3YmJjYjE3
NDQ4NDQ4ZjBlYzdlOGNlYjFiNmZkNmU5ZmFjOTU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L1dlYkZha2VYUkRldmljZS5oCkBAIC02OSwxNCArNjksMTggQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Rmxvb3JPcmlnaW4oUmVmUHRyPFdlYlhSUmlnaWRUcmFuc2Zvcm0+JiYgb3JpZ2luKSB7IG1f
Zmxvb3JPcmlnaW4gPSBXVEZNb3ZlKG9yaWdpbik7IH0KICAgICB2b2lkIHNldEVtdWxhdGVkUG9z
aXRpb24oYm9vbCBlbXVsYXRlZCkgeyBtX2VtdWxhdGVkUG9zaXRpb24gPSBlbXVsYXRlZDsgfQog
ICAgIFZlY3RvcjxSZWY8RmFrZVhSVmlldz4+JiB2aWV3cygpIHsgcmV0dXJuIG1fdmlld3M7IH0K
KyAgICB2b2lkIHNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24oYm9vbCBzdXBwb3J0c1No
dXRkb3duTm90aWZpY2F0aW9uKSB7IG1fc3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbiA9IHN1
cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb247IH0KKyAgICB2b2lkIHNpbXVsYXRlU2h1dGRvd25D
b21wbGV0ZWQoKTsKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplVHJhY2tpbmdBbmRSZW5k
ZXJpbmcoUGxhdGZvcm1YUjo6U2Vzc2lvbk1vZGUpIGZpbmFsIHsgfQotICAgIHZvaWQgc2h1dERv
d25UcmFja2luZ0FuZFJlbmRlcmluZygpIGZpbmFsIHsgfQorICAgIHZvaWQgc2h1dERvd25UcmFj
a2luZ0FuZFJlbmRlcmluZygpIGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNTZXNzaW9uU2h1dGRv
d25Ob3RpZmljYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N1cHBvcnRzU2h1dGRvd25O
b3RpZmljYXRpb247IH0KICAgICBPcHRpb25hbDxWZWN0b3I8RmFrZVhSQm91bmRzUG9pbnQ+PiBt
X25hdGl2ZUJvdW5kc0dlb21ldHJ5OwogICAgIFJlZlB0cjxXZWJYUlJpZ2lkVHJhbnNmb3JtPiBt
X3ZpZXdlck9yaWdpbjsKICAgICBSZWZQdHI8V2ViWFJSaWdpZFRyYW5zZm9ybT4gbV9mbG9vck9y
aWdpbjsKICAgICBib29sIG1fZW11bGF0ZWRQb3NpdGlvbiB7IGZhbHNlIH07CiAgICAgVmVjdG9y
PFJlZjxGYWtlWFJWaWV3Pj4gbV92aWV3czsKKyAgICBib29sIG1fc3VwcG9ydHNTaHV0ZG93bk5v
dGlmaWNhdGlvbiB7IGZhbHNlIH07CiB9OwogCiBjbGFzcyBXZWJGYWtlWFJEZXZpY2UgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJGYWtlWFJEZXZpY2U+IHsKQEAgLTEwNyw2ICsxMTEsMTAg
QEAgcHVibGljOgogCiAgICAgU2ltdWxhdGVkWFJEZXZpY2UmIHNpbXVsYXRlZFhSRGV2aWNlKCkg
eyByZXR1cm4gbV9kZXZpY2U7IH0KIAorICAgIHZvaWQgc2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlm
aWNhdGlvbigpOworCisgICAgdm9pZCBzaW11bGF0ZVNodXRkb3duKCk7CisKIHByaXZhdGU6CiAg
ICAgV2ViRmFrZVhSRGV2aWNlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvV2ViRmFrZVhSRGV2aWNlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhS
RGV2aWNlLmlkbAppbmRleCA5NDYyNTcxNmVkMDZiZTllMmQ5NjQ1MDA0MDIzYWM3NjExOWViNTNl
Li5iM2Y4OTFmYzZiOTU4NTU5MWFlNDNkYmQzMzQxMWU3N2I2MDY1YTRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaWRsCkBAIC02MCw0ICs2MCwxMCBAQAogCiAg
IC8vIFVzZWQgdG8gY29ubmVjdCBhbmQgc2VuZCBpbnB1dCBldmVudHMKICAgV2ViRmFrZVhSSW5w
dXRDb250cm9sbGVyIHNpbXVsYXRlSW5wdXRTb3VyY2VDb25uZWN0aW9uKEZha2VYUklucHV0U291
cmNlSW5pdCBpbnB1dFNvdXJjZSk7CisKKyAgLy8gU2V0IHVwIHRoZSBkZXZpY2Ugc28gaXQnbGwg
bm90aWZ5IHNlc3Npb24gd2hlbiB0aGUgc3lzdGVtIGhhcyBjb21wbGV0ZWQgYWxsIHN0ZXBzIGZv
ciBzZXNzaW9uIHNodXRkb3duCisgIHVuZGVmaW5lZCBzZXRTdXBwb3J0c1NodXRkb3duTm90aWZp
Y2F0aW9uKCk7CisKKyAgLy8gU2ltdWxhdGUgc2Vzc2lvbiBzaHV0ZG93biB0cmlnZ2VyZWQgYnkg
c3lzdGVtCisgIHVuZGVmaW5lZCBzaW11bGF0ZVNodXRkb3duKCk7CiB9OwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU2ZmFk
MGQ2OWU5YmZlZThhN2NlYzc2NzVlZmM2ZDZhYmZmMWJkM2UuLjRlYjNkN2YyN2QxMzQ0OGUxYjll
ZGFhNzQ5MDU0YWVjYjE1NjBmYWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMS0wMS0yNiAg
QWRhIENoYW4gIDxhZGEuY2hhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2VuZCB0aGUgZW5kIFhS
U2Vzc2lvbkV2ZW50IGFmdGVyIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyBmb3Igc2Vzc2lv
biBzaHV0ZG93biBoYXZlIGNvbXBsZXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIwODM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAg
ICAgKiBodHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfY2hlY2suaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX21hdGhfdXRpbHMuanM6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2Fzc2Vy
dHMuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90
ZXN0X2NvbnN0YW50c19mYWtlX3dvcmxkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC93
ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdGVzdF9jb25zdGFudHMuanM6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl91dGlsLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0
dHBzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRf
ZGV2aWNlX3JlcG9ydHNfc2h1dGRvd24uaHR0cHMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAg
ICAgICogaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZGVkX2J5X3N5c3RlbS5odHRwcy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lz
dGVtLmh0dHBzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhy
L3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLWV4
cGVjdGVkLmh0bWw6IEFkZGVkLgorCiAyMDIxLTAxLTI1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVk
YXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbcnVuLXdlYmtpdC10ZXN0c10gU3VwcG9ydCBweXRo
b24gbGF5b3V0IHRlc3RzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA0NzAwNmJiM2NhNmE1NzhkZmU1
NmM1ODVhNzUyYTBlODhmNDI5YjJmLi5iMWM1NzliYTNmYWU0OGVmYmE1MzI0ZjgxODVkYWRlZmJk
NGMwYTg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xh
eW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTM2MjQsNiArMzYyNCw3IEBAIHdlYmtpdC5v
cmcvYi8yMDcyNjEgWyBEZWJ1ZyBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1iYWNrZ3JvdW5kCiB3ZWJraXQub3JnL2IvMjA3MjYyIGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvdGltaW5nLW1vZGVsL2FuaW1hdGlvbnMvc3luYy1z
dGFydC10aW1lcy5odG1sIFsgUGFzcyBJbWFnZU9ubHlGYWlsdXJlIF0KIAogIyBXZWJYUiBpcyBi
ZWluZyBpbXBsZW1lbnRlZAord2Via2l0Lm9yZy9iLzIwODk4OCBodHRwL3dwdC93ZWJ4ciBbIFNr
aXAgXQogd2Via2l0Lm9yZy9iLzIwODk4OCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnhyIFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcvYi8yMTA5NjMgaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWFuaW1hdGlvbnMvYW5pbWF0aW9uLWltcG9ydGFudC0wMDIu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93
cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX2NoZWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3dw
dC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfY2hlY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDhlNWIzODdk
Yzg4NTg4OTIxY2NmYTQ5ZGQxNGRiNTgwMDk5MDBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX2NoZWNrLmh0bWwKQEAgLTAsMCAr
MSwxNyBAQAorPHNjcmlwdCBzcmM9d2VieHJfdXRpbC5qcz48L3NjcmlwdD4KKzxzY3JpcHQ+Cisn
dXNlIHN0cmljdCc7CitsZXQgZGVmaW5lZE9iamVjdHMgPSBbXTsKK2xldCB1bmRlZmluZWRPYmpl
Y3RzID0gW107CisKK2ZvckVhY2hXZWJ4ck9iamVjdCgob2JqLCBuYW1lKSA9PiB7CisgICAgaWYo
b2JqID09IHVuZGVmaW5lZCkgeworICAgICAgICB1bmRlZmluZWRPYmplY3RzLnB1c2gobmFtZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVmaW5lZE9iamVjdHMucHVzaChuYW1lKTsKKyAgICB9
Cit9KTsKKword2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7IHVuZGVmaW5lZE9iamVjdHMsIGRl
ZmluZWRPYmplY3RzfSwgJyonKTsKKworPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dl
YnhyX21hdGhfdXRpbHMuanMgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMv
d2VieHJfbWF0aF91dGlscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjU1ZmI3Mjk3ODY5MDQyN2FhYzM4Yjg0
ZDFlYWMyNGU4MzhkMGViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQv
d2VieHIvcmVzb3VyY2VzL3dlYnhyX21hdGhfdXRpbHMuanMKQEAgLTAsMCArMSw2MSBAQAorLy8g
fG1hdHJpeHwgLSBGbG9hdDMyQXJyYXksIHxpbnB1dHwgLSBwb2ludC1saWtlIGRpY3QgKG11c3Qg
aGF2ZSB4LCB5LCB6LCB3KQorbGV0IHRyYW5zZm9ybV9wb2ludF9ieV9tYXRyaXggPSBmdW5jdGlv
bihtYXRyaXgsIGlucHV0KSB7CisgIHJldHVybiB7CisgICAgeCA6IG1hdHJpeFswXSAqIGlucHV0
LnggKyBtYXRyaXhbNF0gKiBpbnB1dC55ICsgbWF0cml4WzhdICogaW5wdXQueiArIG1hdHJpeFsx
Ml0gKiBpbnB1dC53LAorICAgIHkgOiBtYXRyaXhbMV0gKiBpbnB1dC54ICsgbWF0cml4WzVdICog
aW5wdXQueSArIG1hdHJpeFs5XSAqIGlucHV0LnogKyBtYXRyaXhbMTNdICogaW5wdXQudywKKyAg
ICB6IDogbWF0cml4WzJdICogaW5wdXQueCArIG1hdHJpeFs2XSAqIGlucHV0LnkgKyBtYXRyaXhb
MTBdICogaW5wdXQueiArIG1hdHJpeFsxNF0gKiBpbnB1dC53LAorICAgIHcgOiBtYXRyaXhbM10g
KiBpbnB1dC54ICsgbWF0cml4WzddICogaW5wdXQueSArIG1hdHJpeFsxMV0gKiBpbnB1dC56ICsg
bWF0cml4WzE1XSAqIGlucHV0LncsCisgIH07Cit9CisKKy8vIENyZWF0ZXMgYSB1bml0LWxlbmd0
aCBxdWF0ZXJuaW9uLgorLy8gfGlucHV0fCAtIHBvaW50LWxpa2UgZGljdCAobXVzdCBoYXZlIHgs
IHksIHosIHcpCitsZXQgbm9ybWFsaXplX3F1YXRlcm5pb24gPSBmdW5jdGlvbihpbnB1dCkgewor
ICBjb25zdCBsZW5ndGhfc3F1YXJlZCA9IGlucHV0LnggKiBpbnB1dC54ICsgaW5wdXQueSAqIGlu
cHV0LnkgKyBpbnB1dC56ICogaW5wdXQueiArIGlucHV0LncgKiBpbnB1dC53OworICBjb25zdCBs
ZW5ndGggPSBNYXRoLnNxcnQobGVuZ3RoX3NxdWFyZWQpOworCisgIHJldHVybiB7eCA6IGlucHV0
LnggLyBsZW5ndGgsIHkgOiBpbnB1dC55IC8gbGVuZ3RoLCB6IDogaW5wdXQueiAvIGxlbmd0aCwg
dyA6IGlucHV0LncgLyBsZW5ndGh9OworfQorCisvLyB8aW5wdXR8IC0gcG9pbnQtbGlrZSBkaWN0
IChtdXN0IGhhdmUgeCwgeSwgeiwgdykKK2xldCBjb25qdWdhdGVfcXVhdGVybmlvbiA9IGZ1bmN0
aW9uKGlucHV0KSB7CisgIHJldHVybiB7eCA6IC1pbnB1dC54LCB5IDogLWlucHV0LnksIHogOiAt
aW5wdXQueiwgdyA6IGlucHV0Lnd9OworfQorCitsZXQgbXVsdGlwbHlfcXVhdGVybmlvbnMgPSBm
dW5jdGlvbihxMSwgcTIpIHsKKyAgcmV0dXJuIHsKKyAgICB3IDogcTEudyAqIHEyLncgLSBxMS54
ICogcTIueCAtIHExLnkgKiBxMi55IC0gcTEueiAqIHEyLnosCisgICAgeCA6IHExLncgKiBxMi54
ICsgcTEueCAqIHEyLncgKyBxMS55ICogcTIueiAtIHExLnogKiBxMi55LAorICAgIHkgOiBxMS53
ICogcTIueSAtIHExLnggKiBxMi56ICsgcTEueSAqIHEyLncgKyBxMS56ICogcTIueCwKKyAgICB6
IDogcTEudyAqIHEyLnogKyBxMS54ICogcTIueSAtIHExLnkgKiBxMi54ICsgcTEueiAqIHEyLncs
CisgIH0KK30KKworLy8gfHBvaW50fCAtIHBvaW50LWxpa2UgZGljdCAobXVzdCBoYXZlIHgsIHks
IHosIHcpCitsZXQgbm9ybWFsaXplX3BlcnNwZWN0aXZlID0gZnVuY3Rpb24ocG9pbnQpIHsKKyAg
aWYocG9pbnQudyA9PSAwIHx8IHBvaW50LncgPT0gMSkgcmV0dXJuIHBvaW50OworCisgIHJldHVy
biB7CisgICAgeCA6IHBvaW50LnggLyBwb2ludC53LAorICAgIHkgOiBwb2ludC55IC8gcG9pbnQu
dywKKyAgICB6IDogcG9pbnQueiAvIHBvaW50LncsCisgICAgdyA6IDEKKyAgfTsKK30KKworLy8g
fHF1YXRlcm5pb258IC0gcG9pbnQtbGlrZSBkaWN0IChtdXN0IGhhdmUgeCwgeSwgeiwgdyksCisv
LyB8aW5wdXR8IC0gcG9pbnQtbGlrZSBkaWN0IChtdXN0IGhhdmUgeCwgeSwgeiwgdykKK2xldCB0
cmFuc2Zvcm1fcG9pbnRfYnlfcXVhdGVybmlvbiA9IGZ1bmN0aW9uKHF1YXRlcm5pb24sIGlucHV0
KSB7CisgIGNvbnN0IHFfbm9ybWFsaXplZCA9IG5vcm1hbGl6ZV9xdWF0ZXJuaW9uKHF1YXRlcm5p
b24pOworICBjb25zdCBxX2NvbmogPSBjb25qdWdhdGVfcXVhdGVybmlvbihxX25vcm1hbGl6ZWQp
OworICBjb25zdCBwX2luID0gbm9ybWFsaXplX3BlcnNwZWN0aXZlKGlucHV0KTsKKworICAvLyBj
b25zdHJ1Y3QgYSBxdWF0ZXJuaW9uIG91dCBvZiB0aGUgcG9pbnQgKHRha2UgeHl6ICYgemVybyB0
aGUgcmVhbCBwYXJ0KS4KKyAgY29uc3QgcCA9IHt4IDogcF9pbi54LCB5IDogcF9pbi55LCB6IDog
cF9pbi56LCB3IDogMH07CisKKyAgLy8gdHJhbnNmb3JtIHRoZSBpbnB1dCBwb2ludAorICBjb25z
dCBwX211bCA9IG11bHRpcGx5X3F1YXRlcm5pb25zKCBxX25vcm1hbGl6ZWQsIG11bHRpcGx5X3F1
YXRlcm5pb25zKHAsIHFfY29uaikgKTsKKworICAvLyBhZGQgYmFjayB0aGUgdyBjb21wb25lbnQg
b2YgdGhlIGlucHV0CisgIHJldHVybiB7IHggOiBwX211bC54LCB5IDogcF9tdWwueSwgeiA6IHBf
bXVsLnosIHcgOiBwX2luLncgfTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvd3B0
L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2Fzc2VydHMuanMgYi9MYXlvdXRUZXN0cy9odHRw
L3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdGVzdF9hc3NlcnRzLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4
ZjEzNjRjZTAzY2U5Njg5MGNkYTk3ZGNjMjI2YjhlNDcyZGQzMzIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdGVzdF9hc3NlcnRz
LmpzCkBAIC0wLDAgKzEsMTU5IEBACisvLyBVdGlsaXR5IGFzc2VydCBmdW5jdGlvbnMuCisvLyBS
ZWxpZXMgb24gcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIHRvIGJlIGluY2x1ZGVkIGJlZm9yZSB0
aGlzIGZpbGUuCisvLyBSZWxpZXMgb24gd2VieHJfdGVzdF9jb25zdGFudHMuanMgdG8gYmUgaW5j
bHVkZWQgYmVmb3JlIHRoaXMgZmlsZS4KKworLy8gfHAxfCwgfHAyfCAtIG9iamVjdHMgd2l0aCB4
LCB5LCB6LCB3IGNvbXBvbmVudHMgdGhhdCBhcmUgZmxvYXRpbmcgcG9pbnQgbnVtYmVycworLy8g
fGVwc2lsb258IC0gZmxvYXQgc3BlY2lmeWluZyBwcmVjaXNpb24KKy8vIHxwcmVmaXh8IC0gc3Ry
aW5nIHVzZWQgYXMgYSBwcmVmaXggZm9yIGxvZ2dpbmcKK2NvbnN0IGFzc2VydF9wb2ludF9hcHBy
b3hfZXF1YWxzID0gZnVuY3Rpb24ocDEsIHAyLCBlcHNpbG9uID0gRkxPQVRfRVBTSUxPTiwgcHJl
Zml4ID0gIiIpIHsKKyAgaWYgKHAxID09IG51bGwgJiYgcDIgPT0gbnVsbCkgeworICAgIHJldHVy
bjsKKyAgfQorCisgIGFzc2VydF9ub3RfZXF1YWxzKHAxLCBudWxsLCBwcmVmaXggKyAicDEgbXVz
dCBiZSBub24tbnVsbCIpOworICBhc3NlcnRfbm90X2VxdWFscyhwMiwgbnVsbCwgcHJlZml4ICsg
InAyIG11c3QgYmUgbm9uLW51bGwiKTsKKworICBsZXQgbWlzbWF0Y2hlZF9jb21wb25lbnQgPSBu
dWxsOworICBmb3IgKGNvbnN0IHYgb2YgWyd4JywgJ3knLCAneicsICd3J10pIHsKKyAgICBpZiAo
TWF0aC5hYnMocDFbdl0gLSBwMlt2XSkgPiBlcHNpbG9uKSB7CisgICAgICBtaXNtYXRjaGVkX2Nv
bXBvbmVudCA9IHY7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZiAobWlzbWF0Y2hl
ZF9jb21wb25lbnQgIT09IG51bGwpIHsKKyAgICBsZXQgZXJyb3JfbWVzc2FnZSA9IHByZWZpeCAr
ICcgUG9pbnQgY29tcGFyaXNvbiBmYWlsZWQuXG4nOworICAgIGVycm9yX21lc3NhZ2UgKz0gYCBw
MToge3g6ICR7cDEueH0sIHk6ICR7cDEueX0sIHo6ICR7cDEuen0sIHc6ICR7cDEud319XG5gOwor
ICAgIGVycm9yX21lc3NhZ2UgKz0gYCBwMjoge3g6ICR7cDIueH0sIHk6ICR7cDIueX0sIHo6ICR7
cDIuen0sIHc6ICR7cDIud319XG5gOworICAgIGVycm9yX21lc3NhZ2UgKz0gYCBEaWZmZXJlbmNl
IGluIGNvbXBvbmVudCAke21pc21hdGNoZWRfY29tcG9uZW50fSBleGNlZWRlZCB0aGUgZ2l2ZW4g
ZXBzaWxvbi5cbmA7CisgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMocDJbbWlzbWF0Y2hlZF9jb21w
b25lbnRdLCBwMVttaXNtYXRjaGVkX2NvbXBvbmVudF0sIGVwc2lsb24sIGVycm9yX21lc3NhZ2Up
OworICB9Cit9OworCisvLyB8cDF8LCB8cDJ8IC0gb2JqZWN0cyB3aXRoIHgsIHksIHosIHcgY29t
cG9uZW50cyB0aGF0IGFyZSBmbG9hdGluZyBwb2ludCBudW1iZXJzCisvLyB8ZXBzaWxvbnwgLSBm
bG9hdCBzcGVjaWZ5aW5nIHByZWNpc2lvbgorLy8gfHByZWZpeHwgLSBzdHJpbmcgdXNlZCBhcyBh
IHByZWZpeCBmb3IgbG9nZ2luZworY29uc3QgYXNzZXJ0X3BvaW50X3NpZ25pZmljYW50bHlfbm90
X2VxdWFscyA9IGZ1bmN0aW9uKHAxLCBwMiwgZXBzaWxvbiA9IEZMT0FUX0VQU0lMT04sIHByZWZp
eCA9ICIiKSB7CisKKyAgYXNzZXJ0X25vdF9lcXVhbHMocDEsIG51bGwsIHByZWZpeCArICJwMSBt
dXN0IGJlIG5vbi1udWxsIik7CisgIGFzc2VydF9ub3RfZXF1YWxzKHAyLCBudWxsLCBwcmVmaXgg
KyAicDIgbXVzdCBiZSBub24tbnVsbCIpOworCisgIGxldCBtaXNtYXRjaGVkX2NvbXBvbmVudCA9
IG51bGw7CisgIGZvciAoY29uc3QgdiBvZiBbJ3gnLCAneScsICd6JywgJ3cnXSkgeworICAgIGlm
IChNYXRoLmFicyhwMVt2XSAtIHAyW3ZdKSA+IGVwc2lsb24pIHsKKyAgICAgIG1pc21hdGNoZWRf
Y29tcG9uZW50ID0gdjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChtaXNtYXRj
aGVkX2NvbXBvbmVudCA9PT0gbnVsbCkgeworICAgIGxldCBlcnJvcl9tZXNzYWdlID0gcHJlZml4
ICsgJyBQb2ludCBjb21wYXJpc29uIGZhaWxlZC5cbic7CisgICAgZXJyb3JfbWVzc2FnZSArPSBg
IHAxOiB7eDogJHtwMS54fSwgeTogJHtwMS55fSwgejogJHtwMS56fSwgdzogJHtwMS53fX1cbmA7
CisgICAgZXJyb3JfbWVzc2FnZSArPSBgIHAyOiB7eDogJHtwMi54fSwgeTogJHtwMi55fSwgejog
JHtwMi56fSwgdzogJHtwMi53fX1cbmA7CisgICAgZXJyb3JfbWVzc2FnZSArPSBgIERpZmZlcmVu
Y2UgaW4gY29tcG9uZW50cyBkaWQgbm90IGV4Y2VlZGVkIHRoZSBnaXZlbiBlcHNpbG9uLlxuYDsK
KyAgICBhc3NlcnRfdW5yZWFjaGVkKGVycm9yX21lc3NhZ2UpOworICB9Cit9OworCisvLyB8dDF8
LCB8dDJ8IC0gb2JqZWN0cyBjb250YWluaW5nIHBvc2l0aW9uIGFuZCBvcmllbnRhdGlvbi4KKy8v
IHxlcHNpbG9ufCAtIGZsb2F0IHNwZWNpZnlpbmcgcHJlY2lzaW9uCisvLyB8cHJlZml4fCAtIHN0
cmluZyB1c2VkIGFzIGEgcHJlZml4IGZvciBsb2dnaW5nCitjb25zdCBhc3NlcnRfdHJhbnNmb3Jt
X2FwcHJveF9lcXVhbHMgPSBmdW5jdGlvbih0MSwgdDIsIGVwc2lsb24gPSBGTE9BVF9FUFNJTE9O
LCBwcmVmaXggPSAiIikgeworICBpZiAodDEgPT0gbnVsbCAmJiB0MiA9PSBudWxsKSB7CisgICAg
cmV0dXJuOworICB9CisKKyAgYXNzZXJ0X25vdF9lcXVhbHModDEsIG51bGwsIHByZWZpeCArICJ0
MSBtdXN0IGJlIG5vbi1udWxsIik7CisgIGFzc2VydF9ub3RfZXF1YWxzKHQyLCBudWxsLCBwcmVm
aXggKyAidDIgbXVzdCBiZSBub24tbnVsbCIpOworCisgIGFzc2VydF9wb2ludF9hcHByb3hfZXF1
YWxzKHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbiwgZXBzaWxvbiwgcHJlZml4ICsgInBvc2l0aW9u
cyBtdXN0IGJlIGVxdWFsIik7CisgIGFzc2VydF9wb2ludF9hcHByb3hfZXF1YWxzKHQxLm9yaWVu
dGF0aW9uLCB0Mi5vcmllbnRhdGlvbiwgZXBzaWxvbiwgcHJlZml4ICsgIm9yaWVudGF0aW9ucyBt
dXN0IGJlIGVxdWFsIik7Cit9OworCisvLyB8bTF8LCB8bTJ8IC0gYXJyYXlzIG9mIGZsb2F0aW5n
IHBvaW50IG51bWJlcnMKKy8vIHxlcHNpbG9ufCAtIGZsb2F0IHNwZWNpZnlpbmcgcHJlY2lzaW9u
CisvLyB8cHJlZml4fCAtIHN0cmluZyB1c2VkIGFzIGEgcHJlZml4IGZvciBsb2dnaW5nCitjb25z
dCBhc3NlcnRfbWF0cml4X2FwcHJveF9lcXVhbHMgPSBmdW5jdGlvbihtMSwgbTIsIGVwc2lsb24g
PSBGTE9BVF9FUFNJTE9OLCBwcmVmaXggPSAiIikgeworICBpZiAobTEgPT0gbnVsbCAmJiBtMiA9
PSBudWxsKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgYXNzZXJ0X25vdF9lcXVhbHMobTEsIG51
bGwsIHByZWZpeCArICJtMSBtdXN0IGJlIG5vbi1udWxsIik7CisgIGFzc2VydF9ub3RfZXF1YWxz
KG0yLCBudWxsLCBwcmVmaXggKyAibTIgbXVzdCBiZSBub24tbnVsbCIpOworCisgIGFzc2VydF9l
cXVhbHMobTEubGVuZ3RoLCAxNiwgcHJlZml4ICsgIm0xIG11c3QgaGF2ZSBsZW5ndGggb2YgMTYi
KTsKKyAgYXNzZXJ0X2VxdWFscyhtMi5sZW5ndGgsIDE2LCBwcmVmaXggKyAibTIgbXVzdCBoYXZl
IGxlbmd0aCBvZiAxNiIpOworCisgIGxldCBtaXNtYXRjaGVkX2VsZW1lbnQgPSAtMTsKKyAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7CisgICAgaWYgKE1hdGguYWJzKG0xW2ldIC0gbTJb
aV0pID4gZXBzaWxvbikgeworICAgICAgbWlzbWF0Y2hlZF9lbGVtZW50ID0gaTsKKyAgICAgIGJy
ZWFrOworICAgIH0KKyAgfQorCisgIGlmIChtaXNtYXRjaGVkX2VsZW1lbnQgPiAtMSkgeworICAg
IGxldCBlcnJvcl9tZXNzYWdlID0gcHJlZml4ICsgJ01hdHJpeCBjb21wYXJpc29uIGZhaWxlZC5c
bic7CisgICAgZXJyb3JfbWVzc2FnZSArPSAnIERpZmZlcmVuY2UgaW4gZWxlbWVudCAnICsgbWlz
bWF0Y2hlZF9lbGVtZW50ICsKKyAgICAgICAgJyBleGNlZWRlZCB0aGUgZ2l2ZW4gZXBzaWxvbi5c
bic7CisKKyAgICBlcnJvcl9tZXNzYWdlICs9ICcgTWF0cml4IDE6IFsnICsgbTEuam9pbignLCcp
ICsgJ11cbic7CisgICAgZXJyb3JfbWVzc2FnZSArPSAnIE1hdHJpeCAyOiBbJyArIG0yLmpvaW4o
JywnKSArICddXG4nOworCisgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMoCisgICAgICAgIG0xW21p
c21hdGNoZWRfZWxlbWVudF0sIG0yW21pc21hdGNoZWRfZWxlbWVudF0sIGVwc2lsb24sCisgICAg
ICAgIGVycm9yX21lc3NhZ2UpOworICB9Cit9OworCisvLyB8bTF8LCB8bTJ8IC0gYXJyYXlzIG9m
IGZsb2F0aW5nIHBvaW50IG51bWJlcnMKKy8vIHxlcHNpbG9ufCAtIGZsb2F0IHNwZWNpZnlpbmcg
cHJlY2lzaW9uCisvLyB8cHJlZml4fCAtIHN0cmluZyB1c2VkIGFzIGEgcHJlZml4IGZvciBsb2dn
aW5nCitjb25zdCBhc3NlcnRfbWF0cml4X3NpZ25pZmljYW50bHlfbm90X2VxdWFscyA9IGZ1bmN0
aW9uKG0xLCBtMiwgZXBzaWxvbiA9IEZMT0FUX0VQU0lMT04sIHByZWZpeCA9ICIiKSB7CisgIGlm
IChtMSA9PSBudWxsICYmIG0yID09IG51bGwpIHsKKyAgICByZXR1cm47CisgIH0KKworICBhc3Nl
cnRfbm90X2VxdWFscyhtMSwgbnVsbCwgcHJlZml4ICsgIm0xIG11c3QgYmUgbm9uLW51bGwiKTsK
KyAgYXNzZXJ0X25vdF9lcXVhbHMobTIsIG51bGwsIHByZWZpeCArICJtMiBtdXN0IGJlIG5vbi1u
dWxsIik7CisKKyAgYXNzZXJ0X2VxdWFscyhtMS5sZW5ndGgsIDE2LCBwcmVmaXggKyAibTEgbXVz
dCBoYXZlIGxlbmd0aCBvZiAxNiIpOworICBhc3NlcnRfZXF1YWxzKG0yLmxlbmd0aCwgMTYsIHBy
ZWZpeCArICJtMiBtdXN0IGhhdmUgbGVuZ3RoIG9mIDE2Iik7CisKKyAgbGV0IG1pc21hdGNoID0g
ZmFsc2U7CisgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkgeworICAgIGlmIChNYXRoLmFi
cyhtMVtpXSAtIG0yW2ldKSA+IGVwc2lsb24pIHsKKyAgICAgIG1pc21hdGNoID0gdHJ1ZTsKKyAg
ICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmICghbWlzbWF0Y2gpIHsKKyAgICBsZXQgbTFf
c3RyID0gJ1snOworICAgIGxldCBtMl9zdHIgPSAnWyc7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxNjsgKytpKSB7CisgICAgICBtMV9zdHIgKz0gbTFbaV0gKyAoaSA8IDE1ID8gJywgJyA6ICcn
KTsKKyAgICAgIG0yX3N0ciArPSBtMltpXSArIChpIDwgMTUgPyAnLCAnIDogJycpOworICAgIH0K
KyAgICBtMV9zdHIgKz0gJ10nOworICAgIG0yX3N0ciArPSAnXSc7CisKKyAgICBsZXQgZXJyb3Jf
bWVzc2FnZSA9IHByZWZpeCArICdNYXRyaXggY29tcGFyaXNvbiBmYWlsZWQuXG4nOworICAgIGVy
cm9yX21lc3NhZ2UgKz0KKyAgICAgICAgJyBObyBlbGVtZW50IGV4Y2VlZGVkIHRoZSBnaXZlbiBl
cHNpbG9uICcgKyBlcHNpbG9uICsgJy5cbic7CisKKyAgICBlcnJvcl9tZXNzYWdlICs9ICcgTWF0
cml4IEE6ICcgKyBtMV9zdHIgKyAnXG4nOworICAgIGVycm9yX21lc3NhZ2UgKz0gJyBNYXRyaXgg
QjogJyArIG0yX3N0ciArICdcbic7CisKKyAgICBhc3NlcnRfdW5yZWFjaGVkKGVycm9yX21lc3Nh
Z2UpOworICB9Cit9OworCisvLyB8cjF8LCB8cjJ8IC0gWFJSYXkgb2JqZWN0cworLy8gfGVwc2ls
b258IC0gZmxvYXQgc3BlY2lmeWluZyBwcmVjaXNpb24KKy8vIHxwcmVmaXh8IC0gc3RyaW5nIHVz
ZWQgYXMgYSBwcmVmaXggZm9yIGxvZ2dpbmcKK2NvbnN0IGFzc2VydF9yYXlfYXBwcm94X2VxdWFs
cyA9IGZ1bmN0aW9uKHIxLCByMiwgZXBzaWxvbiA9IEZMT0FUX0VQU0lMT04sIHByZWZpeCA9ICIi
KSB7CisgIGFzc2VydF9wb2ludF9hcHByb3hfZXF1YWxzKHIxLm9yaWdpbiwgcjIub3JpZ2luLCBl
cHNpbG9uLCBwcmVmaXggKyAib3JpZ2luOiIpOworICBhc3NlcnRfcG9pbnRfYXBwcm94X2VxdWFs
cyhyMS5kaXJlY3Rpb24sIHIyLmRpcmVjdGlvbiwgZXBzaWxvbiwgcHJlZml4ICsgImRpcmVjdGlv
bjoiKTsKKyAgYXNzZXJ0X21hdHJpeF9hcHByb3hfZXF1YWxzKHIxLm1hdHJpeCwgcjIubWF0cml4
LCBlcHNpbG9uLCBwcmVmaXggKyAibWF0cml4OiIpOworfTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2h0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50cy5qcyBiL0xh
eW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50cy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xMzlhYjc3NTY4NGM0MjdlMzliYzUwNzE5MjI2Yzk2ZmNiZDNhNWQ1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dl
YnhyX3Rlc3RfY29uc3RhbnRzLmpzCkBAIC0wLDAgKzEsMTczIEBACisvLyBhc3NlcnRfZXF1YWxz
IGNhbiBmYWlsIHdoZW4gY29tcGFyaW5nIGZsb2F0cyBkdWUgdG8gcHJlY2lzaW9uIGVycm9ycywg
c28KKy8vIHVzZSBhc3NlcnRfYXBwcm94X2VxdWFscyB3aXRoIHRoaXMgY29uc3RhbnQgaW5zdGVh
ZAorY29uc3QgRkxPQVRfRVBTSUxPTiA9IDAuMDAxOworCisvLyBJZGVudGl0eSBtYXRyaXgKK2Nv
bnN0IElERU5USVRZX01BVFJJWCA9IFsxLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxXTsKKworY29uc3QgSURFTlRJVFlfVFJB
TlNGT1JNID0geworICAgIHBvc2l0aW9uOiBbMCwgMCwgMF0sCisgICAgb3JpZW50YXRpb246IFsw
LCAwLCAwLCAxXSwKK307CisKKy8vIEEgdmFsaWQgcG9zZSBtYXRyaXgvdHJhbnNmb3JtIGZvciAg
d2hlbiB3ZSBkb24ndCBjYXJlIGFib3V0IHNwZWNpZmljIHZhbHVlcworLy8gTm90ZSB0aGF0IHRo
ZXNlIHR3byBzaG91bGQgYmUgaWRlbnRpY2FsLCBqdXN0IGRpZmZlcmVudCByZXByZXNlbnRhdGlv
bnMKK2NvbnN0IFZBTElEX1BPU0VfTUFUUklYID0gWzAsIDEsIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwg
MCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsIDFdOworCitjb25z
dCBWQUxJRF9QT1NFX1RSQU5TRk9STSA9IHsKKyAgICBwb3NpdGlvbjogWzEsIDEsIDFdLAorICAg
IG9yaWVudGF0aW9uOiBbMC41LCAwLjUsIDAuNSwgMC41XQorfTsKKworY29uc3QgVkFMSURfUFJP
SkVDVElPTl9NQVRSSVggPQorICAgIFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAzLCAyLCAtMSwg
LTEsIDAsIDAsIC0wLjIsIDBdOworCisvLyBUaGlzIGlzIGEgZGVjb21wb3NlZCB2ZXJzaW9uIG9m
IHRoZSBhYm92ZS4KK2NvbnN0IFZBTElEX0ZJRUxEX09GX1ZJRVcgPSB7CisgICAgdXBEZWdyZWVz
OiA3MS41NjUsCisgICAgZG93bkRlZ3JlZXM6IC00NSwKKyAgICBsZWZ0RGVncmVlczotNjMuNDM0
OSwKKyAgICByaWdodERlZ3JlZXM6IDc1Ljk2MzcKK307CisKKy8vIEEgdmFsaWQgaW5wdXQgZ3Jp
cCBtYXRyaXggZm9yICB3aGVuIHdlIGRvbid0IGNhcmUgYWJvdXQgc3BlY2lmaWMgdmFsdWVzCitj
b25zdCBWQUxJRF9HUklQID0gWzEsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgIDAsIDEs
IDAsIDAsCisgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAg
ICAgIDQsIDMsIDIsIDFdOworCitjb25zdCBWQUxJRF9HUklQX1RSQU5TRk9STSA9IHsKKyAgICBw
b3NpdGlvbjogWzQsIDMsIDJdLAorICAgIG9yaWVudGF0aW9uOiBbMCwgMCwgMCwgMV0KK307CisK
Ky8vIEEgdmFsaWQgaW5wdXQgcG9pbnRlciBvZmZzZXQgZm9yICB3aGVuIHdlIGRvbid0IGNhcmUg
YWJvdXQgc3BlY2lmaWMgdmFsdWVzCitjb25zdCBWQUxJRF9QT0lOVEVSID0gWzEsIDAsIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDFdOworCitj
b25zdCBWQUxJRF9QT0lOVEVSX1RSQU5TRk9STSA9IHsKKyAgICBwb3NpdGlvbjogWzAsIDAsIDFd
LAorICAgIG9yaWVudGF0aW9uOiBbMCwgMCwgMCwgMV0KK307CisKKy8vIEEgVmFsaWQgTG9jYWwg
dG8gZmxvb3IgbWF0cml4L3RyYW5zZm9ybSBmb3Igd2hlbiB3ZSBkb24ndCBjYXJlIGFib3V0IHNw
ZWNpZmljCisvLyB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGlkZW50aWNhbCwg
anVzdCBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zLgorY29uc3QgVkFMSURfRkxPT1JfT1JJR0lO
X01BVFJJWCA9IFsxLCAwLCAgICAwLCAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAxLCAgICAwLCAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCAwLCAgICAxLCAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxLCAxLjY1LCAtMSwgMV07CisKK2NvbnN0IFZBTElEX0ZMT09SX09SSUdJTiA9IHsKKyAgICBw
b3NpdGlvbjogWy0xLjAsIC0xLjY1LCAxLjBdLAorICAgIG9yaWVudGF0aW9uOiBbMCwgMCwgMCwg
MV0KK307CisKK2NvbnN0IFZBTElEX0JPVU5EUyA9IFsKKyAgICB7IHg6IDMuMCwgejogLTIuMCB9
LAorICAgIHsgeDogMy41LCB6OiAwLjAgfSwKKyAgICB7IHg6IDMuMCwgejogMi4wIH0sCisgICAg
eyB4OiAtMy4wLCB6OiAyLjAgfSwKKyAgICB7IHg6IC0zLjUsIHo6IDAuMCB9LAorICAgIHsgeDog
LTMuMCwgejogLTIuMCB9CitdOworCitjb25zdCBWQUxJRF9SRVNPTFVUSU9OID0geworICAgIHdp
ZHRoOiAyMDAsCisgICAgaGVpZ2h0OiAyMDAKK307CisKK2NvbnN0IExFRlRfT0ZGU0VUID0gewor
ICAgIHBvc2l0aW9uOiBbLTAuMSwgMCwgMF0sCisgICAgb3JpZW50YXRpb246IFswLCAwLCAwLCAx
XQorfTsKKworY29uc3QgUklHSFRfT0ZGU0VUID0geworICAgIHBvc2l0aW9uOiBbMC4xLCAwLCAw
XSwKKyAgICBvcmllbnRhdGlvbjogWzAsIDAsIDAsIDFdCit9OworCitjb25zdCBWQUxJRF9WSUVX
UyA9IFt7CisgICAgICAgIGV5ZToibGVmdCIsCisgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IFZB
TElEX1BST0pFQ1RJT05fTUFUUklYLAorICAgICAgICB2aWV3T2Zmc2V0OiBMRUZUX09GRlNFVCwK
KyAgICAgICAgcmVzb2x1dGlvbjogVkFMSURfUkVTT0xVVElPTgorICAgIH0sIHsKKyAgICAgICAg
ZXllOiJyaWdodCIsCisgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IFZBTElEX1BST0pFQ1RJT05f
TUFUUklYLAorICAgICAgICB2aWV3T2Zmc2V0OiBSSUdIVF9PRkZTRVQsCisgICAgICAgIHJlc29s
dXRpb246IFZBTElEX1JFU09MVVRJT04KKyAgICB9LAorXTsKKworY29uc3QgTk9OX0lNTUVSU0lW
RV9WSUVXUyA9IFt7CisgICAgICAgIGV5ZTogIm5vbmUiLAorICAgICAgICBwcm9qZWN0aW9uTWF0
cml4OiBWQUxJRF9QUk9KRUNUSU9OX01BVFJJWCwKKyAgICAgICAgdmlld09mZnNldDogSURFTlRJ
VFlfVFJBTlNGT1JNLAorICAgICAgICByZXNvbHV0aW9uOiBWQUxJRF9SRVNPTFVUSU9OLAorICAg
IH0KK107CisKK2NvbnN0IEFMTF9GRUFUVVJFUyA9IFsKKyAgJ3ZpZXdlcicsCisgICdsb2NhbCcs
CisgICdsb2NhbC1mbG9vcicsCisgICdib3VuZGVkLWZsb29yJywKKyAgJ3VuYm91bmRlZCcsCisg
ICdoaXQtdGVzdCcsCisgICdkb20tb3ZlcmxheScsCisgICdsaWdodC1lc3RpbWF0aW9uJywKKyAg
J2FuY2hvcnMnLAorXTsKKworY29uc3QgVFJBQ0tFRF9JTU1FUlNJVkVfREVWSUNFID0geworICAg
IHN1cHBvcnRzSW1tZXJzaXZlOiB0cnVlLAorICAgIHN1cHBvcnRlZE1vZGVzOiBbICJpbmxpbmUi
LCAiaW1tZXJzaXZlLXZyIl0sCisgICAgdmlld3M6IFZBTElEX1ZJRVdTLAorICAgIHZpZXdlck9y
aWdpbjogSURFTlRJVFlfVFJBTlNGT1JNLAorICAgIHN1cHBvcnRlZEZlYXR1cmVzOiBBTExfRkVB
VFVSRVMKK307CisKK2NvbnN0IElNTUVSU0lWRV9BUl9ERVZJQ0UgPSB7CisgIHN1cHBvcnRzSW1t
ZXJzaXZlOiB0cnVlLAorICBzdXBwb3J0ZWRNb2RlczogWyAiaW5saW5lIiwgImltbWVyc2l2ZS1h
ciJdLAorICB2aWV3czogVkFMSURfVklFV1MsCisgIHZpZXdlck9yaWdpbjogSURFTlRJVFlfVFJB
TlNGT1JNLAorICBzdXBwb3J0ZWRGZWF0dXJlczogQUxMX0ZFQVRVUkVTCit9OworCitjb25zdCBW
QUxJRF9OT05fSU1NRVJTSVZFX0RFVklDRSA9IHsKKyAgICBzdXBwb3J0c0ltbWVyc2l2ZTogZmFs
c2UsCisgICAgc3VwcG9ydGVkTW9kZXM6IFsiaW5saW5lIl0sCisgICAgdmlld3M6IE5PTl9JTU1F
UlNJVkVfVklFV1MsCisgICAgdmlld2VyT3JpZ2luOiBJREVOVElUWV9UUkFOU0ZPUk0sCisgICAg
c3VwcG9ydGVkRmVhdHVyZXM6IEFMTF9GRUFUVVJFUworfTsKKworY29uc3QgVkFMSURfQ09OVFJP
TExFUiA9IHsKKyAgICBoYW5kZWRuZXNzOiAibm9uZSIsCisgICAgdGFyZ2V0UmF5TW9kZTogInRy
YWNrZWQtcG9pbnRlciIsCisgICAgcG9pbnRlck9yaWdpbjogVkFMSURfUE9JTlRFUl9UUkFOU0ZP
Uk0sCisgICAgcHJvZmlsZXM6IFtdCit9OworCitjb25zdCBSSUdIVF9DT05UUk9MTEVSID0gewor
ICAgIGhhbmRlZG5lc3M6ICJyaWdodCIsCisgICAgdGFyZ2V0UmF5TW9kZTogInRyYWNrZWQtcG9p
bnRlciIsCisgICAgcG9pbnRlck9yaWdpbjogVkFMSURfUE9JTlRFUl9UUkFOU0ZPUk0sCisgICAg
cHJvZmlsZXM6IFtdCit9OworCitjb25zdCBTQ1JFRU5fQ09OVFJPTExFUiA9IHsKKyAgICBoYW5k
ZWRuZXNzOiAibm9uZSIsCisgICAgdGFyZ2V0UmF5TW9kZTogInNjcmVlbiIsCisgICAgcG9pbnRl
ck9yaWdpbjogVkFMSURfUE9JTlRFUl9UUkFOU0ZPUk0sCisgICAgcHJvZmlsZXM6IFtdCit9Owpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3Rl
c3RfY29uc3RhbnRzX2Zha2Vfd29ybGQuanMgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci9y
ZXNvdXJjZXMvd2VieHJfdGVzdF9jb25zdGFudHNfZmFrZV93b3JsZC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
ZTQyOGUyMTU1MGY2YTUyNDYxY2I4NDcwZGVlMGFhNDRlM2Y0NTc4Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3Rlc3RfY29uc3Rh
bnRzX2Zha2Vfd29ybGQuanMKQEAgLTAsMCArMSw3OSBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBU
aGlzIGZpbGUgaW50cm9kdWNlcyBjb25zdGFudHMgdXNlZCB0byBtb2NrIGZha2Ugd29ybGQgZm9y
IHRoZSBwdXJwb3NlcyBvZiBoaXQgdGVzdC4KKworLy8gR2VuZXJhdGVzIEZha2VYUldvcmxkSW5p
dCBkaWN0aW9uYXJ5IHdpdGggZ2l2ZW4gZGltZW5zaW9ucy4KKy8vIFRoZSBnZW5lcmF0ZWQgZmFr
ZSB3b3JsZCB3aWxsIGhhdmUgZmxvb3IgYW5kIGZyb250IHdhbGwgdHJlYXRlZCBhcyBwbGFuZXMs
CisvLyBzaWRlIHdhbGxzIHRyZWF0ZWQgYXMgbWVzaGVzLCBhbmQgY2VpbGluZyB0cmVhdGVkIGFz
IHBvaW50cy4KKy8vIHdpZHRoIC0gWCBheGlzLCBpbiBtZXRlcnMKKy8vIGhlaWdodCAtIFkgYXhp
cywgaW4gbWV0ZXJzCisvLyBsZW5ndGggLSBaIGF4aXMsIGluIG1ldGVycworZnVuY3Rpb24gY3Jl
YXRlRmFrZVdvcmxkKAorICB3aWR0aCwgaGVpZ2h0LCBsZW5ndGgsCisgIGZyb250X3dhbGxfYW5k
X2Zsb29yX3R5cGUgPSAicGxhbmUiLAorICBzaWRlX3dhbGxzX3R5cGUgPSAibWVzaCIsCisgIGNl
aWxpbmdfdHlwZSA9ICJwb2ludCIpIHsKKyAgLy8gVmVydGljZXM6CisgIGNvbnN0IEJPVFRPTV9M
RUZUX0ZST05UID0geyB4OiAtd2lkdGgvMiwgeTogMCwgejogLWxlbmd0aC8yLCB3OiAxfTsKKyAg
Y29uc3QgQk9UVE9NX1JJR0hUX0ZST05UID0geyB4OiB3aWR0aC8yLCB5OiAwLCB6OiAtbGVuZ3Ro
LzIsIHc6IDF9OworCisgIGNvbnN0IFRPUF9MRUZUX0ZST05UID0geyB4OiAtd2lkdGgvMiwgeTog
aGVpZ2h0LCB6OiAtbGVuZ3RoLzIsIHc6IDF9OworICBjb25zdCBUT1BfUklHSFRfRlJPTlQgPSB7
IHg6IHdpZHRoLzIsIHk6IGhlaWdodCwgejogLWxlbmd0aC8yLCB3OiAxfTsKKworICBjb25zdCBC
T1RUT01fTEVGVF9CQUNLID0geyB4OiAtd2lkdGgvMiwgeTogMCwgejogbGVuZ3RoLzIsIHc6IDF9
OworICBjb25zdCBCT1RUT01fUklHSFRfQkFDSyA9IHsgeDogd2lkdGgvMiwgeTogMCwgejogbGVu
Z3RoLzIsIHc6IDF9OworCisgIGNvbnN0IFRPUF9MRUZUX0JBQ0sgPSB7IHg6IC13aWR0aC8yLCB5
OiBoZWlnaHQsIHo6IGxlbmd0aC8yLCB3OiAxfTsKKyAgY29uc3QgVE9QX1JJR0hUX0JBQ0sgPSB7
IHg6IHdpZHRoLzIsIHk6IGhlaWdodCwgejogbGVuZ3RoLzIsIHc6IDF9OworCisgIC8vIEZhY2Vz
OgorICBjb25zdCBGUk9OVF9XQUxMX0FORF9GTE9PUl9GQUNFUyA9IFsKKyAgICAvLyBGcm9udCB3
YWxsOgorICAgIHsgdmVydGljZXM6IFtCT1RUT01fTEVGVF9GUk9OVCwgQk9UVE9NX1JJR0hUX0ZS
T05ULCBUT1BfUklHSFRfRlJPTlRdIH0sCisgICAgeyB2ZXJ0aWNlczogW0JPVFRPTV9MRUZUX0ZS
T05ULCBUT1BfUklHSFRfRlJPTlQsIFRPUF9MRUZUX0ZST05UXSB9LAorICAgIC8vIEZsb29yOgor
ICAgIHsgdmVydGljZXM6IFtCT1RUT01fTEVGVF9GUk9OVCwgQk9UVE9NX1JJR0hUX0ZST05ULCBC
T1RUT01fUklHSFRfQkFDS10gfSwKKyAgICB7IHZlcnRpY2VzOiBbQk9UVE9NX0xFRlRfRlJPTlQs
IEJPVFRPTV9MRUZUX0JBQ0ssIEJPVFRPTV9SSUdIVF9CQUNLXSB9LAorICBdOworCisgIGNvbnN0
IENFSUxJTkdfRkFDRVMgPSBbCisgICAgLy8gQ2VpbGluZzoKKyAgICB7IHZlcnRpY2VzOiBbVE9Q
X0xFRlRfRlJPTlQsIFRPUF9SSUdIVF9GUk9OVCwgVE9QX1JJR0hUX0JBQ0tdIH0sCisgICAgeyB2
ZXJ0aWNlczogW1RPUF9MRUZUX0ZST05ULCBUT1BfTEVGVF9CQUNLLCBUT1BfUklHSFRfQkFDS10g
fSwKKyAgXTsKKworICBjb25zdCBTSURFX1dBTExTX0ZBQ0VTID0gWworICAgIC8vIExlZnQ6Cisg
ICAgeyB2ZXJ0aWNlczogW0JPVFRPTV9MRUZUX0ZST05ULCBUT1BfTEVGVF9GUk9OVCwgVE9QX0xF
RlRfQkFDS10gfSwKKyAgICB7IHZlcnRpY2VzOiBbQk9UVE9NX0xFRlRfRlJPTlQsIEJPVFRPTV9M
RUZUX0JBQ0ssIFRPUF9MRUZUX0JBQ0tdIH0sCisgICAgLy8gUmlnaHQ6CisgICAgeyB2ZXJ0aWNl
czogW0JPVFRPTV9SSUdIVF9GUk9OVCwgVE9QX1JJR0hUX0ZST05ULCBUT1BfUklHSFRfQkFDS10g
fSwKKyAgICB7IHZlcnRpY2VzOiBbQk9UVE9NX1JJR0hUX0ZST05ULCBCT1RUT01fUklHSFRfQkFD
SywgVE9QX1JJR0hUX0JBQ0tdIH0sCisgIF07CisKKyAgLy8gUmVnaW9uczoKKyAgY29uc3QgRlJP
TlRfV0FMTF9BTkRfRkxPT1JfUkVHSU9OID0geworICAgIHR5cGU6IGZyb250X3dhbGxfYW5kX2Zs
b29yX3R5cGUsCisgICAgZmFjZXM6IEZST05UX1dBTExfQU5EX0ZMT09SX0ZBQ0VTLAorICB9Owor
CisgIGNvbnN0IFNJREVfV0FMTFNfUkVHSU9OID0geworICAgIHR5cGU6IHNpZGVfd2FsbHNfdHlw
ZSwKKyAgICBmYWNlczogU0lERV9XQUxMU19GQUNFUywKKyAgfTsKKworICBjb25zdCBDRUlMSU5H
X1JFR0lPTiA9IHsKKyAgICB0eXBlOiBjZWlsaW5nX3R5cGUsCisgICAgZmFjZXM6IENFSUxJTkdf
RkFDRVMsCisgIH07CisKKyAgcmV0dXJuIHsKKyAgICBoaXRUZXN0UmVnaW9ucyA6IFsKKyAgICAg
IEZST05UX1dBTExfQU5EX0ZMT09SX1JFR0lPTiwKKyAgICAgIFNJREVfV0FMTFNfUkVHSU9OLAor
ICAgICAgQ0VJTElOR19SRUdJT04sCisgICAgXQorICB9OworfQorCitjb25zdCBWQUxJRF9GQUtF
X1dPUkxEID0gY3JlYXRlRmFrZVdvcmxkKDUuMCwgMi4wLCA1LjApOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3V0aWwuanMgYi9MYXlvdXRU
ZXN0cy9odHRwL3dwdC93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdXRpbC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OTg3Y2ExZjQ0MjBjMTZiM2U1NTYyMDExNWQ1MzZhNjM1YWUzNjk1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIvcmVzb3VyY2VzL3dlYnhyX3V0aWwuanMKQEAg
LTAsMCArMSwyNDYgQEAKKyd1c2Ugc3RyaWN0JzsKKworLy8gVGhlc2UgdGVzdHMgcmVseSBvbiB0
aGUgVXNlciBBZ2VudCBwcm92aWRpbmcgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlCisvLyBXZWJY
UiBUZXN0aW5nIEFQSSAoaHR0cHM6Ly9naXRodWIuY29tL2ltbWVyc2l2ZS13ZWIvd2VieHItdGVz
dC1hcGkpLgorLy8KKy8vIEluIENocm9taXVtLWJhc2VkIGJyb3dzZXJzLCB0aGlzIGltcGxlbWVu
dGF0aW9uIGlzIHByb3ZpZGVkIGJ5IGEgSmF2YVNjcmlwdAorLy8gc2hpbSBpbiBvcmRlciB0byBy
ZWR1Y2UgdGhlIGFtb3VudCBvZiB0ZXN0LW9ubHkgY29kZSBzaGlwcGVkIHRvIHVzZXJzLiBUbwor
Ly8gZW5hYmxlIHRoZXNlIHRlc3RzIHRoZSBicm93c2VyIG11c3QgYmUgcnVuIHdpdGggdGhlc2Ug
b3B0aW9uczoKKy8vCisvLyAgIC0tZW5hYmxlLWJsaW5rLWZlYXR1cmVzPU1vam9KUyxNb2pvSlNU
ZXN0CisKKy8vIERlYnVnZ2luZyBtZXNzYWdlIGhlbHBlciwgYnkgZGVmYXVsdCBkb2VzIG5vdGhp
bmcuIEltcGxlbWVudGF0aW9ucyBjYW4KKy8vIG92ZXJyaWRlIHRoaXMuCit2YXIgeHJfZGVidWcg
PSBmdW5jdGlvbihuYW1lLCBtc2cpIHt9OworCitmdW5jdGlvbiB4cl9wcm9taXNlX3Rlc3QobmFt
ZSwgZnVuYywgcHJvcGVydGllcykgeworICBwcm9taXNlX3Rlc3QoYXN5bmMgKHQpID0+IHsKKyAg
ICAvLyBQZXJmb3JtIGFueSByZXF1aXJlZCB0ZXN0IHNldHVwOgorICAgIHhyX2RlYnVnKG5hbWUs
ICdzZXR1cCcpOworCisgICAgLy8gT25seSBzZXQgdXAgb25jZS4KKyAgICBpZiAoIW5hdmlnYXRv
ci54ci50ZXN0KSB7CisgICAgICAvLyBMb2FkIHRlc3Qtb25seSBBUEkgaGVscGVycy4KKyAgICAg
IGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgICAg
c2NyaXB0LnNyYyA9ICcvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkuanMnOworICAgICAgc2NyaXB0
LmFzeW5jID0gZmFsc2U7CisgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJl
amVjdCkgPT4geworICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4geyByZXNvbHZlKCk7IH07
CisgICAgICAgIHNjcmlwdC5vbmVycm9yID0gZSA9PiB7IHJlamVjdChlKTsgfTsKKyAgICAgIH0p
CisgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CisgICAgICBhd2FpdCBw
OworCisgICAgICBpZiAoaXNDaHJvbWl1bUJhc2VkKSB7CisgICAgICAgIC8vIENocm9tZSBzZXR1
cAorICAgICAgICBhd2FpdCBsb2FkQ2hyb21pdW1SZXNvdXJjZXMoKTsKKyAgICAgIH0gZWxzZSBp
ZiAoaXNXZWJLaXRCYXNlZCkgeworICAgICAgICAvLyBXZWJLaXQgc2V0dXAKKyAgICAgICAgYXdh
aXQgc2V0dXBXZWJLaXRXZWJYUlRlc3RBUEkoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFz
c2VydF9pbXBsZW1lbnRzKGZhbHNlLCAibWlzc2luZyBuYXZpZ2F0b3IueHIudGVzdCIpOworICAg
ICAgfQorICAgIH0KKworICAgIC8vIEVpdGhlciB0aGUgdGVzdCBhcGkgbmVlZHMgdG8gYmUgcG9s
eWZpbGxlZCBhbmQgaXQncyBub3Qgc2V0IHVwIGFib3ZlLCBvcgorICAgIC8vIHNvbWV0aGluZyBo
YXBwZW5lZCB0byBvbmUgb2YgdGhlIGtub3duIHBvbHlmaWxscyBhbmQgaXQgZmFpbGVkIHRvIGJl
CisgICAgLy8gc2V0dXAgcHJvcGVybHkuIEVpdGhlciB3YXksIHRoZSBmYWN0IHRoYXQgeHJfcHJv
bWlzZV90ZXN0IGlzIGJlaW5nIHVzZWQKKyAgICAvLyBtZWFucyB0aGF0IHRoZSB0ZXN0cyBleHBl
Y3QgbmF2aWdhdG9yLnhyLnRlc3QgdG8gYmUgc2V0LiBCeSByZWplY3Rpbmcgbm93CisgICAgLy8g
d2UgY2FuIGhvcGVmdWxseSBwcm92aWRlIGEgY2xlYXJlciBpbmRpY2F0aW9uIG9mIHdoYXQgd2Vu
dCB3cm9uZy4KKyAgICBpZiAoIW5hdmlnYXRvci54ci50ZXN0KSB7CisgICAgICAvLyBXZSBjYW4n
dCB1c2UgYXNzZXJ0X3RydWUgaGVyZSBiZWNhdXNlIGl0IGNhdXNlcyB0aGUgd3B0IHRlc3RoYXJu
ZXNzCisgICAgICAvLyB0byB0cmVhdCB0aGlzIGFzIGEgdGVzdCBwYWdlIGFuZCBub3QgYXMgYSB0
ZXN0LgorICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJObyBuYXZpZ2F0b3IueHIudGVzdCBv
YmplY3QgZm91bmQsIGV2ZW4gYWZ0ZXIgYXR0ZW1wdGVkIGxvYWQiKTsKKyAgICB9CisKKyAgICAv
LyBFbnN1cmUgdGhhdCBhbnkgZGV2aWNlcyBhcmUgZGlzY29ubmVjdGVkIHdoZW4gZG9uZS4gSWYg
dGhpcyB3ZXJlIGRvbmUgaW4KKyAgICAvLyBhIC50aGVuKCkgZm9yIHRoZSBzdWNjZXNzIGNhc2Us
IGEgdGVzdCB0aGF0IGV4cGVjdGVkIGZhaWx1cmUgd291bGQKKyAgICAvLyBhbHJlYWR5IGJlIG1h
cmtlZCBkb25lIGF0IHRoZSB0aW1lIHRoYXQgcnVucyBhbmQgdGhlIHNodXRkb3duIHdvdWxkCisg
ICAgLy8gaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgdGVzdC4KKyAgICB0LmFkZF9jbGVhbnVwKGFz
eW5jICgpID0+IHsKKyAgICAgIC8vIEVuc3VyZSBzeXN0ZW0gc3RhdGUgaXMgY2xlYW5lZCB1cC4K
KyAgICAgIHhyX2RlYnVnKG5hbWUsICdjbGVhbnVwJyk7CisgICAgICBhd2FpdCBuYXZpZ2F0b3Iu
eHIudGVzdC5kaXNjb25uZWN0QWxsRGV2aWNlcygpOworICAgIH0pOworCisgICAgeHJfZGVidWco
bmFtZSwgJ21haW4nKTsKKyAgICByZXR1cm4gZnVuYyh0KTsKKyAgfSwgbmFtZSwgcHJvcGVydGll
cyk7Cit9CisKKy8vIEEgdXRpbGl0eSBmdW5jdGlvbiBmb3Igd2FpdGluZyBvbmUgYW5pbWF0aW9u
IGZyYW1lIGJlZm9yZSBydW5uaW5nIHRoZSBjYWxsYmFjaworLy8KKy8vIFRoaXMgaXMgb25seSBu
ZWVkZWQgYWZ0ZXIgY2FsbGluZyBGYWtlWFJEZXZpY2UgbWV0aG9kcyBvdXRzaWRlIG9mIGFuIGFu
aW1hdGlvbiBmcmFtZQorLy8KKy8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gcGFwZXIgb3ZlciB0
aGUgcG90ZW50aWFsIHJhY2UgYWxsb3dlZCBieSB0aGUgIm5leHQgYW5pbWF0aW9uIGZyYW1lIgor
Ly8gY29uY2VwdCBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLXRlc3QtYXBp
LyN4cnNlc3Npb24tbmV4dC1hbmltYXRpb24tZnJhbWUKK2Z1bmN0aW9uIHJlcXVlc3RTa2lwQW5p
bWF0aW9uRnJhbWUoc2Vzc2lvbiwgY2FsbGJhY2spIHsKKyBzZXNzaW9uLnJlcXVlc3RBbmltYXRp
b25GcmFtZSgoKSA9PiB7CisgIHNlc3Npb24ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNr
KTsKKyB9KTsKK30KKworLy8gQSB0ZXN0IGZ1bmN0aW9uIHdoaWNoIHJ1bnMgdGhyb3VnaCB0aGUg
Y29tbW9uIHN0ZXBzIG9mIHJlcXVlc3RpbmcgYSBzZXNzaW9uLgorLy8gQ2FsbHMgdGhlIHBhc3Nl
ZCBpbiB0ZXN0IGZ1bmN0aW9uIHdpdGggdGhlIHNlc3Npb24sIHRoZSBjb250cm9sbGVyIGZvciB0
aGUKKy8vIGRldmljZSwgYW5kIHRoZSB0ZXN0IG9iamVjdC4KKy8vIFJlcXVpcmVzIGEgd2ViZ2xD
YW52YXMgb24gdGhlIHBhZ2UuCitmdW5jdGlvbiB4cl9zZXNzaW9uX3Byb21pc2VfdGVzdCgKKyAg
ICBuYW1lLCBmdW5jLCBmYWtlRGV2aWNlSW5pdCwgc2Vzc2lvbk1vZGUsIHNlc3Npb25Jbml0LCBw
cm9wZXJ0aWVzLCBnbGNvbnRleHRQcm9wZXJ0aWVzUGFyYW0sIGdsbGF5ZXJQcm9wZXJ0aWVzUGFy
YW0pIHsKKyAgbGV0IHRlc3REZXZpY2VDb250cm9sbGVyOworICBsZXQgdGVzdFNlc3Npb247Cisg
IGxldCBzZXNzaW9uT2JqZWN0cyA9IHt9OworICBjb25zdCBnbGNvbnRleHRQcm9wZXJ0aWVzID0g
KGdsY29udGV4dFByb3BlcnRpZXNQYXJhbSkgPyBnbGNvbnRleHRQcm9wZXJ0aWVzUGFyYW0gOiB7
fTsKKyAgY29uc3QgZ2xsYXllclByb3BlcnRpZXMgPSAoZ2xsYXllclByb3BlcnRpZXNQYXJhbSkg
PyBnbGxheWVyUHJvcGVydGllc1BhcmFtIDoge307CisKKyAgY29uc3Qgd2ViZ2xDYW52YXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF07CisgIC8vIFdlIGNhbid0
IHVzZSBhc3NlcnRfdHJ1ZSBoZXJlIGJlY2F1c2UgaXQgY2F1c2VzIHRoZSB3cHQgdGVzdGhhcm5l
c3MgdG8gdHJlYXQKKyAgLy8gdGhpcyBhcyBhIHRlc3QgcGFnZSBhbmQgbm90IGFzIGEgdGVzdC4K
KyAgaWYgKCF3ZWJnbENhbnZhcykgeworICAgIHByb21pc2VfdGVzdChhc3luYyAodCkgPT4gewor
ICAgICAgUHJvbWlzZS5yZWplY3QoJ3hyX3Nlc3Npb25fcHJvbWlzZV90ZXN0IHJlcXVpcmVzIGEg
Y2FudmFzIG9uIHRoZSBwYWdlIScpOworICAgIH0sIG5hbWUsIHByb3BlcnRpZXMpOworICB9Cisg
IGxldCBnbCA9IHdlYmdsQ2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywge2FscGhhOiBmYWxzZSwg
YW50aWFsaWFzOiBmYWxzZSwgLi4uZ2xjb250ZXh0UHJvcGVydGllc30pOworICBzZXNzaW9uT2Jq
ZWN0cy5nbCA9IGdsOworCisgIHhyX3Byb21pc2VfdGVzdCgKKyAgICAgIG5hbWUsCisgICAgICAo
dCkgPT4geworICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGFueSBwZW5kaW5nIHNlc3Npb25zIGFy
ZSBlbmRlZCB3aGVuIGRvbmUuIFRoaXMgbmVlZHMgdG8KKyAgICAgICAgICAvLyB1c2UgYSBjbGVh
bnVwIGZ1bmN0aW9uIHRvIGVuc3VyZSBwcm9wZXIgc2VxdWVuY2luZy4gSWYgdGhpcyB3ZXJlCisg
ICAgICAgICAgLy8gZG9uZSBpbiBhIC50aGVuKCkgZm9yIHRoZSBzdWNjZXNzIGNhc2UsIGEgdGVz
dCB0aGF0IGV4cGVjdGVkCisgICAgICAgICAgLy8gZmFpbHVyZSB3b3VsZCBhbHJlYWR5IGJlIG1h
cmtlZCBkb25lIGF0IHRoZSB0aW1lIHRoYXQgcnVucywgYW5kIHRoZQorICAgICAgICAgIC8vIHNo
dXRkb3duIHdvdWxkIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IHRlc3Qgd2hpY2ggbWF5IGhhdmUg
c3RhcnRlZC4KKyAgICAgICAgICB0LmFkZF9jbGVhbnVwKGFzeW5jICgpID0+IHsKKyAgICAgICAg
ICAgIC8vIElmIGEgc2Vzc2lvbiB3YXMgY3JlYXRlZCwgZW5kIGl0LgorICAgICAgICAgICAgaWYg
KHRlc3RTZXNzaW9uKSB7CisgICAgICAgICAgICAgIGF3YWl0IHRlc3RTZXNzaW9uLmVuZCgpLmNh
dGNoKCgpID0+IHt9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKworICAgICAgICAg
IHJldHVybiBuYXZpZ2F0b3IueHIudGVzdC5zaW11bGF0ZURldmljZUNvbm5lY3Rpb24oZmFrZURl
dmljZUluaXQpCisgICAgICAgICAgICAgIC50aGVuKChjb250cm9sbGVyKSA9PiB7CisgICAgICAg
ICAgICAgICAgdGVzdERldmljZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgICAgICAgICAg
ICAgIHJldHVybiBnbC5tYWtlWFJDb21wYXRpYmxlKCk7CisgICAgICAgICAgICAgIH0pCisgICAg
ICAgICAgICAgIC50aGVuKCgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBzZXNzaW9uIHJlcXVlc3QgaW4g
YSB1c2VyIGdlc3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgeHJfZGVidWcobmFtZSwgJ3Np
bXVsYXRlVXNlckFjdGl2YXRpb24nKTsKKyAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3Iu
eHIudGVzdC5zaW11bGF0ZVVzZXJBY3RpdmF0aW9uKCgpID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHhyX2RlYnVnKG5hbWUsICdkb2N1bWVudC5oYXNGb2N1cygpPScgKyBkb2N1bWVudC5o
YXNGb2N1cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci54ci5yZXF1ZXN0
U2Vzc2lvbihzZXNzaW9uTW9kZSwgc2Vzc2lvbkluaXQgfHwge30pCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLnRoZW4oKHNlc3Npb24pID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhyX2RlYnVnKG5hbWUsICdzZXNzaW9uIHN0YXJ0Jyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0U2Vzc2lvbiA9IHNlc3Npb247CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXNzaW9uLm1vZGUgPSBzZXNzaW9uTW9kZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxldCBnbExheWVyID0gbmV3IFhSV2ViR0xMYXllcihzZXNzaW9uLCBnbCwg
Z2xsYXllclByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xMYXll
ci5jb250ZXh0ID0gZ2w7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXNzaW9u
IG11c3QgaGF2ZSBhIGJhc2VMYXllciBvciBmcmFtZSByZXF1ZXN0cworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBpZ25vcmVkLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2Vzc2lvbi51cGRhdGVSZW5kZXJTdGF0ZSh7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmFzZUxheWVyOiBnbExheWVyCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25PYmplY3Rz
LmdsTGF5ZXIgPSBnbExheWVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJfZGVi
dWcobmFtZSwgJ3Nlc3Npb24udmlzaWJpbGl0eVN0YXRlPScgKyBzZXNzaW9uLnZpc2liaWxpdHlT
dGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZ1bmMoc2Vzc2lv
biwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQsIHNlc3Npb25PYmplY3RzKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2go
KGVycikgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJfZGVidWcobmFtZSwg
J2Vycm9yOiAnICsgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2Vzc2lvbiB3aXRoIHBhcmFtcyAn
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShzZXNz
aW9uTW9kZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgd2FzIHJlamVj
dGVkIG9uIGRldmljZSAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09O
LnN0cmluZ2lmeShmYWtlRGV2aWNlSW5pdCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcgd2l0aCBlcnJvcjogJyArIGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIH0pKTsKKyAg
ICAgIH0sCisgICAgICBwcm9wZXJ0aWVzKTsKK30KKworCisvLyBUaGlzIGZ1bmN0aW9uIHdyYXBz
IHRoZSBwcm92aWRlZCBmdW5jdGlvbiBpbiBhCisvLyBzaW11bGF0ZVVzZXJBY3RpdmF0aW9uKCkg
Y2FsbCwgYW5kIHJlc29sdmVzIHRoZSBwcm9taXNlIHdpdGggdGhlCisvLyByZXN1bHQgb2YgZnVu
YygpLCBvciBhbiBlcnJvciBpZiBvbmUgaXMgdGhyb3duCitmdW5jdGlvbiBwcm9taXNlX3NpbXVs
YXRlX3VzZXJfYWN0aXZhdGlvbihmdW5jKSB7CisgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2
ZSwgcmVqZWN0KSA9PiB7CisgICAgbmF2aWdhdG9yLnhyLnRlc3Quc2ltdWxhdGVVc2VyQWN0aXZh
dGlvbigoKSA9PiB7CisgICAgICB0cnkgeyBsZXQgYSA9IGZ1bmMoKTsgcmVzb2x2ZShhKTsgfSBj
YXRjaChlKSB7IHJlamVjdChlKTsgfQorICAgIH0pOworICB9KTsKK30KKworLy8gVGhpcyBmdW5j
dGlvbnMgY2FsbHMgYSBjYWxsYmFjayB3aXRoIGVhY2ggQVBJIG9iamVjdCBhcyBzcGVjaWZpZWQK
Ky8vIGJ5IGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvc3BlYy9sYXRlc3Qv
LCBhbGxvd2luZworLy8gY2hlY2tzIHRvIGJlIG1hZGUgb24gYWxsIG9qZWN0cy4KKy8vIEFyZ3Vl
bWVudHM6CisvLyAgICAgIGNhbGxiYWNrOiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdHdvIGFy
Z3VlbWVudHMsIHRoZSBmaXJzdAorLy8gICAgICAgICAgICAgICAgYmVpbmcgdGhlIEFQSSBvYmpl
Y3QsIHRoZSBzZWNvbmQgYmVpbmcgdGhlIG5hbWUgb2YKKy8vICAgICAgICAgICAgICAgIHRoYXQg
QVBJIG9iamVjdC4KK2Z1bmN0aW9uIGZvckVhY2hXZWJ4ck9iamVjdChjYWxsYmFjaykgeworICBj
YWxsYmFjayh3aW5kb3cubmF2aWdhdG9yLnhyLCAnbmF2aWdhdG9yLnhyJyk7CisgIGNhbGxiYWNr
KHdpbmRvdy5YUlNlc3Npb24sICdYUlNlc3Npb24nKTsKKyAgY2FsbGJhY2sod2luZG93LlhSU2Vz
c2lvbkNyZWF0aW9uT3B0aW9ucywgJ1hSU2Vzc2lvbkNyZWF0aW9uT3B0aW9ucycpOworICBjYWxs
YmFjayh3aW5kb3cuWFJGcmFtZVJlcXVlc3RDYWxsYmFjaywgJ1hSRnJhbWVSZXF1ZXN0Q2FsbGJh
Y2snKTsKKyAgY2FsbGJhY2sod2luZG93LlhSUHJlc2VudGF0aW9uQ29udGV4dCwgJ1hSUHJlc2Vu
dGF0aW9uQ29udGV4dCcpOworICBjYWxsYmFjayh3aW5kb3cuWFJGcmFtZSwgJ1hSRnJhbWUnKTsK
KyAgY2FsbGJhY2sod2luZG93LlhSTGF5ZXIsICdYUkxheWVyJyk7CisgIGNhbGxiYWNrKHdpbmRv
dy5YUlZpZXcsICdYUlZpZXcnKTsKKyAgY2FsbGJhY2sod2luZG93LlhSVmlld3BvcnQsICdYUlZp
ZXdwb3J0Jyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUlZpZXdlclBvc2UsICdYUlZpZXdlclBvc2Un
KTsKKyAgY2FsbGJhY2sod2luZG93LlhSV2ViR0xMYXllciwgJ1hSV2ViR0xMYXllcicpOworICBj
YWxsYmFjayh3aW5kb3cuWFJXZWJHTExheWVySW5pdCwgJ1hSV2ViR0xMYXllckluaXQnKTsKKyAg
Y2FsbGJhY2sod2luZG93LlhSQ29vcmRpbmF0ZVN5c3RlbSwgJ1hSQ29vcmRpbmF0ZVN5c3RlbScp
OworICBjYWxsYmFjayh3aW5kb3cuWFJGcmFtZU9mUmVmZXJlbmNlLCAnWFJGcmFtZU9mUmVmZXJl
bmNlJyk7CisgIGNhbGxiYWNrKHdpbmRvdy5YUlN0YWdlQm91bmRzLCAnWFJTdGFnZUJvdW5kcycp
OworICBjYWxsYmFjayh3aW5kb3cuWFJTZXNzaW9uRXZlbnQsICdYUlNlc3Npb25FdmVudCcpOwor
ICBjYWxsYmFjayh3aW5kb3cuWFJDb29yZGluYXRlU3lzdGVtRXZlbnQsICdYUkNvb3JkaW5hdGVT
eXN0ZW1FdmVudCcpOworfQorCisvLyBDb2RlIGZvciBsb2FkaW5nIHRlc3QgQVBJIGluIENocm9t
aXVtLgorYXN5bmMgZnVuY3Rpb24gbG9hZENocm9taXVtUmVzb3VyY2VzKCkgeworICBsZXQgY2hy
b21pdW1SZXNvdXJjZXMgPSBbCisgICAgJy9nZW4vbW9qby9wdWJsaWMvbW9qb20vYmFzZS90aW1l
Lm1vam9tLmpzJywKKyAgICAnL2dlbi9tb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3NoYXJlZF9tZW1v
cnkubW9qb20uanMnLAorICAgICcvZ2VuL21vam8vcHVibGljL21vam9tL2Jhc2UvdW5ndWVzc2Fi
bGVfdG9rZW4ubW9qb20uanMnLAorICAgICcvZ2VuL2dwdS9pcGMvY29tbW9uL3N5bmNfdG9rZW4u
bW9qb20uanMnLAorICAgICcvZ2VuL2dwdS9pcGMvY29tbW9uL21haWxib3gubW9qb20uanMnLAor
ICAgICcvZ2VuL2dwdS9pcGMvY29tbW9uL21haWxib3hfaG9sZGVyLm1vam9tLmpzJywKKyAgICAn
L2dlbi91aS9nZngvZ2VvbWV0cnkvbW9qb20vZ2VvbWV0cnkubW9qb20uanMnLAorICAgICcvZ2Vu
L3VpL2dmeC9tb2pvbS9uYXRpdmVfaGFuZGxlX3R5cGVzLm1vam9tLmpzJywKKyAgICAnL2dlbi91
aS9nZngvbW9qb20vYnVmZmVyX3R5cGVzLm1vam9tLmpzJywKKyAgICAnL2dlbi91aS9nZngvbW9q
b20vY29sb3Jfc3BhY2UubW9qb20uanMnLAorICAgICcvZ2VuL3VpL2dmeC9tb2pvbS9kaXNwbGF5
X2NvbG9yX3NwYWNlcy5tb2pvbS5qcycsCisgICAgJy9nZW4vdWkvZ2Z4L21vam9tL2dwdV9mZW5j
ZV9oYW5kbGUubW9qb20uanMnLAorICAgICcvZ2VuL3VpL2dmeC9tb2pvbS90cmFuc2Zvcm0ubW9q
b20uanMnLAorICAgICcvZ2VuL3VpL2Rpc3BsYXkvbW9qb20vZGlzcGxheS5tb2pvbS5qcycsCisg
ICAgJy9nZW4vZGV2aWNlL2dhbWVwYWQvcHVibGljL21vam9tL2dhbWVwYWQubW9qb20uanMnLAor
ICAgICcvZ2VuL2RldmljZS92ci9wdWJsaWMvbW9qb20vdnJfc2VydmljZS5tb2pvbS5qcycsCisg
ICAgJy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcycsCisgICAg
Jy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcycsCisgICAgLy8gUmVxdWlyZWQgb25s
eSBieSByZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcworICAgICcvcmVzb3VyY2VzL3Rl
c3Rkcml2ZXIuanMnLAorICAgICcvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzJywKKyAg
XTsKKworICAvLyBUaGlzIGluZnJhc3RydWN0dXJlIGlzIGFsc28gdXNlZCBieSBDaHJvbWl1bS1z
cGVjaWZpYyBpbnRlcm5hbCB0ZXN0cyB0aGF0CisgIC8vIG1heSBuZWVkIGFkZGl0aW9uYWwgcmVz
b3VyY2VzIChlLmcuIGludGVybmFsIEFQSSBleHRlbnNpb25zKSwgdGhpcyBhbGxvd3MKKyAgLy8g
dGhvc2UgdGVzdHMgdG8gcmVseSBvbiB0aGlzIGluZnJhc3RydWN0dXJlIHdoaWxlIGVuc3VyaW5n
IHRoYXQgbm8gdGVzdHMKKyAgLy8gbWFrZSBpdCBpbnRvIHB1YmxpYyBXUFRzIHRoYXQgcmVseSBv
biBBUElzIG91dHNpZGUgb2YgdGhlIHdlYnhyIHRlc3QgQVBJLgorICBpZiAodHlwZW9mKGFkZGl0
aW9uYWxDaHJvbWl1bVJlc291cmNlcykgIT09ICd1bmRlZmluZWQnKSB7CisgICAgY2hyb21pdW1S
ZXNvdXJjZXMgPSBjaHJvbWl1bVJlc291cmNlcy5jb25jYXQoYWRkaXRpb25hbENocm9taXVtUmVz
b3VyY2VzKTsKKyAgfQorCisgIGF3YWl0IGxvYWRNb2pvUmVzb3VyY2VzKGNocm9taXVtUmVzb3Vy
Y2VzKTsKKworICB4cl9kZWJ1ZyA9IG5hdmlnYXRvci54ci50ZXN0LkRlYnVnOworfQorCitmdW5j
dGlvbiBzZXR1cFdlYktpdFdlYlhSVGVzdEFQSSgpIHsKKyAgLy8gV2ViS2l0IHNldHVwLiBUaGUg
aW50ZXJuYWxzIG9iamVjdCBpcyB1c2VkIGJ5IHRoZSBXZWJLaXQgdGVzdCBydW5uZXIKKyAgLy8g
dG8gcHJvdmlkZSBKUyBhY2Nlc3MgdG8gaW50ZXJuYWwgQVBJcy4gSW4gdGhpcyBjYXNlIGl0J3Mg
dXNlZCB0bworICAvLyBlbnN1cmUgdGhhdCBYUlRlc3QgaXMgb25seSBleHBvc2VkIHRvIHdwdCB0
ZXN0cy4KKyAgbmF2aWdhdG9yLnhyLnRlc3QgPSBpbnRlcm5hbHMueHJUZXN0OworICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKCk7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3dwdC93
ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNlX3Jl
cG9ydHNfc2h1dGRvd24uaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4Y2M4YjQ2MzE4
ZjUwYzZlYjNlYWZhZWI2ODMwYWUxYmMyNjJkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3du
Lmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBlbmQgZXZlbnQgZmly
ZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBlbmRzIGFuZCBkZXZpY2UgcmVwb3J0cyB3aGVuIHNo
dXRkb3duIGhhcyBjb21wbGV0ZWQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQv
d2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2VfcmVwb3J0c19zaHV0ZG93bi5odHRwcy5odG1sIGIv
TGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2VfcmVwb3J0c19z
aHV0ZG93bi5odHRwcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwYzM0NDVlNmIwY2JmMTI5NDRlMDVmOGM1
ZWJiYTExNGM1YWQwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93
ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLmh0bWwKQEAg
LTAsMCArMSwzOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8Ym9keT4KKyAgPHNjcmlwdCBzcmM9L3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9L3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNl
cy93ZWJ4cl91dGlsLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJ4
cl90ZXN0X2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgIDxjYW52YXM+PC9jYW52YXM+CisKKyAg
PHNjcmlwdD4KKyAgICBjb25zdCB0ZXN0TmFtZSA9ICJlbmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1l
cnNpdmUgc2Vzc2lvbiBlbmRzIGFuZCBkZXZpY2UgcmVwb3J0cyB3aGVuIHNodXRkb3duIGhhcyBj
b21wbGV0ZWQiOworICAgIGxldCB3YXRjaGVyRG9uZSA9IG5ldyBFdmVudCgid2F0Y2hlcmRvbmUi
KTsKKyAgICBjb25zdCBmYWtlRGV2aWNlSW5pdFBhcmFtcyA9IFRSQUNLRURfSU1NRVJTSVZFX0RF
VklDRTsKKworICAgIGxldCB0ZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihzZXNzaW9uLCB0ZXN0RGV2
aWNlQ29udHJvbGxlciwgdCkgeworICAgICAgdGVzdERldmljZUNvbnRyb2xsZXIuc2V0U3VwcG9y
dHNTaHV0ZG93bk5vdGlmaWNhdGlvbigpOworICAgICAgbGV0IGV2ZW50V2F0Y2hlciA9IG5ldyBF
dmVudFdhdGNoZXIodCwgc2Vzc2lvbiwgWyJlbmQiLCAid2F0Y2hlcmRvbmUiXSk7CisgICAgICBs
ZXQgZXZlbnRQcm9taXNlID0gZXZlbnRXYXRjaGVyLndhaXRfZm9yKFsiZW5kIiwgIndhdGNoZXJk
b25lIl0pOworCisgICAgICBmdW5jdGlvbiBvblNlc3Npb25FbmQoZXZlbnQpIHsKKyAgICAgICAg
dC5zdGVwKCAoKSA9PiB7CisgICAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5zZXNzaW9uLCBz
ZXNzaW9uKTsKKworICAgICAgICAgIGxldCBldmVudFNlc3Npb24gPSBldmVudC5zZXNzaW9uOwor
ICAgICAgICAgIGFzc2VydF9lcXVhbHMoZXZlbnRTZXNzaW9uLCBldmVudC5zZXNzaW9uLAorICAg
ICAgICAgICAgIlhSU2Vzc2lvbkV2ZW50LnNlc3Npb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qu
Iik7CisKKyAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoRXZlbnQod2F0Y2hlckRvbmUpOworICAg
ICAgICB9KTsKKyAgICAgIH0KKyAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiZW5kIiwg
b25TZXNzaW9uRW5kLCBmYWxzZSk7CisgICAgICBzZXNzaW9uLmVuZCgpOworCisgICAgICByZXR1
cm4gZXZlbnRQcm9taXNlOworICAgIH07CisKKyAgICB4cl9zZXNzaW9uX3Byb21pc2VfdGVzdCh0
ZXN0TmFtZSwgdGVzdEZ1bmN0aW9uLAorICAgICAgZmFrZURldmljZUluaXRQYXJhbXMsICdpbW1l
cnNpdmUtdnInKTsKKyAgPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0
ZW0uaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhYWU1ZmZmZDhkNGJjNzIxNWUzNWEw
NGVhMTU1NWRhZjNkMjRiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3dw
dC93ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDQgQEAKKworUEFTUyBlbmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lv
biBpcyBlbmRlZCBieSBzeXN0ZW0KK1BBU1MgZW5kIGV2ZW50IGZpcmVzIHdoZW4gaW1tZXJzaXZl
IHNlc3Npb24gaXMgZW5kZWQgYnkgc3lzdGVtIGFuZCBkZXZpY2UgcmVwb3J0cyBzaHV0ZG93biBj
b21wbGV0ZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Np
b25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4
ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjkxNDg3
NDIwNGExYzMyZTQ0M2M1Nzc2YTA4Zjc4M2JlNjM1YmMyOAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRlZF9ieV9zeXN0ZW0uaHR0cHMu
aHRtbApAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5PgorICA8c2NyaXB0
IHNyYz0vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3dlYnhyX3V0aWwuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3dlYnhyX3Rlc3RfY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgPGNhbnZhcz48L2NhbnZh
cz4KKworICA8c2NyaXB0PgorICAgIGNvbnN0IHRlc3REZXZpY2VOb3RSZXBvcnRpbmdTaHV0ZG93
bkNvbXBsZXRlTmFtZSA9ICJlbmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBp
cyBlbmRlZCBieSBzeXN0ZW0iOworICAgIGNvbnN0IHRlc3REZXZpY2VSZXBvcnRpbmdTaHV0ZG93
bkNvbXBsZXRlTmFtZSA9ICJlbmQgZXZlbnQgZmlyZXMgd2hlbiBpbW1lcnNpdmUgc2Vzc2lvbiBp
cyBlbmRlZCBieSBzeXN0ZW0gYW5kIGRldmljZSByZXBvcnRzIHNodXRkb3duIGNvbXBsZXRlIjsK
KworICAgIGxldCB3YXRjaGVyRG9uZSA9IG5ldyBFdmVudCgid2F0Y2hlcmRvbmUiKTsKKyAgICBj
b25zdCBmYWtlRGV2aWNlSW5pdFBhcmFtcyA9IFRSQUNLRURfSU1NRVJTSVZFX0RFVklDRTsKKwor
ICAgIGxldCB0ZXN0RGV2aWNlTm90UmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZSA9IGZ1bmN0aW9u
KHNlc3Npb24sIHRlc3REZXZpY2VDb250cm9sbGVyLCB0KSB7CisgICAgICB0ZXN0RW5kU2Vzc2lv
bkJ5U3lzdGVtKHNlc3Npb24sIHRlc3REZXZpY2VDb250cm9sbGVyLCB0KTsKKyAgICB9OworCisg
ICAgbGV0IHRlc3REZXZpY2VSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRlID0gZnVuY3Rpb24oc2Vz
c2lvbiwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQpIHsKKyAgICAgIHRlc3REZXZpY2VDb250cm9s
bGVyLnNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24oKTsKKyAgICAgIHRlc3RFbmRTZXNz
aW9uQnlTeXN0ZW0oc2Vzc2lvbiwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQpOworICAgIH07CisK
KyAgICBsZXQgdGVzdEVuZFNlc3Npb25CeVN5c3RlbSA9IGZ1bmN0aW9uKHNlc3Npb24sIHRlc3RE
ZXZpY2VDb250cm9sbGVyLCB0KSB7CisgICAgICBsZXQgZXZlbnRXYXRjaGVyID0gbmV3IEV2ZW50
V2F0Y2hlcih0LCBzZXNzaW9uLCBbImVuZCIsICJ3YXRjaGVyZG9uZSJdKTsKKyAgICAgIGxldCBl
dmVudFByb21pc2UgPSBldmVudFdhdGNoZXIud2FpdF9mb3IoWyJlbmQiLCAid2F0Y2hlcmRvbmUi
XSk7CisKKyAgICAgIGZ1bmN0aW9uIG9uU2Vzc2lvbkVuZChldmVudCkgeworICAgICAgICB0LnN0
ZXAoICgpID0+IHsKKyAgICAgICAgICBhc3NlcnRfZXF1YWxzKGV2ZW50LnNlc3Npb24sIHNlc3Np
b24pOworCisgICAgICAgICAgbGV0IGV2ZW50U2Vzc2lvbiA9IGV2ZW50LnNlc3Npb247CisgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhldmVudFNlc3Npb24sIGV2ZW50LnNlc3Npb24sCisgICAgICAg
ICAgICAiWFJTZXNzaW9uRXZlbnQuc2Vzc2lvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdC4iKTsK
KworICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hFdmVudCh3YXRjaGVyRG9uZSk7CisgICAgICAg
IH0pOworICAgICAgfQorICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJlbmQiLCBvblNl
c3Npb25FbmQsIGZhbHNlKTsKKworICAgICAgdGVzdERldmljZUNvbnRyb2xsZXIuc2ltdWxhdGVT
aHV0ZG93bigpOworCisgICAgICByZXR1cm4gZXZlbnRQcm9taXNlOworICAgIH07CisKKyAgICB4
cl9zZXNzaW9uX3Byb21pc2VfdGVzdCh0ZXN0RGV2aWNlTm90UmVwb3J0aW5nU2h1dGRvd25Db21w
bGV0ZU5hbWUsIHRlc3REZXZpY2VOb3RSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRlLAorICAgICAg
ZmFrZURldmljZUluaXRQYXJhbXMsICdpbW1lcnNpdmUtdnInKTsKKyAgICB4cl9zZXNzaW9uX3By
b21pc2VfdGVzdCh0ZXN0RGV2aWNlUmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZU5hbWUsIHRlc3RE
ZXZpY2VSZXBvcnRpbmdTaHV0ZG93bkNvbXBsZXRlLAorICAgICAgZmFrZURldmljZUluaXRQYXJh
bXMsICdpbW1lcnNpdmUtdnInKTsKKworICA8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5k
Lmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lv
bl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODk3
NTMzZWM0ODc5M2QxMzQ2YTcwNGRhNDA2MjI3NDI3NjVlY2NhCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBsZV9lbmQu
aHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIFJlamVjdCBtdWx0aXBs
ZSBjYWxscyB0byBYUlNlc3Npb24uZW5kKCkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC93cHQvd2VieHIveHJTZXNzaW9uX3JlamVjdF9tdWx0aXBsZV9lbmQuaHR0cHMuaHRtbCBiL0xh
eW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0
dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM1YTYyNzhlMDIxNWY5ZTU2M2RlMDUyZGQ5MmJiMzRmNTcx
ZTk1MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vz
c2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8Ym9keT4KKyAgPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcz48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJ4cl91dGlsLmpzIj48
L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50cy5q
cyI+PC9zY3JpcHQ+CisgIDxjYW52YXM+PC9jYW52YXM+CisKKyAgPHNjcmlwdD4KKyAgICBjb25z
dCB0ZXN0TmFtZSA9ICJSZWplY3QgbXVsdGlwbGUgY2FsbHMgdG8gWFJTZXNzaW9uLmVuZCgpIjsK
KyAgICBjb25zdCBmYWtlRGV2aWNlSW5pdFBhcmFtcyA9IFRSQUNLRURfSU1NRVJTSVZFX0RFVklD
RTsKKworICAgIGxldCB0ZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihzZXNzaW9uLCB0ZXN0RGV2aWNl
Q29udHJvbGxlciwgdCkgeworICAgICAgc2Vzc2lvbi5lbmQoKTsKKyAgICAgIHJldHVybiBwcm9t
aXNlX3JlamVjdHNfZG9tKHQsICJJbnZhbGlkU3RhdGVFcnJvciIsIHNlc3Npb24uZW5kKCkpCisg
ICAgfTsKKworICAgIHhyX3Nlc3Npb25fcHJvbWlzZV90ZXN0KHRlc3ROYW1lLCB0ZXN0RnVuY3Rp
b24sCisgICAgICBmYWtlRGV2aWNlSW5pdFBhcmFtcywgJ2ltbWVyc2l2ZS12cicpOworICA8L3Nj
cmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0
RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMK
aW5kZXggOTI2NzZiNGQ2ZTE5NjU5ZjI3MDA2YTgwMmU2YjYyNmZkNDk0Y2U5Mi4uM2UxMWE2Mzhk
NDE1YzA4NWZjMDM4NmJhZjM4YTFlNzNhNWI4NDc0OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTIyNTcsMyArMjI1Nyw3IEBAIHdlYmtpdC5vcmcvYi8y
MjAwNzcgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvcHJvdG9jb2wvY3J5
cHRvLXN1aXRlCiB3ZWJraXQub3JnL2IvMjIwMzMyIFsgQmlnU3VyKyBdIGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvbWltZXNuaWZmL21pbWUtdHlwZXMvY2hhcnNldC1wYXJhbWV0ZXIu
d2luZG93Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjIwNTUyIFsgQmln
U3VyKyBdIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Utd2VibS1pbml0LWluc2lkZS1z
ZWdtZW50Lmh0bWwgWyBGYWlsdXJlIF0KKworIyBXZWJYUiB0ZXN0cworaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZW5kLmh0dHBzLmh0bWwgWyBQYXNzIF0K
K2h0dHAvd3B0L3dlYnhyIFsgUGFzcyBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418567</attachid>
            <date>2021-01-27 11:20:57 -0800</date>
            <delta_ts>2021-01-27 14:14:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220835-20210127112055.patch</filename>
            <type>text/plain</type>
            <size>26199</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiNmY5NDczZjZiYWFk
NWExY2ZjZjI4YTMwZDkxNjM2NjBhYTU5OC4uMTQ3MWQ0MWE3M2Q1YzkyNTVmNTE5OTg4Nzg5OWJl
MDYyYmY4YzBmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTAxLTI2ICBBZGEg
Q2hhbiAgPGFkYS5jaGFuQGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIHRoZSBlbmQgWFJTZXNz
aW9uRXZlbnQgYWZ0ZXIgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIGZvciBzZXNzaW9uIHNo
dXRkb3duIGhhdmUgY29tcGxldGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjA4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4K
KworICAgICAgICBUZXN0czogaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2VfcmVw
b3J0c19zaHV0ZG93bi5odHRwcy5odG1sCisgICAgICAgICAgICAgICBodHRwL3dwdC93ZWJ4ci94
clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
d3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwKKworICAg
ICAgICAtIEFkZCB0aGUgVHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQgcHJvdG9jb2wgdGhhdCB0
aGUgRGV2aWNlIGNhbiBob2xkIGEKKyAgICAgICAgd2VhayByZWZlcmVuY2UgdG8gZHVyaW5nIGEg
dHJhY2tpbmcgYW5kIHJlbmRlcmluZyBzZXNzaW9uLiBXZWJYUlNlc3Npb24KKyAgICAgICAgaW1w
bGVtZW50cyB0aGF0IHByb3RvY29sIHRvIGhhbmRsZSBjbGVhbnVwIGFmdGVyIHNodXRkb3duIGhh
cyBjb21wbGV0ZWQuCisgICAgICAgIC0gRm9yIHBsYXRmb3JtcyB0byByZXBvcnQgYXN5bmNocm9u
b3VzIGNvbXBsZXRpb24gb2YgdGhlIHNlc3Npb24gc2h1dGRvd24sCisgICAgICAgIHRoZXkgY2Fu
IGltcGxlbWVudCBQbGF0Zm9ybVhSOjpEZXZpY2U6OnN1cHBvcnRzU2Vzc2lvblNodXRkb3duTm90
aWZpY2F0aW9uKCkKKyAgICAgICAgdG8gcmV0dXJuIHRydWUuIFRoaXMgd2F5IFdlYlhSU2Vzc2lv
biB3aWxsIHdhaXQgZm9yIHRoZSBzaHV0ZG93biBjb21wbGV0aW9uCisgICAgICAgICh2aWEgdGhl
IFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50OjpzZXNzaW9uRGlkRW5kKCkgY2FsbGJhY2spIGJl
Zm9yZSBzZW5kaW5nCisgICAgICAgIHRoZSBlbmQgWFJTZXNzaW9uRXZlbnQgYW5kIHJlc29sdmlu
ZyB0aGUgWFJTZXNzaW9uOjplbmQoKSBwcm9taXNlLgorICAgICAgICAtIFVwZGF0ZSBXZWJYUlNl
c3Npb246OmVuZCgpIHRvIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yIGlmIGNhbGxlZCBtb3Jl
CisgICAgICAgIHRoYW4gb25jZS4gVGhpcyBhbHNvIG1hdGNoZXMgQ2hyb21pdW0ncyBjdXJyZW50
IGJlaGF2aW9yLgorCisgICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpXZWJYUlNlc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpzaHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlNlc3Npb246OmRpZENvbXBsZXRlU2h1dGRvd24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJT
ZXNzaW9uOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpzZXNzaW9uRGlk
RW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oOgorICAgICAgICAq
IE1vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9Q
bGF0Zm9ybVhSLmg6CisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6OnNldFRyYWNraW5nQW5k
UmVuZGVyaW5nQ2xpZW50KToKKyAgICAgICAgKFBsYXRmb3JtWFI6OkRldmljZTo6c3VwcG9ydHNT
ZXNzaW9uU2h1dGRvd25Ob3RpZmljYXRpb24gY29uc3QpOgorICAgICAgICAqIHRlc3RpbmcvV2Vi
RmFrZVhSRGV2aWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZFhSRGV2aWNlOjpz
aW11bGF0ZVNodXRkb3duQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZFhS
RGV2aWNlOjpzaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkZha2VYUkRldmljZTo6c2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJGYWtlWFJEZXZpY2U6OnNpbXVsYXRlU2h1dGRvd24pOgorICAgICAg
ICAqIHRlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmg6CisgICAgICAgICogdGVzdGluZy9XZWJGYWtl
WFJEZXZpY2UuaWRsOgorCiAyMDIxLTAxLTI1ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5j
b20+CiAKICAgICAgICAgVHdpdHRlciBQaVAgdmlkZW8gcGF1c2VzIHdoZW4gc2Nyb2xsaW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKaW5kZXggYjY2
M2Q1MmQwNmJiMjA5YTQzNzFmN2EyMTMxMzk4ODUzYTc4ZjVhYi4uMDUwYmQ4NTFiNzlmM2Y4MjU2
Y2RlNDZhODcwYzhhY2FkYjNiYjE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
eHIvV2ViWFJTZXNzaW9uLmNwcApAQCAtNTgsNiArNTgsNyBAQCBXZWJYUlNlc3Npb246OldlYlhS
U2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFdlYlhSU3lzdGVtJiBzeXN0ZW0sIFhSU2Vzc2lv
bk1vZAogICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJldlYlhSU2Vzc2lvbjo6YW5pbWF0
aW9uVGltZXJGaXJlZCkKIHsKICAgICBtX2RldmljZS0+aW5pdGlhbGl6ZVRyYWNraW5nQW5kUmVu
ZGVyaW5nKG1vZGUpOworICAgIG1fZGV2aWNlLT5zZXRUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVu
dChtYWtlV2Vha1B0cigqdGhpcykpOwogCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CkBAIC0z
MTcsOCArMzE4LDIwIEBAIEludFNpemUgV2ViWFJTZXNzaW9uOjpyZWNvbW1lbmRlZFdlYkdMRnJh
bWVidWZmZXJSZXNvbHV0aW9uKCkgY29uc3QKIH0KIAogLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2Vi
LmdpdGh1Yi5pby93ZWJ4ci8jc2h1dC1kb3duLXRoZS1zZXNzaW9uCi12b2lkIFdlYlhSU2Vzc2lv
bjo6c2h1dGRvd24oKQordm9pZCBXZWJYUlNlc3Npb246OnNodXRkb3duKEluaXRpYXRlZEJ5U3lz
dGVtIGluaXRpYXRlZEJ5U3lzdGVtKQogeworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpOworCisgICAgaWYgKG1fZW5kZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZXRob2Qg
d2FzIGNhbGxlZCBlYXJsaWVyIHdpdGggaW5pdGlhdGVkQnlTeXN0ZW09Tm8gd2hlbiB0aGUKKyAg
ICAgICAgLy8gc2Vzc2lvbiB0ZXJtaW5hdGlvbiB3YXMgcmVxdWVzdGVkIG1hbnVhbGx5IHZpYSBY
UlNlc3Npb24uZW5kKCkuIFdoZW4KKyAgICAgICAgLy8gdGhlIHN5c3RlbSBoYXMgY29tcGxldGVk
IHRoZSBzaHV0ZG93biwgdGhpcyBtZXRob2QgaXMgbm93IGNhbGxlZCBhZ2FpbgorICAgICAgICAv
LyB3aXRoIGluaXRpYXRlZEJ5U3lzdGVtPVllcyB0byBkbyB0aGUgZmluYWwgY2xlYW51cC4KKyAg
ICAgICAgaWYgKGluaXRpYXRlZEJ5U3lzdGVtID09IEluaXRpYXRlZEJ5U3lzdGVtOjpZZXMpCisg
ICAgICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICAvLyAxLiBMZXQgc2Vzc2lvbiBiZSB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3Qu
CiAgICAgLy8gMi4gU2V0IHNlc3Npb24ncyBlbmRlZCB2YWx1ZSB0byB0cnVlLgogICAgIG1fZW5k
ZWQgPSB0cnVlOwpAQCAtMzI3LDYgKzM0MCwxNCBAQCB2b2lkIFdlYlhSU2Vzc2lvbjo6c2h1dGRv
d24oKQogICAgIC8vIDQuIFJlbW92ZSBzZXNzaW9uIGZyb20gdGhlIGxpc3Qgb2YgaW5saW5lIHNl
c3Npb25zLgogICAgIG1feHJTeXN0ZW0uc2Vzc2lvbkVuZGVkKCp0aGlzKTsKIAorICAgIGlmIChp
bml0aWF0ZWRCeVN5c3RlbSA9PSBJbml0aWF0ZWRCeVN5c3RlbTo6WWVzKSB7CisgICAgICAgIC8v
IElmIHdlIGdldCBoZXJlLCB0aGUgc2Vzc2lvbiB0ZXJtaW5hdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5
IHRoZSBzeXN0ZW0gcmF0aGVyIHRoYW4KKyAgICAgICAgLy8gdmlhIFhSU2Vzc2lvbi5lbmQoKS4g
U2luY2UgdGhlIHN5c3RlbSBoYXMgY29tcGxldGVkIHRoZSBzZXNzaW9uIHNodXRkb3duLCB3ZSBj
YW4KKyAgICAgICAgLy8gaW1tZWRpYXRlbHkgZG8gdGhlIGZpbmFsIGNsZWFudXAuCisgICAgICAg
IGRpZENvbXBsZXRlU2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8v
IFRPRE86IGNvbXBsZXRlIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgIC8vIDUuIFJlamVjdCBhbnkg
b3V0c3RhbmRpbmcgcHJvbWlzZXMgcmV0dXJuZWQgYnkgc2Vzc2lvbiB3aXRoIGFuIEludmFsaWRT
dGF0ZUVycm9yLCBleGNlcHQgZm9yIGFueSBwcm9taXNlcyByZXR1cm5lZCBieSBlbmQoKS4KICAg
ICAvLyA2LiBJZiBubyBvdGhlciBmZWF0dXJlcyBvZiB0aGUgdXNlciBhZ2VudCBhcmUgYWN0aXZl
bHkgdXNpbmcgdGhlbSwgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IHBsYXRmb3JtLXNwZWNpZmljIHN0
ZXBzIHRvIHNodXQgZG93biB0aGUgZGV2aWNlJ3MgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBjYXBh
YmlsaXRpZXMuIFRoaXMgTVVTVCBpbmNsdWRlOgpAQCAtMzM2LDMwICszNTcsNTEgQEAgdm9pZCBX
ZWJYUlNlc3Npb246OnNodXRkb3duKCkKICAgICBpZiAobV9kZXZpY2UpCiAgICAgICAgIG1fZGV2
aWNlLT5zaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKCk7CiAKKyAgICAvLyBJZiBkZXZpY2Ug
d2lsbCBub3QgcmVwb3J0IHNodXRkb3duIGNvbXBsZXRpb24gdmlhIHRoZSBUcmFja2luZ0FuZFJl
bmRlcmluZ0NsaWVudCwKKyAgICAvLyBjb21wbGV0ZSB0aGUgc2h1dGRvd24gY2xlYW51cCBoZXJl
LgorICAgIGlmICghbV9kZXZpY2UgfHwgIW1fZGV2aWNlLT5zdXBwb3J0c1Nlc3Npb25TaHV0ZG93
bk5vdGlmaWNhdGlvbigpKQorICAgICAgICBkaWRDb21wbGV0ZVNodXRkb3duKCk7Cit9CisKK3Zv
aWQgV2ViWFJTZXNzaW9uOjpkaWRDb21wbGV0ZVNodXRkb3duKCkKK3sKKyAgICBpZiAobV9kZXZp
Y2UpCisgICAgICAgIG1fZGV2aWNlLT5zZXRUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudChudWxs
cHRyKTsKKworICAgIC8vIFJlc29sdmUgZW5kIHByb21pc2UgZnJvbSBYUlNlc3Npb246OmVuZCgp
CisgICAgaWYgKG1fZW5kUHJvbWlzZSkgeworICAgICAgICBtX2VuZFByb21pc2UtPnJlc29sdmUo
KTsKKyAgICAgICAgbV9lbmRQcm9taXNlID0gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIC8v
IEZyb20gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jc2h1dC1kb3duLXRo
ZS1zZXNzaW9uCiAgICAgLy8gNy4gUXVldWUgYSB0YXNrIHRoYXQgZmlyZXMgYW4gWFJTZXNzaW9u
RXZlbnQgbmFtZWQgZW5kIG9uIHNlc3Npb24uCiAgICAgYXV0byBldmVudCA9IFhSU2Vzc2lvbkV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuZEV2ZW50LCB7IG1ha2VSZWZQdHIoKnRoaXMpIH0p
OwogICAgIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCgqdGhpcywgVGFza1NvdXJjZTo6V2ViWFIs
IFdURk1vdmUoZXZlbnQpKTsKIH0KIAogLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5p
by93ZWJ4ci8jZG9tLXhyc2Vzc2lvbi1lbmQKLXZvaWQgV2ViWFJTZXNzaW9uOjplbmQoRW5kUHJv
bWlzZSYmIHByb21pc2UpCitFeGNlcHRpb25Pcjx2b2lkPiBXZWJYUlNlc3Npb246OmVuZChFbmRQ
cm9taXNlJiYgcHJvbWlzZSkKIHsKLSAgICAvLyBUaGUgc2h1dGRvd24oKSBjYWxsIGJlbGxvdyBt
aWdodCByZW1vdmUgdGhlIHNvbGUgcmVmZXJlbmNlIHRvIHNlc3Npb24KKyAgICAvLyBUaGUgc2h1
dGRvd24oKSBjYWxsIGJlbG93IG1pZ2h0IHJlbW92ZSB0aGUgc29sZSByZWZlcmVuY2UgdG8gc2Vz
c2lvbgogICAgIC8vIHRoYXQgY291bGQgZXhpc3QgKHRoZSBYUlN5c3RlbSBvd25zIHRoZSBzZXNz
aW9ucykgc28gbGV0J3MgcHJvdGVjdCB0aGlzLgotICAgIFJlZjxXZWJYUlNlc3Npb24+IHByb3Rl
Y3RlZFRoaXMoKnRoaXMpOworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
OworCisgICAgaWYgKG1fZW5kZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciwgIkNhbm5vdCBlbmQgYSBzZXNzaW9uIG1vcmUgdGhhbiBvbmNlIl9zIH07CisK
ICAgICAvLyAxLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBQcm9taXNlLgogICAgIC8vIDIuIFNodXQg
ZG93biB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3QuCi0gICAgaWYgKCFtX2VuZGVkKQotICAg
ICAgICBzaHV0ZG93bigpOworICAgIHNodXRkb3duKEluaXRpYXRlZEJ5U3lzdGVtOjpObyk7CiAK
ICAgICAvLyAzLiBRdWV1ZSBhIHRhc2sgdG8gcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgot
ICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6V2ViWFIs
IFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIC8vIDMu
MSBXYWl0IHVudGlsIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyByZWxhdGVkIHRvIHNodXR0
aW5nIGRvd24gdGhlIHNlc3Npb24gaGF2ZSBjb21wbGV0ZWQuCi0gICAgICAgIC8vIDMuMiBSZXNv
bHZlIHByb21pc2UuCi0gICAgICAgIHByb21pc2UucmVzb2x2ZSgpOwotICAgIH0pOworICAgIC8v
IDMuMSBXYWl0IHVudGlsIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyByZWxhdGVkIHRvIHNo
dXR0aW5nIGRvd24gdGhlIHNlc3Npb24gaGF2ZSBjb21wbGV0ZWQuCisgICAgLy8gMy4yIFJlc29s
dmUgcHJvbWlzZS4KKyAgICBBU1NFUlQoIW1fZW5kUHJvbWlzZSk7CisgICAgbV9lbmRQcm9taXNl
ID0gV1RGTW92ZShwcm9taXNlKTsKIAogICAgIC8vIDQuIFJldHVybiBwcm9taXNlLgorICAgIHJl
dHVybiB7IH07CiB9CiAKIGNvbnN0IGNoYXIqIFdlYlhSU2Vzc2lvbjo6YWN0aXZlRE9NT2JqZWN0
TmFtZSgpIGNvbnN0CkBAIC0zNzEsNiArNDEzLDEzIEBAIHZvaWQgV2ViWFJTZXNzaW9uOjpzdG9w
KCkKIHsKIH0KIAordm9pZCBXZWJYUlNlc3Npb246OnNlc3Npb25EaWRFbmQoKQoreworICAgIC8v
IFRoaXMgY2FuIGJlIGNhbGxlZCBhcyBhIHJlc3VsdCBvZiBmaW5pc2hpbmcgdGhlIHNodXRkb3du
IGluaXRpYXRlZAorICAgIC8vIGZyb20gWFJTZXNzaW9uOjplbmQoKSwgb3Igc2Vzc2lvbiB0ZXJt
aW5hdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHN5c3RlbS4KKyAgICBzaHV0ZG93bihJbml0aWF0ZWRC
eVN5c3RlbTo6WWVzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9X
ZWJYUlNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9u
LmgKaW5kZXggZTRjMjdkYjRiOTBkOTIxZTIxNTU1YTZhMjg2OTA2ZTk4YzYzYTBlOC4uNTU1NDMw
YzhjM2Y3MzEyMzFhYWY0ZjBjM2ZmYjU4MjlkNjkyOWIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIFdlYlhS
UmVmZXJlbmNlU3BhY2U7CiBjbGFzcyBXZWJYUlN5c3RlbTsKIHN0cnVjdCBYUlJlbmRlclN0YXRl
SW5pdDsKIAotY2xhc3MgV2ViWFJTZXNzaW9uIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2Vi
WFJTZXNzaW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QgeworY2xhc3MgV2ViWFJTZXNzaW9uIGZpbmFsIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViWFJTZXNzaW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1Ymxp
YyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBQbGF0Zm9ybVhSOjpUcmFja2luZ0FuZFJlbmRlcmlu
Z0NsaWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChXZWJYUlNlc3Npb24pOwogcHVi
bGljOgogICAgIHVzaW5nIFJlcXVlc3RSZWZlcmVuY2VTcGFjZVByb21pc2UgPSBET01Qcm9taXNl
RGVmZXJyZWQ8SURMSW50ZXJmYWNlPFdlYlhSUmVmZXJlbmNlU3BhY2U+PjsKQEAgLTY0LDYgKzY0
LDkgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPjo6cmVmOwog
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPjo6ZGVyZWY7CiAKKyAgICB1c2luZyBU
cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudDo6d2Vha1B0ckZhY3Rvcnk7CisgICAgdXNpbmcgV2Vh
a1ZhbHVlVHlwZSA9IFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50OjpXZWFrVmFsdWVUeXBlOwor
CiAgICAgWFJFbnZpcm9ubWVudEJsZW5kTW9kZSBlbnZpcm9ubWVudEJsZW5kTW9kZSgpIGNvbnN0
OwogICAgIFhSSW50ZXJhY3Rpb25Nb2RlIGludGVyYWN0aW9uTW9kZSgpIGNvbnN0OwogICAgIFhS
VmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSgpIGNvbnN0OwpAQCAtODIsNyArODUsNyBA
QCBwdWJsaWM6CiAgICAgLy8gRXZlbnRUYXJnZXQuCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURP
TU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKLSAgICB2b2lkIGVuZChFbmRQ
cm9taXNlJiYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGVuZChFbmRQcm9taXNlJiYpOwogICAg
IGJvb2wgZW5kZWQoKSBjb25zdCB7IHJldHVybiBtX2VuZGVkOyB9CiAKICAgICBYUlNlc3Npb25N
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KQEAgLTk5LDcgKzEwMiwxMiBAQCBw
cml2YXRlOgogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2h1dGRvd24oKTsK
KyAgICAvLyBQbGF0Zm9ybVhSOjpUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudAorICAgIHZvaWQg
c2Vzc2lvbkRpZEVuZCgpIGZpbmFsOworCisgICAgZW51bSBjbGFzcyBJbml0aWF0ZWRCeVN5c3Rl
bSA6IGJvb2wgeyBObywgWWVzIH07CisgICAgdm9pZCBzaHV0ZG93bihJbml0aWF0ZWRCeVN5c3Rl
bSk7CisgICAgdm9pZCBkaWRDb21wbGV0ZVNodXRkb3duKCk7CiAKICAgICB2b2lkIGFuaW1hdGlv
blRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CkBAIC0xMTEsNiAr
MTE5LDcgQEAgcHJpdmF0ZToKICAgICBYUlZpc2liaWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlTdGF0
ZTsKICAgICBSZWY8V2ViWFJJbnB1dFNvdXJjZUFycmF5PiBtX2lucHV0U291cmNlczsKICAgICBi
b29sIG1fZW5kZWQgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPEVuZFByb21pc2U+IG1fZW5kUHJv
bWlzZTsKIAogICAgIFdlYlhSU3lzdGVtJiBtX3hyU3lzdGVtOwogICAgIFhSU2Vzc2lvbk1vZGUg
bV9tb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNl
c3Npb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaWRs
CmluZGV4IDVjMDQ4YzBmNDY2MzgyZTY0MDM4YjlhYWMwNjljZjgwMTczMTkyOGUuLjk4OTVlNjM3
NGFiODNhYWNhNTBkMGY1OWYxNWVmZjI0NGQ1NmUzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5pZGwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICB1bnNp
Z25lZCBsb25nIHJlcXVlc3RBbmltYXRpb25GcmFtZShYUkZyYW1lUmVxdWVzdENhbGxiYWNrIGNh
bGxiYWNrKTsKICAgICB1bmRlZmluZWQgY2FuY2VsQW5pbWF0aW9uRnJhbWUodW5zaWduZWQgbG9u
ZyBoYW5kbGUpOwogCi0gICAgUHJvbWlzZTx1bmRlZmluZWQ+IGVuZCgpOworICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gUHJvbWlzZTx1bmRlZmluZWQ+IGVuZCgpOwogCiAgICAgLy8gRXZlbnRzCiAg
ICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmVuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hy
L1BsYXRmb3JtWFIuaAppbmRleCA2NDU1MGY0ZTAxYmYwMDViZWRlMTg0YzBmZWE0ZGI5MzEyNjQ4
YjY0Li5iOWVmNDVjMGM2OTcxNGFlODNjNzA0NDU0ZDk1NGJkNTFlYTQ3NjZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oCkBAIC00NCw2ICs0NCwxNSBAQCBlbnVtIGNs
YXNzIFJlZmVyZW5jZVNwYWNlVHlwZSB7CiAKICNpZiBFTkFCTEUoV0VCWFIpCiAKK2NsYXNzIFRy
YWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50IDogcHVibGljIENhbk1ha2VXZWFrUHRyPFRyYWNraW5n
QW5kUmVuZGVyaW5nQ2xpZW50PiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VHJhY2tpbmdBbmRS
ZW5kZXJpbmdDbGllbnQoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2Vzc2lvbkRp
ZEVuZCgpID0gMDsKKyAgICAvLyBGSVhNRTogaGFuZGxlIGZyYW1lIHVwZGF0ZQorICAgIC8vIEZJ
WE1FOiBoYW5kbGUgdmlzaWJpbGl0eSBjaGFuZ2VzCit9OworCiBjbGFzcyBEZXZpY2UgOiBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8RGV2aWNlPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGV2aWNlKTsKQEAgLTYxLDYgKzcwLDExIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmco
U2Vzc2lvbk1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2h1dERvd25UcmFja2luZ0FuZFJl
bmRlcmluZygpID0gMDsKKyAgICB2b2lkIHNldFRyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50KFdl
YWtQdHI8VHJhY2tpbmdBbmRSZW5kZXJpbmdDbGllbnQ+JiYgY2xpZW50KSB7IG1fdHJhY2tpbmdB
bmRSZW5kZXJpbmdDbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7IH0KKworICAgIC8vIElmIHRoaXMg
bWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhhdCBtZWFucyB0aGUgZGV2aWNlIHdpbGwgbm90aWZ5IFRy
YWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50CisgICAgLy8gd2hlbiB0aGUgcGxhdGZvcm0gaGFzIGNv
bXBsZXRlZCBhbGwgc3RlcHMgdG8gc2h1dCBkb3duIHRoZSBYUiBzZXNzaW9uLgorICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1Nlc3Npb25TaHV0ZG93bk5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKIHByb3RlY3RlZDoKICAgICBEZXZpY2UoKSA9IGRlZmF1bHQ7CkBAIC03
Miw2ICs4Niw3IEBAIHByb3RlY3RlZDoKICAgICBFbmFibGVkRmVhdHVyZXNQZXJNb2RlTWFwIG1f
ZW5hYmxlZEZlYXR1cmVzTWFwOwogCiAgICAgYm9vbCBtX3N1cHBvcnRzT3JpZW50YXRpb25UcmFj
a2luZyB7IGZhbHNlIH07CisgICAgV2Vha1B0cjxUcmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudD4g
bV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudDsKIH07CiAKIGNsYXNzIEluc3RhbmNlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcAppbmRleCAyZmFkZjM5MzI1
MDVkYTU0YWJlMTdkMTkxMmU0MDExOTIxYTQ5NTc0Li5hNDdjMWVjYTdkZWRjZWRhNTA1MGFkOTdi
YzQ3ZDg1NjViYTU5MGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZh
a2VYUkRldmljZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZp
Y2UuY3BwCkBAIC0zOSw2ICszOSwxOCBAQCB2b2lkIEZha2VYUlZpZXc6OnNldEZpZWxkT2ZWaWV3
KEZha2VYUlZpZXdJbml0OjpGaWVsZE9mVmlld0luaXQgZm92KQogICAgIG1fZm92ID0gZm92Owog
fQogCit2b2lkIFNpbXVsYXRlZFhSRGV2aWNlOjpzaW11bGF0ZVNodXRkb3duQ29tcGxldGVkKCkK
K3sKKyAgICBpZiAobV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCkKKyAgICAgICAgbV90cmFj
a2luZ0FuZFJlbmRlcmluZ0NsaWVudC0+c2Vzc2lvbkRpZEVuZCgpOworfQorCit2b2lkIFNpbXVs
YXRlZFhSRGV2aWNlOjpzaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKCkKK3sKKyAgICBpZiAo
bV9zdXBwb3J0c1NodXRkb3duTm90aWZpY2F0aW9uKQorICAgICAgICBzaW11bGF0ZVNodXRkb3du
Q29tcGxldGVkKCk7Cit9CisKIFdlYkZha2VYUkRldmljZTo6V2ViRmFrZVhSRGV2aWNlKCkgPSBk
ZWZhdWx0OwogCiB2b2lkIFdlYkZha2VYUkRldmljZTo6c2V0Vmlld3MoY29uc3QgVmVjdG9yPEZh
a2VYUlZpZXdJbml0PiYgdmlld3MpCkBAIC0xNTYsNiArMTY4LDE2IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxGYWtlWFJWaWV3Pj4gV2ViRmFrZVhSRGV2aWNlOjpwYXJzZVZpZXcoY29uc3QgRmFrZVhSVmll
d0luaXQmIGluCiAgICAgcmV0dXJuIGZha2VWaWV3OwogfQogCit2b2lkIFdlYkZha2VYUkRldmlj
ZTo6c2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbigpCit7CisgICAgbV9kZXZpY2Uuc2V0
U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbih0cnVlKTsKK30KKwordm9pZCBXZWJGYWtlWFJE
ZXZpY2U6OnNpbXVsYXRlU2h1dGRvd24oKQoreworICAgIG1fZGV2aWNlLnNpbXVsYXRlU2h1dGRv
d25Db21wbGV0ZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtl
WFJEZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmgKaW5k
ZXggOTdhMWI5NTcxOWU3YjMyYmY4NDE0YmNmYTM0ZDY5MGVkNzM2NzcwZi4uODQ3YmJjYjE3NDQ4
NDQ4ZjBlYzdlOGNlYjFiNmZkNmU5ZmFjOTU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dl
YkZha2VYUkRldmljZS5oCkBAIC02OSwxNCArNjksMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Rmxvb3JPcmlnaW4oUmVmUHRyPFdlYlhSUmlnaWRUcmFuc2Zvcm0+JiYgb3JpZ2luKSB7IG1fZmxv
b3JPcmlnaW4gPSBXVEZNb3ZlKG9yaWdpbik7IH0KICAgICB2b2lkIHNldEVtdWxhdGVkUG9zaXRp
b24oYm9vbCBlbXVsYXRlZCkgeyBtX2VtdWxhdGVkUG9zaXRpb24gPSBlbXVsYXRlZDsgfQogICAg
IFZlY3RvcjxSZWY8RmFrZVhSVmlldz4+JiB2aWV3cygpIHsgcmV0dXJuIG1fdmlld3M7IH0KKyAg
ICB2b2lkIHNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24oYm9vbCBzdXBwb3J0c1NodXRk
b3duTm90aWZpY2F0aW9uKSB7IG1fc3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNhdGlvbiA9IHN1cHBv
cnRzU2h1dGRvd25Ob3RpZmljYXRpb247IH0KKyAgICB2b2lkIHNpbXVsYXRlU2h1dGRvd25Db21w
bGV0ZWQoKTsKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJp
bmcoUGxhdGZvcm1YUjo6U2Vzc2lvbk1vZGUpIGZpbmFsIHsgfQotICAgIHZvaWQgc2h1dERvd25U
cmFja2luZ0FuZFJlbmRlcmluZygpIGZpbmFsIHsgfQorICAgIHZvaWQgc2h1dERvd25UcmFja2lu
Z0FuZFJlbmRlcmluZygpIGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNTZXNzaW9uU2h1dGRvd25O
b3RpZmljYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N1cHBvcnRzU2h1dGRvd25Ob3Rp
ZmljYXRpb247IH0KICAgICBPcHRpb25hbDxWZWN0b3I8RmFrZVhSQm91bmRzUG9pbnQ+PiBtX25h
dGl2ZUJvdW5kc0dlb21ldHJ5OwogICAgIFJlZlB0cjxXZWJYUlJpZ2lkVHJhbnNmb3JtPiBtX3Zp
ZXdlck9yaWdpbjsKICAgICBSZWZQdHI8V2ViWFJSaWdpZFRyYW5zZm9ybT4gbV9mbG9vck9yaWdp
bjsKICAgICBib29sIG1fZW11bGF0ZWRQb3NpdGlvbiB7IGZhbHNlIH07CiAgICAgVmVjdG9yPFJl
ZjxGYWtlWFJWaWV3Pj4gbV92aWV3czsKKyAgICBib29sIG1fc3VwcG9ydHNTaHV0ZG93bk5vdGlm
aWNhdGlvbiB7IGZhbHNlIH07CiB9OwogCiBjbGFzcyBXZWJGYWtlWFJEZXZpY2UgZmluYWwgOiBw
dWJsaWMgUmVmQ291bnRlZDxXZWJGYWtlWFJEZXZpY2U+IHsKQEAgLTEwNyw2ICsxMTEsMTAgQEAg
cHVibGljOgogCiAgICAgU2ltdWxhdGVkWFJEZXZpY2UmIHNpbXVsYXRlZFhSRGV2aWNlKCkgeyBy
ZXR1cm4gbV9kZXZpY2U7IH0KIAorICAgIHZvaWQgc2V0U3VwcG9ydHNTaHV0ZG93bk5vdGlmaWNh
dGlvbigpOworCisgICAgdm9pZCBzaW11bGF0ZVNodXRkb3duKCk7CisKIHByaXZhdGU6CiAgICAg
V2ViRmFrZVhSRGV2aWNlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
V2ViRmFrZVhSRGV2aWNlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2
aWNlLmlkbAppbmRleCA5NDYyNTcxNmVkMDZiZTllMmQ5NjQ1MDA0MDIzYWM3NjExOWViNTNlLi5i
M2Y4OTFmYzZiOTU4NTU5MWFlNDNkYmQzMzQxMWU3N2I2MDY1YTRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaWRsCkBAIC02MCw0ICs2MCwxMCBAQAogCiAgIC8v
IFVzZWQgdG8gY29ubmVjdCBhbmQgc2VuZCBpbnB1dCBldmVudHMKICAgV2ViRmFrZVhSSW5wdXRD
b250cm9sbGVyIHNpbXVsYXRlSW5wdXRTb3VyY2VDb25uZWN0aW9uKEZha2VYUklucHV0U291cmNl
SW5pdCBpbnB1dFNvdXJjZSk7CisKKyAgLy8gU2V0IHVwIHRoZSBkZXZpY2Ugc28gaXQnbGwgbm90
aWZ5IHNlc3Npb24gd2hlbiB0aGUgc3lzdGVtIGhhcyBjb21wbGV0ZWQgYWxsIHN0ZXBzIGZvciBz
ZXNzaW9uIHNodXRkb3duCisgIHVuZGVmaW5lZCBzZXRTdXBwb3J0c1NodXRkb3duTm90aWZpY2F0
aW9uKCk7CisKKyAgLy8gU2ltdWxhdGUgc2Vzc2lvbiBzaHV0ZG93biB0cmlnZ2VyZWQgYnkgc3lz
dGVtCisgIHVuZGVmaW5lZCBzaW11bGF0ZVNodXRkb3duKCk7CiB9OwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU2ZmFkMGQ2
OWU5YmZlZThhN2NlYzc2NzVlZmM2ZDZhYmZmMWJkM2UuLjc2YTljZmE1Zjk1YzdhMjhjYzYyNDUx
MjI5OWIyZjViYTRhMDBmMDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0wMS0yNiAgQWRh
IENoYW4gIDxhZGEuY2hhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2VuZCB0aGUgZW5kIFhSU2Vz
c2lvbkV2ZW50IGFmdGVyIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGVwcyBmb3Igc2Vzc2lvbiBz
aHV0ZG93biBoYXZlIGNvbXBsZXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjIwODM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXou
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBw
bGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBodHRwL3dwdC93ZWJ4ci94
clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3duLmh0dHBzLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNlX3JlcG9ydHNfc2h1
dGRvd24uaHR0cHMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC93cHQvd2Vi
eHIveHJTZXNzaW9uX2VuZGVkX2J5X3N5c3RlbS5odHRwcy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lzdGVtLmh0dHBzLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWplY3Rf
bXVsdGlwbGVfZW5kLmh0dHBzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnhy
L3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorCiAyMDIxLTAxLTI1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbcnVuLXdlYmtpdC10ZXN0c10gU3VwcG9ydCBweXRob24gbGF5b3V0IHRlc3RzCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvVGVz
dEV4cGVjdGF0aW9ucwppbmRleCA0NzAwNmJiM2NhNmE1NzhkZmU1NmM1ODVhNzUyYTBlODhmNDI5
YjJmLi5iMWM1NzliYTNmYWU0OGVmYmE1MzI0ZjgxODVkYWRlZmJkNGMwYTg4IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTM2MjQsNiArMzYyNCw3IEBAIHdlYmtpdC5vcmcvYi8yMDcyNjEgWyBEZWJ1
ZyBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1iYWNrZ3JvdW5kCiB3
ZWJraXQub3JnL2IvMjA3MjYyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFu
aW1hdGlvbnMvdGltaW5nLW1vZGVsL2FuaW1hdGlvbnMvc3luYy1zdGFydC10aW1lcy5odG1sIFsg
UGFzcyBJbWFnZU9ubHlGYWlsdXJlIF0KIAogIyBXZWJYUiBpcyBiZWluZyBpbXBsZW1lbnRlZAor
d2Via2l0Lm9yZy9iLzIwODk4OCBodHRwL3dwdC93ZWJ4ciBbIFNraXAgXQogd2Via2l0Lm9yZy9i
LzIwODk4OCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyIFsgU2tpcCBdCiAK
IHdlYmtpdC5vcmcvYi8yMTA5NjMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3Mv
Y3NzLWFuaW1hdGlvbnMvYW5pbWF0aW9uLWltcG9ydGFudC0wMDIuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9u
X2VuZF9kZXZpY2VfcmVwb3J0c19zaHV0ZG93bi5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kX2RldmljZV9yZXBvcnRzX3NodXRkb3du
Lmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OGNjOGI0NjMxOGY1MGM2ZWIzZWFmYWVi
NjgzMGFlMWJjMjYyZDkzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQv
d2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2VfcmVwb3J0c19zaHV0ZG93bi5odHRwcy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgZW5kIGV2ZW50IGZpcmVzIHdoZW4gaW1tZXJz
aXZlIHNlc3Npb24gZW5kcyBhbmQgZGV2aWNlIHJlcG9ydHMgd2hlbiBzaHV0ZG93biBoYXMgY29t
cGxldGVkCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lv
bl9lbmRfZGV2aWNlX3JlcG9ydHNfc2h1dGRvd24uaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0
dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9lbmRfZGV2aWNlX3JlcG9ydHNfc2h1dGRvd24uaHR0cHMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jZDg3MGI2YjJiMzY4NWE3Yjk0Mjg4NTVjYWZjM2UyMGQ5ZTBmYjk1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9u
X2VuZF9kZXZpY2VfcmVwb3J0c19zaHV0ZG93bi5odHRwcy5odG1sCkBAIC0wLDAgKzEsMzkgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGJvZHk+CisgIDxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanM+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanM+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIuLi8uLi93ZWJ4ci9yZXNvdXJjZXMv
d2VieHJfdXRpbC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIuLi8uLi93ZWJ4ci9yZXNv
dXJjZXMvd2VieHJfdGVzdF9jb25zdGFudHMuanMiPjwvc2NyaXB0PgorICA8Y2FudmFzPjwvY2Fu
dmFzPgorCisgIDxzY3JpcHQ+CisgICAgY29uc3QgdGVzdE5hbWUgPSAiZW5kIGV2ZW50IGZpcmVz
IHdoZW4gaW1tZXJzaXZlIHNlc3Npb24gZW5kcyBhbmQgZGV2aWNlIHJlcG9ydHMgd2hlbiBzaHV0
ZG93biBoYXMgY29tcGxldGVkIjsKKyAgICBsZXQgd2F0Y2hlckRvbmUgPSBuZXcgRXZlbnQoIndh
dGNoZXJkb25lIik7CisgICAgY29uc3QgZmFrZURldmljZUluaXRQYXJhbXMgPSBUUkFDS0VEX0lN
TUVSU0lWRV9ERVZJQ0U7CisKKyAgICBsZXQgdGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24oc2Vzc2lv
biwgdGVzdERldmljZUNvbnRyb2xsZXIsIHQpIHsKKyAgICAgIHRlc3REZXZpY2VDb250cm9sbGVy
LnNldFN1cHBvcnRzU2h1dGRvd25Ob3RpZmljYXRpb24oKTsKKyAgICAgIGxldCBldmVudFdhdGNo
ZXIgPSBuZXcgRXZlbnRXYXRjaGVyKHQsIHNlc3Npb24sIFsiZW5kIiwgIndhdGNoZXJkb25lIl0p
OworICAgICAgbGV0IGV2ZW50UHJvbWlzZSA9IGV2ZW50V2F0Y2hlci53YWl0X2ZvcihbImVuZCIs
ICJ3YXRjaGVyZG9uZSJdKTsKKworICAgICAgZnVuY3Rpb24gb25TZXNzaW9uRW5kKGV2ZW50KSB7
CisgICAgICAgIHQuc3RlcCggKCkgPT4geworICAgICAgICAgIGFzc2VydF9lcXVhbHMoZXZlbnQu
c2Vzc2lvbiwgc2Vzc2lvbik7CisKKyAgICAgICAgICBsZXQgZXZlbnRTZXNzaW9uID0gZXZlbnQu
c2Vzc2lvbjsKKyAgICAgICAgICBhc3NlcnRfZXF1YWxzKGV2ZW50U2Vzc2lvbiwgZXZlbnQuc2Vz
c2lvbiwKKyAgICAgICAgICAgICJYUlNlc3Npb25FdmVudC5zZXNzaW9uIHJldHVybnMgdGhlIHNh
bWUgb2JqZWN0LiIpOworCisgICAgICAgICAgc2Vzc2lvbi5kaXNwYXRjaEV2ZW50KHdhdGNoZXJE
b25lKTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVu
ZXIoImVuZCIsIG9uU2Vzc2lvbkVuZCwgZmFsc2UpOworICAgICAgc2Vzc2lvbi5lbmQoKTsKKwor
ICAgICAgcmV0dXJuIGV2ZW50UHJvbWlzZTsKKyAgICB9OworCisgICAgeHJfc2Vzc2lvbl9wcm9t
aXNlX3Rlc3QodGVzdE5hbWUsIHRlc3RGdW5jdGlvbiwKKyAgICAgIGZha2VEZXZpY2VJbml0UGFy
YW1zLCAnaW1tZXJzaXZlLXZyJyk7CisgIDwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZGVkX2J5X3N5c3RlbS5odHRw
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5k
ZWRfYnlfc3lzdGVtLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYWFlNWZmZmQ4ZDRi
YzcyMTVlMzVhMDRlYTE1NTVkYWYzZDI0YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZGVkX2J5X3N5c3RlbS5odHRwcy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw0IEBACisKK1BBU1MgZW5kIGV2ZW50IGZpcmVzIHdoZW4gaW1tZXJz
aXZlIHNlc3Npb24gaXMgZW5kZWQgYnkgc3lzdGVtCitQQVNTIGVuZCBldmVudCBmaXJlcyB3aGVu
IGltbWVyc2l2ZSBzZXNzaW9uIGlzIGVuZGVkIGJ5IHN5c3RlbSBhbmQgZGV2aWNlIHJlcG9ydHMg
c2h1dGRvd24gY29tcGxldGUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2Vi
eHIveHJTZXNzaW9uX2VuZGVkX2J5X3N5c3RlbS5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0
cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZGVkX2J5X3N5c3RlbS5odHRwcy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBkN2IyN2VkYzRkOGMwMWQyYmNlZWZhYmQ5MmEwZWFkNWNjMTQyODAKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlfc3lz
dGVtLmh0dHBzLmh0bWwKQEAgLTAsMCArMSw1MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8Ym9keT4K
KyAgPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcz48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9Ii4uLy4uL3dlYnhyL3Jlc291cmNlcy93ZWJ4cl91dGlsLmpzIj48L3NjcmlwdD4K
KyAgPHNjcmlwdCBzcmM9Ii4uLy4uL3dlYnhyL3Jlc291cmNlcy93ZWJ4cl90ZXN0X2NvbnN0YW50
cy5qcyI+PC9zY3JpcHQ+CisgIDxjYW52YXM+PC9jYW52YXM+CisKKyAgPHNjcmlwdD4KKyAgICBj
b25zdCB0ZXN0RGV2aWNlTm90UmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZU5hbWUgPSAiZW5kIGV2
ZW50IGZpcmVzIHdoZW4gaW1tZXJzaXZlIHNlc3Npb24gaXMgZW5kZWQgYnkgc3lzdGVtIjsKKyAg
ICBjb25zdCB0ZXN0RGV2aWNlUmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZU5hbWUgPSAiZW5kIGV2
ZW50IGZpcmVzIHdoZW4gaW1tZXJzaXZlIHNlc3Npb24gaXMgZW5kZWQgYnkgc3lzdGVtIGFuZCBk
ZXZpY2UgcmVwb3J0cyBzaHV0ZG93biBjb21wbGV0ZSI7CisKKyAgICBsZXQgd2F0Y2hlckRvbmUg
PSBuZXcgRXZlbnQoIndhdGNoZXJkb25lIik7CisgICAgY29uc3QgZmFrZURldmljZUluaXRQYXJh
bXMgPSBUUkFDS0VEX0lNTUVSU0lWRV9ERVZJQ0U7CisKKyAgICBsZXQgdGVzdERldmljZU5vdFJl
cG9ydGluZ1NodXRkb3duQ29tcGxldGUgPSBmdW5jdGlvbihzZXNzaW9uLCB0ZXN0RGV2aWNlQ29u
dHJvbGxlciwgdCkgeworICAgICAgdGVzdEVuZFNlc3Npb25CeVN5c3RlbShzZXNzaW9uLCB0ZXN0
RGV2aWNlQ29udHJvbGxlciwgdCk7CisgICAgfTsKKworICAgIGxldCB0ZXN0RGV2aWNlUmVwb3J0
aW5nU2h1dGRvd25Db21wbGV0ZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHRlc3REZXZpY2VDb250cm9s
bGVyLCB0KSB7CisgICAgICB0ZXN0RGV2aWNlQ29udHJvbGxlci5zZXRTdXBwb3J0c1NodXRkb3du
Tm90aWZpY2F0aW9uKCk7CisgICAgICB0ZXN0RW5kU2Vzc2lvbkJ5U3lzdGVtKHNlc3Npb24sIHRl
c3REZXZpY2VDb250cm9sbGVyLCB0KTsKKyAgICB9OworCisgICAgbGV0IHRlc3RFbmRTZXNzaW9u
QnlTeXN0ZW0gPSBmdW5jdGlvbihzZXNzaW9uLCB0ZXN0RGV2aWNlQ29udHJvbGxlciwgdCkgewor
ICAgICAgbGV0IGV2ZW50V2F0Y2hlciA9IG5ldyBFdmVudFdhdGNoZXIodCwgc2Vzc2lvbiwgWyJl
bmQiLCAid2F0Y2hlcmRvbmUiXSk7CisgICAgICBsZXQgZXZlbnRQcm9taXNlID0gZXZlbnRXYXRj
aGVyLndhaXRfZm9yKFsiZW5kIiwgIndhdGNoZXJkb25lIl0pOworCisgICAgICBmdW5jdGlvbiBv
blNlc3Npb25FbmQoZXZlbnQpIHsKKyAgICAgICAgdC5zdGVwKCAoKSA9PiB7CisgICAgICAgICAg
YXNzZXJ0X2VxdWFscyhldmVudC5zZXNzaW9uLCBzZXNzaW9uKTsKKworICAgICAgICAgIGxldCBl
dmVudFNlc3Npb24gPSBldmVudC5zZXNzaW9uOworICAgICAgICAgIGFzc2VydF9lcXVhbHMoZXZl
bnRTZXNzaW9uLCBldmVudC5zZXNzaW9uLAorICAgICAgICAgICAgIlhSU2Vzc2lvbkV2ZW50LnNl
c3Npb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3QuIik7CisKKyAgICAgICAgICBzZXNzaW9uLmRp
c3BhdGNoRXZlbnQod2F0Y2hlckRvbmUpOworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICAgIHNl
c3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiZW5kIiwgb25TZXNzaW9uRW5kLCBmYWxzZSk7CisKKyAg
ICAgIHRlc3REZXZpY2VDb250cm9sbGVyLnNpbXVsYXRlU2h1dGRvd24oKTsKKworICAgICAgcmV0
dXJuIGV2ZW50UHJvbWlzZTsKKyAgICB9OworCisgICAgeHJfc2Vzc2lvbl9wcm9taXNlX3Rlc3Qo
dGVzdERldmljZU5vdFJlcG9ydGluZ1NodXRkb3duQ29tcGxldGVOYW1lLCB0ZXN0RGV2aWNlTm90
UmVwb3J0aW5nU2h1dGRvd25Db21wbGV0ZSwKKyAgICAgIGZha2VEZXZpY2VJbml0UGFyYW1zLCAn
aW1tZXJzaXZlLXZyJyk7CisgICAgeHJfc2Vzc2lvbl9wcm9taXNlX3Rlc3QodGVzdERldmljZVJl
cG9ydGluZ1NodXRkb3duQ29tcGxldGVOYW1lLCB0ZXN0RGV2aWNlUmVwb3J0aW5nU2h1dGRvd25D
b21wbGV0ZSwKKyAgICAgIGZha2VEZXZpY2VJbml0UGFyYW1zLCAnaW1tZXJzaXZlLXZyJyk7CisK
KyAgPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3dwdC93
ZWJ4ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxlX2VuZC5odHRwcy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxlX2VuZC5o
dHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg5NzUzM2VjNDg3OTNkMTM0NmE3MDRkYTQw
NjIyNzQyNzY1ZWNjYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvd3B0L3dl
YnhyL3hyU2Vzc2lvbl9yZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMgQEAKKworUEFTUyBSZWplY3QgbXVsdGlwbGUgY2FsbHMgdG8gWFJTZXNzaW9uLmVu
ZCgpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9y
ZWplY3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4
ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxlX2VuZC5odHRwcy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgx
N2E3YmQ5OTk3MGMzYTE4MWQ1YzA0NGQ0ZWViYTRlYzVmMDQ3OTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJ4ci94clNlc3Npb25fcmVqZWN0X211bHRpcGxlX2Vu
ZC5odHRwcy5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGJvZHk+Cisg
IDxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM+PC9zY3JpcHQ+CisgIDxzY3Jp
cHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+CisgIDxzY3Jp
cHQgc3JjPSIuLi8uLi93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdXRpbC5qcyI+PC9zY3JpcHQ+Cisg
IDxzY3JpcHQgc3JjPSIuLi8uLi93ZWJ4ci9yZXNvdXJjZXMvd2VieHJfdGVzdF9jb25zdGFudHMu
anMiPjwvc2NyaXB0PgorICA8Y2FudmFzPjwvY2FudmFzPgorCisgIDxzY3JpcHQ+CisgICAgY29u
c3QgdGVzdE5hbWUgPSAiUmVqZWN0IG11bHRpcGxlIGNhbGxzIHRvIFhSU2Vzc2lvbi5lbmQoKSI7
CisgICAgY29uc3QgZmFrZURldmljZUluaXRQYXJhbXMgPSBUUkFDS0VEX0lNTUVSU0lWRV9ERVZJ
Q0U7CisKKyAgICBsZXQgdGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24oc2Vzc2lvbiwgdGVzdERldmlj
ZUNvbnRyb2xsZXIsIHQpIHsKKyAgICAgIHNlc3Npb24uZW5kKCk7CisgICAgICByZXR1cm4gcHJv
bWlzZV9yZWplY3RzX2RvbSh0LCAiSW52YWxpZFN0YXRlRXJyb3IiLCBzZXNzaW9uLmVuZCgpKQor
ICAgIH07CisKKyAgICB4cl9zZXNzaW9uX3Byb21pc2VfdGVzdCh0ZXN0TmFtZSwgdGVzdEZ1bmN0
aW9uLAorICAgICAgZmFrZURldmljZUluaXRQYXJhbXMsICdpbW1lcnNpdmUtdnInKTsKKyAgPC9z
Y3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
CmluZGV4IDkyNjc2YjRkNmUxOTY1OWYyNzAwNmE4MDJlNmI2MjZmZDQ5NGNlOTIuLjU5ZWJhNmIw
MGRiNjUwM2RhMjlmODliZGUxNTIzNTcyNDJjNDA3OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9UZXN0RXhwZWN0YXRpb25zCkBAIC0yMjU3LDMgKzIyNTcsNyBAQCB3ZWJraXQub3JnL2Iv
MjIwMDc3IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb3RvY29sL2Ny
eXB0by1zdWl0ZQogd2Via2l0Lm9yZy9iLzIyMDMzMiBbIEJpZ1N1cisgXSBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL21pbWVzbmlmZi9taW1lLXR5cGVzL2NoYXJzZXQtcGFyYW1ldGVy
LndpbmRvdy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIyMDU1MiBbIEJp
Z1N1cisgXSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXdlYm0taW5pdC1pbnNpZGUt
c2VnbWVudC5odG1sIFsgRmFpbHVyZSBdCisKKyMgV2ViWFIgdGVzdHMKK1sgQmlnU3VyKyBdIGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJTZXNzaW9uX2VuZC5odHRwcy5o
dG1sIFsgUGFzcyBdCitbIEJpZ1N1cisgXSBodHRwL3dwdC93ZWJ4ciBbIFBhc3MgXQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd3BlL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBlYTNmNTg3OTE3YWFjM2U2
OWFkZTQ4MTU3ZjU2ZjEyZDc1OGIzNDc4Li5mYWVhODM3Mjc3NmZlMDk5NzZiODE2YzA5YzFiODBi
OGUxMjQyZTBkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVj
dGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucwpA
QCAtNjQ0LDYgKzY0NCw5IEBAIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIv
eHJTZXNzaW9uX3ByZXZlbnRfbXVsdGlwbGVfZXhjbHVzaXZlLmh0dHBzCiBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3JlbmRlcl9zdGF0ZV92ZXJ0aWNhbF9mb3ZfaW1tZXJz
aXZlLmh0dHBzLmh0bWwgWyBQYXNzIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VieHIvcmVuZGVyX3N0YXRlX3VwZGF0ZS5odHRwcy5odG1sIFsgUGFzcyBdCiBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9lbmQuaHR0cHMuaHRtbCBbIFBh
c3MgXQoraHR0cC93cHQvd2VieHIveHJTZXNzaW9uX2VuZF9kZXZpY2VfcmVwb3J0c19zaHV0ZG93
bi5odHRwcy5odG1sIFsgUGFzcyBdCitodHRwL3dwdC93ZWJ4ci94clNlc3Npb25fZW5kZWRfYnlf
c3lzdGVtLmh0dHBzLmh0bWwgWyBQYXNzIF0KK2h0dHAvd3B0L3dlYnhyL3hyU2Vzc2lvbl9yZWpl
Y3RfbXVsdGlwbGVfZW5kLmh0dHBzLmh0bWwgWyBQYXNzIF0KIAogIyBXZWJYUjogU29tZXRpbWVz
IHRoZSB0ZXN0IHJlcG9ydHMgU3ludGF4IEVycm9yOiBDYW4ndCBjcmVhdGUgZHVwbGljYXRlIHZh
cmlhYmxlIGlzQ2hyb21pdW1CYXNlZC4KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VieHIvYXItbW9kdWxlL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZS1hci5odHRw
cy5odG1sIFsgRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIF0K
</data>

          </attachment>
      

    </bug>

</bugzilla>