<?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>144009</bug_id>
          
          <creation_ts>2015-04-21 14:05:00 -0700</creation_ts>
          <short_desc>[Mac] Use one playback target for all web processes</short_desc>
          <delta_ts>2015-05-04 11:12:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1087166</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-21 14:05:00 -0700</bug_when>
    <thetext>All web processes should share the same MediaPlaybackTarget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087250</commentid>
    <comment_count>1</comment_count>
      <attachid>251283</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-21 17:53:16 -0700</bug_when>
    <thetext>Created attachment 251283
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087254</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-21 17:56:21 -0700</bug_when>
    <thetext>Attachment 251283 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/MediaPlaybackTargetClient.h:26:  #ifndef header guard has wrong style, please use: MediaPlaybackTargetClient_h  [build/header_guard] [5]
Total errors found: 1 in 60 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087260</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-21 18:15:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/20644744&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087263</commentid>
    <comment_count>4</comment_count>
      <attachid>251283</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-21 18:20:05 -0700</bug_when>
    <thetext>Comment on attachment 251283
Proposed patch

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

&gt; Source/WebCore/ChangeLog:4
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=144009

Is there an associated radar?

&gt; Source/WebCore/ChangeLog:15
&gt; +        Instead of having each Page/Document pair manage access to the playback target for the videos
&gt; +        in a web process, put all of the logic into a new class - WebMediaSessionManager. A singleton
&gt; +        instance talks to the target picker and manages video element access for all web processes.
&gt; +        All playback target logic was removed from Document, Page, and MediaSessionManager.

What&apos;s the plan for testing this stuff?

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:44
&gt; +    uint64_t m_contextId { 0 };

Can we use a typedef rather than uint64_t?

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:49
&gt; +static bool flagsAreSet(unsigned&amp; value, unsigned flags)

Why is value a reference? Can value be a known type?

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:51
&gt; +    return !!(value &amp; flags);

C++ does the implicit bool conversion for you.

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:55
&gt; +    : m_taskTimer(RunLoop::current(), this, &amp;WebMediaSessionManager::taskTimerFired)

One per line please.

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:61
&gt; +    m_taskTimer.stop();

Timers stop themselves on destruction.

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:63
&gt; +    m_taskQueue.clear();
&gt; +    m_clientState.clear();

Not sure these are required either.

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:126
&gt; +    for (size_t i = 0; i &lt; m_clientState.size(); ++i)

Use a modern loop.

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:153
&gt; +        if (state-&gt;m_contextId == contextId &amp;&amp; state-&gt;m_client == &amp;client)

Give state have an operator ==?

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:181
&gt; +    for (size_t i = 0; i &lt; m_clientState.size(); ++i) {
&gt; +        auto&amp; state = m_clientState[i];

Modern loop.

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:246
&gt; +    for (size_t i = 0; i &lt; m_clientState.size(); ++i) {
&gt; +        if (m_clientState[i]-&gt;m_contextId == contextId &amp;&amp; m_clientState[i]-&gt;m_client == client)
&gt; +            return i;
&gt; +    }

Linear search :(. Is it worth hashing by context ID?

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.h:52
&gt; +    WEBCORE_EXPORT uint64_t addPlaybackTargetPickerClient(WebMediaSessionManagerClient&amp;, uint64_t);
&gt; +    WEBCORE_EXPORT void removePlaybackTargetPickerClient(WebMediaSessionManagerClient&amp;, uint64_t);
&gt; +    WEBCORE_EXPORT void removeAllPlaybackTargetPickerClients(WebMediaSessionManagerClient&amp;);
&gt; +    WEBCORE_EXPORT void showPlaybackTargetPicker(WebMediaSessionManagerClient&amp;, uint64_t, const IntRect&amp;, bool);
&gt; +    WEBCORE_EXPORT void clientStateDidChange(WebMediaSessionManagerClient&amp;, uint64_t, WebCore::MediaProducer::MediaStateFlags);

That uint64_t really needs a typedef.

&gt; Source/WebCore/dom/Document.cpp:6607
&gt; +    if (!m_idToClientMap.contains(clientId))
&gt; +        return;
&gt;  
&gt; -#endif
&gt; +    auto* client = m_idToClientMap.get(clientId);

That&apos;s two hash lookups. You could use find().

&gt; Source/WebCore/dom/Document.h:1693
&gt; +    HashMap&lt;uint64_t, WebCore::MediaPlaybackTargetClient*&gt; m_idToClientMap;
&gt; +    HashMap&lt;WebCore::MediaPlaybackTargetClient*, uint64_t&gt; m_clientToIDMap;

It&apos;s a bit odd that you need maps in both directions.

&gt; Source/WebCore/platform/audio/MediaSessionManager.h:44
&gt; +

No empty line.

&gt; Source/WebKit2/UIProcess/mac/WebMediaSessionManagerMac.h:35
&gt; +class WebMediaSessionManagerMac : public WebMediaSessionManager {

Odd that this class exists both in WebCore/platform/graphics/avfoundation and here?

&gt; Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:267
&gt; -        function();
&gt; +

What happened here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087266</commentid>
    <comment_count>5</comment_count>
      <attachid>251283</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-04-21 18:32:14 -0700</bug_when>
    <thetext>Comment on attachment 251283
Proposed patch

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

Please try to not break *all* the bots :D

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:25
&gt; +#include &quot;config.h&quot;

newline above here

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:36
&gt; +struct ClientState {

I think we use non-m_ prefixed member names for structs? Should this be a class, or should the member names change, or is that just a bad style in general? I don&apos;t know.

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:45
&gt; +    WebCore::MediaProducer::MediaStateFlags m_flags { WebCore::MediaProducer::IsNotPlaying};

space before the closing curly brace

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:77
&gt; +        TaskCallback callback = std::make_tuple(&amp;client, contextId, [this](ClientState&amp; state) {

Is it safe to capture &quot;this&quot; here? Is it safe because the callback is kept and called from this object as well?

&gt; Source/WebCore/html/HTMLMediaSession.cpp:391
&gt; +#if PLATFORM(IOS)
&gt; +#endif

What.

&gt; Source/WebCore/page/MediaProducer.h:38
&gt; +        RequirePlaybackTargetMonitoring = 1 &lt;&lt; 3,

I think the part-of-speech of this one is different than the others but I don&apos;t know how English works.

&gt; Source/WebCore/platform/graphics/avfoundation/WebMediaSessionManagerMac.cpp:25
&gt; +#include &quot;config.h&quot;

newline above

&gt; Source/WebKit2/UIProcess/PageClient.h:53
&gt; +class WebMediaSessionManager;

I think these are sorted including the type (so this should be up above Highlight).

&gt; Source/WebKit/mac/WebView/WebView.mm:296
&gt; +#import &lt;WebCore/WebMediaSessionManagerMac.h&gt;
&gt;  #import &quot;WebMediaPlaybackTargetPicker.h&quot;

swap the lines, I think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087274</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-21 19:01:07 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 251283 [details]
&gt; Proposed patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251283&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:44
&gt; &gt; +    uint64_t m_contextId { 0 };
&gt; 
&gt; Can we use a typedef rather than uint64_t?
&gt; 

I could, but frequently use uint64_t for context IDs, eg. page ID, frame ID, message ID, navigation ID, back/forward item ID, drag operation, touch tap ID, etc, etc. 

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:49
&gt; &gt; +static bool flagsAreSet(unsigned&amp; value, unsigned flags)
&gt; 
&gt; Why is value a reference? Can value be a known type?
&gt; 

Shouldn&apos;t be a reference, fixed.

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:51
&gt; &gt; +    return !!(value &amp; flags);
&gt; 
&gt; C++ does the implicit bool conversion for you.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:55
&gt; &gt; +    : m_taskTimer(RunLoop::current(), this, &amp;WebMediaSessionManager::taskTimerFired)
&gt; 
&gt; One per line please.
&gt; 

This is one line, the RunLoop::Timer constructor takes three arguments.

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:61
&gt; &gt; +    m_taskTimer.stop();
&gt; 
&gt; Timers stop themselves on destruction.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:63
&gt; &gt; +    m_taskQueue.clear();
&gt; &gt; +    m_clientState.clear();
&gt; 
&gt; Not sure these are required either.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:126
&gt; &gt; +    for (size_t i = 0; i &lt; m_clientState.size(); ++i)
&gt; 
&gt; Use a modern loop.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:153
&gt; &gt; +        if (state-&gt;m_contextId == contextId &amp;&amp; state-&gt;m_client == &amp;client)
&gt; 
&gt; Give state have an operator ==?
&gt; 

It isn&apos;t checking object equality, only that the client and context ID are the same.

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:181
&gt; &gt; +    for (size_t i = 0; i &lt; m_clientState.size(); ++i) {
&gt; &gt; +        auto&amp; state = m_clientState[i];
&gt; 
&gt; Modern loop.
&gt; 

This can&apos;t be a modern loop, we save off an index.

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:246
&gt; &gt; +    for (size_t i = 0; i &lt; m_clientState.size(); ++i) {
&gt; &gt; +        if (m_clientState[i]-&gt;m_contextId == contextId &amp;&amp; m_clientState[i]-&gt;m_client == client)
&gt; &gt; +            return i;
&gt; &gt; +    }
&gt; 
&gt; Linear search :(. Is it worth hashing by context ID?
&gt; 

Context ID is only unique per web process, so the lookup has to consider both context ID and client.

&gt; &gt; Source/WebCore/dom/Document.cpp:6607
&gt; &gt; +    if (!m_idToClientMap.contains(clientId))
&gt; &gt; +        return;
&gt; &gt;  
&gt; &gt; -#endif
&gt; &gt; +    auto* client = m_idToClientMap.get(clientId);
&gt; 
&gt; That&apos;s two hash lookups. You could use find().
&gt; 

Fixed.

&gt; &gt; Source/WebCore/dom/Document.h:1693
&gt; &gt; +    HashMap&lt;uint64_t, WebCore::MediaPlaybackTargetClient*&gt; m_idToClientMap;
&gt; &gt; +    HashMap&lt;WebCore::MediaPlaybackTargetClient*, uint64_t&gt; m_clientToIDMap;
&gt; 
&gt; It&apos;s a bit odd that you need maps in both directions.
&gt; 

We have to map from client interface to and from context ID.

&gt; &gt; Source/WebCore/platform/audio/MediaSessionManager.h:44
&gt; &gt; +
&gt; 
&gt; No empty line.
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/mac/WebMediaSessionManagerMac.h:35
&gt; &gt; +class WebMediaSessionManagerMac : public WebMediaSessionManager {
&gt; 
&gt; Odd that this class exists both in WebCore/platform/graphics/avfoundation
&gt; and here?
&gt; 

I moved it to WebCore so it can be used by WK1 and forgot to delete this one. Fixed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:267
&gt; &gt; -        function();
&gt; &gt; +
&gt; 
&gt; What happened here?

Badness, fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087284</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-21 19:35:51 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 251283 [details]
&gt; Proposed patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251283&amp;action=review
&gt; 
&gt; Please try to not break *all* the bots :D
&gt; 

Oh, you are no fun at all!

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:25
&gt; &gt; +#include &quot;config.h&quot;
&gt; 
&gt; newline above here
&gt; 

Fixed.

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:36
&gt; &gt; +struct ClientState {
&gt; 
&gt; I think we use non-m_ prefixed member names for structs? Should this be a
&gt; class, or should the member names change, or is that just a bad style in
&gt; general? I don&apos;t know.
&gt; 

We do seem to mostly not use m_, fixed.

&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:45
&gt; &gt; +    WebCore::MediaProducer::MediaStateFlags m_flags { WebCore::MediaProducer::IsNotPlaying};
&gt; 
&gt; space before the closing curly brace
&gt; 
&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:77
&gt; &gt; +        TaskCallback callback = std::make_tuple(&amp;client, contextId, [this](ClientState&amp; state) {
&gt; 
&gt; Is it safe to capture &quot;this&quot; here? Is it safe because the callback is kept
&gt; and called from this object as well?
&gt; 

That and WebMediaSessionManager is a NeverDestroyed singleton.

&gt; &gt; Source/WebCore/html/HTMLMediaSession.cpp:391
&gt; &gt; +#if PLATFORM(IOS)
&gt; &gt; +#endif
&gt; 
&gt; What.
&gt; 

What indeed. Fixed.

&gt; &gt; Source/WebCore/page/MediaProducer.h:38
&gt; &gt; +        RequirePlaybackTargetMonitoring = 1 &lt;&lt; 3,
&gt; 
&gt; I think the part-of-speech of this one is different than the others but I
&gt; don&apos;t know how English works.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/WebMediaSessionManagerMac.cpp:25
&gt; &gt; +#include &quot;config.h&quot;
&gt; 
&gt; newline above
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/PageClient.h:53
&gt; &gt; +class WebMediaSessionManager;
&gt; 
&gt; I think these are sorted including the type (so this should be up above
&gt; Highlight).
&gt; 

Fixed.

&gt; &gt; Source/WebKit/mac/WebView/WebView.mm:296
&gt; &gt; +#import &lt;WebCore/WebMediaSessionManagerMac.h&gt;
&gt; &gt;  #import &quot;WebMediaPlaybackTargetPicker.h&quot;
&gt; 
&gt; swap the lines, I think?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087294</commentid>
    <comment_count>8</comment_count>
      <attachid>251297</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-21 19:51:40 -0700</bug_when>
    <thetext>Created attachment 251297
Patch for the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087295</commentid>
    <comment_count>9</comment_count>
      <attachid>251298</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-21 19:58:24 -0700</bug_when>
    <thetext>Created attachment 251298
Patch for the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087312</commentid>
    <comment_count>10</comment_count>
      <attachid>251298</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-21 21:08:06 -0700</bug_when>
    <thetext>Comment on attachment 251298
Patch for the bots.

Clearing flags on attachment: 251298

Committed r183096: &lt;http://trac.webkit.org/changeset/183096&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251283</attachid>
            <date>2015-04-21 17:53:16 -0700</date>
            <delta_ts>2015-05-04 11:09:53 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>ui_process_manager_patch_15.txt</filename>
            <type>text/plain</type>
            <size>162734</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzA3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NyBAQAorMjAxNS0wNC0yMSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBVc2Ugb25l
IHBsYXliYWNrIHRhcmdldCBmb3IgYWxsIHdlYiBwcm9jZXNzZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDAwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL21l
ZGlhQ29udHJvbHNBcHBsZS5qczoKKyAgICAgICAgKENvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0
ZVdpcmVsZXNzUGxheWJhY2tTdGF0dXMpOiBEcml2ZS1ieSBmaXggdG8gc2hvdyBjb250cm9scyB3
aGVuCisgICAgICAgICAgICB3ZSBzaG93IHRoZSBwbGFjZWhvbGRlciBpbWFnZS4KKworICAgICAg
ICBJbnN0ZWFkIG9mIGhhdmluZyBlYWNoIFBhZ2UvRG9jdW1lbnQgcGFpciBtYW5hZ2UgYWNjZXNz
IHRvIHRoZSBwbGF5YmFjayB0YXJnZXQgZm9yIHRoZSB2aWRlb3MKKyAgICAgICAgaW4gYSB3ZWIg
cHJvY2VzcywgcHV0IGFsbCBvZiB0aGUgbG9naWMgaW50byBhIG5ldyBjbGFzcyAtIFdlYk1lZGlh
U2Vzc2lvbk1hbmFnZXIuIEEgc2luZ2xldG9uCisgICAgICAgIGluc3RhbmNlIHRhbGtzIHRvIHRo
ZSB0YXJnZXQgcGlja2VyIGFuZCBtYW5hZ2VzIHZpZGVvIGVsZW1lbnQgYWNjZXNzIGZvciBhbGwg
d2ViIHByb2Nlc3Nlcy4KKyAgICAgICAgQWxsIHBsYXliYWNrIHRhcmdldCBsb2dpYyB3YXMgcmVt
b3ZlZCBmcm9tIERvY3VtZW50LCBQYWdlLCBhbmQgTWVkaWFTZXNzaW9uTWFuYWdlci4KKworICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzZXNzaW9uOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDbGllbnRTdGF0ZTo6Q2xpZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Zmxh
Z3NBcmVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6V2Vi
TWVkaWFTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25N
YW5hZ2VyOjp+V2ViTWVkaWFTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyOjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpyZW1vdmVQbGF5YmFja1Rhcmdl
dFBpY2tlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
OjpyZW1vdmVBbGxQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OmNsaWVudFN0YXRlRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNldFBsYXli
YWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OmV4
dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjp0YXNrVGltZXJG
aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpmaW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OmZvckVhY2hDbGllbnQp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIu
aDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9u
TWFuYWdlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lv
bk1hbmFnZXJDbGllbnQ6On5XZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0NvbnRleHQ6Om1lZGlhU3RhdGUpOiBSZXBsYWNlcyBpc1BsYXlpbmdBdWRpby4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aXNQbGF5aW5nQXVkaW8pOiBEZWxldGVkLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBuZXcgZmlsZXMuCisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkQXVkaW9Qcm9kdWNlcik6IFRha2UgYSBN
ZWRpYVByb2R1Y2VyIGluc3RlYWQgb2YgYW4gQXVkaW9Qcm9kdWNlci4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZW1vdmVBdWRpb1Byb2R1Y2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp1cGRhdGVJc1BsYXlpbmdNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0UGxh
eWJhY2tUYXJnZXRDbGllbnRDb250ZXh0SWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpyZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0UGxheWJhY2tUYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpjb25maWd1cmVQbGF5YmFja1RhcmdldE1v
bml0b3JpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlcXVpcmVz
UGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjptZWRpYVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojppc1BsYXlpbmdBdWRpbyk6IERlbGV0ZWQu
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aERvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldE11dGVkKTogCisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFF
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnJlZ2lzdGVyV2l0aERvY3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnNldEhhc1BsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YVNlc3Npb246OnNldFBsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YVNlc3Npb246OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFy
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246Om1lZGlhU3RhdGVEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6ZGlkQ2hvb3NlUGxh
eWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lv
bjo6cmVxdWlyZXNQbGF5YmFja1RhcmdldFJvdXRlTW9uaXRvcmluZyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnN0b3BQ
bGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9IVE1MTWVk
aWFTZXNzaW9uLmg6CisgICAgICAgICogcGFnZS9BdWRpb1Byb2R1Y2VyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL01lZGlhUHJvZHVj
ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9BdWRpb1Byb2R1Y2VyLmguCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjp+TWVkaWFQcm9kdWNlcik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb1Byb2R1Y2VyOjp+QXVkaW9Qcm9kdWNlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZTo6dXBkYXRlSXNQbGF5aW5nTWVkaWEpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6YWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0UGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZTo6cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6cGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZTo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6Y29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6Om1lZGlhU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aXNQbGF5aW5nQXVkaW8pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNlc3Npb246OmlzUGxheWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb246OnJlcXVpcmVzUGxheWJhY2tUYXJnZXRS
b3V0ZU1vbml0b3JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ2xpZW50Ojpz
ZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNl
c3Npb246OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTZXNzaW9uOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ2xpZW50OjpzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lv
bkNsaWVudDo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Npb25XaWxsQmVnaW5QbGF5YmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25NYW5hZ2VyOjpzZXNzaW9uQ2FuTG9hZE1lZGlhKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Npb25TaG91bGRCZWdp
blBsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQu
aC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQ6On5NZWRpYVBs
YXliYWNrVGFyZ2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJDbGllbnQ6On5NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnNob3dQ
bGF5YmFja1RhcmdldFBpY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyOjpzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c3RvcE1vbml0b3JpbmdQbGF5YmFj
a1RhcmdldHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyQ2xpZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNldFNob3Vs
ZFBsYXlUb1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpz
dGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6c3RhcnRQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2U6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL1dlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWM6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNZWRpYVNl
c3Npb25NYW5hZ2VyTWFjOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6On5XZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
TWFjKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OnRhcmdl
dFBpY2tlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL1dlYk1l
ZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyTWFjOjpjdXJyZW50RGV2aWNlRGlkQ2hhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVs
ZXNzUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c3RhcnRQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp0b2dnbGVQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJn
ZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5t
bToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRTaG91bGRQ
bGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6dG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnN0YXJ0UGxheWluZ1RvUGxheWJh
Y2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjppc1Bh
Z2VQbGF5aW5nQXVkaW8pOgorCiAyMDE1LTA0LTIxICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIENvbnRleHQgbWVudSBkb2Vzbid0IGFjY291bnQgZm9yIHNl
bGVjdGlvbiBzZW1hbnRpY3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250
cm9scy9tZWRpYUNvbnRyb2xzQXBwbGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL21lZGlhQ29udHJvbHNBcHBsZS5qcwkocmV2aXNpb24gMTgz
MDY4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL21lZGlhQ29udHJv
bHNBcHBsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTc4Nyw2ICsxNzg3LDcgQEAgQ29udHJvbGxl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9scy52b2x1bWVCb3gu
c3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICB0aGlzLmNvbnRyb2xzLm11dGVCb3guc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgICAg
ICAgIHRoaXMuc2hvd0NvbnRyb2xzKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0
aGlzLmNvbnRyb2xzLmlubGluZVBsYXliYWNrUGxhY2Vob2xkZXIuY2xhc3NMaXN0LmFkZCh0aGlz
LkNsYXNzTmFtZXMuaGlkZGVuKTsKICAgICAgICAgICAgIHRoaXMuY29udHJvbHMud2lyZWxlc3NU
YXJnZXRQaWNrZXIuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLkNsYXNzTmFtZXMucGxheWluZyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25N
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vz
c2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmgiCisKKyNpZiBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5oIgor
I2luY2x1ZGUgIldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdHJ1Y3QgQ2xpZW50U3RhdGUgeworICAgIGV4cGxpY2l0IENsaWVudFN0YXRl
KFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwgdWludDY0X3QgY29udGV4dElk
KQorICAgICAgICA6IG1fY2xpZW50KCZjbGllbnQpCisgICAgICAgICwgbV9jb250ZXh0SWQoY29u
dGV4dElkKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50
KiBtX2NsaWVudCB7IG51bGxwdHIgfTsKKyAgICB1aW50NjRfdCBtX2NvbnRleHRJZCB7IDAgfTsK
KyAgICBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbV9mbGFncyB7IFdl
YkNvcmU6Ok1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZ307CisgICAgYm9vbCBtX3JlcXVlc3Rl
ZFBpY2tlciB7IGZhbHNlIH07Cit9OworCitzdGF0aWMgYm9vbCBmbGFnc0FyZVNldCh1bnNpZ25l
ZCYgdmFsdWUsIHVuc2lnbmVkIGZsYWdzKQoreworICAgIHJldHVybiAhISh2YWx1ZSAmIGZsYWdz
KTsKK30KKworV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcigp
CisgICAgOiBtX3Rhc2tUaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZXZWJNZWRpYVNl
c3Npb25NYW5hZ2VyOjp0YXNrVGltZXJGaXJlZCkKK3sKK30KKworV2ViTWVkaWFTZXNzaW9uTWFu
YWdlcjo6fldlYk1lZGlhU2Vzc2lvbk1hbmFnZXIoKQoreworICAgIG1fdGFza1RpbWVyLnN0b3Ao
KTsKKyAgICBtX3Rhc2tRdWV1ZS5jbGVhcigpOworICAgIG1fY2xpZW50U3RhdGUuY2xlYXIoKTsK
K30KKwordWludDY0X3QgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6YWRkUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCYgY2xpZW50LCB1aW50NjRf
dCBjb250ZXh0SWQpCit7CisgICAgc2l6ZV90IGluZGV4ID0gZmluZCgmY2xpZW50LCBjb250ZXh0
SWQpOworICAgIEFTU0VSVChpbmRleCA9PSBub3RGb3VuZCk7CisgICAgaWYgKGluZGV4ICE9IG5v
dEZvdW5kKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fY2xpZW50U3RhdGUuYXBwZW5kKHN0
ZDo6bWFrZV91bmlxdWU8Q2xpZW50U3RhdGU+KGNsaWVudCwgY29udGV4dElkKSk7CisKKyAgICBp
ZiAobV9leHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZSB8fCBtX3BsYXliYWNrVGFyZ2V0KSB7
CisKKyAgICAgICAgVGFza0NhbGxiYWNrIGNhbGxiYWNrID0gc3RkOjptYWtlX3R1cGxlKCZjbGll
bnQsIGNvbnRleHRJZCwgW3RoaXNdKENsaWVudFN0YXRlJiBzdGF0ZSkgeworCisgICAgICAgICAg
ICBpZiAobV9leHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICBz
dGF0ZS5tX2NsaWVudC0+ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2Uoc3Rh
dGUubV9jb250ZXh0SWQsIHRydWUpOworCisgICAgICAgICAgICBpZiAobV9wbGF5YmFja1Rhcmdl
dCkgeworICAgICAgICAgICAgICAgIHN0YXRlLm1fY2xpZW50LT5zZXRQbGF5YmFja1RhcmdldChz
dGF0ZS5tX2NvbnRleHRJZCwgKm1fcGxheWJhY2tUYXJnZXQuY29weVJlZigpKTsKKworICAgICAg
ICAgICAgICAgIGlmIChtX2NsaWVudFN0YXRlLnNpemUoKSA9PSAxICYmIG1fcGxheWJhY2tUYXJn
ZXQtPmhhc0FjdGl2ZVJvdXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fY2xpZW50
LT5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChzdGF0ZS5tX2NvbnRleHRJZCwgdHJ1ZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVu
ZChjYWxsYmFjayk7CisgICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICB9
CisKKyAgICByZXR1cm4gY29udGV4dElkOworfQorCit2b2lkIFdlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXI6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KFdlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXJDbGllbnQmIGNsaWVudCwgdWludDY0X3QgY29udGV4dElkKQoreworICAgIHNpemVfdCBpbmRl
eCA9IGZpbmQoJmNsaWVudCwgY29udGV4dElkKTsKKyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91
bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jbGllbnRTdGF0ZS5yZW1vdmUoaW5kZXgpOworICAgIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0
TW9uaXRvcmluZygpOworCisgICAgaWYgKG1fcGxheWJhY2tUYXJnZXQgJiYgbV9jbGllbnRTdGF0
ZS5zaXplKCkgPT0gMSAmJiBtX3BsYXliYWNrVGFyZ2V0LT5oYXNBY3RpdmVSb3V0ZSgpKQorICAg
ICAgICBtX2NsaWVudFN0YXRlWzBdLT5tX2NsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tU
YXJnZXQobV9jbGllbnRTdGF0ZVswXS0+bV9jb250ZXh0SWQsIHRydWUpOworfQorCit2b2lkIFdl
Yk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
cyhXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50JiBjbGllbnQpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IG1fY2xpZW50U3RhdGUuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgIGlmICht
X2NsaWVudFN0YXRlW2kgLSAxXS0+bV9jbGllbnQgPT0gJmNsaWVudCkKKyAgICAgICAgICAgIG1f
Y2xpZW50U3RhdGUucmVtb3ZlKGkgLSAxKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViTWVkaWFTZXNz
aW9uTWFuYWdlcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKFdlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXJDbGllbnQmIGNsaWVudCwgdWludDY0X3QgY29udGV4dElkLCBjb25zdCBJbnRSZWN0JiByZWN0
LCBib29sIGlzVmlkZW8pCit7CisgICAgc2l6ZV90IGluZGV4ID0gZmluZCgmY2xpZW50LCBjb250
ZXh0SWQpOworICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CisgICAgaWYgKGluZGV4ID09
IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fY2xpZW50U3RhdGUuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2xpZW50U3RhdGVbaV0tPm1f
cmVxdWVzdGVkUGlja2VyID0gKG1fY2xpZW50U3RhdGVbaV0tPm1fY29udGV4dElkID09IGNvbnRl
eHRJZCAmJiBtX2NsaWVudFN0YXRlW2ldLT5tX2NsaWVudCA9PSAmY2xpZW50KTsKKworICAgIHRh
cmdldFBpY2tlcigpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihGbG9hdFJlY3QocmVjdCksIGlz
VmlkZW8pOworfQorCit2b2lkIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OmNsaWVudFN0YXRlRGlk
Q2hhbmdlKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwgdWludDY0X3QgY29u
dGV4dElkLCBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbmV3RmxhZ3MpCit7CisgICAg
c2l6ZV90IGluZGV4ID0gZmluZCgmY2xpZW50LCBjb250ZXh0SWQpOworICAgIEFTU0VSVChpbmRl
eCAhPSBub3RGb3VuZCk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvJiBjaGFuZ2VkQ2xpZW50U3RhdGUgPSBtX2NsaWVudFN0YXRlW2luZGV4
XTsKKyAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgb2xkRmxhZ3MgPSBjaGFuZ2Vk
Q2xpZW50U3RhdGUtPm1fZmxhZ3M7CisgICAgaWYgKG5ld0ZsYWdzID09IG9sZEZsYWdzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjaGFuZ2VkQ2xpZW50U3RhdGUtPm1fZmxhZ3MgPSBuZXdGbGFn
czsKKyAgICBpZiAoIWZsYWdzQXJlU2V0KG9sZEZsYWdzLCBNZWRpYVByb2R1Y2VyOjpSZXF1aXJl
UGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKSAmJiBmbGFnc0FyZVNldChuZXdGbGFncywgTWVkaWFQ
cm9kdWNlcjo6UmVxdWlyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZykpCisgICAgICAgIGNvbmZp
Z3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOworCisgICAgaWYgKCFmbGFnc0FyZVNldChu
ZXdGbGFncywgTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nVmlkZW8pKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBEbyBub3QgaW50ZXJydXB0IGFub3RoZXIgZWxlbWVudCBhbHJlYWR5IHBsYXlp
bmcgdG8gYSBkZXZpY2UuCisgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fY2xpZW50U3RhdGUpIHsK
KyAgICAgICAgaWYgKHN0YXRlLT5tX2NvbnRleHRJZCA9PSBjb250ZXh0SWQgJiYgc3RhdGUtPm1f
Y2xpZW50ID09ICZjbGllbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAo
ZmxhZ3NBcmVTZXQoc3RhdGUtPm1fZmxhZ3MsIE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ1ZpZGVv
KSAmJiBmbGFnc0FyZVNldChzdGF0ZS0+bV9mbGFncywgTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5n
VG9FeHRlcm5hbERldmljZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fcGxheWJhY2tUYXJnZXQgJiYgbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKSkg
eworCisgICAgICAgIGZvciAoYXV0byYgc3RhdGUgOiBtX2NsaWVudFN0YXRlKSB7CisgICAgICAg
ICAgICBpZiAoc3RhdGUtPm1fY29udGV4dElkID09IGNvbnRleHRJZCAmJiBzdGF0ZS0+bV9jbGll
bnQgPT0gJmNsaWVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHN0
YXRlLT5tX2NsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoc3RhdGUtPm1fY29u
dGV4dElkLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBjaGFuZ2VkQ2xpZW50U3RhdGUt
Pm1fY2xpZW50LT5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChjaGFuZ2VkQ2xpZW50U3Rh
dGUtPm1fY29udGV4dElkLCB0cnVlKTsKKyAgICB9CisKKyAgICBpZiAoaW5kZXggJiYgbV9jbGll
bnRTdGF0ZS5zaXplKCkgPiAxKQorICAgICAgICBzdGQ6OnN3YXAobV9jbGllbnRTdGF0ZS5hdChp
bmRleCksIG1fY2xpZW50U3RhdGUuYXQoMCkpOworfQorCit2b2lkIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXI6OnNldFBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmIHRhcmdl
dCkKK3sKKyAgICBtX3BsYXliYWNrVGFyZ2V0ID0gV1RGOjptb3ZlKHRhcmdldCk7CisKKyAgICBz
aXplX3QgaW5kZXhUaGF0UmVxdWVzdGVkUGlja2VyID0gbm90Rm91bmQ7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NsaWVudFN0YXRlLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8m
IHN0YXRlID0gbV9jbGllbnRTdGF0ZVtpXTsKKyAgICAgICAgc3RhdGUtPm1fY2xpZW50LT5zZXRQ
bGF5YmFja1RhcmdldChzdGF0ZS0+bV9jb250ZXh0SWQsICptX3BsYXliYWNrVGFyZ2V0LmNvcHlS
ZWYoKSk7CisgICAgICAgIGlmIChzdGF0ZS0+bV9yZXF1ZXN0ZWRQaWNrZXIpIHsKKyAgICAgICAg
ICAgIGluZGV4VGhhdFJlcXVlc3RlZFBpY2tlciA9IGk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+bV9jbGllbnQtPnNldFNob3VsZFBsYXlUb1BsYXli
YWNrVGFyZ2V0KHN0YXRlLT5tX2NvbnRleHRJZCwgZmFsc2UpOworICAgICAgICBzdGF0ZS0+bV9y
ZXF1ZXN0ZWRQaWNrZXIgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoaW5kZXhUaGF0UmVxdWVz
dGVkUGlja2VyID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdGF0
ZSA9IG1fY2xpZW50U3RhdGVbaW5kZXhUaGF0UmVxdWVzdGVkUGlja2VyXTsKKyAgICBzdGF0ZS0+
bV9jbGllbnQtPnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHN0YXRlLT5tX2NvbnRleHRJ
ZCwgdHJ1ZSk7CisgICAgc3RhdGUtPm1fcmVxdWVzdGVkUGlja2VyID0gZmFsc2U7Cit9CisKK3Zv
aWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVE
aWRDaGFuZ2UoYm9vbCBhdmFpbGFibGUpCit7CisgICAgaWYgKG1fZXh0ZXJuYWxPdXRwdXREZXZp
Y2VBdmFpbGFibGUgPT0gYXZhaWxhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2V4dGVy
bmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlID0gYXZhaWxhYmxlOworICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBtX2NsaWVudFN0YXRlKQorICAgICAgICBzdGF0ZS0+bV9jbGllbnQtPmV4dGVybmFsT3V0
cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKHN0YXRlLT5tX2NvbnRleHRJZCwgYXZhaWxhYmxl
KTsKK30KKwordm9pZCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpjb25maWd1cmVQbGF5YmFja1Rh
cmdldE1vbml0b3JpbmcoKQoreworICAgIGJvb2wgbW9uaXRvcmluZ1JlcXVpcmVkID0gZmFsc2U7
CisgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fY2xpZW50U3RhdGUpIHsKKyAgICAgICAgaWYgKHN0
YXRlLT5tX2ZsYWdzICYgTWVkaWFQcm9kdWNlcjo6UmVxdWlyZVBsYXliYWNrVGFyZ2V0TW9uaXRv
cmluZykgeworICAgICAgICAgICAgbW9uaXRvcmluZ1JlcXVpcmVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1vbml0b3JpbmdSZXF1aXJl
ZCkKKyAgICAgICAgdGFyZ2V0UGlja2VyKCkuc3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJn
ZXRzKCk7CisgICAgZWxzZQorICAgICAgICB0YXJnZXRQaWNrZXIoKS5zdG9wTW9uaXRvcmluZ1Bs
YXliYWNrVGFyZ2V0cygpOworfQorCit2b2lkIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnRhc2tU
aW1lckZpcmVkKCkKK3sKKyAgICBhdXRvIHRhc2tRdWV1ZSA9IFdURjo6bW92ZShtX3Rhc2tRdWV1
ZSk7CisgICAgaWYgKHRhc2tRdWV1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGZvciAoYXV0byYgdGFzayA6IHRhc2tRdWV1ZSkgeworICAgICAgICBzaXplX3QgaW5kZXggPSBm
aW5kKHN0ZDo6Z2V0PDA+KHRhc2spLCBzdGQ6OmdldDwxPih0YXNrKSk7CisKKyAgICAgICAgaWYg
KGluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3Rk
OjpnZXQ8Mj4odGFzaykoKm1fY2xpZW50U3RhdGVbaW5kZXhdKTsKKyAgICB9Cit9CisKK3NpemVf
dCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpmaW5kKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGll
bnQqIGNsaWVudCwgdWludDY0X3QgY29udGV4dElkKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jbGllbnRTdGF0ZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9jbGllbnRT
dGF0ZVtpXS0+bV9jb250ZXh0SWQgPT0gY29udGV4dElkICYmIG1fY2xpZW50U3RhdGVbaV0tPm1f
Y2xpZW50ID09IGNsaWVudCkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIHJl
dHVybiBub3RGb3VuZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lvbi9X
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTWVkaWFTZXNzaW9u
TWFuYWdlcl9oCisjZGVmaW5lIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJfaAorCisjaWYgRU5BQkxF
KFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKKworI2luY2x1ZGUg
Ik1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaCIKKyNpbmNsdWRlICJNZWRpYVByb2R1Y2VyLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RydWN0IENsaWVudFN0YXRlOworY2xhc3MgSW50UmVjdDsKK2NsYXNzIFdlYk1lZGlh
U2Vzc2lvbk1hbmFnZXJDbGllbnQ7CisKK2NsYXNzIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIgOiBw
dWJsaWMgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShXZWJNZWRpYVNlc3Npb25NYW5hZ2VyKTsKK3B1YmxpYzoKKworICAgIFdFQkNP
UkVfRVhQT1JUIHVpbnQ2NF90IGFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KFdlYk1lZGlh
U2Vzc2lvbk1hbmFnZXJDbGllbnQmLCB1aW50NjRfdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChXZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
Q2xpZW50JiwgdWludDY0X3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQWxsUGxh
eWJhY2tUYXJnZXRQaWNrZXJDbGllbnRzKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihXZWJNZWRp
YVNlc3Npb25NYW5hZ2VyQ2xpZW50JiwgdWludDY0X3QsIGNvbnN0IEludFJlY3QmLCBib29sKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaWVudFN0YXRlRGlkQ2hhbmdlKFdlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJDbGllbnQmLCB1aW50NjRfdCwgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVk
aWFTdGF0ZUZsYWdzKTsKKworcHJvdGVjdGVkOgorICAgIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIo
KTsKKyAgICB2aXJ0dWFsIH5XZWJNZWRpYVNlc3Npb25NYW5hZ2VyKCk7CisKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXImIHRhcmdldFBpY2tlcigpID0gMDsK
KworcHJpdmF0ZToKKworICAgIC8vIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OkNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF5YmFja1RhcmdldChSZWY8V2ViQ29yZTo6TWVkaWFQbGF5
YmFja1RhcmdldD4mJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4dGVybmFsT3V0cHV0
RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IGZp
bmQoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCosIHVpbnQ2NF90KTsKKyAgICB2b2lkIGNv
bmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOworICAgIHZvaWQgdGFza1RpbWVyRmly
ZWQoKTsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xp
ZW50KiwgdWludDY0X3QsIHN0ZDo6ZnVuY3Rpb248dm9pZChDbGllbnRTdGF0ZSYpPj4gVGFza0Nh
bGxiYWNrOworICAgIFZlY3RvcjxUYXNrQ2FsbGJhY2s+IG1fdGFza1F1ZXVlOworICAgIFJ1bkxv
b3A6OlRpbWVyPFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI+IG1fdGFza1RpbWVyOworCisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxDbGllbnRTdGF0ZT4+IG1fY2xpZW50U3RhdGU7CisgICAgUmVm
UHRyPE1lZGlhUGxheWJhY2tUYXJnZXQ+IG1fcGxheWJhY2tUYXJnZXQ7CisgICAgYm9vbCBtX2V4
dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
CisKKyNlbmRpZiAvLyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lvbi9XZWJNZWRp
YVNlc3Npb25NYW5hZ2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlckNsaWVudF9oCisjZGVmaW5lIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGll
bnRfaAorCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKworI2luY2x1ZGUg
Ik1lZGlhUGxheWJhY2tUYXJnZXQuaCIKKyNpbmNsdWRlICJNZWRpYVByb2R1Y2VyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsKKworY2xhc3Mg
V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2Vi
TWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFBs
YXliYWNrVGFyZ2V0KHVpbnQ2NF90LCBSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSh1
aW50NjRfdCwgYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5
YmFja1RhcmdldCh1aW50NjRfdCwgYm9vbCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKworI2Vu
ZGlmIC8vIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnRfaApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAkocmV2aXNpb24gMTgz
MDY4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkgKzEwMDYsMTIgQEAgdm9pZCBBdWRpb0NvbnRleHQ6
Om1lZGlhQ2FuU3RhcnQoKQogICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVkaW9Db250
ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwogfQogCi1i
b29sIEF1ZGlvQ29udGV4dDo6aXNQbGF5aW5nQXVkaW8oKQorTWVkaWFQcm9kdWNlcjo6TWVkaWFT
dGF0ZUZsYWdzIEF1ZGlvQ29udGV4dDo6bWVkaWFTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
ICFtX2lzU3RvcFNjaGVkdWxlZCAmJiBtX2Rlc3RpbmF0aW9uTm9kZSAmJiBtX2Rlc3RpbmF0aW9u
Tm9kZS0+aXNQbGF5aW5nQXVkaW8oKTsKKyAgICBpZiAoIW1faXNTdG9wU2NoZWR1bGVkICYmIG1f
ZGVzdGluYXRpb25Ob2RlICYmIG1fZGVzdGluYXRpb25Ob2RlLT5pc1BsYXlpbmdBdWRpbygpKQor
ICAgICAgICByZXR1cm4gTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nQXVkaW87CisKKyAgICByZXR1
cm4gTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5nOwogfQogCiB2b2lkIEF1ZGlvQ29udGV4dDo6
cGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMCArMjksMTAgQEAKICNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5oIgogI2luY2x1
ZGUgIkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKLSNpbmNs
dWRlICJBdWRpb1Byb2R1Y2VyLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCisj
aW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgogI2luY2x1ZGUgIk1lZGlhU2Vzc2lvbi5oIgogI2lu
Y2x1ZGUgPGF0b21pYz4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNzYsNyArNzYsNyBA
QCBjbGFzcyBQZXJpb2RpY1dhdmU7CiAvLyBBdWRpb0NvbnRleHQgaXMgdGhlIGNvcm5lcnN0b25l
IG9mIHRoZSB3ZWIgYXVkaW8gQVBJIGFuZCBhbGwgQXVkaW9Ob2RlcyBhcmUgY3JlYXRlZCBmcm9t
IGl0LgogLy8gRm9yIHRocmVhZCBzYWZldHkgYmV0d2VlbiB0aGUgYXVkaW8gdGhyZWFkIGFuZCB0
aGUgbWFpbiB0aHJlYWQsIGl0IGhhcyBhIHJlbmRlcmluZyBncmFwaCBsb2NraW5nIG1lY2hhbmlz
bS4gCiAKLWNsYXNzIEF1ZGlvQ29udGV4dCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBdWRpb0NvbnRleHQ+LCBwdWJsaWMgRXZlbnRUYXJnZXRX
aXRoSW5saW5lRGF0YSwgcHVibGljIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciwgcHVibGljIEF1ZGlv
UHJvZHVjZXIsIHByaXZhdGUgTWVkaWFTZXNzaW9uQ2xpZW50IHsKK2NsYXNzIEF1ZGlvQ29udGV4
dCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxB
dWRpb0NvbnRleHQ+LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lciwgcHVibGljIE1lZGlhUHJvZHVjZXIsIHByaXZhdGUgTWVkaWFT
ZXNzaW9uQ2xpZW50IHsKIHB1YmxpYzoKICAgICAvLyBDcmVhdGUgYW4gQXVkaW9Db250ZXh0IGZv
ciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgogICAgIHN0YXRpYyBSZWZQdHI8QXVk
aW9Db250ZXh0PiBjcmVhdGUoRG9jdW1lbnQmLCBFeGNlcHRpb25Db2RlJik7CkBAIC0yODAsOCAr
MjgwLDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBtZWRpYUNhblN0YXJ0KCkgb3Zl
cnJpZGU7CiAKLSAgICAvLyBBdWRpb1Byb2R1Y2VyCi0gICAgdmlydHVhbCBib29sIGlzUGxheWlu
Z0F1ZGlvKCkgb3ZlcnJpZGU7CisgICAgLy8gTWVkaWFQcm9kdWNlcgorICAgIHZpcnR1YWwgTWVk
aWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKIAog
ICAgIC8vIFRoZSBjb250ZXh0IGl0c2VsZiBrZWVwcyBhIHJlZmVyZW5jZSB0byBhbGwgc291cmNl
IG5vZGVzLiAgVGhlIHNvdXJjZSBub2RlcywgdGhlbiByZWZlcmVuY2UgYWxsIG5vZGVzIHRoZXkn
cmUgY29ubmVjdGVkIHRvLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTMsNiArMTEzLDExIEBACiAJCTA3MDc1NkRFMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFj
a0N1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcw
NzU2RDgxNDIzOUI0QjAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlLmggKi87IH07CiAJCTA3MDc1
NkRGMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwNzU2RDkxNDIzOUI0QzAwNDE0
MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgKi87IH07CiAJCTA3MDc1NkUwMTQyMzlCNEUw
MDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDc1NkRBMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRU
cmFja0N1ZUxpc3QuaCAqLzsgfTsKKwkJMDcwOUQ3OEUxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1l
ZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDcwOUQ3OEMxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuY3BwICovOyB9OworCQkwNzA5RDc4RjFBRTU1NTU0MDA0RTQyRjggLyogV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDcwOUQ3OEQxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwNzA5
RDc5MjFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzA5RDc5MDFBRTU1
NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgKi87IH07CisJCTA3
MDlENzkzMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzA5RDc5MTFBRTU1
NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTA3MDlENzk1MUFFNTVBMjkwMDRF
NDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzA5RDc5NDFBRTU1QTI5MDA0RTQyRjggLyog
V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3MDlGQzRFMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nl
c3NpYmlsaXR5U2xpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzA5RkM0RDEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNsaWRlci5o
ICovOyB9OwogCQkwNzBFMDkxOTE4NzVFRUZDMDAzQTFEM0MgLyogTWVkaWFTZXNzaW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzBFMDkxODE4NzVF
RDkzMDAzQTFEM0MgLyogTWVkaWFTZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDcwRTA5MUIxODc1RUY3MTAwM0ExRDNDIC8qIE1lZGlh
U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwNzBFMDkxQTE4NzVFRjcxMDAzQTFEM0MgLyogTWVkaWFTZXNzaW9uLmNwcCAqLzsgfTsKQEAg
LTI3NSw3ICsyODAsNyBAQAogCQkwNzhFNDNEQTFBQkI2QzdFMDAxQzJGQTYgLyogTWVkaWFQbGF5
YmFja1RhcmdldFBpY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDc4RTQzRDgxQUJCNkM3RTAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwNzhFNDNERDFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1h
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc4RTQz
REIxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzhFNDNERTFB
QkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OEU0M0RDMUFCQjZGNkYw
MDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tICovOyB9OwotCQkwNzky
MTY1NTFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5MjE2NTMx
QUE1NjBBQTAwQTNDMDQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwNzkyMTY1NTFB
QTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5MjE2NTMxQUE1NjBBQTAwQTND
MDQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzk0MTc5MTE2NkU4NTVGMDA5NDE2QzIgLyog
SW5iYW5kVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3OTQxNzhGMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suY3Bw
ICovOyB9OwogCQkwNzk0MTc5MjE2NkU4NTVGMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzk0MTc5MDE2
NkU4NTVGMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmggKi87IH07CiAJCTA3OTQxNzk0MTY2
RUEwNEUwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzk0MTc5MzE2NkVBMDRFMDA5NDE2QzIg
LyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yMDgyLDcgKzIwODcsNyBAQAogCQk1MkNDQTlFODE1RTNG
NjRDMDA1M0M3N0YgLyogRE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDQ0E5RTUxNUUzRjY0QzAwNTNDNzdG
IC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJNTJDQ0E5RTkxNUUzRjY0
QzAwNTNDNzdGIC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNDQTlFNjE1RTNGNjRDMDA1M0M3N0Yg
LyogRE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5tbSAqLzsgfTsKIAkJNTJDQ0E5RUExNUUzRjY0
QzAwNTNDNzdGIC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25JbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDQ0E5RTcxNUUzRjY0QzAw
NTNDNzdGIC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25JbnRlcm5hbC5oICovOyB9OwotCQk1
MkUyQ0FGQzE5RkYwMjA3MDAxRUVCNEYgLyogQXVkaW9Qcm9kdWNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFMkNBRkIxOUZGMDIwNzAwMUVFQjRG
IC8qIEF1ZGlvUHJvZHVjZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1MkUyQ0FGQzE5RkYwMjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFMkNBRkIx
OUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkYxMDg2NTE2MkI2REE0MDA5QUM4MUUgLyog
TWl4ZWRDb250ZW50Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hl
Y2tlci5jcHAgKi87IH07CiAJCTUyRjEwODY2MTYyQjZEQTgwMDlBQzgxRSAvKiBNaXhlZENvbnRl
bnRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRjUyRTExMTRB
MDEzNEYwMEFDQzM5NyAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjUyRTEwMTRBMDEzNEYwMEFDQzM5NyAv
KiBOU1Njcm9sbGVySW1wRGV0YWlscy5tbSAqLzsgfTsKQEAgLTcxMDUsNiArNzExMCwxMSBAQAog
CQkwNzA3NTZEODE0MjM5QjRCMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUZXh0VHJhY2tDdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDcwNzU2RDkxNDIzOUI0QzAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RleHRUcmFj
a0N1ZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzA3NTZEQTE0MjM5
QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTVGV4dFRyYWNrQ3VlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwNzA5RDc4QzFBRTU1NTU0MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJNZWRpYVNlc3Np
b25NYW5hZ2VyLmNwcDsgcGF0aCA9IG1lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwOUQ3OEQxQUU1NTU1NDAwNEU0
MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oOyBwYXRoID0gbWVkaWFzZXNzaW9uL1dl
Yk1lZGlhU2Vzc2lvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcw
OUQ3OTAxQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTWVkaWFTZXNzaW9uTWFuYWdl
ck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDlENzkxMUFFNTU1N0Uw
MDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDcwOUQ3OTQxQUU1NUEyOTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
TWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oOyBwYXRoID0gbWVkaWFzZXNzaW9uL1dlYk1lZGlh
U2Vzc2lvbk1hbmFnZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcw
OUZDNEQxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNsaWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwNzBERDhGNTBGMDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250
cm9scy5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEUwOTE4MTg3NUVEOTMwMDNBMUQzQyAvKiBNZWRp
YVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTZXNzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mjk5LDcgKzczMDksNyBAQAogCQkw
NzhFNDNEODFBQkI2QzdFMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3OEU0M0RCMUFCQjZGNkYwMDFDMkZB
NiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaDsgcGF0aCA9IG9iamMv
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwNzhFNDNEQzFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tl
ck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE1lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXJNYWMubW07IHBhdGggPSBvYmpjL01lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA3OTIxNjUzMUFBNTYw
QUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDc5MjE2NTMxQUE1NjBBQTAwQTNDMDQ5
IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwNzk0MTc4RjE2NkU4NTVGMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluYmFuZFRleHRUcmFjay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3OTQxNzkwMTY2RTg1NUYwMDk0MTZD
MiAvKiBJbmJhbmRUZXh0VHJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5iYW5kVGV4dFRyYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3OTQxNzkz
MTY2RUEwNEUwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluYmFuZFRleHRUcmFja1ByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyODMsNyArOTI5Myw3IEBACiAJCTUyQ0NBOUU1MTVFM0Y2
NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDQ0E5RTYxNUUzRjY0QzAwNTNDNzdGIC8qIERPTURPTU5h
bWVkRmxvd0NvbGxlY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkNDQTlFNzE1RTNGNjRDMDA1M0M3N0YgLyogRE9NRE9NTmFtZWRGbG93Q29sbGVj
dGlvbkludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTURPTU5h
bWVkRmxvd0NvbGxlY3Rpb25JbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MkUyQ0FGQjE5RkYwMjA3MDAxRUVCNEYgLyogQXVkaW9Qcm9kdWNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1Byb2R1Y2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUHJvZHVjZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGMTA4NjIxNjJCNkQ4MjAwOUFDODFFIC8qIE1peGVk
Q29udGVudENoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWl4ZWRDb250ZW50Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
RjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1peGVkQ29udGVudENoZWNrZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNTJFMTAxNEEwMTM0RjAwQUNDMzk3IC8qIE5TU2Nyb2xs
ZXJJbXBEZXRhaWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
TlNTY3JvbGxlckltcERldGFpbHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NDUyNSw2ICsxNDUzNSwxNiBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNlc1RhYnMgPSAwOwog
CQl9OworCQkwNzA5RDc4QjFBRTU1NTJFMDA0RTQyRjggLyogbWVkaWFzZXNzaW9uICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwNzA5RDc5NDFBRTU1QTI5
MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oICovLAorCQkJCTA3MDlE
NzhDMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCAqLywKKwkJ
CQkwNzA5RDc4RDFBRTU1NTU0MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oICov
LAorCQkJKTsKKwkJCW5hbWUgPSBtZWRpYXNlc3Npb247CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQkwNzIyMUI0NjE3Q0VDMzI3MDA4NDhFNTEgLyogbWVkaWFzdHJlYW0gKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTQ3MjcsMTQgKzE0
NzQ3LDE2IEBACiAJCTA3NkYwRDA4MTJCODE5MjcwMEMyNkFBNCAvKiBhdmZvdW5kYXRpb24gKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTA3MUU0OTZGMUFE
NUFCNUUwMDhBNTBCNCAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TWFjLmggKi8sCi0JCQkJMDcxRTQ5
NkQxQUQ1QUEwRDAwOEE1MEI0IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRNYWMubW0gKi8sCisJCQkJ
MDcwOUQ3OTAxQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3Bw
ICovLAorCQkJCTA3MDlENzkxMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyTWFjLmggKi8sCiAJCQkJREY5QUZENkYxM0ZDMzFCMDAwMTVGRUI3IC8qIG9iamMgKi8sCiAJ
CQkJQ0RFM0E4NTIxN0Y1RkNFNjAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGLmggKi8s
CiAJCQkJMDdFOUUxMkYxOEY2MkIzNzAwMTFBM0E0IC8qIEluYmFuZE1ldGFkYXRhVGV4dFRyYWNr
UHJpdmF0ZUFWRi5jcHAgKi8sCiAJCQkJMDdFOUUxMkQxOEY1RTI3NjAwMTFBM0E0IC8qIEluYmFu
ZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRi5oICovLAogCQkJCTA3QjQ0MkQ0MTY2QzcwQjAw
MDU1NkNBRCAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcCAqLywKIAkJCQkwN0I0NDJE
NTE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oICovLAorCQkJ
CTA3MUU0OTZGMUFENUFCNUUwMDhBNTBCNCAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TWFjLmggKi8s
CisJCQkJMDcxRTQ5NkQxQUQ1QUEwRDAwOEE1MEI0IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRNYWMu
bW0gKi8sCiAJCQkJMDc4RTQzREIxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJNYWMuaCAqLywKIAkJCQkwNzhFNDNEQzFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlck1hYy5tbSAqLywKIAkJCQkwNzZGMEQwOTEyQjgxOTI3MDBDMjZB
QTQgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCAqLywKQEAgLTE2Nzk1LDcg
KzE2ODE3LDYgQEAKIAkJCQk4NTM4RjAwMDBBRDcxNzcwMDA2QTgxRDEgLyogQWJzdHJhY3RWaWV3
LmlkbCAqLywKIAkJCQlCQ0Y0OENFNjEzNzBEMTE0MDA0RTg3RDYgLyogQWRqdXN0Vmlld1NpemVP
ck5vdC5oICovLAogCQkJCUNFREExMkQ2MTUyQ0ExQ0IwMEQ5RTA4RCAvKiBBbHRlcm5hdGl2ZVRl
eHRDbGllbnQuaCAqLywKLQkJCQk1MkUyQ0FGQjE5RkYwMjA3MDAxRUVCNEYgLyogQXVkaW9Qcm9k
dWNlci5oICovLAogCQkJCTQ1ODMwRDRCMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29u
dHJvbGxlci5jcHAgKi8sCiAJCQkJNDU4MzBENEMxNjc5QjRGODAwQUNGOEMzIC8qIEF1dG9zY3Jv
bGxDb250cm9sbGVyLmggKi8sCiAJCQkJQkMxMjRFRTQwQzI2NDFDRDAwOUUyMzQ5IC8qIEJhclBy
b3AuY3BwICovLApAQCAtMTY4NzksNiArMTY5MDAsNyBAQAogCQkJCTkzMkFENzA0MTdFRkEyQzMw
MDM4RjhGRiAvKiBNYWluRnJhbWUuaCAqLywKIAkJCQlCQzU5REVGQTE2OURFREQ4MDAxNkFDMzQg
LyogbWFrZV9zZXR0aW5ncy5wbCAqLywKIAkJCQk5MzFCQ0M2MDExMjRERkNCMDBCRTcwREQgLyog
TWVkaWFDYW5TdGFydExpc3RlbmVyLmggKi8sCisJCQkJNTJFMkNBRkIxOUZGMDIwNzAwMUVFQjRG
IC8qIE1lZGlhUHJvZHVjZXIuaCAqLywKIAkJCQk5M0VCMzU1RTA5RTM3RkQ2MDBGNDM3OTkgLyog
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgKi8sCiAJCQkJOTM1QzQ3NjIwOUFDNENF
NjAwQTZBQUI0IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCAqLywKIAkJCQlBOUM2
RTVBMzBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmNwcCAqLywKQEAgLTE4MzAzLDYgKzE4
MzI1LDcgQEAKIAkJCQk5NzEyQTU1MzE1MDA0RTNDMDA0OEFGMTAgLyogaW5kZXhlZGRiICovLAog
CQkJCUFBN0VBMEE5MTc1NTdCMUMwMERGNDY0MyAvKiBpbmRpZXVpICovLAogCQkJCUNEOUEzN0Y1
MTdDN0Q5MzYwMEM1RkE3QSAvKiBtZWRpYWNvbnRyb2xzICovLAorCQkJCTA3MDlENzhCMUFFNTU1
MkUwMDRFNDJGOCAvKiBtZWRpYXNlc3Npb24gKi8sCiAJCQkJQjFBOTQyREQxNUI1Q0UyMjAwRDUy
NUQxIC8qIG1lZGlhc291cmNlICovLAogCQkJCTA3MjIxQjQ2MTdDRUMzMjcwMDg0OEU1MSAvKiBt
ZWRpYXN0cmVhbSAqLywKIAkJCQkzMzNGNzAzRDBGQjQ5QzE2MDA4RTEyQTYgLyogbm90aWZpY2F0
aW9ucyAqLywKQEAgLTIwNzk4LDcgKzIwODIxLDcgQEAKIAkJCQkwN0Y4NzY4MzFBRDRBOTQ1MDA5
MDU4NDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQuaCAqLywKIAkJCQkwNzhFNDNENzFB
QkI2QzdFMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5jcHAgKi8sCiAJCQkJ
MDc4RTQzRDgxQUJCNkM3RTAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaCAq
LywKLQkJCQkwNzkyMTY1MzFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudC5oICovLAorCQkJCTA3OTIxNjUzMUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBs
YXliYWNrVGFyZ2V0Q2xpZW50LmggKi8sCiAJCQkJRTRCNDFFMEMwQ0JGOTBCRDAwQUYyRUNFIC8q
IE1lZGlhUGxheWVyLmNwcCAqLywKIAkJCQlFNEI0MUUwRDBDQkY5MEJEMDBBRjJFQ0UgLyogTWVk
aWFQbGF5ZXIuaCAqLywKIAkJCQkwNzlGNUU0QjBGM0JFQkVBMDA1RTA3ODIgLyogTWVkaWFQbGF5
ZXJQcml2YXRlLmggKi8sCkBAIC0yMzcxNyw3ICsyMzc0MCw2IEBACiAJCQkJRkQzNTkxOTAxMzhE
QjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwMjAxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDMxNjA4NDEyQjAyNkY3MDBDMUEzNTkgLyogQXVkaW9Qcm9jZXNzb3Iu
aCBpbiBIZWFkZXJzICovLAotCQkJCTUyRTJDQUZDMTlGRjAyMDcwMDFFRUI0RiAvKiBBdWRpb1By
b2R1Y2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjA4NjEyQjAyNkY3MDBDMUEzNTkgLyog
QXVkaW9SZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDg4MTJCMDI2RjcwMEMx
QTM1OSAvKiBBdWRpb1Jlc2FtcGxlcktlcm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ4QzQ2
RUMxNTQ2MDhFNzAwQTU5MTBDIC8qIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNDE0OSw2ICsyNDE3MSw3IEBACiAJCQkJMUE4RjZCQzMwREI1NUNEQzAwMURC
Nzk0IC8qIERPTUFwcGxpY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RDM4OUIy
MEE5OTFBN0YwMDI4MjE0NSAvKiBET01BdHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUU3MTE4
RDBBQzVENTM1MDA1MzI3MEYgLyogRE9NQXR0ckludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwNzA5RDc5NTFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzZGQjlGRUIxOUE3Mjg0QjAwNDIwNTYyIC8qIERPTUF1
dG9jb21wbGV0ZUVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTc2RkI5RkVEMTlBNzI4
NEIwMDQyMDU2MiAvKiBET01BdXRvY29tcGxldGVFcnJvckV2ZW50SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDOTQ2RUVGMTA3RkRCQUMwMDg1NzE5MyAvKiBET01CZWZvcmVMb2FkRXZl
bnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2OTUsNiArMjU3MTgsNyBAQAogCQkJCURGOUFGRDcy
MTNGQzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDREM4QjVBMzE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTNF
NjBDRDY4MUE5MDBGQURBNzUgLyogTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUyRTJDQUZDMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0RTE5NTkyQTBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDcxRTQ5NzAxQUQ1QUI1RTAwOEE1MEI0IC8qIE1lZGlhUGxh
eWJhY2tUYXJnZXRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTRFMTk1OTJDMEEzOURBQ0MwMDIy
MEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NzgwLDYg
KzI1ODA0LDcgQEAKIAkJCQlFMTBCOUI2QzBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZlWFBhdGhO
U1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0NDRjAyNzBBRjZDNTI5MDAwMThFODkg
LyogTmF2aWdhdGlvbkFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc5RjQzRDQxMDc1RTQ0
QTAwMDBGODNCIC8qIE5hdmlnYXRpb25TY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3
MDlENzkzMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOUM2RTVBNjBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRERBOTRDMjE5Njg3QUE1MDA0NTMwMjkgLyogSlNEb2N1bWVu
dEN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNzE5QzcwRUVFQzE2ODAwRjYxMjEzIC8q
IE5hdmlnYXRvckJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjYyODUsNyArMjYzMTAsNyBAQAog
CQkJCTkzOTFBOTkxMTYyNzQ2Q0IwMDI5NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMzhCRkYxNjQ0NzNDNzAwMDkxRUIyIC8qIFNjcm9sbGlu
Z1N0YXRlRml4ZWROb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBM0U3QjE5MUIyRkM1MDAw
RjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTA3OTIxNjU1MUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzkyMTY1NTFBQTU2MEFBMDBBM0MwNDkg
LyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxQ0JE
MEQxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQTNFODQxOTFCMzFCRjAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzFDQkQwRjE2MUE0NEU5MDBFNEM4
NzQgLyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTI2
NjYwLDYgKzI2Njg1LDcgQEAKIAkJCQlCMjIyN0E4MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0
aFNlZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NzZDOUU2MTFERjZBMEIwMDU1NUIwMiAv
KiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NEEwODI5MTI4
RDc4NjcwMDJEQjFGMSAvKiBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMDcwOUQ3OEYxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QjZCOTc4MTIwRjEzRTUwMEI4RUZBRiAvKiBT
VkdQYXRoU2VnTGlzdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDMUQ0MzUxNzhENUFC
NTAwMTQxRTY4IC8qIFNWR1BhdGhTZWdNb3ZldG9BYnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
OThCREYxMUE4MTE0MzEwMEIyMkZCNSAvKiBSZWFkYWJsZVN0cmVhbUpTU291cmNlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI3NjExLDYgKzI3NjM3LDcgQEAKIAkJCQlCQzkwNEI3NjBEMTA5OThGMDA2
ODBEMzIgLyogQ2xhc3NOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTQwOTBGQjFB
QTUxRTFEMDA5MTE5MUEgLyogQ29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyQ29jb2EubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQ0MwNjU3RDBGM0NFMUI3MDBDRDJEODcgLyogQ2xpZW50UmVjdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzA5RDc5MjFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVk
aWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0MwNjU4MDBGM0NF
MUI3MDBDRDJEODcgLyogQ2xpZW50UmVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUw
MzFCM0YwQTQ0RUZDNzAwRjk5MkUwIC8qIENsaXBib2FyZEV2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUNERUE3NjM1MTQ2MEI3MUEwMDhCMzFGMSAvKiBDbG9jay5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI3ODc2LDYgKzI3OTAzLDcgQEAKIAkJCQk4NUNBOTc1RDBBOTYyRTU0MDA2OTBDQ0Yg
LyogRE9NRG9jdW1lbnRUeXBlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODUxOERDRUEwQTlDQzgw
RDAwOTFCN0E2IC8qIERPTURPTUltcGxlbWVudGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTJDQ0E5RTkxNUUzRjY0QzAwNTNDNzdGIC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24ubW0g
aW4gU291cmNlcyAqLywKKwkJCQkwNzA5RDc4RTFBRTU1NTU0MDA0RTQyRjggLyogV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDlBMjQ3MzE1QjlDMkQxMDBE
MzQ1MjcgLyogRE9NRE9NU2VjdXJpdHlQb2xpY3kubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Njk0
NTY1QzEyMTREQjYzMDAwN0NCQUUgLyogRE9NRE9NVG9rZW5MaXN0Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0FBQkEyNTkxNEJDNjEzMzAwQUE5QTExIC8qIERPTUVkaXRvci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTgzMDY4KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBbmltYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIkF1ZGlvUHJvZHVjZXIu
aCIKICNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCkBAIC0xMDAsNiArOTksNyBAQAog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJNZWRpYVByb2R1Y2VyLmgiCiAjaW5j
bHVkZSAiTWVkaWFRdWVyeUxpc3QuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5TWF0Y2hlci5oIgog
I2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKQEAgLTIzMCw3ICsyMzAs
NyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotI2lu
Y2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0
Q2xpZW50LmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTUyMyw3ICs1MjMs
NiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVCiAgICAgLCBtX3Jl
bmRlclRyZWVCZWluZ0Rlc3Ryb3llZChmYWxzZSkKICAgICAsIG1faGFzUHJlcGFyZWRGb3JEZXN0
cnVjdGlvbihmYWxzZSkKICAgICAsIG1faGFzU3R5bGVXaXRoVmlld3BvcnRVbml0cyhmYWxzZSkK
LSAgICAsIG1faXNQbGF5aW5nQXVkaW8oZmFsc2UpCiB7CiAgICAgYWxsRG9jdW1lbnRzKCkuYWRk
KHRoaXMpOwogCkBAIC0zNDE1LDEzICszNDE0LDEzIEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVZp
ZXdwb3J0VW5pdHNPblJlc2kKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEF1ZGlvUHJv
ZHVjZXIoQXVkaW9Qcm9kdWNlciogYXVkaW9Qcm9kdWNlcikKK3ZvaWQgRG9jdW1lbnQ6OmFkZEF1
ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciogYXVkaW9Qcm9kdWNlcikKIHsKICAgICBtX2F1ZGlv
UHJvZHVjZXJzLmFkZChhdWRpb1Byb2R1Y2VyKTsKICAgICB1cGRhdGVJc1BsYXlpbmdNZWRpYSgp
OwogfQogCi12b2lkIERvY3VtZW50OjpyZW1vdmVBdWRpb1Byb2R1Y2VyKEF1ZGlvUHJvZHVjZXIq
IGF1ZGlvUHJvZHVjZXIpCit2b2lkIERvY3VtZW50OjpyZW1vdmVBdWRpb1Byb2R1Y2VyKE1lZGlh
UHJvZHVjZXIqIGF1ZGlvUHJvZHVjZXIpCiB7CiAgICAgbV9hdWRpb1Byb2R1Y2Vycy5yZW1vdmUo
YXVkaW9Qcm9kdWNlcik7CiAgICAgdXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKQEAgLTM0MjksMTgg
KzM0MjgsMTQgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihBdWRpbwogCiB2
b2lkIERvY3VtZW50Ojp1cGRhdGVJc1BsYXlpbmdNZWRpYSgpCiB7Ci0gICAgYm9vbCBpc1BsYXlp
bmdBdWRpbyA9IGZhbHNlOwotICAgIGZvciAoYXV0byBhdWRpb1Byb2R1Y2VyIDogbV9hdWRpb1By
b2R1Y2VycykgewotICAgICAgICBpZiAoYXVkaW9Qcm9kdWNlci0+aXNQbGF5aW5nQXVkaW8oKSkg
ewotICAgICAgICAgICAgaXNQbGF5aW5nQXVkaW8gPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIHN0
YXRlID0gTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5nOworICAgIGZvciAoYXV0byBhdWRpb1By
b2R1Y2VyIDogbV9hdWRpb1Byb2R1Y2VycykKKyAgICAgICAgc3RhdGUgfD0gYXVkaW9Qcm9kdWNl
ci0+bWVkaWFTdGF0ZSgpOwogCi0gICAgaWYgKGlzUGxheWluZ0F1ZGlvID09IG1faXNQbGF5aW5n
QXVkaW8pCisgICAgaWYgKHN0YXRlID09IG1fbWVkaWFTdGF0ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9pc1BsYXlpbmdBdWRpbyA9IGlzUGxheWluZ0F1ZGlvOworICAgIG1fbWVkaWFTdGF0
ZSA9IHN0YXRlOwogCiAgICAgaWYgKHBhZ2UoKSkKICAgICAgICAgcGFnZSgpLT51cGRhdGVJc1Bs
YXlpbmdNZWRpYSgpOwpAQCAtNjUzMyw3MiArNjUyOCw4NSBAQCB2b2lkIERvY3VtZW50OjpzZXRJ
bnB1dEN1cnNvcihQYXNzUmVmUHRyCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCi12b2lkIERvY3VtZW50OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29u
c3QgSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKK3N0YXRpYyB1aW50NjRfdCBuZXh0UGxheWJh
Y2tUYXJnZXRDbGllbnRDb250ZXh0SWQoKQoreworICAgIHN0YXRpYyB1aW50NjRfdCBjb250ZXh0
SWQgPSAwOworICAgIHJldHVybiArK2NvbnRleHRJZDsKK30KKwordm9pZCBEb2N1bWVudDo6YWRk
UGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoTWVkaWFQbGF5YmFja1RhcmdldENsaWVudCYgY2xp
ZW50KQogewogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBwYWdlLT5zaG93UGxheWJhY2tUYXJnZXRQaWNrZXIodmll
dygpLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCksIGlzPEhUTUxWaWRlb0VsZW1lbnQ+KGVsZW1l
bnQpKTsKKyAgICBBU1NFUlQoIW1fY2xpZW50VG9JRE1hcC5jb250YWlucygmY2xpZW50KSk7CisK
KyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBuZXh0UGxheWJhY2tUYXJnZXRDbGllbnRDb250ZXh0
SWQoKTsKKyAgICBtX2NsaWVudFRvSURNYXAuYWRkKCZjbGllbnQsIGNvbnRleHRJZCk7CisgICAg
bV9pZFRvQ2xpZW50TWFwLmFkZChjb250ZXh0SWQsICZjbGllbnQpOworICAgIHBhZ2UtPmFkZFBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KGNvbnRleHRJZCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6
OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJD
bGllbnQmIGNsaWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50KE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQmIGNsaWVudCkKIHsKKyAgICBBU1NFUlQo
bV9jbGllbnRUb0lETWFwLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICB1aW50NjRfdCBjb250ZXh0
SWQgPSBtX2NsaWVudFRvSURNYXAuZ2V0KCZjbGllbnQpOworICAgIG1faWRUb0NsaWVudE1hcC5y
ZW1vdmUoY29udGV4dElkKTsKKyAgICBtX2NsaWVudFRvSURNYXAucmVtb3ZlKCZjbGllbnQpOwor
CiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAg
IHJldHVybjsKLQotICAgIG1fcGxheWJhY2tUYXJnZXRDbGllbnRzLmFkZCgmY2xpZW50KTsKLQot
ICAgIFJlZlB0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiB0YXJnZXQgPSBwYWdlLT5wbGF5YmFja1Rh
cmdldCgpOwotICAgIGlmICh0YXJnZXQpCi0gICAgICAgIGNsaWVudC5kaWRDaG9vc2VQbGF5YmFj
a1RhcmdldCgqdGFyZ2V0KTsKLSAgICBjbGllbnQuZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFi
bGVEaWRDaGFuZ2UocGFnZS0+aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpKTsKKyAgICBwYWdl
LT5yZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChjb250ZXh0SWQpOwogfQogCi12b2lk
IERvY3VtZW50OjpyZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50JiBjbGllbnQpCit2b2lkIERvY3VtZW50OjpzaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoTWVkaWFQbGF5YmFja1RhcmdldENsaWVudCYgY2xpZW50LCBib29sIGlzVmlk
ZW8pCiB7Ci0gICAgbV9wbGF5YmFja1RhcmdldENsaWVudHMucmVtb3ZlKCZjbGllbnQpOwotICAg
IGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOworICAgIFBhZ2UqIHBhZ2UgPSB0
aGlzLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV9jbGllbnRUb0lETWFwLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBwYWdlLT5zaG93UGxh
eWJhY2tUYXJnZXRQaWNrZXIobV9jbGllbnRUb0lETWFwLmdldCgmY2xpZW50KSwgdmlldygpLT5s
YXN0S25vd25Nb3VzZVBvc2l0aW9uKCksIGlzVmlkZW8pOwogfQogCi12b2lkIERvY3VtZW50Ojpj
b25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0b3JpbmcoKQordm9pZCBEb2N1bWVudDo6cGxheWJh
Y2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZShNZWRpYVBsYXliYWNrVGFyZ2V0Q2xp
ZW50JiBjbGllbnQsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKIHsKICAg
ICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcGFnZS0+Y29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7Cisg
ICAgQVNTRVJUKG1fY2xpZW50VG9JRE1hcC5jb250YWlucygmY2xpZW50KSk7CisgICAgcGFnZS0+
cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZShtX2NsaWVudFRvSURNYXAu
Z2V0KCZjbGllbnQpLCBzdGF0ZSk7CiB9CiAKLWJvb2wgRG9jdW1lbnQ6OnJlcXVpcmVzUGxheWJh
Y2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKQordm9pZCBEb2N1bWVudDo6cGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlEaWRDaGFuZ2UodWludDY0X3QgY2xpZW50SWQsIGJvb2wgYXZhaWxhYmxlKQog
ewotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9wbGF5YmFja1RhcmdldENsaWVudHMpIHsKLSAg
ICAgICAgaWYgKGNsaWVudC0+cmVxdWlyZXNQbGF5YmFja1RhcmdldFJvdXRlTW9uaXRvcmluZygp
KSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQorICAgIGlmICghbV9pZFRvQ2xpZW50TWFwLmNvbnRhaW5zKGNsaWVudElkKSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8qIGNsaWVudCA9
IG1faWRUb0NsaWVudE1hcC5nZXQoY2xpZW50SWQpOworICAgIGNsaWVudC0+ZXh0ZXJuYWxPdXRw
dXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYXZhaWxhYmxlKTsKIH0KIAotdm9pZCBEb2N1bWVu
dDo6cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoYm9vbCBhdmFpbGFibGUpCit2
b2lkIERvY3VtZW50OjpzZXRQbGF5YmFja1RhcmdldCh1aW50NjRfdCBjbGllbnRJZCwgUmVmPE1l
ZGlhUGxheWJhY2tUYXJnZXQ+JiYgdGFyZ2V0KQogewotICAgIGlmIChtX3BsYXliYWNrVGFyZ2V0
c0F2YWlsYWJsZSA9PSBhdmFpbGFibGUpCisgICAgaWYgKCFtX2lkVG9DbGllbnRNYXAuY29udGFp
bnMoY2xpZW50SWQpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wbGF5YmFja1RhcmdldHNBdmFp
bGFibGUgPSBhdmFpbGFibGU7CiAKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fcGxheWJhY2tU
YXJnZXRDbGllbnRzKQotICAgICAgICBjbGllbnQtPmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxh
YmxlRGlkQ2hhbmdlKGF2YWlsYWJsZSk7CisgICAgYXV0byogY2xpZW50ID0gbV9pZFRvQ2xpZW50
TWFwLmdldChjbGllbnRJZCk7CisgICAgY2xpZW50LT5zZXRQbGF5YmFja1RhcmdldCh0YXJnZXQu
Y29weVJlZigpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQo
UmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgZGV2aWNlKQordm9pZCBEb2N1bWVudDo6c2V0U2hv
dWxkUGxheVRvUGxheWJhY2tUYXJnZXQodWludDY0X3QgY2xpZW50SWQsIGJvb2wgc2hvdWxkUGxh
eSkKIHsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fcGxheWJhY2tUYXJnZXRDbGllbnRzKQot
ICAgICAgICBjbGllbnQtPmRpZENob29zZVBsYXliYWNrVGFyZ2V0KGRldmljZS5jb3B5UmVmKCkp
OwotfQorICAgIGlmICghbV9pZFRvQ2xpZW50TWFwLmNvbnRhaW5zKGNsaWVudElkKSkKKyAgICAg
ICAgcmV0dXJuOwogCi0jZW5kaWYKKyAgICBhdXRvKiBjbGllbnQgPSBtX2lkVG9DbGllbnRNYXAu
Z2V0KGNsaWVudElkKTsKKyAgICBjbGllbnQtPnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0
KHNob3VsZFBsYXkpOworfQorI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShy
ZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50VGltaW5nLmgiCiAj
aW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJNZWRpYVByb2R1Y2VyLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgog
I2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUV2ZW50
LmgiCkBAIC02OSw3ICs3MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQVhPYmpl
Y3RDYWNoZTsKIGNsYXNzIEF0dHI7Ci1jbGFzcyBBdWRpb1Byb2R1Y2VyOwogY2xhc3MgQ0RBVEFT
ZWN0aW9uOwogY2xhc3MgQ1NTRm9udFNlbGVjdG9yOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlv
bjsKQEAgLTEyNiw3ICsxMjYsNyBAQCBjbGFzcyBKU05vZGU7CiBjbGFzcyBMb2NhbGU7CiBjbGFz
cyBNZWRpYUNhblN0YXJ0TGlzdGVuZXI7CiBjbGFzcyBNZWRpYVBsYXliYWNrVGFyZ2V0OwotY2xh
c3MgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudDsKK2NsYXNzIE1lZGlhUGxheWJhY2tU
YXJnZXRDbGllbnQ7CiBjbGFzcyBNZWRpYVF1ZXJ5TGlzdDsKIGNsYXNzIE1lZGlhUXVlcnlNYXRj
aGVyOwogY2xhc3MgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0czsKQEAgLTEyMjksMjEgKzEy
MjksMjIgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3R5bGVXaXRoVmlld3BvcnRVbml0cygpIGNv
bnN0IHsgcmV0dXJuIG1faGFzU3R5bGVXaXRoVmlld3BvcnRVbml0czsgfQogICAgIHZvaWQgdXBk
YXRlVmlld3BvcnRVbml0c09uUmVzaXplKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFk
ZEF1ZGlvUHJvZHVjZXIoQXVkaW9Qcm9kdWNlciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVtb3ZlQXVkaW9Qcm9kdWNlcihBdWRpb1Byb2R1Y2VyKik7Ci0gICAgYm9vbCBpc1BsYXlpbmdB
dWRpbygpIGNvbnN0IHsgcmV0dXJuIG1faXNQbGF5aW5nQXVkaW87IH0KKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFkZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciopOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKik7CisgICAgTWVk
aWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X21lZGlhU3RhdGU7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUlzUGxheWluZ01l
ZGlhKCk7CiAgICAgdm9pZCBwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpOwogICAgIFdlYWtQdHI8
RG9jdW1lbnQ+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdl
YWtQdHIoKTsgfQogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICB2
b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb25zdCBIVE1MTWVkaWFFbGVtZW50Jik7Ci0g
ICAgdm9pZCBkaWRDaG9vc2VQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4m
Jik7Ci0gICAgdm9pZCBhZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50Jik7Ci0gICAgdm9pZCByZW1vdmVQbGF5YmFja1RhcmdldFBpY2tl
ckNsaWVudChNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50Jik7Ci0gICAgYm9vbCByZXF1
aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCk7Ci0gICAgdm9pZCBjb25maWd1cmVQ
bGF5YmFja1RhcmdldE1vbml0b3JpbmcoKTsKLSAgICB2b2lkIHBsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5RGlkQ2hhbmdlKGJvb2wpOworICAgIHZvaWQgYWRkUGxheWJhY2tUYXJnZXRQaWNrZXJD
bGllbnQoTWVkaWFQbGF5YmFja1RhcmdldENsaWVudCYpOworICAgIHZvaWQgcmVtb3ZlUGxheWJh
Y2tUYXJnZXRQaWNrZXJDbGllbnQoTWVkaWFQbGF5YmFja1RhcmdldENsaWVudCYpOworICAgIHZv
aWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQmLCBi
b29sKTsKKyAgICB2b2lkIHBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2Uo
TWVkaWFQbGF5YmFja1RhcmdldENsaWVudCYsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFn
cyk7CisKKyAgICB2b2lkIHNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90LCBSZWY8TWVkaWFQbGF5
YmFja1RhcmdldD4mJik7CisgICAgdm9pZCBwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENo
YW5nZSh1aW50NjRfdCwgYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rh
cmdldCh1aW50NjRfdCwgYm9vbCk7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpAQCAtMTY4NCwxMiAr
MTY4NSwxMiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2hhc1N0eWxlV2l0aFZpZXdwb3J0VW5p
dHM7CiAKLSAgICBIYXNoU2V0PEF1ZGlvUHJvZHVjZXIqPiBtX2F1ZGlvUHJvZHVjZXJzOwotICAg
IGJvb2wgbV9pc1BsYXlpbmdBdWRpbzsKKyAgICBIYXNoU2V0PE1lZGlhUHJvZHVjZXIqPiBtX2F1
ZGlvUHJvZHVjZXJzOworICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtX21lZGlh
U3RhdGUgeyBNZWRpYVByb2R1Y2VyOjpJc05vdFBsYXlpbmcgfTsKIAogI2lmIEVOQUJMRShXSVJF
TEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgSGFzaFNldDxXZWJDb3JlOjpNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50Kj4gbV9wbGF5YmFja1RhcmdldENsaWVudHM7Ci0gICAgYm9vbCBt
X3BsYXliYWNrVGFyZ2V0c0F2YWlsYWJsZSB7IGZhbHNlIH07CisgICAgSGFzaE1hcDx1aW50NjRf
dCwgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENsaWVudCo+IG1faWRUb0NsaWVudE1hcDsK
KyAgICBIYXNoTWFwPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQqLCB1aW50NjRf
dD4gbV9jbGllbnRUb0lETWFwOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw4ICs0
MDEsMTAgQEAgSFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQoKQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIGlmIChoYXNFdmVudExp
c3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFu
Z2VkRXZlbnQpKQorICAgIGlmIChoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0
cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQpKSB7CisgICAgICAgIG1faGFz
UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBmYWxzZTsKICAgICAgICAgbV9t
ZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKCp0
aGlzLCBmYWxzZSk7CisgICAgfQogI2VuZGlmCiAKICAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXIp
IHsKQEAgLTQyOCw3ICs0MzAsNyBAQCBIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1lZGlhRWxlbWVu
dCgpCiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1l
bnQmIGRvY3VtZW50KQogewotICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdpc3RlcldpdGhEb2N1bWVu
dChkb2N1bWVudCk7CisgICAgbV9tZWRpYVNlc3Npb24tPnJlZ2lzdGVyV2l0aERvY3VtZW50KCp0
aGlzKTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAg
ZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwpAQCAtNDU1LDcgKzQ1Nyw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9jdW0KIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBtX21lZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhEb2N1bWVudChkb2N1bWVudCk7
CisgICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoKnRoaXMpOwogCiAg
ICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQogICAgICAgICBkb2N1bWVudC5y
ZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CkBAIC0zMDE3LDYgKzMwMTksMTAgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRNdXRlZChib29sIG11dAogICAgICAgICB9CiAgICAg
ICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50KTsKICAgICAg
ICAgZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOworCisjaWYgRU5BQkxFKFdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPm1lZGlhU3RhdGVE
aWRDaGFuZ2UoKnRoaXMsIG1lZGlhU3RhdGUoKSk7CisjZW5kaWYKICAgICB9CiAjZW5kaWYKIH0K
QEAgLTQyOTIsNyArNDI5OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJF
bmdpbmUKIAogICAgIG1faGF2ZVByZXBhcmVkVG9QbGF5ID0gZmFsc2U7CiAKLSAgICBtX21lZGlh
U2Vzc2lvbi0+YXBwbHlNZWRpYVBsYXllclJlc3RyaWN0aW9ucygqdGhpcyk7CisgICAgbV9tZWRp
YVNlc3Npb24tPm1lZGlhRW5naW5lVXBkYXRlZCgqdGhpcyk7CiAKICNpZiBFTkFCTEUoV0VCX0FV
RElPKQogICAgIGlmIChtX2F1ZGlvU291cmNlTm9kZSAmJiBhdWRpb1NvdXJjZVByb3ZpZGVyKCkp
IHsKQEAgLTQ1OTcsOSArNDYwMywxMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFBsYXlp
bmcoYm9vbCBwCiB7CiAgICAgaWYgKG1fcGxheWluZyA9PSBwbGF5aW5nKQogICAgICAgICByZXR1
cm47Ci0gICAgCisKICAgICBtX3BsYXlpbmcgPSBwbGF5aW5nOwogICAgIGRvY3VtZW50KCkudXBk
YXRlSXNQbGF5aW5nTWVkaWEoKTsKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCisgICAgbV9tZWRpYVNlc3Npb24tPm1lZGlhU3RhdGVEaWRDaGFuZ2UoKnRoaXMsIG1lZGlh
U3RhdGUoKSk7CisjZW5kaWYKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRQYXVzZWRJ
bnRlcm5hbChib29sIGIpCkBAIC00Njg5LDYgKzQ2OTksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmNsZWFyTWVkaWFQbGF5ZXIoCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUKQogICAgIGlmIChoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0cGxheWJh
Y2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQpKSB7CisgICAgICAgIG1faGFzUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBmYWxzZTsKICAgICAgICAgbV9tZWRpYVNl
c3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKCp0aGlzLCBm
YWxzZSk7CiAKICAgICAgICAgLy8gU2VuZCBhbiBhdmFpbGFiaWxpdHkgZXZlbnQgaW4gY2FzZSBz
Y3JpcHRzIHdhbnQgdG8gaGlkZSB0aGUgcGlja2VyIHdoZW4gdGhlIGVsZW1lbnQKQEAgLTQ4NjMs
NiArNDg3NCwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyQ3VycmVuCiB7
CiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDdXJyZW50UGxh
eWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCglcCkgLSB3ZWJraXRDdXJyZW50UGxheWJhY2tU
YXJnZXRJc1dpcmVsZXNzID0gJXMiLCB0aGlzLCBib29sU3RyaW5nKHdlYmtpdEN1cnJlbnRQbGF5
YmFja1RhcmdldElzV2lyZWxlc3MoKSkpOwogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygp
LndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpOworCisj
aWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICBtX21lZGlhU2Vzc2lvbi0+
bWVkaWFTdGF0ZURpZENoYW5nZSgqdGhpcywgbWVkaWFTdGF0ZSgpKTsKKyNlbmRpZgogfQogCiBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNl
Q2FwdHVyZSkKQEAgLTQ4NzQsOCArNDg4OSwxMCBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmFk
ZEV2ZW50TGlzdGVuZXIoCiAgICAgaWYgKCFOb2RlOjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAoaXNGaXJzdEF2YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikKKyAgICBpZiAoaXNGaXJzdEF2
YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikgeworICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0
QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gdHJ1ZTsKICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNl
dEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKCp0aGlzLCB0cnVlKTsKKyAg
ICB9CiAKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjphZGRFdmVudExpc3RlbmVy
KCVwKSAtICd3ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWQnIiwgdGhpcyk7
CiAgICAgCkBAIC00ODkzLDggKzQ5MTAsMTAgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpyZW1v
dmVFdmVudExpc3RlbgogCiAgICAgYm9vbCBkaWRSZW1vdmVMYXN0QXZhaWxhYmlsaXR5Q2hhbmdl
ZExpc3RlbmVyID0gIWhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFj
a3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVudCk7CiAgICAgTE9HKE1lZGlhLCAiSFRNTE1l
ZGlhRWxlbWVudDo6cmVtb3ZlRXZlbnRMaXN0ZW5lciglcCkgLSByZW1vdmVkIGxhc3QgbGlzdGVu
ZXIgPSAlcyIsIHRoaXMsIGJvb2xTdHJpbmcoZGlkUmVtb3ZlTGFzdEF2YWlsYWJpbGl0eUNoYW5n
ZWRMaXN0ZW5lcikpOwotICAgIGlmIChkaWRSZW1vdmVMYXN0QXZhaWxhYmlsaXR5Q2hhbmdlZExp
c3RlbmVyKQorICAgIGlmIChkaWRSZW1vdmVMYXN0QXZhaWxhYmlsaXR5Q2hhbmdlZExpc3RlbmVy
KSB7CisgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBm
YWxzZTsKICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5TGlzdGVuZXJzKCp0aGlzLCBmYWxzZSk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00OTMyLDE2ICs0OTUxLDEwIEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6aXNQbGF5
aW5nVG9XaXJlbGUKICAgICByZXR1cm4gaXNQbGF5aW5nOwogfQogCi12b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQotewotICAgIGlmIChtX3BsYXll
cikKLSAgICAgICAgbV9wbGF5ZXItPnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKLX0K
LQotdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQor
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChib29s
IHNob3VsZFBsYXkpCiB7CiAgICAgaWYgKG1fcGxheWVyKQotICAgICAgICBtX3BsYXllci0+c3Rv
cFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CisgICAgICAgIG1fcGxheWVyLT5zZXRTaG91bGRQ
bGF5VG9QbGF5YmFja1RhcmdldChzaG91bGRQbGF5KTsKIH0KICNlbmRpZgogCkBAIC01NDczLDYg
KzU0ODYsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVyCiAKICNp
ZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIGlmIChoYXNFdmVudExpc3Rl
bmVycyhldmVudE5hbWVzKCkud2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2Vk
RXZlbnQpKSB7CisgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5l
cnMgPSB0cnVlOwogICAgICAgICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlMaXN0ZW5lcnMoKnRoaXMsIHRydWUpOwogICAgICAgICBlbnF1ZXVlUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsgLy8gRW5zdXJlIHRoZSBldmVudCBs
aXN0ZW5lciBnZXRzIGF0IGxlYXN0IG9uZSBldmVudC4KICAgICB9CkBAIC02MTcxLDkgKzYxODUs
MjYgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpvdmVycmlkZUJhY2tncm91bgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojppc1BsYXlpbmdBdWRpbygpCitN
ZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTdGF0
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzUGxheWluZygpICYmIGhhc0F1ZGlvKCkgJiYgIW11
dGVkKCk7CisKKyAgICBNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUgPSBJc05vdFBsYXlpbmc7CisgICAg
aWYgKGlzUGxheWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpKQorICAgICAgICBzdGF0ZSB8
PSBJc1BsYXlpbmdUb0V4dGVybmFsRGV2aWNlOworCisgICAgaWYgKG1faGFzUGxheWJhY2tUYXJn
ZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMpCisgICAgICAgIHN0YXRlIHw9IFJlcXVpcmVQbGF5YmFj
a1RhcmdldE1vbml0b3Jpbmc7CisKKyAgICBpZiAoIWlzUGxheWluZygpKQorICAgICAgICByZXR1
cm4gc3RhdGU7CisKKyAgICBpZiAoaGFzQXVkaW8oKSAmJiAhbXV0ZWQoKSkKKyAgICAgICAgc3Rh
dGUgfD0gSXNQbGF5aW5nQXVkaW87CisKKyAgICBpZiAoaGFzVmlkZW8oKSkKKyAgICAgICAgc3Rh
dGUgfD0gSXNQbGF5aW5nVmlkZW87CisKKyAgICByZXR1cm4gc3RhdGU7CiB9CiAKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6cGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiAr
MjksMTIgQEAKICNpZiBFTkFCTEUoVklERU8pCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJBdWRpb1Byb2R1Y2VyLmgiCiAj
aW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFTZXNzaW9u
LmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFD
b250cm9sbGVySW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRl
ICJNZWRpYVByb2R1Y2VyLmgiCiAjaW5jbHVkZSAiUGFnZVRocm90dGxlci5oIgogCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQpAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBNZWRpYVN0cmVhbTsKIAog
Y2xhc3MgSFRNTE1lZGlhRWxlbWVudAogICAgIDogcHVibGljIEhUTUxFbGVtZW50Ci0gICAgLCBw
cml2YXRlIE1lZGlhUGxheWVyQ2xpZW50LCBwdWJsaWMgTWVkaWFQbGF5ZXJTdXBwb3J0c1R5cGVD
bGllbnQsIHByaXZhdGUgTWVkaWFDYW5TdGFydExpc3RlbmVyLCBwdWJsaWMgQWN0aXZlRE9NT2Jq
ZWN0LCBwdWJsaWMgTWVkaWFDb250cm9sbGVySW50ZXJmYWNlICwgcHVibGljIE1lZGlhU2Vzc2lv
bkNsaWVudCwgcHJpdmF0ZSBBdWRpb1Byb2R1Y2VyCisgICAgLCBwcml2YXRlIE1lZGlhUGxheWVy
Q2xpZW50LCBwdWJsaWMgTWVkaWFQbGF5ZXJTdXBwb3J0c1R5cGVDbGllbnQsIHByaXZhdGUgTWVk
aWFDYW5TdGFydExpc3RlbmVyLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgTWVkaWFD
b250cm9sbGVySW50ZXJmYWNlICwgcHVibGljIE1lZGlhU2Vzc2lvbkNsaWVudCwgcHJpdmF0ZSBN
ZWRpYVByb2R1Y2VyCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgICwgcHJpdmF0ZSBBdWRp
b1RyYWNrQ2xpZW50CiAgICAgLCBwcml2YXRlIFRleHRUcmFja0NsaWVudApAQCAtMzY1LDggKzM2
NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuUGxheVRvV2lyZWxlc3NQbGF5YmFj
a1RhcmdldCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdUb1dp
cmVsZXNzUGxheWJhY2tUYXJnZXQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0
KGJvb2wpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICAvLyBFdmVudFRhcmdldCBmdW5jdGlvbi4K
QEAgLTQ1Nyw2ICs0NTYsOCBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUgbWF4QnVmZmVyZWRUaW1l
KCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBt
ZWRpYVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisKIHByb3RlY3RlZDoKICAgICBIVE1MTWVkaWFF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIGJvb2wpOwogICAgIHZpcnR1
YWwgfkhUTUxNZWRpYUVsZW1lbnQoKTsKQEAgLTcyMyw4ICs3MjQsNiBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVtb3RlQ29udHJvbENvbW1hbmQoTWVkaWFTZXNzaW9u
OjpSZW1vdGVDb250cm9sQ29tbWFuZFR5cGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBv
dmVycmlkZUJhY2tncm91bmRQbGF5YmFja1Jlc3RyaWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICAvLyBBdWRpb1Byb2R1Y2VyIG92ZXJyaWRlcwotICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlp
bmdBdWRpbygpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlTXV0ZWRTdGF0ZURpZENo
YW5nZSgpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBlZmZlY3RpdmVNdXRlZCgpIGNvbnN0OwpAQCAt
OTE5LDYgKzkxOCwxMCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
UmVmUHRyPE1lZGlhU3RyZWFtPiBtX21lZGlhU3RyZWFtU3JjT2JqZWN0OwogI2VuZGlmCisKKyNp
ZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorICAgIGJvb2wgbV9oYXNQbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyB7IGZhbHNlIH07CisjZW5kaWYKIH07CiAKICNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YVNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
U2Vzc2lvbi5jcHAJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVNlc3Npb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgpAQCAtODAsMTkgKzgxLDE5IEBAIEhUTUxNZWRpYVNlc3Npb246OkhUTUxNZWRpYVNl
c3Npb24oTWVkaWEKIHsKIH0KIAotdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpyZWdpc3RlcldpdGhE
b2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCit2b2lkIEhUTUxNZWRpYVNlc3Npb246OnJlZ2lz
dGVyV2l0aERvY3VtZW50KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCiB7CiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBkb2N1bWVudC5hZGRQbGF5YmFj
a1RhcmdldFBpY2tlckNsaWVudCgqdGhpcyk7CisgICAgZWxlbWVudC5kb2N1bWVudCgpLmFkZFBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KCp0aGlzKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CiAjZW5kaWYKIH0KIAotdm9p
ZCBIVE1MTWVkaWFTZXNzaW9uOjp1bnJlZ2lzdGVyV2l0aERvY3VtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKK3ZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6dW5yZWdpc3RlcldpdGhEb2N1bWVudChjb25z
dCBIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQogewogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCi0gICAgZG9jdW1lbnQucmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGll
bnQoKnRoaXMpOworICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5yZW1vdmVQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudCgqdGhpcyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CiAj
ZW5kaWYKQEAgLTIwNSw4ICsyMDYsNyBAQCB2b2lkIEhUTUxNZWRpYVNlc3Npb246OnNob3dQbGF5
YmFja1RhcmdlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBNZWRpYVNlc3Npb25NYW5h
Z2VyOjpzaGFyZWRNYW5hZ2VyKCkuc2V0Q3VycmVudFNlc3Npb24oKnRoaXMpOwotICAgIGVsZW1l
bnQuZG9jdW1lbnQoKS5zaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoZWxlbWVudCk7CisgICAgZWxl
bWVudC5kb2N1bWVudCgpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcigqdGhpcywgaXM8SFRNTFZp
ZGVvRWxlbWVudD4oZWxlbWVudCkpOwogfQogCiBib29sIEhUTUxNZWRpYVNlc3Npb246Omhhc1dp
cmVsZXNzUGxheWJhY2tUYXJnZXRzKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdApAQCAt
Mjc0LDI1ICsyNzQsMjAgQEAgdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpzZXRXaXJlbGVzc1ZpZGVv
UAogdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpzZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUxpc3RlbmVycyhjb25zdCBIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50LCBib29sIGhhc0xpc3Rl
bmVycykKIHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpzZXRIYXNQbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyAtIGhhc0xpc3RlbmVycyAlcyIsIGhhc0xpc3Rl
bmVycyA/ICJUUlVFIiA6ICJGQUxTRSIpOwotICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKLQot
ICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBoYXNMaXN0ZW5l
cnM7CiAKICNpZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworICAg
IG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBoYXNMaXN0ZW5lcnM7
CiAgICAgTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmNvbmZpZ3VyZVdpcmVM
ZXNzVGFyZ2V0TW9uaXRvcmluZygpOwogI2Vsc2UKLSAgICBlbGVtZW50LmRvY3VtZW50KCkuY29u
ZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7CisgICAgZWxlbWVudC5kb2N1bWVudCgp
LnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UoKnRoaXMsIGVsZW1lbnQu
bWVkaWFTdGF0ZSgpKTsKICNlbmRpZgogfQogCi12b2lkIEhUTUxNZWRpYVNlc3Npb246OmRpZENo
b29zZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmIGRldmljZSkKK3Zv
aWQgSFRNTE1lZGlhU2Vzc2lvbjo6c2V0UGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tU
YXJnZXQ+JiYgZGV2aWNlKQogewogICAgIG1fcGxheWJhY2tUYXJnZXQgPSBXVEY6Om1vdmUoZGV2
aWNlKTsKICAgICBjbGllbnQoKS5zZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCptX3BsYXliYWNr
VGFyZ2V0LmNvcHlSZWYoKSk7Ci0gICAgaWYgKG1fcGxheWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJv
dXRlKCkgJiYgTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmN1cnJlbnRTZXNz
aW9uKCkgPT0gdGhpcykKLSAgICAgICAgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOwot
ICAgIGVsc2UKLSAgICAgICAgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CiB9CiAKIHZv
aWQgSFRNTE1lZGlhU2Vzc2lvbjo6dGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZFRpbWVyRmlyZWQo
KQpAQCAtMzAwLDcgKzI5NSw3IEBAIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6dGFyZ2V0QXZhaWxh
YmlsaXQKICAgICBjbGllbnQoKS53aXJlbGVzc1JvdXRlc0F2YWlsYWJsZURpZENoYW5nZSgpOwog
fQogCi12b2lkIEhUTUxNZWRpYVNlc3Npb246OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxl
RGlkQ2hhbmdlKGJvb2wgaGFzVGFyZ2V0cykgY29uc3QKK3ZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6
ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCBoYXNUYXJnZXRzKQog
ewogICAgIGlmIChtX2hhc1BsYXliYWNrVGFyZ2V0cyA9PSBoYXNUYXJnZXRzKQogICAgICAgICBy
ZXR1cm47CkBAIC0zMTIsMTEgKzMwNyw2IEBAIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6ZXh0ZXJu
YWxPdXRwdXREZXYKICAgICAgICAgbV90YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGltZXIuc3Rh
cnRPbmVTaG90KDApOwogfQogCi1ib29sIEhUTUxNZWRpYVNlc3Npb246OnJlcXVpcmVzUGxheWJh
Y2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX2hhc1BsYXli
YWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzOwotfQotCiBib29sIEhUTUxNZWRpYVNlc3Np
b246OmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKSBjb25zdAogewogICAgIGlmICgh
bV9wbGF5YmFja1RhcmdldCB8fCAhbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKSkK
QEAgLTMzMywyMSArMzIzLDE2IEBAIGJvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6aXNQbGF5aW5nVG9X
aXJlbGUKICAgICByZXR1cm4gY2xpZW50KCkuaXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFy
Z2V0KCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6c3RhcnRQbGF5aW5nVG9QbGF5YmFj
a1RhcmdldCgpCit2b2lkIEhUTUxNZWRpYVNlc3Npb246OnNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KGJvb2wgc2hvdWxkUGxheSkKIHsKLSAgICBpZiAoIW1fcGxheWJhY2tUYXJnZXQgfHwg
IW1fcGxheWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGNsaWVudCgpLnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKKyAgICBtX3Nob3Vs
ZFBsYXlUb1BsYXliYWNrVGFyZ2V0ID0gc2hvdWxkUGxheTsKKyAgICBjbGllbnQoKS5zZXRTaG91
bGRQbGF5VG9QbGF5YmFja1RhcmdldChzaG91bGRQbGF5KTsKIH0KIAotdm9pZCBIVE1MTWVkaWFT
ZXNzaW9uOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQordm9pZCBIVE1MTWVkaWFTZXNz
aW9uOjptZWRpYVN0YXRlRGlkQ2hhbmdlKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQs
IE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKIHsKLSAgICBpZiAoIW1fcGxh
eWJhY2tUYXJnZXQgfHwgIW1fcGxheWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGNsaWVudCgpLnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgp
OwotfSAgICAKKyAgICBlbGVtZW50LmRvY3VtZW50KCkucGxheWJhY2tUYXJnZXRQaWNrZXJDbGll
bnRTdGF0ZURpZENoYW5nZSgqdGhpcywgc3RhdGUpOworfQogI2VuZGlmCiAKIE1lZGlhUGxheWVy
OjpQcmVsb2FkIEhUTUxNZWRpYVNlc3Npb246OmVmZmVjdGl2ZVByZWxvYWRGb3JFbGVtZW50KGNv
bnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CkBAIC0zODYsMTggKzM3MSwyNSBA
QCBib29sIEhUTUxNZWRpYVNlc3Npb246OnJlcXVpcmVzRnVsbHNjcmVlCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6YXBwbHlNZWRpYVBsYXllclJlc3RyaWN0
aW9ucyhjb25zdCBIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQordm9pZCBIVE1MTWVkaWFTZXNz
aW9uOjptZWRpYUVuZ2luZVVwZGF0ZWQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkK
IHsKLSAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjphcHBseU1lZGlhUGxheWVyUmVz
dHJpY3Rpb25zIik7CisgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhU2Vzc2lvbjo6bWVkaWFFbmdp
bmVVcGRhdGVkIik7CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAg
IHNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGVsZW1lbnQsIG1fcmVzdHJpY3Rpb25z
ICYgV2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOworICAgIGlmIChtX3BsYXliYWNrVGFy
Z2V0KQorICAgICAgICBjbGllbnQoKS5zZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCptX3BsYXli
YWNrVGFyZ2V0LmNvcHlSZWYoKSk7CisgICAgaWYgKG1fc2hvdWxkUGxheVRvUGxheWJhY2tUYXJn
ZXQpCisgICAgICAgIGNsaWVudCgpLnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KG1fc2hv
dWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZWxlbWVu
dCk7CiAjZW5kaWYKICAgICAKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyNlbmRpZgorCiBib29s
IEhUTUxNZWRpYVNlc3Npb246OmFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4oY29uc3QgSFRNTE1l
ZGlhRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBl
bGVtZW50LmRvY3VtZW50KCkuc2V0dGluZ3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhU2Vzc2lvbi5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYVNlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgSFRNTE1lZGlhU2Vzc2lvbihNZWRpYVNlc3Npb25DbGllbnQmKTsK
ICAgICB2aXJ0dWFsIH5IVE1MTWVkaWFTZXNzaW9uKCkgeyB9CiAKLSAgICB2b2lkIHJlZ2lzdGVy
V2l0aERvY3VtZW50KERvY3VtZW50Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyV2l0aERvY3VtZW50
KERvY3VtZW50Jik7CisgICAgdm9pZCByZWdpc3RlcldpdGhEb2N1bWVudChjb25zdCBIVE1MTWVk
aWFFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyV2l0aERvY3VtZW50KGNvbnN0IEhUTUxN
ZWRpYUVsZW1lbnQmKTsKIAogICAgIGJvb2wgcGxheWJhY2tQZXJtaXR0ZWQoY29uc3QgSFRNTE1l
ZGlhRWxlbWVudCYpIGNvbnN0OwogICAgIGJvb2wgZGF0YUxvYWRpbmdQZXJtaXR0ZWQoY29uc3Qg
SFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OwpAQCAtNTQsOSArNTQsOSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBwYWdlQWxsb3dzUGxheWJhY2tBZnRlclJlc3VtaW5nKGNvbnN0IEhUTUxNZWRpYUVsZW1l
bnQmKSBjb25zdDsKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAg
dm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpOwog
ICAgIGJvb2wgY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyhjb25zdCBIVE1MTWVkaWFF
bGVtZW50JikgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRl
ZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7Ci0gICAgdm9pZCBzaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpOwogICAgIGJvb2wgaGFzV2lyZWxl
c3NQbGF5YmFja1RhcmdldHMoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OwogCiAgICAg
Ym9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50
JikgY29uc3Q7CkBAIC02NiwxNSArNjYsMTUgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29s
IGNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIG1lZGlhU3RhdGVEaWRDaGFuZ2UoY29uc3QgSFRNTE1lZGlh
RWxlbWVudCYsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyk7CiAjZW5kaWYKIAogICAg
IGJvb2wgcmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjayhjb25zdCBIVE1MTWVkaWFF
bGVtZW50JikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbGxvd3NBbHRlcm5hdGVG
dWxsc2NyZWVuKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKICAgICBNZWRpYVBsYXll
cjo6UHJlbG9hZCBlZmZlY3RpdmVQcmVsb2FkRm9yRWxlbWVudChjb25zdCBIVE1MTWVkaWFFbGVt
ZW50JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5TWVkaWFQbGF5ZXJSZXN0cmljdGlvbnMoY29u
c3QgSFRNTE1lZGlhRWxlbWVudCYpOworICAgIHZvaWQgbWVkaWFFbmdpbmVVcGRhdGVkKGNvbnN0
IEhUTUxNZWRpYUVsZW1lbnQmKTsKIAogICAgIC8vIFJlc3RyaWN0aW9ucyB0byBtb2RpZnkgZGVm
YXVsdCBiZWhhdmlvcnMuCiAgICAgZW51bSBCZWhhdmlvclJlc3RyaWN0aW9uRmxhZ3MgewpAQCAt
MTAzLDEwICsxMDMsMTMgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tf
VEFSR0VUKQogICAgIHZvaWQgdGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZFRpbWVyRmlyZWQoKTsK
IAotICAgIC8vIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURp
ZENoYW5nZShib29sKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNQ
bGF5YmFja1RhcmdldFJvdXRlTW9uaXRvcmluZygpIGNvbnN0IG92ZXJyaWRlOworICAgIC8vIE1l
ZGlhUGxheWJhY2tUYXJnZXRDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxheWJhY2tUYXJn
ZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShib29sKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCkgb3Zl
cnJpZGU7CisjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCByZXF1aXJlc1BsYXli
YWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNQ
bGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVyczsgfQogI2VuZGlmCiAKICAgICBCZWhh
dmlvclJlc3RyaWN0aW9ucyBtX3Jlc3RyaWN0aW9uczsKQEAgLTExNCw5ICsxMTcsMTIgQEAgcHJp
dmF0ZToKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIG11dGFibGUg
VGltZXIgbV90YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGltZXI7CiAgICAgUmVmUHRyPE1lZGlh
UGxheWJhY2tUYXJnZXQ+IG1fcGxheWJhY2tUYXJnZXQ7Ci0gICAgYm9vbCBtX2hhc1BsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hvdWxk
UGxheVRvUGxheWJhY2tUYXJnZXQgeyBmYWxzZSB9OwogICAgIG11dGFibGUgYm9vbCBtX2hhc1Bs
YXliYWNrVGFyZ2V0cyB7IGZhbHNlIH07CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Ym9vbCBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzIHsgZmFsc2UgfTsK
KyNlbmRpZgogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9BdWRpb1Byb2R1Y2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9BdWRpb1Byb2R1Y2VyLmgJKHJl
dmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQXVkaW9Qcm9kdWNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvUHJvZHVjZXJfaAotI2RlZmluZSBBdWRp
b1Byb2R1Y2VyX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1Byb2R1Y2Vy
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNQbGF5aW5nQXVkaW8oKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkgPSAwOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB+QXVkaW9Qcm9kdWNlcigpIHsgfQotfTsKLQotfQotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIb3N0V2lu
ZG93LmgiCiAjaW5jbHVkZSAiTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCIKKyNpbmNsdWRlICJN
ZWRpYVByb2R1Y2VyLmgiCiAjaW5jbHVkZSAiUGFnZVRocm90dGxlci5oIgogI2luY2x1ZGUgIlBv
cHVwTWVudS5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgpAQCAtNDIzLDE0ICs0MjQs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nRm9y
RnJhbWVWaWV3KGNvbnN0IEZyYW1lVmlldyopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAg
ICBlbnVtIE1lZGlhU3RhdGUgewotICAgICAgICBJc05vdFBsYXlpbmcgPSAwLAotICAgICAgICBJ
c1BsYXlpbmdBdWRpbyA9IDEgPDwgMCwKLSAgICAgICAgSXNQbGF5aW5nVmlkZW8gPSAxIDw8IDEs
Ci0gICAgICAgIElzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2UgPSAxIDw8IDIsCi0gICAgfTsKLSAg
ICB0eXBlZGVmIHVuc2lnbmVkIE1lZGlhU3RhdGVGbGFnczsKLSAgICB2aXJ0dWFsIHZvaWQgaXNQ
bGF5aW5nTWVkaWFEaWRDaGFuZ2UoTWVkaWFTdGF0ZUZsYWdzKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgaXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UoTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdz
KSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlQWN0aXZpdHlTdGF0ZShQYWdlQWN0aXZp
dHlTdGF0ZTo6RmxhZ3MpIHsgfQogCkBAIC00NTIsOSArNDQ2LDEwIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlQXV0b0ZpbGxCdXR0b25DbGljayhIVE1MSW5wdXRFbGVtZW50Jikg
eyB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIHZpcnR1YWwg
dm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBi
b29sIC8qIGlzVmlkZW8gKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdGFydGluZ01vbml0b3Jp
bmdQbGF5YmFja1RhcmdldHMoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcE1vbml0b3JpbmdQ
bGF5YmFja1RhcmdldHMoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQodWludDY0X3QgLypjb250ZXh0SWQqLykgeyB9CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IC8qY29udGV4dElkKi8p
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIodWludDY0X3Qg
Lypjb250ZXh0SWQqLywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sIC8qIGlzVmlkZW8g
Ki8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRl
RGlkQ2hhbmdlKHVpbnQ2NF90IC8qY29udGV4dElkKi8sIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3Rh
dGVGbGFncykgeyB9CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9NZWRpYVByb2R1Y2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9N
ZWRpYVByb2R1Y2VyLmgJKHJldmlzaW9uIDE4MzA2OCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFn
ZS9BdWRpb1Byb2R1Y2VyLmg6MTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVBy
b2R1Y2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9Qcm9kdWNlcl9oCisj
ZGVmaW5lIEF1ZGlvUHJvZHVjZXJfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1
ZGlvUHJvZHVjZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdBdWRpbygp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKSA9IDA7CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5BdWRpb1Byb2R1Y2VyKCkgeyB9Cit9OworCit9CisK
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVByb2R1Y2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVByb2R1Y2VyLmgJKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFQcm9kdWNlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxOCArMjMsMjcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBBdWRp
b1Byb2R1Y2VyX2gKLSNkZWZpbmUgQXVkaW9Qcm9kdWNlcl9oCisjaWZuZGVmIE1lZGlhUHJvZHVj
ZXJfaAorI2RlZmluZSBNZWRpYVByb2R1Y2VyX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBBdWRpb1Byb2R1Y2VyIHsKK2NsYXNzIE1lZGlhUHJvZHVjZXIgewogcHVibGljOgotICAg
IHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdBdWRpbygpID0gMDsKKyAgICBlbnVtIE1lZGlhU3RhdGUg
eworICAgICAgICBJc05vdFBsYXlpbmcgPSAwLAorICAgICAgICBJc1BsYXlpbmdBdWRpbyA9IDEg
PDwgMCwKKyAgICAgICAgSXNQbGF5aW5nVmlkZW8gPSAxIDw8IDEsCisgICAgICAgIElzUGxheWlu
Z1RvRXh0ZXJuYWxEZXZpY2UgPSAxIDw8IDIsCisgICAgICAgIFJlcXVpcmVQbGF5YmFja1Rhcmdl
dE1vbml0b3JpbmcgPSAxIDw8IDMsCisgICAgfTsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIE1lZGlh
U3RhdGVGbGFnczsKKworICAgIHZpcnR1YWwgTWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkgPSAw
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+QXVkaW9Qcm9kdWNlcigpIHsgfQorICAgIHZp
cnR1YWwgfk1lZGlhUHJvZHVjZXIoKSB7IH0KIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw2IEBAIFBhZ2U6OlBhZ2UoUGFnZUNvbmZpZ3VyYXRp
b24mIHBhZ2VDb25maWcKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZSgqV1RGOjptb3ZlKHBhZ2VD
b25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUpKQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgLCBtX2lzQ2xvc2luZyhmYWxzZSkKLSAgICAs
IG1faXNQbGF5aW5nQXVkaW8oZmFsc2UpCiB7CiAgICAgc2V0VGltZXJUaHJvdHRsaW5nRW5hYmxl
ZChtX3ZpZXdTdGF0ZSAmIFZpZXdTdGF0ZTo6SXNWaXN1YWxseUlkbGUpOwogCkBAIC0xMTk5LDIw
ICsxMTk4LDE3IEBAIHZvaWQgUGFnZTo6ZW5hYmxlTGVnYWN5UHJpdmF0ZUJyb3dzaW5nKGIKIAog
dm9pZCBQYWdlOjp1cGRhdGVJc1BsYXlpbmdNZWRpYSgpCiB7Ci0gICAgYm9vbCBpc1BsYXlpbmdB
dWRpbyA9IGZhbHNlOworICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSA9
IE1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZzsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZt
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkg
ewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmlzUGxheWluZ0F1ZGlvKCkpIHsKLSAg
ICAgICAgICAgIGlzUGxheWluZ0F1ZGlvID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9CisgICAgICAgIHN0YXRlIHw9IGZyYW1lLT5kb2N1bWVudCgpLT5tZWRpYVN0YXRlKCk7
CiAgICAgfQogCi0gICAgaWYgKGlzUGxheWluZ0F1ZGlvID09IG1faXNQbGF5aW5nQXVkaW8pCisg
ICAgaWYgKHN0YXRlID09IG1fbWVkaWFTdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9p
c1BsYXlpbmdBdWRpbyA9IGlzUGxheWluZ0F1ZGlvOworICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRl
OwogCi0gICAgY2hyb21lKCkuY2xpZW50KCkuaXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UobV9pc1Bs
YXlpbmdBdWRpbyA/IENocm9tZUNsaWVudDo6SXNQbGF5aW5nQXVkaW8gOiBDaHJvbWVDbGllbnQ6
OklzTm90UGxheWluZyk7CisgICAgY2hyb21lKCkuY2xpZW50KCkuaXNQbGF5aW5nTWVkaWFEaWRD
aGFuZ2Uoc3RhdGUpOwogfQogCiB2b2lkIFBhZ2U6OnNldE11dGVkKGJvb2wgbXV0ZWQpCkBAIC0x
NjgyLDUzICsxNjc4LDQ5IEBAIHZvaWQgUGFnZTo6c2V0U2Vzc2lvbklEKFNlc3Npb25JRCBzZXNz
aW8KIH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi1SZWZQdHI8TWVk
aWFQbGF5YmFja1RhcmdldD4gUGFnZTo6cGxheWJhY2tUYXJnZXQoKSBjb25zdAordm9pZCBQYWdl
OjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0g
ICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBj
aHJvbWUoKS5jbGllbnQoKS5hZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChjb250ZXh0SWQp
OworfQogCi0gICAgcmV0dXJuIG1fcGxheWJhY2tUYXJnZXQuY29weVJlZigpOwordm9pZCBQYWdl
OjpyZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCit7
CisgICAgY2hyb21lKCkuY2xpZW50KCkucmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQo
Y29udGV4dElkKTsKIH0KIAotdm9pZCBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uLCBib29sIGlzVmlkZW8pCit2b2lkIFBhZ2U6
OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcih1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBsb2NhdGlvbiwgYm9vbCBpc1ZpZGVvKQogewogI2lmIFBMQVRGT1JNKElP
UykKICAgICAvLyBGSVhNRTogcmVmYWN0b3IgaU9TIGltcGxlbWVudGF0aW9uLgorICAgIFVOVVNF
RF9QQVJBTShjb250ZXh0SWQpOwogICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CiAgICAgY2hy
b21lKCkuY2xpZW50KCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGlzVmlkZW8pOwogI2Vsc2UK
LSAgICBjaHJvbWUoKS5jbGllbnQoKS5zaG93UGxheWJhY2tUYXJnZXRQaWNrZXIobG9jYXRpb24s
IGlzVmlkZW8pOworICAgIGNocm9tZSgpLmNsaWVudCgpLnNob3dQbGF5YmFja1RhcmdldFBpY2tl
cihjb250ZXh0SWQsIGxvY2F0aW9uLCBpc1ZpZGVvKTsKICNlbmRpZgogfQogCi12b2lkIFBhZ2U6
OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmIHRhcmdl
dCkKK3ZvaWQgUGFnZTo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1
aW50NjRfdCBjb250ZXh0SWQsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkK
IHsKLSAgICBtX3BsYXliYWNrVGFyZ2V0ID0gV1RGOjptb3ZlKHRhcmdldCk7Ci0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kaWRDaG9vc2VQbGF5
YmFja1RhcmdldCgqbV9wbGF5YmFja1RhcmdldC5jb3B5UmVmKCkpOworICAgIGNocm9tZSgpLmNs
aWVudCgpLnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UoY29udGV4dElk
LCBzdGF0ZSk7CiB9CiAKLXZvaWQgUGFnZTo6cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRD
aGFuZ2UoYm9vbCBhdmFpbGFibGUpCit2b2lkIFBhZ2U6OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2
NF90IGNvbnRleHRJZCwgUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgdGFyZ2V0KQogewotICAg
IG1faGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldCA9IGF2YWlsYWJsZTsKICAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnBsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5RGlkQ2hhbmdlKGF2YWlsYWJsZSk7CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgp
LT5zZXRQbGF5YmFja1RhcmdldChjb250ZXh0SWQsIHRhcmdldC5jb3B5UmVmKCkpOwogfQogCi12
b2lkIFBhZ2U6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpCit2b2lkIFBhZ2U6
OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBhdmFpbGFibGUpCiB7Ci0gICAgYm9vbCBtb25pdG9yaW5nUmVxdWlyZWQgPSBmYWxzZTsK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50
KCktPnJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSkgewotICAgICAgICAg
ICAgbW9uaXRvcmluZ1JlcXVpcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQorICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgICAgICBmcmFtZS0+ZG9j
dW1lbnQoKS0+cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoY29udGV4dElkLCBh
dmFpbGFibGUpOworfQogCi0gICAgaWYgKG1vbml0b3JpbmdSZXF1aXJlZCkKLSAgICAgICAgY2hy
b21lKCkuY2xpZW50KCkuc3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7Ci0gICAg
ZWxzZQotICAgICAgICBjaHJvbWUoKS5jbGllbnQoKS5zdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cygpOwordm9pZCBQYWdlOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRf
dCBjbGllbnRJZCwgYm9vbCBzaG91bGRQbGF5KQoreworICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KQorICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJn
ZXQoY2xpZW50SWQsIHNob3VsZFBsYXkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIK
ICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgor
I2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKICNpbmNsdWRlICJQYWdlVGhyb3R0bGVyLmgiCiAj
aW5jbHVkZSAiUGFnZVZpc2liaWxpdHlTdGF0ZS5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24uaCIK
QEAgLTQyMiwxOSArNDIzLDIwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVu
YWJsZUxlZ2FjeVByaXZhdGVCcm93c2luZyhib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwog
ICAgIGJvb2wgdXNlc0VwaGVtZXJhbFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25J
RC5pc0VwaGVtZXJhbCgpOyB9CiAKLSAgICBib29sIGlzUGxheWluZ0F1ZGlvKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1BsYXlpbmdBdWRpbzsgfQorICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVG
bGFncyBtZWRpYVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0YXRlOyB9CiAgICAgdm9p
ZCB1cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbXV0ZWQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE11dGVkKGJvb2wpOwog
CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICB2b2lkIHNob3dQbGF5
YmFja1RhcmdldFBpY2tlcihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wpOwotICAgIGJv
b2wgaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzV2lyZWxl
c3NQbGF5YmFja1RhcmdldDsgfQotICAgIFJlZlB0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBwbGF5
YmFja1RhcmdldCgpIGNvbnN0OwotICAgIHZvaWQgY29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25p
dG9yaW5nKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZENob29zZVBsYXliYWNrVGFy
Z2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGJvb2wpOworICAgIHZvaWQgYWRk
UGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QpOworICAgIHZvaWQgcmVtb3ZlUGxh
eWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QpOworICAgIHZvaWQgc2hvd1BsYXliYWNr
VGFyZ2V0UGlja2VyKHVpbnQ2NF90LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wpOwor
ICAgIHZvaWQgcGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRf
dCwgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0UGxheWJhY2tUYXJnZXQodWludDY0X3QsIFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0
PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
RGlkQ2hhbmdlKHVpbnQ2NF90LCBib29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNo
b3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90LCBib29sKTsKICNlbmRpZgogCiBwcml2
YXRlOgpAQCAtNTg5LDE0ICs1OTEsOSBAQCBwcml2YXRlOgogCiAgICAgU2Vzc2lvbklEIG1fc2Vz
c2lvbklEOwogCi0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBSZWZQ
dHI8TWVkaWFQbGF5YmFja1RhcmdldD4gbV9wbGF5YmFja1RhcmdldDsKLSAgICBib29sIG1faGFz
V2lyZWxlc3NQbGF5YmFja1RhcmdldCB7IGZhbHNlIH07Ci0jZW5kaWYKLQogICAgIGJvb2wgbV9p
c0Nsb3Npbmc7CiAKLSAgICBib29sIG1faXNQbGF5aW5nQXVkaW87CisgICAgTWVkaWFQcm9kdWNl
cjo6TWVkaWFTdGF0ZUZsYWdzIG1fbWVkaWFTdGF0ZSB7IE1lZGlhUHJvZHVjZXI6OklzTm90UGxh
eWluZyB9OwogfTsKIAogaW5saW5lIFBhZ2VHcm91cCYgUGFnZTo6Z3JvdXAoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgJKHJldmlzaW9uIDE4
MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTMgQEAKICNpZm5kZWYgTWVkaWFTZXNzaW9uX2gK
ICNkZWZpbmUgTWVkaWFTZXNzaW9uX2gKIAorI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKICNp
bmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkKLSNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50LmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQxLDcgKzQyLDcgQEAgY2xhc3MgTWVkaWFTZXNzaW9uQ2xpZW50OwogCiBj
bGFzcyBNZWRpYVNlc3Npb24KICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQot
ICAgIDogcHVibGljIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQKKyAgICA6IHB1Ymxp
YyBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50CiAjZW5kaWYKIHsKIHB1YmxpYzoKQEAgLTExOSwx
NCArMTIwLDE2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5VG9XaXJlbGVz
c1BsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSB7IH0KIAog
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgLy8gTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBkaWRDaG9vc2VQbGF5YmFja1Rh
cmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wpIGNvbnN0
IG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91
dGVNb25pdG9yaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAvLyBN
ZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIHNldFBsYXliYWNrVGFy
Z2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgb3ZlcnJp
ZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJv
b2wpIG92ZXJyaWRlIHsgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogI2VuZGlmCiAKIHByb3RlY3RlZDoKQEAgLTE3Miw4ICsxNzUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoUmVmPE1l
ZGlhUGxheWJhY2tUYXJnZXQ+JiYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5VG9XaXJl
bGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCkgeyB9
CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5NZWRpYVNlc3Npb25DbGllbnQoKSB7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lv
bk1hbmFnZXIuY3BwCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDI1
ICsxNjYsNiBAQCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpTZXNzaW9uUmVzdHJpY3Rpb25zCiAgICAg
cmV0dXJuIG1fcmVzdHJpY3Rpb25zW3R5cGVdOwogfQogCi1ib29sIE1lZGlhU2Vzc2lvbk1hbmFn
ZXI6OnNlc3Npb25TaG91bGRCZWdpblBsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoTWVk
aWFTZXNzaW9uJiBzZXNzaW9uKSBjb25zdAotewotICAgIGlmICghc2Vzc2lvbi5jYW5QbGF5VG9X
aXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChzZXNzaW9uLmlzUGxheWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8TWVkaWFTZXNzaW9uKj4gc2Vzc2lvbnMgPSBtX3Nl
c3Npb25zOwotICAgIGZvciAoYXV0byogb25lU2Vzc2lvbiA6IHNlc3Npb25zKSB7Ci0gICAgICAg
IGlmIChvbmVTZXNzaW9uID09ICZzZXNzaW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChvbmVTZXNzaW9uLT5pc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogYm9vbCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzZXNzaW9uV2lsbEJlZ2luUGxheWJhY2soTWVk
aWFTZXNzaW9uJiBzZXNzaW9uKQogewogICAgIExPRyhNZWRpYSwgIk1lZGlhU2Vzc2lvbk1hbmFn
ZXI6OnNlc3Npb25XaWxsQmVnaW5QbGF5YmFjayAtICVwIiwgJnNlc3Npb24pOwpAQCAtMjA0LDIw
ICsxODUsMTQgQEAgYm9vbCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzZXNzaW9uV2lsbEJlZwogICAg
IGlmIChtX2ludGVycnVwdGVkKQogICAgICAgICBlbmRJbnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9u
OjpOb0ZsYWdzKTsKIAotICAgIGJvb2wgc2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQgPSBzZXNz
aW9uU2hvdWxkQmVnaW5QbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KHNlc3Npb24pOwog
ICAgIFZlY3RvcjxNZWRpYVNlc3Npb24qPiBzZXNzaW9ucyA9IG1fc2Vzc2lvbnM7CiAgICAgZm9y
IChhdXRvKiBvbmVTZXNzaW9uIDogc2Vzc2lvbnMpIHsKICAgICAgICAgaWYgKG9uZVNlc3Npb24g
PT0gJnNlc3Npb24pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNob3VsZFBs
YXlUb1BsYXliYWNrVGFyZ2V0KQotICAgICAgICAgICAgb25lU2Vzc2lvbi0+c3RvcFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KCk7CiAgICAgICAgIGlmIChvbmVTZXNzaW9uLT5tZWRpYVR5cGUoKSA9
PSBzZXNzaW9uVHlwZSAmJiByZXN0cmljdGlvbnMgJiBDb25jdXJyZW50UGxheWJhY2tOb3RQZXJt
aXR0ZWQpCiAgICAgICAgICAgICBvbmVTZXNzaW9uLT5wYXVzZVNlc3Npb24oKTsKICAgICB9CiAK
LSAgICBpZiAoc2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpCi0gICAgICAgIHNlc3Npb24uc3Rh
cnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOwotCiAgICAgdXBkYXRlU2Vzc2lvblN0YXRlKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yOTQsNyArMjY5LDcgQEAgYm9vbCBNZWRpYVNlc3Np
b25NYW5hZ2VyOjpzZXNzaW9uUmVzdHJpYwogCiBib29sIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNl
c3Npb25DYW5Mb2FkTWVkaWEoY29uc3QgTWVkaWFTZXNzaW9uJiBzZXNzaW9uKSBjb25zdAogewot
ICAgIHJldHVybiBzZXNzaW9uLnN0YXRlKCkgPT0gTWVkaWFTZXNzaW9uOjpQbGF5aW5nIHx8ICFz
ZXNzaW9uLmlzSGlkZGVuKCk7CisgICAgcmV0dXJuIHNlc3Npb24uc3RhdGUoKSA9PSBNZWRpYVNl
c3Npb246OlBsYXlpbmcgfHwgIXNlc3Npb24uaXNIaWRkZW4oKSB8fCBzZXNzaW9uLmlzUGxheWlu
Z1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpOwogfQogCiB2b2lkIE1lZGlhU2Vzc2lvbk1hbmFn
ZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyQmFja2dyb3VuZCgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uTWFuYWdlci5oCShy
ZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNl
c3Npb25NYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgTWVk
aWFTZXNzaW9uOwogY2xhc3MgUmVtb3RlQ29tbWFuZExpc3RlbmVyOwogCiBjbGFzcyBNZWRpYVNl
c3Npb25NYW5hZ2VyIDogcHJpdmF0ZSBSZW1vdGVDb21tYW5kTGlzdGVuZXJDbGllbnQsIHByaXZh
dGUgU3lzdGVtU2xlZXBMaXN0ZW5lcjo6Q2xpZW50LCBwcml2YXRlIEF1ZGlvSGFyZHdhcmVMaXN0
ZW5lcjo6Q2xpZW50IHsKKwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBNZWRpYVNlc3Npb25NYW5hZ2VyJiBzaGFyZWRNYW5h
Z2VyKCk7CkBAIC04MCw2ICs4MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBzZXNz
aW9uQ2FuTG9hZE1lZGlhKGNvbnN0IE1lZGlhU2Vzc2lvbiYpIGNvbnN0OwogCisKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgdmlydHVhbCB2b2lkIGNvbmZpZ3VyZVdpcmVMZXNzVGFyZ2V0TW9uaXRv
cmluZygpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNXaXJlbGVzc1RhcmdldHNBdmFpbGFibGUo
KSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTAxLDcgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEludGVybmFsczsKIAogICAgIHZvaWQgdXBkYXRlU2Vzc2lvblN0YXRlKCk7Ci0g
ICAgYm9vbCBzZXNzaW9uU2hvdWxkQmVnaW5QbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0
KE1lZGlhU2Vzc2lvbiYpIGNvbnN0OwogCiAgICAgLy8gUmVtb3RlQ29tbWFuZExpc3RlbmVyQ2xp
ZW50CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZW1vdGVDb250
cm9sQ29tbWFuZChNZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5kVHlwZSkgb3ZlcnJp
ZGU7CkBAIC0xMTYsMTIgKzExNywxNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzeXN0
ZW1EaWRXYWtlKCkgb3ZlcnJpZGU7CiAKICAgICBTZXNzaW9uUmVzdHJpY3Rpb25zIG1fcmVzdHJp
Y3Rpb25zW01lZGlhU2Vzc2lvbjo6V2ViQXVkaW8gKyAxXTsKLQogICAgIFZlY3RvcjxNZWRpYVNl
c3Npb24qPiBtX3Nlc3Npb25zOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUNvbW1hbmRM
aXN0ZW5lcj4gbV9yZW1vdGVDb21tYW5kTGlzdGVuZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN5
c3RlbVNsZWVwTGlzdGVuZXI+IG1fc3lzdGVtU2xlZXBMaXN0ZW5lcjsKICAgICBSZWZQdHI8QXVk
aW9IYXJkd2FyZUxpc3RlbmVyPiBtX2F1ZGlvSGFyZHdhcmVMaXN0ZW5lcjsKKworI2lmIEVOQUJM
RShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCisgICAgUmVmUHRy
PE1lZGlhUGxheWJhY2tUYXJnZXQ+IG1fcGxheWJhY2tUYXJnZXQ7CisgICAgYm9vbCBtX2NhblBs
YXlUb1RhcmdldCB7IGZhbHNlIH07CisjZW5kaWYKKwogICAgIGJvb2wgbV9pbnRlcnJ1cHRlZCB7
IGZhbHNlIH07CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oCShyZXZpc2lvbiAx
ODMwNjgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJh
Y2tUYXJnZXRQaWNrZXJDbGllbnQuaDoxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudF9oCisjZGVmaW5lIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRfaAor
CisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKworI2luY2x1ZGUgIk1lZGlh
UGxheWJhY2tUYXJnZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBs
YXliYWNrVGFyZ2V0OworCitjbGFzcyBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlh
UGxheWJhY2tUYXJnZXQ+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxPdXRwdXRE
ZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBi
b29sIHJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSBjb25zdCA9IDA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKQorCisjZW5kaWYgLy8gTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXli
YWNrVGFyZ2V0Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oCSh3b3JraW5nIGNvcHkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIzICsyOSwyMyBAQAogI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpCiAKICNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0LmgiCisj
aW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IE1lZGlhUGxheWJhY2tUYXJnZXQ7CiAKLWNsYXNzIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJD
bGllbnQgeworY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldENsaWVudCB7CiBwdWJsaWM6Ci0gICAg
dmlydHVhbCB+TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCgpIHsgfQorICAgIHZpcnR1
YWwgfk1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBk
aWRDaG9vc2VQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShi
b29sKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNQbGF5YmFja1Rhcmdl
dFJvdXRlTW9uaXRvcmluZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxheWJh
Y2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChib29sKSA9IDA7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKQogCi0jZW5kaWYgLy8gTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudF9oCisjZW5kaWYgLy8gTWVkaWFQbGF5YmFja1RhcmdldENsaWVudF9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyLmNwcAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDE5ICs0MywxNiBAQCBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjp+
TWVkaWFQbGF5YmFjCiB2b2lkIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnNob3dQbGF5YmFj
a1RhcmdldFBpY2tlcihjb25zdCBGbG9hdFJlY3QmLCBib29sKQogewogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybjsKIH0KIAogdm9pZCBNZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyOjpzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKQogewogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybjsKIH0KIAogdm9pZCBNZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyOjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpCiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5D
bGllbnQoKSB7IH0KIAogICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZENob29z
ZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4m
JikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFi
bGVEaWRDaGFuZ2UoYm9vbCkgPSAwOwogCiAgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQuaAkocmV2aXNpb24gMTgzMDY4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRfaAotI2RlZmluZSBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50X2gKLQotI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCi0KLSNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsKLQotY2xhc3MgTWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+TWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRp
ZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJv
b2wpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1BsYXliYWNrVGFyZ2V0
Um91dGVNb25pdG9yaW5nKCkgY29uc3QgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLQotI2VuZGlm
IC8vIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkocmV2aXNpb24gMTgz
MDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04ODgsMTQgKzg4OCw5IEBAIHZvaWQgTWVkaWFQbGF5ZXI6OnNl
dFdpcmVsZXNzUGxheWJhY2tUYXIKICAgICBtX3ByaXZhdGUtPnNldFdpcmVsZXNzUGxheWJhY2tU
YXJnZXQoV1RGOjptb3ZlKGRldmljZSkpOwogfQogCi12b2lkIE1lZGlhUGxheWVyOjpzdGFydFBs
YXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3ZvaWQgTWVkaWFQbGF5ZXI6OnNldFNob3VsZFBsYXlU
b1BsYXliYWNrVGFyZ2V0KGJvb2wgc2hvdWxkUGxheSkKIHsKLSAgICBtX3ByaXZhdGUtPnN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllcjo6c3RvcFBs
YXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKLXsKLSAgICBtX3ByaXZhdGUtPnN0b3BQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCgpOworICAgIG1fcHJpdmF0ZS0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tU
YXJnZXQoc2hvdWxkUGxheSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00ODMsOCArNDgzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNQbGF5aW5nVG9XaXJl
bGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNr
VGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKTsKIAotICAgIHZvaWQgc3RhcnRQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCgpOwotICAgIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFy
Z2V0KCk7CisgICAgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChib29sKTsKICNl
bmRpZgogCiAgICAgZG91YmxlIG1pbkZhc3RSZXZlcnNlUmF0ZSgpIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2
YXRlLmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsOCArMTczLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tU
YXJnZXQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRXaXJlbGVzc1Bs
YXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSB7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChib29sKSB7IH0KICNlbmRpZgogCiAjaWYgVVNF
KE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9X
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmgiCisK
KyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQor
CisjaW5jbHVkZSAiTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5oIgorI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYk1lZGlhU2Vz
c2lvbk1hbmFnZXImIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OnNpbmdsZXRvbigpCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM+IHNoYXJl
ZE1hbmFnZXI7CisgICAgcmV0dXJuIHNoYXJlZE1hbmFnZXI7Cit9CisKK1dlYk1lZGlhU2Vzc2lv
bk1hbmFnZXJNYWM6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMoKQorICAgIDogV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlcigpCit7Cit9CisKK1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6On5XZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyTWFjKCkKK3sKK30KKworV2ViQ29yZTo6TWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlciYgV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6dGFyZ2V0UGlja2VyKCkKK3sK
KyAgICBpZiAoIW1fdGFyZ2V0UGlja2VyKQorICAgICAgICBtX3RhcmdldFBpY2tlciA9IE1lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXJNYWM6OmNyZWF0ZSgqdGhpcyk7CisKKyAgICByZXR1cm4gKm1f
dGFyZ2V0UGlja2VyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL1dlYk1l
ZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjX2gK
KyNkZWZpbmUgV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hY19oCisKKyNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiV2ViTWVk
aWFTZXNzaW9uTWFuYWdlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdlYk1l
ZGlhU2Vzc2lvbk1hbmFnZXJNYWMgOiBwdWJsaWMgV2ViTWVkaWFTZXNzaW9uTWFuYWdlciB7Cisg
ICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM+
OworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyJiBzaW5nbGV0b24oKTsKKworcHJpdmF0ZToKKyAgICBXZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
TWFjKCk7CisgICAgdmlydHVhbCB+V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYygpOworCisgICAg
dmlydHVhbCBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyJiB0YXJnZXRQaWNrZXIo
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyPiBtX3RhcmdldFBpY2tlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisKKyNlbmRpZiAvLyBXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyTWFjX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmgJKHJldmlzaW9uIDE4MzA2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
NyBAQCBwcml2YXRlOgogICAgIFJ1bkxvb3A6OlRpbWVyPE1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJNYWM+IG1fZGV2aWNlQ2hhbmdlVGltZXI7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
YmFja1RhcmdldFBpY2tlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBA
IHZvaWQgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYzo6Y3VycmUKICAgICBpZiAoIWRldmlj
ZVBpY2tlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jbGllbnQtPmRpZENob29zZVBsYXli
YWNrVGFyZ2V0KFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRNYWM6OmNyZWF0ZShbZGV2aWNl
UGlja2VyIG91dHB1dENvbnRleHRdKSk7CisgICAgbV9jbGllbnQtPnNldFBsYXliYWNrVGFyZ2V0
KFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRNYWM6OmNyZWF0ZShbZGV2aWNlUGlja2VyIG91
dHB1dENvbnRleHRdKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYzo6
c3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDLmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDggKzI4Myw3IEBAIHByaXZhdGU6CiAKICNpZiBFTkFC
TEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIHZpcnR1
YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0
PiYmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rh
cmdldCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tU
YXJnZXQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUGxheVRvUGxheWJh
Y2tUYXJnZXQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGlzUGxheWluZ1RvV2ly
ZWxlc3NQbGF5YmFja1RhcmdldCgpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5t
bQkod29ya2luZyBjb3B5KQpAQCAtOTQyLDExICs5NDIsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKICAgICB1cGRhdGVEaXNhYmxlRXh0ZXJuYWxQbGF5YmFjaygpOwogICAgIFttX2F2UGxheWVy
LmdldCgpIHNldEFsbG93c0V4dGVybmFsUGxheWJhY2s6bV9hbGxvd3NXaXJlbGVzc1ZpZGVvUGxh
eWJhY2tdOwotCi0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAobV9vdXRwdXRDb250ZXh0KQot
ICAgICAgICBtX2F2UGxheWVyLmdldCgpLm91dHB1dENvbnRleHQgPSBtX291dHB1dENvbnRleHQu
Z2V0KCk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgaWYgKHBsYXllcigpLT5jbGllbnQoKS5tZWRp
YVBsYXllcklzVmlkZW8oKSkKQEAgLTI3ODUsMzUgKzI3ODAsMjQgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoJXApIC0gdGFy
Z2V0ID0gJXAiLCB0aGlzLCBtX291dHB1dENvbnRleHQuZ2V0KCkpOwogCiAgICAgaWYgKCFtX291
dHB1dENvbnRleHQgfHwgIW1fb3V0cHV0Q29udGV4dC5nZXQoKS5kZXZpY2VOYW1lKQotICAgICAg
ICBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKKyAgICAgICAgc2V0U2hvdWxkUGxheVRv
UGxheWJhY2tUYXJnZXQoZmFsc2UpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rhcmdl
dChib29sIHNob3VsZFBsYXkpCiB7CiAgICAgaWYgKCFtX2F2UGxheWVyKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoW21fYXZQbGF5ZXIuZ2V0KCkub3V0cHV0Q29udGV4dCBpc0VxdWFsOm1f
b3V0cHV0Q29udGV4dC5nZXQoKV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldERlbGF5Q2Fs
bGJhY2tzKHRydWUpOwotICAgIG1fYXZQbGF5ZXIuZ2V0KCkub3V0cHV0Q29udGV4dCA9IG1fb3V0
cHV0Q29udGV4dC5nZXQoKTsKLSAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Ci0KLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzdGFydFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdldCA9ICVwIiwgdGhpcywgbV9hdlBsYXllci5n
ZXQoKS5vdXRwdXRDb250ZXh0KTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQotewotICAgIGlmICghbV9h
dlBsYXllcikKKyAgICBBVk91dHB1dENvbnRleHQgKm5ld0NvbnRleHQgPSBzaG91bGRQbGF5ID8g
bV9vdXRwdXRDb250ZXh0LmdldCgpIDogbmlsOworICAgIEFWT3V0cHV0Q29udGV4dCAqY3VycmVu
dENvbnRleHQgPSBtX2F2UGxheWVyLmdldCgpLm91dHB1dENvbnRleHQ7CisgICAgaWYgKCghbmV3
Q29udGV4dCAmJiAhY3VycmVudENvbnRleHQpIHx8IFtjdXJyZW50Q29udGV4dCBpc0VxdWFsOm5l
d0NvbnRleHRdKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVl
KTsKLSAgICAvLyBGSVhNRTogdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIHJkYXI6
Ly8yMDMzNTIxNyBoYXMgYmVlbiBmaXhlZC4KLSAgICAvLyBtX2F2UGxheWVyLmdldCgpLm91dHB1
dENvbnRleHQgPSBuaWw7CisgICAgbV9hdlBsYXllci5nZXQoKS5vdXRwdXRDb250ZXh0ID0gbmV3
Q29udGV4dDsKICAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7CiAKLSAgICBMT0coTWVkaWEs
ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzdG9wUGxheWluZ1RvUGxheWJh
Y2tUYXJnZXQoJXApIC0gdGFyZ2V0ID0gJXAiLCB0aGlzLCBtX2F2UGxheWVyLmdldCgpLm91dHB1
dENvbnRleHQpOworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdldCA9ICVwLCBw
bGF5aW5nIHRvIHRhcmdldCA9ICVzIiwgdGhpcywgbV9hdlBsYXllci5nZXQoKS5vdXRwdXRDb250
ZXh0LCBib29sU3RyaW5nKHNob3VsZFBsYXkpKTsKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjppc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsOSArMTc0
LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAg
IHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KFJlZjxN
ZWRpYVBsYXliYWNrVGFyZ2V0PiYmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1Rv
UGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHRvZ2dsZVBsYXlpbmdUb1BsYXli
YWNrVGFyZ2V0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFy
Z2V0KGJvb2wpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2b2lkIGVuc3VyZUxheWVyKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTgyMCwyNCAr
ODIwLDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmoKICAgICBt
X3BsYXliYWNrVGFyZ2V0ID0gV1RGOjptb3ZlKHRhcmdldCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1Rhcmdl
dCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0U2hvdWxk
UGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCBzaG91bGRQbGF5VG9UYXJnZXQpCiB7CiAgICAgYm9v
bCBvbGRTdXBwb3J0ZWQgPSBtX2N1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkOwotICAg
IG1fY3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQgPSAhbV9wbGF5YmFja1RhcmdldCB8
fCAhbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKTsKKyAgICBtX2N1cnJlbnRQbGF5
YmFja1RhcmdldElzU3VwcG9ydGVkID0gIXNob3VsZFBsYXlUb1RhcmdldDsKIAogICAgIGlmICht
X3BsYXllciAmJiBvbGRTdXBwb3J0ZWQgIT0gbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBv
cnRlZCkKICAgICAgICAgbV9wbGF5ZXItPmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3ND
aGFuZ2VkKCk7CiB9Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKLXsKLSAgICB0b2dnbGVQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKLXsKLSAgICB0b2dnbGVQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCgpOwotfQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXll
clByaXZhdGVRVEtpdC5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTgyLDggKzE4Miw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkKICAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBw
b3J0ZWQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NQbGF5
YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJik7Ci0gICAgdmlydHVhbCB2b2lk
IHN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wpIG92ZXJyaWRlOwogICAgIHZv
aWQgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE1NTQsMjQgKzE1NTQsMTQgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6c2V0V2lyZWxlcwogICAgIG1fcGxheWJhY2tUYXJnZXQgPSBXVEY6Om1vdmUodGFy
Z2V0KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6dG9nZ2xlUGxheWluZ1Rv
UGxheWJhY2tUYXJnZXQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0U2hvdWxk
UGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCBzaG91bGRQbGF5VG9UYXJnZXQpCiB7CiAgICAgYm9v
bCBvbGRTdXBwb3J0ZWQgPSBtX2N1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkOwotICAg
IG1fY3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQgPSAhbV9wbGF5YmFja1RhcmdldCB8
fCAhbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKTsKKyAgICBtX2N1cnJlbnRQbGF5
YmFja1RhcmdldElzU3VwcG9ydGVkID0gIXNob3VsZFBsYXlUb1RhcmdldDsKIAogICAgIGlmICht
X3BsYXllciAmJiBvbGRTdXBwb3J0ZWQgIT0gbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBv
cnRlZCkKICAgICAgICAgbV9wbGF5ZXItPmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3ND
aGFuZ2VkKCk7CiB9Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnN0YXJ0UGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQoKQotewotICAgIHRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0
KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnN0b3BQbGF5aW5nVG9QbGF5
YmFja1RhcmdldCgpCi17Ci0gICAgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKLX0K
ICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NDIsNyArMjY0Miw3IEBAIGJv
b2wgSW50ZXJuYWxzOjppc1BhZ2VQbGF5aW5nQXVkaW8oKQogICAgIGlmICghZG9jdW1lbnQgfHwg
IWRvY3VtZW50LT5wYWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBk
b2N1bWVudC0+cGFnZSgpLT5pc1BsYXlpbmdBdWRpbygpOworICAgIHJldHVybiAhIShkb2N1bWVu
dC0+cGFnZSgpLT5tZWRpYVN0YXRlKCkgJiBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdBdWRpbyk7
CiB9CiAKIFJlZlB0cjxGaWxlPiBJbnRlcm5hbHM6OmNyZWF0ZUZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMDc4KQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTUtMDQtMjEgIEVy
aWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gVXNl
IG9uZSBwbGF5YmFjayB0YXJnZXQgZm9yIGFsbCB3ZWIgcHJvY2Vzc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQwMDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFdmVyeSBXZWJQYWdlUHJveHkgdXNl
cyB0aGUgV2ViTWVkaWFTZXNzaW9uTWFuYWdlciBzaW5nbGV0b24gdG8gdGFsayB0byB0aGUgcGxh
eWJhY2sgdGFyZ2V0CisgICAgICAgIHBpY2tlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9QYWdl
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpyZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
Ojppc1BsYXlpbmdNZWRpYURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6YWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFBsYXliYWNrVGFyZ2V0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpleHRlcm5hbE91dHB1dERldmljZUF2
YWlsYWJsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U2hv
dWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmRldmljZVBpY2tlclByb3h5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDaG9vc2VQbGF5YmFj
a1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmlzUGxheWluZ0F1ZGlvKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWVkaWFTZXNzaW9u
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQbGF5YmFj
a1RhcmdldFBpY2tlcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJNZWRp
YVNlc3Npb25NYW5hZ2VyTWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlh
U2Vzc2lvbk1hbmFnZXJNYWM6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlh
U2Vzc2lvbk1hbmFnZXJNYWM6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjOjp+V2ViTWVkaWFTZXNzaW9uTWFuYWdl
ck1hYyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OnRhcmdl
dFBpY2tlcik6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
TWFjLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmlzUGxheWluZ01lZGlhRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjphZGRQbGF5YmFja1Rhcmdl
dFBpY2tlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cmVtb3Zl
UGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVD
bGllbnQ6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNo
cm9tZUNsaWVudDo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c3RhcnRpbmdNb25pdG9yaW5nUGxheWJh
Y2tUYXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojpz
dG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhOjpkaXNwYXRjaEFmdGVyRW5zdXJpbmdVcGRhdGVkU2Nyb2xsUG9z
aXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxheWJhY2tUYXJnZXRTZWxlY3RlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJn
ZXQpOgorCiAyMDE1LTA0LTIxICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+
CiAKICAgICAgICAgRml4IGJsb2NrIHNpZ25hdHVyZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDYgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0VkaXRvckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAKLSNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotI2luY2x1ZGUgPFdlYkNv
cmUvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9STShD
T0NPQSkKICNpbmNsdWRlICJQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIKIApAQCAtNTQs
NiArNTAsNyBAQCBjbGFzcyBDdXJzb3I7CiBjbGFzcyBUZXh0SW5kaWNhdG9yOwogc3RydWN0IEhp
Z2hsaWdodDsKIHN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7CitjbGFzcyBXZWJNZWRpYVNlc3Np
b25NYW5hZ2VyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTMyNSw3ICszMjIsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYm
ICFQTEFURk9STShJT1MpCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlcj4gY3JlYXRlUGxheWJhY2tUYXJnZXRQaWNrZXIoV2ViUGFn
ZVByb3h5KikgPSAwOworICAgIHZpcnR1YWwgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdl
ciYgbWVkaWFTZXNzaW9uTWFuYWdlcigpID0gMDsKICNlbmRpZgogCiB9OwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDE4MzA2OCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQsNiArMTU0LDcgQEAKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpICYmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFy
Z2V0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmg+CiAjZW5k
aWYKIAogLy8gVGhpcyBjb250cm9scyB3aGF0IHN0cmF0ZWd5IHdlIHVzZSBmb3IgbW91c2Ugd2hl
ZWwgY29hbGVzY2luZy4KQEAgLTQwOCw3ICs0MDksNiBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQ
cm94eShQYWdlQ2xpZW50JiBwCiAgICAgLCBtX2NvbmZpZ3VyYXRpb25QcmVmZXJlbmNlVmFsdWVz
KGNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZVZhbHVlcykKICAgICAsIG1fcG90ZW50aWFsbHlDaGFu
Z2VkVmlld1N0YXRlRmxhZ3MoVmlld1N0YXRlOjpOb0ZsYWdzKQogICAgICwgbV92aWV3U3RhdGVD
aGFuZ2VXYW50c1N5bmNocm9ub3VzUmVwbHkoZmFsc2UpCi0gICAgLCBtX2lzUGxheWluZ0F1ZGlv
KGZhbHNlKQogewogICAgIG1fd2ViUHJvY2Vzc0xpZmV0aW1lVHJhY2tlci5hZGRPYnNlcnZlciht
X3Zpc2l0ZWRMaW5rUHJvdmlkZXIpOwogICAgIG1fd2ViUHJvY2Vzc0xpZmV0aW1lVHJhY2tlci5h
ZGRPYnNlcnZlcihtX3dlYnNpdGVEYXRhU3RvcmUpOwpAQCAtNDgyOCw2ICs0ODI4LDEwIEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlKFJlc2V0U3RhdGUKICAgICBtX2xheWVyVHJlZVRy
YW5zYWN0aW9uSWRBdExhc3RUb3VjaFN0YXJ0ID0gMDsKICNlbmRpZgogCisjaWYgRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKKyAgICBtX3BhZ2VDbGll
bnQubWVkaWFTZXNzaW9uTWFuYWdlcigpLnJlbW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50cygqdGhpcyk7CisjZW5kaWYKKwogICAgIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3I7CiAg
ICAgc3dpdGNoIChyZXNldFN0YXRlUmVhc29uKSB7CiAgICAgY2FzZSBSZXNldFN0YXRlUmVhc29u
OjpQYWdlSW52YWxpZGF0ZWQ6CkBAIC00ODQ5LDcgKzQ4NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6cmVzZXRTdGF0ZShSZXNldFN0YXRlCiAgICAgICAgIGVkaXRDb21tYW5kVmVjdG9yW2ldLT5p
bnZhbGlkYXRlKCk7CiAKICAgICBtX2FjdGl2ZVBvcHVwTWVudSA9IG51bGxwdHI7Ci0gICAgbV9p
c1BsYXlpbmdBdWRpbyA9IGZhbHNlOworICAgIG1fbWVkaWFTdGF0ZSA9IE1lZGlhUHJvZHVjZXI6
OklzTm90UGxheWluZzsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGVBZnRlclBy
b2Nlc3NFeGl0ZWQoKQpAQCAtNTY1OSwxMyArNTY2MywxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
bmF2aWdhdGlvbkdlc3R1cmVTbmFwCiAgICAgbV9pc1Nob3dpbmdOYXZpZ2F0aW9uR2VzdHVyZVNu
YXBzaG90ID0gZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojppc1BsYXlpbmdNZWRpYURp
ZENoYW5nZShXZWJDb3JlOjpDaHJvbWVDbGllbnQ6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKK3Zv
aWQgV2ViUGFnZVByb3h5Ojppc1BsYXlpbmdNZWRpYURpZENoYW5nZShXZWJDb3JlOjpNZWRpYVBy
b2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCiB7Ci0gICAgYm9vbCBpc1BsYXlpbmdBdWRp
byA9IHN0YXRlICYgV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpJc1BsYXlpbmdBdWRpbzsKLSAgICBp
ZiAobV9pc1BsYXlpbmdBdWRpbyA9PSBpc1BsYXlpbmdBdWRpbykKKyAgICBpZiAoc3RhdGUgPT0g
bV9tZWRpYVN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lzUGxheWluZ0F1ZGlvID0g
aXNQbGF5aW5nQXVkaW87CisgICAgbV9tZWRpYVN0YXRlID0gc3RhdGU7CiAgICAgbV91aUNsaWVu
dC0+aXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKnRoaXMpOwogfQogCkBAIC01NzM4LDQ2ICs1NzQx
LDQ5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVBdXRvRmlsbEJ1dHRvbkMKIH0KIAogI2lm
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCi0KLVdl
YkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXImIFdlYlBhZ2VQcm94eTo6ZGV2aWNlUGlj
a2VyUHJveHkoKQordm9pZCBXZWJQYWdlUHJveHk6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBpZiAoIW1fcGxheWJhY2tUYXJnZXRQaWNr
ZXIpCi0gICAgICAgIG1fcGxheWJhY2tUYXJnZXRQaWNrZXIgPSBtX3BhZ2VDbGllbnQuY3JlYXRl
UGxheWJhY2tUYXJnZXRQaWNrZXIodGhpcyk7Ci0KLSAgICByZXR1cm4gKm1fcGxheWJhY2tUYXJn
ZXRQaWNrZXIuZ2V0KCk7CisgICAgbV9wYWdlQ2xpZW50Lm1lZGlhU2Vzc2lvbk1hbmFnZXIoKS5h
ZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCgqdGhpcywgY29udGV4dElkKTsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIHJlY3QsIGJvb2wgaGFzVmlkZW8pCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3Zl
UGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QgY29udGV4dElkKQogewotICAgIGRl
dmljZVBpY2tlclByb3h5KCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKG1fcGFnZUNsaWVudC5y
b290Vmlld1RvU2NyZWVuKEludFJlY3QocmVjdCkpLCBoYXNWaWRlbyk7CisgICAgbV9wYWdlQ2xp
ZW50Lm1lZGlhU2Vzc2lvbk1hbmFnZXIoKS5yZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVu
dCgqdGhpcywgY29udGV4dElkKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnN0YXJ0aW5nTW9u
aXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1BsYXliYWNr
VGFyZ2V0UGlja2VyKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiByZWN0LCBib29sIGhhc1ZpZGVvKQogewotICAgIGRldmljZVBpY2tlclByb3h5KCkuc3RhcnRp
bmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7CisgICAgbV9wYWdlQ2xpZW50Lm1lZGlhU2Vz
c2lvbk1hbmFnZXIoKS5zaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoKnRoaXMsIGNvbnRleHRJZCwg
bV9wYWdlQ2xpZW50LnJvb3RWaWV3VG9TY3JlZW4oSW50UmVjdChyZWN0KSksIGhhc1ZpZGVvKTsK
IH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkK
K3ZvaWQgV2ViUGFnZVByb3h5OjpwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hh
bmdlKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0
ZUZsYWdzIHN0YXRlKQogewotICAgIGRldmljZVBpY2tlclByb3h5KCkuc3RvcE1vbml0b3JpbmdQ
bGF5YmFja1RhcmdldHMoKTsKKyAgICBtX3BhZ2VDbGllbnQubWVkaWFTZXNzaW9uTWFuYWdlcigp
LmNsaWVudFN0YXRlRGlkQ2hhbmdlKCp0aGlzLCBjb250ZXh0SWQsIHN0YXRlKTsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNr
VGFyZ2V0PiYmIHRhcmdldCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRQbGF5YmFja1RhcmdldCh1
aW50NjRfdCBjb250ZXh0SWQsIFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmIHRhcmdldCkKIHsK
ICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQbGF5YmFja1RhcmdldFNlbGVjdGVkKHRhcmdldC0+dGFy
Z2V0Q29udGV4dCgpKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6UGxheWJhY2tUYXJnZXRTZWxlY3RlZChjb250ZXh0SWQsIHRhcmdldC0+dGFyZ2V0
Q29udGV4dCgpKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZXh0ZXJuYWxP
dXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCBhdmFpbGFibGUpCit2b2lkIFdlYlBh
Z2VQcm94eTo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UodWludDY0X3Qg
Y29udGV4dElkLCBib29sIGF2YWlsYWJsZSkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShhdmFpbGFibGUpLCBtX3BhZ2VJRCk7Cisg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQbGF5YmFja1RhcmdldEF2YWls
YWJpbGl0eURpZENoYW5nZShjb250ZXh0SWQsIGF2YWlsYWJsZSksIG1fcGFnZUlEKTsKIH0KIAor
dm9pZCBXZWJQYWdlUHJveHk6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCBzaG91bGRQbGF5KQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
dFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGNvbnRleHRJZCwgc2hvdWxkUGxheSksIG1fcGFn
ZUlEKTsKK30KICNlbmRpZgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlQmFja2dyb3Vu
ZENvbG9yKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTAgKzYzLDEwIEBACiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eS5oIgogI2luY2x1ZGUg
IldlYlByb2Nlc3NMaWZldGltZVRyYWNrZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZUNs
aWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Ry
YWdBY3Rpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9NZWRpYVByb2R1Y2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsVHlwZXMuaD4KQEAgLTExNSw2ICsxMTUsNyBAQAogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BM
QVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxXZWJDb3JlL01lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYk1lZGlhU2Vzc2lv
bk1hbmFnZXJDbGllbnQuaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTI2NCw3ICsy
NjUsNyBAQCBjbGFzcyBXZWJQYWdlUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJCiAgICAgLCBw
dWJsaWMgV2ViQ29sb3JQaWNrZXI6OkNsaWVudAogI2VuZGlmCiAjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKLSAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpDbGllbnQKKyAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50CiAjZW5kaWYKICAgICAsIHB1YmxpYyBXZWJQ
b3B1cE1lbnVQcm94eTo6Q2xpZW50CiAgICAgLCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIK
QEAgLTk4Myw4ICs5ODQsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU2hvd2luZ05hdmlnYXRp
b25HZXN0dXJlU25hcHNob3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2hvd2luZ05hdmlnYXRpb25H
ZXN0dXJlU25hcHNob3Q7IH0KIAotICAgIHZvaWQgaXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UoV2Vi
Q29yZTo6Q2hyb21lQ2xpZW50OjpNZWRpYVN0YXRlRmxhZ3MpOwotICAgIGJvb2wgaXNQbGF5aW5n
QXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2lzUGxheWluZ0F1ZGlvOyB9CisgICAgYm9vbCBpc1Bs
YXlpbmdBdWRpbygpIGNvbnN0IHsgcmV0dXJuICEhKG1fbWVkaWFTdGF0ZSAmIFdlYkNvcmU6Ok1l
ZGlhUHJvZHVjZXI6OklzUGxheWluZ0F1ZGlvKTsgfQorICAgIHZvaWQgaXNQbGF5aW5nTWVkaWFE
aWRDaGFuZ2UoV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKTsKIAogI2lm
IFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3Qo
KTsKQEAgLTEwMjAsMTQgKzEwMjEsMTUgQEAgcHVibGljOgogICAgIHZvaWQgbG9nRGlhZ25vc3Rp
Y01lc3NhZ2VXaXRoVmFsdWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRl
c2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHNob3VsZFNhbXBsZSk7CiAKICNp
ZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQotICAg
IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXImIGRldmljZVBpY2tlclByb3h5KCk7
Ci0gICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiwgYm9vbCBoYXNWaWRlbyk7Ci0gICAgdm9pZCBzdGFydGluZ01vbml0b3JpbmdQbGF5YmFj
a1RhcmdldHMoKTsKLSAgICB2b2lkIHN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7Ci0K
LSAgICAvLyBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpDbGllbnQKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVmPFdlYkNvcmU6Ok1lZGlhUGxh
eWJhY2tUYXJnZXQ+JiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1
dERldmljZUF2YWlsYWJsZURpZENoYW5nZShib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZFBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90KTsKKyAgICB2b2lkIHJlbW92ZVBsYXli
YWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90KTsKKyAgICB2b2lkIHNob3dQbGF5YmFja1Rh
cmdldFBpY2tlcih1aW50NjRfdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgYm9vbCBoYXNW
aWRlbyk7CisgICAgdm9pZCBwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdl
KHVpbnQ2NF90LCBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MpOworCisg
ICAgLy8gV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRQ
bGF5YmFja1RhcmdldCh1aW50NjRfdCwgUmVmPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+
JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWls
YWJsZURpZENoYW5nZSh1aW50NjRfdCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90LCBib29sKSBvdmVycmlkZTsK
ICNlbmRpZgogCiAgICAgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTE3MDYs
MTEgKzE3MDgsMTIgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdmlld1N0YXRlQ2hhbmdlV2FudHNT
eW5jaHJvbm91c1JlcGx5OwogICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9uZXh0Vmlld1N0YXRlQ2hh
bmdlQ2FsbGJhY2tzOwogCisgICAgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZs
YWdzIG1fbWVkaWFTdGF0ZSB7IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZyB9
OworCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElP
UykKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tl
cj4gbV9wbGF5YmFja1RhcmdldFBpY2tlcjsKKyAgICBib29sIG1fcmVxdWlyZXNUYXJnZXRNb25p
dG9yaW5nIHsgZmFsc2UgfTsKICNlbmRpZgogCi0gICAgYm9vbCBtX2lzUGxheWluZ0F1ZGlvOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE4MzA2OCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTQzMiw5ICs0MzIsMTAgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsK
ICAgICBIYW5kbGVBdXRvRmlsbEJ1dHRvbkNsaWNrKFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEp
OwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElP
UykKLSAgICBTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoV2ViQ29yZTo6RmxvYXRSZWN0IHBpY2tl
ckxvY2F0aW9uLCBib29sIGhhc1ZpZGVvKQotICAgIFN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNr
VGFyZ2V0cygpCi0gICAgU3RvcE1vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKQorICAgIEFkZFBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBSZW1vdmVQ
bGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90IGNsaWVudElkLCBXZWJDb3JlOjpGbG9hdFJlY3Qg
cGlja2VyTG9jYXRpb24sIGJvb2wgaGFzVmlkZW8pCisgICAgUGxheWJhY2tUYXJnZXRQaWNrZXJD
bGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIG1lZGlhU3Rh
dGUpCiAjZW5kaWYKIAogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdl
Q2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjEx
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyPiBjcmVhdGVQbGF5YmFja1RhcmdldFBpY2tlcihXZWJQYWdlUHJveHkqKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXImIG1l
ZGlhU2Vzc2lvbk1hbmFnZXIoKSBvdmVycmlkZTsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiAx
ODMwNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyTWFjLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJNZWRpYVNlc3Npb25NYW5h
Z2VyTWFjLmg+CiAjZW5kaWYKIAogQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxp
Y2F0aW9uRGV0YWlscykKQEAgLTgxMyw5ICs4MTMsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
aG93UGxhdGZvcm1Db250ZXh0CiB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUKQotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI+
IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQbGF5YmFja1RhcmdldFBpY2tlcihXZWJQYWdlUHJveHkq
IHBhZ2UpCitXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyJiBQYWdlQ2xpZW50SW1wbDo6
bWVkaWFTZXNzaW9uTWFuYWdlcigpCiB7Ci0gICAgcmV0dXJuIE1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXJNYWM6OmNyZWF0ZSgqcGFnZSk7CisgICAgcmV0dXJuIFdlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXJNYWM6OnNpbmdsZXRvbigpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlck1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTWVkaWFTZXNzaW9uTWFu
YWdlck1hYy5oIgorCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXImIFdlYk1lZGlh
U2Vzc2lvbk1hbmFnZXJNYWM6OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM+IHNoYXJlZE1hbmFnZXI7CisgICAgcmV0dXJu
IHNoYXJlZE1hbmFnZXI7Cit9CisKK1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OldlYk1lZGlh
U2Vzc2lvbk1hbmFnZXJNYWMoKQorICAgIDogV2ViTWVkaWFTZXNzaW9uTWFuYWdlcigpCit7Cit9
CisKK1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6On5XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFj
KCkKK3sKK30KKworV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlciYgV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlck1hYzo6dGFyZ2V0UGlja2VyKCkKK3sKKyAgICBpZiAoIW1fdGFyZ2V0UGlj
a2VyKQorICAgICAgICBtX3RhcmdldFBpY2tlciA9IE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJN
YWM6OmNyZWF0ZSgqdGhpcyk7CisKKyAgICByZXR1cm4gKm1fdGFyZ2V0UGlja2VyLmdldCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjX2gKKyNkZWZpbmUgV2ViTWVk
aWFTZXNzaW9uTWFuYWdlck1hY19oCisKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUKSAmJiAhUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiV2ViTWVkaWFTZXNzaW9uTWFuYWdl
ci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTWVkaWFTZXNzaW9uTWFuYWdl
ck1hYyA6IHB1YmxpYyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyIHsKKyAgICBmcmllbmQgY2xhc3Mg
TmV2ZXJEZXN0cm95ZWQ8V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYz47CitwdWJsaWM6CisgICAg
c3RhdGljIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXImIHNpbmdsZXRvbigpOworCitwcml2YXRlOgor
ICAgIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMoKTsKKyAgICB2aXJ0dWFsIH5XZWJNZWRpYVNl
c3Npb25NYW5hZ2VyTWFjKCk7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXImIHRhcmdldFBpY2tlcigpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI+IG1fdGFyZ2V0UGlja2VyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVCkKKworI2VuZGlmIC8vIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWNfaApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCShyZXZp
c2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTAgQEAKICNpbmNsdWRlICJQbHVn
aW4uaCIKICNpbmNsdWRlICJQbHVnaW5Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0F1ZGlvUHJvZHVjZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbmRPcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvTWVkaWFDYW5TdGFydExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBy
b2R1Y2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5WaWV3QmFzZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNw
b25zZS5oPgpAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2Vi
RXZlbnQ7CiAKLWNsYXNzIFBsdWdpblZpZXcgOiBwdWJsaWMgV2ViQ29yZTo6UGx1Z2luVmlld0Jh
c2UsIHB1YmxpYyBQbHVnaW5Db250cm9sbGVyLCBwcml2YXRlIFdlYkNvcmU6Ok1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lciwgcHJpdmF0ZSBXZWJGcmFtZTo6TG9hZExpc3RlbmVyLCBwcml2YXRlIFdlYkNv
cmU6OkF1ZGlvUHJvZHVjZXIgeworY2xhc3MgUGx1Z2luVmlldyA6IHB1YmxpYyBXZWJDb3JlOjpQ
bHVnaW5WaWV3QmFzZSwgcHVibGljIFBsdWdpbkNvbnRyb2xsZXIsIHByaXZhdGUgV2ViQ29yZTo6
TWVkaWFDYW5TdGFydExpc3RlbmVyLCBwcml2YXRlIFdlYkZyYW1lOjpMb2FkTGlzdGVuZXIsIHBy
aXZhdGUgV2ViQ29yZTo6TWVkaWFQcm9kdWNlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UGx1Z2luVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVs
ZW1lbnQ+LCBQYXNzUmVmUHRyPFBsdWdpbj4sIGNvbnN0IFBsdWdpbjo6UGFyYW1ldGVycyYpOwog
CkBAIC0xODEsOCArMTgxLDggQEAgcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpNZWRpYUNhblN0
YXJ0TGlzdGVuZXIKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFDYW5TdGFydCgpIG92ZXJyaWRlOwog
Ci0gICAgLy8gV2ViQ29yZTo6QXVkaW9Qcm9kdWNlcgotICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlp
bmdBdWRpbygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGx1Z2luSXNQbGF5aW5nQXVkaW87IH0KKyAg
ICAvLyBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyCisgICAgdmlydHVhbCBNZWRpYVByb2R1Y2VyOjpN
ZWRpYVN0YXRlRmxhZ3MgbWVkaWFTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGx1
Z2luSXNQbGF5aW5nQXVkaW8gPyBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdBdWRpbyA6IE1lZGlh
UHJvZHVjZXI6OklzTm90UGxheWluZzsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWdlTXV0ZWRTdGF0
ZURpZENoYW5nZSgpIG92ZXJyaWRlOwogCiAgICAgLy8gUGx1Z2luQ29udHJvbGxlcgpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6c2hvdWxk
VXNlVGlsZWRCYWNrCiAgICAgcmV0dXJuIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2hvdWxkVXNl
VGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CiB9CiAKLXZvaWQgV2ViQ2hyb21l
Q2xpZW50Ojppc1BsYXlpbmdNZWRpYURpZENoYW5nZShNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCit2
b2lkIFdlYkNocm9tZUNsaWVudDo6aXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UoV2ViQ29yZTo6TWVk
aWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIHN0YXRlKQogewogICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJc1BsYXlpbmdNZWRpYURpZENoYW5nZShzdGF0ZSkpOwog
fQpAQCAtMTExNSwyMSArMTExNSwyNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6aGFuZGxlQXV0
b0ZpbGxCdXR0CiB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAh
UExBVEZPUk0oSU9TKQotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNob3dQbGF5YmFja1RhcmdldFBp
Y2tlcihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGJvb2wgaXNWaWRlbykKK3Zv
aWQgV2ViQ2hyb21lQ2xpZW50OjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRf
dCBjb250ZXh0SWQpCiB7Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5G
cmFtZSgpLT52aWV3KCk7Ci0gICAgRmxvYXRSZWN0IHJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcoZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9uKSksIEZsb2F0U2l6
ZSgpKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKHJlY3QsIGlzVmlkZW8pKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6QWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoY29udGV4dElk
KSk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZW1vdmVQbGF5YmFja1RhcmdldFBpY2tl
ckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KGNvbnRleHRJ
ZCkpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6c3RhcnRpbmdNb25pdG9yaW5nUGxheWJh
Y2tUYXJnZXRzKCkKKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNob3dQbGF5YmFja1RhcmdldFBp
Y2tlcih1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlv
biwgYm9vbCBpc1ZpZGVvKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpTdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKSk7CisgICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgRmxvYXRSZWN0
IHJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcoZnJhbWVWaWV3LT53aW5kb3dUb0Nv
bnRlbnRzKHBvc2l0aW9uKSksIEZsb2F0U2l6ZSgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnRleHRJZCwgcmVj
dCwgaXNWaWRlbykpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6c3RvcE1vbml0b3JpbmdQ
bGF5YmFja1RhcmdldHMoKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBsYXliYWNrVGFyZ2V0UGlj
a2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpNZWRp
YVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKGNvbnRleHRJZCwgc3RhdGUpKTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29s
IHNob3VsZFVzZVRpbGVkQmFja2luZ0ZvckZyYW1lVmlldyhjb25zdCBXZWJDb3JlOjpGcmFtZVZp
ZXcqKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBpc1BsYXlpbmdNZWRpYURp
ZENoYW5nZShNZWRpYVN0YXRlRmxhZ3MpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpc1Bs
YXlpbmdNZWRpYURpZENoYW5nZShXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxh
Z3MpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlQWN0aXZpdHlTdGF0ZShXZWJD
b3JlOjpQYWdlQWN0aXZpdHlTdGF0ZTo6RmxhZ3MpIG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFNV
QlRMRV9DUllQVE8pCkBAIC0zMTMsOSArMzEzLDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUF1dG9GaWxsQnV0dG9uQ2xpY2soV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCYp
IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBM
QVRGT1JNKElPUykKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCAvKmNvbnRl
eHRJZCovKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQodWludDY0X3QgLypjb250ZXh0SWQqLykgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcih1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QsIFdlYkNvcmU6
Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncykgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAg
IFN0cmluZyBtX2NhY2hlZFRvb2xUaXA7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMDcsOCAr
MTEwNyw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTaG91bGREaXNwYXRjaEZha2VNb3VzZU1v
dmVFdmVudHMoYm9vbCBkaXNwYXRjaCkgeyBtX3Nob3VsZERpc3BhdGNoRmFrZU1vdXNlTW92ZUV2
ZW50cyA9IGRpc3BhdGNoOyB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KSAmJiAhUExBVEZPUk0oSU9TKQotICAgIHZvaWQgcGxheWJhY2tUYXJnZXRTZWxlY3RlZChjb25z
dCBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dCYgb3V0cHV0RGV2aWNlKSBjb25z
dDsKLSAgICB2b2lkIHBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGJvb2wpOwor
ICAgIHZvaWQgcGxheWJhY2tUYXJnZXRTZWxlY3RlZCh1aW50NjRfdCwgY29uc3QgV2ViQ29yZTo6
TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQmIG91dHB1dERldmljZSkgY29uc3Q7CisgICAgdm9p
ZCBwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZSh1aW50NjRfdCwgYm9vbCk7Cisg
ICAgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRfdCwgYm9vbCk7CiAj
ZW5kaWYKIAogICAgIHVpbnQ2NF90IG1fcGFnZUlEOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9u
IDE4MzA2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsOCArNDE4LDkgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0U2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VN
b3ZlRXZlbnRzKGJvb2wgc2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRzKQogCiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKLSAgICBQ
bGF5YmFja1RhcmdldFNlbGVjdGVkKHN0cnVjdCBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0
Q29udGV4dCB0YXJnZXQpCi0gICAgUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2Uo
Ym9vbCBhdmFpbGFibGUpCisgICAgUGxheWJhY2tUYXJnZXRTZWxlY3RlZCh1aW50NjRfdCBjb250
ZXh0SWQsIHN0cnVjdCBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dCB0YXJnZXQp
CisgICAgUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UodWludDY0X3QgY29udGV4
dElkLCBib29sIGF2YWlsYWJsZSkKKyAgICBTZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgc2hvdWxkUGxheSkKICNlbmRpZgogCiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0JKHJldmlzaW9uIDE4MzA2
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWEubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCB2
b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpkaXNwCiB7CiAjaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKICAgICBpZiAoIW1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zY3JvbGxpbmdD
b29yZGluYXRvcigpKSB7Ci0gICAgICAgIGZ1bmN0aW9uKCk7CisKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAzLDE2ICsxMjAzLDIxIEBAIHZvaWQgV2ViUGFnZTo6c2V0Rm9udChjb25zdCBTdHJpbmcmIGZv
bnQKIH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9S
TShJT1MpCi12b2lkIFdlYlBhZ2U6OnBsYXliYWNrVGFyZ2V0U2VsZWN0ZWQoY29uc3QgV2ViQ29y
ZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQmIHRhcmdldENvbnRleHQpIGNvbnN0Cit2b2lk
IFdlYlBhZ2U6OnBsYXliYWNrVGFyZ2V0U2VsZWN0ZWQodWludDY0X3QgY29udGV4dElkLCBjb25z
dCBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dCYgdGFyZ2V0Q29udGV4dCkgY29u
c3QKIHsKICAgICBBU1NFUlQodGFyZ2V0Q29udGV4dC50eXBlID09IE1lZGlhUGxheWJhY2tUYXJn
ZXRDb250ZXh0OjpBVk91dHB1dENvbnRleHRUeXBlKTsKIAotICAgIG1fcGFnZS0+ZGlkQ2hvb3Nl
UGxheWJhY2tUYXJnZXQoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldE1hYzo6Y3JlYXRlKHRh
cmdldENvbnRleHQuY29udGV4dC5hdk91dHB1dENvbnRleHQpKTsKKyAgICBtX3BhZ2UtPnNldFBs
YXliYWNrVGFyZ2V0KGNvbnRleHRJZCwgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldE1hYzo6
Y3JlYXRlKHRhcmdldENvbnRleHQuY29udGV4dC5hdk91dHB1dENvbnRleHQpKTsKIH0KIAotdm9p
ZCBXZWJQYWdlOjpwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShib29sIGNoYW5n
ZWQpCit2b2lkIFdlYlBhZ2U6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBjaGFuZ2VkKQogewotICAgIG1fcGFnZS0+cGxheWJhY2tU
YXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoY2hhbmdlZCk7CisgICAgbV9wYWdlLT5wbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShjb250ZXh0SWQsIGNoYW5nZWQpOworfQorCit2
b2lkIFdlYlBhZ2U6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCBzaG91bGRQbGF5KQoreworICAgIG1fcGFnZS0+c2V0U2hvdWxkUGxheVRvUGxh
eWJhY2tUYXJnZXQoY29udGV4dElkLCBzaG91bGRQbGF5KTsKIH0KICNlbmRpZgogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODMwNzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxNS0wNC0yMSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBVc2Ugb25l
IHBsYXliYWNrIHRhcmdldCBmb3IgYWxsIHdlYiBwcm9jZXNzZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDAwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0byB1c2UgV2ViTWVkaWFTZXNz
aW9uTWFuYWdlciBmb3IgcGxheWJhY2sgdGFyZ2V0IG1hbmFnZW1lbnQuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmFkZFBsYXli
YWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6cmVtb3Zl
UGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojpz
aG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpwbGF5
YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNocm9t
ZUNsaWVudDo6c3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNocm9tZUNsaWVudDo6c3RvcE1vbml0b3JpbmdQbGF5YmFja1RhcmdldHMpOiBE
ZWxldGVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5o
OgorICAgICAgICAqIFdlYlZpZXcvV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5tbToKKyAg
ICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmFkZFBsYXliYWNrVGFyZ2V0UGlj
a2VyQ2xpZW50KToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnJlbW92
ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXI6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcik6CisgICAgICAgIChXZWJNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyOjpwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnNldFBsYXli
YWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmV4dGVy
bmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYk1lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXI6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KToKKyAgICAg
ICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmludmFsaWRhdGUpOgorICAgICAgICAo
V2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tU
YXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6
OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYk1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnRhcmdldFBpY2tlcik6
IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJW
aWV3IF9hZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudDpdKToKKyAgICAgICAgKC1bV2ViVmll
dyBfcmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQ6XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjpsb2NhdGlvbjpoYXNWaWRlbzpdKToKKyAgICAg
ICAgKC1bV2ViVmlldyBfcGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZTpz
dGF0ZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyOmhh
c1ZpZGVvOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJWaWV3IF9zdGFydGluZ01vbml0b3Jp
bmdQbGF5YmFja1RhcmdldHNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlldyBfc3RvcE1v
bml0b3JpbmdQbGF5YmFja1RhcmdldHNdKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dl
YlZpZXdJbnRlcm5hbC5oOgorCiAyMDE1LTA0LTIwICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgbWl4ZWQgY29udGVudCBibG9ja2luZyBmb3Ig
ZXhpc3RpbmcgV2ViS2l0MSBjbGllbnRzCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxNCw5ICsyMTQsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIHZpcnR1
YWwgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
LCBib29sIC8qIGhhc1ZpZGVvICovKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRp
bmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IC8qY29udGV4dElkKi8p
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudCh1aW50NjRfdCAvKmNvbnRleHRJZCovKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90IC8qY29udGV4dElkKi8sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiwgYm9vbCAvKiBoYXNWaWRlbyAqLykgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0
X3QgLypjb250ZXh0SWQqLywgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdz
KSBvdmVycmlkZTsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24gMTgz
MDY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM2LDE4ICsxMDM2LDIzIEBAIGJvb2wgV2ViQ2hyb21l
Q2xpZW50OjpoYXNSZWxldmFudFNlbGVjdGkKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKLXZvaWQgV2ViQ2hyb21lQ2xpZW50
OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0
aW9uLCBib29sIGhhc1ZpZGVvKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmFkZFBsYXliYWNrVGFy
Z2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBbbV93ZWJWaWV3IF9z
aG93UGxheWJhY2tUYXJnZXRQaWNrZXI6bG9jYXRpb24gaGFzVmlkZW86aGFzVmlkZW9dOworICAg
IFttX3dlYlZpZXcgX2FkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50OmNvbnRleHRJZF07CiB9
CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1Rhcmdl
dHMoKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBbbV93ZWJWaWV3IF9zdGFydGluZ01vbml0
b3JpbmdQbGF5YmFja1RhcmdldHNdOworICAgIFttX3dlYlZpZXcgX3JlbW92ZVBsYXliYWNrVGFy
Z2V0UGlja2VyQ2xpZW50OmNvbnRleHRJZF07CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpz
dG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2hv
d1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIGxvY2F0aW9uLCBib29sIGhhc1ZpZGVvKQogewotICAgIFttX3dlYlZpZXcgX3N0
b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzXTsKKyAgICBbbV93ZWJWaWV3IF9zaG93UGxheWJh
Y2tUYXJnZXRQaWNrZXI6Y29udGV4dElkIGxvY2F0aW9uOmxvY2F0aW9uIGhhc1ZpZGVvOmhhc1Zp
ZGVvXTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QgY29udGV4dElkLCBNZWRpYVByb2R1Y2VyOjpNZWRp
YVN0YXRlRmxhZ3Mgc3RhdGUpCit7CisgICAgW21fd2ViVmlldyBfcGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnRTdGF0ZURpZENoYW5nZTpjb250ZXh0SWQgc3RhdGU6c3RhdGVdOwogfQogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYk1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYk1lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXIuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDM0ICsyNSwzNyBAQAogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkgJiYgIVBMQVRGT1JNKElPUykKIAotI2ltcG9ydCA8V2ViQ29yZS9NZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyLmg+CisjaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWJhY2tUYXJnZXQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmxvYXRSZWN0Owor
Y2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsKIGNsYXNzIFBhZ2U7CiB9CiAKLWNsYXNzIFdlYk1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIgOiBwdWJsaWMgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlcjo6Q2xpZW50IHsKK2NsYXNzIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIg
OiBwdWJsaWMgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
PiBjcmVhdGUoV2ViQ29yZTo6UGFnZSYpOwogCiAgICAgZXhwbGljaXQgV2ViTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlcihXZWJDb3JlOjpQYWdlJik7CiAgICAgdmlydHVhbCB+V2ViTWVkaWFQbGF5
YmFja1RhcmdldFBpY2tlcigpIHsgfQogCi0gICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNr
ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgYm9vbCAvKiBoYXNWaWRlbyAqLyk7Ci0gICAg
dm9pZCBzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKTsKLSAgICB2b2lkIHN0b3BN
b25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7Ci0KLSAgICAvLyBXZWJDb3JlOjpNZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hvb3NlUGxheWJh
Y2tUYXJnZXQoUmVmPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShi
b29sKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVp
bnQ2NF90KTsKKyAgICB2b2lkIHJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2
NF90KTsKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcih1aW50NjRfdCwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgYm9vbCBoYXNWaWRlbyk7CisgICAgdm9pZCBwbGF5YmFja1Rh
cmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKHVpbnQ2NF90LCBXZWJDb3JlOjpNZWRpYVBy
b2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MpOworCisgICAgLy8gV2ViTWVkaWFTZXNzaW9uTWFuYWdl
ckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF5YmFja1RhcmdldCh1aW50NjRfdCwgUmVm
PFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSh1aW50NjRfdCwgYm9v
bCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFy
Z2V0KHVpbnQ2NF90LCBib29sKSBvdmVycmlkZTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwog
CiBwcml2YXRlOgotICAgIFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXImIHRhcmdl
dFBpY2tlcigpOwotCiAgICAgV2ViQ29yZTo6UGFnZSogbV9wYWdlOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyPiBtX3RhcmdldFBpY2tlcjsK
IH07CisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5tbQkocmV2aXNpb24gMTgzMDY4KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNSArMjAsMTYgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2ltcG9ydCAiV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oIgogCiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKIAotI2ltcG9y
dCA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmg+CisjaW1wb3J0IDxXZWJD
b3JlL01lZGlhUGxheWJhY2tUYXJnZXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2lt
cG9ydCA8V2ViQ29yZS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmg+CiAKIHN0ZDo6dW5pcXVl
X3B0cjxXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyPiBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyOjpjcmVhdGUoV2ViQ29yZTo6UGFnZSYgcGFnZSkKIHsKQEAgLTQwLDQ4ICs0MSw1NCBA
QCBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpXZWJNZWRpYVBsCiB7CiB9CiAKLXZvaWQg
V2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwgYm9vbCBoYXNWaWRlbykKK3ZvaWQgV2ViTWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlcjo6YWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWlu
dDY0X3QgY29udGV4dElkKQogewotICAgIHRhcmdldFBpY2tlcigpLnNob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcihXZWJDb3JlOjpJbnRSZWN0KHJlY3QpLCBoYXNWaWRlbyk7CisgICAgV2ViQ29yZTo6
V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6c2luZ2xldG9uKCkuYWRkUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQoKnRoaXMsIGNvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlcjo6c3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkKK3ZvaWQg
V2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJD
bGllbnQodWludDY0X3QgY29udGV4dElkKQogewotICAgIHRhcmdldFBpY2tlcigpLnN0YXJ0aW5n
TW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOworICAgIFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lv
bk1hbmFnZXJNYWM6OnNpbmdsZXRvbigpLnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
KCp0aGlzLCBjb250ZXh0SWQpOwogfQogCi12b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXI6OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkKK3ZvaWQgV2ViTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0LCBib29sIGhhc1ZpZGVvKQogewotICAg
IHRhcmdldFBpY2tlcigpLnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7CisgICAgV2Vi
Q29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6c2luZ2xldG9uKCkuc2hvd1BsYXliYWNr
VGFyZ2V0UGlja2VyKCp0aGlzLCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QocmVjdCksIGhh
c1ZpZGVvKTsKIH0KIAotdm9pZCBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpkaWRDaG9v
c2VQbGF5YmFja1RhcmdldChSZWY8V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldD4mJiB0YXJn
ZXQpCit2b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnBsYXliYWNrVGFyZ2V0UGlj
a2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpNZWRp
YVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCit7CisgICAgV2ViQ29yZTo6V2ViTWVk
aWFTZXNzaW9uTWFuYWdlck1hYzo6c2luZ2xldG9uKCkuY2xpZW50U3RhdGVEaWRDaGFuZ2UoKnRo
aXMsIGNvbnRleHRJZCwgc3RhdGUpOworfQorCit2b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXI6OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgUmVmPFdlYkNvcmU6
Ok1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgdGFyZ2V0KQogewogICAgIGlmICghbV9wYWdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2UtPmRpZENob29zZVBsYXliYWNrVGFyZ2V0KFdURjo6
bW92ZSh0YXJnZXQpKTsKKyAgICBtX3BhZ2UtPnNldFBsYXliYWNrVGFyZ2V0KGNvbnRleHRJZCwg
V1RGOjptb3ZlKHRhcmdldCkpOwogfQogCi12b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXI6OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wgYXZhaWxhYmxl
KQordm9pZCBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpleHRlcm5hbE91dHB1dERldmlj
ZUF2YWlsYWJsZURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgYXZhaWxhYmxlKQog
ewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2UtPnBsYXli
YWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGF2YWlsYWJsZSk7CisgICAgbV9wYWdlLT5w
bGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShjb250ZXh0SWQsIGF2YWlsYWJsZSk7
CiB9CiAKLXZvaWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6aW52YWxpZGF0ZSgpCit2
b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBzaG91bGRQbGF5KQogewotICAgIG1fcGFn
ZSA9IG51bGxwdHI7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cGFnZS0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoY29udGV4dElkLCBzaG91bGRQbGF5
KTsKIH0KIAotV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlciYgV2ViTWVkaWFQbGF5
YmFja1RhcmdldFBpY2tlcjo6dGFyZ2V0UGlja2VyKCkKK3ZvaWQgV2ViTWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgaWYgKCFtX3RhcmdldFBpY2tlcikKLSAg
ICAgICAgbV90YXJnZXRQaWNrZXIgPSBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
TWFjOjpjcmVhdGUoKnRoaXMpOwotCi0gICAgcmV0dXJuICptX3RhcmdldFBpY2tlci5nZXQoKTsK
KyAgICBtX3BhZ2UgPSBudWxscHRyOworICAgIFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXJNYWM6OnNpbmdsZXRvbigpLnJlbW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50cygq
dGhpcyk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNiArMjkyLDcgQEAKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKKyNpbXBvcnQg
PFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oPgogI2ltcG9ydCAiV2ViTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlci5oIgogI2VuZGlmCiAKQEAgLTg2NjksMzAgKzg2NzAsMjkgQEAg
LSAoV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlciAqKSBfZGV2aQogICAgIHJldHVybiBfcHJp
dmF0ZS0+bV9wbGF5YmFja1RhcmdldFBpY2tlci5nZXQoKTsKIH0KIAotLSAodm9pZClfc2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyOihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpbG9jYXRpb24gaGFz
VmlkZW86KEJPT0wpaGFzVmlkZW8KKy0gKHZvaWQpX2FkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50Oih1aW50NjRfdCljbGllbnRJZAogewotICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCi0gICAg
ICAgIHJldHVybjsKKyAgICBbc2VsZiBfZGV2aWNlUGlja2VyXS0+YWRkUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQoY2xpZW50SWQpOworfQogCi0gICAgTlNSZWN0IHJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgX2NvbnZlcnRSZWN0RnJvbVJvb3RWaWV3
Ok5TTWFrZVJlY3QobG9jYXRpb24ueCgpLCBsb2NhdGlvbi55KCksIDAsIDApXSB0b1ZpZXc6bmls
XTsKLSAgICBOU1JlY3QgcmVjdEluU2NyZWVuQ29vcmRpbmF0ZXMgPSBbc2VsZi53aW5kb3cgY29u
dmVydFJlY3RUb1NjcmVlbjpyZWN0SW5XaW5kb3dDb29yZGluYXRlc107Ci0gICAgW3NlbGYgX2Rl
dmljZVBpY2tlcl0tPnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihyZWN0SW5TY3JlZW5Db29yZGlu
YXRlcywgaGFzVmlkZW8pOworLSAodm9pZClfcmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGll
bnQ6KHVpbnQ2NF90KWNsaWVudElkCit7CisgICAgW3NlbGYgX2RldmljZVBpY2tlcl0tPnJlbW92
ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KGNsaWVudElkKTsKIH0KIAotLSAodm9pZClfc3Rh
cnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzCistICh2b2lkKV9zaG93UGxheWJhY2tUYXJn
ZXRQaWNrZXI6KHVpbnQ2NF90KWNsaWVudElkIGxvY2F0aW9uOihjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpbG9jYXRpb24gaGFzVmlkZW86KEJPT0wpaGFzVmlkZW8KIHsKICAgICBpZiAoIV9wcml2
YXRlLT5wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc2VsZiBfZGV2aWNlUGlja2VyXS0+
c3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7CisgICAgTlNSZWN0IHJlY3RJbldp
bmRvd0Nvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgX2NvbnZlcnRSZWN0RnJv
bVJvb3RWaWV3Ok5TTWFrZVJlY3QobG9jYXRpb24ueCgpLCBsb2NhdGlvbi55KCksIDAsIDApXSB0
b1ZpZXc6bmlsXTsKKyAgICBOU1JlY3QgcmVjdEluU2NyZWVuQ29vcmRpbmF0ZXMgPSBbc2VsZi53
aW5kb3cgY29udmVydFJlY3RUb1NjcmVlbjpyZWN0SW5XaW5kb3dDb29yZGluYXRlc107CisgICAg
W3NlbGYgX2RldmljZVBpY2tlcl0tPnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjbGllbnRJZCwg
cmVjdEluU2NyZWVuQ29vcmRpbmF0ZXMsIGhhc1ZpZGVvKTsKIH0KIAotLSAodm9pZClfc3RvcE1v
bml0b3JpbmdQbGF5YmFja1RhcmdldHMKKy0gKHZvaWQpX3BsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50U3RhdGVEaWRDaGFuZ2U6KHVpbnQ2NF90KWNsaWVudElkIHN0YXRlOihXZWJDb3JlOjpNZWRp
YVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mpc3RhdGUKIHsKLSAgICBpZiAoIV9wcml2YXRlLT5w
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiBfZGV2aWNlUGlja2VyXS0+c3RvcE1v
bml0b3JpbmdQbGF5YmFja1RhcmdldHMoKTsKKyAgICBbc2VsZiBfZGV2aWNlUGlja2VyXS0+cGxh
eWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZShjbGllbnRJZCwgc3RhdGUpOwog
fQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVy
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50
ZXJuYWwuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDkgKzI3MSwxMCBAQCBAaW50
ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdPdGhlckludGVybmFsCiAKICNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKSAmJiBkZWZpbmVkKF9fY3BsdXNw
bHVzKQogLSAoV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlciAqKSBfZGV2aWNlUGlja2VyOwot
LSAodm9pZClfc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyOihjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpbG9jYXRpb24gaGFzVmlkZW86KEJPT0wpaGFzVmlkZW87Ci0tICh2b2lkKV9zdGFydGluZ01v
bml0b3JpbmdQbGF5YmFja1RhcmdldHM7Ci0tICh2b2lkKV9zdG9wTW9uaXRvcmluZ1BsYXliYWNr
VGFyZ2V0czsKKy0gKHZvaWQpX2FkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50Oih1aW50NjRf
dCljbGllbnRJZDsKKy0gKHZvaWQpX3JlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50Oih1
aW50NjRfdCljb250ZXh0SWQ7CistICh2b2lkKV9zaG93UGxheWJhY2tUYXJnZXRQaWNrZXI6KHVp
bnQ2NF90KWNvbnRleHRJZCBsb2NhdGlvbjooY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKWxvY2F0
aW9uIGhhc1ZpZGVvOihCT09MKWhhc1ZpZGVvOworLSAodm9pZClfcGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnRTdGF0ZURpZENoYW5nZToodWludDY0X3QpY29udGV4dElkIHN0YXRlOihXZWJDb3Jl
OjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mpc3RhdGU7CiAjZW5kaWYKIAogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251297</attachid>
            <date>2015-04-21 19:51:40 -0700</date>
            <delta_ts>2015-04-21 19:58:24 -0700</delta_ts>
            <desc>Patch for the bots.</desc>
            <filename>ui_process_manager_patch_17.txt</filename>
            <type>text/plain</type>
            <size>156787</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzA3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NyBAQAorMjAxNS0wNC0yMSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBVc2Ugb25l
IHBsYXliYWNrIHRhcmdldCBmb3IgYWxsIHdlYiBwcm9jZXNzZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDAwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFD
b250cm9sc0FwcGxlLmpzOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlV2ly
ZWxlc3NQbGF5YmFja1N0YXR1cyk6IERyaXZlLWJ5IGZpeCB0byBzaG93IGNvbnRyb2xzIHdoZW4K
KyAgICAgICAgICAgIHdlIHNob3cgdGhlIHBsYWNlaG9sZGVyIGltYWdlLgorCisgICAgICAgIElu
c3RlYWQgb2YgaGF2aW5nIGVhY2ggUGFnZS9Eb2N1bWVudCBwYWlyIG1hbmFnZSBhY2Nlc3MgdG8g
dGhlIHBsYXliYWNrIHRhcmdldCBmb3IgdGhlIHZpZGVvcworICAgICAgICBpbiBhIHdlYiBwcm9j
ZXNzLCBwdXQgYWxsIG9mIHRoZSBsb2dpYyBpbnRvIGEgbmV3IGNsYXNzIC0gV2ViTWVkaWFTZXNz
aW9uTWFuYWdlci4gQSBzaW5nbGV0b24KKyAgICAgICAgaW5zdGFuY2UgdGFsa3MgdG8gdGhlIHRh
cmdldCBwaWNrZXIgYW5kIG1hbmFnZXMgdmlkZW8gZWxlbWVudCBhY2Nlc3MgZm9yIGFsbCB3ZWIg
cHJvY2Vzc2VzLgorICAgICAgICBBbGwgcGxheWJhY2sgdGFyZ2V0IGxvZ2ljIHdhcyByZW1vdmVk
IGZyb20gRG9jdW1lbnQsIFBhZ2UsIGFuZCBNZWRpYVNlc3Npb25NYW5hZ2VyLgorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXNlc3Npb246IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
ZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNsaWVudFN0YXRlOjpDbGllbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpmbGFnc0Fy
ZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpXZWJNZWRp
YVNlc3Npb25NYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXI6On5XZWJNZWRpYVNlc3Npb25NYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlh
U2Vzc2lvbk1hbmFnZXI6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlj
a2VyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJl
bW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y2xpZW50U3RhdGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2V0UGxheWJhY2tU
YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJu
YWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
TWVkaWFTZXNzaW9uTWFuYWdlcjo6Y29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnRhc2tUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OmZpbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Zm9yRWFjaENsaWVudCk6Cisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5h
Z2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFu
YWdlckNsaWVudDo6fldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Q29udGV4dDo6bWVkaWFTdGF0ZSk6IFJlcGxhY2VzIGlzUGxheWluZ0F1ZGlvLgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Db250ZXh0Ojppc1BsYXlpbmdBdWRpbyk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRBdWRpb1Byb2R1Y2VyKTogVGFrZSBhIE1lZGlh
UHJvZHVjZXIgaW5zdGVhZCBvZiBhbiBBdWRpb1Byb2R1Y2VyLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlbW92ZUF1ZGlvUHJvZHVjZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVwZGF0ZUlzUGxheWluZ01lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRQbGF5YmFj
a1RhcmdldENsaWVudENvbnRleHRJZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRk
UGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRQbGF5YmFja1RhcmdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRv
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVxdWlyZXNQbGF5
YmFja1RhcmdldFJvdXRlTW9uaXRvcmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzUGxheWluZ0F1ZGlvKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQpOiAKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYVNlc3Npb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6dW5yZWdpc3RlcldpdGhEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6c2V0SGFzUGxheWJhY2tUYXJn
ZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vz
c2lvbjo6c2V0UGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vz
c2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6bWVkaWFTdGF0ZURpZENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpkaWRDaG9vc2VQbGF5YmFj
a1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpy
ZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6c3RvcFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYVNl
c3Npb24uaDoKKyAgICAgICAgKiBwYWdlL0F1ZGlvUHJvZHVjZXIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBhZ2UvTWVkaWFQcm9kdWNlci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1ZGlvUHJvZHVjZXIuaC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6On5NZWRpYVByb2R1Y2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvUHJvZHVjZXI6On5BdWRpb1Byb2R1Y2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjp1cGRhdGVJc1BsYXlpbmdNZWRpYSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpyZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpzZXRQbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpwbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpkaWRDaG9vc2VQbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpjb25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0b3JpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bWVkaWFTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppc1BsYXlpbmdBdWRpbyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU2Vzc2lvbjo6aXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6cmVxdWlyZXNQbGF5YmFja1RhcmdldFJvdXRl
TW9uaXRvcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25DbGllbnQ6OnNldFNo
b3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lv
bjo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVNlc3Npb246OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25DbGllbnQ6OnN0YXJ0UGxheWluZ1RvUGxh
eWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ2xp
ZW50OjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTZXNzaW9uTWFuYWdlcjo6c2Vzc2lvbldpbGxCZWdpblBsYXliYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Npb25DYW5Mb2FkTWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6c2Vzc2lvblNob3VsZEJlZ2luUGxh
eWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vTWVkaWFTZXNzaW9uTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5oLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENsaWVudDo6fk1lZGlhUGxheWJh
Y2tUYXJnZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudDo6fk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXI6OnN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0U2hvdWxkUGxh
eVRvUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXI6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZTo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZTo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vV2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hYy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hYzo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lv
bk1hbmFnZXJNYWM6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6fldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6dGFyZ2V0UGlj
a2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlck1hYy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5YmFja1Rhcmdl
dFBpY2tlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJNYWM6OmN1cnJlbnREZXZpY2VEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0V2lyZWxlc3NQ
bGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnRvZ2dsZVBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFNob3VsZFBsYXlU
b1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0Ojp0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rh
cmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmlzUGFnZVBs
YXlpbmdBdWRpbyk6CisKIDIwMTUtMDQtMjEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ29udGV4dCBtZW51IGRvZXNuJ3QgYWNjb3VudCBmb3Igc2VsZWN0
aW9uIHNlbWFudGljcwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L21lZGlhQ29udHJvbHNBcHBsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzCShyZXZpc2lvbiAxODMwNjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0Fw
cGxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzg3LDYgKzE3ODcsNyBAQCBDb250cm9sbGVyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzLnZvbHVtZUJveC5zdHls
ZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRo
aXMuY29udHJvbHMubXV0ZUJveC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICAgICAg
dGhpcy5zaG93Q29udHJvbHMoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRoaXMu
Y29udHJvbHMuaW5saW5lUGxheWJhY2tQbGFjZWhvbGRlci5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xh
c3NOYW1lcy5oaWRkZW4pOwogICAgICAgICAgICAgdGhpcy5jb250cm9scy53aXJlbGVzc1Rhcmdl
dFBpY2tlci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuQ2xhc3NOYW1lcy5wbGF5aW5nKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9u
L1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCIKKyNp
bmNsdWRlICJXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RydWN0IENsaWVudFN0YXRlIHsKKyAgICBleHBsaWNpdCBDbGllbnRTdGF0ZShX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50JiBjbGllbnQsIHVpbnQ2NF90IGNvbnRleHRJZCkK
KyAgICAgICAgOiBjbGllbnQoJmNsaWVudCkKKyAgICAgICAgLCBjb250ZXh0SWQoY29udGV4dElk
KQorICAgIHsKKyAgICB9CisKKyAgICBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50KiBjbGll
bnQgeyBudWxscHRyIH07CisgICAgdWludDY0X3QgY29udGV4dElkIHsgMCB9OworICAgIFdlYkNv
cmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBmbGFncyB7IFdlYkNvcmU6Ok1lZGlh
UHJvZHVjZXI6OklzTm90UGxheWluZyB9OworICAgIGJvb2wgcmVxdWVzdGVkUGlja2VyIHsgZmFs
c2UgfTsKK307CisKK3N0YXRpYyBib29sIGZsYWdzQXJlU2V0KE1lZGlhUHJvZHVjZXI6Ok1lZGlh
U3RhdGVGbGFncyB2YWx1ZSwgdW5zaWduZWQgZmxhZ3MpCit7CisgICAgcmV0dXJuIHZhbHVlICYg
ZmxhZ3M7Cit9CisKK1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OldlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXIoKQorICAgIDogbV90YXNrVGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmV2ViTWVk
aWFTZXNzaW9uTWFuYWdlcjo6dGFza1RpbWVyRmlyZWQpCit7Cit9CisKK1dlYk1lZGlhU2Vzc2lv
bk1hbmFnZXI6On5XZWJNZWRpYVNlc3Npb25NYW5hZ2VyKCkKK3sKK30KKwordWludDY0X3QgV2Vi
TWVkaWFTZXNzaW9uTWFuYWdlcjo6YWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoV2ViTWVk
aWFTZXNzaW9uTWFuYWdlckNsaWVudCYgY2xpZW50LCB1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgc2l6ZV90IGluZGV4ID0gZmluZCgmY2xpZW50LCBjb250ZXh0SWQpOworICAgIEFTU0VSVChp
bmRleCA9PSBub3RGb3VuZCk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIG1fY2xpZW50U3RhdGUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8Q2xp
ZW50U3RhdGU+KGNsaWVudCwgY29udGV4dElkKSk7CisKKyAgICBpZiAobV9leHRlcm5hbE91dHB1
dERldmljZUF2YWlsYWJsZSB8fCBtX3BsYXliYWNrVGFyZ2V0KSB7CisKKyAgICAgICAgVGFza0Nh
bGxiYWNrIGNhbGxiYWNrID0gc3RkOjptYWtlX3R1cGxlKCZjbGllbnQsIGNvbnRleHRJZCwgW3Ro
aXNdKENsaWVudFN0YXRlJiBzdGF0ZSkgeworCisgICAgICAgICAgICBpZiAobV9leHRlcm5hbE91
dHB1dERldmljZUF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5jbGllbnQtPmV4dGVy
bmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKHN0YXRlLmNvbnRleHRJZCwgdHJ1ZSk7
CisKKyAgICAgICAgICAgIGlmIChtX3BsYXliYWNrVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAg
c3RhdGUuY2xpZW50LT5zZXRQbGF5YmFja1RhcmdldChzdGF0ZS5jb250ZXh0SWQsICptX3BsYXli
YWNrVGFyZ2V0LmNvcHlSZWYoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobV9jbGllbnRTdGF0
ZS5zaXplKCkgPT0gMSAmJiBtX3BsYXliYWNrVGFyZ2V0LT5oYXNBY3RpdmVSb3V0ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5jbGllbnQtPnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFy
Z2V0KHN0YXRlLmNvbnRleHRJZCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
CisgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZChjYWxsYmFjayk7CisgICAgICAgIG1fdGFza1Rp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29udGV4dElkOworfQor
Cit2b2lkIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50KFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwgdWludDY0X3QgY29u
dGV4dElkKQoreworICAgIHNpemVfdCBpbmRleCA9IGZpbmQoJmNsaWVudCwgY29udGV4dElkKTsK
KyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3Vu
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnRTdGF0ZS5yZW1vdmUoaW5kZXgpOwor
ICAgIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOworCisgICAgaWYgKG1fcGxh
eWJhY2tUYXJnZXQgJiYgbV9jbGllbnRTdGF0ZS5zaXplKCkgPT0gMSAmJiBtX3BsYXliYWNrVGFy
Z2V0LT5oYXNBY3RpdmVSb3V0ZSgpKQorICAgICAgICBtX2NsaWVudFN0YXRlWzBdLT5jbGllbnQt
PnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KG1fY2xpZW50U3RhdGVbMF0tPmNvbnRleHRJ
ZCwgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQWxsUGxh
eWJhY2tUYXJnZXRQaWNrZXJDbGllbnRzKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNs
aWVudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9jbGllbnRTdGF0ZS5zaXplKCk7IGkgPiAw
OyAtLWkpIHsKKyAgICAgICAgaWYgKG1fY2xpZW50U3RhdGVbaSAtIDFdLT5jbGllbnQgPT0gJmNs
aWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50U3RhdGUucmVtb3ZlKGkgLSAxKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2Vy
KFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwgdWludDY0X3QgY29udGV4dElk
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIGlzVmlkZW8pCit7CisgICAgc2l6ZV90IGluZGV4
ID0gZmluZCgmY2xpZW50LCBjb250ZXh0SWQpOworICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3Vu
ZCk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKGF1dG8mIHN0YXRlIDogbV9jbGllbnRTdGF0ZSkKKyAgICAgICAgc3RhdGUtPnJlcXVlc3Rl
ZFBpY2tlciA9IChzdGF0ZS0+Y29udGV4dElkID09IGNvbnRleHRJZCAmJiBzdGF0ZS0+Y2xpZW50
ID09ICZjbGllbnQpOworCisgICAgdGFyZ2V0UGlja2VyKCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKEZsb2F0UmVjdChyZWN0KSwgaXNWaWRlbyk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTZXNzaW9u
TWFuYWdlcjo6Y2xpZW50U3RhdGVEaWRDaGFuZ2UoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVu
dCYgY2xpZW50LCB1aW50NjRfdCBjb250ZXh0SWQsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVG
bGFncyBuZXdGbGFncykKK3sKKyAgICBzaXplX3QgaW5kZXggPSBmaW5kKCZjbGllbnQsIGNvbnRl
eHRJZCk7CisgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKKyAgICBpZiAoaW5kZXggPT0g
bm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGNoYW5nZWRDbGllbnRTdGF0
ZSA9IG1fY2xpZW50U3RhdGVbaW5kZXhdOworICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVG
bGFncyBvbGRGbGFncyA9IGNoYW5nZWRDbGllbnRTdGF0ZS0+ZmxhZ3M7CisgICAgaWYgKG5ld0Zs
YWdzID09IG9sZEZsYWdzKQorICAgICAgICByZXR1cm47CisKKyAgICBjaGFuZ2VkQ2xpZW50U3Rh
dGUtPmZsYWdzID0gbmV3RmxhZ3M7CisgICAgaWYgKCFmbGFnc0FyZVNldChvbGRGbGFncywgTWVk
aWFQcm9kdWNlcjo6UmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3JpbmcpICYmIGZsYWdzQXJl
U2V0KG5ld0ZsYWdzLCBNZWRpYVByb2R1Y2VyOjpSZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRv
cmluZykpCisgICAgICAgIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOworCisg
ICAgaWYgKCFmbGFnc0FyZVNldChuZXdGbGFncywgTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nVmlk
ZW8pKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEbyBub3QgaW50ZXJydXB0IGFub3RoZXIg
ZWxlbWVudCBhbHJlYWR5IHBsYXlpbmcgdG8gYSBkZXZpY2UuCisgICAgZm9yIChhdXRvJiBzdGF0
ZSA6IG1fY2xpZW50U3RhdGUpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5jb250ZXh0SWQgPT0gY29u
dGV4dElkICYmIHN0YXRlLT5jbGllbnQgPT0gJmNsaWVudCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmIChmbGFnc0FyZVNldChzdGF0ZS0+ZmxhZ3MsIE1lZGlhUHJvZHVjZXI6
OklzUGxheWluZ1ZpZGVvKSAmJiBmbGFnc0FyZVNldChzdGF0ZS0+ZmxhZ3MsIE1lZGlhUHJvZHVj
ZXI6OklzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX3BsYXliYWNrVGFyZ2V0ICYmIG1fcGxheWJhY2tUYXJnZXQtPmhhc0Fj
dGl2ZVJvdXRlKCkpIHsKKworICAgICAgICBmb3IgKGF1dG8mIHN0YXRlIDogbV9jbGllbnRTdGF0
ZSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLT5jb250ZXh0SWQgPT0gY29udGV4dElkICYmIHN0
YXRlLT5jbGllbnQgPT0gJmNsaWVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIHN0YXRlLT5jbGllbnQtPnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHN0YXRl
LT5jb250ZXh0SWQsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYW5nZWRDbGllbnRT
dGF0ZS0+Y2xpZW50LT5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChjaGFuZ2VkQ2xpZW50
U3RhdGUtPmNvbnRleHRJZCwgdHJ1ZSk7CisgICAgfQorCisgICAgaWYgKGluZGV4ICYmIG1fY2xp
ZW50U3RhdGUuc2l6ZSgpID4gMSkKKyAgICAgICAgc3RkOjpzd2FwKG1fY2xpZW50U3RhdGUuYXQo
aW5kZXgpLCBtX2NsaWVudFN0YXRlLmF0KDApKTsKK30KKwordm9pZCBXZWJNZWRpYVNlc3Npb25N
YW5hZ2VyOjpzZXRQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJiB0YXJn
ZXQpCit7CisgICAgbV9wbGF5YmFja1RhcmdldCA9IFdURjo6bW92ZSh0YXJnZXQpOworCisgICAg
c2l6ZV90IGluZGV4VGhhdFJlcXVlc3RlZFBpY2tlciA9IG5vdEZvdW5kOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9jbGllbnRTdGF0ZS5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRv
JiBzdGF0ZSA9IG1fY2xpZW50U3RhdGVbaV07CisgICAgICAgIHN0YXRlLT5jbGllbnQtPnNldFBs
YXliYWNrVGFyZ2V0KHN0YXRlLT5jb250ZXh0SWQsICptX3BsYXliYWNrVGFyZ2V0LmNvcHlSZWYo
KSk7CisgICAgICAgIGlmIChzdGF0ZS0+cmVxdWVzdGVkUGlja2VyKSB7CisgICAgICAgICAgICBp
bmRleFRoYXRSZXF1ZXN0ZWRQaWNrZXIgPSBpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGUtPmNsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJn
ZXQoc3RhdGUtPmNvbnRleHRJZCwgZmFsc2UpOworICAgICAgICBzdGF0ZS0+cmVxdWVzdGVkUGlj
a2VyID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGluZGV4VGhhdFJlcXVlc3RlZFBpY2tlciA9
PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc3RhdGUgPSBtX2NsaWVu
dFN0YXRlW2luZGV4VGhhdFJlcXVlc3RlZFBpY2tlcl07CisgICAgc3RhdGUtPmNsaWVudC0+c2V0
U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoc3RhdGUtPmNvbnRleHRJZCwgdHJ1ZSk7CisgICAg
c3RhdGUtPnJlcXVlc3RlZFBpY2tlciA9IGZhbHNlOworfQorCit2b2lkIFdlYk1lZGlhU2Vzc2lv
bk1hbmFnZXI6OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wgYXZh
aWxhYmxlKQoreworICAgIGlmIChtX2V4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlID09IGF2
YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9leHRlcm5hbE91dHB1dERldmljZUF2
YWlsYWJsZSA9IGF2YWlsYWJsZTsKKyAgICBmb3IgKGF1dG8mIHN0YXRlIDogbV9jbGllbnRTdGF0
ZSkKKyAgICAgICAgc3RhdGUtPmNsaWVudC0+ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVE
aWRDaGFuZ2Uoc3RhdGUtPmNvbnRleHRJZCwgYXZhaWxhYmxlKTsKK30KKwordm9pZCBXZWJNZWRp
YVNlc3Npb25NYW5hZ2VyOjpjb25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0b3JpbmcoKQorewor
ICAgIGJvb2wgbW9uaXRvcmluZ1JlcXVpcmVkID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzdGF0
ZSA6IG1fY2xpZW50U3RhdGUpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIE1lZGlhUHJv
ZHVjZXI6OlJlcXVpcmVzUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKSB7CisgICAgICAgICAgICBt
b25pdG9yaW5nUmVxdWlyZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAobW9uaXRvcmluZ1JlcXVpcmVkKQorICAgICAgICB0YXJnZXRQaWNr
ZXIoKS5zdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKTsKKyAgICBlbHNlCisgICAg
ICAgIHRhcmdldFBpY2tlcigpLnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7Cit9CisK
K3ZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6dGFza1RpbWVyRmlyZWQoKQoreworICAgIGF1
dG8gdGFza1F1ZXVlID0gV1RGOjptb3ZlKG1fdGFza1F1ZXVlKTsKKyAgICBpZiAodGFza1F1ZXVl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiB0YXNrIDogdGFz
a1F1ZXVlKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IGZpbmQoc3RkOjpnZXQ8MD4odGFzayks
IHN0ZDo6Z2V0PDE+KHRhc2spKTsKKworICAgICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzdGQ6OmdldDwyPih0YXNrKSgqbV9jbGll
bnRTdGF0ZVtpbmRleF0pOworICAgIH0KK30KKworc2l6ZV90IFdlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXI6OmZpbmQoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCogY2xpZW50LCB1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NsaWVudFN0YXRlLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NsaWVudFN0YXRlW2ldLT5jb250ZXh0SWQgPT0g
Y29udGV4dElkICYmIG1fY2xpZW50U3RhdGVbaV0tPmNsaWVudCA9PSBjbGllbnQpCisgICAgICAg
ICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpICYmICFQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVk
aWFTZXNzaW9uTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJfaAorI2RlZmluZSBXZWJNZWRp
YVNlc3Npb25NYW5hZ2VyX2gKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
ICYmICFQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
LmgiCisjaW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBDbGllbnRTdGF0ZTsK
K2NsYXNzIEludFJlY3Q7CitjbGFzcyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50OworCitj
bGFzcyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyIDogcHVibGljIE1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXI6OkNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViTWVkaWFTZXNzaW9u
TWFuYWdlcik7CitwdWJsaWM6CisKKyAgICBXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCBhZGRQbGF5
YmFja1RhcmdldFBpY2tlckNsaWVudChXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50JiwgdWlu
dDY0X3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCYsIHVpbnQ2NF90KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50cyhX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
aG93UGxheWJhY2tUYXJnZXRQaWNrZXIoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCYsIHVp
bnQ2NF90LCBjb25zdCBJbnRSZWN0JiwgYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGllbnRTdGF0ZURpZENoYW5nZShXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50JiwgdWludDY0
X3QsIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyk7CisKK3Byb3RlY3Rl
ZDoKKyAgICBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyKCk7CisgICAgdmlydHVhbCB+V2ViTWVkaWFT
ZXNzaW9uTWFuYWdlcigpOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyJiB0YXJnZXRQaWNrZXIoKSA9IDA7CisKK3ByaXZhdGU6CisKKyAgICAvLyBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyOjpDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxheWJh
Y2tUYXJnZXQoUmVmPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShi
b29sKSBvdmVycmlkZTsKKworICAgIHNpemVfdCBmaW5kKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJD
bGllbnQqLCB1aW50NjRfdCk7CisgICAgdm9pZCBjb25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0
b3JpbmcoKTsKKyAgICB2b2lkIHRhc2tUaW1lckZpcmVkKCk7CisKKyAgICB0eXBlZGVmIHN0ZDo6
dHVwbGU8V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCosIHVpbnQ2NF90LCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoQ2xpZW50U3RhdGUmKT4+IFRhc2tDYWxsYmFjazsKKyAgICBWZWN0b3I8VGFza0Nh
bGxiYWNrPiBtX3Rhc2tRdWV1ZTsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJNZWRpYVNlc3Npb25N
YW5hZ2VyPiBtX3Rhc2tUaW1lcjsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2xpZW50
U3RhdGU+PiBtX2NsaWVudFN0YXRlOworICAgIFJlZlB0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBt
X3BsYXliYWNrVGFyZ2V0OworICAgIGJvb2wgbV9leHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJs
ZSB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorCisjZW5kaWYgLy8gV2ViTWVkaWFTZXNz
aW9uTWFuYWdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lvbi9X
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVk
aWFTZXNzaW9uTWFuYWdlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnRfaAorI2Rl
ZmluZSBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50X2gKKworI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpCisKKyNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0LmgiCisj
aW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IE1lZGlhUGxheWJhY2tUYXJnZXQ7CisKK2NsYXNzIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF5YmFja1RhcmdldCh1aW50NjRfdCwgUmVm
PE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxP
dXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UodWludDY0X3QsIGJvb2wpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQodWludDY0X3QsIGJvb2wp
ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisKKyNlbmRpZiAvLyBXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5jcHAJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwNiw5
ICsxMDA2LDEyIEBAIHZvaWQgQXVkaW9Db250ZXh0OjptZWRpYUNhblN0YXJ0KCkKICAgICByZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9y
QXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKIH0KIAotYm9vbCBBdWRpb0NvbnRleHQ6OmlzUGxheWlu
Z0F1ZGlvKCkKK01lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBBdWRpb0NvbnRleHQ6Om1l
ZGlhU3RhdGUoKSBjb25zdAogewotICAgIHJldHVybiAhbV9pc1N0b3BTY2hlZHVsZWQgJiYgbV9k
ZXN0aW5hdGlvbk5vZGUgJiYgbV9kZXN0aW5hdGlvbk5vZGUtPmlzUGxheWluZ0F1ZGlvKCk7Cisg
ICAgaWYgKCFtX2lzU3RvcFNjaGVkdWxlZCAmJiBtX2Rlc3RpbmF0aW9uTm9kZSAmJiBtX2Rlc3Rp
bmF0aW9uTm9kZS0+aXNQbGF5aW5nQXVkaW8oKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUHJvZHVj
ZXI6OklzUGxheWluZ0F1ZGlvOworCisgICAgcmV0dXJuIE1lZGlhUHJvZHVjZXI6OklzTm90UGxh
eWluZzsKIH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OnBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVk
ZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUg
IkF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9Qcm9kdWNlci5oIgogI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1
ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIK
ICNpbmNsdWRlICJNZWRpYVNlc3Npb24uaCIKICNpbmNsdWRlIDxhdG9taWM+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KQEAgLTc2LDcgKzc2LDcgQEAgY2xhc3MgUGVyaW9kaWNXYXZlOwogLy8g
QXVkaW9Db250ZXh0IGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB0aGUgd2ViIGF1ZGlvIEFQSSBhbmQg
YWxsIEF1ZGlvTm9kZXMgYXJlIGNyZWF0ZWQgZnJvbSBpdC4KIC8vIEZvciB0aHJlYWQgc2FmZXR5
IGJldHdlZW4gdGhlIGF1ZGlvIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkLCBpdCBoYXMgYSBy
ZW5kZXJpbmcgZ3JhcGggbG9ja2luZyBtZWNoYW5pc20uIAogCi1jbGFzcyBBdWRpb0NvbnRleHQg
OiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXVk
aW9Db250ZXh0PiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBNZWRp
YUNhblN0YXJ0TGlzdGVuZXIsIHB1YmxpYyBBdWRpb1Byb2R1Y2VyLCBwcml2YXRlIE1lZGlhU2Vz
c2lvbkNsaWVudCB7CitjbGFzcyBBdWRpb0NvbnRleHQgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
LCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0PiwgcHVibGljIEV2ZW50
VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHB1Ymxp
YyBNZWRpYVByb2R1Y2VyLCBwcml2YXRlIE1lZGlhU2Vzc2lvbkNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgLy8gQ3JlYXRlIGFuIEF1ZGlvQ29udGV4dCBmb3IgcmVuZGVyaW5nIHRvIHRoZSBhdWRpbyBo
YXJkd2FyZS4KICAgICBzdGF0aWMgUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlKERvY3VtZW50
JiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgbWVkaWFDYW5TdGFydCgpIG92ZXJyaWRlOwogCi0gICAgLy8gQXVkaW9Qcm9k
dWNlcgotICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdBdWRpbygpIG92ZXJyaWRlOworICAgIC8v
IE1lZGlhUHJvZHVjZXIKKyAgICB2aXJ0dWFsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFn
cyBtZWRpYVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VNdXRl
ZFN0YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CiAKICAgICAvLyBUaGUgY29udGV4dCBpdHNlbGYg
a2VlcHMgYSByZWZlcmVuY2UgdG8gYWxsIHNvdXJjZSBub2Rlcy4gIFRoZSBzb3VyY2Ugbm9kZXMs
IHRoZW4gcmVmZXJlbmNlIGFsbCBub2RlcyB0aGV5J3JlIGNvbm5lY3RlZCB0by4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMywxMSBAQAogCQkwNzA3NTZE
RTE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDc1NkQ4MTQyMzlCNEIwMDQxNDE2MSAvKiBK
U1RleHRUcmFja0N1ZS5oICovOyB9OwogCQkwNzA3NTZERjE0MjM5QjRFMDA0MTQxNjEgLyogSlNU
ZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3MDc1NkQ5MTQyMzlCNEMwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3Qu
Y3BwICovOyB9OwogCQkwNzA3NTZFMDE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzA3
NTZEQTE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVMaXN0LmggKi87IH07CisJCTA3
MDlENzhFMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDlENzhDMUFFNTU1
NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCAqLzsgfTsKKwkJMDcwOUQ3
OEYxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDlENzhEMUFFNTU1NTQwMDRF
NDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDcwOUQ3OTIxQUU1NTU3RTAwNEU0MkY4IC8qIFdl
Yk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcwOUQ3OTAxQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWMuY3BwICovOyB9OworCQkwNzA5RDc5MzFBRTU1NTdFMDA0RTQyRjggLyog
V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcwOUQ3OTExQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwNzA5RDc5NTFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFu
YWdlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDcwOUQ3OTQxQUU1NUEyOTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGll
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
NzA5RkM0RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNsaWRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwOUZDNEQxMDI1REVFMzAw
NTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLzsgfTsKIAkJMDcwRTA5MTkxODc1RUVG
QzAwM0ExRDNDIC8qIE1lZGlhU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcwRTA5MTgxODc1RUQ5MzAwM0ExRDNDIC8qIE1lZGlhU2Vzc2lv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3
MEUwOTFCMTg3NUVGNzEwMDNBMUQzQyAvKiBNZWRpYVNlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwRTA5MUExODc1RUY3MTAwM0ExRDND
IC8qIE1lZGlhU2Vzc2lvbi5jcHAgKi87IH07CkBAIC0yNzUsNyArMjgwLDcgQEAKIAkJMDc4RTQz
REExQUJCNkM3RTAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OEU0M0Q4MUFCQjZDN0Uw
MDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc4RTQzREQxQUJCNkY2RjAwMUMyRkE2
IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OEU0M0RCMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc4RTQzREUxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzhFNDNEQzFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlck1hYy5tbSAqLzsgfTsKLQkJMDc5MjE2NTUxQUE1NjBBQTAwQTNDMDQ5IC8qIE1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTIxNjUzMUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDc5MjE2NTUxQUE1NjBBQTAwQTNDMDQ5IC8qIE1lZGlhUGxh
eWJhY2tUYXJnZXRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3OTIxNjUzMUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0
Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMDc5NDE3OTExNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzk0MTc4RjE2NkU4NTVG
MDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmNwcCAqLzsgfTsKIAkJMDc5NDE3OTIxNjZFODU1
RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3OTAxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRl
eHRUcmFjay5oICovOyB9OwogCQkwNzk0MTc5NDE2NkVBMDRFMDA5NDE2QzIgLyogSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDc5NDE3OTMxNjZFQTA0RTAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjA4
Miw3ICsyMDg3LDcgQEAKIAkJNTJDQ0E5RTgxNUUzRjY0QzAwNTNDNzdGIC8qIERPTURPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQ0NBOUU1MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZsb3dDb2xsZWN0
aW9uLmggKi87IH07CiAJCTUyQ0NBOUU5MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZs
b3dDb2xsZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJDQ0E5RTYxNUUzRjY0QzAwNTNDNzdGIC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rp
b24ubW0gKi87IH07CiAJCTUyQ0NBOUVBMTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZs
b3dDb2xsZWN0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyQ0NBOUU3MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZsb3dD
b2xsZWN0aW9uSW50ZXJuYWwuaCAqLzsgfTsKLQkJNTJFMkNBRkMxOUZGMDIwNzAwMUVFQjRGIC8q
IEF1ZGlvUHJvZHVjZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBBdWRpb1Byb2R1Y2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTJFMkNBRkMxOUZG
MDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRpYVBy
b2R1Y2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTJGMTA4NjUxNjJCNkRBNDAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjIxNjJC
NkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovOyB9OwogCQk1MkYxMDg2
NjE2MkI2REE4MDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjMxNjJCNkQ4MjAwOUFDODFF
IC8qIE1peGVkQ29udGVudENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1MkY1MkUxMTE0QTAxMzRGMDBBQ0MzOTcgLyogTlNTY3JvbGxl
ckltcERldGFpbHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkY1MkUxMDE0QTAxMzRGMDBBQ0MzOTcgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0g
Ki87IH07CkBAIC03MTA1LDYgKzcxMTAsMTEgQEAKIAkJMDcwNzU2RDgxNDIzOUI0QjAwNDE0MTYx
IC8qIEpTVGV4dFRyYWNrQ3VlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
VGV4dFRyYWNrQ3VlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MDc1NkQ5MTQy
MzlCNEMwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNUZXh0VHJhY2tDdWVMaXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNr
Q3VlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RleHRUcmFja0N1
ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwOUQ3OEMxQUU1NTU1NDAw
NEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA7IHBhdGggPSBtZWRp
YXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTA3MDlENzhEMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuaDsgcGF0aCA9IG1lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDlENzkwMUFFNTU1N0UwMDRFNDJGOCAvKiBX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwNzA5RDc5MTFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZWRpYVNl
c3Npb25NYW5hZ2VyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDlENzk0
MUFFNTVBMjkwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQu
aDsgcGF0aCA9IG1lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAvKiBB
Y2Nlc3NpYmlsaXR5U2xpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFj
Y2Vzc2liaWxpdHlTbGlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwREQ4
RjUwRjAxODY4MDAwNzI3REVCIC8qIG1lZGlhQ29udHJvbHMuY3NzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IG1lZGlhQ29udHJvbHMuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
NzBFMDkxODE4NzVFRDkzMDAzQTFEM0MgLyogTWVkaWFTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzI5OSw3ICs3MzA5LDcgQEAKIAkJMDc4RTQzRDgxQUJCNkM3RTAwMUMyRkE2IC8q
IE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzhFNDNEQjFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyTWFjLmg7IHBhdGggPSBvYmpjL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJN
YWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc4RTQzREMxQUJCNkY2RjAwMUMy
RkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tOyBw
YXRoID0gb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwNzkyMTY1MzFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTA3OTIxNjUzMUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWJhY2tUYXJn
ZXRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc5NDE3OEYxNjZFODU1
RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbmJhbmRUZXh0VHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzk0MTc5MDE2NkU4NTVGMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluYmFuZFRleHRUcmFjay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwNzk0MTc5MzE2NkVBMDRFMDA5NDE2QzIgLyogSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mjgz
LDcgKzkyOTMsNyBAQAogCQk1MkNDQTlFNTE1RTNGNjRDMDA1M0M3N0YgLyogRE9NRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01ET01O
YW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQ0NB
OUU2MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRE9NTmFtZWRGbG93Q29sbGVj
dGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDQ0E5RTcxNUUzRjY0QzAw
NTNDNzdGIC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25JbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uSW50ZXJuYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJFMkNBRkIxOUZGMDIwNzAwMUVFQjRG
IC8qIEF1ZGlvUHJvZHVjZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVk
aW9Qcm9kdWNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkUyQ0FGQjE5RkYw
MjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVByb2R1Y2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
RjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1peGVkQ29udGVudENoZWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyog
TWl4ZWRDb250ZW50Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
aXhlZENvbnRlbnRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjUy
RTEwMTRBMDEzNEYwMEFDQzM5NyAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ1MjUsNiArMTQ1MzUsMTYgQEAKIAkJCXRh
YldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJMDcwOUQ3OEIxQUU1NTUyRTAw
NEU0MkY4IC8qIG1lZGlhc2Vzc2lvbiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJMDcwOUQ3OTQxQUU1NUEyOTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lv
bk1hbmFnZXJDbGllbnQuaCAqLywKKwkJCQkwNzA5RDc4QzFBRTU1NTU0MDA0RTQyRjggLyogV2Vi
TWVkaWFTZXNzaW9uTWFuYWdlci5jcHAgKi8sCisJCQkJMDcwOUQ3OEQxQUU1NTU1NDAwNEU0MkY4
IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLywKKwkJCSk7CisJCQluYW1lID0gbWVkaWFz
ZXNzaW9uOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMDcyMjFCNDYxN0NF
QzMyNzAwODQ4RTUxIC8qIG1lZGlhc3RyZWFtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTE0NzI3LDE0ICsxNDc0NywxNiBAQAogCQkwNzZGMEQwODEyQjgx
OTI3MDBDMjZBQTQgLyogYXZmb3VuZGF0aW9uICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQkwNzFFNDk2RjFBRDVBQjVFMDA4QTUwQjQgLyogTWVkaWFQbGF5
YmFja1RhcmdldE1hYy5oICovLAotCQkJCTA3MUU0OTZEMUFENUFBMEQwMDhBNTBCNCAvKiBNZWRp
YVBsYXliYWNrVGFyZ2V0TWFjLm1tICovLAorCQkJCTA3MDlENzkwMUFFNTU1N0UwMDRFNDJGOCAv
KiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCAqLywKKwkJCQkwNzA5RDc5MTFBRTU1NTdF
MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oICovLAogCQkJCURGOUFGRDZG
MTNGQzMxQjAwMDE1RkVCNyAvKiBvYmpjICovLAogCQkJCUNERTNBODUyMTdGNUZDRTYwMEM1QkUy
MCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRi5oICovLAogCQkJCTA3RTlFMTJGMThGNjJCMzcwMDEx
QTNBNCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVBVkYuY3BwICovLAogCQkJCTA3
RTlFMTJEMThGNUUyNzYwMDExQTNBNCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVB
VkYuaCAqLywKIAkJCQkwN0I0NDJENDE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRi5jcHAgKi8sCiAJCQkJMDdCNDQyRDUxNjZDNzBCMDAwNTU2Q0FEIC8qIEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkYuaCAqLywKKwkJCQkwNzFFNDk2RjFBRDVBQjVFMDA4QTUwQjQg
LyogTWVkaWFQbGF5YmFja1RhcmdldE1hYy5oICovLAorCQkJCTA3MUU0OTZEMUFENUFBMEQwMDhB
NTBCNCAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TWFjLm1tICovLAogCQkJCTA3OEU0M0RCMUFCQjZG
NkYwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggKi8sCiAJCQkJMDc4
RTQzREMxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW0g
Ki8sCiAJCQkJMDc2RjBEMDkxMkI4MTkyNzAwQzI2QUE0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbi5jcHAgKi8sCkBAIC0xNjc5NSw3ICsxNjgxNyw2IEBACiAJCQkJODUzOEYwMDAw
QUQ3MTc3MDAwNkE4MUQxIC8qIEFic3RyYWN0Vmlldy5pZGwgKi8sCiAJCQkJQkNGNDhDRTYxMzcw
RDExNDAwNEU4N0Q2IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCAqLywKIAkJCQlDRURBMTJENjE1
MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggKi8sCi0JCQkJNTJFMkNB
RkIxOUZGMDIwNzAwMUVFQjRGIC8qIEF1ZGlvUHJvZHVjZXIuaCAqLywKIAkJCQk0NTgzMEQ0QjE2
NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwICovLAogCQkJCTQ1ODMw
RDRDMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29udHJvbGxlci5oICovLAogCQkJCUJD
MTI0RUU0MEMyNjQxQ0QwMDlFMjM0OSAvKiBCYXJQcm9wLmNwcCAqLywKQEAgLTE2ODc5LDYgKzE2
OTAwLDcgQEAKIAkJCQk5MzJBRDcwNDE3RUZBMkMzMDAzOEY4RkYgLyogTWFpbkZyYW1lLmggKi8s
CiAJCQkJQkM1OURFRkExNjlERUREODAwMTZBQzM0IC8qIG1ha2Vfc2V0dGluZ3MucGwgKi8sCiAJ
CQkJOTMxQkNDNjAxMTI0REZDQjAwQkU3MEREIC8qIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oICov
LAorCQkJCTUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggKi8sCiAJ
CQkJOTNFQjM1NUUwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMuY3BwICovLAogCQkJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzLmggKi8sCiAJCQkJQTlDNkU1QTMwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5h
dmlnYXRvci5jcHAgKi8sCkBAIC0xODMwMyw2ICsxODMyNSw3IEBACiAJCQkJOTcxMkE1NTMxNTAw
NEUzQzAwNDhBRjEwIC8qIGluZGV4ZWRkYiAqLywKIAkJCQlBQTdFQTBBOTE3NTU3QjFDMDBERjQ2
NDMgLyogaW5kaWV1aSAqLywKIAkJCQlDRDlBMzdGNTE3QzdEOTM2MDBDNUZBN0EgLyogbWVkaWFj
b250cm9scyAqLywKKwkJCQkwNzA5RDc4QjFBRTU1NTJFMDA0RTQyRjggLyogbWVkaWFzZXNzaW9u
ICovLAogCQkJCUIxQTk0MkREMTVCNUNFMjIwMEQ1MjVEMSAvKiBtZWRpYXNvdXJjZSAqLywKIAkJ
CQkwNzIyMUI0NjE3Q0VDMzI3MDA4NDhFNTEgLyogbWVkaWFzdHJlYW0gKi8sCiAJCQkJMzMzRjcw
M0QwRkI0OUMxNjAwOEUxMkE2IC8qIG5vdGlmaWNhdGlvbnMgKi8sCkBAIC0yMDc5OCw3ICsyMDgy
MSw3IEBACiAJCQkJMDdGODc2ODMxQUQ0QTk0NTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJn
ZXRDb250ZXh0LmggKi8sCiAJCQkJMDc4RTQzRDcxQUJCNkM3RTAwMUMyRkE2IC8qIE1lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXIuY3BwICovLAogCQkJCTA3OEU0M0Q4MUFCQjZDN0UwMDFDMkZBNiAv
KiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggKi8sCi0JCQkJMDc5MjE2NTMxQUE1NjBBQTAw
QTNDMDQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQuaCAqLywKKwkJCQkwNzky
MTY1MzFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oICovLAog
CQkJCUU0QjQxRTBDMENCRjkwQkQwMEFGMkVDRSAvKiBNZWRpYVBsYXllci5jcHAgKi8sCiAJCQkJ
RTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlhUGxheWVyLmggKi8sCiAJCQkJMDc5RjVF
NEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oICovLApAQCAtMjM3MTcs
NyArMjM3NDAsNiBAQAogCQkJCUZEMzU5MTkwMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFt
VGltZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDIwMTJCMDI2NzYwMEMxQTM1OSAv
KiBBdWRpb1Byb2Nlc3NpbmdFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwODQxMkIw
MjZGNzAwQzFBMzU5IC8qIEF1ZGlvUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkUy
Q0FGQzE5RkYwMjA3MDAxRUVCNEYgLyogQXVkaW9Qcm9kdWNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkQzMTYwODYxMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlvUmVzYW1wbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRDMxNjA4ODEyQjAyNkY3MDBDMUEzNTkgLyogQXVkaW9SZXNhbXBsZXJLZXJu
ZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEOEM0NkVDMTU0NjA4RTcwMEE1OTEwQyAvKiBBdWRp
b1NjaGVkdWxlZFNvdXJjZU5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjQxNDksNiArMjQxNzEs
NyBAQAogCQkJCTFBOEY2QkMzMERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUQzODlCMjBBOTkxQTdGMDAyODIxNDUgLyogRE9NQXR0
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExOEQwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUF0
dHJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcwOUQ3OTUxQUU1NUEyOTAwNEU0MkY4
IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTc2
RkI5RkVCMTlBNzI4NEIwMDQyMDU2MiAvKiBET01BdXRvY29tcGxldGVFcnJvckV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk3NkZCOUZFRDE5QTcyODRCMDA0MjA1NjIgLyogRE9NQXV0b2NvbXBs
ZXRlRXJyb3JFdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0NkVFRjEwN0ZE
QkFDMDA4NTcxOTMgLyogRE9NQmVmb3JlTG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1
Njk1LDYgKzI1NzE4LDcgQEAKIAkJCQlERjlBRkQ3MjEzRkMzMUQ4MDAxNUZFQjcgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDOEI1
QTMxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjEzRTYwQ0Q2ODFBOTAwRkFEQTc1IC8qIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkUyQ0FGQzE5RkYwMjA3
MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEUxOTU5MkEw
QTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MUU0
OTcwMUFENUFCNUUwMDhBNTBCNCAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TWFjLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0RTE5NTkyQzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRv
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTc4MCw2ICsyNTgwNCw3IEBACiAJCQkJRTEwQjlCNkMw
Qjc0NzU5OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNDQ0YwMjcwQUY2QzUyOTAwMDE4RTg5IC8qIE5hdmlnYXRpb25BY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3OUY0M0Q0MTA3NUU0NEEwMDAwRjgzQiAvKiBOYXZpZ2F0aW9uU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzA5RDc5MzFBRTU1NTdFMDA0RTQyRjggLyog
V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU1QTYw
RDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUREQTk0
QzIxOTY4N0FBNTAwNDUzMDI5IC8qIEpTRG9jdW1lbnRDdXN0b20uaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxMjcxOUM3MEVFRUMxNjgwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2Mjg1LDcgKzI2MzEwLDcgQEAKIAkJCQk5MzkxQTk5MTE2Mjc0NkNCMDAyOTcz
MzAgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQzM4
QkZGMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQTNFN0IxOTFCMkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwNzkyMTY1NTFBQTU2MEFBMDBB
M0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMDc5MjE2NTUxQUE1NjBBQTAwQTNDMDQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMUNCRDBEMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3Jv
bGxpbmdTdGF0ZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEzRTg0MTkxQjMxQkYwMDBG
MUI1NSAvKiBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTMxQ0JEMEYxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjY2MCw2ICsyNjY4NSw3IEBACiAJCQkJQjIy
MjdBODEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NDc2QzlFNjExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwODRBMDgyOTEyOEQ3ODY3MDAyREIxRjEgLyogU1ZHUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MDlENzhGMUFFNTU1
NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NEI2Qjk3ODEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTgzQzFENDM1MTc4RDVBQjUwMDE0MUU2OCAvKiBTVkdQYXRoU2VnTW92
ZXRvQWJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTk4QkRGMTFBODExNDMxMDBCMjJGQjUgLyog
UmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzYxMSw2ICsyNzYz
Nyw3IEBACiAJCQkJQkM5MDRCNzYwRDEwOTk4RjAwNjgwRDMyIC8qIENsYXNzTm9kZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0MDkwRkIxQUE1MUUxRDAwOTExOTFBIC8qIENvbnRlbnRG
aWx0ZXJVbmJsb2NrSGFuZGxlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDMDY1N0Qw
RjNDRTFCNzAwQ0QyRDg3IC8qIENsaWVudFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcw
OUQ3OTIxQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNDMDY1ODAwRjNDRTFCNzAwQ0QyRDg3IC8qIENsaWVudFJlY3RM
aXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1MDMxQjNGMEE0NEVGQzcwMEY5OTJFMCAvKiBD
bGlwYm9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREVBNzYzNTE0NjBCNzFBMDA4
QjMxRjEgLyogQ2xvY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzg3Niw2ICsyNzkwMyw3IEBA
CiAJCQkJODVDQTk3NUQwQTk2MkU1NDAwNjkwQ0NGIC8qIERPTURvY3VtZW50VHlwZS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTg1MThEQ0VBMEE5Q0M4MEQwMDkxQjdBNiAvKiBET01ET01JbXBsZW1l
bnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUyQ0NBOUU5MTVFM0Y2NEMwMDUzQzc3RiAv
KiBET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMDcwOUQ3
OEUxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkQ5QTI0NzMxNUI5QzJEMTAwRDM0NTI3IC8qIERPTURPTVNlY3VyaXR5UG9s
aWN5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNzY5NDU2NUMxMjE0REI2MzAwMDdDQkFFIC8qIERP
TURPTVRva2VuTGlzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBQUJBMjU5MTRCQzYxMzMwMEFB
OUExMSAvKiBET01FZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJBWE9iamVj
dENhY2hlLmgiCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkF0
dHIuaCIKLSNpbmNsdWRlICJBdWRpb1Byb2R1Y2VyLmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9u
LmgiCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNs
YXJhdGlvbi5oIgpAQCAtMTAwLDYgKzk5LDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCisj
aW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlMaXN0LmgiCiAj
aW5jbHVkZSAiTWVkaWFRdWVyeU1hdGNoZXIuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzLmgiCkBAIC0yMzAsNyArMjMwLDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50Lmgi
CisjaW5jbHVkZSAiTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oIgogI2VuZGlmCiAKIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CkBAIC01MjMsNyArNTIzLDYgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZy
YW1lKiBmcmFtZSwgY29uc3QgVQogICAgICwgbV9yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoZmFs
c2UpCiAgICAgLCBtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24oZmFsc2UpCiAgICAgLCBtX2hh
c1N0eWxlV2l0aFZpZXdwb3J0VW5pdHMoZmFsc2UpCi0gICAgLCBtX2lzUGxheWluZ0F1ZGlvKGZh
bHNlKQogewogICAgIGFsbERvY3VtZW50cygpLmFkZCh0aGlzKTsKIApAQCAtMzQxNSwxMyArMzQx
NCwxMyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVWaWV3cG9ydFVuaXRzT25SZXNpCiAgICAgfQog
fQogCi12b2lkIERvY3VtZW50OjphZGRBdWRpb1Byb2R1Y2VyKEF1ZGlvUHJvZHVjZXIqIGF1ZGlv
UHJvZHVjZXIpCit2b2lkIERvY3VtZW50OjphZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJvZHVjZXIq
IGF1ZGlvUHJvZHVjZXIpCiB7CiAgICAgbV9hdWRpb1Byb2R1Y2Vycy5hZGQoYXVkaW9Qcm9kdWNl
cik7CiAgICAgdXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVt
b3ZlQXVkaW9Qcm9kdWNlcihBdWRpb1Byb2R1Y2VyKiBhdWRpb1Byb2R1Y2VyKQordm9pZCBEb2N1
bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1Byb2R1Y2VyKQog
ewogICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKGF1ZGlvUHJvZHVjZXIpOwogICAgIHVwZGF0
ZUlzUGxheWluZ01lZGlhKCk7CkBAIC0zNDI5LDE4ICszNDI4LDE0IEBAIHZvaWQgRG9jdW1lbnQ6
OnJlbW92ZUF1ZGlvUHJvZHVjZXIoQXVkaW8KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRlSXNQbGF5
aW5nTWVkaWEoKQogewotICAgIGJvb2wgaXNQbGF5aW5nQXVkaW8gPSBmYWxzZTsKLSAgICBmb3Ig
KGF1dG8gYXVkaW9Qcm9kdWNlciA6IG1fYXVkaW9Qcm9kdWNlcnMpIHsKLSAgICAgICAgaWYgKGF1
ZGlvUHJvZHVjZXItPmlzUGxheWluZ0F1ZGlvKCkpIHsKLSAgICAgICAgICAgIGlzUGxheWluZ0F1
ZGlvID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE1l
ZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSA9IE1lZGlhUHJvZHVjZXI6OklzTm90
UGxheWluZzsKKyAgICBmb3IgKGF1dG8gYXVkaW9Qcm9kdWNlciA6IG1fYXVkaW9Qcm9kdWNlcnMp
CisgICAgICAgIHN0YXRlIHw9IGF1ZGlvUHJvZHVjZXItPm1lZGlhU3RhdGUoKTsKIAotICAgIGlm
IChpc1BsYXlpbmdBdWRpbyA9PSBtX2lzUGxheWluZ0F1ZGlvKQorICAgIGlmIChzdGF0ZSA9PSBt
X21lZGlhU3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faXNQbGF5aW5nQXVkaW8gPSBp
c1BsYXlpbmdBdWRpbzsKKyAgICBtX21lZGlhU3RhdGUgPSBzdGF0ZTsKIAogICAgIGlmIChwYWdl
KCkpCiAgICAgICAgIHBhZ2UoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKQEAgLTY1MzMsNzIg
KzY1MjgsODUgQEAgdm9pZCBEb2N1bWVudDo6c2V0SW5wdXRDdXJzb3IoUGFzc1JlZlB0cgogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotdm9pZCBEb2N1bWVu
dDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1l
bnQpCitzdGF0aWMgdWludDY0X3QgbmV4dFBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkKCkK
K3sKKyAgICBzdGF0aWMgdWludDY0X3QgY29udGV4dElkID0gMDsKKyAgICByZXR1cm4gKytjb250
ZXh0SWQ7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
KE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQmIGNsaWVudCkKIHsKICAgICBQYWdlKiBwYWdlID0g
dGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFn
ZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHZpZXcoKS0+bGFzdEtub3duTW91c2VQb3NpdGlv
bigpLCBpczxIVE1MVmlkZW9FbGVtZW50PihlbGVtZW50KSk7CisgICAgQVNTRVJUKCFtX2NsaWVu
dFRvSURNYXAuY29udGFpbnMoJmNsaWVudCkpOworCisgICAgdWludDY0X3QgY29udGV4dElkID0g
bmV4dFBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkKCk7CisgICAgbV9jbGllbnRUb0lETWFw
LmFkZCgmY2xpZW50LCBjb250ZXh0SWQpOworICAgIG1faWRUb0NsaWVudE1hcC5hZGQoY29udGV4
dElkLCAmY2xpZW50KTsKKyAgICBwYWdlLT5hZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChj
b250ZXh0SWQpOwogfQogCi12b2lkIERvY3VtZW50OjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudChNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50JiBjbGllbnQpCit2b2lkIERvY3Vt
ZW50OjpyZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChNZWRpYVBsYXliYWNrVGFyZ2V0
Q2xpZW50JiBjbGllbnQpCiB7CisgICAgQVNTRVJUKG1fY2xpZW50VG9JRE1hcC5jb250YWlucygm
Y2xpZW50KSk7CisgICAgdWludDY0X3QgY29udGV4dElkID0gbV9jbGllbnRUb0lETWFwLmdldCgm
Y2xpZW50KTsKKyAgICBtX2lkVG9DbGllbnRNYXAucmVtb3ZlKGNvbnRleHRJZCk7CisgICAgbV9j
bGllbnRUb0lETWFwLnJlbW92ZSgmY2xpZW50KTsKKwogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsYXliYWNr
VGFyZ2V0Q2xpZW50cy5hZGQoJmNsaWVudCk7Ci0KLSAgICBSZWZQdHI8TWVkaWFQbGF5YmFja1Rh
cmdldD4gdGFyZ2V0ID0gcGFnZS0+cGxheWJhY2tUYXJnZXQoKTsKLSAgICBpZiAodGFyZ2V0KQot
ICAgICAgICBjbGllbnQuZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoKnRhcmdldCk7Ci0gICAgY2xp
ZW50LmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKHBhZ2UtPmhhc1dpcmVs
ZXNzUGxheWJhY2tUYXJnZXQoKSk7CisgICAgcGFnZS0+cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQoY29udGV4dElkKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlUGxheWJhY2tU
YXJnZXRQaWNrZXJDbGllbnQoTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCYgY2xpZW50
KQordm9pZCBEb2N1bWVudDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKE1lZGlhUGxheWJhY2tU
YXJnZXRDbGllbnQmIGNsaWVudCwgYm9vbCBpc1ZpZGVvKQogewotICAgIG1fcGxheWJhY2tUYXJn
ZXRDbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLSAgICBjb25maWd1cmVQbGF5YmFja1RhcmdldE1v
bml0b3JpbmcoKTsKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIGlmICghcGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY2xpZW50VG9JRE1hcC5jb250YWlu
cygmY2xpZW50KSk7CisgICAgcGFnZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKG1fY2xpZW50
VG9JRE1hcC5nZXQoJmNsaWVudCksIHZpZXcoKS0+bGFzdEtub3duTW91c2VQb3NpdGlvbigpLCBp
c1ZpZGVvKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6Y29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25p
dG9yaW5nKCkKK3ZvaWQgRG9jdW1lbnQ6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVE
aWRDaGFuZ2UoTWVkaWFQbGF5YmFja1RhcmdldENsaWVudCYgY2xpZW50LCBNZWRpYVByb2R1Y2Vy
OjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCiB7CiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhZ2UtPmNvbmZpZ3Vy
ZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOworICAgIEFTU0VSVChtX2NsaWVudFRvSURNYXAu
Y29udGFpbnMoJmNsaWVudCkpOworICAgIHBhZ2UtPnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
U3RhdGVEaWRDaGFuZ2UobV9jbGllbnRUb0lETWFwLmdldCgmY2xpZW50KSwgc3RhdGUpOwogfQog
Ci1ib29sIERvY3VtZW50OjpyZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCkK
K3ZvaWQgRG9jdW1lbnQ6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKHVpbnQ2
NF90IGNsaWVudElkLCBib29sIGF2YWlsYWJsZSkKIHsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IG1fcGxheWJhY2tUYXJnZXRDbGllbnRzKSB7Ci0gICAgICAgIGlmIChjbGllbnQtPnJlcXVpcmVz
UGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSkgewotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBUYXJnZXRDbGll
bnRUb0lkTWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0NsaWVudE1hcC5maW5kKGNsaWVudElkKTsK
KyAgICBpZiAoaXQgPT0gbV9pZFRvQ2xpZW50TWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CiAK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgaXQtPnZhbHVlLT5leHRlcm5hbE91dHB1dERldmljZUF2
YWlsYWJsZURpZENoYW5nZShhdmFpbGFibGUpOwogfQogCi12b2lkIERvY3VtZW50OjpwbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShib29sIGF2YWlsYWJsZSkKK3ZvaWQgRG9jdW1l
bnQ6OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNsaWVudElkLCBSZWY8TWVkaWFQbGF5YmFj
a1RhcmdldD4mJiB0YXJnZXQpCiB7Ci0gICAgaWYgKG1fcGxheWJhY2tUYXJnZXRzQXZhaWxhYmxl
ID09IGF2YWlsYWJsZSkKKyAgICBUYXJnZXRDbGllbnRUb0lkTWFwOjppdGVyYXRvciBpdCA9IG1f
aWRUb0NsaWVudE1hcC5maW5kKGNsaWVudElkKTsKKyAgICBpZiAoaXQgPT0gbV9pZFRvQ2xpZW50
TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wbGF5YmFja1RhcmdldHNBdmFpbGFi
bGUgPSBhdmFpbGFibGU7CiAKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fcGxheWJhY2tUYXJn
ZXRDbGllbnRzKQotICAgICAgICBjbGllbnQtPmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxl
RGlkQ2hhbmdlKGF2YWlsYWJsZSk7CisgICAgaXQtPnZhbHVlLT5zZXRQbGF5YmFja1RhcmdldCh0
YXJnZXQuY29weVJlZigpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlkQ2hvb3NlUGxheWJhY2tU
YXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgZGV2aWNlKQordm9pZCBEb2N1bWVudDo6
c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQodWludDY0X3QgY2xpZW50SWQsIGJvb2wgc2hv
dWxkUGxheSkKIHsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fcGxheWJhY2tUYXJnZXRDbGll
bnRzKQotICAgICAgICBjbGllbnQtPmRpZENob29zZVBsYXliYWNrVGFyZ2V0KGRldmljZS5jb3B5
UmVmKCkpOwotfQorICAgIFRhcmdldENsaWVudFRvSWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRv
Q2xpZW50TWFwLmZpbmQoY2xpZW50SWQpOworICAgIGlmIChpdCA9PSBtX2lkVG9DbGllbnRNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKIAotI2VuZGlmCisgICAgaXQtPnZhbHVlLT5zZXRTaG91
bGRQbGF5VG9QbGF5YmFja1RhcmdldChzaG91bGRQbGF5KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRl
ICJEb2N1bWVudFRpbWluZy5oIgogI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgogI2luY2x1ZGUg
Ik11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1FdmVudC5oIgpAQCAtNjksNyArNzAsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEFYT2JqZWN0Q2FjaGU7CiBjbGFzcyBBdHRyOwotY2xhc3MgQXVkaW9Q
cm9kdWNlcjsKIGNsYXNzIENEQVRBU2VjdGlvbjsKIGNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKIGNs
YXNzIENTU1N0eWxlRGVjbGFyYXRpb247CkBAIC0xMjYsNyArMTI2LDcgQEAgY2xhc3MgSlNOb2Rl
OwogY2xhc3MgTG9jYWxlOwogY2xhc3MgTWVkaWFDYW5TdGFydExpc3RlbmVyOwogY2xhc3MgTWVk
aWFQbGF5YmFja1RhcmdldDsKLWNsYXNzIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQ7
CitjbGFzcyBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50OwogY2xhc3MgTWVkaWFRdWVyeUxpc3Q7
CiBjbGFzcyBNZWRpYVF1ZXJ5TWF0Y2hlcjsKIGNsYXNzIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHM7CkBAIC0xMjI5LDIxICsxMjI5LDIyIEBAIHB1YmxpYzoKICAgICBib29sIGhhc1N0eWxl
V2l0aFZpZXdwb3J0VW5pdHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1N0eWxlV2l0aFZpZXdwb3J0
VW5pdHM7IH0KICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0VW5pdHNPblJlc2l6ZSgpOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdWRpb1Byb2R1Y2VyKEF1ZGlvUHJvZHVjZXIqKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIoQXVkaW9Qcm9kdWNlciop
OwotICAgIGJvb2wgaXNQbGF5aW5nQXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2lzUGxheWluZ0F1
ZGlvOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJv
ZHVjZXIqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIoTWVk
aWFQcm9kdWNlciopOworICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0YXRlOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB1cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogICAgIHZvaWQgcGFnZU11dGVkU3RhdGVEaWRD
aGFuZ2UoKTsKICAgICBXZWFrUHRyPERvY3VtZW50PiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4g
bV93ZWFrRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19Q
TEFZQkFDS19UQVJHRVQpCi0gICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3Qg
SFRNTE1lZGlhRWxlbWVudCYpOwotICAgIHZvaWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVm
PE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpOwotICAgIHZvaWQgYWRkUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQoTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCYpOwotICAgIHZvaWQgcmVt
b3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudCYpOwotICAgIGJvb2wgcmVxdWlyZXNQbGF5YmFja1RhcmdldFJvdXRlTW9uaXRvcmluZygp
OwotICAgIHZvaWQgY29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7Ci0gICAgdm9p
ZCBwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShib29sKTsKKyAgICB2b2lkIGFk
ZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQmKTsK
KyAgICB2b2lkIHJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KE1lZGlhUGxheWJhY2tU
YXJnZXRDbGllbnQmKTsKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihNZWRpYVBs
YXliYWNrVGFyZ2V0Q2xpZW50JiwgYm9vbCk7CisgICAgdm9pZCBwbGF5YmFja1RhcmdldFBpY2tl
ckNsaWVudFN0YXRlRGlkQ2hhbmdlKE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQmLCBNZWRpYVBy
b2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MpOworCisgICAgdm9pZCBzZXRQbGF5YmFja1RhcmdldCh1
aW50NjRfdCwgUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpOworICAgIHZvaWQgcGxheWJhY2tU
YXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UodWludDY0X3QsIGJvb2wpOworICAgIHZvaWQgc2V0
U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQodWludDY0X3QsIGJvb2wpOwogI2VuZGlmCiAKIHBy
b3RlY3RlZDoKQEAgLTE2ODQsMTIgKzE2ODUsMTQgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9o
YXNTdHlsZVdpdGhWaWV3cG9ydFVuaXRzOwogCi0gICAgSGFzaFNldDxBdWRpb1Byb2R1Y2VyKj4g
bV9hdWRpb1Byb2R1Y2VyczsKLSAgICBib29sIG1faXNQbGF5aW5nQXVkaW87CisgICAgSGFzaFNl
dDxNZWRpYVByb2R1Y2VyKj4gbV9hdWRpb1Byb2R1Y2VyczsKKyAgICBNZWRpYVByb2R1Y2VyOjpN
ZWRpYVN0YXRlRmxhZ3MgbV9tZWRpYVN0YXRlIHsgTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5n
IH07CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIEhhc2hTZXQ8
V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCo+IG1fcGxheWJhY2tUYXJn
ZXRDbGllbnRzOwotICAgIGJvb2wgbV9wbGF5YmFja1RhcmdldHNBdmFpbGFibGUgeyBmYWxzZSB9
OworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1Rh
cmdldENsaWVudCo+IFRhcmdldENsaWVudFRvSWRNYXA7CisgICAgVGFyZ2V0Q2xpZW50VG9JZE1h
cCBtX2lkVG9DbGllbnRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6Ok1lZGlhUGxh
eWJhY2tUYXJnZXRDbGllbnQqLCB1aW50NjRfdD4gVGFyZ2V0SWRUb0NsaWVudE1hcDsKKyAgICBU
YXJnZXRJZFRvQ2xpZW50TWFwIG1fY2xpZW50VG9JRE1hcDsKICNlbmRpZgogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODMwNjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MDEsOCArNDAxLDEwIEBAIEhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVt
ZW50KCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAg
ICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0
YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSkKKyAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZl
bnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSkg
eworICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gZmFs
c2U7CiAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJp
bGl0eUxpc3RlbmVycygqdGhpcywgZmFsc2UpOworICAgIH0KICNlbmRpZgogCiAgICAgaWYgKG1f
bWVkaWFDb250cm9sbGVyKSB7CkBAIC00MjgsNyArNDMwLDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6
fkhUTUxNZWRpYUVsZW1lbnQoKQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0
aERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBtX21lZGlhU2Vzc2lvbi0+cmVn
aXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdpc3Rl
cldpdGhEb2N1bWVudCgqdGhpcyk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2Fu
U3RhcnQpCiAgICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsK
QEAgLTQ1NSw3ICs0NTcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aERv
Y3VtCiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3RlcldpdGhEb2N1bWVudChEb2N1
bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0ZXJXaXRoRG9j
dW1lbnQoZG9jdW1lbnQpOworICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lzdGVyV2l0aERvY3Vt
ZW50KCp0aGlzKTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAg
ICAgICAgZG9jdW1lbnQucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwpAQCAtMzAx
Nyw2ICszMDE5LDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXQK
ICAgICAgICAgfQogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS52b2x1bWVjaGFu
Z2VFdmVudCk7CiAgICAgICAgIGRvY3VtZW50KCkudXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKKwor
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgICAgIG1fbWVkaWFTZXNz
aW9uLT5tZWRpYVN0YXRlRGlkQ2hhbmdlKCp0aGlzLCBtZWRpYVN0YXRlKCkpOworI2VuZGlmCiAg
ICAgfQogI2VuZGlmCiB9CkBAIC00MjkyLDcgKzQyOTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6Om1lZGlhUGxheWVyRW5naW5lCiAKICAgICBtX2hhdmVQcmVwYXJlZFRvUGxheSA9IGZhbHNl
OwogCi0gICAgbV9tZWRpYVNlc3Npb24tPmFwcGx5TWVkaWFQbGF5ZXJSZXN0cmljdGlvbnMoKnRo
aXMpOworICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYUVuZ2luZVVwZGF0ZWQoKnRoaXMpOwogCiAj
aWYgRU5BQkxFKFdFQl9BVURJTykKICAgICBpZiAobV9hdWRpb1NvdXJjZU5vZGUgJiYgYXVkaW9T
b3VyY2VQcm92aWRlcigpKSB7CkBAIC00NTk3LDkgKzQ2MDMsMTMgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRQbGF5aW5nKGJvb2wgcAogewogICAgIGlmIChtX3BsYXlpbmcgPT0gcGxheWlu
ZykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgbV9wbGF5aW5nID0gcGxheWluZzsKICAg
ICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CisKKyNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQorICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0YXRlRGlkQ2hh
bmdlKCp0aGlzLCBtZWRpYVN0YXRlKCkpOworI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0UGF1c2VkSW50ZXJuYWwoYm9vbCBiKQpAQCAtNDY4OSw2ICs0Njk5LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpjbGVhck1lZGlhUGxheWVyKAogCiAjaWYgRU5BQkxFKFdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1l
cygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSkgeworICAg
ICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gZmFsc2U7CiAg
ICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxp
c3RlbmVycygqdGhpcywgZmFsc2UpOwogCiAgICAgICAgIC8vIFNlbmQgYW4gYXZhaWxhYmlsaXR5
IGV2ZW50IGluIGNhc2Ugc2NyaXB0cyB3YW50IHRvIGhpZGUgdGhlIHBpY2tlciB3aGVuIHRoZSBl
bGVtZW50CkBAIC00ODYzLDYgKzQ4NzQsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRp
YVBsYXllckN1cnJlbgogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyQ3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoJXApIC0gd2Via2l0
Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyA9ICVzIiwgdGhpcywgYm9vbFN0cmluZyh3
ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCkpKTsKICAgICBzY2hlZHVsZUV2
ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hh
bmdlZEV2ZW50KTsKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAg
bV9tZWRpYVNlc3Npb24tPm1lZGlhU3RhdGVEaWRDaGFuZ2UoKnRoaXMsIG1lZGlhU3RhdGUoKSk7
CisjZW5kaWYKIH0KIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjphZGRFdmVudExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCkBAIC00ODc0LDggKzQ4ODksMTAgQEAgYm9vbCBIVE1M
TWVkaWFFbGVtZW50OjphZGRFdmVudExpc3RlbmVyKAogICAgIGlmICghTm9kZTo6YWRkRXZlbnRM
aXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKGlzRmlyc3RBdmFpbGFiaWxpdHlDaGFuZ2VkTGlzdGVuZXIpCisg
ICAgaWYgKGlzRmlyc3RBdmFpbGFiaWxpdHlDaGFuZ2VkTGlzdGVuZXIpIHsKKyAgICAgICAgbV9o
YXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IHRydWU7CiAgICAgICAgIG1f
bWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycygq
dGhpcywgdHJ1ZSk7CisgICAgfQogCiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6
YWRkRXZlbnRMaXN0ZW5lciglcCkgLSAnd2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHlj
aGFuZ2VkJyIsIHRoaXMpOwogICAgIApAQCAtNDg5Myw4ICs0OTEwLDEwIEBAIGJvb2wgSFRNTE1l
ZGlhRWxlbWVudDo6cmVtb3ZlRXZlbnRMaXN0ZW4KIAogICAgIGJvb2wgZGlkUmVtb3ZlTGFzdEF2
YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lciA9ICFoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVz
KCkud2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQpOwogICAgIExP
RyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoJXApIC0gcmVt
b3ZlZCBsYXN0IGxpc3RlbmVyID0gJXMiLCB0aGlzLCBib29sU3RyaW5nKGRpZFJlbW92ZUxhc3RB
dmFpbGFiaWxpdHlDaGFuZ2VkTGlzdGVuZXIpKTsKLSAgICBpZiAoZGlkUmVtb3ZlTGFzdEF2YWls
YWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikKKyAgICBpZiAoZGlkUmVtb3ZlTGFzdEF2YWlsYWJpbGl0
eUNoYW5nZWRMaXN0ZW5lcikgeworICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmls
aXR5TGlzdGVuZXJzID0gZmFsc2U7CiAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycygqdGhpcywgZmFsc2UpOworICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDkzMiwxNiArNDk1MSwxMCBAQCBib29sIEhUTUxNZWRp
YUVsZW1lbnQ6OmlzUGxheWluZ1RvV2lyZWxlCiAgICAgcmV0dXJuIGlzUGxheWluZzsKIH0KIAot
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3Zv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCBz
aG91bGRQbGF5KQogewogICAgIGlmIChtX3BsYXllcikKLSAgICAgICAgbV9wbGF5ZXItPnN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKLX0KLQotdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
dG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQotewotICAgIGlmIChtX3BsYXllcikKLSAgICAg
ICAgbV9wbGF5ZXItPnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAgICAgICBtX3Bs
YXllci0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoc2hvdWxkUGxheSk7CiB9CiAjZW5k
aWYKIApAQCAtNTQ3Myw2ICs1NDg2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVN
ZWRpYVBsYXllcgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBp
ZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZh
aWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSkgeworICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5TGlzdGVuZXJzID0gdHJ1ZTsKICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhh
c1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKCp0aGlzLCB0cnVlKTsKICAgICAg
ICAgZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCk7IC8vIEVu
c3VyZSB0aGUgZXZlbnQgbGlzdGVuZXIgZ2V0cyBhdCBsZWFzdCBvbmUgZXZlbnQuCiAgICAgfQpA
QCAtNjE3MSw5ICs2MTg1LDI5IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6b3ZlcnJpZGVCYWNr
Z3JvdW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSFRNTE1lZGlhRWxlbWVudDo6aXNQ
bGF5aW5nQXVkaW8oKQorTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIEhUTUxNZWRpYUVs
ZW1lbnQ6Om1lZGlhU3RhdGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1BsYXlpbmcoKSAmJiBo
YXNBdWRpbygpICYmICFtdXRlZCgpOworCisgICAgTWVkaWFTdGF0ZUZsYWdzIHN0YXRlID0gSXNO
b3RQbGF5aW5nOworCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICBp
ZiAoaXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkpCisgICAgICAgIHN0YXRlIHw9
IElzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2U7CisKKyAgICBpZiAobV9oYXNQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUxpc3RlbmVycykKKyAgICAgICAgc3RhdGUgfD0gUmVxdWlyZXNQbGF5YmFj
a1RhcmdldE1vbml0b3Jpbmc7CisjZW5kaWYKKworICAgIGlmICghaXNQbGF5aW5nKCkpCisgICAg
ICAgIHJldHVybiBzdGF0ZTsKKworICAgIGlmIChoYXNBdWRpbygpICYmICFtdXRlZCgpKQorICAg
ICAgICBzdGF0ZSB8PSBJc1BsYXlpbmdBdWRpbzsKKworICAgIGlmIChoYXNWaWRlbygpKQorICAg
ICAgICBzdGF0ZSB8PSBJc1BsYXlpbmdWaWRlbzsKKworICAgIHJldHVybiBzdGF0ZTsKIH0KIAog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDEyICsyOSwxMiBAQAogI2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkF1ZGlvUHJvZHVj
ZXIuaCIKICNpbmNsdWRlICJHZW5lcmljRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIkhUTUxNZWRp
YVNlc3Npb24uaCIKICNpbmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgor
I2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKICNpbmNsdWRlICJQYWdlVGhyb3R0bGVyLmgiCiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNzIE1lZGlhU3Ry
ZWFtOwogCiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50CiAgICAgOiBwdWJsaWMgSFRNTEVsZW1lbnQK
LSAgICAsIHByaXZhdGUgTWVkaWFQbGF5ZXJDbGllbnQsIHB1YmxpYyBNZWRpYVBsYXllclN1cHBv
cnRzVHlwZUNsaWVudCwgcHJpdmF0ZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QsIHB1YmxpYyBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UgLCBwdWJsaWMgTWVk
aWFTZXNzaW9uQ2xpZW50LCBwcml2YXRlIEF1ZGlvUHJvZHVjZXIKKyAgICAsIHByaXZhdGUgTWVk
aWFQbGF5ZXJDbGllbnQsIHB1YmxpYyBNZWRpYVBsYXllclN1cHBvcnRzVHlwZUNsaWVudCwgcHJp
dmF0ZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1Ymxp
YyBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UgLCBwdWJsaWMgTWVkaWFTZXNzaW9uQ2xpZW50LCBw
cml2YXRlIE1lZGlhUHJvZHVjZXIKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLCBwcml2
YXRlIEF1ZGlvVHJhY2tDbGllbnQKICAgICAsIHByaXZhdGUgVGV4dFRyYWNrQ2xpZW50CkBAIC0z
NjUsOCArMzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5VG9XaXJlbGVz
c1BsYXliYWNrVGFyZ2V0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGlzUGxh
eWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0
PiYmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rh
cmdldCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tU
YXJnZXQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUGxheVRvUGxheWJh
Y2tUYXJnZXQoYm9vbCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGZ1
bmN0aW9uLgpAQCAtNDU3LDYgKzQ1Niw4IEBAIHB1YmxpYzoKIAogICAgIGRvdWJsZSBtYXhCdWZm
ZXJlZFRpbWUoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0
ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKwogcHJvdGVjdGVkOgogICAgIEhU
TUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50JiwgYm9vbCk7CiAg
ICAgdmlydHVhbCB+SFRNTE1lZGlhRWxlbWVudCgpOwpAQCAtNzIzLDggKzcyNCw2IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFuZChNZWRp
YVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5kVHlwZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIG92ZXJyaWRlQmFja2dyb3VuZFBsYXliYWNrUmVzdHJpY3Rpb24oKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIC8vIEF1ZGlvUHJvZHVjZXIgb3ZlcnJpZGVzCi0gICAgdmlydHVhbCBib29s
IGlzUGxheWluZ0F1ZGlvKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VNdXRlZFN0
YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGVmZmVjdGl2ZU11dGVkKCkgY29u
c3Q7CkBAIC05MTksNiArOTE4LDEwIEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IG1fbWVkaWFTdHJlYW1TcmNPYmplY3Q7CiAjZW5k
aWYKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgYm9vbCBtX2hh
c1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzIHsgZmFsc2UgfTsKKyNlbmRpZgog
fTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFTZXNzaW9uLmNwcAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBA
QAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKICNp
bmNsdWRlICJQYWdlLmgiCkBAIC04MCwxOSArODEsMTkgQEAgSFRNTE1lZGlhU2Vzc2lvbjo6SFRN
TE1lZGlhU2Vzc2lvbihNZWRpYQogewogfQogCi12b2lkIEhUTUxNZWRpYVNlc3Npb246OnJlZ2lz
dGVyV2l0aERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKK3ZvaWQgSFRNTE1lZGlhU2Vzc2lv
bjo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkK
IHsKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIGRvY3VtZW50LmFk
ZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KCp0aGlzKTsKKyAgICBlbGVtZW50LmRvY3VtZW50
KCkuYWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoKnRoaXMpOwogI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKICNlbmRpZgog
fQogCi12b2lkIEhUTUxNZWRpYVNlc3Npb246OnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1l
bnQmIGRvY3VtZW50KQordm9pZCBIVE1MTWVkaWFTZXNzaW9uOjp1bnJlZ2lzdGVyV2l0aERvY3Vt
ZW50KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCiB7CiAjaWYgRU5BQkxFKFdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBkb2N1bWVudC5yZW1vdmVQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudCgqdGhpcyk7CisgICAgZWxlbWVudC5kb2N1bWVudCgpLnJlbW92ZVBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50KCp0aGlzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3Vt
ZW50KTsKICNlbmRpZgpAQCAtMjA1LDggKzIwNiw3IEBAIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6
c2hvd1BsYXliYWNrVGFyZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE1lZGlhU2Vz
c2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5zZXRDdXJyZW50U2Vzc2lvbigqdGhpcyk7Ci0g
ICAgZWxlbWVudC5kb2N1bWVudCgpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihlbGVtZW50KTsK
KyAgICBlbGVtZW50LmRvY3VtZW50KCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCp0aGlzLCBp
czxIVE1MVmlkZW9FbGVtZW50PihlbGVtZW50KSk7CiB9CiAKIGJvb2wgSFRNTE1lZGlhU2Vzc2lv
bjo6aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNv
bnN0CkBAIC0yNzQsMjUgKzI3NCwyMCBAQCB2b2lkIEhUTUxNZWRpYVNlc3Npb246OnNldFdpcmVs
ZXNzVmlkZW9QCiB2b2lkIEhUTUxNZWRpYVNlc3Npb246OnNldEhhc1BsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5TGlzdGVuZXJzKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQsIGJvb2wg
aGFzTGlzdGVuZXJzKQogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNlc3Npb246OnNldEhh
c1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzIC0gaGFzTGlzdGVuZXJzICVzIiwg
aGFzTGlzdGVuZXJzID8gIlRSVUUiIDogIkZBTFNFIik7Ci0gICAgVU5VU0VEX1BBUkFNKGVsZW1l
bnQpOwotCi0gICAgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IGhh
c0xpc3RlbmVyczsKIAogI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVu
dCk7CisgICAgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IGhhc0xp
c3RlbmVyczsKICAgICBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuY29uZmln
dXJlV2lyZUxlc3NUYXJnZXRNb25pdG9yaW5nKCk7CiAjZWxzZQotICAgIGVsZW1lbnQuZG9jdW1l
bnQoKS5jb25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0b3JpbmcoKTsKKyAgICBlbGVtZW50LmRv
Y3VtZW50KCkucGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSgqdGhpcywg
ZWxlbWVudC5tZWRpYVN0YXRlKCkpOwogI2VuZGlmCiB9CiAKLXZvaWQgSFRNTE1lZGlhU2Vzc2lv
bjo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgZGV2
aWNlKQordm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpzZXRQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQ
bGF5YmFja1RhcmdldD4mJiBkZXZpY2UpCiB7CiAgICAgbV9wbGF5YmFja1RhcmdldCA9IFdURjo6
bW92ZShkZXZpY2UpOwogICAgIGNsaWVudCgpLnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoKm1f
cGxheWJhY2tUYXJnZXQuY29weVJlZigpKTsKLSAgICBpZiAobV9wbGF5YmFja1RhcmdldC0+aGFz
QWN0aXZlUm91dGUoKSAmJiBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuY3Vy
cmVudFNlc3Npb24oKSA9PSB0aGlzKQotICAgICAgICBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFy
Z2V0KCk7Ci0gICAgZWxzZQotICAgICAgICBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsK
IH0KIAogdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjp0YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGlt
ZXJGaXJlZCgpCkBAIC0zMDAsNyArMjk1LDcgQEAgdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjp0YXJn
ZXRBdmFpbGFiaWxpdAogICAgIGNsaWVudCgpLndpcmVsZXNzUm91dGVzQXZhaWxhYmxlRGlkQ2hh
bmdlKCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VB
dmFpbGFibGVEaWRDaGFuZ2UoYm9vbCBoYXNUYXJnZXRzKSBjb25zdAordm9pZCBIVE1MTWVkaWFT
ZXNzaW9uOjpleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShib29sIGhhc1Rh
cmdldHMpCiB7CiAgICAgaWYgKG1faGFzUGxheWJhY2tUYXJnZXRzID09IGhhc1RhcmdldHMpCiAg
ICAgICAgIHJldHVybjsKQEAgLTMxMiwxMSArMzA3LDYgQEAgdm9pZCBIVE1MTWVkaWFTZXNzaW9u
OjpleHRlcm5hbE91dHB1dERldgogICAgICAgICBtX3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRU
aW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLWJvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6cmVxdWly
ZXNQbGF5YmFja1RhcmdldFJvdXRlTW9uaXRvcmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
aGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnM7Ci19Ci0KIGJvb2wgSFRNTE1l
ZGlhU2Vzc2lvbjo6Y2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0IHx8ICFtX3BsYXliYWNrVGFyZ2V0LT5oYXNBY3RpdmVS
b3V0ZSgpKQpAQCAtMzMzLDIxICszMjMsMTYgQEAgYm9vbCBIVE1MTWVkaWFTZXNzaW9uOjppc1Bs
YXlpbmdUb1dpcmVsZQogICAgIHJldHVybiBjbGllbnQoKS5pc1BsYXlpbmdUb1dpcmVsZXNzUGxh
eWJhY2tUYXJnZXQoKTsKIH0KIAotdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KCkKK3ZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6c2V0U2hvdWxkUGxheVRv
UGxheWJhY2tUYXJnZXQoYm9vbCBzaG91bGRQbGF5KQogewotICAgIGlmICghbV9wbGF5YmFja1Rh
cmdldCB8fCAhbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgY2xpZW50KCkuc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAg
IG1fc2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQgPSBzaG91bGRQbGF5OworICAgIGNsaWVudCgp
LnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHNob3VsZFBsYXkpOwogfQogCi12b2lkIEhU
TUxNZWRpYVNlc3Npb246OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpCit2b2lkIEhUTUxN
ZWRpYVNlc3Npb246Om1lZGlhU3RhdGVEaWRDaGFuZ2UoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYg
ZWxlbWVudCwgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIHN0YXRlKQogewotICAgIGlm
ICghbV9wbGF5YmFja1RhcmdldCB8fCAhbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xpZW50KCkuc3RvcFBsYXlpbmdUb1BsYXliYWNr
VGFyZ2V0KCk7Ci19ICAgIAorICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5wbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKCp0aGlzLCBzdGF0ZSk7Cit9CiAjZW5kaWYKIAogTWVk
aWFQbGF5ZXI6OlByZWxvYWQgSFRNTE1lZGlhU2Vzc2lvbjo6ZWZmZWN0aXZlUHJlbG9hZEZvckVs
ZW1lbnQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgY29uc3QKQEAgLTM4NiwxMiAr
MzcxLDE2IEBAIGJvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6cmVxdWlyZXNGdWxsc2NyZWUKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjphcHBseU1lZGlhUGxheWVy
UmVzdHJpY3Rpb25zKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCit2b2lkIEhUTUxN
ZWRpYVNlc3Npb246Om1lZGlhRW5naW5lVXBkYXRlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JiBl
bGVtZW50KQogewotICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNlc3Npb246OmFwcGx5TWVkaWFQ
bGF5ZXJSZXN0cmljdGlvbnMiKTsKKyAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpt
ZWRpYUVuZ2luZVVwZGF0ZWQiKTsKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCiAgICAgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoZWxlbWVudCwgbV9yZXN0
cmljdGlvbnMgJiBXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk7CisgICAgaWYgKG1fcGxh
eWJhY2tUYXJnZXQpCisgICAgICAgIGNsaWVudCgpLnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQo
Km1fcGxheWJhY2tUYXJnZXQuY29weVJlZigpKTsKKyAgICBpZiAobV9zaG91bGRQbGF5VG9QbGF5
YmFja1RhcmdldCkKKyAgICAgICAgY2xpZW50KCkuc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJn
ZXQobV9zaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShlbGVtZW50KTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFT
ZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNz
aW9uLmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
U2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBAIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBIVE1MTWVkaWFTZXNzaW9uKE1lZGlhU2Vzc2lvbkNsaWVudCYpOwogICAgIHZpcnR1
YWwgfkhUTUxNZWRpYVNlc3Npb24oKSB7IH0KIAotICAgIHZvaWQgcmVnaXN0ZXJXaXRoRG9jdW1l
bnQoRG9jdW1lbnQmKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQm
KTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0aERvY3VtZW50KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQm
KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoY29uc3QgSFRNTE1lZGlhRWxlbWVu
dCYpOwogCiAgICAgYm9vbCBwbGF5YmFja1Blcm1pdHRlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50
JikgY29uc3Q7CiAgICAgYm9vbCBkYXRhTG9hZGluZ1Blcm1pdHRlZChjb25zdCBIVE1MTWVkaWFF
bGVtZW50JikgY29uc3Q7CkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICBib29sIHBhZ2VB
bGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0
OwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICB2b2lkIHNob3dQ
bGF5YmFja1RhcmdldFBpY2tlcihjb25zdCBIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAgYm9vbCBj
dXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBj
b25zdDsKICAgICBib29sIGN1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkKGNvbnN0IEhU
TUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKLSAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tl
cihjb25zdCBIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAgYm9vbCBoYXNXaXJlbGVzc1BsYXliYWNr
VGFyZ2V0cyhjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CiAKICAgICBib29sIHdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsK
QEAgLTY2LDE1ICs2NiwxNSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuUGxheVRv
V2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9v
bCBpc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsK
KworICAgIHZvaWQgbWVkaWFTdGF0ZURpZENoYW5nZShjb25zdCBIVE1MTWVkaWFFbGVtZW50Jiwg
TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKTsKICNlbmRpZgogCiAgICAgYm9vbCByZXF1
aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4o
Y29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OwogICAgIE1lZGlhUGxheWVyOjpQcmVsb2Fk
IGVmZmVjdGl2ZVByZWxvYWRGb3JFbGVtZW50KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25z
dDsKIAotICAgIHZvaWQgYXBwbHlNZWRpYVBsYXllclJlc3RyaWN0aW9ucyhjb25zdCBIVE1MTWVk
aWFFbGVtZW50Jik7CisgICAgdm9pZCBtZWRpYUVuZ2luZVVwZGF0ZWQoY29uc3QgSFRNTE1lZGlh
RWxlbWVudCYpOwogCiAgICAgLy8gUmVzdHJpY3Rpb25zIHRvIG1vZGlmeSBkZWZhdWx0IGJlaGF2
aW9ycy4KICAgICBlbnVtIEJlaGF2aW9yUmVzdHJpY3Rpb25GbGFncyB7CkBAIC0xMDMsMTAgKzEw
MywxMyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAg
ICAgdm9pZCB0YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGltZXJGaXJlZCgpOwogCi0gICAgLy8g
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBkaWRDaG9v
c2VQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJv
b2wpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1BsYXliYWNrVGFy
Z2V0Um91dGVNb25pdG9yaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gTWVkaWFQbGF5YmFj
a1RhcmdldENsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF5YmFja1RhcmdldChSZWY8TWVk
aWFQbGF5YmFja1RhcmdldD4mJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4dGVybmFs
T3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChib29sKSBvdmVycmlkZTsKKyNl
bmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIHJlcXVpcmVzUGxheWJhY2tUYXJnZXRS
b3V0ZU1vbml0b3JpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc1BsYXliYWNrVGFy
Z2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzOyB9CiAjZW5kaWYKIAogICAgIEJlaGF2aW9yUmVzdHJp
Y3Rpb25zIG1fcmVzdHJpY3Rpb25zOwpAQCAtMTE0LDkgKzExNywxMiBAQCBwcml2YXRlOgogI2lm
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgbXV0YWJsZSBUaW1lciBtX3Rh
cmdldEF2YWlsYWJpbGl0eUNoYW5nZWRUaW1lcjsKICAgICBSZWZQdHI8TWVkaWFQbGF5YmFja1Rh
cmdldD4gbV9wbGF5YmFja1RhcmdldDsKLSAgICBib29sIG1faGFzUGxheWJhY2tUYXJnZXRBdmFp
bGFiaWxpdHlMaXN0ZW5lcnMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRQbGF5VG9QbGF5
YmFja1RhcmdldCB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBib29sIG1faGFzUGxheWJhY2tUYXJn
ZXRzIHsgZmFsc2UgfTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1faGFz
UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgeyBmYWxzZSB9OworI2VuZGlmCiB9
OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1ZGlvUHJvZHVjZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1ZGlvUHJvZHVjZXIuaAkocmV2aXNpb24gMTgz
MDY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9BdWRpb1Byb2R1Y2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgQXVkaW9Qcm9kdWNlcl9oCi0jZGVmaW5lIEF1ZGlvUHJvZHVjZXJf
aAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUHJvZHVjZXIgewotcHVibGlj
OgotICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdBdWRpbygpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIH5BdWRpb1Byb2R1Y2VyKCkgeyB9Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNp
bmNsdWRlICJMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhUHJvZHVj
ZXIuaCIKICNpbmNsdWRlICJQYWdlVGhyb3R0bGVyLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Lmgi
CiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCkBAIC00MjMsMTQgKzQyNCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXco
Y29uc3QgRnJhbWVWaWV3KikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGVudW0gTWVk
aWFTdGF0ZSB7Ci0gICAgICAgIElzTm90UGxheWluZyA9IDAsCi0gICAgICAgIElzUGxheWluZ0F1
ZGlvID0gMSA8PCAwLAotICAgICAgICBJc1BsYXlpbmdWaWRlbyA9IDEgPDwgMSwKLSAgICAgICAg
SXNQbGF5aW5nVG9FeHRlcm5hbERldmljZSA9IDEgPDwgMiwKLSAgICB9OwotICAgIHR5cGVkZWYg
dW5zaWduZWQgTWVkaWFTdGF0ZUZsYWdzOwotICAgIHZpcnR1YWwgdm9pZCBpc1BsYXlpbmdNZWRp
YURpZENoYW5nZShNZWRpYVN0YXRlRmxhZ3MpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpc1BsYXlp
bmdNZWRpYURpZENoYW5nZShNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MpIHsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIHNldFBhZ2VBY3Rpdml0eVN0YXRlKFBhZ2VBY3Rpdml0eVN0YXRlOjpG
bGFncykgeyB9CiAKQEAgLTQ1Miw5ICs0NDYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVBdXRvRmlsbEJ1dHRvbkNsaWNrKEhUTUxJbnB1dEVsZW1lbnQmKSB7IH0KIAogI2lm
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgdmlydHVhbCB2b2lkIHNob3dQ
bGF5YmFja1RhcmdldFBpY2tlcihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wgLyogaXNW
aWRlbyAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNr
VGFyZ2V0cygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVu
dCh1aW50NjRfdCAvKmNvbnRleHRJZCovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUGxh
eWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QgLypjb250ZXh0SWQqLykgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcih1aW50NjRfdCAvKmNvbnRleHRJ
ZCovLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wgLyogaXNWaWRlbyAqLykgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2Uo
dWludDY0X3QgLypjb250ZXh0SWQqLywgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKSB7
IH0KICNlbmRpZgogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlh
UHJvZHVjZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhUHJvZHVj
ZXIuaAkocmV2aXNpb24gMTgzMDY4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1ZGlvUHJv
ZHVjZXIuaDoxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhUHJvZHVjZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb1Byb2R1Y2VyX2gKKyNkZWZpbmUgQXVk
aW9Qcm9kdWNlcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9Qcm9kdWNl
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUGxheWluZ0F1ZGlvKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpID0gMDsKKworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgfkF1ZGlvUHJvZHVjZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhUHJvZHVjZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhUHJvZHVjZXIuaAkod29ya2luZyBjb3B5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVByb2R1Y2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE4
ICsyMywyNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEF1ZGlvUHJvZHVjZXJf
aAotI2RlZmluZSBBdWRpb1Byb2R1Y2VyX2gKKyNpZm5kZWYgTWVkaWFQcm9kdWNlcl9oCisjZGVm
aW5lIE1lZGlhUHJvZHVjZXJfaAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1ZGlv
UHJvZHVjZXIgeworY2xhc3MgTWVkaWFQcm9kdWNlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBi
b29sIGlzUGxheWluZ0F1ZGlvKCkgPSAwOworICAgIGVudW0gTWVkaWFTdGF0ZSB7CisgICAgICAg
IElzTm90UGxheWluZyA9IDAsCisgICAgICAgIElzUGxheWluZ0F1ZGlvID0gMSA8PCAwLAorICAg
ICAgICBJc1BsYXlpbmdWaWRlbyA9IDEgPDwgMSwKKyAgICAgICAgSXNQbGF5aW5nVG9FeHRlcm5h
bERldmljZSA9IDEgPDwgMiwKKyAgICAgICAgUmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3Jp
bmcgPSAxIDw8IDMsCisgICAgfTsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIE1lZGlhU3RhdGVGbGFn
czsKKworICAgIHZpcnR1YWwgTWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkgPSAwOwogCiBwcm90
ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+QXVkaW9Qcm9kdWNlcigpIHsgfQorICAgIHZpcnR1YWwgfk1l
ZGlhUHJvZHVjZXIoKSB7IH0KIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNp
b24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE0LDcgKzIxNCw2IEBAIFBhZ2U6OlBhZ2UoUGFnZUNvbmZpZ3VyYXRpb24mIHBhZ2VD
b25maWcKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZSgqV1RGOjptb3ZlKHBhZ2VDb25maWd1cmF0
aW9uLnZpc2l0ZWRMaW5rU3RvcmUpKQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpCiAgICAgLCBtX2lzQ2xvc2luZyhmYWxzZSkKLSAgICAsIG1faXNQbGF5
aW5nQXVkaW8oZmFsc2UpCiB7CiAgICAgc2V0VGltZXJUaHJvdHRsaW5nRW5hYmxlZChtX3ZpZXdT
dGF0ZSAmIFZpZXdTdGF0ZTo6SXNWaXN1YWxseUlkbGUpOwogCkBAIC0xMTk5LDIwICsxMTk4LDE3
IEBAIHZvaWQgUGFnZTo6ZW5hYmxlTGVnYWN5UHJpdmF0ZUJyb3dzaW5nKGIKIAogdm9pZCBQYWdl
Ojp1cGRhdGVJc1BsYXlpbmdNZWRpYSgpCiB7Ci0gICAgYm9vbCBpc1BsYXlpbmdBdWRpbyA9IGZh
bHNlOworICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSA9IE1lZGlhUHJv
ZHVjZXI6OklzTm90UGxheWluZzsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAg
ICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmlzUGxheWluZ0F1ZGlvKCkpIHsKLSAgICAgICAgICAg
IGlzUGxheWluZ0F1ZGlvID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cisg
ICAgICAgIHN0YXRlIHw9IGZyYW1lLT5kb2N1bWVudCgpLT5tZWRpYVN0YXRlKCk7CiAgICAgfQog
Ci0gICAgaWYgKGlzUGxheWluZ0F1ZGlvID09IG1faXNQbGF5aW5nQXVkaW8pCisgICAgaWYgKHN0
YXRlID09IG1fbWVkaWFTdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pc1BsYXlpbmdB
dWRpbyA9IGlzUGxheWluZ0F1ZGlvOworICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRlOwogCi0gICAg
Y2hyb21lKCkuY2xpZW50KCkuaXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UobV9pc1BsYXlpbmdBdWRp
byA/IENocm9tZUNsaWVudDo6SXNQbGF5aW5nQXVkaW8gOiBDaHJvbWVDbGllbnQ6OklzTm90UGxh
eWluZyk7CisgICAgY2hyb21lKCkuY2xpZW50KCkuaXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2Uoc3Rh
dGUpOwogfQogCiB2b2lkIFBhZ2U6OnNldE11dGVkKGJvb2wgbXV0ZWQpCkBAIC0xNjgyLDUzICsx
Njc4LDQ5IEBAIHZvaWQgUGFnZTo6c2V0U2Vzc2lvbklEKFNlc3Npb25JRCBzZXNzaW8KIH0KIAog
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi1SZWZQdHI8TWVkaWFQbGF5YmFj
a1RhcmdldD4gUGFnZTo6cGxheWJhY2tUYXJnZXQoKSBjb25zdAordm9pZCBQYWdlOjphZGRQbGF5
YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgaWYgKCFt
X3BsYXliYWNrVGFyZ2V0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjaHJvbWUoKS5j
bGllbnQoKS5hZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChjb250ZXh0SWQpOworfQogCi0g
ICAgcmV0dXJuIG1fcGxheWJhY2tUYXJnZXQuY29weVJlZigpOwordm9pZCBQYWdlOjpyZW1vdmVQ
bGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgY2hy
b21lKCkuY2xpZW50KCkucmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoY29udGV4dElk
KTsKIH0KIAotdm9pZCBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGxvY2F0aW9uLCBib29sIGlzVmlkZW8pCit2b2lkIFBhZ2U6OnNob3dQbGF5
YmFja1RhcmdldFBpY2tlcih1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBsb2NhdGlvbiwgYm9vbCBpc1ZpZGVvKQogewogI2lmIFBMQVRGT1JNKElPUykKICAgICAv
LyBGSVhNRTogcmVmYWN0b3IgaU9TIGltcGxlbWVudGF0aW9uLgorICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0SWQpOwogICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CiAgICAgY2hyb21lKCkuY2xp
ZW50KCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGlzVmlkZW8pOwogI2Vsc2UKLSAgICBjaHJv
bWUoKS5jbGllbnQoKS5zaG93UGxheWJhY2tUYXJnZXRQaWNrZXIobG9jYXRpb24sIGlzVmlkZW8p
OworICAgIGNocm9tZSgpLmNsaWVudCgpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb250ZXh0
SWQsIGxvY2F0aW9uLCBpc1ZpZGVvKTsKICNlbmRpZgogfQogCi12b2lkIFBhZ2U6OmRpZENob29z
ZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmIHRhcmdldCkKK3ZvaWQg
UGFnZTo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCBj
b250ZXh0SWQsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKIHsKLSAgICBt
X3BsYXliYWNrVGFyZ2V0ID0gV1RGOjptb3ZlKHRhcmdldCk7Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCkpCi0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kaWRDaG9vc2VQbGF5YmFja1Rhcmdl
dCgqbV9wbGF5YmFja1RhcmdldC5jb3B5UmVmKCkpOworICAgIGNocm9tZSgpLmNsaWVudCgpLnBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UoY29udGV4dElkLCBzdGF0ZSk7
CiB9CiAKLXZvaWQgUGFnZTo6cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoYm9v
bCBhdmFpbGFibGUpCit2b2lkIFBhZ2U6OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRl
eHRJZCwgUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgdGFyZ2V0KQogewotICAgIG1faGFzV2ly
ZWxlc3NQbGF5YmFja1RhcmdldCA9IGF2YWlsYWJsZTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
RGlkQ2hhbmdlKGF2YWlsYWJsZSk7CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zZXRQbGF5
YmFja1RhcmdldChjb250ZXh0SWQsIHRhcmdldC5jb3B5UmVmKCkpOwogfQogCi12b2lkIFBhZ2U6
OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpCit2b2lkIFBhZ2U6OnBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBhdmFp
bGFibGUpCiB7Ci0gICAgYm9vbCBtb25pdG9yaW5nUmVxdWlyZWQgPSBmYWxzZTsKLSAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnJlcXVp
cmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSkgewotICAgICAgICAgICAgbW9uaXRv
cmluZ1JlcXVpcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQorICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+
cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoY29udGV4dElkLCBhdmFpbGFibGUp
OworfQogCi0gICAgaWYgKG1vbml0b3JpbmdSZXF1aXJlZCkKLSAgICAgICAgY2hyb21lKCkuY2xp
ZW50KCkuc3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7Ci0gICAgZWxzZQotICAg
ICAgICBjaHJvbWUoKS5jbGllbnQoKS5zdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOwor
dm9pZCBQYWdlOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRfdCBjbGllbnRJ
ZCwgYm9vbCBzaG91bGRQbGF5KQoreworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgICAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoY2xpZW50
SWQsIHNob3VsZFBsYXkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lv
biAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRl
ICJMYXlvdXRNaWxlc3RvbmVzLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUg
Ik1lZGlhUHJvZHVjZXIuaCIKICNpbmNsdWRlICJQYWdlVGhyb3R0bGVyLmgiCiAjaW5jbHVkZSAi
UGFnZVZpc2liaWxpdHlTdGF0ZS5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24uaCIKQEAgLTQyMiwx
OSArNDIzLDIwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuYWJsZUxlZ2Fj
eVByaXZhdGVCcm93c2luZyhib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogICAgIGJvb2wg
dXNlc0VwaGVtZXJhbFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRC5pc0VwaGVt
ZXJhbCgpOyB9CiAKLSAgICBib29sIGlzUGxheWluZ0F1ZGlvKCkgY29uc3QgeyByZXR1cm4gbV9p
c1BsYXlpbmdBdWRpbzsgfQorICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRp
YVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0YXRlOyB9CiAgICAgdm9pZCB1cGRhdGVJ
c1BsYXlpbmdNZWRpYSgpOwogICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0
ZWQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE11dGVkKGJvb2wpOwogCiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICB2b2lkIHNob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wpOwotICAgIGJvb2wgaGFzV2ly
ZWxlc3NQbGF5YmFja1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzV2lyZWxlc3NQbGF5YmFj
a1RhcmdldDsgfQotICAgIFJlZlB0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBwbGF5YmFja1Rhcmdl
dCgpIGNvbnN0OwotICAgIHZvaWQgY29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxN
ZWRpYVBsYXliYWNrVGFyZ2V0PiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGJvb2wpOworICAgIHZvaWQgYWRkUGxheWJhY2tU
YXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QpOworICAgIHZvaWQgcmVtb3ZlUGxheWJhY2tUYXJn
ZXRQaWNrZXJDbGllbnQodWludDY0X3QpOworICAgIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKHVpbnQ2NF90LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wpOworICAgIHZvaWQg
cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCwgTWVkaWFQ
cm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
UGxheWJhY2tUYXJnZXQodWludDY0X3QsIFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdl
KHVpbnQ2NF90LCBib29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFBsYXlU
b1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90LCBib29sKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAt
NTg5LDE0ICs1OTEsOSBAQCBwcml2YXRlOgogCiAgICAgU2Vzc2lvbklEIG1fc2Vzc2lvbklEOwog
Ci0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBSZWZQdHI8TWVkaWFQ
bGF5YmFja1RhcmdldD4gbV9wbGF5YmFja1RhcmdldDsKLSAgICBib29sIG1faGFzV2lyZWxlc3NQ
bGF5YmFja1RhcmdldCB7IGZhbHNlIH07Ci0jZW5kaWYKLQogICAgIGJvb2wgbV9pc0Nsb3Npbmc7
CiAKLSAgICBib29sIG1faXNQbGF5aW5nQXVkaW87CisgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFT
dGF0ZUZsYWdzIG1fbWVkaWFTdGF0ZSB7IE1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZyB9Owog
fTsKIAogaW5saW5lIFBhZ2VHcm91cCYgUGFnZTo6Z3JvdXAoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgJKHJldmlzaW9uIDE4MzA2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMiArMjYsMTMgQEAKICNpZm5kZWYgTWVkaWFTZXNzaW9uX2gKICNkZWZpbmUg
TWVkaWFTZXNzaW9uX2gKIAorI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSNp
bmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiTWVk
aWFQbGF5YmFja1RhcmdldENsaWVudC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQxLDcgKzQyLDcgQEAgY2xhc3MgTWVkaWFTZXNzaW9uQ2xpZW50OwogCiBjbGFzcyBNZWRp
YVNlc3Npb24KICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIDogcHVi
bGljIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQKKyAgICA6IHB1YmxpYyBNZWRpYVBs
YXliYWNrVGFyZ2V0Q2xpZW50CiAjZW5kaWYKIHsKIHB1YmxpYzoKQEAgLTExOSwxNCArMTIwLDE2
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNr
VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQbGF5
aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSB7IH0KIAogI2lmIEVOQUJM
RShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgLy8gTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBkaWRDaG9vc2VQbGF5YmFja1RhcmdldChSZWY8
TWVkaWFQbGF5YmFja1RhcmdldD4mJikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4
dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wpIGNvbnN0IG92ZXJyaWRl
IHsgfQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9y
aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAvLyBNZWRpYVBsYXli
YWNrVGFyZ2V0Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIHNldFBsYXliYWNrVGFyZ2V0KFJlZjxN
ZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXh0
ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgb3ZlcnJpZGUgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wpIG92ZXJy
aWRlIHsgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBib29sIHJl
cXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogI2VuZGlmCiAKIHByb3RlY3RlZDoKQEAgLTE3Miw4ICsxNzUsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJh
Y2tUYXJnZXQ+JiYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5VG9XaXJlbGVzc1BsYXli
YWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQ
bGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCkgeyB9CiAKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIH5NZWRpYVNlc3Npb25DbGllbnQoKSB7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIu
Y3BwCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9N
ZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDI1ICsxNjYsNiBA
QCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpTZXNzaW9uUmVzdHJpY3Rpb25zCiAgICAgcmV0dXJuIG1f
cmVzdHJpY3Rpb25zW3R5cGVdOwogfQogCi1ib29sIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Np
b25TaG91bGRCZWdpblBsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoTWVkaWFTZXNzaW9u
JiBzZXNzaW9uKSBjb25zdAotewotICAgIGlmICghc2Vzc2lvbi5jYW5QbGF5VG9XaXJlbGVzc1Bs
YXliYWNrVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzZXNzaW9u
LmlzUGxheWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBWZWN0b3I8TWVkaWFTZXNzaW9uKj4gc2Vzc2lvbnMgPSBtX3Nlc3Npb25zOwot
ICAgIGZvciAoYXV0byogb25lU2Vzc2lvbiA6IHNlc3Npb25zKSB7Ci0gICAgICAgIGlmIChvbmVT
ZXNzaW9uID09ICZzZXNzaW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChv
bmVTZXNzaW9uLT5pc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBN
ZWRpYVNlc3Npb25NYW5hZ2VyOjpzZXNzaW9uV2lsbEJlZ2luUGxheWJhY2soTWVkaWFTZXNzaW9u
JiBzZXNzaW9uKQogewogICAgIExPRyhNZWRpYSwgIk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Np
b25XaWxsQmVnaW5QbGF5YmFjayAtICVwIiwgJnNlc3Npb24pOwpAQCAtMjA0LDIwICsxODUsMTQg
QEAgYm9vbCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzZXNzaW9uV2lsbEJlZwogICAgIGlmIChtX2lu
dGVycnVwdGVkKQogICAgICAgICBlbmRJbnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpOb0ZsYWdz
KTsKIAotICAgIGJvb2wgc2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQgPSBzZXNzaW9uU2hvdWxk
QmVnaW5QbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KHNlc3Npb24pOwogICAgIFZlY3Rv
cjxNZWRpYVNlc3Npb24qPiBzZXNzaW9ucyA9IG1fc2Vzc2lvbnM7CiAgICAgZm9yIChhdXRvKiBv
bmVTZXNzaW9uIDogc2Vzc2lvbnMpIHsKICAgICAgICAgaWYgKG9uZVNlc3Npb24gPT0gJnNlc3Np
b24pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNob3VsZFBsYXlUb1BsYXli
YWNrVGFyZ2V0KQotICAgICAgICAgICAgb25lU2Vzc2lvbi0+c3RvcFBsYXlpbmdUb1BsYXliYWNr
VGFyZ2V0KCk7CiAgICAgICAgIGlmIChvbmVTZXNzaW9uLT5tZWRpYVR5cGUoKSA9PSBzZXNzaW9u
VHlwZSAmJiByZXN0cmljdGlvbnMgJiBDb25jdXJyZW50UGxheWJhY2tOb3RQZXJtaXR0ZWQpCiAg
ICAgICAgICAgICBvbmVTZXNzaW9uLT5wYXVzZVNlc3Npb24oKTsKICAgICB9CiAKLSAgICBpZiAo
c2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpCi0gICAgICAgIHNlc3Npb24uc3RhcnRQbGF5aW5n
VG9QbGF5YmFja1RhcmdldCgpOwotCiAgICAgdXBkYXRlU2Vzc2lvblN0YXRlKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0yOTQsNyArMjY5LDcgQEAgYm9vbCBNZWRpYVNlc3Npb25NYW5hZ2Vy
OjpzZXNzaW9uUmVzdHJpYwogCiBib29sIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Npb25DYW5M
b2FkTWVkaWEoY29uc3QgTWVkaWFTZXNzaW9uJiBzZXNzaW9uKSBjb25zdAogewotICAgIHJldHVy
biBzZXNzaW9uLnN0YXRlKCkgPT0gTWVkaWFTZXNzaW9uOjpQbGF5aW5nIHx8ICFzZXNzaW9uLmlz
SGlkZGVuKCk7CisgICAgcmV0dXJuIHNlc3Npb24uc3RhdGUoKSA9PSBNZWRpYVNlc3Npb246OlBs
YXlpbmcgfHwgIXNlc3Npb24uaXNIaWRkZW4oKSB8fCBzZXNzaW9uLmlzUGxheWluZ1RvV2lyZWxl
c3NQbGF5YmFja1RhcmdldCgpOwogfQogCiB2b2lkIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OmFwcGxp
Y2F0aW9uV2lsbEVudGVyQmFja2dyb3VuZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uTWFuYWdlci5oCShyZXZpc2lvbiAx
ODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNiBAQCBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBJbnRlcm5hbHM7CiAKICAgICB2b2lkIHVwZGF0ZVNlc3Npb25TdGF0ZSgpOwot
ICAgIGJvb2wgc2Vzc2lvblNob3VsZEJlZ2luUGxheWluZ1RvV2lyZWxlc3NQbGF5YmFja1Rhcmdl
dChNZWRpYVNlc3Npb24mKSBjb25zdDsKIAogICAgIC8vIFJlbW90ZUNvbW1hbmRMaXN0ZW5lckNs
aWVudAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVtb3RlQ29u
dHJvbENvbW1hbmQoTWVkaWFTZXNzaW9uOjpSZW1vdGVDb250cm9sQ29tbWFuZFR5cGUpIG92ZXJy
aWRlOwpAQCAtMTE2LDEyICsxMTUsMTYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3lz
dGVtRGlkV2FrZSgpIG92ZXJyaWRlOwogCiAgICAgU2Vzc2lvblJlc3RyaWN0aW9ucyBtX3Jlc3Ry
aWN0aW9uc1tNZWRpYVNlc3Npb246OldlYkF1ZGlvICsgMV07Ci0KICAgICBWZWN0b3I8TWVkaWFT
ZXNzaW9uKj4gbV9zZXNzaW9uczsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVDb21tYW5k
TGlzdGVuZXI+IG1fcmVtb3RlQ29tbWFuZExpc3RlbmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
eXN0ZW1TbGVlcExpc3RlbmVyPiBtX3N5c3RlbVNsZWVwTGlzdGVuZXI7CiAgICAgUmVmUHRyPEF1
ZGlvSGFyZHdhcmVMaXN0ZW5lcj4gbV9hdWRpb0hhcmR3YXJlTGlzdGVuZXI7CisKKyNpZiBFTkFC
TEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQorICAgIFJlZlB0
cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBtX3BsYXliYWNrVGFyZ2V0OworICAgIGJvb2wgbV9jYW5Q
bGF5VG9UYXJnZXQgeyBmYWxzZSB9OworI2VuZGlmCisKICAgICBib29sIG1faW50ZXJydXB0ZWQg
eyBmYWxzZSB9OwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQuaAkocmV2aXNpb24g
MTgzMDY4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyQ2xpZW50Lmg6MTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnRfaAorI2RlZmluZSBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50X2gK
KworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisKKyNpbmNsdWRlICJNZWRp
YVBsYXliYWNrVGFyZ2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQ
bGF5YmFja1RhcmdldDsKKworY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCgp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRp
YVBsYXliYWNrVGFyZ2V0PiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4dGVybmFsT3V0cHV0
RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
Ym9vbCByZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCkgY29uc3QgPSAwOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkKKworI2VuZGlmIC8vIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJD
bGllbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
YmFja1RhcmdldENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQuaAkod29ya2luZyBjb3B5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldENsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyOSArMjMsMjkgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnRfaAotI2RlZmluZSBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50X2gKKyNp
Zm5kZWYgTWVkaWFQbGF5YmFja1RhcmdldENsaWVudF9oCisjZGVmaW5lIE1lZGlhUGxheWJhY2tU
YXJnZXRDbGllbnRfaAogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKIAog
I2luY2x1ZGUgIk1lZGlhUGxheWJhY2tUYXJnZXQuaCIKKyNpbmNsdWRlICJNZWRpYVByb2R1Y2Vy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsK
IAotY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCB7CitjbGFzcyBNZWRpYVBs
YXliYWNrVGFyZ2V0Q2xpZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5NZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB+TWVkaWFQbGF5YmFja1Rhcmdl
dENsaWVudCgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZENob29zZVBsYXliYWNrVGFyZ2V0
KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4dGVy
bmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wpIGNvbnN0ID0gMDsKLQotICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5
YmFja1RhcmdldD4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmlj
ZUF2YWlsYWJsZURpZENoYW5nZShib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3Vs
ZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAKLSNl
bmRpZiAvLyBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50X2gKKyNlbmRpZiAvLyBNZWRp
YVBsYXliYWNrVGFyZ2V0Q2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuY3Bw
CShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTkgKzQz
LDE2IEBAIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6On5NZWRpYVBsYXliYWMKIHZvaWQgTWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IEZs
b2F0UmVjdCYsIGJvb2wpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
OwogfQogCiB2b2lkIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnN0YXJ0aW5nTW9uaXRvcmlu
Z1BsYXliYWNrVGFyZ2V0cygpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuOwogfQogCiB2b2lkIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnN0b3BNb25pdG9yaW5n
UGxheWJhY2tUYXJnZXRzKCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm47CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyLmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQogCiAgICAgcHVi
bGljOgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVmPE1l
ZGlhUGxheWJhY2tUYXJnZXQ+JiYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBsYXli
YWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSA9IDA7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShib29sKSA9IDA7
CiAKICAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1Rhcmdl
dFBpY2tlckNsaWVudC5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlckNsaWVudF9oCi0jZGVmaW5lIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJD
bGllbnRfaAotCi0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLQotI2luY2x1
ZGUgIk1lZGlhUGxheWJhY2tUYXJnZXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBNZWRpYVBsYXliYWNrVGFyZ2V0OwotCi1jbGFzcyBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQo
UmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJu
YWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgY29uc3QgPSAwOwotCi0gICAg
dmlydHVhbCBib29sIHJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSBjb25z
dCA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotCi0jZW5kaWYgLy8gTWVkaWFQbGF5YmFja1Rhcmdl
dFBpY2tlckNsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
OCwxNCArODg4LDkgQEAgdm9pZCBNZWRpYVBsYXllcjo6c2V0V2lyZWxlc3NQbGF5YmFja1Rhcgog
ICAgIG1fcHJpdmF0ZS0+c2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChXVEY6Om1vdmUoZGV2aWNl
KSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXI6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQo
KQordm9pZCBNZWRpYVBsYXllcjo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCBz
aG91bGRQbGF5KQogewotICAgIG1fcHJpdmF0ZS0+c3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rhcmdl
dCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQo
KQotewotICAgIG1fcHJpdmF0ZS0+c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CisgICAg
bV9wcml2YXRlLT5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChzaG91bGRQbGF5KTsKIH0K
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyLmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Myw4ICs0ODMsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKSBj
b25zdDsKICAgICB2b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJh
Y2tUYXJnZXQ+JiYpOwogCi0gICAgdm9pZCBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7
Ci0gICAgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKKyAgICB2b2lkIHNldFNo
b3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wpOwogI2VuZGlmCiAKICAgICBkb3VibGUgbWlu
RmFzdFJldmVyc2VSYXRlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkocmV2aXNpb24gMTgzMDY4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw4ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGlzUGxheWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlh
UGxheWJhY2tUYXJnZXQ+JiYpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UGxheWluZ1Rv
UGxheWJhY2tUYXJnZXQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXli
YWNrVGFyZ2V0KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KGJvb2wpIHsgfQogI2VuZGlmCiAKICNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklE
RU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJN
YWMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIgorCisjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIk1lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXJNYWMuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJNZWRpYVNlc3Npb25NYW5hZ2VyJiBXZWJNZWRp
YVNlc3Npb25NYW5hZ2VyTWFjOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjPiBzaGFyZWRNYW5hZ2VyOworICAgIHJldHVy
biBzaGFyZWRNYW5hZ2VyOworfQorCitXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjOjpXZWJNZWRp
YVNlc3Npb25NYW5hZ2VyTWFjKCkKKyAgICA6IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIoKQorewor
fQorCitXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjOjp+V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1h
YygpCit7Cit9CisKK1dlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXImIFdlYk1lZGlh
U2Vzc2lvbk1hbmFnZXJNYWM6OnRhcmdldFBpY2tlcigpCit7CisgICAgaWYgKCFtX3RhcmdldFBp
Y2tlcikKKyAgICAgICAgbV90YXJnZXRQaWNrZXIgPSBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
TWFjOjpjcmVhdGUoKnRoaXMpOworCisgICAgcmV0dXJuICptX3RhcmdldFBpY2tlci5nZXQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9XZWJNZWRpYVNlc3Npb25N
YW5hZ2VyTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hY19oCisjZGVmaW5lIFdlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWNfaAorCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkg
JiYgIVBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIldlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFj
IDogcHVibGljIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIgeworICAgIGZyaWVuZCBjbGFzcyBOZXZl
ckRlc3Ryb3llZDxXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjPjsKK3B1YmxpYzoKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgV2ViTWVkaWFTZXNzaW9uTWFuYWdlciYgc2luZ2xldG9uKCk7CisK
K3ByaXZhdGU6CisgICAgV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYygpOworICAgIHZpcnR1YWwg
fldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMoKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6TWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlciYgdGFyZ2V0UGlja2VyKCk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcj4gbV90YXJnZXRQaWNrZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQorCisjZW5kaWYgLy8gV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1h
Y19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlck1hYy5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBS
dW5Mb29wOjpUaW1lcjxNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjPiBtX2RldmljZUNoYW5n
ZVRpbWVyOwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXJNYWMubW0JKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIE1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXJNYWM6OmN1cnJlCiAgICAgaWYgKCFkZXZpY2VQaWNrZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fY2xpZW50LT5kaWRDaG9vc2VQbGF5YmFja1RhcmdldChXZWJDb3JlOjpN
ZWRpYVBsYXliYWNrVGFyZ2V0TWFjOjpjcmVhdGUoW2RldmljZVBpY2tlciBvdXRwdXRDb250ZXh0
XSkpOworICAgIG1fY2xpZW50LT5zZXRQbGF5YmFja1RhcmdldChXZWJDb3JlOjpNZWRpYVBsYXli
YWNrVGFyZ2V0TWFjOjpjcmVhdGUoW2RldmljZVBpY2tlciBvdXRwdXRDb250ZXh0XSkpOwogfQog
CiB2b2lkIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWM6OnN0YXJ0aW5nTW9uaXRvcmluZ1Bs
YXliYWNrVGFyZ2V0cygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCShyZXZpc2lvbiAxODMw
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4Myw4ICsyODMsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NQ
bGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQo
KTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJldmlzaW9uIDE4MzA2
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTk0MiwxMSArOTQyLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OgogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgdXBkYXRlRGlzYWJs
ZUV4dGVybmFsUGxheWJhY2soKTsKICAgICBbbV9hdlBsYXllci5nZXQoKSBzZXRBbGxvd3NFeHRl
cm5hbFBsYXliYWNrOm1fYWxsb3dzV2lyZWxlc3NWaWRlb1BsYXliYWNrXTsKLQotI2lmICFQTEFU
Rk9STShJT1MpCi0gICAgaWYgKG1fb3V0cHV0Q29udGV4dCkKLSAgICAgICAgbV9hdlBsYXllci5n
ZXQoKS5vdXRwdXRDb250ZXh0ID0gbV9vdXRwdXRDb250ZXh0LmdldCgpOwotI2VuZGlmCiAjZW5k
aWYKIAogICAgIGlmIChwbGF5ZXIoKS0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJc1ZpZGVvKCkpCkBA
IC0yNzg1LDM1ICsyNzgwLDI0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdldCA9ICVwIiwgdGhpcywgbV9v
dXRwdXRDb250ZXh0LmdldCgpKTsKIAogICAgIGlmICghbV9vdXRwdXRDb250ZXh0IHx8ICFtX291
dHB1dENvbnRleHQuZ2V0KCkuZGV2aWNlTmFtZSkKLSAgICAgICAgc3RvcFBsYXlpbmdUb1BsYXli
YWNrVGFyZ2V0KCk7CisgICAgICAgIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGZhbHNl
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzdGFydFBs
YXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCBzaG91bGRQbGF5KQog
ewogICAgIGlmICghbV9hdlBsYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFttX2F2
UGxheWVyLmdldCgpLm91dHB1dENvbnRleHQgaXNFcXVhbDptX291dHB1dENvbnRleHQuZ2V0KCld
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKLSAgICBt
X2F2UGxheWVyLmdldCgpLm91dHB1dENvbnRleHQgPSBtX291dHB1dENvbnRleHQuZ2V0KCk7Ci0g
ICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgl
cCkgLSB0YXJnZXQgPSAlcCIsIHRoaXMsIG1fYXZQbGF5ZXIuZ2V0KCkub3V0cHV0Q29udGV4dCk7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c3RvcFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KCkKLXsKLSAgICBpZiAoIW1fYXZQbGF5ZXIpCisgICAgQVZPdXRw
dXRDb250ZXh0ICpuZXdDb250ZXh0ID0gc2hvdWxkUGxheSA/IG1fb3V0cHV0Q29udGV4dC5nZXQo
KSA6IG5pbDsKKyAgICBBVk91dHB1dENvbnRleHQgKmN1cnJlbnRDb250ZXh0ID0gbV9hdlBsYXll
ci5nZXQoKS5vdXRwdXRDb250ZXh0OworICAgIGlmICgoIW5ld0NvbnRleHQgJiYgIWN1cnJlbnRD
b250ZXh0KSB8fCBbY3VycmVudENvbnRleHQgaXNFcXVhbDpuZXdDb250ZXh0XSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7Ci0gICAgLy8gRklYTUU6IHVu
Y29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSByZGFyOi8vMjAzMzUyMTcgaGFzIGJlZW4g
Zml4ZWQuCi0gICAgLy8gbV9hdlBsYXllci5nZXQoKS5vdXRwdXRDb250ZXh0ID0gbmlsOworICAg
IG1fYXZQbGF5ZXIuZ2V0KCkub3V0cHV0Q29udGV4dCA9IG5ld0NvbnRleHQ7CiAgICAgc2V0RGVs
YXlDYWxsYmFja3MoZmFsc2UpOwogCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdl
dCA9ICVwIiwgdGhpcywgbV9hdlBsYXllci5nZXQoKS5vdXRwdXRDb250ZXh0KTsKKyAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRTaG91bGRQbGF5
VG9QbGF5YmFja1RhcmdldCglcCkgLSB0YXJnZXQgPSAlcCwgcGxheWluZyB0byB0YXJnZXQgPSAl
cyIsIHRoaXMsIG1fYXZQbGF5ZXIuZ2V0KCkub3V0cHV0Q29udGV4dCwgYm9vbFN0cmluZyhzaG91
bGRQbGF5KSk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
aXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDkgKzE3NCw3IEBAIHByaXZhdGU6CiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICB2aXJ0dWFsIGJvb2wgaXNDdXJy
ZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4m
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCB0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChib29sKSBvdmVycmlkZTsK
ICNlbmRpZgogCiAgICAgdm9pZCBlbnN1cmVMYXllcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MjAsMjQgKzgyMCwxNCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqCiAgICAgbV9wbGF5YmFja1RhcmdldCA9IFdU
Rjo6bW92ZSh0YXJnZXQpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6dG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0
KGJvb2wgc2hvdWxkUGxheVRvVGFyZ2V0KQogewogICAgIGJvb2wgb2xkU3VwcG9ydGVkID0gbV9j
dXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZDsKLSAgICBtX2N1cnJlbnRQbGF5YmFja1Rh
cmdldElzU3VwcG9ydGVkID0gIW1fcGxheWJhY2tUYXJnZXQgfHwgIW1fcGxheWJhY2tUYXJnZXQt
Pmhhc0FjdGl2ZVJvdXRlKCk7CisgICAgbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRl
ZCA9ICFzaG91bGRQbGF5VG9UYXJnZXQ7CiAKICAgICBpZiAobV9wbGF5ZXIgJiYgb2xkU3VwcG9y
dGVkICE9IG1fY3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQpCiAgICAgICAgIG1fcGxh
eWVyLT5jdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCgpOwogfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3RhcnRQbGF5aW5nVG9QbGF5
YmFja1RhcmdldCgpCi17Ci0gICAgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0b3BQbGF5aW5n
VG9QbGF5YmFja1RhcmdldCgpCi17Ci0gICAgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQo
KTsKLX0KICNlbmRpZgogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkocmV2
aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw4ICsxODIsNyBA
QCBwcml2YXRlOgogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgdmly
dHVhbCBib29sIGlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlh
UGxheWJhY2tUYXJnZXQ+JiYpOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydFBsYXlpbmdUb1BsYXli
YWNrVGFyZ2V0KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BQbGF5aW5nVG9QbGF5
YmFja1RhcmdldCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQbGF5VG9Q
bGF5YmFja1RhcmdldChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIHRvZ2dsZVBsYXlpbmdUb1Bs
YXliYWNrVGFyZ2V0KCk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtp
dC5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU0
LDI0ICsxNTU0LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFdpcmVsZXMK
ICAgICBtX3BsYXliYWNrVGFyZ2V0ID0gV1RGOjptb3ZlKHRhcmdldCk7CiB9CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0
KGJvb2wgc2hvdWxkUGxheVRvVGFyZ2V0KQogewogICAgIGJvb2wgb2xkU3VwcG9ydGVkID0gbV9j
dXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZDsKLSAgICBtX2N1cnJlbnRQbGF5YmFja1Rh
cmdldElzU3VwcG9ydGVkID0gIW1fcGxheWJhY2tUYXJnZXQgfHwgIW1fcGxheWJhY2tUYXJnZXQt
Pmhhc0FjdGl2ZVJvdXRlKCk7CisgICAgbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRl
ZCA9ICFzaG91bGRQbGF5VG9UYXJnZXQ7CiAKICAgICBpZiAobV9wbGF5ZXIgJiYgb2xkU3VwcG9y
dGVkICE9IG1fY3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQpCiAgICAgICAgIG1fcGxh
eWVyLT5jdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCgpOwogfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkK
LXsKLSAgICB0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQotewotICAg
IHRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Ci19CiAjZW5kaWYKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2
aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjQyLDcgKzI2NDIsNyBAQCBib29sIEludGVybmFsczo6aXNQYWdl
UGxheWluZ0F1ZGlvKCkKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKS0+aXNQ
bGF5aW5nQXVkaW8oKTsKKyAgICByZXR1cm4gISEoZG9jdW1lbnQtPnBhZ2UoKS0+bWVkaWFTdGF0
ZSgpICYgTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nQXVkaW8pOwogfQogCiBSZWZQdHI8RmlsZT4g
SW50ZXJuYWxzOjpjcmVhdGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE4MzA3OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE1LTA0LTIxICBFcmljIENhcmxzb24gIDxlcmljLmNh
cmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFVzZSBvbmUgcGxheWJhY2sgdGFyZ2V0
IGZvciBhbGwgd2ViIHByb2Nlc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ0MDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4K
KworICAgICAgICBFdmVyeSBXZWJQYWdlUHJveHkgdXNlcyB0aGUgV2ViTWVkaWFTZXNzaW9uTWFu
YWdlciBzaW5nbGV0b24gdG8gdGFsayB0byB0aGUgcGxheWJhY2sgdGFyZ2V0CisgICAgICAgIHBp
Y2tlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
V2ViUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNldFN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppc1BsYXlpbmdNZWRpYURpZENoYW5n
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YWRkUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlbW92ZVBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG93
UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnNldFBsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRldmljZVBpY2tlclByb3h5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydGluZ01vbml0b3JpbmdQ
bGF5YmFja1RhcmdldHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpkaWRDaG9vc2VQbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmlzUGxheWluZ0F1ZGlvKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6bWVkaWFTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQbGF5YmFja1RhcmdldFBpY2tlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OnNpbmds
ZXRvbik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OldlYk1l
ZGlhU2Vzc2lvbk1hbmFnZXJNYWMpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVNlc3Npb25N
YW5hZ2VyTWFjOjp+V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYyk6CisgICAgICAgIChXZWJLaXQ6
OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OnRhcmdldFBpY2tlcik6CisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmg6IEFkZGVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJD
aHJvbWVDbGllbnQ6OmlzUGxheWluZ01lZGlhRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGll
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnNob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cGxheWJhY2tUYXJn
ZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9t
ZUNsaWVudDo6c3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEu
bW06CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpkaXNw
YXRjaEFmdGVyRW5zdXJpbmdVcGRhdGVkU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cGxheWJhY2tUYXJnZXRTZWxlY3RlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorCiAyMDE1LTA0LTIxICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGJsb2NrIHNp
Z25hdHVyZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNp
b24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvckNs
aWVudC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKLSNpZiBFTkFCTEUoV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKQotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlci5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUuaCIKIApAQCAtNTIsNiArNDgsNyBAQCBPQkpDX0NMQVNTIE5T
VGV4dEFsdGVybmF0aXZlczsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEN1cnNvcjsKIGNs
YXNzIFRleHRJbmRpY2F0b3I7CitjbGFzcyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOwogc3RydWN0
IEhpZ2hsaWdodDsKIHN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7CiB9CkBAIC0zMjUsNyArMzIy
LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI+IGNyZWF0ZVBsYXliYWNrVGFyZ2V0UGlja2Vy
KFdlYlBhZ2VQcm94eSopID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lv
bk1hbmFnZXImIG1lZGlhU2Vzc2lvbk1hbmFnZXIoKSA9IDA7CiAjZW5kaWYKIAogfTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxODMw
NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw3IEBACiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJB
Q0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5
YmFja1RhcmdldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5o
PgogI2VuZGlmCiAKIC8vIFRoaXMgY29udHJvbHMgd2hhdCBzdHJhdGVneSB3ZSB1c2UgZm9yIG1v
dXNlIHdoZWVsIGNvYWxlc2NpbmcuCkBAIC00MDgsNyArNDA5LDYgQEAgV2ViUGFnZVByb3h5OjpX
ZWJQYWdlUHJveHkoUGFnZUNsaWVudCYgcAogICAgICwgbV9jb25maWd1cmF0aW9uUHJlZmVyZW5j
ZVZhbHVlcyhjb25maWd1cmF0aW9uLnByZWZlcmVuY2VWYWx1ZXMpCiAgICAgLCBtX3BvdGVudGlh
bGx5Q2hhbmdlZFZpZXdTdGF0ZUZsYWdzKFZpZXdTdGF0ZTo6Tm9GbGFncykKICAgICAsIG1fdmll
d1N0YXRlQ2hhbmdlV2FudHNTeW5jaHJvbm91c1JlcGx5KGZhbHNlKQotICAgICwgbV9pc1BsYXlp
bmdBdWRpbyhmYWxzZSkKIHsKICAgICBtX3dlYlByb2Nlc3NMaWZldGltZVRyYWNrZXIuYWRkT2Jz
ZXJ2ZXIobV92aXNpdGVkTGlua1Byb3ZpZGVyKTsKICAgICBtX3dlYlByb2Nlc3NMaWZldGltZVRy
YWNrZXIuYWRkT2JzZXJ2ZXIobV93ZWJzaXRlRGF0YVN0b3JlKTsKQEAgLTQ4MjgsNiArNDgyOCwx
MCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZShSZXNldFN0YXRlCiAgICAgbV9sYXll
clRyZWVUcmFuc2FjdGlvbklkQXRMYXN0VG91Y2hTdGFydCA9IDA7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCisgICAgbV9w
YWdlQ2xpZW50Lm1lZGlhU2Vzc2lvbk1hbmFnZXIoKS5yZW1vdmVBbGxQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudHMoKnRoaXMpOworI2VuZGlmCisKICAgICBDYWxsYmFja0Jhc2U6OkVycm9yIGVy
cm9yOwogICAgIHN3aXRjaCAocmVzZXRTdGF0ZVJlYXNvbikgewogICAgIGNhc2UgUmVzZXRTdGF0
ZVJlYXNvbjo6UGFnZUludmFsaWRhdGVkOgpAQCAtNDg0OSw3ICs0ODUzLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnJlc2V0U3RhdGUoUmVzZXRTdGF0ZQogICAgICAgICBlZGl0Q29tbWFuZFZlY3Rv
cltpXS0+aW52YWxpZGF0ZSgpOwogCiAgICAgbV9hY3RpdmVQb3B1cE1lbnUgPSBudWxscHRyOwot
ICAgIG1faXNQbGF5aW5nQXVkaW8gPSBmYWxzZTsKKyAgICBtX21lZGlhU3RhdGUgPSBNZWRpYVBy
b2R1Y2VyOjpJc05vdFBsYXlpbmc7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFN0YXRl
QWZ0ZXJQcm9jZXNzRXhpdGVkKCkKQEAgLTU2NTksMTMgKzU2NjMsMTIgQEAgdm9pZCBXZWJQYWdl
UHJveHk6Om5hdmlnYXRpb25HZXN0dXJlU25hcAogICAgIG1faXNTaG93aW5nTmF2aWdhdGlvbkdl
c3R1cmVTbmFwc2hvdCA9IGZhbHNlOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aXNQbGF5aW5n
TWVkaWFEaWRDaGFuZ2UoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpNZWRpYVN0YXRlRmxhZ3Mgc3Rh
dGUpCit2b2lkIFdlYlBhZ2VQcm94eTo6aXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UoV2ViQ29yZTo6
TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIHN0YXRlKQogewotICAgIGJvb2wgaXNQbGF5
aW5nQXVkaW8gPSBzdGF0ZSAmIFdlYkNvcmU6OkNocm9tZUNsaWVudDo6SXNQbGF5aW5nQXVkaW87
Ci0gICAgaWYgKG1faXNQbGF5aW5nQXVkaW8gPT0gaXNQbGF5aW5nQXVkaW8pCisgICAgaWYgKHN0
YXRlID09IG1fbWVkaWFTdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pc1BsYXlpbmdB
dWRpbyA9IGlzUGxheWluZ0F1ZGlvOworICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRlOwogICAgIG1f
dWlDbGllbnQtPmlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlKCp0aGlzKTsKIH0KIApAQCAtNTczOCw0
NiArNTc0MSw0OSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlQXV0b0ZpbGxCdXR0b25DCiB9
CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9T
KQotCi1XZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyJiBXZWJQYWdlUHJveHk6OmRl
dmljZVBpY2tlclByb3h5KCkKK3ZvaWQgV2ViUGFnZVByb3h5OjphZGRQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgaWYgKCFtX3BsYXliYWNrVGFy
Z2V0UGlja2VyKQotICAgICAgICBtX3BsYXliYWNrVGFyZ2V0UGlja2VyID0gbV9wYWdlQ2xpZW50
LmNyZWF0ZVBsYXliYWNrVGFyZ2V0UGlja2VyKHRoaXMpOwotCi0gICAgcmV0dXJuICptX3BsYXli
YWNrVGFyZ2V0UGlja2VyLmdldCgpOworICAgIG1fcGFnZUNsaWVudC5tZWRpYVNlc3Npb25NYW5h
Z2VyKCkuYWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoKnRoaXMsIGNvbnRleHRJZCk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiByZWN0LCBib29sIGhhc1ZpZGVvKQordm9pZCBXZWJQYWdlUHJveHk6
OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsK
LSAgICBkZXZpY2VQaWNrZXJQcm94eSgpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihtX3BhZ2VD
bGllbnQucm9vdFZpZXdUb1NjcmVlbihJbnRSZWN0KHJlY3QpKSwgaGFzVmlkZW8pOworICAgIG1f
cGFnZUNsaWVudC5tZWRpYVNlc3Npb25NYW5hZ2VyKCkucmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQoKnRoaXMsIGNvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzdGFy
dGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKQordm9pZCBXZWJQYWdlUHJveHk6OnNob3dQ
bGF5YmFja1RhcmdldFBpY2tlcih1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgcmVjdCwgYm9vbCBoYXNWaWRlbykKIHsKLSAgICBkZXZpY2VQaWNrZXJQcm94eSgp
LnN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOworICAgIG1fcGFnZUNsaWVudC5t
ZWRpYVNlc3Npb25NYW5hZ2VyKCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCp0aGlzLCBjb250
ZXh0SWQsIG1fcGFnZUNsaWVudC5yb290Vmlld1RvU2NyZWVuKEludFJlY3QocmVjdCkpLCBoYXNW
aWRlbyk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cygpCit2b2lkIFdlYlBhZ2VQcm94eTo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0
ZURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1l
ZGlhU3RhdGVGbGFncyBzdGF0ZSkKIHsKLSAgICBkZXZpY2VQaWNrZXJQcm94eSgpLnN0b3BNb25p
dG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7CisgICAgbV9wYWdlQ2xpZW50Lm1lZGlhU2Vzc2lvbk1h
bmFnZXIoKS5jbGllbnRTdGF0ZURpZENoYW5nZSgqdGhpcywgY29udGV4dElkLCBzdGF0ZSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQ
bGF5YmFja1RhcmdldD4mJiB0YXJnZXQpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UGxheWJhY2tU
YXJnZXQodWludDY0X3QgY29udGV4dElkLCBSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJiB0YXJn
ZXQpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGxheWJhY2tUYXJnZXRTZWxlY3RlZCh0YXJn
ZXQtPnRhcmdldENvbnRleHQoKSksIG1fcGFnZUlEKTsKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlBsYXliYWNrVGFyZ2V0U2VsZWN0ZWQoY29udGV4dElkLCB0YXJnZXQt
PnRhcmdldENvbnRleHQoKSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmV4
dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wgYXZhaWxhYmxlKQordm9p
ZCBXZWJQYWdlUHJveHk6OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBhdmFpbGFibGUpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoYXZhaWxhYmxlKSwgbV9wYWdl
SUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGxheWJhY2tUYXJn
ZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoY29udGV4dElkLCBhdmFpbGFibGUpLCBtX3BhZ2VJRCk7
CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgc2hvdWxkUGxheSkKK3sKKyAgICBpZiAoIWlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChjb250ZXh0SWQsIHNob3VsZFBsYXkp
LCBtX3BhZ2VJRCk7Cit9CiAjZW5kaWYKIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZENoYW5nZUJh
Y2tncm91bmRDb2xvcigpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEwICs2MywxMCBAQAogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzTGlmZXRpbWVUcmFja2VyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9D
aHJvbWVDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EcmFnQWN0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQcm9kdWNlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Njcm9sbFR5cGVzLmg+CkBAIC0xMTUsNiArMTE1LDcgQEAKIAogI2lmIEVOQUJMRShXSVJF
TEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8V2ViQ29y
ZS9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJNZWRp
YVNlc3Npb25NYW5hZ2VyQ2xpZW50Lmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIEFQSSB7CkBAIC0y
NjQsNyArMjY1LDcgQEAgY2xhc3MgV2ViUGFnZVByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SQog
ICAgICwgcHVibGljIFdlYkNvbG9yUGlja2VyOjpDbGllbnQKICNlbmRpZgogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCi0gICAgLCBwdWJsaWMg
V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6Q2xpZW50CisgICAgLCBwdWJsaWMg
V2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudAogI2VuZGlmCiAgICAgLCBwdWJs
aWMgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudAogICAgICwgcHVibGljIElQQzo6TWVzc2FnZVJl
Y2VpdmVyCkBAIC05ODMsOCArOTg0LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Nob3dpbmdO
YXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCkgY29uc3QgeyByZXR1cm4gbV9pc1Nob3dpbmdOYXZp
Z2F0aW9uR2VzdHVyZVNuYXBzaG90OyB9CiAKLSAgICB2b2lkIGlzUGxheWluZ01lZGlhRGlkQ2hh
bmdlKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6TWVkaWFTdGF0ZUZsYWdzKTsKLSAgICBib29sIGlz
UGxheWluZ0F1ZGlvKCkgY29uc3QgeyByZXR1cm4gbV9pc1BsYXlpbmdBdWRpbzsgfQorICAgIGJv
b2wgaXNQbGF5aW5nQXVkaW8oKSBjb25zdCB7IHJldHVybiAhIShtX21lZGlhU3RhdGUgJiBXZWJD
b3JlOjpNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdBdWRpbyk7IH0KKyAgICB2b2lkIGlzUGxheWlu
Z01lZGlhRGlkQ2hhbmdlKFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyk7
CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCByZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNu
YXBzaG90KCk7CkBAIC0xMDIwLDE0ICsxMDIxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGxvZ0Rp
YWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3Ry
aW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBzaG91bGRTYW1wbGUp
OwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElP
UykKLSAgICBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyJiBkZXZpY2VQaWNrZXJQ
cm94eSgpOwotICAgIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGJvb2wgaGFzVmlkZW8pOwotICAgIHZvaWQgc3RhcnRpbmdNb25pdG9yaW5n
UGxheWJhY2tUYXJnZXRzKCk7Ci0gICAgdm9pZCBzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0
cygpOwotCi0gICAgLy8gV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6Q2xpZW50
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxXZWJDb3JlOjpN
ZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJu
YWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBhZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCk7CisgICAgdm9pZCByZW1v
dmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCk7CisgICAgdm9pZCBzaG93UGxh
eWJhY2tUYXJnZXRQaWNrZXIodWludDY0X3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGJv
b2wgaGFzVmlkZW8pOworICAgIHZvaWQgcGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURp
ZENoYW5nZSh1aW50NjRfdCwgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdz
KTsKKworICAgIC8vIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UGxheWJhY2tUYXJnZXQodWludDY0X3QsIFJlZjxXZWJDb3JlOjpNZWRpYVBsYXliYWNr
VGFyZ2V0PiYmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxPdXRwdXREZXZp
Y2VBdmFpbGFibGVEaWRDaGFuZ2UodWludDY0X3QsIGJvb2wpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRfdCwgYm9vbCkgb3Zl
cnJpZGU7CiAjZW5kaWYKIAogICAgIHZvaWQgZGlkQ2hhbmdlQmFja2dyb3VuZENvbG9yKCk7CkBA
IC0xNzA2LDExICsxNzA4LDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3ZpZXdTdGF0ZUNoYW5n
ZVdhbnRzU3luY2hyb25vdXNSZXBseTsKICAgICBWZWN0b3I8dWludDY0X3Q+IG1fbmV4dFZpZXdT
dGF0ZUNoYW5nZUNhbGxiYWNrczsKIAorICAgIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlh
U3RhdGVGbGFncyBtX21lZGlhU3RhdGUgeyBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpJc05vdFBs
YXlpbmcgfTsKKwogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFU
Rk9STShJT1MpCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXI+IG1fcGxheWJhY2tUYXJnZXRQaWNrZXI7CisgICAgYm9vbCBtX3JlcXVpcmVzVGFy
Z2V0TW9uaXRvcmluZyB7IGZhbHNlIH07CiAjZW5kaWYKIAotICAgIGJvb2wgbV9pc1BsYXlpbmdB
dWRpbzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxODMw
NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC00MzIsOSArNDMyLDEwIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQ
cm94eSB7CiAgICAgSGFuZGxlQXV0b0ZpbGxCdXR0b25DbGljayhXZWJLaXQ6OlVzZXJEYXRhIHVz
ZXJEYXRhKTsKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFU
Rk9STShJT1MpCi0gICAgU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKFdlYkNvcmU6OkZsb2F0UmVj
dCBwaWNrZXJMb2NhdGlvbiwgYm9vbCBoYXNWaWRlbykKLSAgICBTdGFydGluZ01vbml0b3JpbmdQ
bGF5YmFja1RhcmdldHMoKQotICAgIFN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkKKyAg
ICBBZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCisgICAg
UmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QgY29udGV4dElkKQorICAg
IFNob3dQbGF5YmFja1RhcmdldFBpY2tlcih1aW50NjRfdCBjbGllbnRJZCwgV2ViQ29yZTo6Rmxv
YXRSZWN0IHBpY2tlckxvY2F0aW9uLCBib29sIGhhc1ZpZGVvKQorICAgIFBsYXliYWNrVGFyZ2V0
UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBt
ZWRpYVN0YXRlKQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjEx
LDcgKzIxMSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlcj4gY3JlYXRlUGxheWJhY2tUYXJnZXRQaWNrZXIoV2ViUGFnZVBy
b3h5Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyJiBtZWRpYVNlc3Npb25NYW5hZ2VyKCkgb3ZlcnJpZGU7CiAjZW5kaWYKIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2
aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQAogI2VuZGlmCiAKICNpZiBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlck1hYy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViTWVkaWFTZXNz
aW9uTWFuYWdlck1hYy5oPgogI2VuZGlmCiAKIEBpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV2Vi
TlNBcHBsaWNhdGlvbkRldGFpbHMpCkBAIC04MTMsOSArODEzLDkgQEAgdm9pZCBQYWdlQ2xpZW50
SW1wbDo6c2hvd1BsYXRmb3JtQ29udGV4dAogfQogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyPiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUGxheWJhY2tUYXJnZXRQaWNrZXIoV2ViUGFn
ZVByb3h5KiBwYWdlKQorV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlciYgUGFnZUNsaWVu
dEltcGw6Om1lZGlhU2Vzc2lvbk1hbmFnZXIoKQogewotICAgIHJldHVybiBNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyTWFjOjpjcmVhdGUoKnBhZ2UpOworICAgIHJldHVybiBXZWJNZWRpYVNlc3Np
b25NYW5hZ2VyTWFjOjpzaW5nbGV0b24oKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgJKHJldmlzaW9uIDE4MzA2
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMCBAQAogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2lu
Y2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvQXVkaW9Qcm9kdWNlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmluZE9wdGlv
bnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRp
YUNhblN0YXJ0TGlzdGVuZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhUHJvZHVjZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpblZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CkBA
IC01OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJFdmVudDsKIAot
Y2xhc3MgUGx1Z2luVmlldyA6IHB1YmxpYyBXZWJDb3JlOjpQbHVnaW5WaWV3QmFzZSwgcHVibGlj
IFBsdWdpbkNvbnRyb2xsZXIsIHByaXZhdGUgV2ViQ29yZTo6TWVkaWFDYW5TdGFydExpc3RlbmVy
LCBwcml2YXRlIFdlYkZyYW1lOjpMb2FkTGlzdGVuZXIsIHByaXZhdGUgV2ViQ29yZTo6QXVkaW9Q
cm9kdWNlciB7CitjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFdlYkNvcmU6OlBsdWdpblZpZXdC
YXNlLCBwdWJsaWMgUGx1Z2luQ29udHJvbGxlciwgcHJpdmF0ZSBXZWJDb3JlOjpNZWRpYUNhblN0
YXJ0TGlzdGVuZXIsIHByaXZhdGUgV2ViRnJhbWU6OkxvYWRMaXN0ZW5lciwgcHJpdmF0ZSBXZWJD
b3JlOjpNZWRpYVByb2R1Y2VyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVn
aW5WaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudD4sIFBh
c3NSZWZQdHI8UGx1Z2luPiwgY29uc3QgUGx1Z2luOjpQYXJhbWV0ZXJzJik7CiAKQEAgLTE4MSw4
ICsxODEsOCBAQCBwcml2YXRlOgogICAgIC8vIFdlYkNvcmU6Ok1lZGlhQ2FuU3RhcnRMaXN0ZW5l
cgogICAgIHZpcnR1YWwgdm9pZCBtZWRpYUNhblN0YXJ0KCkgb3ZlcnJpZGU7CiAKLSAgICAvLyBX
ZWJDb3JlOjpBdWRpb1Byb2R1Y2VyCi0gICAgdmlydHVhbCBib29sIGlzUGxheWluZ0F1ZGlvKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbV9wbHVnaW5Jc1BsYXlpbmdBdWRpbzsgfQorICAgIC8vIFdlYkNv
cmU6Ok1lZGlhUHJvZHVjZXIKKyAgICB2aXJ0dWFsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVG
bGFncyBtZWRpYVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbHVnaW5Jc1BsYXlp
bmdBdWRpbyA/IE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ0F1ZGlvIDogTWVkaWFQcm9kdWNlcjo6
SXNOb3RQbGF5aW5nOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdl
KCkgb3ZlcnJpZGU7CiAKICAgICAvLyBQbHVnaW5Db250cm9sbGVyCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNTAsNyArMTA1MCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRVc2VUaWxlZEJh
Y2sKICAgICByZXR1cm4gbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zaG91bGRVc2VUaWxlZEJhY2tp
bmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6Omlz
UGxheWluZ01lZGlhRGlkQ2hhbmdlKE1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKK3ZvaWQgV2ViQ2hy
b21lQ2xpZW50Ojppc1BsYXlpbmdNZWRpYURpZENoYW5nZShXZWJDb3JlOjpNZWRpYVByb2R1Y2Vy
OjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCiB7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OklzUGxheWluZ01lZGlhRGlkQ2hhbmdlKHN0YXRlKSk7CiB9CkBAIC0xMTE1
LDIxICsxMTE1LDI3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpoYW5kbGVBdXRvRmlsbEJ1dHQK
IH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJ
T1MpCi12b2lkIFdlYkNocm9tZUNsaWVudDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgYm9vbCBpc1ZpZGVvKQordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKTsKLSAgICBGbG9hdFJlY3QgcmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhm
cmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMocG9zaXRpb24pKSwgRmxvYXRTaXplKCkpOwotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UGxheWJhY2tUYXJnZXRQ
aWNrZXIocmVjdCwgaXNWaWRlbykpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpBZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChjb250ZXh0SWQpKTsKK30KKwor
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoY29udGV4dElkKSk7CiB9CiAK
LXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMo
KQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2
NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBib29sIGlz
VmlkZW8pCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0
aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBGbG9hdFJlY3QgcmVjdChmcmFt
ZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMocG9z
aXRpb24pKSwgRmxvYXRTaXplKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29udGV4dElkLCByZWN0LCBpc1ZpZGVv
KSk7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cygpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRT
dGF0ZURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6
Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U3RvcE1vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
U3RhdGVEaWRDaGFuZ2UoY29udGV4dElkLCBzdGF0ZSkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjkyLDcgKzI5Miw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNl
VGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3KGNvbnN0IFdlYkNvcmU6OkZyYW1lVmlldyopIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGlzUGxheWluZ01lZGlhRGlkQ2hhbmdlKE1l
ZGlhU3RhdGVGbGFncykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGlzUGxheWluZ01lZGlh
RGlkQ2hhbmdlKFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncykgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VBY3Rpdml0eVN0YXRlKFdlYkNvcmU6OlBhZ2VB
Y3Rpdml0eVN0YXRlOjpGbGFncykgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBU
TykKQEAgLTMxMyw5ICszMTMsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
QXV0b0ZpbGxCdXR0b25DbGljayhXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Jikgb3ZlcnJpZGU7
CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9T
KQotICAgIHZpcnR1YWwgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCBib29sKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRpbmdN
b25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0
b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IC8qY29udGV4dElkKi8pIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVu
dCh1aW50NjRfdCAvKmNvbnRleHRJZCovKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
d1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmLCBib29sKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxheWJhY2tUYXJn
ZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCwgV2ViQ29yZTo6TWVkaWFQcm9k
dWNlcjo6TWVkaWFTdGF0ZUZsYWdzKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgU3RyaW5nIG1f
Y2FjaGVkVG9vbFRpcDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwNyw4ICsxMTA3LDkgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHNldFNob3VsZERpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50cyhi
b29sIGRpc3BhdGNoKSB7IG1fc2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRzID0gZGlz
cGF0Y2g7IH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFU
Rk9STShJT1MpCi0gICAgdm9pZCBwbGF5YmFja1RhcmdldFNlbGVjdGVkKGNvbnN0IFdlYkNvcmU6
Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0JiBvdXRwdXREZXZpY2UpIGNvbnN0OwotICAgIHZv
aWQgcGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoYm9vbCk7CisgICAgdm9pZCBw
bGF5YmFja1RhcmdldFNlbGVjdGVkKHVpbnQ2NF90LCBjb25zdCBXZWJDb3JlOjpNZWRpYVBsYXli
YWNrVGFyZ2V0Q29udGV4dCYgb3V0cHV0RGV2aWNlKSBjb25zdDsKKyAgICB2b2lkIHBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKHVpbnQ2NF90LCBib29sKTsKKyAgICB2b2lkIHNl
dFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90LCBib29sKTsKICNlbmRpZgogCiAg
ICAgdWludDY0X3QgbV9wYWdlSUQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTgzMDY4KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTQxOCw4ICs0MTgsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExl
Z2FjeVJlY2VpdmVyIHsKICAgICBTZXRTaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMo
Ym9vbCBzaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMpCiAKICNpZiBFTkFCTEUoV0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIFBsYXliYWNrVGFy
Z2V0U2VsZWN0ZWQoc3RydWN0IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0IHRh
cmdldCkKLSAgICBQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShib29sIGF2YWls
YWJsZSkKKyAgICBQbGF5YmFja1RhcmdldFNlbGVjdGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgc3Ry
dWN0IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0IHRhcmdldCkKKyAgICBQbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
YXZhaWxhYmxlKQorICAgIFNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBzaG91bGRQbGF5KQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlz
aW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTIwMywxNiArMTIwMywyMSBAQCB2b2lkIFdl
YlBhZ2U6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBmb250CiB9CiAKICNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQotdm9pZCBXZWJQYWdlOjpwbGF5
YmFja1RhcmdldFNlbGVjdGVkKGNvbnN0IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250
ZXh0JiB0YXJnZXRDb250ZXh0KSBjb25zdAordm9pZCBXZWJQYWdlOjpwbGF5YmFja1RhcmdldFNl
bGVjdGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1Rh
cmdldENvbnRleHQmIHRhcmdldENvbnRleHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHRhcmdldENv
bnRleHQudHlwZSA9PSBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dDo6QVZPdXRwdXRDb250ZXh0
VHlwZSk7CiAKLSAgICBtX3BhZ2UtPmRpZENob29zZVBsYXliYWNrVGFyZ2V0KFdlYkNvcmU6Ok1l
ZGlhUGxheWJhY2tUYXJnZXRNYWM6OmNyZWF0ZSh0YXJnZXRDb250ZXh0LmNvbnRleHQuYXZPdXRw
dXRDb250ZXh0KSk7CisgICAgbV9wYWdlLT5zZXRQbGF5YmFja1RhcmdldChjb250ZXh0SWQsIFdl
YkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRNYWM6OmNyZWF0ZSh0YXJnZXRDb250ZXh0LmNvbnRl
eHQuYXZPdXRwdXRDb250ZXh0KSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlEaWRDaGFuZ2UoYm9vbCBjaGFuZ2VkKQordm9pZCBXZWJQYWdlOjpwbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgY2hh
bmdlZCkKIHsKLSAgICBtX3BhZ2UtPnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdl
KGNoYW5nZWQpOworICAgIG1fcGFnZS0+cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFu
Z2UoY29udGV4dElkLCBjaGFuZ2VkKTsKK30KKwordm9pZCBXZWJQYWdlOjpzZXRTaG91bGRQbGF5
VG9QbGF5YmFja1RhcmdldCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgc2hvdWxkUGxheSkKK3sK
KyAgICBtX3BhZ2UtPnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGNvbnRleHRJZCwgc2hv
dWxkUGxheSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTgz
MDc4KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNDQgQEAKKzIwMTUtMDQtMjEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW01hY10gVXNlIG9uZSBwbGF5YmFjayB0YXJnZXQgZm9yIGFsbCB3
ZWIgcHJvY2Vzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAg
IFVwZGF0ZSB0byB1c2UgV2ViTWVkaWFTZXNzaW9uTWFuYWdlciBmb3IgcGxheWJhY2sgdGFyZ2V0
IG1hbmFnZW1lbnQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAg
IChXZWJDaHJvbWVDbGllbnQ6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNocm9tZUNsaWVudDo6cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgor
ICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAg
ICAgICAoV2ViQ2hyb21lQ2xpZW50OjpwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c3RhcnRpbmdNb25pdG9yaW5nUGxh
eWJhY2tUYXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c3RvcE1v
bml0b3JpbmdQbGF5YmFja1RhcmdldHMpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlZpZXcvV2Vi
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlci5tbToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXI6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYk1lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXI6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToK
KyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnNob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcik6CisgICAgICAgIChXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpwbGF5YmFj
a1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYk1lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXI6OnNldFBsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYk1lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXI6OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnNldFNob3VsZFBs
YXlUb1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXI6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6
c3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
Yk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmRpZENo
b29zZVBsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXI6OnRhcmdldFBpY2tlcik6IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9hZGRQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJD
bGllbnQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjps
b2NhdGlvbjpoYXNWaWRlbzpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZTpzdGF0ZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBf
c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyOmhhc1ZpZGVvOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXZWJWaWV3IF9zdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHNdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV2ViVmlldyBfc3RvcE1vbml0b3JpbmdQbGF5YmFja1RhcmdldHNdKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOgorCiAyMDE1LTA0LTIw
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUg
bWl4ZWQgY29udGVudCBibG9ja2luZyBmb3IgZXhpc3RpbmcgV2ViS2l0MSBjbGllbnRzCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw5ICsyMTQsMTAgQEAg
cHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAm
JiAhUExBVEZPUk0oSU9TKQotICAgIHZpcnR1YWwgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNr
ZXIoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sIC8qIGhhc1ZpZGVvICovKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRz
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50KHVpbnQ2NF90IC8qY29udGV4dElkKi8pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCAvKmNvbnRleHRJZCovKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2
NF90IC8qY29udGV4dElkKi8sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCAvKiBoYXNW
aWRlbyAqLykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QgLypjb250ZXh0SWQqLywgV2ViQ29yZTo6TWVk
aWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKSBvdmVycmlkZTsKICNlbmRpZgogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM2LDE4
ICsxMDM2LDIzIEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpoYXNSZWxldmFudFNlbGVjdGkKICNl
bmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JN
KElPUykKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uLCBib29sIGhhc1ZpZGVvKQordm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRl
eHRJZCkKIHsKLSAgICBbbV93ZWJWaWV3IF9zaG93UGxheWJhY2tUYXJnZXRQaWNrZXI6bG9jYXRp
b24gaGFzVmlkZW86aGFzVmlkZW9dOworICAgIFttX3dlYlZpZXcgX2FkZFBsYXliYWNrVGFyZ2V0
UGlja2VyQ2xpZW50OmNvbnRleHRJZF07CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzdGFy
dGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJl
bW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAg
ICBbbV93ZWJWaWV3IF9zdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHNdOworICAgIFtt
X3dlYlZpZXcgX3JlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50OmNvbnRleHRJZF07CiB9
CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygp
Cit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90
IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uLCBib29sIGhhc1Zp
ZGVvKQogewotICAgIFttX3dlYlZpZXcgX3N0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzXTsK
KyAgICBbbV93ZWJWaWV3IF9zaG93UGxheWJhY2tUYXJnZXRQaWNrZXI6Y29udGV4dElkIGxvY2F0
aW9uOmxvY2F0aW9uIGhhc1ZpZGVvOmhhc1ZpZGVvXTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QgY29u
dGV4dElkLCBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCit7CisgICAgW21f
d2ViVmlldyBfcGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZTpjb250ZXh0
SWQgc3RhdGU6c3RhdGVdOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaAkocmV2aXNp
b24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDM0ICsyNSwzNyBAQAogCiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKIAotI2lt
cG9ydCA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL01lZGlhUGxheWJhY2tUYXJnZXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViTWVkaWFTZXNz
aW9uTWFuYWdlckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsKIGNs
YXNzIFBhZ2U7CiB9CiAKLWNsYXNzIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIgOiBwdWJs
aWMgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6Q2xpZW50IHsKK2NsYXNzIFdl
Yk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViTWVkaWFTZXNz
aW9uTWFuYWdlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyPiBjcmVhdGUoV2ViQ29yZTo6UGFnZSYpOwogCiAg
ICAgZXhwbGljaXQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcihXZWJDb3JlOjpQYWdlJik7
CiAgICAgdmlydHVhbCB+V2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcigpIHsgfQogCi0gICAg
dm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
Ym9vbCAvKiBoYXNWaWRlbyAqLyk7Ci0gICAgdm9pZCBzdGFydGluZ01vbml0b3JpbmdQbGF5YmFj
a1RhcmdldHMoKTsKLSAgICB2b2lkIHN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7Ci0K
LSAgICAvLyBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpDbGllbnQKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVmPFdlYkNvcmU6Ok1lZGlhUGxh
eWJhY2tUYXJnZXQ+JiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1
dERldmljZUF2YWlsYWJsZURpZENoYW5nZShib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZFBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90KTsKKyAgICB2b2lkIHJlbW92ZVBsYXli
YWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90KTsKKyAgICB2b2lkIHNob3dQbGF5YmFja1Rh
cmdldFBpY2tlcih1aW50NjRfdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgYm9vbCBoYXNW
aWRlbyk7CisgICAgdm9pZCBwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdl
KHVpbnQ2NF90LCBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MpOworCisg
ICAgLy8gV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRQ
bGF5YmFja1RhcmdldCh1aW50NjRfdCwgUmVmPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+
JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWls
YWJsZURpZENoYW5nZSh1aW50NjRfdCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90LCBib29sKSBvdmVycmlkZTsK
IAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiBwcml2YXRlOgotICAgIFdlYkNvcmU6Ok1lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXImIHRhcmdldFBpY2tlcigpOwotCiAgICAgV2ViQ29yZTo6UGFn
ZSogbV9wYWdlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyPiBtX3RhcmdldFBpY2tlcjsKIH07CisKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlci5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNSAr
MjAsMTYgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2ltcG9ydCAiV2ViTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlci5oIgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkg
JiYgIVBMQVRGT1JNKElPUykKIAotI2ltcG9ydCA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWJhY2tUYXJnZXQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJNZWRpYVNlc3Npb25N
YW5hZ2VyTWFjLmg+CiAKIHN0ZDo6dW5pcXVlX3B0cjxXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyPiBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpjcmVhdGUoV2ViQ29yZTo6UGFnZSYg
cGFnZSkKIHsKQEAgLTQwLDQ4ICs0MSw1NCBAQCBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
OjpXZWJNZWRpYVBsCiB7CiB9CiAKLXZvaWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6
c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwg
Ym9vbCBoYXNWaWRlbykKK3ZvaWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6YWRkUGxh
eWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QgY29udGV4dElkKQogewotICAgIHRhcmdl
dFBpY2tlcigpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihXZWJDb3JlOjpJbnRSZWN0KHJlY3Qp
LCBoYXNWaWRlbyk7CisgICAgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6c2lu
Z2xldG9uKCkuYWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoKnRoaXMsIGNvbnRleHRJZCk7
CiB9CiAKLXZvaWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c3RhcnRpbmdNb25pdG9y
aW5nUGxheWJhY2tUYXJnZXRzKCkKK3ZvaWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6
cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QgY29udGV4dElkKQogewot
ICAgIHRhcmdldFBpY2tlcigpLnN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOwor
ICAgIFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OnNpbmdsZXRvbigpLnJlbW92
ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KCp0aGlzLCBjb250ZXh0SWQpOwogfQogCi12b2lk
IFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJn
ZXRzKCkKK3ZvaWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c2hvd1BsYXliYWNrVGFy
Z2V0UGlja2VyKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBy
ZWN0LCBib29sIGhhc1ZpZGVvKQogewotICAgIHRhcmdldFBpY2tlcigpLnN0b3BNb25pdG9yaW5n
UGxheWJhY2tUYXJnZXRzKCk7CisgICAgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1h
Yzo6c2luZ2xldG9uKCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCp0aGlzLCBjb250ZXh0SWQs
IFdlYkNvcmU6OkludFJlY3QocmVjdCksIGhhc1ZpZGVvKTsKIH0KIAotdm9pZCBXZWJNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyOjpkaWRDaG9vc2VQbGF5YmFja1RhcmdldChSZWY8V2ViQ29yZTo6
TWVkaWFQbGF5YmFja1RhcmdldD4mJiB0YXJnZXQpCit2b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXI6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0
X3QgY29udGV4dElkLCBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgc3Rh
dGUpCit7CisgICAgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6c2luZ2xldG9u
KCkuY2xpZW50U3RhdGVEaWRDaGFuZ2UoKnRoaXMsIGNvbnRleHRJZCwgc3RhdGUpOworfQorCit2
b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2
NF90IGNvbnRleHRJZCwgUmVmPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgdGFyZ2V0
KQogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2UtPmRp
ZENob29zZVBsYXliYWNrVGFyZ2V0KFdURjo6bW92ZSh0YXJnZXQpKTsKKyAgICBtX3BhZ2UtPnNl
dFBsYXliYWNrVGFyZ2V0KGNvbnRleHRJZCwgV1RGOjptb3ZlKHRhcmdldCkpOwogfQogCi12b2lk
IFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxh
YmxlRGlkQ2hhbmdlKGJvb2wgYXZhaWxhYmxlKQordm9pZCBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyOjpleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgYXZhaWxhYmxlKQogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3BhZ2UtPnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdl
KGF2YWlsYWJsZSk7CisgICAgbV9wYWdlLT5wbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENo
YW5nZShjb250ZXh0SWQsIGF2YWlsYWJsZSk7CiB9CiAKLXZvaWQgV2ViTWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlcjo6aW52YWxpZGF0ZSgpCit2b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXI6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCBzaG91bGRQbGF5KQogewotICAgIG1fcGFnZSA9IG51bGxwdHI7CisgICAgaWYgKCFtX3BhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tU
YXJnZXQoY29udGV4dElkLCBzaG91bGRQbGF5KTsKIH0KIAotV2ViQ29yZTo6TWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlciYgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6dGFyZ2V0UGlja2Vy
KCkKK3ZvaWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6aW52YWxpZGF0ZSgpCiB7Ci0g
ICAgaWYgKCFtX3RhcmdldFBpY2tlcikKLSAgICAgICAgbV90YXJnZXRQaWNrZXIgPSBXZWJDb3Jl
OjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjOjpjcmVhdGUoKnRoaXMpOwotCi0gICAgcmV0
dXJuICptX3RhcmdldFBpY2tlci5nZXQoKTsKKyAgICBtX3BhZ2UgPSBudWxscHRyOworICAgIFdl
YkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OnNpbmdsZXRvbigpLnJlbW92ZUFsbFBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50cygqdGhpcyk7CiB9CiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNiAr
MjkzLDcgQEAKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFU
Rk9STShJT1MpCiAjaW1wb3J0ICJXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmgiCisjaW1w
b3J0IDxXZWJDb3JlL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaD4KICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oTUFDKQpAQCAtODY2OSwzMCArODY3MCwyOSBAQCAtIChXZWJNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyICopIF9kZXZpCiAgICAgcmV0dXJuIF9wcml2YXRlLT5tX3BsYXliYWNrVGFy
Z2V0UGlja2VyLmdldCgpOwogfQogCi0tICh2b2lkKV9zaG93UGxheWJhY2tUYXJnZXRQaWNrZXI6
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jilsb2NhdGlvbiBoYXNWaWRlbzooQk9PTCloYXNWaWRl
bworLSAodm9pZClfYWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQ6KHVpbnQ2NF90KWNsaWVu
dElkCiB7Ci0gICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIFtz
ZWxmIF9kZXZpY2VQaWNrZXJdLT5hZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChjbGllbnRJ
ZCk7Cit9CiAKLSAgICBOU1JlY3QgcmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252
ZXJ0UmVjdDpbc2VsZiBfY29udmVydFJlY3RGcm9tUm9vdFZpZXc6TlNNYWtlUmVjdChsb2NhdGlv
bi54KCksIGxvY2F0aW9uLnkoKSwgMCwgMCldIHRvVmlldzpuaWxdOwotICAgIE5TUmVjdCByZWN0
SW5TY3JlZW5Db29yZGluYXRlcyA9IFtzZWxmLndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOnJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzXTsKLSAgICBbc2VsZiBfZGV2aWNlUGlja2VyXS0+c2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKHJlY3RJblNjcmVlbkNvb3JkaW5hdGVzLCBoYXNWaWRlbyk7Cist
ICh2b2lkKV9yZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudDoodWludDY0X3QpY2xpZW50
SWQKK3sKKyAgICBbc2VsZiBfZGV2aWNlUGlja2VyXS0+cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQoY2xpZW50SWQpOwogfQogCi0tICh2b2lkKV9zdGFydGluZ01vbml0b3JpbmdQbGF5
YmFja1RhcmdldHMKKy0gKHZvaWQpX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjoodWludDY0X3Qp
Y2xpZW50SWQgbG9jYXRpb246KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jilsb2NhdGlvbiBoYXNW
aWRlbzooQk9PTCloYXNWaWRlbwogewogICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFtzZWxmIF9kZXZpY2VQaWNrZXJdLT5zdGFydGluZ01vbml0b3JpbmdQ
bGF5YmFja1RhcmdldHMoKTsKKyAgICBOU1JlY3QgcmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBb
c2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBfY29udmVydFJlY3RGcm9tUm9vdFZpZXc6TlNNYWtlUmVj
dChsb2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKSwgMCwgMCldIHRvVmlldzpuaWxdOworICAgIE5T
UmVjdCByZWN0SW5TY3JlZW5Db29yZGluYXRlcyA9IFtzZWxmLndpbmRvdyBjb252ZXJ0UmVjdFRv
U2NyZWVuOnJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzXTsKKyAgICBbc2VsZiBfZGV2aWNlUGlja2Vy
XS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNsaWVudElkLCByZWN0SW5TY3JlZW5Db29yZGlu
YXRlcywgaGFzVmlkZW8pOwogfQogCi0tICh2b2lkKV9zdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cworLSAodm9pZClfcGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZToo
dWludDY0X3QpY2xpZW50SWQgc3RhdGU6KFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3Rh
dGVGbGFncylzdGF0ZQogewotICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFtzZWxmIF9kZXZpY2VQaWNrZXJdLT5zdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cygpOworICAgIFtzZWxmIF9kZXZpY2VQaWNrZXJdLT5wbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudFN0YXRlRGlkQ2hhbmdlKGNsaWVudElkLCBzdGF0ZSk7CiB9CiAjZW5kaWYKIApJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAx
ODMwNjgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzEsOSArMjcxLDEwIEBAIEBpbnRlcmZhY2UgV2ViVmlldyAoV2Vi
Vmlld090aGVySW50ZXJuYWwKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
ICYmICFQTEFURk9STShJT1MpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCiAtIChXZWJNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyICopIF9kZXZpY2VQaWNrZXI7Ci0tICh2b2lkKV9zaG93UGxheWJh
Y2tUYXJnZXRQaWNrZXI6KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jilsb2NhdGlvbiBoYXNWaWRl
bzooQk9PTCloYXNWaWRlbzsKLS0gKHZvaWQpX3N0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0czsKLS0gKHZvaWQpX3N0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzOworLSAodm9pZClf
YWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQ6KHVpbnQ2NF90KWNsaWVudElkOworLSAodm9p
ZClfcmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQ6KHVpbnQ2NF90KWNvbnRleHRJZDsK
Ky0gKHZvaWQpX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjoodWludDY0X3QpY29udGV4dElkIGxv
Y2F0aW9uOihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpbG9jYXRpb24gaGFzVmlkZW86KEJPT0wp
aGFzVmlkZW87CistICh2b2lkKV9wbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hh
bmdlOih1aW50NjRfdCljb250ZXh0SWQgc3RhdGU6KFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1l
ZGlhU3RhdGVGbGFncylzdGF0ZTsKICNlbmRpZgogCiBAZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251298</attachid>
            <date>2015-04-21 19:58:24 -0700</date>
            <delta_ts>2015-04-21 21:08:06 -0700</delta_ts>
            <desc>Patch for the bots.</desc>
            <filename>ui_process_manager_patch_17.txt</filename>
            <type>text/plain</type>
            <size>156820</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzA3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NyBAQAorMjAxNS0wNC0yMSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBVc2Ugb25l
IHBsYXliYWNrIHRhcmdldCBmb3IgYWxsIHdlYiBwcm9jZXNzZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDAwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFD
b250cm9sc0FwcGxlLmpzOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlV2ly
ZWxlc3NQbGF5YmFja1N0YXR1cyk6IERyaXZlLWJ5IGZpeCB0byBzaG93IGNvbnRyb2xzIHdoZW4K
KyAgICAgICAgICAgIHdlIHNob3cgdGhlIHBsYWNlaG9sZGVyIGltYWdlLgorCisgICAgICAgIElu
c3RlYWQgb2YgaGF2aW5nIGVhY2ggUGFnZS9Eb2N1bWVudCBwYWlyIG1hbmFnZSBhY2Nlc3MgdG8g
dGhlIHBsYXliYWNrIHRhcmdldCBmb3IgdGhlIHZpZGVvcworICAgICAgICBpbiBhIHdlYiBwcm9j
ZXNzLCBwdXQgYWxsIG9mIHRoZSBsb2dpYyBpbnRvIGEgbmV3IGNsYXNzIC0gV2ViTWVkaWFTZXNz
aW9uTWFuYWdlci4gQSBzaW5nbGV0b24KKyAgICAgICAgaW5zdGFuY2UgdGFsa3MgdG8gdGhlIHRh
cmdldCBwaWNrZXIgYW5kIG1hbmFnZXMgdmlkZW8gZWxlbWVudCBhY2Nlc3MgZm9yIGFsbCB3ZWIg
cHJvY2Vzc2VzLgorICAgICAgICBBbGwgcGxheWJhY2sgdGFyZ2V0IGxvZ2ljIHdhcyByZW1vdmVk
IGZyb20gRG9jdW1lbnQsIFBhZ2UsIGFuZCBNZWRpYVNlc3Npb25NYW5hZ2VyLgorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXNlc3Npb246IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
ZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNsaWVudFN0YXRlOjpDbGllbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpmbGFnc0Fy
ZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpXZWJNZWRp
YVNlc3Npb25NYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXI6On5XZWJNZWRpYVNlc3Npb25NYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlh
U2Vzc2lvbk1hbmFnZXI6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlj
a2VyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJl
bW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y2xpZW50U3RhdGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2V0UGxheWJhY2tU
YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJu
YWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
TWVkaWFTZXNzaW9uTWFuYWdlcjo6Y29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnRhc2tUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OmZpbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Zm9yRWFjaENsaWVudCk6Cisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5h
Z2VyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFu
YWdlckNsaWVudDo6fldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Q29udGV4dDo6bWVkaWFTdGF0ZSk6IFJlcGxhY2VzIGlzUGxheWluZ0F1ZGlvLgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Db250ZXh0Ojppc1BsYXlpbmdBdWRpbyk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRBdWRpb1Byb2R1Y2VyKTogVGFrZSBhIE1lZGlh
UHJvZHVjZXIgaW5zdGVhZCBvZiBhbiBBdWRpb1Byb2R1Y2VyLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlbW92ZUF1ZGlvUHJvZHVjZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVwZGF0ZUlzUGxheWluZ01lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRQbGF5YmFj
a1RhcmdldENsaWVudENvbnRleHRJZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRk
UGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRQbGF5YmFja1RhcmdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRv
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVxdWlyZXNQbGF5
YmFja1RhcmdldFJvdXRlTW9uaXRvcmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzUGxheWluZ0F1ZGlvKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQpOiAKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYVNlc3Npb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6dW5yZWdpc3RlcldpdGhEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6c2V0SGFzUGxheWJhY2tUYXJn
ZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vz
c2lvbjo6c2V0UGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vz
c2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6bWVkaWFTdGF0ZURpZENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpkaWRDaG9vc2VQbGF5YmFj
a1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpy
ZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6c3RvcFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYVNl
c3Npb24uaDoKKyAgICAgICAgKiBwYWdlL0F1ZGlvUHJvZHVjZXIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBhZ2UvTWVkaWFQcm9kdWNlci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1ZGlvUHJvZHVjZXIuaC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6On5NZWRpYVByb2R1Y2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvUHJvZHVjZXI6On5BdWRpb1Byb2R1Y2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjp1cGRhdGVJc1BsYXlpbmdNZWRpYSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpyZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpzZXRQbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpwbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpkaWRDaG9vc2VQbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpjb25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0b3JpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bWVkaWFTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppc1BsYXlpbmdBdWRpbyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU2Vzc2lvbjo6aXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6cmVxdWlyZXNQbGF5YmFja1RhcmdldFJvdXRl
TW9uaXRvcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25DbGllbnQ6OnNldFNo
b3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lv
bjo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVNlc3Npb246OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25DbGllbnQ6OnN0YXJ0UGxheWluZ1RvUGxh
eWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ2xp
ZW50OjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTZXNzaW9uTWFuYWdlcjo6c2Vzc2lvbldpbGxCZWdpblBsYXliYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Npb25DYW5Mb2FkTWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6c2Vzc2lvblNob3VsZEJlZ2luUGxh
eWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vTWVkaWFTZXNzaW9uTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5oLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENsaWVudDo6fk1lZGlhUGxheWJh
Y2tUYXJnZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudDo6fk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXI6OnN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0U2hvdWxkUGxh
eVRvUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXI6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZTo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZTo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vV2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hYy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hYzo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lv
bk1hbmFnZXJNYWM6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6fldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6dGFyZ2V0UGlj
a2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlck1hYy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5YmFja1Rhcmdl
dFBpY2tlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJNYWM6OmN1cnJlbnREZXZpY2VEaWRDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0V2lyZWxlc3NQ
bGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnRvZ2dsZVBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFNob3VsZFBsYXlU
b1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0Ojp0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rh
cmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmlzUGFnZVBs
YXlpbmdBdWRpbyk6CisKIDIwMTUtMDQtMjEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ29udGV4dCBtZW51IGRvZXNuJ3QgYWNjb3VudCBmb3Igc2VsZWN0
aW9uIHNlbWFudGljcwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L21lZGlhQ29udHJvbHNBcHBsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzCShyZXZpc2lvbiAxODMwNjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0Fw
cGxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzg3LDYgKzE3ODcsNyBAQCBDb250cm9sbGVyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzLnZvbHVtZUJveC5zdHls
ZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRo
aXMuY29udHJvbHMubXV0ZUJveC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICAgICAg
dGhpcy5zaG93Q29udHJvbHMoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRoaXMu
Y29udHJvbHMuaW5saW5lUGxheWJhY2tQbGFjZWhvbGRlci5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xh
c3NOYW1lcy5oaWRkZW4pOwogICAgICAgICAgICAgdGhpcy5jb250cm9scy53aXJlbGVzc1Rhcmdl
dFBpY2tlci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuQ2xhc3NOYW1lcy5wbGF5aW5nKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9u
L1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCIKKyNp
bmNsdWRlICJXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RydWN0IENsaWVudFN0YXRlIHsKKyAgICBleHBsaWNpdCBDbGllbnRTdGF0ZShX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50JiBjbGllbnQsIHVpbnQ2NF90IGNvbnRleHRJZCkK
KyAgICAgICAgOiBjbGllbnQoJmNsaWVudCkKKyAgICAgICAgLCBjb250ZXh0SWQoY29udGV4dElk
KQorICAgIHsKKyAgICB9CisKKyAgICBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50KiBjbGll
bnQgeyBudWxscHRyIH07CisgICAgdWludDY0X3QgY29udGV4dElkIHsgMCB9OworICAgIFdlYkNv
cmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBmbGFncyB7IFdlYkNvcmU6Ok1lZGlh
UHJvZHVjZXI6OklzTm90UGxheWluZyB9OworICAgIGJvb2wgcmVxdWVzdGVkUGlja2VyIHsgZmFs
c2UgfTsKK307CisKK3N0YXRpYyBib29sIGZsYWdzQXJlU2V0KE1lZGlhUHJvZHVjZXI6Ok1lZGlh
U3RhdGVGbGFncyB2YWx1ZSwgdW5zaWduZWQgZmxhZ3MpCit7CisgICAgcmV0dXJuIHZhbHVlICYg
ZmxhZ3M7Cit9CisKK1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OldlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXIoKQorICAgIDogbV90YXNrVGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmV2ViTWVk
aWFTZXNzaW9uTWFuYWdlcjo6dGFza1RpbWVyRmlyZWQpCit7Cit9CisKK1dlYk1lZGlhU2Vzc2lv
bk1hbmFnZXI6On5XZWJNZWRpYVNlc3Npb25NYW5hZ2VyKCkKK3sKK30KKwordWludDY0X3QgV2Vi
TWVkaWFTZXNzaW9uTWFuYWdlcjo6YWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoV2ViTWVk
aWFTZXNzaW9uTWFuYWdlckNsaWVudCYgY2xpZW50LCB1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgc2l6ZV90IGluZGV4ID0gZmluZCgmY2xpZW50LCBjb250ZXh0SWQpOworICAgIEFTU0VSVChp
bmRleCA9PSBub3RGb3VuZCk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIG1fY2xpZW50U3RhdGUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8Q2xp
ZW50U3RhdGU+KGNsaWVudCwgY29udGV4dElkKSk7CisKKyAgICBpZiAobV9leHRlcm5hbE91dHB1
dERldmljZUF2YWlsYWJsZSB8fCBtX3BsYXliYWNrVGFyZ2V0KSB7CisKKyAgICAgICAgVGFza0Nh
bGxiYWNrIGNhbGxiYWNrID0gc3RkOjptYWtlX3R1cGxlKCZjbGllbnQsIGNvbnRleHRJZCwgW3Ro
aXNdKENsaWVudFN0YXRlJiBzdGF0ZSkgeworCisgICAgICAgICAgICBpZiAobV9leHRlcm5hbE91
dHB1dERldmljZUF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5jbGllbnQtPmV4dGVy
bmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKHN0YXRlLmNvbnRleHRJZCwgdHJ1ZSk7
CisKKyAgICAgICAgICAgIGlmIChtX3BsYXliYWNrVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAg
c3RhdGUuY2xpZW50LT5zZXRQbGF5YmFja1RhcmdldChzdGF0ZS5jb250ZXh0SWQsICptX3BsYXli
YWNrVGFyZ2V0LmNvcHlSZWYoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobV9jbGllbnRTdGF0
ZS5zaXplKCkgPT0gMSAmJiBtX3BsYXliYWNrVGFyZ2V0LT5oYXNBY3RpdmVSb3V0ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5jbGllbnQtPnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFy
Z2V0KHN0YXRlLmNvbnRleHRJZCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
CisgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZChjYWxsYmFjayk7CisgICAgICAgIG1fdGFza1Rp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29udGV4dElkOworfQor
Cit2b2lkIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50KFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwgdWludDY0X3QgY29u
dGV4dElkKQoreworICAgIHNpemVfdCBpbmRleCA9IGZpbmQoJmNsaWVudCwgY29udGV4dElkKTsK
KyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3Vu
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnRTdGF0ZS5yZW1vdmUoaW5kZXgpOwor
ICAgIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOworCisgICAgaWYgKG1fcGxh
eWJhY2tUYXJnZXQgJiYgbV9jbGllbnRTdGF0ZS5zaXplKCkgPT0gMSAmJiBtX3BsYXliYWNrVGFy
Z2V0LT5oYXNBY3RpdmVSb3V0ZSgpKQorICAgICAgICBtX2NsaWVudFN0YXRlWzBdLT5jbGllbnQt
PnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KG1fY2xpZW50U3RhdGVbMF0tPmNvbnRleHRJ
ZCwgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlQWxsUGxh
eWJhY2tUYXJnZXRQaWNrZXJDbGllbnRzKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNs
aWVudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9jbGllbnRTdGF0ZS5zaXplKCk7IGkgPiAw
OyAtLWkpIHsKKyAgICAgICAgaWYgKG1fY2xpZW50U3RhdGVbaSAtIDFdLT5jbGllbnQgPT0gJmNs
aWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50U3RhdGUucmVtb3ZlKGkgLSAxKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2Vy
KFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwgdWludDY0X3QgY29udGV4dElk
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIGlzVmlkZW8pCit7CisgICAgc2l6ZV90IGluZGV4
ID0gZmluZCgmY2xpZW50LCBjb250ZXh0SWQpOworICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3Vu
ZCk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKGF1dG8mIHN0YXRlIDogbV9jbGllbnRTdGF0ZSkKKyAgICAgICAgc3RhdGUtPnJlcXVlc3Rl
ZFBpY2tlciA9IChzdGF0ZS0+Y29udGV4dElkID09IGNvbnRleHRJZCAmJiBzdGF0ZS0+Y2xpZW50
ID09ICZjbGllbnQpOworCisgICAgdGFyZ2V0UGlja2VyKCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKEZsb2F0UmVjdChyZWN0KSwgaXNWaWRlbyk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTZXNzaW9u
TWFuYWdlcjo6Y2xpZW50U3RhdGVEaWRDaGFuZ2UoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVu
dCYgY2xpZW50LCB1aW50NjRfdCBjb250ZXh0SWQsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVG
bGFncyBuZXdGbGFncykKK3sKKyAgICBzaXplX3QgaW5kZXggPSBmaW5kKCZjbGllbnQsIGNvbnRl
eHRJZCk7CisgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKKyAgICBpZiAoaW5kZXggPT0g
bm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGNoYW5nZWRDbGllbnRTdGF0
ZSA9IG1fY2xpZW50U3RhdGVbaW5kZXhdOworICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVG
bGFncyBvbGRGbGFncyA9IGNoYW5nZWRDbGllbnRTdGF0ZS0+ZmxhZ3M7CisgICAgaWYgKG5ld0Zs
YWdzID09IG9sZEZsYWdzKQorICAgICAgICByZXR1cm47CisKKyAgICBjaGFuZ2VkQ2xpZW50U3Rh
dGUtPmZsYWdzID0gbmV3RmxhZ3M7CisgICAgaWYgKCFmbGFnc0FyZVNldChvbGRGbGFncywgTWVk
aWFQcm9kdWNlcjo6UmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3JpbmcpICYmIGZsYWdzQXJl
U2V0KG5ld0ZsYWdzLCBNZWRpYVByb2R1Y2VyOjpSZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRv
cmluZykpCisgICAgICAgIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOworCisg
ICAgaWYgKCFmbGFnc0FyZVNldChuZXdGbGFncywgTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nVmlk
ZW8pKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEbyBub3QgaW50ZXJydXB0IGFub3RoZXIg
ZWxlbWVudCBhbHJlYWR5IHBsYXlpbmcgdG8gYSBkZXZpY2UuCisgICAgZm9yIChhdXRvJiBzdGF0
ZSA6IG1fY2xpZW50U3RhdGUpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5jb250ZXh0SWQgPT0gY29u
dGV4dElkICYmIHN0YXRlLT5jbGllbnQgPT0gJmNsaWVudCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmIChmbGFnc0FyZVNldChzdGF0ZS0+ZmxhZ3MsIE1lZGlhUHJvZHVjZXI6
OklzUGxheWluZ1ZpZGVvKSAmJiBmbGFnc0FyZVNldChzdGF0ZS0+ZmxhZ3MsIE1lZGlhUHJvZHVj
ZXI6OklzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX3BsYXliYWNrVGFyZ2V0ICYmIG1fcGxheWJhY2tUYXJnZXQtPmhhc0Fj
dGl2ZVJvdXRlKCkpIHsKKworICAgICAgICBmb3IgKGF1dG8mIHN0YXRlIDogbV9jbGllbnRTdGF0
ZSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLT5jb250ZXh0SWQgPT0gY29udGV4dElkICYmIHN0
YXRlLT5jbGllbnQgPT0gJmNsaWVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIHN0YXRlLT5jbGllbnQtPnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHN0YXRl
LT5jb250ZXh0SWQsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYW5nZWRDbGllbnRT
dGF0ZS0+Y2xpZW50LT5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChjaGFuZ2VkQ2xpZW50
U3RhdGUtPmNvbnRleHRJZCwgdHJ1ZSk7CisgICAgfQorCisgICAgaWYgKGluZGV4ICYmIG1fY2xp
ZW50U3RhdGUuc2l6ZSgpID4gMSkKKyAgICAgICAgc3RkOjpzd2FwKG1fY2xpZW50U3RhdGUuYXQo
aW5kZXgpLCBtX2NsaWVudFN0YXRlLmF0KDApKTsKK30KKwordm9pZCBXZWJNZWRpYVNlc3Npb25N
YW5hZ2VyOjpzZXRQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJiB0YXJn
ZXQpCit7CisgICAgbV9wbGF5YmFja1RhcmdldCA9IFdURjo6bW92ZSh0YXJnZXQpOworCisgICAg
c2l6ZV90IGluZGV4VGhhdFJlcXVlc3RlZFBpY2tlciA9IG5vdEZvdW5kOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9jbGllbnRTdGF0ZS5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRv
JiBzdGF0ZSA9IG1fY2xpZW50U3RhdGVbaV07CisgICAgICAgIHN0YXRlLT5jbGllbnQtPnNldFBs
YXliYWNrVGFyZ2V0KHN0YXRlLT5jb250ZXh0SWQsICptX3BsYXliYWNrVGFyZ2V0LmNvcHlSZWYo
KSk7CisgICAgICAgIGlmIChzdGF0ZS0+cmVxdWVzdGVkUGlja2VyKSB7CisgICAgICAgICAgICBp
bmRleFRoYXRSZXF1ZXN0ZWRQaWNrZXIgPSBpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGUtPmNsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJn
ZXQoc3RhdGUtPmNvbnRleHRJZCwgZmFsc2UpOworICAgICAgICBzdGF0ZS0+cmVxdWVzdGVkUGlj
a2VyID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGluZGV4VGhhdFJlcXVlc3RlZFBpY2tlciA9
PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc3RhdGUgPSBtX2NsaWVu
dFN0YXRlW2luZGV4VGhhdFJlcXVlc3RlZFBpY2tlcl07CisgICAgc3RhdGUtPmNsaWVudC0+c2V0
U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoc3RhdGUtPmNvbnRleHRJZCwgdHJ1ZSk7CisgICAg
c3RhdGUtPnJlcXVlc3RlZFBpY2tlciA9IGZhbHNlOworfQorCit2b2lkIFdlYk1lZGlhU2Vzc2lv
bk1hbmFnZXI6OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wgYXZh
aWxhYmxlKQoreworICAgIGlmIChtX2V4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlID09IGF2
YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9leHRlcm5hbE91dHB1dERldmljZUF2
YWlsYWJsZSA9IGF2YWlsYWJsZTsKKyAgICBmb3IgKGF1dG8mIHN0YXRlIDogbV9jbGllbnRTdGF0
ZSkKKyAgICAgICAgc3RhdGUtPmNsaWVudC0+ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVE
aWRDaGFuZ2Uoc3RhdGUtPmNvbnRleHRJZCwgYXZhaWxhYmxlKTsKK30KKwordm9pZCBXZWJNZWRp
YVNlc3Npb25NYW5hZ2VyOjpjb25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0b3JpbmcoKQorewor
ICAgIGJvb2wgbW9uaXRvcmluZ1JlcXVpcmVkID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzdGF0
ZSA6IG1fY2xpZW50U3RhdGUpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIE1lZGlhUHJv
ZHVjZXI6OlJlcXVpcmVzUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKSB7CisgICAgICAgICAgICBt
b25pdG9yaW5nUmVxdWlyZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAobW9uaXRvcmluZ1JlcXVpcmVkKQorICAgICAgICB0YXJnZXRQaWNr
ZXIoKS5zdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKTsKKyAgICBlbHNlCisgICAg
ICAgIHRhcmdldFBpY2tlcigpLnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7Cit9CisK
K3ZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6dGFza1RpbWVyRmlyZWQoKQoreworICAgIGF1
dG8gdGFza1F1ZXVlID0gV1RGOjptb3ZlKG1fdGFza1F1ZXVlKTsKKyAgICBpZiAodGFza1F1ZXVl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiB0YXNrIDogdGFz
a1F1ZXVlKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IGZpbmQoc3RkOjpnZXQ8MD4odGFzayks
IHN0ZDo6Z2V0PDE+KHRhc2spKTsKKworICAgICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzdGQ6OmdldDwyPih0YXNrKSgqbV9jbGll
bnRTdGF0ZVtpbmRleF0pOworICAgIH0KK30KKworc2l6ZV90IFdlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXI6OmZpbmQoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCogY2xpZW50LCB1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NsaWVudFN0YXRlLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NsaWVudFN0YXRlW2ldLT5jb250ZXh0SWQgPT0g
Y29udGV4dElkICYmIG1fY2xpZW50U3RhdGVbaV0tPmNsaWVudCA9PSBjbGllbnQpCisgICAgICAg
ICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpICYmICFQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVk
aWFTZXNzaW9uTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJfaAorI2RlZmluZSBXZWJNZWRp
YVNlc3Npb25NYW5hZ2VyX2gKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
ICYmICFQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
LmgiCisjaW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBDbGllbnRTdGF0ZTsK
K2NsYXNzIEludFJlY3Q7CitjbGFzcyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50OworCitj
bGFzcyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyIDogcHVibGljIE1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXI6OkNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViTWVkaWFTZXNzaW9u
TWFuYWdlcik7CitwdWJsaWM6CisKKyAgICBXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCBhZGRQbGF5
YmFja1RhcmdldFBpY2tlckNsaWVudChXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50JiwgdWlu
dDY0X3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCYsIHVpbnQ2NF90KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50cyhX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
aG93UGxheWJhY2tUYXJnZXRQaWNrZXIoV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCYsIHVp
bnQ2NF90LCBjb25zdCBJbnRSZWN0JiwgYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGllbnRTdGF0ZURpZENoYW5nZShXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50JiwgdWludDY0
X3QsIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyk7CisKK3Byb3RlY3Rl
ZDoKKyAgICBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyKCk7CisgICAgdmlydHVhbCB+V2ViTWVkaWFT
ZXNzaW9uTWFuYWdlcigpOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyJiB0YXJnZXRQaWNrZXIoKSA9IDA7CisKK3ByaXZhdGU6CisKKyAgICAvLyBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyOjpDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxheWJh
Y2tUYXJnZXQoUmVmPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShi
b29sKSBvdmVycmlkZTsKKworICAgIHNpemVfdCBmaW5kKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJD
bGllbnQqLCB1aW50NjRfdCk7CisgICAgdm9pZCBjb25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0
b3JpbmcoKTsKKyAgICB2b2lkIHRhc2tUaW1lckZpcmVkKCk7CisKKyAgICB0eXBlZGVmIHN0ZDo6
dHVwbGU8V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCosIHVpbnQ2NF90LCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoQ2xpZW50U3RhdGUmKT4+IFRhc2tDYWxsYmFjazsKKyAgICBWZWN0b3I8VGFza0Nh
bGxiYWNrPiBtX3Rhc2tRdWV1ZTsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJNZWRpYVNlc3Npb25N
YW5hZ2VyPiBtX3Rhc2tUaW1lcjsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2xpZW50
U3RhdGU+PiBtX2NsaWVudFN0YXRlOworICAgIFJlZlB0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBt
X3BsYXliYWNrVGFyZ2V0OworICAgIGJvb2wgbV9leHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJs
ZSB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorCisjZW5kaWYgLy8gV2ViTWVkaWFTZXNz
aW9uTWFuYWdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lvbi9X
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVk
aWFTZXNzaW9uTWFuYWdlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnRfaAorI2Rl
ZmluZSBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50X2gKKworI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpCisKKyNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0LmgiCisj
aW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IE1lZGlhUGxheWJhY2tUYXJnZXQ7CisKK2NsYXNzIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF5YmFja1RhcmdldCh1aW50NjRfdCwgUmVm
PE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxP
dXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UodWludDY0X3QsIGJvb2wpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQodWludDY0X3QsIGJvb2wp
ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisKKyNlbmRpZiAvLyBXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5jcHAJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwNiw5
ICsxMDA2LDEyIEBAIHZvaWQgQXVkaW9Db250ZXh0OjptZWRpYUNhblN0YXJ0KCkKICAgICByZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9y
QXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKIH0KIAotYm9vbCBBdWRpb0NvbnRleHQ6OmlzUGxheWlu
Z0F1ZGlvKCkKK01lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBBdWRpb0NvbnRleHQ6Om1l
ZGlhU3RhdGUoKSBjb25zdAogewotICAgIHJldHVybiAhbV9pc1N0b3BTY2hlZHVsZWQgJiYgbV9k
ZXN0aW5hdGlvbk5vZGUgJiYgbV9kZXN0aW5hdGlvbk5vZGUtPmlzUGxheWluZ0F1ZGlvKCk7Cisg
ICAgaWYgKCFtX2lzU3RvcFNjaGVkdWxlZCAmJiBtX2Rlc3RpbmF0aW9uTm9kZSAmJiBtX2Rlc3Rp
bmF0aW9uTm9kZS0+aXNQbGF5aW5nQXVkaW8oKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUHJvZHVj
ZXI6OklzUGxheWluZ0F1ZGlvOworCisgICAgcmV0dXJuIE1lZGlhUHJvZHVjZXI6OklzTm90UGxh
eWluZzsKIH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OnBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVk
ZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUg
IkF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9Qcm9kdWNlci5oIgogI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1
ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIK
ICNpbmNsdWRlICJNZWRpYVNlc3Npb24uaCIKICNpbmNsdWRlIDxhdG9taWM+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KQEAgLTc2LDcgKzc2LDcgQEAgY2xhc3MgUGVyaW9kaWNXYXZlOwogLy8g
QXVkaW9Db250ZXh0IGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB0aGUgd2ViIGF1ZGlvIEFQSSBhbmQg
YWxsIEF1ZGlvTm9kZXMgYXJlIGNyZWF0ZWQgZnJvbSBpdC4KIC8vIEZvciB0aHJlYWQgc2FmZXR5
IGJldHdlZW4gdGhlIGF1ZGlvIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkLCBpdCBoYXMgYSBy
ZW5kZXJpbmcgZ3JhcGggbG9ja2luZyBtZWNoYW5pc20uIAogCi1jbGFzcyBBdWRpb0NvbnRleHQg
OiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXVk
aW9Db250ZXh0PiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBNZWRp
YUNhblN0YXJ0TGlzdGVuZXIsIHB1YmxpYyBBdWRpb1Byb2R1Y2VyLCBwcml2YXRlIE1lZGlhU2Vz
c2lvbkNsaWVudCB7CitjbGFzcyBBdWRpb0NvbnRleHQgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
LCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0PiwgcHVibGljIEV2ZW50
VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHB1Ymxp
YyBNZWRpYVByb2R1Y2VyLCBwcml2YXRlIE1lZGlhU2Vzc2lvbkNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgLy8gQ3JlYXRlIGFuIEF1ZGlvQ29udGV4dCBmb3IgcmVuZGVyaW5nIHRvIHRoZSBhdWRpbyBo
YXJkd2FyZS4KICAgICBzdGF0aWMgUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlKERvY3VtZW50
JiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMjgwLDggKzI4MCw4IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgbWVkaWFDYW5TdGFydCgpIG92ZXJyaWRlOwogCi0gICAgLy8gQXVkaW9Qcm9k
dWNlcgotICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdBdWRpbygpIG92ZXJyaWRlOworICAgIC8v
IE1lZGlhUHJvZHVjZXIKKyAgICB2aXJ0dWFsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFn
cyBtZWRpYVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VNdXRl
ZFN0YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CiAKICAgICAvLyBUaGUgY29udGV4dCBpdHNlbGYg
a2VlcHMgYSByZWZlcmVuY2UgdG8gYWxsIHNvdXJjZSBub2Rlcy4gIFRoZSBzb3VyY2Ugbm9kZXMs
IHRoZW4gcmVmZXJlbmNlIGFsbCBub2RlcyB0aGV5J3JlIGNvbm5lY3RlZCB0by4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMywxMSBAQAogCQkwNzA3NTZE
RTE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDc1NkQ4MTQyMzlCNEIwMDQxNDE2MSAvKiBK
U1RleHRUcmFja0N1ZS5oICovOyB9OwogCQkwNzA3NTZERjE0MjM5QjRFMDA0MTQxNjEgLyogSlNU
ZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3MDc1NkQ5MTQyMzlCNEMwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3Qu
Y3BwICovOyB9OwogCQkwNzA3NTZFMDE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzA3
NTZEQTE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVMaXN0LmggKi87IH07CisJCTA3
MDlENzhFMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDlENzhDMUFFNTU1
NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCAqLzsgfTsKKwkJMDcwOUQ3
OEYxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDlENzhEMUFFNTU1NTQwMDRF
NDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDcwOUQ3OTIxQUU1NTU3RTAwNEU0MkY4IC8qIFdl
Yk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcwOUQ3OTAxQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWMuY3BwICovOyB9OworCQkwNzA5RDc5MzFBRTU1NTdFMDA0RTQyRjggLyog
V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcwOUQ3OTExQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwNzA5RDc5NTFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFu
YWdlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDcwOUQ3OTQxQUU1NUEyOTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGll
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
NzA5RkM0RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNsaWRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwOUZDNEQxMDI1REVFMzAw
NTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLzsgfTsKIAkJMDcwRTA5MTkxODc1RUVG
QzAwM0ExRDNDIC8qIE1lZGlhU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcwRTA5MTgxODc1RUQ5MzAwM0ExRDNDIC8qIE1lZGlhU2Vzc2lv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3
MEUwOTFCMTg3NUVGNzEwMDNBMUQzQyAvKiBNZWRpYVNlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwRTA5MUExODc1RUY3MTAwM0ExRDND
IC8qIE1lZGlhU2Vzc2lvbi5jcHAgKi87IH07CkBAIC0yNzUsNyArMjgwLDcgQEAKIAkJMDc4RTQz
REExQUJCNkM3RTAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OEU0M0Q4MUFCQjZDN0Uw
MDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc4RTQzREQxQUJCNkY2RjAwMUMyRkE2
IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OEU0M0RCMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc4RTQzREUxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzhFNDNEQzFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlck1hYy5tbSAqLzsgfTsKLQkJMDc5MjE2NTUxQUE1NjBBQTAwQTNDMDQ5IC8qIE1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTIxNjUzMUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDc5MjE2NTUxQUE1NjBBQTAwQTNDMDQ5IC8qIE1lZGlhUGxh
eWJhY2tUYXJnZXRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3OTIxNjUzMUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0
Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMDc5NDE3OTExNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzk0MTc4RjE2NkU4NTVG
MDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmNwcCAqLzsgfTsKIAkJMDc5NDE3OTIxNjZFODU1
RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3OTAxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRl
eHRUcmFjay5oICovOyB9OwogCQkwNzk0MTc5NDE2NkVBMDRFMDA5NDE2QzIgLyogSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDc5NDE3OTMxNjZFQTA0RTAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjA4
Miw3ICsyMDg3LDcgQEAKIAkJNTJDQ0E5RTgxNUUzRjY0QzAwNTNDNzdGIC8qIERPTURPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQ0NBOUU1MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZsb3dDb2xsZWN0
aW9uLmggKi87IH07CiAJCTUyQ0NBOUU5MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZs
b3dDb2xsZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJDQ0E5RTYxNUUzRjY0QzAwNTNDNzdGIC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rp
b24ubW0gKi87IH07CiAJCTUyQ0NBOUVBMTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZs
b3dDb2xsZWN0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyQ0NBOUU3MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZsb3dD
b2xsZWN0aW9uSW50ZXJuYWwuaCAqLzsgfTsKLQkJNTJFMkNBRkMxOUZGMDIwNzAwMUVFQjRGIC8q
IEF1ZGlvUHJvZHVjZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBBdWRpb1Byb2R1Y2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTJFMkNBRkMxOUZG
MDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRpYVBy
b2R1Y2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTJGMTA4NjUxNjJCNkRBNDAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjIxNjJC
NkQ4MjAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwICovOyB9OwogCQk1MkYxMDg2
NjE2MkI2REE4MDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGMTA4NjMxNjJCNkQ4MjAwOUFDODFF
IC8qIE1peGVkQ29udGVudENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1MkY1MkUxMTE0QTAxMzRGMDBBQ0MzOTcgLyogTlNTY3JvbGxl
ckltcERldGFpbHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkY1MkUxMDE0QTAxMzRGMDBBQ0MzOTcgLyogTlNTY3JvbGxlckltcERldGFpbHMubW0g
Ki87IH07CkBAIC03MTA1LDYgKzcxMTAsMTEgQEAKIAkJMDcwNzU2RDgxNDIzOUI0QjAwNDE0MTYx
IC8qIEpTVGV4dFRyYWNrQ3VlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
VGV4dFRyYWNrQ3VlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MDc1NkQ5MTQy
MzlCNEMwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNUZXh0VHJhY2tDdWVMaXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNr
Q3VlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RleHRUcmFja0N1
ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwOUQ3OEMxQUU1NTU1NDAw
NEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA7IHBhdGggPSBtZWRp
YXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTA3MDlENzhEMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuaDsgcGF0aCA9IG1lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDlENzkwMUFFNTU1N0UwMDRFNDJGOCAvKiBX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwNzA5RDc5MTFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZWRpYVNl
c3Npb25NYW5hZ2VyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDlENzk0
MUFFNTVBMjkwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQu
aDsgcGF0aCA9IG1lZGlhc2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAvKiBB
Y2Nlc3NpYmlsaXR5U2xpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFj
Y2Vzc2liaWxpdHlTbGlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwREQ4
RjUwRjAxODY4MDAwNzI3REVCIC8qIG1lZGlhQ29udHJvbHMuY3NzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IG1lZGlhQ29udHJvbHMuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
NzBFMDkxODE4NzVFRDkzMDAzQTFEM0MgLyogTWVkaWFTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzI5OSw3ICs3MzA5LDcgQEAKIAkJMDc4RTQzRDgxQUJCNkM3RTAwMUMyRkE2IC8q
IE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzhFNDNEQjFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBp
Y2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyTWFjLmg7IHBhdGggPSBvYmpjL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJN
YWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc4RTQzREMxQUJCNkY2RjAwMUMy
RkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tOyBw
YXRoID0gb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwNzkyMTY1MzFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTA3OTIxNjUzMUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWJhY2tUYXJn
ZXRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc5NDE3OEYxNjZFODU1
RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbmJhbmRUZXh0VHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzk0MTc5MDE2NkU4NTVGMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluYmFuZFRleHRUcmFjay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwNzk0MTc5MzE2NkVBMDRFMDA5NDE2QzIgLyogSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mjgz
LDcgKzkyOTMsNyBAQAogCQk1MkNDQTlFNTE1RTNGNjRDMDA1M0M3N0YgLyogRE9NRE9NTmFtZWRG
bG93Q29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01ET01O
YW1lZEZsb3dDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQ0NB
OUU2MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRE9NTmFtZWRGbG93Q29sbGVj
dGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDQ0E5RTcxNUUzRjY0QzAw
NTNDNzdGIC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25JbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uSW50ZXJuYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJFMkNBRkIxOUZGMDIwNzAwMUVFQjRG
IC8qIEF1ZGlvUHJvZHVjZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVk
aW9Qcm9kdWNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkUyQ0FGQjE5RkYw
MjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVByb2R1Y2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
RjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1peGVkQ29udGVudENoZWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyog
TWl4ZWRDb250ZW50Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
aXhlZENvbnRlbnRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjUy
RTEwMTRBMDEzNEYwMEFDQzM5NyAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ1MjUsNiArMTQ1MzUsMTYgQEAKIAkJCXRh
YldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJMDcwOUQ3OEIxQUU1NTUyRTAw
NEU0MkY4IC8qIG1lZGlhc2Vzc2lvbiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJMDcwOUQ3OTQxQUU1NUEyOTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lv
bk1hbmFnZXJDbGllbnQuaCAqLywKKwkJCQkwNzA5RDc4QzFBRTU1NTU0MDA0RTQyRjggLyogV2Vi
TWVkaWFTZXNzaW9uTWFuYWdlci5jcHAgKi8sCisJCQkJMDcwOUQ3OEQxQUU1NTU1NDAwNEU0MkY4
IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLywKKwkJCSk7CisJCQluYW1lID0gbWVkaWFz
ZXNzaW9uOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMDcyMjFCNDYxN0NF
QzMyNzAwODQ4RTUxIC8qIG1lZGlhc3RyZWFtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTE0NzI3LDE0ICsxNDc0NywxNiBAQAogCQkwNzZGMEQwODEyQjgx
OTI3MDBDMjZBQTQgLyogYXZmb3VuZGF0aW9uICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQkwNzFFNDk2RjFBRDVBQjVFMDA4QTUwQjQgLyogTWVkaWFQbGF5
YmFja1RhcmdldE1hYy5oICovLAotCQkJCTA3MUU0OTZEMUFENUFBMEQwMDhBNTBCNCAvKiBNZWRp
YVBsYXliYWNrVGFyZ2V0TWFjLm1tICovLAorCQkJCTA3MDlENzkwMUFFNTU1N0UwMDRFNDJGOCAv
KiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCAqLywKKwkJCQkwNzA5RDc5MTFBRTU1NTdF
MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oICovLAogCQkJCURGOUFGRDZG
MTNGQzMxQjAwMDE1RkVCNyAvKiBvYmpjICovLAogCQkJCUNERTNBODUyMTdGNUZDRTYwMEM1QkUy
MCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRi5oICovLAogCQkJCTA3RTlFMTJGMThGNjJCMzcwMDEx
QTNBNCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVBVkYuY3BwICovLAogCQkJCTA3
RTlFMTJEMThGNUUyNzYwMDExQTNBNCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVB
VkYuaCAqLywKIAkJCQkwN0I0NDJENDE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRi5jcHAgKi8sCiAJCQkJMDdCNDQyRDUxNjZDNzBCMDAwNTU2Q0FEIC8qIEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkYuaCAqLywKKwkJCQkwNzFFNDk2RjFBRDVBQjVFMDA4QTUwQjQg
LyogTWVkaWFQbGF5YmFja1RhcmdldE1hYy5oICovLAorCQkJCTA3MUU0OTZEMUFENUFBMEQwMDhB
NTBCNCAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TWFjLm1tICovLAogCQkJCTA3OEU0M0RCMUFCQjZG
NkYwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggKi8sCiAJCQkJMDc4
RTQzREMxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW0g
Ki8sCiAJCQkJMDc2RjBEMDkxMkI4MTkyNzAwQzI2QUE0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbi5jcHAgKi8sCkBAIC0xNjc5NSw3ICsxNjgxNyw2IEBACiAJCQkJODUzOEYwMDAw
QUQ3MTc3MDAwNkE4MUQxIC8qIEFic3RyYWN0Vmlldy5pZGwgKi8sCiAJCQkJQkNGNDhDRTYxMzcw
RDExNDAwNEU4N0Q2IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCAqLywKIAkJCQlDRURBMTJENjE1
MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggKi8sCi0JCQkJNTJFMkNB
RkIxOUZGMDIwNzAwMUVFQjRGIC8qIEF1ZGlvUHJvZHVjZXIuaCAqLywKIAkJCQk0NTgzMEQ0QjE2
NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwICovLAogCQkJCTQ1ODMw
RDRDMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29udHJvbGxlci5oICovLAogCQkJCUJD
MTI0RUU0MEMyNjQxQ0QwMDlFMjM0OSAvKiBCYXJQcm9wLmNwcCAqLywKQEAgLTE2ODc5LDYgKzE2
OTAwLDcgQEAKIAkJCQk5MzJBRDcwNDE3RUZBMkMzMDAzOEY4RkYgLyogTWFpbkZyYW1lLmggKi8s
CiAJCQkJQkM1OURFRkExNjlERUREODAwMTZBQzM0IC8qIG1ha2Vfc2V0dGluZ3MucGwgKi8sCiAJ
CQkJOTMxQkNDNjAxMTI0REZDQjAwQkU3MEREIC8qIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oICov
LAorCQkJCTUyRTJDQUZCMTlGRjAyMDcwMDFFRUI0RiAvKiBNZWRpYVByb2R1Y2VyLmggKi8sCiAJ
CQkJOTNFQjM1NUUwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMuY3BwICovLAogCQkJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzLmggKi8sCiAJCQkJQTlDNkU1QTMwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5h
dmlnYXRvci5jcHAgKi8sCkBAIC0xODMwMyw2ICsxODMyNSw3IEBACiAJCQkJOTcxMkE1NTMxNTAw
NEUzQzAwNDhBRjEwIC8qIGluZGV4ZWRkYiAqLywKIAkJCQlBQTdFQTBBOTE3NTU3QjFDMDBERjQ2
NDMgLyogaW5kaWV1aSAqLywKIAkJCQlDRDlBMzdGNTE3QzdEOTM2MDBDNUZBN0EgLyogbWVkaWFj
b250cm9scyAqLywKKwkJCQkwNzA5RDc4QjFBRTU1NTJFMDA0RTQyRjggLyogbWVkaWFzZXNzaW9u
ICovLAogCQkJCUIxQTk0MkREMTVCNUNFMjIwMEQ1MjVEMSAvKiBtZWRpYXNvdXJjZSAqLywKIAkJ
CQkwNzIyMUI0NjE3Q0VDMzI3MDA4NDhFNTEgLyogbWVkaWFzdHJlYW0gKi8sCiAJCQkJMzMzRjcw
M0QwRkI0OUMxNjAwOEUxMkE2IC8qIG5vdGlmaWNhdGlvbnMgKi8sCkBAIC0yMDc5OCw3ICsyMDgy
MSw3IEBACiAJCQkJMDdGODc2ODMxQUQ0QTk0NTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJn
ZXRDb250ZXh0LmggKi8sCiAJCQkJMDc4RTQzRDcxQUJCNkM3RTAwMUMyRkE2IC8qIE1lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXIuY3BwICovLAogCQkJCTA3OEU0M0Q4MUFCQjZDN0UwMDFDMkZBNiAv
KiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggKi8sCi0JCQkJMDc5MjE2NTMxQUE1NjBBQTAw
QTNDMDQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQuaCAqLywKKwkJCQkwNzky
MTY1MzFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oICovLAog
CQkJCUU0QjQxRTBDMENCRjkwQkQwMEFGMkVDRSAvKiBNZWRpYVBsYXllci5jcHAgKi8sCiAJCQkJ
RTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlhUGxheWVyLmggKi8sCiAJCQkJMDc5RjVF
NEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oICovLApAQCAtMjM3MTcs
NyArMjM3NDAsNiBAQAogCQkJCUZEMzU5MTkwMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFt
VGltZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDIwMTJCMDI2NzYwMEMxQTM1OSAv
KiBBdWRpb1Byb2Nlc3NpbmdFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwODQxMkIw
MjZGNzAwQzFBMzU5IC8qIEF1ZGlvUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkUy
Q0FGQzE5RkYwMjA3MDAxRUVCNEYgLyogQXVkaW9Qcm9kdWNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkQzMTYwODYxMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlvUmVzYW1wbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRDMxNjA4ODEyQjAyNkY3MDBDMUEzNTkgLyogQXVkaW9SZXNhbXBsZXJLZXJu
ZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEOEM0NkVDMTU0NjA4RTcwMEE1OTEwQyAvKiBBdWRp
b1NjaGVkdWxlZFNvdXJjZU5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjQxNDksNiArMjQxNzEs
NyBAQAogCQkJCTFBOEY2QkMzMERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUQzODlCMjBBOTkxQTdGMDAyODIxNDUgLyogRE9NQXR0
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExOEQwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUF0
dHJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcwOUQ3OTUxQUU1NUEyOTAwNEU0MkY4
IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTc2
RkI5RkVCMTlBNzI4NEIwMDQyMDU2MiAvKiBET01BdXRvY29tcGxldGVFcnJvckV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk3NkZCOUZFRDE5QTcyODRCMDA0MjA1NjIgLyogRE9NQXV0b2NvbXBs
ZXRlRXJyb3JFdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0NkVFRjEwN0ZE
QkFDMDA4NTcxOTMgLyogRE9NQmVmb3JlTG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1
Njk1LDYgKzI1NzE4LDcgQEAKIAkJCQlERjlBRkQ3MjEzRkMzMUQ4MDAxNUZFQjcgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDOEI1
QTMxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjEzRTYwQ0Q2ODFBOTAwRkFEQTc1IC8qIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkUyQ0FGQzE5RkYwMjA3
MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEUxOTU5MkEw
QTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MUU0
OTcwMUFENUFCNUUwMDhBNTBCNCAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TWFjLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0RTE5NTkyQzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRv
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTc4MCw2ICsyNTgwNCw3IEBACiAJCQkJRTEwQjlCNkMw
Qjc0NzU5OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNDQ0YwMjcwQUY2QzUyOTAwMDE4RTg5IC8qIE5hdmlnYXRpb25BY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3OUY0M0Q0MTA3NUU0NEEwMDAwRjgzQiAvKiBOYXZpZ2F0aW9uU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzA5RDc5MzFBRTU1NTdFMDA0RTQyRjggLyog
V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU1QTYw
RDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUREQTk0
QzIxOTY4N0FBNTAwNDUzMDI5IC8qIEpTRG9jdW1lbnRDdXN0b20uaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxMjcxOUM3MEVFRUMxNjgwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2Mjg1LDcgKzI2MzEwLDcgQEAKIAkJCQk5MzkxQTk5MTE2Mjc0NkNCMDAyOTcz
MzAgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQzM4
QkZGMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQTNFN0IxOTFCMkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwNzkyMTY1NTFBQTU2MEFBMDBB
M0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMDc5MjE2NTUxQUE1NjBBQTAwQTNDMDQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMUNCRDBEMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3Jv
bGxpbmdTdGF0ZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEzRTg0MTkxQjMxQkYwMDBG
MUI1NSAvKiBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTMxQ0JEMEYxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjY2MCw2ICsyNjY4NSw3IEBACiAJCQkJQjIy
MjdBODEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NDc2QzlFNjExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwODRBMDgyOTEyOEQ3ODY3MDAyREIxRjEgLyogU1ZHUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MDlENzhGMUFFNTU1
NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NEI2Qjk3ODEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTgzQzFENDM1MTc4RDVBQjUwMDE0MUU2OCAvKiBTVkdQYXRoU2VnTW92
ZXRvQWJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTk4QkRGMTFBODExNDMxMDBCMjJGQjUgLyog
UmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzYxMSw2ICsyNzYz
Nyw3IEBACiAJCQkJQkM5MDRCNzYwRDEwOTk4RjAwNjgwRDMyIC8qIENsYXNzTm9kZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0MDkwRkIxQUE1MUUxRDAwOTExOTFBIC8qIENvbnRlbnRG
aWx0ZXJVbmJsb2NrSGFuZGxlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDMDY1N0Qw
RjNDRTFCNzAwQ0QyRDg3IC8qIENsaWVudFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcw
OUQ3OTIxQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNDMDY1ODAwRjNDRTFCNzAwQ0QyRDg3IC8qIENsaWVudFJlY3RM
aXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1MDMxQjNGMEE0NEVGQzcwMEY5OTJFMCAvKiBD
bGlwYm9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREVBNzYzNTE0NjBCNzFBMDA4
QjMxRjEgLyogQ2xvY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzg3Niw2ICsyNzkwMyw3IEBA
CiAJCQkJODVDQTk3NUQwQTk2MkU1NDAwNjkwQ0NGIC8qIERPTURvY3VtZW50VHlwZS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTg1MThEQ0VBMEE5Q0M4MEQwMDkxQjdBNiAvKiBET01ET01JbXBsZW1l
bnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUyQ0NBOUU5MTVFM0Y2NEMwMDUzQzc3RiAv
KiBET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMDcwOUQ3
OEUxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkQ5QTI0NzMxNUI5QzJEMTAwRDM0NTI3IC8qIERPTURPTVNlY3VyaXR5UG9s
aWN5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNzY5NDU2NUMxMjE0REI2MzAwMDdDQkFFIC8qIERP
TURPTVRva2VuTGlzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBQUJBMjU5MTRCQzYxMzMwMEFB
OUExMSAvKiBET01FZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJBWE9iamVj
dENhY2hlLmgiCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkF0
dHIuaCIKLSNpbmNsdWRlICJBdWRpb1Byb2R1Y2VyLmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9u
LmgiCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNs
YXJhdGlvbi5oIgpAQCAtMTAwLDYgKzk5LDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCisj
aW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlMaXN0LmgiCiAj
aW5jbHVkZSAiTWVkaWFRdWVyeU1hdGNoZXIuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzLmgiCkBAIC0yMzAsNyArMjMwLDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50Lmgi
CisjaW5jbHVkZSAiTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oIgogI2VuZGlmCiAKIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CkBAIC01MjMsNyArNTIzLDYgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZy
YW1lKiBmcmFtZSwgY29uc3QgVQogICAgICwgbV9yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoZmFs
c2UpCiAgICAgLCBtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24oZmFsc2UpCiAgICAgLCBtX2hh
c1N0eWxlV2l0aFZpZXdwb3J0VW5pdHMoZmFsc2UpCi0gICAgLCBtX2lzUGxheWluZ0F1ZGlvKGZh
bHNlKQogewogICAgIGFsbERvY3VtZW50cygpLmFkZCh0aGlzKTsKIApAQCAtMzQxNSwxMyArMzQx
NCwxMyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVWaWV3cG9ydFVuaXRzT25SZXNpCiAgICAgfQog
fQogCi12b2lkIERvY3VtZW50OjphZGRBdWRpb1Byb2R1Y2VyKEF1ZGlvUHJvZHVjZXIqIGF1ZGlv
UHJvZHVjZXIpCit2b2lkIERvY3VtZW50OjphZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJvZHVjZXIq
IGF1ZGlvUHJvZHVjZXIpCiB7CiAgICAgbV9hdWRpb1Byb2R1Y2Vycy5hZGQoYXVkaW9Qcm9kdWNl
cik7CiAgICAgdXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVt
b3ZlQXVkaW9Qcm9kdWNlcihBdWRpb1Byb2R1Y2VyKiBhdWRpb1Byb2R1Y2VyKQordm9pZCBEb2N1
bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1Byb2R1Y2VyKQog
ewogICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKGF1ZGlvUHJvZHVjZXIpOwogICAgIHVwZGF0
ZUlzUGxheWluZ01lZGlhKCk7CkBAIC0zNDI5LDE4ICszNDI4LDE0IEBAIHZvaWQgRG9jdW1lbnQ6
OnJlbW92ZUF1ZGlvUHJvZHVjZXIoQXVkaW8KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRlSXNQbGF5
aW5nTWVkaWEoKQogewotICAgIGJvb2wgaXNQbGF5aW5nQXVkaW8gPSBmYWxzZTsKLSAgICBmb3Ig
KGF1dG8gYXVkaW9Qcm9kdWNlciA6IG1fYXVkaW9Qcm9kdWNlcnMpIHsKLSAgICAgICAgaWYgKGF1
ZGlvUHJvZHVjZXItPmlzUGxheWluZ0F1ZGlvKCkpIHsKLSAgICAgICAgICAgIGlzUGxheWluZ0F1
ZGlvID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE1l
ZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSA9IE1lZGlhUHJvZHVjZXI6OklzTm90
UGxheWluZzsKKyAgICBmb3IgKGF1dG8gYXVkaW9Qcm9kdWNlciA6IG1fYXVkaW9Qcm9kdWNlcnMp
CisgICAgICAgIHN0YXRlIHw9IGF1ZGlvUHJvZHVjZXItPm1lZGlhU3RhdGUoKTsKIAotICAgIGlm
IChpc1BsYXlpbmdBdWRpbyA9PSBtX2lzUGxheWluZ0F1ZGlvKQorICAgIGlmIChzdGF0ZSA9PSBt
X21lZGlhU3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faXNQbGF5aW5nQXVkaW8gPSBp
c1BsYXlpbmdBdWRpbzsKKyAgICBtX21lZGlhU3RhdGUgPSBzdGF0ZTsKIAogICAgIGlmIChwYWdl
KCkpCiAgICAgICAgIHBhZ2UoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKQEAgLTY1MzMsNzIg
KzY1MjgsODUgQEAgdm9pZCBEb2N1bWVudDo6c2V0SW5wdXRDdXJzb3IoUGFzc1JlZlB0cgogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotdm9pZCBEb2N1bWVu
dDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1l
bnQpCitzdGF0aWMgdWludDY0X3QgbmV4dFBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkKCkK
K3sKKyAgICBzdGF0aWMgdWludDY0X3QgY29udGV4dElkID0gMDsKKyAgICByZXR1cm4gKytjb250
ZXh0SWQ7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
KE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQmIGNsaWVudCkKIHsKICAgICBQYWdlKiBwYWdlID0g
dGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFn
ZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHZpZXcoKS0+bGFzdEtub3duTW91c2VQb3NpdGlv
bigpLCBpczxIVE1MVmlkZW9FbGVtZW50PihlbGVtZW50KSk7CisgICAgQVNTRVJUKCFtX2NsaWVu
dFRvSURNYXAuY29udGFpbnMoJmNsaWVudCkpOworCisgICAgdWludDY0X3QgY29udGV4dElkID0g
bmV4dFBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkKCk7CisgICAgbV9jbGllbnRUb0lETWFw
LmFkZCgmY2xpZW50LCBjb250ZXh0SWQpOworICAgIG1faWRUb0NsaWVudE1hcC5hZGQoY29udGV4
dElkLCAmY2xpZW50KTsKKyAgICBwYWdlLT5hZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChj
b250ZXh0SWQpOwogfQogCi12b2lkIERvY3VtZW50OjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudChNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50JiBjbGllbnQpCit2b2lkIERvY3Vt
ZW50OjpyZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChNZWRpYVBsYXliYWNrVGFyZ2V0
Q2xpZW50JiBjbGllbnQpCiB7CisgICAgQVNTRVJUKG1fY2xpZW50VG9JRE1hcC5jb250YWlucygm
Y2xpZW50KSk7CisgICAgdWludDY0X3QgY29udGV4dElkID0gbV9jbGllbnRUb0lETWFwLmdldCgm
Y2xpZW50KTsKKyAgICBtX2lkVG9DbGllbnRNYXAucmVtb3ZlKGNvbnRleHRJZCk7CisgICAgbV9j
bGllbnRUb0lETWFwLnJlbW92ZSgmY2xpZW50KTsKKwogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsYXliYWNr
VGFyZ2V0Q2xpZW50cy5hZGQoJmNsaWVudCk7Ci0KLSAgICBSZWZQdHI8TWVkaWFQbGF5YmFja1Rh
cmdldD4gdGFyZ2V0ID0gcGFnZS0+cGxheWJhY2tUYXJnZXQoKTsKLSAgICBpZiAodGFyZ2V0KQot
ICAgICAgICBjbGllbnQuZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoKnRhcmdldCk7Ci0gICAgY2xp
ZW50LmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKHBhZ2UtPmhhc1dpcmVs
ZXNzUGxheWJhY2tUYXJnZXQoKSk7CisgICAgcGFnZS0+cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQoY29udGV4dElkKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlUGxheWJhY2tU
YXJnZXRQaWNrZXJDbGllbnQoTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCYgY2xpZW50
KQordm9pZCBEb2N1bWVudDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKE1lZGlhUGxheWJhY2tU
YXJnZXRDbGllbnQmIGNsaWVudCwgYm9vbCBpc1ZpZGVvKQogewotICAgIG1fcGxheWJhY2tUYXJn
ZXRDbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKLSAgICBjb25maWd1cmVQbGF5YmFja1RhcmdldE1v
bml0b3JpbmcoKTsKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIGlmICghcGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY2xpZW50VG9JRE1hcC5jb250YWlu
cygmY2xpZW50KSk7CisgICAgcGFnZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKG1fY2xpZW50
VG9JRE1hcC5nZXQoJmNsaWVudCksIHZpZXcoKS0+bGFzdEtub3duTW91c2VQb3NpdGlvbigpLCBp
c1ZpZGVvKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6Y29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25p
dG9yaW5nKCkKK3ZvaWQgRG9jdW1lbnQ6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVE
aWRDaGFuZ2UoTWVkaWFQbGF5YmFja1RhcmdldENsaWVudCYgY2xpZW50LCBNZWRpYVByb2R1Y2Vy
OjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCiB7CiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhZ2UtPmNvbmZpZ3Vy
ZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOworICAgIEFTU0VSVChtX2NsaWVudFRvSURNYXAu
Y29udGFpbnMoJmNsaWVudCkpOworICAgIHBhZ2UtPnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
U3RhdGVEaWRDaGFuZ2UobV9jbGllbnRUb0lETWFwLmdldCgmY2xpZW50KSwgc3RhdGUpOwogfQog
Ci1ib29sIERvY3VtZW50OjpyZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCkK
K3ZvaWQgRG9jdW1lbnQ6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKHVpbnQ2
NF90IGNsaWVudElkLCBib29sIGF2YWlsYWJsZSkKIHsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IG1fcGxheWJhY2tUYXJnZXRDbGllbnRzKSB7Ci0gICAgICAgIGlmIChjbGllbnQtPnJlcXVpcmVz
UGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSkgewotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBUYXJnZXRDbGll
bnRUb0lkTWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0NsaWVudE1hcC5maW5kKGNsaWVudElkKTsK
KyAgICBpZiAoaXQgPT0gbV9pZFRvQ2xpZW50TWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CiAK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgaXQtPnZhbHVlLT5leHRlcm5hbE91dHB1dERldmljZUF2
YWlsYWJsZURpZENoYW5nZShhdmFpbGFibGUpOwogfQogCi12b2lkIERvY3VtZW50OjpwbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShib29sIGF2YWlsYWJsZSkKK3ZvaWQgRG9jdW1l
bnQ6OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNsaWVudElkLCBSZWY8TWVkaWFQbGF5YmFj
a1RhcmdldD4mJiB0YXJnZXQpCiB7Ci0gICAgaWYgKG1fcGxheWJhY2tUYXJnZXRzQXZhaWxhYmxl
ID09IGF2YWlsYWJsZSkKKyAgICBUYXJnZXRDbGllbnRUb0lkTWFwOjppdGVyYXRvciBpdCA9IG1f
aWRUb0NsaWVudE1hcC5maW5kKGNsaWVudElkKTsKKyAgICBpZiAoaXQgPT0gbV9pZFRvQ2xpZW50
TWFwLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wbGF5YmFja1RhcmdldHNBdmFpbGFi
bGUgPSBhdmFpbGFibGU7CiAKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fcGxheWJhY2tUYXJn
ZXRDbGllbnRzKQotICAgICAgICBjbGllbnQtPmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxl
RGlkQ2hhbmdlKGF2YWlsYWJsZSk7CisgICAgaXQtPnZhbHVlLT5zZXRQbGF5YmFja1RhcmdldCh0
YXJnZXQuY29weVJlZigpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlkQ2hvb3NlUGxheWJhY2tU
YXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgZGV2aWNlKQordm9pZCBEb2N1bWVudDo6
c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQodWludDY0X3QgY2xpZW50SWQsIGJvb2wgc2hv
dWxkUGxheSkKIHsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fcGxheWJhY2tUYXJnZXRDbGll
bnRzKQotICAgICAgICBjbGllbnQtPmRpZENob29zZVBsYXliYWNrVGFyZ2V0KGRldmljZS5jb3B5
UmVmKCkpOwotfQorICAgIFRhcmdldENsaWVudFRvSWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRv
Q2xpZW50TWFwLmZpbmQoY2xpZW50SWQpOworICAgIGlmIChpdCA9PSBtX2lkVG9DbGllbnRNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKIAotI2VuZGlmCisgICAgaXQtPnZhbHVlLT5zZXRTaG91
bGRQbGF5VG9QbGF5YmFja1RhcmdldChzaG91bGRQbGF5KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRl
ICJEb2N1bWVudFRpbWluZy5oIgogI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgogI2luY2x1ZGUg
Ik11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1FdmVudC5oIgpAQCAtNjksNyArNzAsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEFYT2JqZWN0Q2FjaGU7CiBjbGFzcyBBdHRyOwotY2xhc3MgQXVkaW9Q
cm9kdWNlcjsKIGNsYXNzIENEQVRBU2VjdGlvbjsKIGNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKIGNs
YXNzIENTU1N0eWxlRGVjbGFyYXRpb247CkBAIC0xMjYsNyArMTI2LDcgQEAgY2xhc3MgSlNOb2Rl
OwogY2xhc3MgTG9jYWxlOwogY2xhc3MgTWVkaWFDYW5TdGFydExpc3RlbmVyOwogY2xhc3MgTWVk
aWFQbGF5YmFja1RhcmdldDsKLWNsYXNzIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQ7
CitjbGFzcyBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50OwogY2xhc3MgTWVkaWFRdWVyeUxpc3Q7
CiBjbGFzcyBNZWRpYVF1ZXJ5TWF0Y2hlcjsKIGNsYXNzIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHM7CkBAIC0xMjI5LDIxICsxMjI5LDIyIEBAIHB1YmxpYzoKICAgICBib29sIGhhc1N0eWxl
V2l0aFZpZXdwb3J0VW5pdHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1N0eWxlV2l0aFZpZXdwb3J0
VW5pdHM7IH0KICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0VW5pdHNPblJlc2l6ZSgpOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdWRpb1Byb2R1Y2VyKEF1ZGlvUHJvZHVjZXIqKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIoQXVkaW9Qcm9kdWNlciop
OwotICAgIGJvb2wgaXNQbGF5aW5nQXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2lzUGxheWluZ0F1
ZGlvOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJv
ZHVjZXIqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIoTWVk
aWFQcm9kdWNlciopOworICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0YXRlOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB1cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogICAgIHZvaWQgcGFnZU11dGVkU3RhdGVEaWRD
aGFuZ2UoKTsKICAgICBXZWFrUHRyPERvY3VtZW50PiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4g
bV93ZWFrRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19Q
TEFZQkFDS19UQVJHRVQpCi0gICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3Qg
SFRNTE1lZGlhRWxlbWVudCYpOwotICAgIHZvaWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVm
PE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpOwotICAgIHZvaWQgYWRkUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQoTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCYpOwotICAgIHZvaWQgcmVt
b3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudCYpOwotICAgIGJvb2wgcmVxdWlyZXNQbGF5YmFja1RhcmdldFJvdXRlTW9uaXRvcmluZygp
OwotICAgIHZvaWQgY29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7Ci0gICAgdm9p
ZCBwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShib29sKTsKKyAgICB2b2lkIGFk
ZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQmKTsK
KyAgICB2b2lkIHJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KE1lZGlhUGxheWJhY2tU
YXJnZXRDbGllbnQmKTsKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihNZWRpYVBs
YXliYWNrVGFyZ2V0Q2xpZW50JiwgYm9vbCk7CisgICAgdm9pZCBwbGF5YmFja1RhcmdldFBpY2tl
ckNsaWVudFN0YXRlRGlkQ2hhbmdlKE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQmLCBNZWRpYVBy
b2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MpOworCisgICAgdm9pZCBzZXRQbGF5YmFja1RhcmdldCh1
aW50NjRfdCwgUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpOworICAgIHZvaWQgcGxheWJhY2tU
YXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UodWludDY0X3QsIGJvb2wpOworICAgIHZvaWQgc2V0
U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQodWludDY0X3QsIGJvb2wpOwogI2VuZGlmCiAKIHBy
b3RlY3RlZDoKQEAgLTE2ODQsMTIgKzE2ODUsMTQgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9o
YXNTdHlsZVdpdGhWaWV3cG9ydFVuaXRzOwogCi0gICAgSGFzaFNldDxBdWRpb1Byb2R1Y2VyKj4g
bV9hdWRpb1Byb2R1Y2VyczsKLSAgICBib29sIG1faXNQbGF5aW5nQXVkaW87CisgICAgSGFzaFNl
dDxNZWRpYVByb2R1Y2VyKj4gbV9hdWRpb1Byb2R1Y2VyczsKKyAgICBNZWRpYVByb2R1Y2VyOjpN
ZWRpYVN0YXRlRmxhZ3MgbV9tZWRpYVN0YXRlIHsgTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5n
IH07CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIEhhc2hTZXQ8
V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCo+IG1fcGxheWJhY2tUYXJn
ZXRDbGllbnRzOwotICAgIGJvb2wgbV9wbGF5YmFja1RhcmdldHNBdmFpbGFibGUgeyBmYWxzZSB9
OworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1Rh
cmdldENsaWVudCo+IFRhcmdldENsaWVudFRvSWRNYXA7CisgICAgVGFyZ2V0Q2xpZW50VG9JZE1h
cCBtX2lkVG9DbGllbnRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6Ok1lZGlhUGxh
eWJhY2tUYXJnZXRDbGllbnQqLCB1aW50NjRfdD4gVGFyZ2V0SWRUb0NsaWVudE1hcDsKKyAgICBU
YXJnZXRJZFRvQ2xpZW50TWFwIG1fY2xpZW50VG9JRE1hcDsKICNlbmRpZgogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODMwNjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MDEsOCArNDAxLDEwIEBAIEhUTUxNZWRpYUVsZW1lbnQ6On5IVE1MTWVkaWFFbGVt
ZW50KCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAg
ICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0
YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSkKKyAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZl
bnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSkg
eworICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gZmFs
c2U7CiAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJp
bGl0eUxpc3RlbmVycygqdGhpcywgZmFsc2UpOworICAgIH0KICNlbmRpZgogCiAgICAgaWYgKG1f
bWVkaWFDb250cm9sbGVyKSB7CkBAIC00MjgsNyArNDMwLDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6
fkhUTUxNZWRpYUVsZW1lbnQoKQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0
aERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBtX21lZGlhU2Vzc2lvbi0+cmVn
aXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdpc3Rl
cldpdGhEb2N1bWVudCgqdGhpcyk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2Fu
U3RhcnQpCiAgICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsK
QEAgLTQ1NSw3ICs0NTcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aERv
Y3VtCiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3RlcldpdGhEb2N1bWVudChEb2N1
bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0ZXJXaXRoRG9j
dW1lbnQoZG9jdW1lbnQpOworICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lzdGVyV2l0aERvY3Vt
ZW50KCp0aGlzKTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAg
ICAgICAgZG9jdW1lbnQucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwpAQCAtMzAx
Nyw2ICszMDE5LDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXQK
ICAgICAgICAgfQogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS52b2x1bWVjaGFu
Z2VFdmVudCk7CiAgICAgICAgIGRvY3VtZW50KCkudXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKKwor
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgICAgIG1fbWVkaWFTZXNz
aW9uLT5tZWRpYVN0YXRlRGlkQ2hhbmdlKCp0aGlzLCBtZWRpYVN0YXRlKCkpOworI2VuZGlmCiAg
ICAgfQogI2VuZGlmCiB9CkBAIC00MjkyLDcgKzQyOTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6Om1lZGlhUGxheWVyRW5naW5lCiAKICAgICBtX2hhdmVQcmVwYXJlZFRvUGxheSA9IGZhbHNl
OwogCi0gICAgbV9tZWRpYVNlc3Npb24tPmFwcGx5TWVkaWFQbGF5ZXJSZXN0cmljdGlvbnMoKnRo
aXMpOworICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYUVuZ2luZVVwZGF0ZWQoKnRoaXMpOwogCiAj
aWYgRU5BQkxFKFdFQl9BVURJTykKICAgICBpZiAobV9hdWRpb1NvdXJjZU5vZGUgJiYgYXVkaW9T
b3VyY2VQcm92aWRlcigpKSB7CkBAIC00NTk3LDkgKzQ2MDMsMTMgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRQbGF5aW5nKGJvb2wgcAogewogICAgIGlmIChtX3BsYXlpbmcgPT0gcGxheWlu
ZykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgbV9wbGF5aW5nID0gcGxheWluZzsKICAg
ICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CisKKyNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQorICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0YXRlRGlkQ2hh
bmdlKCp0aGlzLCBtZWRpYVN0YXRlKCkpOworI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0UGF1c2VkSW50ZXJuYWwoYm9vbCBiKQpAQCAtNDY4OSw2ICs0Njk5LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpjbGVhck1lZGlhUGxheWVyKAogCiAjaWYgRU5BQkxFKFdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1l
cygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSkgeworICAg
ICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gZmFsc2U7CiAg
ICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxp
c3RlbmVycygqdGhpcywgZmFsc2UpOwogCiAgICAgICAgIC8vIFNlbmQgYW4gYXZhaWxhYmlsaXR5
IGV2ZW50IGluIGNhc2Ugc2NyaXB0cyB3YW50IHRvIGhpZGUgdGhlIHBpY2tlciB3aGVuIHRoZSBl
bGVtZW50CkBAIC00ODYzLDYgKzQ4NzQsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRp
YVBsYXllckN1cnJlbgogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyQ3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoJXApIC0gd2Via2l0
Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyA9ICVzIiwgdGhpcywgYm9vbFN0cmluZyh3
ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCkpKTsKICAgICBzY2hlZHVsZUV2
ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hh
bmdlZEV2ZW50KTsKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAg
bV9tZWRpYVNlc3Npb24tPm1lZGlhU3RhdGVEaWRDaGFuZ2UoKnRoaXMsIG1lZGlhU3RhdGUoKSk7
CisjZW5kaWYKIH0KIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjphZGRFdmVudExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCkBAIC00ODc0LDggKzQ4ODksMTAgQEAgYm9vbCBIVE1M
TWVkaWFFbGVtZW50OjphZGRFdmVudExpc3RlbmVyKAogICAgIGlmICghTm9kZTo6YWRkRXZlbnRM
aXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKGlzRmlyc3RBdmFpbGFiaWxpdHlDaGFuZ2VkTGlzdGVuZXIpCisg
ICAgaWYgKGlzRmlyc3RBdmFpbGFiaWxpdHlDaGFuZ2VkTGlzdGVuZXIpIHsKKyAgICAgICAgbV9o
YXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IHRydWU7CiAgICAgICAgIG1f
bWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycygq
dGhpcywgdHJ1ZSk7CisgICAgfQogCiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6
YWRkRXZlbnRMaXN0ZW5lciglcCkgLSAnd2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHlj
aGFuZ2VkJyIsIHRoaXMpOwogICAgIApAQCAtNDg5Myw4ICs0OTEwLDEwIEBAIGJvb2wgSFRNTE1l
ZGlhRWxlbWVudDo6cmVtb3ZlRXZlbnRMaXN0ZW4KIAogICAgIGJvb2wgZGlkUmVtb3ZlTGFzdEF2
YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lciA9ICFoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVz
KCkud2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQpOwogICAgIExP
RyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoJXApIC0gcmVt
b3ZlZCBsYXN0IGxpc3RlbmVyID0gJXMiLCB0aGlzLCBib29sU3RyaW5nKGRpZFJlbW92ZUxhc3RB
dmFpbGFiaWxpdHlDaGFuZ2VkTGlzdGVuZXIpKTsKLSAgICBpZiAoZGlkUmVtb3ZlTGFzdEF2YWls
YWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikKKyAgICBpZiAoZGlkUmVtb3ZlTGFzdEF2YWlsYWJpbGl0
eUNoYW5nZWRMaXN0ZW5lcikgeworICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmls
aXR5TGlzdGVuZXJzID0gZmFsc2U7CiAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycygqdGhpcywgZmFsc2UpOworICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDkzMiwxNiArNDk1MSwxMCBAQCBib29sIEhUTUxNZWRp
YUVsZW1lbnQ6OmlzUGxheWluZ1RvV2lyZWxlCiAgICAgcmV0dXJuIGlzUGxheWluZzsKIH0KIAot
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3Zv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCBz
aG91bGRQbGF5KQogewogICAgIGlmIChtX3BsYXllcikKLSAgICAgICAgbV9wbGF5ZXItPnN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKLX0KLQotdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
dG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQotewotICAgIGlmIChtX3BsYXllcikKLSAgICAg
ICAgbV9wbGF5ZXItPnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAgICAgICBtX3Bs
YXllci0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoc2hvdWxkUGxheSk7CiB9CiAjZW5k
aWYKIApAQCAtNTQ3Myw2ICs1NDg2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVN
ZWRpYVBsYXllcgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBp
ZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZh
aWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSkgeworICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5TGlzdGVuZXJzID0gdHJ1ZTsKICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhh
c1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKCp0aGlzLCB0cnVlKTsKICAgICAg
ICAgZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCk7IC8vIEVu
c3VyZSB0aGUgZXZlbnQgbGlzdGVuZXIgZ2V0cyBhdCBsZWFzdCBvbmUgZXZlbnQuCiAgICAgfQpA
QCAtNjE3MSw5ICs2MTg1LDI5IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6b3ZlcnJpZGVCYWNr
Z3JvdW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSFRNTE1lZGlhRWxlbWVudDo6aXNQ
bGF5aW5nQXVkaW8oKQorTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIEhUTUxNZWRpYUVs
ZW1lbnQ6Om1lZGlhU3RhdGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1BsYXlpbmcoKSAmJiBo
YXNBdWRpbygpICYmICFtdXRlZCgpOworCisgICAgTWVkaWFTdGF0ZUZsYWdzIHN0YXRlID0gSXNO
b3RQbGF5aW5nOworCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICBp
ZiAoaXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkpCisgICAgICAgIHN0YXRlIHw9
IElzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2U7CisKKyAgICBpZiAobV9oYXNQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUxpc3RlbmVycykKKyAgICAgICAgc3RhdGUgfD0gUmVxdWlyZXNQbGF5YmFj
a1RhcmdldE1vbml0b3Jpbmc7CisjZW5kaWYKKworICAgIGlmICghaXNQbGF5aW5nKCkpCisgICAg
ICAgIHJldHVybiBzdGF0ZTsKKworICAgIGlmIChoYXNBdWRpbygpICYmICFtdXRlZCgpKQorICAg
ICAgICBzdGF0ZSB8PSBJc1BsYXlpbmdBdWRpbzsKKworICAgIGlmIChoYXNWaWRlbygpKQorICAg
ICAgICBzdGF0ZSB8PSBJc1BsYXlpbmdWaWRlbzsKKworICAgIHJldHVybiBzdGF0ZTsKIH0KIAog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDEyICsyOSwxMiBAQAogI2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkF1ZGlvUHJvZHVj
ZXIuaCIKICNpbmNsdWRlICJHZW5lcmljRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIkhUTUxNZWRp
YVNlc3Npb24uaCIKICNpbmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgor
I2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKICNpbmNsdWRlICJQYWdlVGhyb3R0bGVyLmgiCiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNzIE1lZGlhU3Ry
ZWFtOwogCiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50CiAgICAgOiBwdWJsaWMgSFRNTEVsZW1lbnQK
LSAgICAsIHByaXZhdGUgTWVkaWFQbGF5ZXJDbGllbnQsIHB1YmxpYyBNZWRpYVBsYXllclN1cHBv
cnRzVHlwZUNsaWVudCwgcHJpdmF0ZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QsIHB1YmxpYyBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UgLCBwdWJsaWMgTWVk
aWFTZXNzaW9uQ2xpZW50LCBwcml2YXRlIEF1ZGlvUHJvZHVjZXIKKyAgICAsIHByaXZhdGUgTWVk
aWFQbGF5ZXJDbGllbnQsIHB1YmxpYyBNZWRpYVBsYXllclN1cHBvcnRzVHlwZUNsaWVudCwgcHJp
dmF0ZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1Ymxp
YyBNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2UgLCBwdWJsaWMgTWVkaWFTZXNzaW9uQ2xpZW50LCBw
cml2YXRlIE1lZGlhUHJvZHVjZXIKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLCBwcml2
YXRlIEF1ZGlvVHJhY2tDbGllbnQKICAgICAsIHByaXZhdGUgVGV4dFRyYWNrQ2xpZW50CkBAIC0z
NjUsOCArMzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5VG9XaXJlbGVz
c1BsYXliYWNrVGFyZ2V0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGlzUGxh
eWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0
PiYmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rh
cmdldCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tU
YXJnZXQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUGxheVRvUGxheWJh
Y2tUYXJnZXQoYm9vbCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGZ1
bmN0aW9uLgpAQCAtNDU3LDYgKzQ1Niw4IEBAIHB1YmxpYzoKIAogICAgIGRvdWJsZSBtYXhCdWZm
ZXJlZFRpbWUoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0
ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKwogcHJvdGVjdGVkOgogICAgIEhU
TUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50JiwgYm9vbCk7CiAg
ICAgdmlydHVhbCB+SFRNTE1lZGlhRWxlbWVudCgpOwpAQCAtNzIzLDggKzcyNCw2IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFuZChNZWRp
YVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5kVHlwZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIG92ZXJyaWRlQmFja2dyb3VuZFBsYXliYWNrUmVzdHJpY3Rpb24oKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIC8vIEF1ZGlvUHJvZHVjZXIgb3ZlcnJpZGVzCi0gICAgdmlydHVhbCBib29s
IGlzUGxheWluZ0F1ZGlvKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VNdXRlZFN0
YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGVmZmVjdGl2ZU11dGVkKCkgY29u
c3Q7CkBAIC05MTksNiArOTE4LDEwIEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IG1fbWVkaWFTdHJlYW1TcmNPYmplY3Q7CiAjZW5k
aWYKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgYm9vbCBtX2hh
c1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzIHsgZmFsc2UgfTsKKyNlbmRpZgog
fTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFTZXNzaW9uLmNwcAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBA
QAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKICNp
bmNsdWRlICJQYWdlLmgiCkBAIC04MCwyMSArODEsMjEgQEAgSFRNTE1lZGlhU2Vzc2lvbjo6SFRN
TE1lZGlhU2Vzc2lvbihNZWRpYQogewogfQogCi12b2lkIEhUTUxNZWRpYVNlc3Npb246OnJlZ2lz
dGVyV2l0aERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKK3ZvaWQgSFRNTE1lZGlhU2Vzc2lv
bjo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkK
IHsKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIGRvY3VtZW50LmFk
ZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KCp0aGlzKTsKKyAgICBlbGVtZW50LmRvY3VtZW50
KCkuYWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoKnRoaXMpOwogI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKICNlbmRpZgog
fQogCi12b2lkIEhUTUxNZWRpYVNlc3Npb246OnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1l
bnQmIGRvY3VtZW50KQordm9pZCBIVE1MTWVkaWFTZXNzaW9uOjp1bnJlZ2lzdGVyV2l0aERvY3Vt
ZW50KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCiB7CiAjaWYgRU5BQkxFKFdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBkb2N1bWVudC5yZW1vdmVQbGF5YmFja1RhcmdldFBp
Y2tlckNsaWVudCgqdGhpcyk7CisgICAgZWxlbWVudC5kb2N1bWVudCgpLnJlbW92ZVBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50KCp0aGlzKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRvY3Vt
ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CiAjZW5kaWYKIH0KIApAQCAtMjA1LDgg
KzIwNiw3IEBAIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6c2hvd1BsYXliYWNrVGFyZ2UKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKS5zZXRDdXJyZW50U2Vzc2lvbigqdGhpcyk7Ci0gICAgZWxlbWVudC5kb2N1bWVudCgpLnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcihlbGVtZW50KTsKKyAgICBlbGVtZW50LmRvY3VtZW50KCku
c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCp0aGlzLCBpczxIVE1MVmlkZW9FbGVtZW50PihlbGVt
ZW50KSk7CiB9CiAKIGJvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6aGFzV2lyZWxlc3NQbGF5YmFja1Rh
cmdldHMoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0CkBAIC0yNzQsMjUgKzI3NCwyMCBA
QCB2b2lkIEhUTUxNZWRpYVNlc3Npb246OnNldFdpcmVsZXNzVmlkZW9QCiB2b2lkIEhUTUxNZWRp
YVNlc3Npb246OnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGNvbnN0
IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgaGFzTGlzdGVuZXJzKQogewogICAgIExP
RyhNZWRpYSwgIkhUTUxNZWRpYVNlc3Npb246OnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmls
aXR5TGlzdGVuZXJzIC0gaGFzTGlzdGVuZXJzICVzIiwgaGFzTGlzdGVuZXJzID8gIlRSVUUiIDog
IkZBTFNFIik7Ci0gICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOwotCi0gICAgbV9oYXNQbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IGhhc0xpc3RlbmVyczsKIAogI2lmIFBMQVRG
T1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisgICAgbV9oYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IGhhc0xpc3RlbmVyczsKICAgICBNZWRpYVNlc3Np
b25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuY29uZmlndXJlV2lyZUxlc3NUYXJnZXRNb25pdG9y
aW5nKCk7CiAjZWxzZQotICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5jb25maWd1cmVQbGF5YmFja1Rh
cmdldE1vbml0b3JpbmcoKTsKKyAgICBlbGVtZW50LmRvY3VtZW50KCkucGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSgqdGhpcywgZWxlbWVudC5tZWRpYVN0YXRlKCkpOwog
I2VuZGlmCiB9CiAKLXZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJn
ZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgZGV2aWNlKQordm9pZCBIVE1MTWVkaWFTZXNz
aW9uOjpzZXRQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJiBkZXZpY2Up
CiB7CiAgICAgbV9wbGF5YmFja1RhcmdldCA9IFdURjo6bW92ZShkZXZpY2UpOwogICAgIGNsaWVu
dCgpLnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoKm1fcGxheWJhY2tUYXJnZXQuY29weVJlZigp
KTsKLSAgICBpZiAobV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKSAmJiBNZWRpYVNl
c3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuY3VycmVudFNlc3Npb24oKSA9PSB0aGlzKQot
ICAgICAgICBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Ci0gICAgZWxzZQotICAgICAg
ICBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFTZXNz
aW9uOjp0YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGltZXJGaXJlZCgpCkBAIC0zMDAsNyArMjk1
LDcgQEAgdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjp0YXJnZXRBdmFpbGFiaWxpdAogICAgIGNsaWVu
dCgpLndpcmVsZXNzUm91dGVzQXZhaWxhYmxlRGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQgSFRNTE1l
ZGlhU2Vzc2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCBo
YXNUYXJnZXRzKSBjb25zdAordm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpleHRlcm5hbE91dHB1dERl
dmljZUF2YWlsYWJsZURpZENoYW5nZShib29sIGhhc1RhcmdldHMpCiB7CiAgICAgaWYgKG1faGFz
UGxheWJhY2tUYXJnZXRzID09IGhhc1RhcmdldHMpCiAgICAgICAgIHJldHVybjsKQEAgLTMxMiwx
MSArMzA3LDYgQEAgdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpleHRlcm5hbE91dHB1dERldgogICAg
ICAgICBtX3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9
CiAKLWJvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6cmVxdWlyZXNQbGF5YmFja1RhcmdldFJvdXRlTW9u
aXRvcmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFi
aWxpdHlMaXN0ZW5lcnM7Ci19Ci0KIGJvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6Y2FuUGxheVRvV2ly
ZWxlc3NQbGF5YmFja1RhcmdldCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0
IHx8ICFtX3BsYXliYWNrVGFyZ2V0LT5oYXNBY3RpdmVSb3V0ZSgpKQpAQCAtMzMzLDIxICszMjMs
MTYgQEAgYm9vbCBIVE1MTWVkaWFTZXNzaW9uOjppc1BsYXlpbmdUb1dpcmVsZQogICAgIHJldHVy
biBjbGllbnQoKS5pc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKTsKIH0KIAotdm9p
ZCBIVE1MTWVkaWFTZXNzaW9uOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3ZvaWQg
SFRNTE1lZGlhU2Vzc2lvbjo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCBzaG91
bGRQbGF5KQogewotICAgIGlmICghbV9wbGF5YmFja1RhcmdldCB8fCAhbV9wbGF5YmFja1Rhcmdl
dC0+aGFzQWN0aXZlUm91dGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xpZW50KCkuc3Rh
cnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAgIG1fc2hvdWxkUGxheVRvUGxheWJhY2tU
YXJnZXQgPSBzaG91bGRQbGF5OworICAgIGNsaWVudCgpLnNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KHNob3VsZFBsYXkpOwogfQogCi12b2lkIEhUTUxNZWRpYVNlc3Npb246OnN0b3BQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCgpCit2b2lkIEhUTUxNZWRpYVNlc3Npb246Om1lZGlhU3RhdGVE
aWRDaGFuZ2UoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCwgTWVkaWFQcm9kdWNlcjo6
TWVkaWFTdGF0ZUZsYWdzIHN0YXRlKQogewotICAgIGlmICghbV9wbGF5YmFja1RhcmdldCB8fCAh
bV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY2xpZW50KCkuc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Ci19ICAgIAorICAgIGVs
ZW1lbnQuZG9jdW1lbnQoKS5wbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdl
KCp0aGlzLCBzdGF0ZSk7Cit9CiAjZW5kaWYKIAogTWVkaWFQbGF5ZXI6OlByZWxvYWQgSFRNTE1l
ZGlhU2Vzc2lvbjo6ZWZmZWN0aXZlUHJlbG9hZEZvckVsZW1lbnQoY29uc3QgSFRNTE1lZGlhRWxl
bWVudCYgZWxlbWVudCkgY29uc3QKQEAgLTM4NiwxMiArMzcxLDE2IEBAIGJvb2wgSFRNTE1lZGlh
U2Vzc2lvbjo6cmVxdWlyZXNGdWxsc2NyZWUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBI
VE1MTWVkaWFTZXNzaW9uOjphcHBseU1lZGlhUGxheWVyUmVzdHJpY3Rpb25zKGNvbnN0IEhUTUxN
ZWRpYUVsZW1lbnQmIGVsZW1lbnQpCit2b2lkIEhUTUxNZWRpYVNlc3Npb246Om1lZGlhRW5naW5l
VXBkYXRlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQogewotICAgIExPRyhNZWRp
YSwgIkhUTUxNZWRpYVNlc3Npb246OmFwcGx5TWVkaWFQbGF5ZXJSZXN0cmljdGlvbnMiKTsKKyAg
ICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjptZWRpYUVuZ2luZVVwZGF0ZWQiKTsKIAog
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgc2V0V2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQoZWxlbWVudCwgbV9yZXN0cmljdGlvbnMgJiBXaXJlbGVzc1ZpZGVv
UGxheWJhY2tEaXNhYmxlZCk7CisgICAgaWYgKG1fcGxheWJhY2tUYXJnZXQpCisgICAgICAgIGNs
aWVudCgpLnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoKm1fcGxheWJhY2tUYXJnZXQuY29weVJl
ZigpKTsKKyAgICBpZiAobV9zaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCkKKyAgICAgICAgY2xp
ZW50KCkuc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQobV9zaG91bGRQbGF5VG9QbGF5YmFj
a1RhcmdldCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmgJKHJldmlzaW9uIDE4MzA2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw4ICs0NCw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBIVE1MTWVkaWFTZXNzaW9u
KE1lZGlhU2Vzc2lvbkNsaWVudCYpOwogICAgIHZpcnR1YWwgfkhUTUxNZWRpYVNlc3Npb24oKSB7
IH0KIAotICAgIHZvaWQgcmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0
aERvY3VtZW50KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJX
aXRoRG9jdW1lbnQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpOwogCiAgICAgYm9vbCBwbGF5YmFj
a1Blcm1pdHRlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CiAgICAgYm9vbCBkYXRh
TG9hZGluZ1Blcm1pdHRlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CkBAIC01NCw5
ICs1NCw5IEBAIHB1YmxpYzoKICAgICBib29sIHBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1p
bmcoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb25z
dCBIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAgYm9vbCBjdXJyZW50UGxheWJhY2tUYXJnZXRJc1dp
cmVsZXNzKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKICAgICBib29sIGN1cnJlbnRQ
bGF5YmFja1RhcmdldElzU3VwcG9ydGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsK
LSAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb25zdCBIVE1MTWVkaWFFbGVtZW50
Jik7CiAgICAgYm9vbCBoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cyhjb25zdCBIVE1MTWVkaWFF
bGVtZW50JikgY29uc3Q7CiAKICAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKQEAgLTY2LDE1ICs2NiwxNSBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdUb1dpcmVsZXNzUGxh
eWJhY2tUYXJnZXQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxh
eWluZ1RvUGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgbWVkaWFTdGF0ZURp
ZENoYW5nZShjb25zdCBIVE1MTWVkaWFFbGVtZW50JiwgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0
ZUZsYWdzKTsKICNlbmRpZgogCiAgICAgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1Bs
YXliYWNrKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4oY29uc3QgSFRNTE1lZGlhRWxlbWVudCYp
IGNvbnN0OwogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIGVmZmVjdGl2ZVByZWxvYWRGb3JFbGVt
ZW50KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHlNZWRp
YVBsYXllclJlc3RyaWN0aW9ucyhjb25zdCBIVE1MTWVkaWFFbGVtZW50Jik7CisgICAgdm9pZCBt
ZWRpYUVuZ2luZVVwZGF0ZWQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpOwogCiAgICAgLy8gUmVz
dHJpY3Rpb25zIHRvIG1vZGlmeSBkZWZhdWx0IGJlaGF2aW9ycy4KICAgICBlbnVtIEJlaGF2aW9y
UmVzdHJpY3Rpb25GbGFncyB7CkBAIC0xMDMsMTAgKzEwMywxMyBAQCBwcml2YXRlOgogI2lmIEVO
QUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgdm9pZCB0YXJnZXRBdmFpbGFiaWxp
dHlDaGFuZ2VkVGltZXJGaXJlZCgpOwogCi0gICAgLy8gTWVkaWFQbGF5YmFja1RhcmdldFBpY2tl
ckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBkaWRDaG9vc2VQbGF5YmFja1RhcmdldChSZWY8TWVk
aWFQbGF5YmFja1RhcmdldD4mJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4dGVybmFs
T3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgLy8gTWVkaWFQbGF5YmFja1RhcmdldENsaWVudAorICAgIHZpcnR1
YWwgdm9pZCBzZXRQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlk
Q2hhbmdlKGJvb2wpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQbGF5VG9Q
bGF5YmFja1RhcmdldChib29sKSBvdmVycmlkZTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykK
KyAgICBib29sIHJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJz
OyB9CiAjZW5kaWYKIAogICAgIEJlaGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zOwpA
QCAtMTE0LDkgKzExNywxMiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpCiAgICAgbXV0YWJsZSBUaW1lciBtX3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRU
aW1lcjsKICAgICBSZWZQdHI8TWVkaWFQbGF5YmFja1RhcmdldD4gbV9wbGF5YmFja1RhcmdldDsK
LSAgICBib29sIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9zaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCB7IGZhbHNlIH07CiAg
ICAgbXV0YWJsZSBib29sIG1faGFzUGxheWJhY2tUYXJnZXRzIHsgZmFsc2UgfTsKICNlbmRpZgor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlMaXN0ZW5lcnMgeyBmYWxzZSB9OworI2VuZGlmCiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0F1ZGlvUHJvZHVjZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0F1ZGlvUHJvZHVjZXIuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9BdWRpb1Byb2R1Y2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9Q
cm9kdWNlcl9oCi0jZGVmaW5lIEF1ZGlvUHJvZHVjZXJfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEF1ZGlvUHJvZHVjZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpc1Bs
YXlpbmdBdWRpbygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU11dGVkU3RhdGVEaWRDaGFu
Z2UoKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5BdWRpb1Byb2R1Y2VyKCkgeyB9
Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShy
ZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJMYXllckZsdXNoVGhyb3R0
bGVTdGF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKICNpbmNsdWRlICJQYWdlVGhy
b3R0bGVyLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xp
ZW50LmgiCkBAIC00MjMsMTQgKzQyNCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoY29uc3QgRnJhbWVWaWV3KikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGVudW0gTWVkaWFTdGF0ZSB7Ci0gICAgICAgIElzTm90
UGxheWluZyA9IDAsCi0gICAgICAgIElzUGxheWluZ0F1ZGlvID0gMSA8PCAwLAotICAgICAgICBJ
c1BsYXlpbmdWaWRlbyA9IDEgPDwgMSwKLSAgICAgICAgSXNQbGF5aW5nVG9FeHRlcm5hbERldmlj
ZSA9IDEgPDwgMiwKLSAgICB9OwotICAgIHR5cGVkZWYgdW5zaWduZWQgTWVkaWFTdGF0ZUZsYWdz
OwotICAgIHZpcnR1YWwgdm9pZCBpc1BsYXlpbmdNZWRpYURpZENoYW5nZShNZWRpYVN0YXRlRmxh
Z3MpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpc1BsYXlpbmdNZWRpYURpZENoYW5nZShNZWRpYVBy
b2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VB
Y3Rpdml0eVN0YXRlKFBhZ2VBY3Rpdml0eVN0YXRlOjpGbGFncykgeyB9CiAKQEAgLTQ1Miw5ICs0
NDYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBdXRvRmlsbEJ1dHRvbkNs
aWNrKEhUTUxJbnB1dEVsZW1lbnQmKSB7IH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpCi0gICAgdmlydHVhbCB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wgLyogaXNWaWRlbyAqLykgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBhZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCAvKmNvbnRleHRJZCov
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQo
dWludDY0X3QgLypjb250ZXh0SWQqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHNob3dQbGF5YmFj
a1RhcmdldFBpY2tlcih1aW50NjRfdCAvKmNvbnRleHRJZCovLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIGJvb2wgLyogaXNWaWRlbyAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QgLypjb250ZXh0SWQqLywg
TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKSB7IH0KICNlbmRpZgogCiBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhUHJvZHVjZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhUHJvZHVjZXIuaAkocmV2aXNpb24gMTgzMDY4KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1ZGlvUHJvZHVjZXIuaDoxODMwNjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL01lZGlhUHJvZHVjZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBBdWRpb1Byb2R1Y2VyX2gKKyNkZWZpbmUgQXVkaW9Qcm9kdWNlcl9oCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9Qcm9kdWNlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBib29sIGlzUGxheWluZ0F1ZGlvKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWdlTXV0ZWRT
dGF0ZURpZENoYW5nZSgpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkF1ZGlvUHJv
ZHVjZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L01lZGlhUHJvZHVjZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlh
UHJvZHVjZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVBy
b2R1Y2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE4ICsyMywyNyBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIEF1ZGlvUHJvZHVjZXJfaAotI2RlZmluZSBBdWRpb1Byb2R1Y2Vy
X2gKKyNpZm5kZWYgTWVkaWFQcm9kdWNlcl9oCisjZGVmaW5lIE1lZGlhUHJvZHVjZXJfaAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1ZGlvUHJvZHVjZXIgeworY2xhc3MgTWVkaWFQ
cm9kdWNlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGlzUGxheWluZ0F1ZGlvKCkgPSAw
OworICAgIGVudW0gTWVkaWFTdGF0ZSB7CisgICAgICAgIElzTm90UGxheWluZyA9IDAsCisgICAg
ICAgIElzUGxheWluZ0F1ZGlvID0gMSA8PCAwLAorICAgICAgICBJc1BsYXlpbmdWaWRlbyA9IDEg
PDwgMSwKKyAgICAgICAgSXNQbGF5aW5nVG9FeHRlcm5hbERldmljZSA9IDEgPDwgMiwKKyAgICAg
ICAgUmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3JpbmcgPSAxIDw8IDMsCisgICAgfTsKKyAg
ICB0eXBlZGVmIHVuc2lnbmVkIE1lZGlhU3RhdGVGbGFnczsKKworICAgIHZpcnR1YWwgTWVkaWFT
dGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VN
dXRlZFN0YXRlRGlkQ2hhbmdlKCkgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+QXVk
aW9Qcm9kdWNlcigpIHsgfQorICAgIHZpcnR1YWwgfk1lZGlhUHJvZHVjZXIoKSB7IH0KIH07CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw2IEBAIFBh
Z2U6OlBhZ2UoUGFnZUNvbmZpZ3VyYXRpb24mIHBhZ2VDb25maWcKICAgICAsIG1fdmlzaXRlZExp
bmtTdG9yZSgqV1RGOjptb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUpKQog
ICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgLCBt
X2lzQ2xvc2luZyhmYWxzZSkKLSAgICAsIG1faXNQbGF5aW5nQXVkaW8oZmFsc2UpCiB7CiAgICAg
c2V0VGltZXJUaHJvdHRsaW5nRW5hYmxlZChtX3ZpZXdTdGF0ZSAmIFZpZXdTdGF0ZTo6SXNWaXN1
YWxseUlkbGUpOwogCkBAIC0xMTk5LDIwICsxMTk4LDE3IEBAIHZvaWQgUGFnZTo6ZW5hYmxlTGVn
YWN5UHJpdmF0ZUJyb3dzaW5nKGIKIAogdm9pZCBQYWdlOjp1cGRhdGVJc1BsYXlpbmdNZWRpYSgp
CiB7Ci0gICAgYm9vbCBpc1BsYXlpbmdBdWRpbyA9IGZhbHNlOworICAgIE1lZGlhUHJvZHVjZXI6
Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSA9IE1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZzsKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkt
PmlzUGxheWluZ0F1ZGlvKCkpIHsKLSAgICAgICAgICAgIGlzUGxheWluZ0F1ZGlvID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIHN0YXRlIHw9IGZyYW1lLT5k
b2N1bWVudCgpLT5tZWRpYVN0YXRlKCk7CiAgICAgfQogCi0gICAgaWYgKGlzUGxheWluZ0F1ZGlv
ID09IG1faXNQbGF5aW5nQXVkaW8pCisgICAgaWYgKHN0YXRlID09IG1fbWVkaWFTdGF0ZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9pc1BsYXlpbmdBdWRpbyA9IGlzUGxheWluZ0F1ZGlvOwor
ICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRlOwogCi0gICAgY2hyb21lKCkuY2xpZW50KCkuaXNQbGF5
aW5nTWVkaWFEaWRDaGFuZ2UobV9pc1BsYXlpbmdBdWRpbyA/IENocm9tZUNsaWVudDo6SXNQbGF5
aW5nQXVkaW8gOiBDaHJvbWVDbGllbnQ6OklzTm90UGxheWluZyk7CisgICAgY2hyb21lKCkuY2xp
ZW50KCkuaXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2Uoc3RhdGUpOwogfQogCiB2b2lkIFBhZ2U6OnNl
dE11dGVkKGJvb2wgbXV0ZWQpCkBAIC0xNjgyLDUzICsxNjc4LDQ5IEBAIHZvaWQgUGFnZTo6c2V0
U2Vzc2lvbklEKFNlc3Npb25JRCBzZXNzaW8KIH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCi1SZWZQdHI8TWVkaWFQbGF5YmFja1RhcmdldD4gUGFnZTo6cGxheWJhY2tU
YXJnZXQoKSBjb25zdAordm9pZCBQYWdlOjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1
aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0KQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBjaHJvbWUoKS5jbGllbnQoKS5hZGRQbGF5YmFja1Rhcmdl
dFBpY2tlckNsaWVudChjb250ZXh0SWQpOworfQogCi0gICAgcmV0dXJuIG1fcGxheWJhY2tUYXJn
ZXQuY29weVJlZigpOwordm9pZCBQYWdlOjpyZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVu
dCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgY2hyb21lKCkuY2xpZW50KCkucmVtb3ZlUGxh
eWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoY29udGV4dElkKTsKIH0KIAotdm9pZCBQYWdlOjpzaG93
UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uLCBi
b29sIGlzVmlkZW8pCit2b2lkIFBhZ2U6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcih1aW50NjRf
dCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbiwgYm9vbCBpc1Zp
ZGVvKQogewogI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBGSVhNRTogcmVmYWN0b3IgaU9TIGlt
cGxlbWVudGF0aW9uLgorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0SWQpOwogICAgIFVOVVNFRF9Q
QVJBTShsb2NhdGlvbik7CiAgICAgY2hyb21lKCkuY2xpZW50KCkuc2hvd1BsYXliYWNrVGFyZ2V0
UGlja2VyKGlzVmlkZW8pOwogI2Vsc2UKLSAgICBjaHJvbWUoKS5jbGllbnQoKS5zaG93UGxheWJh
Y2tUYXJnZXRQaWNrZXIobG9jYXRpb24sIGlzVmlkZW8pOworICAgIGNocm9tZSgpLmNsaWVudCgp
LnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb250ZXh0SWQsIGxvY2F0aW9uLCBpc1ZpZGVvKTsK
ICNlbmRpZgogfQogCi12b2lkIFBhZ2U6OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRp
YVBsYXliYWNrVGFyZ2V0PiYmIHRhcmdldCkKK3ZvaWQgUGFnZTo6cGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIE1lZGlhUHJvZHVjZXI6
Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKIHsKLSAgICBtX3BsYXliYWNrVGFyZ2V0ID0gV1RGOjpt
b3ZlKHRhcmdldCk7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5kaWRDaG9vc2VQbGF5YmFja1RhcmdldCgqbV9wbGF5YmFja1RhcmdldC5jb3B5
UmVmKCkpOworICAgIGNocm9tZSgpLmNsaWVudCgpLnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
U3RhdGVEaWRDaGFuZ2UoY29udGV4dElkLCBzdGF0ZSk7CiB9CiAKLXZvaWQgUGFnZTo6cGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoYm9vbCBhdmFpbGFibGUpCit2b2lkIFBhZ2U6
OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgUmVmPE1lZGlhUGxheWJhY2tU
YXJnZXQ+JiYgdGFyZ2V0KQogewotICAgIG1faGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldCA9IGF2
YWlsYWJsZTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPmRvY3Vt
ZW50KCktPnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGF2YWlsYWJsZSk7Cisg
ICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zZXRQbGF5YmFja1RhcmdldChjb250ZXh0SWQsIHRh
cmdldC5jb3B5UmVmKCkpOwogfQogCi12b2lkIFBhZ2U6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0
TW9uaXRvcmluZygpCit2b2lkIFBhZ2U6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hh
bmdlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBhdmFpbGFibGUpCiB7Ci0gICAgYm9vbCBtb25p
dG9yaW5nUmVxdWlyZWQgPSBmYWxzZTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAg
ICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1v
bml0b3JpbmcoKSkgewotICAgICAgICAgICAgbW9uaXRvcmluZ1JlcXVpcmVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKQorICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlEaWRDaGFuZ2UoY29udGV4dElkLCBhdmFpbGFibGUpOworfQogCi0gICAgaWYgKG1vbml0b3Jp
bmdSZXF1aXJlZCkKLSAgICAgICAgY2hyb21lKCkuY2xpZW50KCkuc3RhcnRpbmdNb25pdG9yaW5n
UGxheWJhY2tUYXJnZXRzKCk7Ci0gICAgZWxzZQotICAgICAgICBjaHJvbWUoKS5jbGllbnQoKS5z
dG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOwordm9pZCBQYWdlOjpzZXRTaG91bGRQbGF5
VG9QbGF5YmFja1RhcmdldCh1aW50NjRfdCBjbGllbnRJZCwgYm9vbCBzaG91bGRQbGF5KQorewor
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2V0
U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoY2xpZW50SWQsIHNob3VsZFBsYXkpOwogfQogI2Vu
ZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCiAj
aW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKICNpbmNs
dWRlICJQYWdlVGhyb3R0bGVyLmgiCiAjaW5jbHVkZSAiUGFnZVZpc2liaWxpdHlTdGF0ZS5oIgog
I2luY2x1ZGUgIlBhZ2luYXRpb24uaCIKQEAgLTQyMiwxOSArNDIzLDIwIEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuYWJsZUxlZ2FjeVByaXZhdGVCcm93c2luZyhib29sIHBy
aXZhdGVCcm93c2luZ0VuYWJsZWQpOwogICAgIGJvb2wgdXNlc0VwaGVtZXJhbFNlc3Npb24oKSBj
b25zdCB7IHJldHVybiBtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAKLSAgICBib29sIGlz
UGxheWluZ0F1ZGlvKCkgY29uc3QgeyByZXR1cm4gbV9pc1BsYXlpbmdBdWRpbzsgfQorICAgIE1l
ZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9tZWRpYVN0YXRlOyB9CiAgICAgdm9pZCB1cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogICAgIGJv
b2wgaXNNdXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0ZWQ7IH0KICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldE11dGVkKGJvb2wpOwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkKLSAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIGJvb2wpOwotICAgIGJvb2wgaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldDsgfQotICAgIFJlZlB0cjxN
ZWRpYVBsYXliYWNrVGFyZ2V0PiBwbGF5YmFja1RhcmdldCgpIGNvbnN0OwotICAgIHZvaWQgY29u
ZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRpZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hh
bmdlKGJvb2wpOworICAgIHZvaWQgYWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0
X3QpOworICAgIHZvaWQgcmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3Qp
OworICAgIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90LCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYsIGJvb2wpOworICAgIHZvaWQgcGxheWJhY2tUYXJnZXRQaWNrZXJDbGll
bnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCwgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdz
KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGxheWJhY2tUYXJnZXQodWludDY0X3Qs
IFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKHVpbnQ2NF90LCBib29sKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90
LCBib29sKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtNTg5LDE0ICs1OTEsOSBAQCBwcml2YXRl
OgogCiAgICAgU2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogCi0jaWYgRU5BQkxFKFdJUkVMRVNTX1BM
QVlCQUNLX1RBUkdFVCkKLSAgICBSZWZQdHI8TWVkaWFQbGF5YmFja1RhcmdldD4gbV9wbGF5YmFj
a1RhcmdldDsKLSAgICBib29sIG1faGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldCB7IGZhbHNlIH07
Ci0jZW5kaWYKLQogICAgIGJvb2wgbV9pc0Nsb3Npbmc7CiAKLSAgICBib29sIG1faXNQbGF5aW5n
QXVkaW87CisgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1fbWVkaWFTdGF0ZSB7
IE1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZyB9OwogfTsKIAogaW5saW5lIFBhZ2VHcm91cCYg
UGFnZTo6Z3JvdXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFT
ZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVk
aWFTZXNzaW9uLmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL01lZGlhU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTMgQEAK
ICNpZm5kZWYgTWVkaWFTZXNzaW9uX2gKICNkZWZpbmUgTWVkaWFTZXNzaW9uX2gKIAorI2luY2x1
ZGUgIk1lZGlhUHJvZHVjZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5o
IgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQyLDcgQEAgY2xhc3Mg
TWVkaWFTZXNzaW9uQ2xpZW50OwogCiBjbGFzcyBNZWRpYVNlc3Npb24KICNpZiBFTkFCTEUoV0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIDogcHVibGljIE1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQKKyAgICA6IHB1YmxpYyBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50CiAjZW5k
aWYKIHsKIHB1YmxpYzoKQEAgLTExOSwxNCArMTIwLDE2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1Rv
UGxheWJhY2tUYXJnZXQoKSB7IH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCi0gICAgLy8gTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudAotICAgIHZpcnR1YWwg
dm9pZCBkaWRDaG9vc2VQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJikg
b3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxh
YmxlRGlkQ2hhbmdlKGJvb2wpIGNvbnN0IG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgYm9vbCBy
ZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICAvLyBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50CisgICAgdmly
dHVhbCB2b2lkIHNldFBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSBv
dmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFi
bGVEaWRDaGFuZ2UoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNob3Vs
ZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wpIG92ZXJyaWRlIHsgfQorI2VuZGlmCisKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0
ZU1vbml0b3JpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKIHByb3RlY3Rl
ZDoKQEAgLTE3Miw4ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFdpcmVs
ZXNzUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIHsgfQogICAgIHZp
cnR1YWwgYm9vbCBjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNr
VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQ
bGF5aW5nVG9QbGF5YmFja1RhcmdldCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUGxheVRv
UGxheWJhY2tUYXJnZXQoYm9vbCkgeyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5NZWRp
YVNlc3Npb25DbGllbnQoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCShyZXZpc2lvbiAxODMwNjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY2LDI1ICsxNjYsNiBAQCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpT
ZXNzaW9uUmVzdHJpY3Rpb25zCiAgICAgcmV0dXJuIG1fcmVzdHJpY3Rpb25zW3R5cGVdOwogfQog
Ci1ib29sIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Npb25TaG91bGRCZWdpblBsYXlpbmdUb1dp
cmVsZXNzUGxheWJhY2tUYXJnZXQoTWVkaWFTZXNzaW9uJiBzZXNzaW9uKSBjb25zdAotewotICAg
IGlmICghc2Vzc2lvbi5jYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzZXNzaW9uLmlzUGxheWluZ1RvV2lyZWxlc3NQbGF5
YmFja1RhcmdldCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8TWVkaWFT
ZXNzaW9uKj4gc2Vzc2lvbnMgPSBtX3Nlc3Npb25zOwotICAgIGZvciAoYXV0byogb25lU2Vzc2lv
biA6IHNlc3Npb25zKSB7Ci0gICAgICAgIGlmIChvbmVTZXNzaW9uID09ICZzZXNzaW9uKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChvbmVTZXNzaW9uLT5pc1BsYXlpbmdUb1dp
cmVsZXNzUGxheWJhY2tUYXJnZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzZXNz
aW9uV2lsbEJlZ2luUGxheWJhY2soTWVkaWFTZXNzaW9uJiBzZXNzaW9uKQogewogICAgIExPRyhN
ZWRpYSwgIk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Npb25XaWxsQmVnaW5QbGF5YmFjayAtICVw
IiwgJnNlc3Npb24pOwpAQCAtMjA0LDIwICsxODUsMTQgQEAgYm9vbCBNZWRpYVNlc3Npb25NYW5h
Z2VyOjpzZXNzaW9uV2lsbEJlZwogICAgIGlmIChtX2ludGVycnVwdGVkKQogICAgICAgICBlbmRJ
bnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpOb0ZsYWdzKTsKIAotICAgIGJvb2wgc2hvdWxkUGxh
eVRvUGxheWJhY2tUYXJnZXQgPSBzZXNzaW9uU2hvdWxkQmVnaW5QbGF5aW5nVG9XaXJlbGVzc1Bs
YXliYWNrVGFyZ2V0KHNlc3Npb24pOwogICAgIFZlY3RvcjxNZWRpYVNlc3Npb24qPiBzZXNzaW9u
cyA9IG1fc2Vzc2lvbnM7CiAgICAgZm9yIChhdXRvKiBvbmVTZXNzaW9uIDogc2Vzc2lvbnMpIHsK
ICAgICAgICAgaWYgKG9uZVNlc3Npb24gPT0gJnNlc3Npb24pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKHNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KQotICAgICAgICAgICAg
b25lU2Vzc2lvbi0+c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CiAgICAgICAgIGlmIChv
bmVTZXNzaW9uLT5tZWRpYVR5cGUoKSA9PSBzZXNzaW9uVHlwZSAmJiByZXN0cmljdGlvbnMgJiBD
b25jdXJyZW50UGxheWJhY2tOb3RQZXJtaXR0ZWQpCiAgICAgICAgICAgICBvbmVTZXNzaW9uLT5w
YXVzZVNlc3Npb24oKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkUGxheVRvUGxheWJhY2tUYXJn
ZXQpCi0gICAgICAgIHNlc3Npb24uc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOwotCiAg
ICAgdXBkYXRlU2Vzc2lvblN0YXRlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yOTQsNyAr
MjY5LDcgQEAgYm9vbCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzZXNzaW9uUmVzdHJpYwogCiBib29s
IE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Npb25DYW5Mb2FkTWVkaWEoY29uc3QgTWVkaWFTZXNz
aW9uJiBzZXNzaW9uKSBjb25zdAogewotICAgIHJldHVybiBzZXNzaW9uLnN0YXRlKCkgPT0gTWVk
aWFTZXNzaW9uOjpQbGF5aW5nIHx8ICFzZXNzaW9uLmlzSGlkZGVuKCk7CisgICAgcmV0dXJuIHNl
c3Npb24uc3RhdGUoKSA9PSBNZWRpYVNlc3Npb246OlBsYXlpbmcgfHwgIXNlc3Npb24uaXNIaWRk
ZW4oKSB8fCBzZXNzaW9uLmlzUGxheWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpOwogfQog
CiB2b2lkIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVudGVyQmFja2dyb3Vu
ZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Np
b25NYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
TWVkaWFTZXNzaW9uTWFuYWdlci5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSw3ICsxMDEsNiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnRlcm5hbHM7CiAK
ICAgICB2b2lkIHVwZGF0ZVNlc3Npb25TdGF0ZSgpOwotICAgIGJvb2wgc2Vzc2lvblNob3VsZEJl
Z2luUGxheWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldChNZWRpYVNlc3Npb24mKSBjb25zdDsK
IAogICAgIC8vIFJlbW90ZUNvbW1hbmRMaXN0ZW5lckNsaWVudAogICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVtb3RlQ29udHJvbENvbW1hbmQoTWVkaWFTZXNzaW9u
OjpSZW1vdGVDb250cm9sQ29tbWFuZFR5cGUpIG92ZXJyaWRlOwpAQCAtMTE2LDEyICsxMTUsMTYg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRGlkV2FrZSgpIG92ZXJyaWRlOwog
CiAgICAgU2Vzc2lvblJlc3RyaWN0aW9ucyBtX3Jlc3RyaWN0aW9uc1tNZWRpYVNlc3Npb246Oldl
YkF1ZGlvICsgMV07Ci0KICAgICBWZWN0b3I8TWVkaWFTZXNzaW9uKj4gbV9zZXNzaW9uczsKLQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVDb21tYW5kTGlzdGVuZXI+IG1fcmVtb3RlQ29tbWFu
ZExpc3RlbmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTeXN0ZW1TbGVlcExpc3RlbmVyPiBtX3N5
c3RlbVNsZWVwTGlzdGVuZXI7CiAgICAgUmVmUHRyPEF1ZGlvSGFyZHdhcmVMaXN0ZW5lcj4gbV9h
dWRpb0hhcmR3YXJlTGlzdGVuZXI7CisKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUKSAmJiAhUExBVEZPUk0oSU9TKQorICAgIFJlZlB0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBt
X3BsYXliYWNrVGFyZ2V0OworICAgIGJvb2wgbV9jYW5QbGF5VG9UYXJnZXQgeyBmYWxzZSB9Owor
I2VuZGlmCisKICAgICBib29sIG1faW50ZXJydXB0ZWQgeyBmYWxzZSB9OwogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldENsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWJhY2tUYXJnZXRDbGllbnQuaAkocmV2aXNpb24gMTgzMDY4KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50Lmg6
MTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFj
a1RhcmdldENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRfaAorI2RlZmluZSBN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50X2gKKworI2lmIEVOQUJMRShXSVJFTEVTU19Q
TEFZQkFDS19UQVJHRVQpCisKKyNpbmNsdWRlICJNZWRpYVBsYXliYWNrVGFyZ2V0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsKKworY2xhc3Mg
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lk
IGRpZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdl
KGJvb2wpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1BsYXliYWNrVGFy
Z2V0Um91dGVNb25pdG9yaW5nKCkgY29uc3QgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKworI2Vu
ZGlmIC8vIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tU
YXJnZXRDbGllbnQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywyOSArMjMsMjkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRfaAotI2RlZmluZSBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50X2gKKyNpZm5kZWYgTWVkaWFQbGF5YmFja1Rhcmdl
dENsaWVudF9oCisjZGVmaW5lIE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnRfaAogCiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKIAogI2luY2x1ZGUgIk1lZGlhUGxheWJhY2tU
YXJnZXQuaCIKKyNpbmNsdWRlICJNZWRpYVByb2R1Y2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsKIAotY2xhc3MgTWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlckNsaWVudCB7CitjbGFzcyBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50IHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KCkgeyB9
CisgICAgdmlydHVhbCB+TWVkaWFQbGF5YmFja1RhcmdldENsaWVudCgpIHsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGRpZENob29zZVBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0
PiYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxl
RGlkQ2hhbmdlKGJvb2wpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1Bs
YXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShib29s
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJv
b2wpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAKLSNlbmRpZiAvLyBNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyQ2xpZW50X2gKKyNlbmRpZiAvLyBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50X2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuY3BwCShyZXZpc2lvbiAxODMwNjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTkgKzQzLDE2IEBAIE1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXI6On5NZWRpYVBsYXliYWMKIHZvaWQgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6
c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuOwogfQogCiB2b2lkIE1lZGlhUGxheWJh
Y2tUYXJnZXRQaWNrZXI6OnN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpCiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuOwogfQogCiB2b2lkIE1lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXI6OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm47CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmgJKHJldmlzaW9uIDE4MzA2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgfkNsaWVudCgpIHsgfQogCiAgICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpID0g
MDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXli
YWNrVGFyZ2V0PiYmKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERl
dmljZUF2YWlsYWJsZURpZENoYW5nZShib29sKSA9IDA7CiAKICAgICAgICAgdm9pZCBpbnZhbGlk
YXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5oCShyZXZpc2lv
biAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudF9oCi0j
ZGVmaW5lIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRfaAotCi0jaWYgRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLQotI2luY2x1ZGUgIk1lZGlhUGxheWJhY2tUYXJnZXQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZWRpYVBsYXliYWNrVGFyZ2V0Owot
Ci1jbGFzcyBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+
JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVE
aWRDaGFuZ2UoYm9vbCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzUGxh
eWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSBjb25zdCA9IDA7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQotCi0jZW5kaWYgLy8gTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudF9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShy
ZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4OCwxNCArODg4LDkgQEAgdm9pZCBNZWRp
YVBsYXllcjo6c2V0V2lyZWxlc3NQbGF5YmFja1RhcgogICAgIG1fcHJpdmF0ZS0+c2V0V2lyZWxl
c3NQbGF5YmFja1RhcmdldChXVEY6Om1vdmUoZGV2aWNlKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXI6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQordm9pZCBNZWRpYVBsYXllcjo6c2V0
U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoYm9vbCBzaG91bGRQbGF5KQogewotICAgIG1fcHJp
dmF0ZS0+c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQotewotICAgIG1fcHJpdmF0ZS0+c3Rv
cFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CisgICAgbV9wcml2YXRlLT5zZXRTaG91bGRQbGF5
VG9QbGF5YmFja1RhcmdldChzaG91bGRQbGF5KTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDE4
MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4Myw4ICs0ODMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Bs
YXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKSBjb25zdDsKICAgICB2b2lkIHNldFdpcmVs
ZXNzUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpOwogCi0gICAgdm9p
ZCBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Ci0gICAgdm9pZCBzdG9wUGxheWluZ1Rv
UGxheWJhY2tUYXJnZXQoKTsKKyAgICB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0
KGJvb2wpOwogI2VuZGlmCiAKICAgICBkb3VibGUgbWluRmFzdFJldmVyc2VSYXRlKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllclByaXZhdGUuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
Myw4ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzUGxheWluZ1RvV2lyZWxl
c3NQbGF5YmFja1RhcmdldCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNl
dFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIHsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wpIHsgfQogI2VuZGlm
CiAKICNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1h
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL1dlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTWVkaWFTZXNzaW9uTWFu
YWdlck1hYy5oIgorCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCIK
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitXZWJNZWRpYVNlc3Npb25NYW5hZ2VyJiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjOjpzaW5n
bGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyTWFjPiBzaGFyZWRNYW5hZ2VyOworICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOworfQorCitX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjKCkKKyAg
ICA6IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIoKQoreworfQorCitXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyTWFjOjp+V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYygpCit7Cit9CisKK1dlYkNvcmU6Ok1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXImIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OnRhcmdl
dFBpY2tlcigpCit7CisgICAgaWYgKCFtX3RhcmdldFBpY2tlcikKKyAgICAgICAgbV90YXJnZXRQ
aWNrZXIgPSBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjOjpjcmVhdGUoKnRoaXMpOworCisg
ICAgcmV0dXJuICptX3RhcmdldFBpY2tlci5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBM
QVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL1dlYk1lZGlhU2Vzc2lvbk1h
bmFnZXJNYWMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTWVkaWFTZXNzaW9u
TWFuYWdlck1hY19oCisjZGVmaW5lIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWNfaAorCisjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKKworI2lu
Y2x1ZGUgIldlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjIDogcHVibGljIFdlYk1lZGlhU2Vzc2lv
bk1hbmFnZXIgeworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxXZWJNZWRpYVNlc3Np
b25NYW5hZ2VyTWFjPjsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgV2ViTWVk
aWFTZXNzaW9uTWFuYWdlciYgc2luZ2xldG9uKCk7CisKK3ByaXZhdGU6CisgICAgV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlck1hYygpOworICAgIHZpcnR1YWwgfldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJN
YWMoKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlciYg
dGFyZ2V0UGlja2VyKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TWVkaWFQbGF5
YmFja1RhcmdldFBpY2tlcj4gbV90YXJnZXRQaWNrZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorCisj
ZW5kaWYgLy8gV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hY19oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5oCShyZXZp
c2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBSdW5Mb29wOjpUaW1lcjxNZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyTWFjPiBtX2RldmljZUNoYW5nZVRpbWVyOwogfTsKIAotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW0JKHJldmlzaW9uIDE4
MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEz
Myw3ICsxMzMsNyBAQCB2b2lkIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWM6OmN1cnJlCiAg
ICAgaWYgKCFkZXZpY2VQaWNrZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY2xpZW50LT5k
aWRDaG9vc2VQbGF5YmFja1RhcmdldChXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0TWFjOjpj
cmVhdGUoW2RldmljZVBpY2tlciBvdXRwdXRDb250ZXh0XSkpOworICAgIG1fY2xpZW50LT5zZXRQ
bGF5YmFja1RhcmdldChXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0TWFjOjpjcmVhdGUoW2Rl
dmljZVBpY2tlciBvdXRwdXRDb250ZXh0XSkpOwogfQogCiB2b2lkIE1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJNYWM6OnN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw4ICsyODMsNyBAQCBwcml2YXRl
OgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElP
UykKICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQ
bGF5YmFja1RhcmdldD4mJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3Vs
ZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBp
c1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKTsKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMubW0JKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk0MiwxMSArOTQyLDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogI2lmIEVOQUJMRShXSVJFTEVTU19Q
TEFZQkFDS19UQVJHRVQpCiAgICAgdXBkYXRlRGlzYWJsZUV4dGVybmFsUGxheWJhY2soKTsKICAg
ICBbbV9hdlBsYXllci5nZXQoKSBzZXRBbGxvd3NFeHRlcm5hbFBsYXliYWNrOm1fYWxsb3dzV2ly
ZWxlc3NWaWRlb1BsYXliYWNrXTsKLQotI2lmICFQTEFURk9STShJT1MpCi0gICAgaWYgKG1fb3V0
cHV0Q29udGV4dCkKLSAgICAgICAgbV9hdlBsYXllci5nZXQoKS5vdXRwdXRDb250ZXh0ID0gbV9v
dXRwdXRDb250ZXh0LmdldCgpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIGlmIChwbGF5ZXIoKS0+
Y2xpZW50KCkubWVkaWFQbGF5ZXJJc1ZpZGVvKCkpCkBAIC0yNzg1LDM1ICsyNzgwLDI0IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRXaXJlbGVzc1BsYXliYWNrVGFy
Z2V0KCVwKSAtIHRhcmdldCA9ICVwIiwgdGhpcywgbV9vdXRwdXRDb250ZXh0LmdldCgpKTsKIAog
ICAgIGlmICghbV9vdXRwdXRDb250ZXh0IHx8ICFtX291dHB1dENvbnRleHQuZ2V0KCkuZGV2aWNl
TmFtZSkKLSAgICAgICAgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CisgICAgICAgIHNl
dFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGZhbHNlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0U2hvdWxkUGxheVRv
UGxheWJhY2tUYXJnZXQoYm9vbCBzaG91bGRQbGF5KQogewogICAgIGlmICghbV9hdlBsYXllcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFttX2F2UGxheWVyLmdldCgpLm91dHB1dENvbnRl
eHQgaXNFcXVhbDptX291dHB1dENvbnRleHQuZ2V0KCldKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKLSAgICBtX2F2UGxheWVyLmdldCgpLm91dHB1dENv
bnRleHQgPSBtX291dHB1dENvbnRleHQuZ2V0KCk7Ci0gICAgc2V0RGVsYXlDYWxsYmFja3MoZmFs
c2UpOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCglcCkgLSB0YXJnZXQgPSAlcCIsIHRoaXMs
IG1fYXZQbGF5ZXIuZ2V0KCkub3V0cHV0Q29udGV4dCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKLXsK
LSAgICBpZiAoIW1fYXZQbGF5ZXIpCisgICAgQVZPdXRwdXRDb250ZXh0ICpuZXdDb250ZXh0ID0g
c2hvdWxkUGxheSA/IG1fb3V0cHV0Q29udGV4dC5nZXQoKSA6IG5pbDsKKyAgICBBVk91dHB1dENv
bnRleHQgKmN1cnJlbnRDb250ZXh0ID0gbV9hdlBsYXllci5nZXQoKS5vdXRwdXRDb250ZXh0Owor
ICAgIGlmICgoIW5ld0NvbnRleHQgJiYgIWN1cnJlbnRDb250ZXh0KSB8fCBbY3VycmVudENvbnRl
eHQgaXNFcXVhbDpuZXdDb250ZXh0XSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0RGVsYXlD
YWxsYmFja3ModHJ1ZSk7Ci0gICAgLy8gRklYTUU6IHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxp
bmUgb25jZSByZGFyOi8vMjAzMzUyMTcgaGFzIGJlZW4gZml4ZWQuCi0gICAgLy8gbV9hdlBsYXll
ci5nZXQoKS5vdXRwdXRDb250ZXh0ID0gbmlsOworICAgIG1fYXZQbGF5ZXIuZ2V0KCkub3V0cHV0
Q29udGV4dCA9IG5ld0NvbnRleHQ7CiAgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwogCi0g
ICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c3RvcFBs
YXlpbmdUb1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdldCA9ICVwIiwgdGhpcywgbV9hdlBsYXll
ci5nZXQoKS5vdXRwdXRDb250ZXh0KTsKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCglcCkgLSB0
YXJnZXQgPSAlcCwgcGxheWluZyB0byB0YXJnZXQgPSAlcyIsIHRoaXMsIG1fYXZQbGF5ZXIuZ2V0
KCkub3V0cHV0Q29udGV4dCwgYm9vbFN0cmluZyhzaG91bGRQbGF5KSk7CiB9CiAKIGJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6aXNQbGF5aW5nVG9XaXJlbGVzc1BsYXli
YWNrVGFyZ2V0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCShyZXZpc2lvbiAxODMw
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTc0LDkgKzE3NCw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVCkKICAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0
ZWQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFj
a1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJik7Ci0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0b2dnbGVQ
bGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQbGF5
VG9QbGF5YmFja1RhcmdldChib29sKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgdm9pZCBlbnN1
cmVMYXllcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQkocmV2aXNpb24gMTgz
MDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC04MjAsMjQgKzgyMCwxNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqCiAgICAgbV9wbGF5YmFja1RhcmdldCA9IFdURjo6bW92ZSh0YXJnZXQpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6dG9nZ2xlUGxheWluZ1Rv
UGxheWJhY2tUYXJnZXQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akM6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wgc2hvdWxkUGxheVRvVGFyZ2V0
KQogewogICAgIGJvb2wgb2xkU3VwcG9ydGVkID0gbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1
cHBvcnRlZDsKLSAgICBtX2N1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkID0gIW1fcGxh
eWJhY2tUYXJnZXQgfHwgIW1fcGxheWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCk7CisgICAg
bV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCA9ICFzaG91bGRQbGF5VG9UYXJnZXQ7
CiAKICAgICBpZiAobV9wbGF5ZXIgJiYgb2xkU3VwcG9ydGVkICE9IG1fY3VycmVudFBsYXliYWNr
VGFyZ2V0SXNTdXBwb3J0ZWQpCiAgICAgICAgIG1fcGxheWVyLT5jdXJyZW50UGxheWJhY2tUYXJn
ZXRJc1dpcmVsZXNzQ2hhbmdlZCgpOwogfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpCi17Ci0gICAgdG9n
Z2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpCi17Ci0g
ICAgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKLX0KICNlbmRpZgogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4Miw4ICsxODIsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgdmlydHVhbCBib29sIGlzQ3VycmVudFBsYXli
YWNrVGFyZ2V0U3VwcG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpOwotICAg
IHZpcnR1YWwgdm9pZCBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChib29sKSBvdmVy
cmlkZTsKICAgICB2b2lkIHRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQkocmV2aXNpb24gMTgzMDY4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU0LDI0ICsxNTU0LDE0IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFdpcmVsZXMKICAgICBtX3BsYXliYWNrVGFyZ2V0ID0g
V1RGOjptb3ZlKHRhcmdldCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRv
Z2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wgc2hvdWxkUGxheVRvVGFyZ2V0
KQogewogICAgIGJvb2wgb2xkU3VwcG9ydGVkID0gbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1
cHBvcnRlZDsKLSAgICBtX2N1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkID0gIW1fcGxh
eWJhY2tUYXJnZXQgfHwgIW1fcGxheWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCk7CisgICAg
bV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCA9ICFzaG91bGRQbGF5VG9UYXJnZXQ7
CiAKICAgICBpZiAobV9wbGF5ZXIgJiYgb2xkU3VwcG9ydGVkICE9IG1fY3VycmVudFBsYXliYWNr
VGFyZ2V0SXNTdXBwb3J0ZWQpCiAgICAgICAgIG1fcGxheWVyLT5jdXJyZW50UGxheWJhY2tUYXJn
ZXRJc1dpcmVsZXNzQ2hhbmdlZCgpOwogfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKLXsKLSAgICB0b2dnbGVQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzdG9w
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQotewotICAgIHRvZ2dsZVBsYXlpbmdUb1BsYXliYWNr
VGFyZ2V0KCk7Ci19CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQyLDcg
KzI2NDIsNyBAQCBib29sIEludGVybmFsczo6aXNQYWdlUGxheWluZ0F1ZGlvKCkKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKS0+aXNQbGF5aW5nQXVkaW8oKTsKKyAgICByZXR1
cm4gISEoZG9jdW1lbnQtPnBhZ2UoKS0+bWVkaWFTdGF0ZSgpICYgTWVkaWFQcm9kdWNlcjo6SXNQ
bGF5aW5nQXVkaW8pOwogfQogCiBSZWZQdHI8RmlsZT4gSW50ZXJuYWxzOjpjcmVhdGVGaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzA3OCkKKysrIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisy
MDE1LTA0LTIxICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIFtNYWNdIFVzZSBvbmUgcGxheWJhY2sgdGFyZ2V0IGZvciBhbGwgd2ViIHByb2Nlc3Nlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MDA5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBFdmVyeSBXZWJQYWdl
UHJveHkgdXNlcyB0aGUgV2ViTWVkaWFTZXNzaW9uTWFuYWdlciBzaW5nbGV0b24gdG8gdGFsayB0
byB0aGUgcGxheWJhY2sgdGFyZ2V0CisgICAgICAgIHBpY2tlci4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojppc1BsYXlpbmdNZWRpYURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6YWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
U3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFBsYXli
YWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpleHRlcm5hbE91dHB1
dERldmljZUF2YWlsYWJsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRldmljZVBpY2tlclByb3h5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BNb25pdG9yaW5nUGxheWJhY2tU
YXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDaG9v
c2VQbGF5YmFja1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmlzUGxheWluZ0F1ZGlvKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAq
IFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWVk
aWFTZXNzaW9uTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVh
dGVQbGF5YmFja1RhcmdldFBpY2tlcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWM6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjOjp+V2ViTWVkaWFTZXNz
aW9uTWFuYWdlck1hYyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXJN
YWM6OnRhcmdldFBpY2tlcik6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJNZWRpYVNlc3Np
b25NYW5hZ2VyTWFjLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmlzUGxheWluZ01l
ZGlhRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjphZGRQbGF5
YmFja1RhcmdldFBpY2tlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVu
dDo6cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDaHJvbWVDbGllbnQ6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYkNocm9tZUNsaWVudDo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENo
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c3RhcnRpbmdNb25pdG9y
aW5nUGxheWJhY2tUYXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpkaXNwYXRjaEFmdGVyRW5zdXJpbmdVcGRhdGVk
U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxheWJhY2tUYXJnZXRTZWxlY3Rl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0U2hvdWxkUGxheVRvUGxh
eWJhY2tUYXJnZXQpOgorCiAyMDE1LTA0LTIxICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgRml4IGJsb2NrIHNpZ25hdHVyZXMKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0
LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAKLSNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotI2luY2x1
ZGUgPFdlYkNvcmUvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oPgotI2VuZGlmCi0KICNpZiBQ
TEFURk9STShDT0NPQSkKICNpbmNsdWRlICJQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIK
IApAQCAtNTIsNiArNDgsNyBAQCBPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZlczsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEN1cnNvcjsKIGNsYXNzIFRleHRJbmRpY2F0b3I7CitjbGFz
cyBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOwogc3RydWN0IEhpZ2hsaWdodDsKIHN0cnVjdCBWaWV3
cG9ydEF0dHJpYnV0ZXM7CiB9CkBAIC0zMjUsNyArMzIyLDcgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQot
ICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXI+IGNyZWF0ZVBsYXliYWNrVGFyZ2V0UGlja2VyKFdlYlBhZ2VQcm94eSopID0gMDsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXImIG1lZGlhU2Vzc2lvbk1h
bmFnZXIoKSA9IDA7CiAjZW5kaWYKIAogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw3
IEBACiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0o
SU9TKQogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5YmFja1RhcmdldC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oPgogI2VuZGlmCiAKIC8vIFRoaXMgY29u
dHJvbHMgd2hhdCBzdHJhdGVneSB3ZSB1c2UgZm9yIG1vdXNlIHdoZWVsIGNvYWxlc2NpbmcuCkBA
IC00MDgsNyArNDA5LDYgQEAgV2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYg
cAogICAgICwgbV9jb25maWd1cmF0aW9uUHJlZmVyZW5jZVZhbHVlcyhjb25maWd1cmF0aW9uLnBy
ZWZlcmVuY2VWYWx1ZXMpCiAgICAgLCBtX3BvdGVudGlhbGx5Q2hhbmdlZFZpZXdTdGF0ZUZsYWdz
KFZpZXdTdGF0ZTo6Tm9GbGFncykKICAgICAsIG1fdmlld1N0YXRlQ2hhbmdlV2FudHNTeW5jaHJv
bm91c1JlcGx5KGZhbHNlKQotICAgICwgbV9pc1BsYXlpbmdBdWRpbyhmYWxzZSkKIHsKICAgICBt
X3dlYlByb2Nlc3NMaWZldGltZVRyYWNrZXIuYWRkT2JzZXJ2ZXIobV92aXNpdGVkTGlua1Byb3Zp
ZGVyKTsKICAgICBtX3dlYlByb2Nlc3NMaWZldGltZVRyYWNrZXIuYWRkT2JzZXJ2ZXIobV93ZWJz
aXRlRGF0YVN0b3JlKTsKQEAgLTQ4MjgsNiArNDgyOCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
cmVzZXRTdGF0ZShSZXNldFN0YXRlCiAgICAgbV9sYXllclRyZWVUcmFuc2FjdGlvbklkQXRMYXN0
VG91Y2hTdGFydCA9IDA7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpICYmICFQTEFURk9STShJT1MpCisgICAgbV9wYWdlQ2xpZW50Lm1lZGlhU2Vzc2lvbk1h
bmFnZXIoKS5yZW1vdmVBbGxQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudHMoKnRoaXMpOworI2Vu
ZGlmCisKICAgICBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yOwogICAgIHN3aXRjaCAocmVzZXRT
dGF0ZVJlYXNvbikgewogICAgIGNhc2UgUmVzZXRTdGF0ZVJlYXNvbjo6UGFnZUludmFsaWRhdGVk
OgpAQCAtNDg0OSw3ICs0ODUzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUoUmVz
ZXRTdGF0ZQogICAgICAgICBlZGl0Q29tbWFuZFZlY3RvcltpXS0+aW52YWxpZGF0ZSgpOwogCiAg
ICAgbV9hY3RpdmVQb3B1cE1lbnUgPSBudWxscHRyOwotICAgIG1faXNQbGF5aW5nQXVkaW8gPSBm
YWxzZTsKKyAgICBtX21lZGlhU3RhdGUgPSBNZWRpYVByb2R1Y2VyOjpJc05vdFBsYXlpbmc7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKCkKQEAg
LTU2NTksMTMgKzU2NjMsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6Om5hdmlnYXRpb25HZXN0dXJl
U25hcAogICAgIG1faXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCA9IGZhbHNlOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50OjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCit2b2lkIFdlYlBhZ2VQcm94eTo6
aXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UoV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0
ZUZsYWdzIHN0YXRlKQogewotICAgIGJvb2wgaXNQbGF5aW5nQXVkaW8gPSBzdGF0ZSAmIFdlYkNv
cmU6OkNocm9tZUNsaWVudDo6SXNQbGF5aW5nQXVkaW87Ci0gICAgaWYgKG1faXNQbGF5aW5nQXVk
aW8gPT0gaXNQbGF5aW5nQXVkaW8pCisgICAgaWYgKHN0YXRlID09IG1fbWVkaWFTdGF0ZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9pc1BsYXlpbmdBdWRpbyA9IGlzUGxheWluZ0F1ZGlvOwor
ICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRlOwogICAgIG1fdWlDbGllbnQtPmlzUGxheWluZ0F1ZGlv
RGlkQ2hhbmdlKCp0aGlzKTsKIH0KIApAQCAtNTczOCw0NiArNTc0MSw0OSBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6aGFuZGxlQXV0b0ZpbGxCdXR0b25DCiB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQotCi1XZWJDb3JlOjpNZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyJiBXZWJQYWdlUHJveHk6OmRldmljZVBpY2tlclByb3h5KCkKK3ZvaWQg
V2ViUGFnZVByb3h5OjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCBjb250
ZXh0SWQpCiB7Ci0gICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0UGlja2VyKQotICAgICAgICBtX3Bs
YXliYWNrVGFyZ2V0UGlja2VyID0gbV9wYWdlQ2xpZW50LmNyZWF0ZVBsYXliYWNrVGFyZ2V0UGlj
a2VyKHRoaXMpOwotCi0gICAgcmV0dXJuICptX3BsYXliYWNrVGFyZ2V0UGlja2VyLmdldCgpOwor
ICAgIG1fcGFnZUNsaWVudC5tZWRpYVNlc3Npb25NYW5hZ2VyKCkuYWRkUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQoKnRoaXMsIGNvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpz
aG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0LCBi
b29sIGhhc1ZpZGVvKQordm9pZCBXZWJQYWdlUHJveHk6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlj
a2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBkZXZpY2VQaWNrZXJQcm94eSgp
LnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihtX3BhZ2VDbGllbnQucm9vdFZpZXdUb1NjcmVlbihJ
bnRSZWN0KHJlY3QpKSwgaGFzVmlkZW8pOworICAgIG1fcGFnZUNsaWVudC5tZWRpYVNlc3Npb25N
YW5hZ2VyKCkucmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoKnRoaXMsIGNvbnRleHRJ
ZCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1Rh
cmdldHMoKQordm9pZCBXZWJQYWdlUHJveHk6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcih1aW50
NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwgYm9vbCBoYXNW
aWRlbykKIHsKLSAgICBkZXZpY2VQaWNrZXJQcm94eSgpLnN0YXJ0aW5nTW9uaXRvcmluZ1BsYXli
YWNrVGFyZ2V0cygpOworICAgIG1fcGFnZUNsaWVudC5tZWRpYVNlc3Npb25NYW5hZ2VyKCkuc2hv
d1BsYXliYWNrVGFyZ2V0UGlja2VyKCp0aGlzLCBjb250ZXh0SWQsIG1fcGFnZUNsaWVudC5yb290
Vmlld1RvU2NyZWVuKEludFJlY3QocmVjdCkpLCBoYXNWaWRlbyk7CiB9CiAKLXZvaWQgV2ViUGFn
ZVByb3h5OjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpCit2b2lkIFdlYlBhZ2VQcm94
eTo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKIHsK
LSAgICBkZXZpY2VQaWNrZXJQcm94eSgpLnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7
CisgICAgbV9wYWdlQ2xpZW50Lm1lZGlhU2Vzc2lvbk1hbmFnZXIoKS5jbGllbnRTdGF0ZURpZENo
YW5nZSgqdGhpcywgY29udGV4dElkLCBzdGF0ZSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRDaG9vc2VQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJiB0YXJnZXQp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UGxheWJhY2tUYXJnZXQodWludDY0X3QgY29udGV4dElk
LCBSZWY8TWVkaWFQbGF5YmFja1RhcmdldD4mJiB0YXJnZXQpCiB7CiAgICAgaWYgKCFpc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6UGxheWJhY2tUYXJnZXRTZWxlY3RlZCh0YXJnZXQtPnRhcmdldENvbnRleHQoKSksIG1f
cGFnZUlEKTsKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBsYXliYWNr
VGFyZ2V0U2VsZWN0ZWQoY29udGV4dElkLCB0YXJnZXQtPnRhcmdldENvbnRleHQoKSksIG1fcGFn
ZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxh
YmxlRGlkQ2hhbmdlKGJvb2wgYXZhaWxhYmxlKQordm9pZCBXZWJQYWdlUHJveHk6OmV4dGVybmFs
T3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBh
dmFpbGFibGUpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGxheWJhY2tUYXJnZXRBdmFpbGFi
aWxpdHlEaWRDaGFuZ2UoYXZhaWxhYmxlKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2Uo
Y29udGV4dElkLCBhdmFpbGFibGUpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
c2hvdWxkUGxheSkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRTaG91bGRQbGF5VG9QbGF5
YmFja1RhcmdldChjb250ZXh0SWQsIHNob3VsZFBsYXkpLCBtX3BhZ2VJRCk7Cit9CiAjZW5kaWYK
IAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZENoYW5nZUJhY2tncm91bmRDb2xvcigpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxODMwNjgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDEwICs2MywxMCBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTGlmZXRp
bWVUcmFja2VyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWVDbGllbnQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQ
cm9kdWNlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1TY3JlZW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFR5cGVzLmg+CkBAIC0x
MTUsNiArMTE1LDcgQEAKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYm
ICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50Lmg+
CiAjZW5kaWYKIAogbmFtZXNwYWNlIEFQSSB7CkBAIC0yNjQsNyArMjY1LDcgQEAgY2xhc3MgV2Vi
UGFnZVByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SQogICAgICwgcHVibGljIFdlYkNvbG9yUGlj
a2VyOjpDbGllbnQKICNlbmRpZgogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
ICYmICFQTEFURk9STShJT1MpCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlcjo6Q2xpZW50CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9u
TWFuYWdlckNsaWVudAogI2VuZGlmCiAgICAgLCBwdWJsaWMgV2ViUG9wdXBNZW51UHJveHk6OkNs
aWVudAogICAgICwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyCkBAIC05ODMsOCArOTg0LDgg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Nob3dpbmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90
KCkgY29uc3QgeyByZXR1cm4gbV9pc1Nob3dpbmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90OyB9
CiAKLSAgICB2b2lkIGlzUGxheWluZ01lZGlhRGlkQ2hhbmdlKFdlYkNvcmU6OkNocm9tZUNsaWVu
dDo6TWVkaWFTdGF0ZUZsYWdzKTsKLSAgICBib29sIGlzUGxheWluZ0F1ZGlvKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1BsYXlpbmdBdWRpbzsgfQorICAgIGJvb2wgaXNQbGF5aW5nQXVkaW8oKSBjb25z
dCB7IHJldHVybiAhIShtX21lZGlhU3RhdGUgJiBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpJc1Bs
YXlpbmdBdWRpbyk7IH0KKyAgICB2b2lkIGlzUGxheWluZ01lZGlhRGlkQ2hhbmdlKFdlYkNvcmU6
Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyk7CiAKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgdm9pZCByZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCk7CkBAIC0xMDIwLDE0ICsx
MDIxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgYm9vbCBzaG91bGRTYW1wbGUpOwogCiAjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKLSAgICBXZWJDb3JlOjpNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyJiBkZXZpY2VQaWNrZXJQcm94eSgpOwotICAgIHZvaWQgc2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGJvb2wgaGFzVmlk
ZW8pOwotICAgIHZvaWQgc3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7Ci0gICAg
dm9pZCBzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOwotCi0gICAgLy8gV2ViQ29yZTo6
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGRpZENo
b29zZVBsYXliYWNrVGFyZ2V0KFJlZjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVE
aWRDaGFuZ2UoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRQbGF5YmFja1RhcmdldFBpY2tl
ckNsaWVudCh1aW50NjRfdCk7CisgICAgdm9pZCByZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudCh1aW50NjRfdCk7CisgICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIodWludDY0
X3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGJvb2wgaGFzVmlkZW8pOworICAgIHZvaWQg
cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCwgV2ViQ29y
ZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKTsKKworICAgIC8vIFdlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGxheWJhY2tUYXJnZXQodWlu
dDY0X3QsIFJlZjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0PiYmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UodWlu
dDY0X3QsIGJvb2wpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQbGF5VG9Q
bGF5YmFja1RhcmdldCh1aW50NjRfdCwgYm9vbCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZv
aWQgZGlkQ2hhbmdlQmFja2dyb3VuZENvbG9yKCk7CkBAIC0xNzA2LDExICsxNzA4LDEyIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX3ZpZXdTdGF0ZUNoYW5nZVdhbnRzU3luY2hyb25vdXNSZXBseTsK
ICAgICBWZWN0b3I8dWludDY0X3Q+IG1fbmV4dFZpZXdTdGF0ZUNoYW5nZUNhbGxiYWNrczsKIAor
ICAgIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtX21lZGlhU3RhdGUg
eyBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpJc05vdFBsYXlpbmcgfTsKKwogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI+IG1fcGxheWJhY2tUYXJn
ZXRQaWNrZXI7CisgICAgYm9vbCBtX3JlcXVpcmVzVGFyZ2V0TW9uaXRvcmluZyB7IGZhbHNlIH07
CiAjZW5kaWYKIAotICAgIGJvb2wgbV9pc1BsYXlpbmdBdWRpbzsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00MzIs
OSArNDMyLDEwIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgSGFuZGxlQXV0b0Zp
bGxCdXR0b25DbGljayhXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKTsKIAogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCi0gICAgU2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKFdlYkNvcmU6OkZsb2F0UmVjdCBwaWNrZXJMb2NhdGlvbiwgYm9vbCBo
YXNWaWRlbykKLSAgICBTdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKQotICAgIFN0
b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkKKyAgICBBZGRQbGF5YmFja1RhcmdldFBpY2tl
ckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgUmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQodWludDY0X3QgY29udGV4dElkKQorICAgIFNob3dQbGF5YmFja1RhcmdldFBpY2tl
cih1aW50NjRfdCBjbGllbnRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IHBpY2tlckxvY2F0aW9uLCBi
b29sIGhhc1ZpZGVvKQorICAgIFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFu
Z2UodWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBtZWRpYVN0YXRlKQogI2VuZGlmCiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgJ
KHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcj4gY3Jl
YXRlUGxheWJhY2tUYXJnZXRQaWNrZXIoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyJiBtZWRpYVNlc3Npb25NYW5hZ2Vy
KCkgb3ZlcnJpZGU7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2luZyBjb3B5KQpA
QCAtNzEsNyArNzEsNyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tf
VEFSR0VUKQotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oPgogI2VuZGlm
CiAKIEBpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV2ViTlNBcHBsaWNhdGlvbkRldGFpbHMpCkBA
IC04MTMsOSArODEzLDkgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1BsYXRmb3JtQ29udGV4
dAogfQogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLXN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyPiBQYWdlQ2xpZW50SW1wbDo6
Y3JlYXRlUGxheWJhY2tUYXJnZXRQaWNrZXIoV2ViUGFnZVByb3h5KiBwYWdlKQorV2ViQ29yZTo6
V2ViTWVkaWFTZXNzaW9uTWFuYWdlciYgUGFnZUNsaWVudEltcGw6Om1lZGlhU2Vzc2lvbk1hbmFn
ZXIoKQogewotICAgIHJldHVybiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjOjpjcmVhdGUo
KnBhZ2UpOworICAgIHJldHVybiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjOjpzaW5nbGV0b24o
KTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmgJKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICsz
MSwxMCBAQAogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9Qcm9kdWNl
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ltYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYUNhblN0YXJ0TGlzdGVuZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL01lZGlhUHJvZHVjZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdp
blZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CkBAIC01OCw3ICs1OCw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBXZWJFdmVudDsKIAotY2xhc3MgUGx1Z2luVmlldyA6IHB1Ymxp
YyBXZWJDb3JlOjpQbHVnaW5WaWV3QmFzZSwgcHVibGljIFBsdWdpbkNvbnRyb2xsZXIsIHByaXZh
dGUgV2ViQ29yZTo6TWVkaWFDYW5TdGFydExpc3RlbmVyLCBwcml2YXRlIFdlYkZyYW1lOjpMb2Fk
TGlzdGVuZXIsIHByaXZhdGUgV2ViQ29yZTo6QXVkaW9Qcm9kdWNlciB7CitjbGFzcyBQbHVnaW5W
aWV3IDogcHVibGljIFdlYkNvcmU6OlBsdWdpblZpZXdCYXNlLCBwdWJsaWMgUGx1Z2luQ29udHJv
bGxlciwgcHJpdmF0ZSBXZWJDb3JlOjpNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHByaXZhdGUgV2Vi
RnJhbWU6OkxvYWRMaXN0ZW5lciwgcHJpdmF0ZSBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5WaWV3PiBjcmVhdGUoUGFzc1JlZlB0
cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudD4sIFBhc3NSZWZQdHI8UGx1Z2luPiwgY29uc3Qg
UGx1Z2luOjpQYXJhbWV0ZXJzJik7CiAKQEAgLTE4MSw4ICsxODEsOCBAQCBwcml2YXRlOgogICAg
IC8vIFdlYkNvcmU6Ok1lZGlhQ2FuU3RhcnRMaXN0ZW5lcgogICAgIHZpcnR1YWwgdm9pZCBtZWRp
YUNhblN0YXJ0KCkgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJDb3JlOjpBdWRpb1Byb2R1Y2VyCi0g
ICAgdmlydHVhbCBib29sIGlzUGxheWluZ0F1ZGlvKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbHVn
aW5Jc1BsYXlpbmdBdWRpbzsgfQorICAgIC8vIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXIKKyAgICB2
aXJ0dWFsIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9wbHVnaW5Jc1BsYXlpbmdBdWRpbyA/IE1lZGlhUHJvZHVjZXI6
OklzUGxheWluZ0F1ZGlvIDogTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5nOyB9CiAgICAgdmly
dHVhbCB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CiAKICAgICAvLyBQ
bHVnaW5Db250cm9sbGVyCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAx
ODMwNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTAsNyArMTA1MCw3IEBAIGJvb2wg
V2ViQ2hyb21lQ2xpZW50OjpzaG91bGRVc2VUaWxlZEJhY2sKICAgICByZXR1cm4gbV9wYWdlLT5k
cmF3aW5nQXJlYSgpLT5zaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmlzUGxheWluZ01lZGlhRGlkQ2hhbmdlKE1l
ZGlhU3RhdGVGbGFncyBzdGF0ZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojppc1BsYXlpbmdNZWRp
YURpZENoYW5nZShXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUp
CiB7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OklzUGxheWluZ01l
ZGlhRGlkQ2hhbmdlKHN0YXRlKSk7CiB9CkBAIC0xMTE1LDIxICsxMTE1LDI3IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpoYW5kbGVBdXRvRmlsbEJ1dHQKIH0KIAogI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCi12b2lkIFdlYkNocm9tZUNsaWVu
dDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3Np
dGlvbiwgYm9vbCBpc1ZpZGVvKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmFkZFBsYXliYWNrVGFy
Z2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKLSAgICBGbG9hdFJlY3QgcmVj
dChmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhmcmFtZVZpZXctPndpbmRvd1RvQ29udGVu
dHMocG9zaXRpb24pKSwgRmxvYXRTaXplKCkpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIocmVjdCwgaXNWaWRlbykpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBZGRQbGF5YmFja1Rhcmdl
dFBpY2tlckNsaWVudChjb250ZXh0SWQpKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJl
bW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVtb3ZlUGxheWJhY2tUYXJn
ZXRQaWNrZXJDbGllbnQoY29udGV4dElkKSk7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpz
dGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKQorCit2b2lkIFdlYkNocm9tZUNsaWVu
dDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBib29sIGlzVmlkZW8pCiB7Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFy
Z2V0cygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKTsKKyAgICBGbG9hdFJlY3QgcmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290Vmll
dyhmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMocG9zaXRpb24pKSwgRmxvYXRTaXplKCkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UGxheWJhY2tUYXJn
ZXRQaWNrZXIoY29udGV4dElkLCByZWN0LCBpc1ZpZGVvKSk7CiB9CiAKLXZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpCit2b2lkIFdlYkNocm9tZUNs
aWVudDo6cGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCBj
b250ZXh0SWQsIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkK
IHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3RvcE1vbml0b3Jp
bmdQbGF5YmFja1RhcmdldHMoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UoY29udGV4dElk
LCBzdGF0ZSkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNp
b24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIHByaXZh
dGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3
KGNvbnN0IFdlYkNvcmU6OkZyYW1lVmlldyopIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGlzUGxheWluZ01lZGlhRGlkQ2hhbmdlKE1lZGlhU3RhdGVGbGFncykgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGlzUGxheWluZ01lZGlhRGlkQ2hhbmdlKFdlYkNvcmU6Ok1lZGlh
UHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFBhZ2VBY3Rpdml0eVN0YXRlKFdlYkNvcmU6OlBhZ2VBY3Rpdml0eVN0YXRlOjpGbGFncykgb3Zl
cnJpZGU7CiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKQEAgLTMxMyw5ICszMTMsMTAgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXV0b0ZpbGxCdXR0b25DbGljayhXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIHZpcnR1YWwgdm9pZCBzaG93
UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRz
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJn
ZXRzKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkZFBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50KHVpbnQ2NF90IC8qY29udGV4dElkKi8pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCAvKmNvbnRleHRJZCov
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVp
bnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENo
YW5nZSh1aW50NjRfdCwgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKSBv
dmVycmlkZTsKICNlbmRpZgogCiAgICAgU3RyaW5nIG1fY2FjaGVkVG9vbFRpcDsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTgz
MDY4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMTEwNyw4ICsxMTA3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNo
b3VsZERpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50cyhib29sIGRpc3BhdGNoKSB7IG1fc2hvdWxk
RGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRzID0gZGlzcGF0Y2g7IH0KIAogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCi0gICAgdm9pZCBwbGF5
YmFja1RhcmdldFNlbGVjdGVkKGNvbnN0IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250
ZXh0JiBvdXRwdXREZXZpY2UpIGNvbnN0OwotICAgIHZvaWQgcGxheWJhY2tUYXJnZXRBdmFpbGFi
aWxpdHlEaWRDaGFuZ2UoYm9vbCk7CisgICAgdm9pZCBwbGF5YmFja1RhcmdldFNlbGVjdGVkKHVp
bnQ2NF90LCBjb25zdCBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dCYgb3V0cHV0
RGV2aWNlKSBjb25zdDsKKyAgICB2b2lkIHBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hh
bmdlKHVpbnQ2NF90LCBib29sKTsKKyAgICB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFy
Z2V0KHVpbnQ2NF90LCBib29sKTsKICNlbmRpZgogCiAgICAgdWludDY0X3QgbV9wYWdlSUQ7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQxOCw4
ICs0MTgsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBTZXRT
aG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMoYm9vbCBzaG91bGREaXNwYXRjaEZha2VN
b3VzZU1vdmVFdmVudHMpCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAm
JiAhUExBVEZPUk0oSU9TKQotICAgIFBsYXliYWNrVGFyZ2V0U2VsZWN0ZWQoc3RydWN0IFdlYkNv
cmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0IHRhcmdldCkKLSAgICBQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eURpZENoYW5nZShib29sIGF2YWlsYWJsZSkKKyAgICBQbGF5YmFja1Rhcmdl
dFNlbGVjdGVkKHVpbnQ2NF90IGNvbnRleHRJZCwgc3RydWN0IFdlYkNvcmU6Ok1lZGlhUGxheWJh
Y2tUYXJnZXRDb250ZXh0IHRhcmdldCkKKyAgICBQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURp
ZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgYXZhaWxhYmxlKQorICAgIFNldFNob3Vs
ZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBzaG91bGRQbGF5
KQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDE4MzA2OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTIwMywxNiArMTIwMywyMSBAQCB2b2lkIFdlYlBhZ2U6OnNldEZvbnQoY29uc3QgU3Ry
aW5nJiBmb250CiB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAh
UExBVEZPUk0oSU9TKQotdm9pZCBXZWJQYWdlOjpwbGF5YmFja1RhcmdldFNlbGVjdGVkKGNvbnN0
IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0JiB0YXJnZXRDb250ZXh0KSBjb25z
dAordm9pZCBXZWJQYWdlOjpwbGF5YmFja1RhcmdldFNlbGVjdGVkKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQmIHRhcmdldENvbnRl
eHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHRhcmdldENvbnRleHQudHlwZSA9PSBNZWRpYVBsYXli
YWNrVGFyZ2V0Q29udGV4dDo6QVZPdXRwdXRDb250ZXh0VHlwZSk7CiAKLSAgICBtX3BhZ2UtPmRp
ZENob29zZVBsYXliYWNrVGFyZ2V0KFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRNYWM6OmNy
ZWF0ZSh0YXJnZXRDb250ZXh0LmNvbnRleHQuYXZPdXRwdXRDb250ZXh0KSk7CisgICAgbV9wYWdl
LT5zZXRQbGF5YmFja1RhcmdldChjb250ZXh0SWQsIFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJn
ZXRNYWM6OmNyZWF0ZSh0YXJnZXRDb250ZXh0LmNvbnRleHQuYXZPdXRwdXRDb250ZXh0KSk7CiB9
CiAKLXZvaWQgV2ViUGFnZTo6cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoYm9v
bCBjaGFuZ2VkKQordm9pZCBXZWJQYWdlOjpwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENo
YW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgY2hhbmdlZCkKIHsKLSAgICBtX3BhZ2UtPnBs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGNoYW5nZWQpOworICAgIG1fcGFnZS0+
cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoY29udGV4dElkLCBjaGFuZ2VkKTsK
K30KKwordm9pZCBXZWJQYWdlOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wgc2hvdWxkUGxheSkKK3sKKyAgICBtX3BhZ2UtPnNldFNob3VsZFBs
YXlUb1BsYXliYWNrVGFyZ2V0KGNvbnRleHRJZCwgc2hvdWxkUGxheSk7CiB9CiAjZW5kaWYKIApJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMDc4KQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTUtMDQtMjEg
IEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10g
VXNlIG9uZSBwbGF5YmFjayB0YXJnZXQgZm9yIGFsbCB3ZWIgcHJvY2Vzc2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQwMDkKKworICAgICAgICBS
ZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIFVwZGF0ZSB0byB1c2UgV2ViTWVkaWFT
ZXNzaW9uTWFuYWdlciBmb3IgcGxheWJhY2sgdGFyZ2V0IG1hbmFnZW1lbnQuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmFkZFBs
YXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6cmVt
b3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQpOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50
OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojpw
bGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNo
cm9tZUNsaWVudDo6c3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c3RvcE1vbml0b3JpbmdQbGF5YmFja1RhcmdldHMp
OiBEZWxldGVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tl
ci5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5tbToK
KyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmFkZFBsYXliYWNrVGFyZ2V0
UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnJl
bW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJh
Y2tUYXJnZXRQaWNrZXI6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcik6CisgICAgICAgIChXZWJN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRl
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnNldFBs
YXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmV4
dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYk1lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXI6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KToKKyAg
ICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmludmFsaWRhdGUpOgorICAgICAg
ICAoV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c3RhcnRpbmdNb25pdG9yaW5nUGxheWJh
Y2tUYXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXI6OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
Yk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnRhcmdldFBpY2tl
cik6IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtX
ZWJWaWV3IF9hZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudDpdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBfcmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQ6XSk6CisgICAgICAgICgtW1dl
YlZpZXcgX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjpsb2NhdGlvbjpoYXNWaWRlbzpdKToKKyAg
ICAgICAgKC1bV2ViVmlldyBfcGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5n
ZTpzdGF0ZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfc2hvd1BsYXliYWNrVGFyZ2V0UGlja2Vy
Omhhc1ZpZGVvOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJWaWV3IF9zdGFydGluZ01vbml0
b3JpbmdQbGF5YmFja1RhcmdldHNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlldyBfc3Rv
cE1vbml0b3JpbmdQbGF5YmFja1RhcmdldHNdKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJWaWV3
L1dlYlZpZXdJbnRlcm5hbC5oOgorCiAyMDE1LTA0LTIwICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgbWl4ZWQgY29udGVudCBibG9ja2luZyBm
b3IgZXhpc3RpbmcgV2ViS2l0MSBjbGllbnRzCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTgzMDY4KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxNCw5ICsyMTQsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIHZp
cnR1YWwgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCBib29sIC8qIGhhc1ZpZGVvICovKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IC8qY29udGV4dElk
Ki8pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQbGF5YmFja1RhcmdldFBpY2tl
ckNsaWVudCh1aW50NjRfdCAvKmNvbnRleHRJZCovKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90IC8qY29udGV4dElkKi8sIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCAvKiBoYXNWaWRlbyAqLykgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWlu
dDY0X3QgLypjb250ZXh0SWQqLywgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZs
YWdzKSBvdmVycmlkZTsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24g
MTgzMDY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM2LDE4ICsxMDM2LDIzIEBAIGJvb2wgV2ViQ2hy
b21lQ2xpZW50OjpoYXNSZWxldmFudFNlbGVjdGkKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKLXZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxv
Y2F0aW9uLCBib29sIGhhc1ZpZGVvKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmFkZFBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBbbV93ZWJWaWV3
IF9zaG93UGxheWJhY2tUYXJnZXRQaWNrZXI6bG9jYXRpb24gaGFzVmlkZW86aGFzVmlkZW9dOwor
ICAgIFttX3dlYlZpZXcgX2FkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50OmNvbnRleHRJZF07
CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1Rh
cmdldHMoKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBbbV93ZWJWaWV3IF9zdGFydGluZ01v
bml0b3JpbmdQbGF5YmFja1RhcmdldHNdOworICAgIFttX3dlYlZpZXcgX3JlbW92ZVBsYXliYWNr
VGFyZ2V0UGlja2VyQ2xpZW50OmNvbnRleHRJZF07CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50
OjpzdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6
c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGxvY2F0aW9uLCBib29sIGhhc1ZpZGVvKQogewotICAgIFttX3dlYlZpZXcg
X3N0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzXTsKKyAgICBbbV93ZWJWaWV3IF9zaG93UGxh
eWJhY2tUYXJnZXRQaWNrZXI6Y29udGV4dElkIGxvY2F0aW9uOmxvY2F0aW9uIGhhc1ZpZGVvOmhh
c1ZpZGVvXTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QgY29udGV4dElkLCBNZWRpYVByb2R1Y2VyOjpN
ZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCit7CisgICAgW21fd2ViVmlldyBfcGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZTpjb250ZXh0SWQgc3RhdGU6c3RhdGVdOwogfQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYk1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYk1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaAkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDM0ICsyNSwzNyBAQAogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKIAotI2ltcG9ydCA8V2ViQ29yZS9NZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyLmg+CisjaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWJhY2tUYXJnZXQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmxvYXRSZWN0
OworY2xhc3MgTWVkaWFQbGF5YmFja1RhcmdldDsKIGNsYXNzIFBhZ2U7CiB9CiAKLWNsYXNzIFdl
Yk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIgOiBwdWJsaWMgV2ViQ29yZTo6TWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlcjo6Q2xpZW50IHsKK2NsYXNzIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyPiBjcmVhdGUoV2ViQ29yZTo6UGFnZSYpOwogCiAgICAgZXhwbGljaXQgV2ViTWVkaWFQbGF5
YmFja1RhcmdldFBpY2tlcihXZWJDb3JlOjpQYWdlJik7CiAgICAgdmlydHVhbCB+V2ViTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlcigpIHsgfQogCi0gICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQ
aWNrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgYm9vbCAvKiBoYXNWaWRlbyAqLyk7Ci0g
ICAgdm9pZCBzdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKTsKLSAgICB2b2lkIHN0
b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7Ci0KLSAgICAvLyBXZWJDb3JlOjpNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hvb3NlUGxh
eWJhY2tUYXJnZXQoUmVmPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5n
ZShib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
KHVpbnQ2NF90KTsKKyAgICB2b2lkIHJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KHVp
bnQ2NF90KTsKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcih1aW50NjRfdCwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgYm9vbCBoYXNWaWRlbyk7CisgICAgdm9pZCBwbGF5YmFj
a1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKHVpbnQ2NF90LCBXZWJDb3JlOjpNZWRp
YVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MpOworCisgICAgLy8gV2ViTWVkaWFTZXNzaW9uTWFu
YWdlckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF5YmFja1RhcmdldCh1aW50NjRfdCwg
UmVmPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSh1aW50NjRfdCwg
Ym9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KHVpbnQ2NF90LCBib29sKSBvdmVycmlkZTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgp
OwogCiBwcml2YXRlOgotICAgIFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXImIHRh
cmdldFBpY2tlcigpOwotCiAgICAgV2ViQ29yZTo6UGFnZSogbV9wYWdlOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyPiBtX3RhcmdldFBpY2tl
cjsKIH07CisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5tbQkocmV2aXNpb24gMTgzMDY4
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNSArMjAsMTYgQEAKICAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
ICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2ltcG9ydCAiV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oIgogCiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKIAotI2lt
cG9ydCA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL01lZGlhUGxheWJhY2tUYXJnZXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgor
I2ltcG9ydCA8V2ViQ29yZS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmg+CiAKIHN0ZDo6dW5p
cXVlX3B0cjxXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyPiBXZWJNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyOjpjcmVhdGUoV2ViQ29yZTo6UGFnZSYgcGFnZSkKIHsKQEAgLTQwLDQ4ICs0MSw1
NCBAQCBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpXZWJNZWRpYVBsCiB7CiB9CiAKLXZv
aWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2Vy
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwgYm9vbCBoYXNWaWRlbykKK3ZvaWQgV2Vi
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6YWRkUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQo
dWludDY0X3QgY29udGV4dElkKQogewotICAgIHRhcmdldFBpY2tlcigpLnNob3dQbGF5YmFja1Rh
cmdldFBpY2tlcihXZWJDb3JlOjpJbnRSZWN0KHJlY3QpLCBoYXNWaWRlbyk7CisgICAgV2ViQ29y
ZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6c2luZ2xldG9uKCkuYWRkUGxheWJhY2tUYXJn
ZXRQaWNrZXJDbGllbnQoKnRoaXMsIGNvbnRleHRJZCk7CiB9CiAKLXZvaWQgV2ViTWVkaWFQbGF5
YmFja1RhcmdldFBpY2tlcjo6c3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkKK3Zv
aWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQodWludDY0X3QgY29udGV4dElkKQogewotICAgIHRhcmdldFBpY2tlcigpLnN0YXJ0
aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOworICAgIFdlYkNvcmU6OldlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWM6OnNpbmdsZXRvbigpLnJlbW92ZVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50KCp0aGlzLCBjb250ZXh0SWQpOwogfQogCi12b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXI6OnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCkKK3ZvaWQgV2ViTWVkaWFQbGF5
YmFja1RhcmdldFBpY2tlcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHVpbnQ2NF90IGNvbnRl
eHRJZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0LCBib29sIGhhc1ZpZGVvKQogewot
ICAgIHRhcmdldFBpY2tlcigpLnN0b3BNb25pdG9yaW5nUGxheWJhY2tUYXJnZXRzKCk7CisgICAg
V2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6c2luZ2xldG9uKCkuc2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKCp0aGlzLCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QocmVjdCks
IGhhc1ZpZGVvKTsKIH0KIAotdm9pZCBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpkaWRD
aG9vc2VQbGF5YmFja1RhcmdldChSZWY8V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldD4mJiB0
YXJnZXQpCit2b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnBsYXliYWNrVGFyZ2V0
UGlja2VyQ2xpZW50U3RhdGVEaWRDaGFuZ2UodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpN
ZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCit7CisgICAgV2ViQ29yZTo6V2Vi
TWVkaWFTZXNzaW9uTWFuYWdlck1hYzo6c2luZ2xldG9uKCkuY2xpZW50U3RhdGVEaWRDaGFuZ2Uo
KnRoaXMsIGNvbnRleHRJZCwgc3RhdGUpOworfQorCit2b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXI6OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgUmVmPFdlYkNv
cmU6Ok1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgdGFyZ2V0KQogewogICAgIGlmICghbV9wYWdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2UtPmRpZENob29zZVBsYXliYWNrVGFyZ2V0KFdU
Rjo6bW92ZSh0YXJnZXQpKTsKKyAgICBtX3BhZ2UtPnNldFBsYXliYWNrVGFyZ2V0KGNvbnRleHRJ
ZCwgV1RGOjptb3ZlKHRhcmdldCkpOwogfQogCi12b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXI6OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wgYXZhaWxh
YmxlKQordm9pZCBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyOjpleHRlcm5hbE91dHB1dERl
dmljZUF2YWlsYWJsZURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgYXZhaWxhYmxl
KQogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2UtPnBs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGF2YWlsYWJsZSk7CisgICAgbV9wYWdl
LT5wbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShjb250ZXh0SWQsIGF2YWlsYWJs
ZSk7CiB9CiAKLXZvaWQgV2ViTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlcjo6aW52YWxpZGF0ZSgp
Cit2b2lkIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXI6OnNldFNob3VsZFBsYXlUb1BsYXli
YWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBzaG91bGRQbGF5KQogewotICAgIG1f
cGFnZSA9IG51bGxwdHI7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcGFnZS0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoY29udGV4dElkLCBzaG91bGRQ
bGF5KTsKIH0KIAotV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlciYgV2ViTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlcjo6dGFyZ2V0UGlja2VyKCkKK3ZvaWQgV2ViTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgaWYgKCFtX3RhcmdldFBpY2tlcikK
LSAgICAgICAgbV90YXJnZXRQaWNrZXIgPSBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyTWFjOjpjcmVhdGUoKnRoaXMpOwotCi0gICAgcmV0dXJuICptX3RhcmdldFBpY2tlci5nZXQo
KTsKKyAgICBtX3BhZ2UgPSBudWxscHRyOworICAgIFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1h
bmFnZXJNYWM6OnNpbmdsZXRvbigpLnJlbW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
cygqdGhpcyk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQkocmV2aXNpb24gMTgzMDY4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNiArMjkzLDcgQEAKIAogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCiAjaW1wb3J0ICJXZWJN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmgiCisjaW1wb3J0IDxXZWJDb3JlL1dlYk1lZGlhU2Vz
c2lvbk1hbmFnZXJNYWMuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtODY2OSwz
MCArODY3MCwyOSBAQCAtIChXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyICopIF9kZXZpCiAg
ICAgcmV0dXJuIF9wcml2YXRlLT5tX3BsYXliYWNrVGFyZ2V0UGlja2VyLmdldCgpOwogfQogCi0t
ICh2b2lkKV9zaG93UGxheWJhY2tUYXJnZXRQaWNrZXI6KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
Jilsb2NhdGlvbiBoYXNWaWRlbzooQk9PTCloYXNWaWRlbworLSAodm9pZClfYWRkUGxheWJhY2tU
YXJnZXRQaWNrZXJDbGllbnQ6KHVpbnQ2NF90KWNsaWVudElkCiB7Ci0gICAgaWYgKCFfcHJpdmF0
ZS0+cGFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIFtzZWxmIF9kZXZpY2VQaWNrZXJdLT5hZGRQ
bGF5YmFja1RhcmdldFBpY2tlckNsaWVudChjbGllbnRJZCk7Cit9CiAKLSAgICBOU1JlY3QgcmVj
dEluV2luZG93Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBfY29udmVydFJl
Y3RGcm9tUm9vdFZpZXc6TlNNYWtlUmVjdChsb2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKSwgMCwg
MCldIHRvVmlldzpuaWxdOwotICAgIE5TUmVjdCByZWN0SW5TY3JlZW5Db29yZGluYXRlcyA9IFtz
ZWxmLndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOnJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzXTsK
LSAgICBbc2VsZiBfZGV2aWNlUGlja2VyXS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHJlY3RJ
blNjcmVlbkNvb3JkaW5hdGVzLCBoYXNWaWRlbyk7CistICh2b2lkKV9yZW1vdmVQbGF5YmFja1Rh
cmdldFBpY2tlckNsaWVudDoodWludDY0X3QpY2xpZW50SWQKK3sKKyAgICBbc2VsZiBfZGV2aWNl
UGlja2VyXS0+cmVtb3ZlUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQoY2xpZW50SWQpOwogfQog
Ci0tICh2b2lkKV9zdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMKKy0gKHZvaWQpX3No
b3dQbGF5YmFja1RhcmdldFBpY2tlcjoodWludDY0X3QpY2xpZW50SWQgbG9jYXRpb246KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50Jilsb2NhdGlvbiBoYXNWaWRlbzooQk9PTCloYXNWaWRlbwogewog
ICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzZWxmIF9k
ZXZpY2VQaWNrZXJdLT5zdGFydGluZ01vbml0b3JpbmdQbGF5YmFja1RhcmdldHMoKTsKKyAgICBO
U1JlY3QgcmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBf
Y29udmVydFJlY3RGcm9tUm9vdFZpZXc6TlNNYWtlUmVjdChsb2NhdGlvbi54KCksIGxvY2F0aW9u
LnkoKSwgMCwgMCldIHRvVmlldzpuaWxdOworICAgIE5TUmVjdCByZWN0SW5TY3JlZW5Db29yZGlu
YXRlcyA9IFtzZWxmLndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOnJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzXTsKKyAgICBbc2VsZiBfZGV2aWNlUGlja2VyXS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKGNsaWVudElkLCByZWN0SW5TY3JlZW5Db29yZGluYXRlcywgaGFzVmlkZW8pOwogfQogCi0t
ICh2b2lkKV9zdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cworLSAodm9pZClfcGxheWJhY2tU
YXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZToodWludDY0X3QpY2xpZW50SWQgc3RhdGU6
KFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncylzdGF0ZQogewotICAgIGlm
ICghX3ByaXZhdGUtPnBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIF9kZXZpY2VQ
aWNrZXJdLT5zdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOworICAgIFtzZWxmIF9kZXZp
Y2VQaWNrZXJdLT5wbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKGNsaWVu
dElkLCBzdGF0ZSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAxODMwNjgpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsOSAr
MjcxLDEwIEBAIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld090aGVySW50ZXJuYWwKIAogI2lm
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpICYmIGRl
ZmluZWQoX19jcGx1c3BsdXMpCiAtIChXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyICopIF9k
ZXZpY2VQaWNrZXI7Ci0tICh2b2lkKV9zaG93UGxheWJhY2tUYXJnZXRQaWNrZXI6KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50Jilsb2NhdGlvbiBoYXNWaWRlbzooQk9PTCloYXNWaWRlbzsKLS0gKHZv
aWQpX3N0YXJ0aW5nTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0czsKLS0gKHZvaWQpX3N0b3BNb25p
dG9yaW5nUGxheWJhY2tUYXJnZXRzOworLSAodm9pZClfYWRkUGxheWJhY2tUYXJnZXRQaWNrZXJD
bGllbnQ6KHVpbnQ2NF90KWNsaWVudElkOworLSAodm9pZClfcmVtb3ZlUGxheWJhY2tUYXJnZXRQ
aWNrZXJDbGllbnQ6KHVpbnQ2NF90KWNvbnRleHRJZDsKKy0gKHZvaWQpX3Nob3dQbGF5YmFja1Rh
cmdldFBpY2tlcjoodWludDY0X3QpY29udGV4dElkIGxvY2F0aW9uOihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpbG9jYXRpb24gaGFzVmlkZW86KEJPT0wpaGFzVmlkZW87CistICh2b2lkKV9wbGF5
YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlOih1aW50NjRfdCljb250ZXh0SWQg
c3RhdGU6KFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncylzdGF0ZTsKICNl
bmRpZgogCiBAZW5kCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>