<?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>25043</bug_id>
          
          <creation_ts>2009-04-03 17:20:05 -0700</creation_ts>
          <short_desc>Race condition in MessagePort::clone()</short_desc>
          <delta_ts>2009-06-21 15:56:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrew Wilson">atwilson</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>ap</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>116510</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-04-03 17:20:05 -0700</bug_when>
    <thetext>MessagePort::clone() has a race condition - if someone is posting a message to a MessagePort while it is being cloned by another thread, it&apos;s possible for that message to get left on the now-defunct port which means it is essentially dropped.

There&apos;s a comment in MessagePort::clone() describing where this happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124695</commentid>
    <comment_count>1</comment_count>
      <attachid>31033</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-07 11:54:25 -0700</bug_when>
    <thetext>Created attachment 31033
proposed patch

Refactored the code (again) to enable a multi-process implementation and to pass messages/do GC in a thread-safe manner.

Updated the API to bring it close to the current spec (we still don&apos;t support passing an array of ports to postMessage()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124984</commentid>
    <comment_count>2</comment_count>
      <attachid>31033</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-09 11:29:49 -0700</bug_when>
    <thetext>Comment on attachment 31033
proposed patch

Two initial comments:
1. This patch does a lot more than what the bug says.
2. It is massive.  It would be easier (faster) to review if the individual things were separate patches instead of doing so much in one patch.

One other metanote if you can hide the constructor of classes and instead making them have a create method which passes back PassOwnPtr (or PassRefPtr if that makes sense), that is preferred.

I think it would be good to deal with the MessagePortProxy not deriving from MessagePortProxyBase isse before I look at it further so r- for that issue for now.

Here&apos;s an initial pass just about style issues (I&apos;ll do a more in depth review to understand it and make comments at that level later):

&gt; diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
&gt; index e3c19af..5affab7 100644
&gt; --- a/JavaScriptCore/ChangeLog
&gt; +++ b/JavaScriptCore/ChangeLog
&gt; @@ -1,3 +1,13 @@
&gt; +2009-06-07  Drew Wilson  &lt;atwilson@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Added support for multi-threaded MessagePorts.
&gt; +

Needs link to bug.

&gt; diff --git a/JavaScriptCore/wtf/MessageQueue.h b/JavaScriptCore/wtf/MessageQueue.h
&gt;          MessageQueue() : m_killed(false) {}
Ideally add space { }

&gt; +        bool appendAndCheckEmpty(const DataType&amp;);

This name sounds awkward.  Are there any similar methods in wtf (or WebKit) that could be used as inspiration?

&gt; +    template&lt;typename DataType&gt;
&gt; +    inline bool MessageQueue&lt;DataType&gt;::appendAndCheckEmpty(const DataType&amp; message)
&gt; +    {
&gt; +        MutexLocker lock(m_mutex);
&gt; +        bool empty = m_queue.isEmpty();
wasEmpty seems better especially when it is returned.

&gt; diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
&gt; index 85cc97f..add365a 100644
&gt; --- a/LayoutTests/ChangeLog
&gt; +++ b/LayoutTests/ChangeLog
&gt; @@ -1,3 +1,24 @@
&gt; +2009-06-07  Drew Wilson  &lt;atwilson@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Updated MessageChannel/MessagePorts tests to reflect latest spec (close event has been removed).
&gt; +        Added more tests of port cloning.

Link to bug.

Also some of these &quot;Added&quot; seem like they are copied from other files.  It would be good to acknowledge that.



&gt; diff --git a/LayoutTests/fast/events/message-channel-gc-2.html-disabled b/LayoutTests/fast/events/message-channel-gc-2.html-disabled
&gt; @@ -6,7 +6,7 @@ function gc()
&gt;  {
&gt;      if (window.GCController)
&gt;          return GCController.collect();
&gt; -
&gt; + 
Remove added whitespace.

&gt;      for (var i = 0; i &lt; 10000; i++) { // &gt; force garbage collection (FF requires about 9K allocations before a collect)
I don&apos;t understand the &quot;&gt;&quot; in the comment. (I see this was copied from another place, but it still would be good to fix it if you don&apos;t understand it either.)





&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 19da779..24b3860 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,87 @@
&gt; +2009-06-07  Drew Wilson  &lt;atwilson@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Removed obsolete MessagePort.startConversation(), active and onclose APIs.

Bug link

&gt; +
&gt; +        Refactored MessagePortProxy into MessagePortProxyBase and a platform-dependent MessagePortProxy implementation. Modified APIs to simplify cross-process implementations by moving the messaging code entirely into the platform-dependent proxy.

Usually changelog comments are wrapped to something shorter (see other comments in there).



&gt; diff --git a/WebCore/dom/MessagePort.cpp b/WebCore/dom/MessagePort.cpp
&gt;  MessagePort::MessagePort(ScriptExecutionContext* scriptExecutionContext)
&gt;      : m_entangledPort(0)
&gt;      , m_queueIsOpen(false)
&gt; -    , m_scriptExecutionContext(scriptExecutionContext)
&gt; -    , m_pendingCloseEvent(false)
&gt;  {
&gt; -    if (scriptExecutionContext)
&gt; -        scriptExecutionContext-&gt;createdMessagePort(this);
&gt; +    ASSERT(scriptExecutionContext);
&gt; +    m_scriptExecutionContext = scriptExecutionContext;

Prefer the &quot; , m_scriptExecutionContext(scriptExecutionContext)&quot; style of initialization where possible.
If a variable can never be NULL, use the &amp; style of declaration.



&gt; @@ -128,47 +63,44 @@ void MessagePort::postMessage(const String&amp; message, ExceptionCode&amp; ec)
&gt;  
&gt;  void MessagePort::postMessage(const String&amp; message, MessagePort* dataPort, ExceptionCode&amp; ec)
&gt;  {
&gt; -    if (!m_entangledPort || !m_scriptExecutionContext)
&gt; +    ASSERT(m_scriptExecutionContext);
&gt; +    if (!m_entangledPort)
&gt;          return;
&gt;  
&gt; -    RefPtr&lt;MessagePort&gt; newMessagePort;
&gt; +    PassOwnPtr&lt;MessagePortProxyBase&gt; proxy;
Is it possible to use a OwnPtr here?  (For PassRefPtr they would never be declarated like this.  You would use a RefPtr instead.)


&gt; diff --git a/WebCore/dom/MessagePortProxyBase.h b/WebCore/dom/MessagePortProxyBase.h
&gt; +    class MessagePortProxyBase {

Do you wish to allow this class to be copied?  If no, privately derive from Noncopyable (wtf/Noncopyable.h).  (Think of this just like DISALLOW_COPY_AND_ASSIGN.)


&gt; +    public:
&gt; +
Typically there isn&apos;t a blank line here in WK code.

&gt; +
&gt; +        MessagePortProxyBase(PassRefPtr&lt;MessagePortProxy&gt;);
&gt; +        ~MessagePortProxyBase();
Seems like these should be &quot;protected:&quot;
Typically there *is* a blank line here in WK code (right before private:/protected:).

&gt; +    private:
&gt; +
Typically there isn&apos;t a blank line here in WK code.

&gt; diff --git a/WebCore/dom/default/MessagePortProxy.cpp b/WebCore/dom/default/MessagePortProxy.cpp

&gt; +void MessagePortProxy::setRemotePort(MessagePort* port)
&gt; +{
&gt; +    MutexLocker lock(m_mutex);
&gt; +    // Should never set port if it is already set.
&gt; +    if (port)
&gt; +        ASSERT(!m_remotePort);
&quot;if assert&quot; looks wierd to me at least.

What about
  ASSERT(!port || !m_remotePort);   
instead?

&gt; +
&gt; +void MessagePortProxy::postMessageToRemote(PassRefPtr&lt;MessagePortProxyBase::EventData&gt; msg)
&quot;msg&quot; -&gt; &quot;message&quot;  avoid abbreviations.


&gt; +bool MessagePortProxy::isProxyFor(MessagePort* port)
&gt; +{
&gt; +    RefPtr&lt;MessagePortProxy&gt; remote = entangledProxy();
&gt; +    if (!remote)
&gt; +        return false;
&gt; +    return port == remote-&gt;remotePort();
or 
  return remote &amp;&amp; port == remote-&gt;remotePort()

your choice.

&gt; +void MessagePortProxy::close()
&gt; +{
&gt; +    RefPtr&lt;MessagePortProxy&gt; remote = entangledProxy();
&gt; +    if (remote) {
&gt; +        closeInternal();
&gt; +        remote-&gt;closeInternal();
&gt; +    }

Consider using an early return pattern (which is more preferred in general in WK).

    if (!remote)
        return;
    closeInternal();
    remote-&gt;closeInternal();


&gt; diff --git a/WebCore/dom/default/MessagePortProxy.h b/WebCore/dom/default/MessagePortProxy.h
&gt; +
&gt; +    class MessagePort;
&gt; +
&gt; +    // MessagePortProxy is a platform-dependent interface to the remote side of a message channel.
&gt; +    // This default implementation supports multiple threads running within a single process. Implementations for multi-process platforms should define these public APIs in their own platform-specific MessagePortProxy file.
&gt; +    // The goal of this implementation is to eliminate contention except when cloning or closing the port, so each side of the channel has its own separate mutex.
&gt; +    class MessagePortProxy : public ThreadSafeShared&lt;MessagePortProxy&gt; {

When there is a FooBase, Foo derives from FooBase but that pattern isn&apos;t followed here. Why not? Do the names need to be changed?

&gt; +    public:
&gt; +        // Creates a channel entangling two ports.
&gt; +        static void createChannel(PassRefPtr&lt;MessagePort&gt;, PassRefPtr&lt;MessagePort&gt;);
Nice to add blank line here.

&gt; +        class MessagePortQueue : public ThreadSafeShared&lt;MessagePortQueue&gt;
&gt; +        {
{ is placed incorrectly.


&gt; +        private:
&gt; +            MessagePortQueue() {}
{ } add space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125055</commentid>
    <comment_count>3</comment_count>
      <attachid>31118</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-09 17:38:40 -0700</bug_when>
    <thetext>Created attachment 31118
revised patch

Cleaned up style nits and renamed MessagePortProxyBase-&gt;MessagePortProxyWrapper to better reflect its purpose.

Also added a missing layout test which inexplicably didn&apos;t make it into the patch, but *was* in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125056</commentid>
    <comment_count>4</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-09 17:42:09 -0700</bug_when>
    <thetext>Apologies for the size of this patch, btw. The API changes required to provide a threadsafe implementation were not really possible to make in an incremental fashion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126321</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-16 15:19:28 -0700</bug_when>
    <thetext>As discussed, a better name for MessagePortProxyWrapper would be MesssagePortChannel and MessagePortProxy could be PlatformMessagePortChannel.

A misc comments as I work my way through this:
* You&apos;ll need to fix up other makefiles in addition to the osx one.

&gt; diff --git a/WebCore/dom/MessageChannel.cpp b/WebCore/dom/MessageChannel.cpp
&gt;  
&gt;  MessageChannel::MessageChannel(ScriptExecutionContext* context)

* This instance also cannot be given a null context so it should take a ScriptExecutionContext&amp; as well.

&gt; WebCore/dom/default/MessagePortProxy.h
I don&apos;t think dom is the right place for platform specific items.  Is that where you&apos;re going with the &quot;default&quot; directory?

So (using the new name), PlatformMessagePortChannel should be in a different directory but perhaps we should ask about this on #webkit.


&gt; void MessagePortProxy::createChannel(PassRefPtr&lt;MessagePort&gt; port1, PassRefPtr&lt;MessagePort&gt; port2)
...
&gt;     RefPtr&lt;MessagePortProxy&gt; proxy1 = adoptRef(new MessagePortProxy(queue1, queue2));
Avoid &quot;new Foo()&quot; and instead use create methods as much as possible.

Should be MessagePortProxy::create.

&gt; class MessagePort
... 
&gt;        ScriptExecutionContext* m_scriptExecutionContext;
I would make this a ScriptExecutionContext&amp; since it can never be 0 and you can get rid of a bunch of asserts.

&gt;          class MessagePortQueue ...
&gt;             MessageQueue&lt;RefPtr&lt;MessagePortProxyWrapper::EventData&gt; &gt; m_queue;
RefPtr in a cross thread queue for an object that is RefCounted (a non thread safe ref counting) makes me nervous.

From my cursory inspection, it looks like this could be changed to OwnPtr and EventData would no longer be RefCounter and           EventData::create would return a PassOwnPtr&lt;EventData&gt;.

I&apos;ll have more comments coming but you wanted them streaming as much as possible.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126348</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-16 16:18:31 -0700</bug_when>
    <thetext>&gt; tryGetMessageFromRemote(RefPtr&lt;MessagePortProxyWrapper::EventData&gt;&amp; result)
s/result/message/

In MessagePort.cpp, it is odd that m_queueIsOpen is not set to false after MessagePort::close is called.  Perhaps it should have a different name: m_started?  or even better m_enabled? (which is terminology from the spec).


Other minor very minor nits:
In LayoutTests/fast/events/message-port-clone.html-disabled:
* it would be good to add periods to your comments (in log messages too).
* it switches from indenting by 4 to indenting by 2 spaces.  
* the formatting for things like &quot;channel.port2.onmessage = function(evt)&quot; is inconsistent.  (Sometimes you put the { at the end of the line and sometimes at the beginning of the next line.  I&apos;ve seen both in these js files.  It seems like at the beginning of the next line is more consistent with WebKit in general.)
* var msgIndex = 1;  I&apos;d change it to messageIndex to avoid abbreviations.


General style:
1. Blank line between functions.
2. No blank line after public:, private: but one blank line before them when they are in the middle of the class.

Following these:
Before void MessagePort::contextDestroyed(), there is an extra blank line.
In class MessagePortProxyWrapper, there is an extra blank line after public:
In class MessagePortProxyWrapper::EventData, it would be nice to add a blank line before private:
In class MessagePortProxy::MessagePortQueue, it would be nice to add a blank line before private:

In class MessagePortProxy::MessagePortQueue, the &quot;inline&quot; before each function defined in the class is redundant, so I&apos;d just remove it.

So far the functionality looks great.  I&apos;m almost done.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126356</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-16 16:46:19 -0700</bug_when>
    <thetext>In WebCore/dom/MessagePortProxyWrapper.cpp, there is an extra blank before the &quot;} // namespace WebCore&quot;

Since I asked, I&apos;ll note it that the GC for jsc is handled in JSDOMBinding.cpp in markActiveObjectsForContext.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126360</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-16 17:18:51 -0700</bug_when>
    <thetext>&gt; LayoutTests/fast/events/message-port-clone.html-disabled

Why not post one of the messages before sending along the port? i.e. swap these two lines:
  61 channel.port1.postMessage(&quot;msg&quot;, channel2.port1);
  62 channel2.port2.postMessage(&quot;1&quot;);
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126363</commentid>
    <comment_count>9</comment_count>
      <attachid>31118</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-16 17:25:35 -0700</bug_when>
    <thetext>Comment on attachment 31118
revised patch

Last comment:

&gt; LayoutTests/fast/events/message-port-clone.html-disabled
 var timer = setTimeout(function() {
     log(&quot;FAIL: timeout waiting for message delivery&quot;);
     done();
 }, 1000);
I don&apos;t think it is necessary to set a timeout as the layout test mechanisms will do a timeout.  (I just don&apos;t want the test to fail if someone is running it on heavily loaded machine and has adjusted the timeout in the script accordingly.)


There enough things to address that I&apos;m marking r- for now, but in general it looks really good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126369</commentid>
    <comment_count>10</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-16 17:57:25 -0700</bug_when>
    <thetext>&gt;&gt;  MessageChannel::MessageChannel(ScriptExecutionContext* context)
&gt;
&gt;* This instance also cannot be given a null context so it should take a
&gt;ScriptExecutionContext&amp; as well.

This is pre-existing code. We can address this in a followup patch.

&gt;&gt; WebCore/dom/default/MessagePortProxy.h
&gt;I don&apos;t think dom is the right place for platform specific items.  Is that
&gt;where you&apos;re going with the &quot;default&quot; directory?

I think this is OK - I&apos;m following the pattern under WebCore/page.

&gt;&gt;        ScriptExecutionContext* m_scriptExecutionContext;
&gt;I would make this a ScriptExecutionContext&amp; since it can never be 0 and you can
&gt;get rid of a bunch of asserts.

It can&apos;t be zero at construction time, true, but my intention is that it *can* be set to zero later (I have a pending patch that does more optimal GC which detaches the port from the ScriptExecutionContext when it is cloned to enable it to be GC&apos;d).

&gt;In MessagePort.cpp, it is odd that m_queueIsOpen is not set to false after
&gt;MessagePort::close is called.  Perhaps it should have a different name:
&gt;m_started?  or even better m_enabled? (which is terminology from the spec).

Agreed that &quot;started&quot; is a better name - renamed this API (enabled is not particularly descriptive). I do not set m_started to false when close() is called, because the spec states that existing messages continue to be delivered even though the port has been closed.

&gt;&gt;&gt;
* the formatting for things like &quot;channel.port2.onmessage = function(evt)&quot; is
inconsistent.  (Sometimes you put the { at the end of the line and sometimes at
the beginning of the next line.  I&apos;ve seen both in these js files.  It seems
like at the beginning of the next line is more consistent with WebKit in
general.)
&lt;&lt;&lt;
I wasn&apos;t sure what the style was originally, so I looked through other examples. It seems that the WebKit style differs depending on how the function is defined.

When defining a top-level function, the brace should be on a line by itself:

function foo()
{
   ...do stuff...
}

When defining an inline function, it should be on the same line
  setTimeout(function() {
      ...do stuff...
  }, 100);

This is just what I&apos;ve gathered from other test files and I&apos;ve tried to mimic that style. So I think the code is correctly formatted, but I&apos;m happy to change it if I&apos;m wrong.

I&apos;ve addressed the other comments locally - I&apos;ll upload a patch shortly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126389</commentid>
    <comment_count>11</comment_count>
      <attachid>31400</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-16 22:32:39 -0700</bug_when>
    <thetext>Created attachment 31400
Proposed patch addressing Levin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126399</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-16 23:55:12 -0700</bug_when>
    <thetext>This looks good to me.  I have only 5 very trivial comments.

1. 
It looks like you put spaces in WebCore/GNUmakefile.am where there should be tabs.

2. 
WebCore/dom/MessagePort.cpp
157         RefPtr&lt;Event&gt; evt = MessageEvent::create(eventData-&gt;message(), &quot;&quot;, &quot;&quot;, 0, port);
It would be just slightly better to to port.release().

3.
It looks like there is an extra blank line before void MessagePort::contextDestroyed().

4.
In WebCore/dom/default/PlatformMessagePortChannel.h
  bool tryGetMessage(OwnPtr&lt;MessagePortChannel::EventData&gt;&amp; result)

I think &quot;message&quot; would be better than&quot; result&quot;.

5. 
Two parts:
  In WebCore/page/DOMWindow.cpp,
    PassRefPtr&lt;MessageEvent&gt; event(ScriptExecutionContext* document)
    {
I&apos;d recommend &quot;context&quot; instead of &quot;document&quot; since you don&apos;t seem to rely on it being a document.


        PassRefPtr&lt;MessagePort&gt; messagePort;
should be
       RefPtr&lt;MessagePort&gt; messagePort;
(and then do a release() like in #2 when creating the MessageEvent).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126488</commentid>
    <comment_count>13</comment_count>
      <attachid>31420</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-17 10:46:58 -0700</bug_when>
    <thetext>Created attachment 31420
Reflecting Levin&apos;s latest comment&apos;s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126729</commentid>
    <comment_count>14</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-18 10:31:41 -0700</bug_when>
    <thetext>Also, I have a patch which restores the optimal same-thread-GC behavior (https://bugs.webkit.org/show_bug.cgi?id=26448). If it&apos;s possible to land both patches simultaneously I&apos;d appreciate it, as it makes the Chromium merge much simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126799</commentid>
    <comment_count>15</comment_count>
      <attachid>31420</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-18 15:57:04 -0700</bug_when>
    <thetext>Comment on attachment 31420
Reflecting Levin&apos;s latest comment&apos;s

Looks good. 

This change has progressed hugely, and I believe addresses the former concerns about lock contention.

As discussed with ap, if he has any comments in the future, you&apos;ll address them then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126800</commentid>
    <comment_count>16</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-18 15:57:22 -0700</bug_when>
    <thetext>Assigned to levin for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127247</commentid>
    <comment_count>17</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-21 14:34:32 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/44915
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127254</commentid>
    <comment_count>18</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-21 15:56:40 -0700</bug_when>
    <thetext>Follow up build fixes:
http://trac.webkit.org/changeset/44917
http://trac.webkit.org/changeset/44918
http://trac.webkit.org/changeset/44919
http://trac.webkit.org/changeset/44921
http://trac.webkit.org/changeset/44922
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31033</attachid>
            <date>2009-06-07 11:54:25 -0700</date>
            <delta_ts>2009-06-09 17:38:40 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>74677</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBlM2MxOWFmLi41YWZmYWI3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMDktMDYtMDcgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBzdXBwb3J0
IGZvciBtdWx0aS10aHJlYWRlZCBNZXNzYWdlUG9ydHMuCisKKyAgICAgICAqIHd0Zi9NZXNzYWdl
UXVldWUuaDoKKyAgICAgICAgKFdURjo6OjphcHBlbmRBbmRDaGVja0VtcHR5KToKKyAgICAgICAg
ICAgIEFkZGVkIEFQSSB0byB0ZXN0IHdoZXRoZXIgdGhlIHF1ZXVlIHdhcyBlbXB0eSBiZWZvcmUg
YWRkaW5nIGFuIGVsZW1lbnQuCisKIDIwMDktMDYtMDUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFy
cmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1ZGRlciBzdGFtcGVkIGJ5IFNhbSBXZWlu
aWcuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggYi9KYXZh
U2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmgKaW5kZXggOTU0OWYzNy4uY2ZjOTYyYyAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaApAQCAtNTAsNiArNTAsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgTWVzc2FnZVF1ZXVlKCkgOiBtX2tpbGxlZChmYWxzZSkge30KICAgICAgICAg
CiAgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IERhdGFUeXBlJik7CisgICAgICAgIGJvb2wgYXBw
ZW5kQW5kQ2hlY2tFbXB0eShjb25zdCBEYXRhVHlwZSYpOwogICAgICAgICB2b2lkIHByZXBlbmQo
Y29uc3QgRGF0YVR5cGUmKTsKICAgICAgICAgYm9vbCB3YWl0Rm9yTWVzc2FnZShEYXRhVHlwZSYp
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+CkBAIC04MSw2ICs4MiwxNyBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgbV9jb25kaXRpb24uc2lnbmFsKCk7CiAgICAgfQog
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBxdWV1ZSB3YXMgZW1wdHkgYmVmb3JlIHRoZSBp
dGVtIHdhcyBhZGRlZC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KKyAgICBpbmxp
bmUgYm9vbCBNZXNzYWdlUXVldWU8RGF0YVR5cGU+OjphcHBlbmRBbmRDaGVja0VtcHR5KGNvbnN0
IERhdGFUeXBlJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211
dGV4KTsKKyAgICAgICAgYm9vbCBlbXB0eSA9IG1fcXVldWUuaXNFbXB0eSgpOworICAgICAgICBt
X3F1ZXVlLmFwcGVuZChtZXNzYWdlKTsKKyAgICAgICAgbV9jb25kaXRpb24uc2lnbmFsKCk7Cisg
ICAgICAgIHJldHVybiBlbXB0eTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRh
VHlwZT4KICAgICBpbmxpbmUgdm9pZCBNZXNzYWdlUXVldWU8RGF0YVR5cGU+OjpwcmVwZW5kKGNv
bnN0IERhdGFUeXBlJiBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4NWNjOTdmLi5hZGQzNjVhIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDktMDYtMDcgIERyZXcgV2lsc29uICA8YXR3aWxzb25A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVcGRhdGVkIE1lc3NhZ2VDaGFubmVsL01lc3NhZ2VQb3J0cyB0ZXN0cyB0byByZWZsZWN0
IGxhdGVzdCBzcGVjIChjbG9zZSBldmVudCBoYXMgYmVlbiByZW1vdmVkKS4KKyAgICAgICAgQWRk
ZWQgbW9yZSB0ZXN0cyBvZiBwb3J0IGNsb25pbmcuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9t
ZXNzYWdlLWNoYW5uZWwtZ2MtMi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9ldmVudHMv
bWVzc2FnZS1jaGFubmVsLWdjLTIuaHRtbC1kaXNhYmxlZDoKKyAgICAgICAgKiBmYXN0L2V2ZW50
cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9ldmVu
dHMvbWVzc2FnZS1jaGFubmVsLWdjLTMuaHRtbC1kaXNhYmxlZDoKKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZXZl
bnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5odG1sLWRpc2FibGVkOgorICAgICAgICAqIGZhc3QvZXZl
bnRzL21lc3NhZ2UtcG9ydC1jbG9uZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1jbG9uZS5odG1sLWRpc2FibGVkOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZh
c3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1uby13cmFwcGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW9uY2xvc2UtZXhwZWN0ZWQudHh0OiBS
ZW1vdmVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1vbmNsb3NlLmh0bWwt
ZGlzYWJsZWQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0Lmh0
bWwtZGlzYWJsZWQ6CisKIDIwMDktMDYtMDYgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTItZXhwZWN0ZWQudHh0CmluZGV4
IGM1YWZhNjAuLjY1YjgwODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21l
c3NhZ2UtY2hhbm5lbC1nYy0yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMi1leHBlY3RlZC50eHQKQEAgLTEsNSArMSw0IEBACiBU
ZXN0IHRoYXQgTWVzc2FnZVBvcnQgY2xvc2UgZXZlbnQgZ2V0cyBkZWxpdmVyZWQgKHdpdGhvdXQg
Y3Jhc2hpbmcpIGV2ZW4gaWYgdGhlIGNoYW5uZWwgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVk
LgogCi1vbmNsb3NlCi1jbG9zZSBsaXN0ZW5lcgorRE9ORQogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMi5odG1sLWRpc2FibGVkIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTIuaHRtbC1kaXNhYmxlZApp
bmRleCBlMGI3MzQ3Li42ZTRjYWMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMi5odG1sLWRpc2FibGVkCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLmh0bWwtZGlzYWJsZWQKQEAgLTYsNyArNiw3
IEBAIGZ1bmN0aW9uIGdjKCkKIHsKICAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKICAgICAg
ICAgcmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7Ci0KKyAKICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyBpKyspIHsgLy8gPiBmb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJl
cXVpcmVzIGFib3V0IDlLIGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3QpCiAgICAgICAgIHZh
ciBzID0gbmV3IFN0cmluZygiYWJjIik7CiAgICAgfQpAQCAtMjQsOSArMjQsNiBAQCBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAKIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VD
aGFubmVsOwogCi1jaGFubmVsLnBvcnQxLm9uY2xvc2UgPSBmdW5jdGlvbigpIHsgbG9nKCJvbmNs
b3NlIik7IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsgZ2MoKTsgfSwgMCkgfQot
Y2hhbm5lbC5wb3J0MS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsIGZ1bmN0aW9uKCkgeyBsb2co
ImNsb3NlIGxpc3RlbmVyIik7IGdjKCk7IH0sIGZhbHNlKTsKLQogZ2MoKTsKIGNoYW5uZWwucG9y
dDEuc3RhcnQoKTsKIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoIm1zZyIpOwpAQCAtMzUsNyAr
MzIsMTUgQEAgZ2MoKTsKIGNoYW5uZWwucG9ydDEuY2xvc2UoKTsKIGNoYW5uZWwucG9ydDIuY2xv
c2UoKTsKIGdjKCk7CisKK3NldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgbG9nKCJET05FIik7
CisgICAgZ2MoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9LCAwKTsKIGNoYW5uZWwgPSBu
ZXcgTWVzc2FnZUNoYW5uZWw7CiBnYygpOworCiA8L3NjcmlwdD4KIDwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLWV4cGVj
dGVkLnR4dAppbmRleCBhYTliYjVkLi44YWY4OTI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTMtZXhwZWN0ZWQudHh0CkBAIC0z
LDUgKzMsNSBAQCBUZXN0IHRoYXQgTWVzc2FnZVBvcnQgbWVzc2FnZXMgYXJlIGRlbGl2ZXJlZCBl
dmVuIGlmIGJvdGggcG9ydHMgYXJlIGluYWNjZXNzaWJsZQogU2hvdWxkIHNheSBQQVNTIHR3aWNl
LgogCiBQQVNTOiBtZXNzYWdlIGRlbGl2ZXJlZC4gUG9ydDogW29iamVjdCBNZXNzYWdlUG9ydF0K
LVBBU1M6IGNsb3NlIG1lc3NhZ2UgZGVsaXZlcmVkLiBQb3J0OiBbb2JqZWN0IE1lc3NhZ2VQb3J0
XQorUEFTUzogcG9ydCBjbG9zZWQuCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMy5odG1sLWRpc2FibGVkCmluZGV4IGYxNTg2N2Yu
LmI5MDZhYTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hh
bm5lbC1nYy0zLmh0bWwtZGlzYWJsZWQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1jaGFubmVsLWdjLTMuaHRtbC1kaXNhYmxlZApAQCAtMjgsNyArMjgsNiBAQCBmdW5jdGlv
biB0ZXN0MSgpCiAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CiAgICAgCiAg
ICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsgbG9nKCJQQVNTOiBt
ZXNzYWdlIGRlbGl2ZXJlZC4gUG9ydDogIiArIGV2dC50YXJnZXQpOyB0ZXN0MigpOyB9Ci0gICAg
Y2hhbm5lbC5wb3J0MS5zdGFydCgpOwogICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoIm1z
ZyIpOwogICAgIAogICAgIGNoYW5uZWwgPSAwOwpAQCAtMzksMTEgKzM4LDEzIEBAIGZ1bmN0aW9u
IHRlc3QyKCkKIHsKICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKICAgICAK
LSAgICBjaGFubmVsLnBvcnQxLm9uY2xvc2UgPSBmdW5jdGlvbihldnQpIHsgbG9nKCJQQVNTOiBj
bG9zZSBtZXNzYWdlIGRlbGl2ZXJlZC4gUG9ydDogIiArIGV2dC50YXJnZXQpOyBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
IH0KICAgICBjaGFubmVsLnBvcnQyLmNsb3NlKCk7CiAgICAgCiAgICAgY2hhbm5lbCA9IDA7CiAg
ICAgZ2MoKTsKKyAgICBsb2coIlBBU1M6IHBvcnQgY2xvc2VkLiIpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKIH0KIAogdGVzdDEoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL21lc3NhZ2UtY2hhbm5lbC1nYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtZXhwZWN0ZWQudHh0CmluZGV4IDU0Yzc1ZTAuLjk0OGYz
Y2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1n
Yy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFu
bmVsLWdjLWV4cGVjdGVkLnR4dApAQCAtMyw2ICszLDUgQEAgVGVzdCBzb21lIGNhc2VzIG9mIE1l
c3NhZ2VQb3J0IGdhcmJhZ2UgY29sbGVjdGlvbi4KIFNob3VsZCBiZSAnYmFyJzogYmFyCiBvbm1l
c3NhZ2UKIG1lc3NhZ2UgbGlzdGVuZXIKLW9uY2xvc2UKLWNsb3NlIGxpc3RlbmVyCitET05FCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5o
dG1sLWRpc2FibGVkIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdj
Lmh0bWwtZGlzYWJsZWQKaW5kZXggNWU0OWU5ZC4uY2FhMTA4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwtZGlzYWJsZWQKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwtZGlzYWJsZWQK
QEAgLTI5LDggKzI5LDYgQEAgZ2MoKTsKIGxvZygiU2hvdWxkIGJlICdiYXInOiAiICsgY2hhbm5l
bC5wb3J0MS5mb28pOwogCiBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeyBs
b2coIm9ubWVzc2FnZSIpOyB9Ci1jaGFubmVsLnBvcnQxLm9uY2xvc2UgPSBmdW5jdGlvbigpIHsg
bG9nKCJvbmNsb3NlIik7IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKSB9LCAwKSB9
Ci1jaGFubmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIiwgZnVuY3Rpb24oKSB7IGxv
ZygiY2xvc2UgbGlzdGVuZXIiKTsgfSwgZmFsc2UpOwogY2hhbm5lbC5wb3J0MS5hZGRFdmVudExp
c3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24oKSB7IGxvZygibWVzc2FnZSBsaXN0ZW5lciIpOyB9
LCBmYWxzZSk7CiAKIGdjKCk7CkBAIC00Miw1ICs0MCwxMiBAQCBjaGFubmVsLnBvcnQxLmNsb3Nl
KCk7CiBjaGFubmVsLnBvcnQyLmNsb3NlKCk7CiAKIGdjKCk7CisKK3NldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgbG9nKCJET05FIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpCit9LCAwKTsK
KwogPC9zY3JpcHQ+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9tZXNzYWdlLXBvcnQtY2xvbmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvbWVzc2FnZS1wb3J0LWNsb25lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40ZTU1NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbWVzc2FnZS1wb3J0LWNsb25lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBA
CitUZXN0cyB2YXJpb3VzIHVzZSBjYXNlcyB3aGVuIGNsb25pbmcgTWVzc2FnZVBvcnRzLgorCitT
aG91bGQgYmUgYSBzZXJpZXMgb2YgU1VDQ0VTUyBtZXNzYWdlcywgZm9sbG93ZWQgd2l0aCBET05F
LgorCitTVUNDRVNTOiBQb3N0aW5nIHBvcnQgdG8gaXRzZWxmCitTVUNDRVNTOiBQb3N0aW5nIGVu
dGFuZ2xlZCBwb3J0CitTVUNDRVNTOiBQb3N0aW5nIGNsb25lZCBwb3J0CitTVUNDRVNTOiBQb3N0
ZWQgbWVzc2FnZXMgdG8gY2xvbmVkIHBvcnQKK1NVQ0NFU1M6IENsb25lZCBib3RoIGVuZHBvaW50
cyBvZiBhIGNoYW5uZWwKK1NVQ0NFU1M6IEdvdCBjbG9zZWQgcG9ydCB3aXRoIGV2ZW50IG1lc3Nh
Z2UgY2xvc2VkCitET05FCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21l
c3NhZ2UtcG9ydC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdl
LXBvcnQtZXhwZWN0ZWQudHh0CmluZGV4IDQ3OWIzMTQuLmM5YmY2MzYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWV4cGVjdGVkLnR4dApAQCAtNCw4ICs0
LDcgQEAgU2hvdWxkIGJlIGEgc2VyaWVzIG9mIFNVQ0NFU1MgbWVzc2FnZXMsIGZvbGxvd2VkIHdp
dGggRE9ORS4KIAogU2ltcGxlIGV4Y2hhbmdlOiBTVUNDRVNTCiBQb3N0ZWQgcG9ydDogU1VDQ0VT
UwotQ29udmVyc2F0aW9uOiBTVUNDRVNTCi1BIHBvcnQgaXMgYWN0aXZlOiBTVUNDRVNTCi1BIGNs
b3NlZCBwb3J0IGlzIGluYWN0aXZlOiBTVUNDRVNTCitFdmVudCBMaXN0ZW5lcjogU1VDQ0VTUwor
Q2xvc2VkIHBvcnQ6IFNVQ0NFU1MKIERPTkUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbWVzc2FnZS1wb3J0LW5vLXdyYXBwZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW5vLXdyYXBwZXItZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYWJkNDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtbm8td3JhcHBlci1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw0IEBACitUZXN0IHRoYXQgZGVsaXZlcmluZyBhIG1lc3NhZ2UgdG8g
YSBwb3J0IHRoYXQgd2FzIG5ldmVyIHJlZmVyZW5jZWQgZnJvbSBKUyBkb2Vzbid0IGNhdXNlIGEg
Y3Jhc2guCisKK1BBU1MKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0LW9uY2xvc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bWVzc2FnZS1wb3J0LW9uY2xvc2UtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3M2M1ZTBkLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21l
c3NhZ2UtcG9ydC1vbmNsb3NlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAs
MCBAQAotVGVzdCB0aGF0IGNsb3NlIGV2ZW50IGhhbmRsZXIgaXMgaW52b2tlZCB3aGVuIGEgTWVz
c2FnZVBvcnQgaXMgY2xvc2VkLgotCi1QQVNTCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1vbmNsb3NlLmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtb25jbG9zZS5odG1sLWRpc2FibGVkCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmQ1YmZhLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1vbmNsb3NlLmh0bWwtZGlzYWJsZWQKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPGJvZHk+Ci08cD5UZXN0IHRoYXQgY2xvc2UgZXZlbnQg
aGFuZGxlciBpcyBpbnZva2VkIHdoZW4gYSBNZXNzYWdlUG9ydCBpcyBjbG9zZWQuPC9wPgotPHBy
ZSBpZD1sb2c+PC9wcmU+Ci08c2NyaXB0PgotZnVuY3Rpb24gZ2MoKQotewotICAgIGlmICh3aW5k
b3cuR0NDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxlY3QoKTsK
LQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeyAvLyA+IGZvcmNlIGdhcmJh
Z2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlvbnMgYmVmb3JlIGEg
Y29sbGVjdCkKLSAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCJhYmMiKTsKLSAgICB9Ci19Ci0K
LWZ1bmN0aW9uIGxvZyhtZXNzYWdlKQotewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
b2ciKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKLX0KLQotaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgewotICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci19Ci0KLWZ1bmN0
aW9uIHRlc3QoKQotewotICAgIC8vIFNpbmdsZSBmcmFtZS4KLSAgICB2YXIgY2hhbm5lbCA9IG5l
dyBNZXNzYWdlQ2hhbm5lbDsKLSAgICB2YXIgY2xvc2VDb3VudCA9IDA7Ci0gICAgZnVuY3Rpb24g
b25jbG9zZSgpCi0gICAgewotICAgICAgICArK2Nsb3NlQ291bnQ7Ci0gICAgICAgIGlmIChjbG9z
ZUNvdW50ID09IDQpCi0gICAgICAgICAgICB0ZXN0MigpOwotICAgIH0KLQotICAgIGNoYW5uZWwu
cG9ydDEub25jbG9zZSA9IG9uY2xvc2U7Ci0gICAgY2hhbm5lbC5wb3J0Mi5vbmNsb3NlID0gb25j
bG9zZTsKLSAgICBjaGFubmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIiwgb25jbG9z
ZSwgZmFsc2UpOwotICAgIGNoYW5uZWwucG9ydDIuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBv
bmNsb3NlLCBmYWxzZSk7Ci0gICAgCi0gICAgZ2MoKTsKLSAgICBjaGFubmVsLnBvcnQxLnN0YXJ0
KCk7Ci0gICAgY2hhbm5lbC5wb3J0Mi5zdGFydCgpOwotICAgIGNoYW5uZWwucG9ydDEuY2xvc2Uo
KTsKLX0KLQotZnVuY3Rpb24gdGVzdDIoKQotewotICAgIC8vIENyb3NzLWZyYW1lLgotICAgIHZh
ciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsOwotICAgIHdpbmRvdy5mcmFtZXNbMF0ucG9z
dE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwucG9ydDIsICIqIik7Ci0KLSAgICB2YXIgbWFpblBvcnQg
PSBjaGFubmVsLnBvcnQxOwotICAgIG1haW5Qb3J0LnN0YXJ0KCk7Ci0KLSAgICB2YXIgY2xvc2VD
b3VudCA9IDA7Ci0gICAgZnVuY3Rpb24gb25jbG9zZSgpCi0gICAgewotICAgICAgICArK2Nsb3Nl
Q291bnQ7Ci0gICAgICAgIGlmIChjbG9zZUNvdW50ID09IDIpCi0gICAgICAgICAgICB0ZXN0Mygp
OwotICAgIH0KLQotICAgIG1haW5Qb3J0LnBvc3RNZXNzYWdlKCJjbG9zZVBvcnQiKTsKLSAgICBt
YWluUG9ydC5vbmNsb3NlID0gb25jbG9zZTsKLSAgICBtYWluUG9ydC5hZGRFdmVudExpc3RlbmVy
KCJjbG9zZSIsIG9uY2xvc2UsIGZhbHNlKTsKLSAgICBnYygpOwotfQotCi1mdW5jdGlvbiB0ZXN0
MygpCi17Ci0gICAgLy8gRG9jdW1lbnQgZGVzdHJveWVkLgotICAgIHZhciBjaGFubmVsID0gbmV3
IE1lc3NhZ2VDaGFubmVsOwotICAgIHdpbmRvdy5mcmFtZXNbMF0ucG9zdE1lc3NhZ2UoIm1zZyIs
IGNoYW5uZWwucG9ydDIsICIqIik7Ci0KLSAgICB2YXIgbWFpblBvcnQgPSBjaGFubmVsLnBvcnQx
OwotICAgIG1haW5Qb3J0LnN0YXJ0KCk7Ci0KLSAgICB2YXIgY2xvc2VDb3VudCA9IDA7Ci0gICAg
ZnVuY3Rpb24gb25jbG9zZSgpCi0gICAgewotICAgICAgICArK2Nsb3NlQ291bnQ7Ci0gICAgICAg
IGxvZygiRkFJTDogdW5leHBlY3RlZCBjbG9zZSBldmVudCBmcm9tIGRvY3VtZW50IGRlc3RydWN0
aW9uLiIpOwotICAgIH0KLQotICAgIG1haW5Qb3J0LnBvc3RNZXNzYWdlKCJjbG9zZUZyYW1lIik7
Ci0gICAgbWFpblBvcnQub25jbG9zZSA9IG9uY2xvc2U7Ci0gICAgbWFpblBvcnQuYWRkRXZlbnRM
aXN0ZW5lcigiY2xvc2UiLCBvbmNsb3NlLCBmYWxzZSk7Ci0gICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYgKGNsb3NlQ291bnQgPT0gMCkKLSAgICAgICAgICAgIGxvZygiUEFT
UyIpOwotICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotICAgIH0sIDUwKTsKLQotICAg
IGdjKCk7Ci19Ci08L3NjcmlwdD4KLTxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvbWVzc2FnZS1wb3J0
LWlmcmFtZS5odG1sIiBvbmxvYWQ9InRlc3QoKSI+PC9pZnJhbWU+Ci08L2JvZHk+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQuaHRtbC1kaXNhYmxlZCBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC5odG1sLWRpc2FibGVkCmluZGV4
IDBmNGFiMTUuLjYyZThlOTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21l
c3NhZ2UtcG9ydC5odG1sLWRpc2FibGVkCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21l
c3NhZ2UtcG9ydC5odG1sLWRpc2FibGVkCkBAIC0yOCw3ICsyOCw2IEBAIGZ1bmN0aW9uIHRlc3Qo
KQogICAgICAgICAgICAgbG9nKCJTaW1wbGUgZXhjaGFuZ2U6IEZBSUwuIEdvdCBtZXNzYWdlICci
ICsgZXZ0LmRhdGEgKyAiJyBmcm9tICciICsgZXZ0Lm9yaWdpbiArICInLiIpOwogICAgICAgICB0
ZXN0MigpOwogICAgIH07Ci0gICAgbWFpblBvcnQuc3RhcnQoKTsKIH0KIAogZnVuY3Rpb24gdGVz
dDIoKQpAQCAtNDIsMzQgKzQxLDQ2IEBAIGZ1bmN0aW9uIHRlc3QyKCkKICAgICAgICAgICAgIGxv
ZygiUG9zdGVkIHBvcnQ6IEZBSUwuIEdvdCBtZXNzYWdlICciICsgZXZ0LmRhdGEgKyAiJyBmcm9t
ICciICsgZXZ0Lm9yaWdpbiArICInLiIpOwogICAgICAgICB0ZXN0MygpOwogICAgIH07Ci0gICAg
Y2hhbm5lbC5wb3J0MS5zdGFydCgpOwogfQogCiBmdW5jdGlvbiB0ZXN0MygpCiB7Ci0gICAgdmFy
IHBvcnQgPSBtYWluUG9ydC5zdGFydENvbnZlcnNhdGlvbigibmV3Q29udmVyc2F0aW9uIik7Ci0g
ICAgcG9ydC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKLSAgICAgICAgaWYgKGV2dC5kYXRh
ID09ICJoZXkiICYmIGV2dC5vcmlnaW4gPT0gIiIpCi0gICAgICAgICAgICBsb2coIkNvbnZlcnNh
dGlvbjogU1VDQ0VTUyIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2coIkNvbnZlcnNh
dGlvbjogRkFJTC4gR290IG1lc3NhZ2UgJyIgKyBldnQuZGF0YSArICInIGZyb20gJyIgKyBldnQu
b3JpZ2luICsgIicuIik7Ci0gICAgICAgIHRlc3Q0KCk7Ci0gICAgfTsKLSAgICBwb3J0LnN0YXJ0
KCk7CisgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CisgICAgY2hhbm5lbC5w
b3J0MS5wb3N0TWVzc2FnZSgiMSIpOworICAgIHZhciBzdGFydGVkID0gZmFsc2U7CisgICAgY2hh
bm5lbC5wb3J0Mi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24oZXZ0KSB7Cisg
ICAgICAgIGlmIChzdGFydGVkKSB7CisgICAgICAgICAgICBsb2coIkV2ZW50IExpc3RlbmVyOiBT
VUNDRVNTIik7CisgICAgICAgICAgICB0ZXN0NCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGxvZygiRXZlbnQgTGlzdGVuZXI6IEZBSUwuIEV2ZW50IGxpc3RlbmVyIGNhbGxlZCBiZWZv
cmUgc3RhcnQoKSIpOworICAgfSk7CisgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
Y2hhbm5lbC5wb3J0Mi5zdGFydCgpOworICAgICAgc3RhcnRlZCA9IHRydWU7CisgICB9LCAxMDAp
OworICAgIAogfQogCiBmdW5jdGlvbiB0ZXN0NCgpCiB7Ci0gICAgbG9nKCJBIHBvcnQgaXMgYWN0
aXZlOiAiICsgKG1haW5Qb3J0LmFjdGl2ZSA/ICJTVUNDRVNTIiA6ICJGQUlMIikpOwotCi0gICAg
bWFpblBvcnQuY2xvc2UoKTsKLQotICAgIGxvZygiQSBjbG9zZWQgcG9ydCBpcyBpbmFjdGl2ZTog
IiArIChtYWluUG9ydC5hY3RpdmUgPyAiRkFJTCIgOiAiU1VDQ0VTUyIpKTsKKyAgICB2YXIgY2hh
bm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICBjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdl
KCIxIik7CisgICAgY2hhbm5lbC5wb3J0MS5jbG9zZSgpOworICAgIGNoYW5uZWwucG9ydDEucG9z
dE1lc3NhZ2UoIjIiKTsKKyAgICBjaGFubmVsLnBvcnQyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2
dCkgeworICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gIjEiKQorICAgICAgICAgICAgbG9nKCJDbG9z
ZWQgcG9ydDogU1VDQ0VTUyIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIkNsb3Nl
ZCBwb3J0OiBGQUlMLiBHb3QgbWVzc2FnZTogIiArIGV2dC5kYXRhICsgIiBhZnRlciBjbG9zZSIp
OworICAgIH0KIAotICAgIGxvZygiRE9ORSIpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgIGxvZygiRE9ORSIpOwogCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0sIDEwMCk7CiB9CiAKIDwvc2NyaXB0Pgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAx
OWRhNzc5Li4yNGIzODYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDA5LTA2LTA3ICBEcmV3IFdpbHNvbiAg
PGF0d2lsc29uQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVtb3ZlZCBvYnNvbGV0ZSBNZXNzYWdlUG9ydC5zdGFydENvbnZlcnNh
dGlvbigpLCBhY3RpdmUgYW5kIG9uY2xvc2UgQVBJcy4KKworICAgICAgICBSZWZhY3RvcmVkIE1l
c3NhZ2VQb3J0UHJveHkgaW50byBNZXNzYWdlUG9ydFByb3h5QmFzZSBhbmQgYSBwbGF0Zm9ybS1k
ZXBlbmRlbnQgTWVzc2FnZVBvcnRQcm94eSBpbXBsZW1lbnRhdGlvbi4gTW9kaWZpZWQgQVBJcyB0
byBzaW1wbGlmeSBjcm9zcy1wcm9jZXNzIGltcGxlbWVudGF0aW9ucyBieSBtb3ZpbmcgdGhlIG1l
c3NhZ2luZyBjb2RlIGVudGlyZWx5IGludG8gdGhlIHBsYXRmb3JtLWRlcGVuZGVudCBwcm94eS4K
KworICAgICAgICBDcmVhdGVkIGEgdGhyZWFkLXNhZmUgZGVmYXVsdCBNZXNzYWdlUG9ydFByb3h5
IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIENoYW5nZWQgRE9NV2luZG93IG1lc3NhZ2luZyB0
byBjcmVhdGUgdGhlIE1lc3NhZ2VFdmVudCBpbiB0aGUgdGFyZ2V0IFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgdG8gbWF0Y2ggaG93IGNyb3NzLXRocmVhZCBNZXNzYWdlUG9ydHMgd29yay4KKyAgICAg
ICAgCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9y
dDo6bWFyayk6CisgICAgICAgICAgICBDaGFuZ2VkIHBvcnRzIHRvIG5vdCBtYXJrIHRoZWlyIGVu
dGFuZ2xlZCBwYWlyIGFzIHJlYWNoYWJsZSwgcGVyIHRoZSBzcGVjLgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBkb20vTWVz
c2FnZUNoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUNoYW5uZWw6Ok1lc3Nh
Z2VDaGFubmVsKToKKyAgICAgICAgICAgIFVwZGF0ZWQgdG8gdXNlIE1lc3NhZ2VQb3J0UHJveHk6
OmNyZWF0ZUNoYW5uZWwoKSB0byBlbnRhbmdsZSB0aGUgcG9ydHMuCisgICAgICAgICogZG9tL01l
c3NhZ2VQb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpNZXNzYWdlUG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6fk1lc3NhZ2VQb3J0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBv
cnQ6Om1lc3NhZ2VBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpjbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6
OmRpc3BhdGNoTWVzc2FnZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnNldE9u
bWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6aGFzUGVuZGluZ0FjdGl2
aXR5KToKKyAgICAgICAgICAgIENoYW5nZWQgdGhlc2UgQVBJcyB0byBkZWxlZ2F0ZSB0byBuZXcg
TWVzc2FnZVBvcnRQcm94eSBBUElzCisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0Lmg6CisgICAg
ICAgICogZG9tL01lc3NhZ2VQb3J0LmlkbDoKKyAgICAgICAgICAgIFJlbW92ZWQgc3RhcnRDb252
ZXJzYXRpb24gYW5kIG9uY2xvc2UKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnRQcm94eS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydFByb3h5QmFzZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eUJhc2U6OkV2ZW50RGF0YTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHlCYXNlOjpFdmVudERhdGE6OkV2
ZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5QmFzZTo6fk1lc3Nh
Z2VQb3J0UHJveHlCYXNlKToKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnRQcm94eUJhc2UuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5QmFzZTo6RXZlbnREYXRh
OjptZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHlCYXNlOjpFdmVu
dERhdGE6OnByb3h5KToKKyAgICAgICAgICAgICBDaGFuZ2VkIEV2ZW50RGF0YSB0byBob2xkIGEg
cmVmZXJlbmNlIHRvIGEgTWVzc2FnZVBvcnRQcm94eSBvYmplY3QgaW5zdGVhZCBvZiBhIE1lc3Nh
Z2VQb3J0IHRvIGVuYWJsZSBjcm9zcy10aHJlYWQgbWVzc2FnaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZVBvcnRQcm94eUJhc2U6Ok1lc3NhZ2VQb3J0UHJveHlCYXNlKToKKyAgICAgICAq
IGRvbS9kZWZhdWx0L01lc3NhZ2VQb3J0UHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lc3NhZ2VQb3J0UHJveHlCYXNlOjplbnRhbmdsZUlmT3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpNZXNzYWdlUG9ydFByb3h5QmFzZTo6ZGlzZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZVBvcnRQcm94eUJhc2U6OnBvc3RNZXNzYWdlVG9SZW1vdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eUJhc2U6OnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHlCYXNlOjpjbG9zZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5QmFzZTo6aXNQcm94eUZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5QmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6Ok1lc3NhZ2VQb3J0UHJveHkpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eTo6fk1lc3NhZ2VQb3J0UHJveHkpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eTo6Y3JlYXRlQ2hhbm5lbCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5OjplbnRhbmdsZUlmT3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpNZXNzYWdlUG9ydFByb3h5OjpkaXNlbnRhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlUG9ydFByb3h5OjpzZXRSZW1vdGVQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3Nh
Z2VQb3J0UHJveHk6OnJlbW90ZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQ
cm94eTo6ZW50YW5nbGVkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94
eTo6c2V0RW50YW5nbGVkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94
eTo6cG9zdE1lc3NhZ2VUb1JlbW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFBy
b3h5Ojp0cnlHZXRNZXNzYWdlRnJvbVJlbW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
UG9ydFByb3h5Ojppc1Byb3h5Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJv
eHk6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6OmNsb3NlSW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eTo6aGFzUGVuZGluZ0Fj
dGl2aXR5KToKKyAgICAgICAgKiBkb20vZGVmYXVsdC9NZXNzYWdlUG9ydFByb3h5Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eTo6TWVzc2FnZVBvcnRRdWV1ZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6Ok1lc3NhZ2VQb3J0
UXVldWU6OnRyeUdldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94
eTo6TWVzc2FnZVBvcnRRdWV1ZTo6YXBwZW5kQW5kQ2hlY2tFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpNZXNzYWdlUG9ydFByb3h5OjpNZXNzYWdlUG9ydFF1ZXVlOjppc0VtcHR5KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6Ok1lc3NhZ2VQb3J0UXVldWU6Ok1lc3NhZ2VQ
b3J0UXVldWUpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBvc3RNZXNzYWdlVGltZXI6OlBvc3RNZXNzYWdlVGltZXIpOgorICAgICAgICAgICAgQ2hh
bmdlZCBET01XaW5kb3cgbWVzc2FnaW5nIHRvIGNyZWF0ZSB0aGUgTWVzc2FnZUV2ZW50IGluIHRo
ZSB0YXJnZXQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB0byBtYXRjaCBob3cgY3Jvc3MtdGhyZWFk
IE1lc3NhZ2VQb3J0cyB3b3JrLgorICAgICAgICAoV2ViQ29yZTo6UG9zdE1lc3NhZ2VUaW1lcjo6
ZXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpwb3N0TWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJGaXJlZCk6CisKIDIwMDkt
MDYtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
NTg0YmVhYS4uNTc1MzEzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC04OTc5LDcgKzg5NzksMTEgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZG9tXE1lc3NhZ2VQb3J0UHJveHkuaCINCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxkb21cZGVmYXVsdFxNZXNzYWdlUG9ydFByb3h5LmgiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cZGVmYXVsdFxNZXNzYWdl
UG9ydFByb3h5LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjE0YjA1MS4uMzI0ZDRkMiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYzOSwxMyAr
NjM5LDE2IEBACiAJCTQxMTA0NjQyMEZBMjIyQTYwMEJBNDM2QSAvKiBTY3JpcHRFdmVudExpc3Rl
bmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
MTA0NjQwMEZBMjIyQTYwMEJBNDM2QSAvKiBTY3JpcHRFdmVudExpc3RlbmVyLmNwcCAqLzsgfTsK
IAkJNDEyN0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjdENTM2MEY4QUFCMUQwMEU0
MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi87IH07CiAJCTQxMkE2ODQ3MEY2QjAzREQwMDBFQTY2
RSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMkE2ODQ2MEY2QjAzREQwMDBFQTY2RSAvKiBTY3JpcHRP
YmplY3RRdWFyYW50aW5lLmNwcCAqLzsgfTsKLQkJNDE1RTNFRjYwRjhENjdGRTAwN0VFQjUwIC8q
IE1lc3NhZ2VQb3J0UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxNUUzRUY1MEY4RDY3RkUwMDdFRUI1MCAvKiBNZXNzYWdlUG9ydFByb3h5Lmgg
Ki87IH07CiAJCTQxNkU3NUJFMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUJDMEVE
RjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suaCAqLzsgfTsKIAkJNDE2RTc1QkYwRURG
OEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxTdGFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2Ny
aXB0Q2FsbFN0YWNrLmNwcCAqLzsgfTsKIAkJNDE2RTc1Q0IwRURGOTBDNzAwMzYwRTFEIC8qIFNj
cmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDE2RTc1QzkwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5oICovOyB9
OwogCQk0MTZFNzVDQzBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUNBMEVERjkw
QzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwICovOyB9OwogCQk0MTZGNDVGMDBFRDdC
MzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZGNDVFRjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3Ry
aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDE5NTM2NTEwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxOTUzNjUwMEY2ODIy
MjQwMEQwQzY3OSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmggKi87IH07CisJCTQxQkU3OTU1
MEZEODU4QUIwMDA3ODAxOSAvKiBNZXNzYWdlUG9ydFByb3h5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkU3OTUzMEZEODU4QUIwMDA3ODAxOSAv
KiBNZXNzYWdlUG9ydFByb3h5LmNwcCAqLzsgfTsKKwkJNDFCRTc5NTYwRkQ4NThBQjAwMDc4MDE5
IC8qIE1lc3NhZ2VQb3J0UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxQkU3OTU0MEZEODU4QUIwMDA3ODAxOSAvKiBNZXNzYWdlUG9ydFByb3h5
LmggKi87IH07CisJCTQxQkU3OTZFMEZEOTkxNDIwMDA3ODAxOSAvKiBNZXNzYWdlUG9ydFByb3h5
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MUJFNzk2QzBGRDk5MTQyMDAwNzgwMTkgLyogTWVzc2FnZVBvcnRQcm94eUJhc2UuY3BwICovOyB9
OworCQk0MUJFNzk2RjBGRDk5MTQyMDAwNzgwMTkgLyogTWVzc2FnZVBvcnRQcm94eUJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkU3OTZEMEZE
OTkxNDIwMDA3ODAxOSAvKiBNZXNzYWdlUG9ydFByb3h5QmFzZS5oICovOyB9OwogCQk0MUM3NjBC
MTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3Jp
cHRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxRDAxNUNBMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMDE1QzgwRjRCNUM3MTAwNEE2
NjJGIC8qIENvbnRlbnRUeXBlLmggKi87IH07CiAJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAv
KiBDb250ZW50VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MUQwMTVDOTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwICovOyB9
OwpAQCAtNTUyOCwxMyArNTUzMSwxNiBAQAogCQk0MTEwNDY0MDBGQTIyMkE2MDBCQTQzNkEgLyog
U2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTY3JpcHRFdmVudExpc3RlbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDEyQTY4NDYwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9iamVj
dFF1YXJhbnRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Ny
aXB0T2JqZWN0UXVhcmFudGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQx
NUUzRUY1MEY4RDY3RkUwMDdFRUI1MCAvKiBNZXNzYWdlUG9ydFByb3h5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lc3NhZ2VQb3J0UHJveHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDE2RTc1QkMwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxTdGFj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRDYWxsU3RhY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RTc1QkQwRURGOEZENzAwMzYwRTFEIC8q
IFNjcmlwdENhbGxTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTY3JpcHRDYWxsU3RhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZF
NzVDOTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENhbGxGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTZFNzVDQTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENhbGxGcmFtZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkY0NUVGMEVEN0IzMTEwMDgyMTVC
NiAvKiBTY3JpcHRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
aXB0U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxOTUzNjUwMEY2ODIy
MjQwMEQwQzY3OSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDFCRTc5NTMwRkQ4NThBQjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTWVzc2FnZVBvcnRQ
cm94eS5jcHA7IHBhdGggPSBkZWZhdWx0L01lc3NhZ2VQb3J0UHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0MUJFNzk1NDBGRDg1OEFCMDAwNzgwMTkgLyogTWVzc2FnZVBv
cnRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNZXNzYWdlUG9ydFBy
b3h5Lmg7IHBhdGggPSBkZWZhdWx0L01lc3NhZ2VQb3J0UHJveHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDFCRTc5NkMwRkQ5OTE0MjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJv
eHlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lc3NhZ2VQ
b3J0UHJveHlCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCRTc5NkQw
RkQ5OTE0MjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJveHlCYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lc3NhZ2VQb3J0UHJveHlCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVu
dFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudFR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8q
IENvbnRlbnRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
bnRlbnRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDE5LDcgKzE0
NDI1LDEwIEBACiAJCQkJRTFBREVDQkUwRTc2QUNGMTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmNw
cCAqLywKIAkJCQlFMUFERUNCRDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaCAqLywK
IAkJCQlFMUFERUNDNjBFNzZBRDFGMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaWRsICovLAotCQkJ
CTQxNUUzRUY1MEY4RDY3RkUwMDdFRUI1MCAvKiBNZXNzYWdlUG9ydFByb3h5LmggKi8sCisJCQkJ
NDFCRTc5NkMwRkQ5OTE0MjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJveHlCYXNlLmNwcCAqLywK
KwkJCQk0MUJFNzk2RDBGRDk5MTQyMDAwNzgwMTkgLyogTWVzc2FnZVBvcnRQcm94eUJhc2UuaCAq
LywKKwkJCQk0MUJFNzk1MzBGRDg1OEFCMDAwNzgwMTkgLyogTWVzc2FnZVBvcnRQcm94eS5jcHAg
Ki8sCisJCQkJNDFCRTc5NTQwRkQ4NThBQjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJveHkuaCAq
LywKIAkJCQk4NTAzMUIyRjBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VFdmVudC5jcHAgKi8sCiAJ
CQkJODUwMzFCMzAwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlRXZlbnQuaCAqLywKIAkJCQkxNDFC
OTRFNTA5RUM0MjIzMDAwRTk0MTMgLyogTW91c2VFdmVudC5pZGwgKi8sCkBAIC0xNjA5Miw3ICsx
NjEwMSw2IEBACiAJCQkJRTFBREVDQ0UwRTc2QUQ4QjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2Fn
ZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUFERUNCRjBFNzZBQ0YxMDA0QTFBNUUgLyog
TWVzc2FnZVBvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQxNUUzRUY2MEY4RDY3RkUwMDdFRUI1
MCAvKiBNZXNzYWdlUG9ydFByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOUM2RTRFNDBENzQ1
RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZFNEU4MEQ3
NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNkQ3
NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4gSGVh
ZGVycyAqLywKQEAgLTE2Nzg4LDYgKzE2Nzk2LDggQEAKIAkJCQk4NDVFNzJGQzBGRDI2MjM5MDBB
ODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODFFQkYzQjBGRDM0RjQx
MDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg5Q0ND
NTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0MUJFNzk1NjBGRDg1OEFCMDAwNzgwMTkgLyogTWVzc2FnZVBvcnRQcm94
eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFCRTc5NkYwRkQ5OTE0MjAwMDc4MDE5IC8qIE1lc3Nh
Z2VQb3J0UHJveHlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4NzgxLDYgKzE4NzkxLDggQEAK
IAkJCQk4NDVFNzJGQjBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA4MUVCRjNBMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4OUNDQzUyMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUJFNzk1NTBGRDg1
OEFCMDAwNzgwMTkgLyogTWVzc2FnZVBvcnRQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
MUJFNzk2RTBGRDk5MTQyMDAwNzgwMTkgLyogTWVzc2FnZVBvcnRQcm94eUJhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcApp
bmRleCBmNDgwOWFlLi5lM2FjYmVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZVBvcnRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHAKQEAgLTQzLDEzICs0Myw2IEBAIHZvaWQgSlNNZXNzYWdlUG9ydDo6bWFy
aygpCiAgICAgRE9NT2JqZWN0OjptYXJrKCk7CiAKICAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+
b25tZXNzYWdlKCkpOwotICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbmNsb3NlKCkpOwotCi0g
ICAgaWYgKE1lc3NhZ2VQb3J0UHJveHkqIGVudGFuZ2xlZFBvcnQgPSBtX2ltcGwtPmVudGFuZ2xl
ZFBvcnQoKSkgewotICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmpl
Y3RXcmFwcGVyKCpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIGVudGFuZ2xlZFBvcnQp
OwotICAgICAgICBpZiAod3JhcHBlciAmJiAhd3JhcHBlci0+bWFya2VkKCkpCi0gICAgICAgICAg
ICB3cmFwcGVyLT5tYXJrKCk7Ci0gICAgfQogCiAgICAgdHlwZWRlZiBNZXNzYWdlUG9ydDo6RXZl
bnRMaXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7CiAgICAgdHlwZWRlZiBNZXNzYWdlUG9y
dDo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7CkBAIC02MCwxNCArNTMsNiBAQCB2b2lk
IEpTTWVzc2FnZVBvcnQ6Om1hcmsoKQogICAgIH0KIH0KIAotSlNWYWx1ZSBKU01lc3NhZ2VQb3J0
OjpzdGFydENvbnZlcnNhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Ci17Ci0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBjb25z
dCBVU3RyaW5nJiBtZXNzYWdlID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKLQotICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGltcGwoKS0+c3RhcnRDb252ZXJzYXRpb24oZ2xvYmFsT2JqZWN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1lc3NhZ2UpLmdldCgpKTsKLX0KLQogSlNWYWx1ZSBK
U01lc3NhZ2VQb3J0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
U0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCmlu
ZGV4IGZjZTA0YjYuLjI0ZTgwYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCkBAIC03Myw1NCArNzMsNiBAQCBBQ0NFU1NPUl9T
RVRURVIoTWVzc2FnZVBvcnRPbm1lc3NhZ2UpCiAgICAgfQogfQogCi1BQ0NFU1NPUl9HRVRURVIo
TWVzc2FnZVBvcnRPbmNsb3NlKQotewotICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0Lm9u
Y2xvc2UuX2dldCIpOwotICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4UHJveHk6OlRv
TmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBpbmZv
LkhvbGRlcigpKTsKLSAgICByZXR1cm4gVjhQcm94eTo6RXZlbnRMaXN0ZW5lclRvVjhPYmplY3Qo
bWVzc2FnZVBvcnQtPm9uY2xvc2UoKSk7Ci19Ci0KLUFDQ0VTU09SX1NFVFRFUihNZXNzYWdlUG9y
dE9uY2xvc2UpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQub25jbG9zZS5fc2V0
Iik7Ci0gICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmpl
Y3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGluZm8uSG9sZGVyKCkp
OwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKG1lc3NhZ2VQb3J0LT5v
bmNsb3NlKCkpIHsKLSAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPihtZXNzYWdlUG9ydC0+b25jbG9z
ZSgpKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwg
bGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCksIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RD
YWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4K
LSAgICAgICAgbWVzc2FnZVBvcnQtPnNldE9uY2xvc2UoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShtZXNzYWdlUG9ydC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+
RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpOwotICAgICAgICBp
ZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAgIG1lc3NhZ2VQb3J0LT5zZXRPbmNsb3NlKGxpc3Rl
bmVyKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwg
dmFsdWUsIFY4Q3VzdG9tOjprTWVzc2FnZVBvcnRSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlUG9ydFN0YXJ0Q29udmVy
c2F0aW9uKQotewotICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0LlN0YXJ0Q29udmVyc2F0
aW9uKCkiKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCi0gICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlNZTlRBWF9FUlJPUik7Ci0g
ICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TWVz
c2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGFyZ3MuSG9sZGVyKCkpOwotCi0g
ICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShtZXNzYWdlUG9ydC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIXByb3h5KQotICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0ID0gbWVzc2FnZVBv
cnQtPnN0YXJ0Q29udmVyc2F0aW9uKG1lc3NhZ2VQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksIHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdyYXBwZXIgPSBWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQs
IHBvcnQuZ2V0KCkpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCiBDQUxMQkFDS19GVU5DX0RF
Q0woTWVzc2FnZVBvcnRBZGRFdmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUygiRE9NLk1l
c3NhZ2VQb3J0LkFkZEV2ZW50TGlzdGVuZXIoKSIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
TWVzc2FnZUNoYW5uZWwuY3BwIGIvV2ViQ29yZS9kb20vTWVzc2FnZUNoYW5uZWwuY3BwCmluZGV4
IDNhOTA5MTMuLjRmMzcxYmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVs
LmNwcAorKysgYi9XZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJNZXNzYWdlQ2hhbm5lbC5oIgogCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQu
aCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzUsNyArMzYsNyBAQCBNZXNzYWdlQ2hhbm5lbDo6TWVzc2FnZUNoYW5uZWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IG1fcG9ydDEoTWVzc2FnZVBvcnQ6OmNy
ZWF0ZShjb250ZXh0KSkKICAgICAsIG1fcG9ydDIoTWVzc2FnZVBvcnQ6OmNyZWF0ZShjb250ZXh0
KSkKIHsKLSAgICBNZXNzYWdlUG9ydDo6ZW50YW5nbGUobV9wb3J0MS5nZXQoKSwgbV9wb3J0Mi5n
ZXQoKSk7CisgICAgTWVzc2FnZVBvcnRQcm94eTo6Y3JlYXRlQ2hhbm5lbChtX3BvcnQxLmdldCgp
LCBtX3BvcnQyLmdldCgpKTsKIH0KIAogTWVzc2FnZUNoYW5uZWw6On5NZXNzYWdlQ2hhbm5lbCgp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAgYi9XZWJDb3JlL2RvbS9N
ZXNzYWdlUG9ydC5jcHAKaW5kZXggZWZkODllNy4uZDU1Zjc3ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcApA
QCAtMzgsODkgKzM4LDI0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVzc2Fn
ZVBvcnRDbG9zZUV2ZW50VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydENsb3NlRXZlbnRU
YXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVBvcnRDbG9zZUV2ZW50VGFzayhwb3J0KSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIE1lc3NhZ2VQb3J0Q2xvc2VFdmVudFRhc2soUGFzc1JlZlB0
cjxNZXNzYWdlUG9ydD4gcG9ydCkKLSAgICAgICAgOiBtX3BvcnQocG9ydCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3BvcnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFz
ayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB1bnVzZWRDb250ZXh0KQotICAgIHsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRCh1bnVzZWRDb250ZXh0LCB1bnVzZWRDb250ZXh0ID09IG1fcG9ydC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgQVNTRVJUKCFtX3BvcnQtPmFjdGl2ZSgp
KTsKLQotICAgICAgICAvLyBDbG9zaW5nIG1heSBkZXN0cm95IHRoZSBwb3J0LCBkaXNwYXRjaCBh
bnkgcmVtYWluaW5nIG1lc3NhZ2VzIG5vdy4KLSAgICAgICAgaWYgKG1fcG9ydC0+cXVldWVJc09w
ZW4oKSkKLSAgICAgICAgICAgIG1fcG9ydC0+ZGlzcGF0Y2hNZXNzYWdlcygpOwotCi0gICAgICAg
IG1fcG9ydC0+ZGlzcGF0Y2hDbG9zZUV2ZW50KCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPE1lc3Nh
Z2VQb3J0PiBtX3BvcnQ7Ci19OwotCi1QYXNzUmVmUHRyPE1lc3NhZ2VQb3J0OjpFdmVudERhdGE+
IE1lc3NhZ2VQb3J0OjpFdmVudERhdGE6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBh
c3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBF
dmVudERhdGEobWVzc2FnZSwgcG9ydCkpOwotfQotCi1NZXNzYWdlUG9ydDo6RXZlbnREYXRhOjpF
dmVudERhdGEoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBt
ZXNzYWdlUG9ydCkKLSAgICA6IG1lc3NhZ2UobWVzc2FnZS5jb3B5KCkpCi0gICAgLCBtZXNzYWdl
UG9ydChtZXNzYWdlUG9ydCkKLXsKLX0KLQotTWVzc2FnZVBvcnQ6OkV2ZW50RGF0YTo6fkV2ZW50
RGF0YSgpCi17Ci19Ci0KIE1lc3NhZ2VQb3J0OjpNZXNzYWdlUG9ydChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgIDogbV9lbnRhbmdsZWRQb3J0KDAp
CiAgICAgLCBtX3F1ZXVlSXNPcGVuKGZhbHNlKQotICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgLCBtX3BlbmRpbmdDbG9zZUV2ZW50KGZh
bHNlKQogewotICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICAgICBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5jcmVhdGVkTWVzc2FnZVBvcnQodGhpcyk7CisgICAgQVNTRVJUKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jcmVh
dGVkTWVzc2FnZVBvcnQodGhpcyk7CisgIAorICAgIC8vIERvbid0IG5lZWQgdG8gY2FsbCBwcm9j
ZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKSBoZXJlLCBiZWNhdXNlIHRoZSBwb3J0IHdpbGwg
bm90IGJlIG9wZW5lZCB1bnRpbCBzdGFydCgpIGlzIGludm9rZWQuCiB9CiAKIE1lc3NhZ2VQb3J0
Ojp+TWVzc2FnZVBvcnQoKQogewotICAgIGlmIChtX2VudGFuZ2xlZFBvcnQpCi0gICAgICAgIHVu
ZW50YW5nbGUoKTsKLQorICAgIGNsb3NlKCk7CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkKICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kZXN0cm95ZWRNZXNzYWdl
UG9ydCh0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gTWVzc2FnZVBvcnQ6OmNs
b25lKEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghbV9lbnRhbmdsZWRQb3J0KSB7Ci0g
ICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIFJlZlB0cjxNZXNzYWdlUG9ydFByb3h5PiByZW1vdGVQb3J0ID0gbV9lbnRhbmdsZWRQ
b3J0OwotICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbmV3UG9ydCA9IE1lc3NhZ2VQb3J0OjpjcmVh
dGUoMCk7Ci0KLSAgICAvLyBNb3ZlIGFsbCB0aGUgZXZlbnRzIGluIHRoZSBwb3J0IG1lc3NhZ2Ug
cXVldWUgb2Ygb3JpZ2luYWwgcG9ydCB0byB0aGUgcG9ydCBtZXNzYWdlIHF1ZXVlIG9mIG5ldyBw
b3J0LCBpZiBhbnksIGxlYXZpbmcgdGhlIG5ldyBwb3J0J3MgcG9ydCBtZXNzYWdlIHF1ZXVlIGlu
IGl0cyBpbml0aWFsIGNsb3NlZCBzdGF0ZS4KLSAgICAvLyBJZiBldmVudHMgYXJlIHBvc3RlZCAo
ZS5nLiBmcm9tIGEgd29ya2VyIHRocmVhZCkgd2hpbGUgdGhpcyBjb2RlIGlzIGV4ZWN1dGluZywg
dGhlcmUgaXMgbm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhleSBlbmQgdXAgaW4gdGhlIG9yaWdpbmFs
IG9yIG5ldyBwb3J0J3MgbWVzc2FnZSBxdWV1ZS4KLSAgICBSZWZQdHI8RXZlbnREYXRhPiBldmVu
dERhdGE7Ci0gICAgd2hpbGUgKG1fbWVzc2FnZVF1ZXVlLnRyeUdldE1lc3NhZ2UoZXZlbnREYXRh
KSkKLSAgICAgICAgbmV3UG9ydC0+bV9tZXNzYWdlUXVldWUuYXBwZW5kKGV2ZW50RGF0YSk7Ci0K
LSAgICBlbnRhbmdsZShyZW1vdGVQb3J0LmdldCgpLCBuZXdQb3J0LmdldCgpKTsgLy8gVGhlIHBv
cnQgb2JqZWN0IHdpbGwgYmUgdW5lbnRhbmdsZWQuCi0gICAgcmV0dXJuIG5ld1BvcnQ7Ci19Ci0K
IHZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgMCwgZWMpOwpAQCAt
MTI4LDQ3ICs2Myw0NCBAQCB2b2lkIE1lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIE1lc3NhZ2VQb3J0Ojpwb3N0
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBkYXRhUG9ydCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQgfHwgIW1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCkKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
KyAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBuZXdNZXNzYWdlUG9ydDsKKyAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0
UHJveHlCYXNlPiBwcm94eTsKICAgICBpZiAoZGF0YVBvcnQpIHsKLSAgICAgICAgaWYgKGRhdGFQ
b3J0ID09IHRoaXMgfHwgZGF0YVBvcnQgPT0gbV9lbnRhbmdsZWRQb3J0KSB7Ci0gICAgICAgICAg
ICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgaWYgKGRhdGFQb3J0ID09IHRoaXMg
fHwgbV9lbnRhbmdsZWRQb3J0LT5pc1Byb3h5Rm9yKGRhdGFQb3J0KSkgeworICAgICAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBlYyA9IDA7Ci0gICAgICAgIG5ld01lc3NhZ2VQb3J0ID0gZGF0YVBvcnQtPmNsb25l
KGVjKTsKKyAgICAgICAgcHJveHkgPSBkYXRhUG9ydC0+ZGlzZW50YW5nbGUoZWMpOwogICAgICAg
ICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgbV9lbnRhbmdsZWRQ
b3J0LT5kZWxpdmVyTWVzc2FnZShtZXNzYWdlLCBuZXdNZXNzYWdlUG9ydCk7CisgICAgbV9lbnRh
bmdsZWRQb3J0LT5wb3N0TWVzc2FnZVRvUmVtb3RlKE1lc3NhZ2VQb3J0UHJveHlCYXNlOjpFdmVu
dERhdGE6OmNyZWF0ZShtZXNzYWdlLCBwcm94eSkpOwogfQogCi12b2lkIE1lc3NhZ2VQb3J0Ojpk
ZWxpdmVyTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBv
cnQ+IGRhdGFQb3J0KQorUGFzc093blB0cjxNZXNzYWdlUG9ydFByb3h5QmFzZT4gTWVzc2FnZVBv
cnQ6OmRpc2VudGFuZ2xlKEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fbWVzc2FnZVF1ZXVl
LmFwcGVuZChFdmVudERhdGE6OmNyZWF0ZShtZXNzYWdlLCBkYXRhUG9ydCkpOwotICAgIGlmICht
X3F1ZXVlSXNPcGVuICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKTsKKyAg
ICBpZiAoIW1fZW50YW5nbGVkUG9ydCkKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICBlbHNlCisgICAgICAgIG1fZW50YW5nbGVkUG9ydC0+ZGlzZW50YW5nbGUoKTsKKyAgICBy
ZXR1cm4gbV9lbnRhbmdsZWRQb3J0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxNZXNzYWdl
UG9ydD4gTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKy8vIElu
dm9rZWQgdG8gbm90aWZ5IHVzIHRoYXQgdGhlcmUgYXJlIG1lc3NhZ2VzIGF2YWlsYWJsZSBmb3Ig
dGhpcyBwb3J0LgorLy8gVGhpcyBjb2RlIG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVh
ZCwgYW5kIHNvIHNob3VsZCBub3QgY2FsbCBhbnkgbm9uLXRocmVhZHNhZmUgQVBJcyAoaS5lLiBz
aG91bGQgbm90IGNhbGwgaW50byB0aGUgZW50YW5nbGVkIHByb3h5IG9yIGFjY2VzcyBtdXRhYmxl
IHZhcmlhYmxlcykuCit2b2lkIE1lc3NhZ2VQb3J0OjptZXNzYWdlQXZhaWxhYmxlKCkKIHsKLSAg
ICBSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQxID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KTsKLSAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCB8fCAhbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KQotICAgICAgICByZXR1cm4gcG9ydDE7Ci0gICAgUmVmUHRyPE1lc3Nh
Z2VQb3J0PiBwb3J0MiA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoMCk7Ci0KLSAgICBlbnRhbmdsZShw
b3J0MS5nZXQoKSwgcG9ydDIuZ2V0KCkpOwotCi0gICAgbV9lbnRhbmdsZWRQb3J0LT5kZWxpdmVy
TWVzc2FnZShtZXNzYWdlLCBwb3J0Mik7Ci0gICAgcmV0dXJuIHBvcnQxOworICAgIEFTU0VSVCht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cHJvY2Vzc01lc3NhZ2VQb3J0TWVzc2FnZXNTb29uKCk7CiB9CiAKIHZvaWQgTWVzc2FnZVBvcnQ6
OnN0YXJ0KCkKIHsKLSAgICBpZiAobV9xdWV1ZUlzT3BlbiB8fCAhbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KQorICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIGlmICht
X3F1ZXVlSXNPcGVuKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3F1ZXVlSXNPcGVuID0gdHJ1
ZTsKQEAgLTE3OSw2MSArMTExLDMwIEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmNsb3NlKCkKIHsKICAg
ICBpZiAoIW1fZW50YW5nbGVkUG9ydCkKICAgICAgICAgcmV0dXJuOwotCi0gICAgTWVzc2FnZVBv
cnRQcm94eSogb3RoZXJQb3J0ID0gbV9lbnRhbmdsZWRQb3J0OwotICAgIHVuZW50YW5nbGUoKTsK
LQotICAgIHF1ZXVlQ2xvc2VFdmVudCgpOwotICAgIG90aGVyUG9ydC0+cXVldWVDbG9zZUV2ZW50
KCk7CisgICAgbV9lbnRhbmdsZWRQb3J0LT5jbG9zZSgpOwogfQogCi12b2lkIE1lc3NhZ2VQb3J0
OjplbnRhbmdsZShNZXNzYWdlUG9ydFByb3h5KiBwb3J0MSwgTWVzc2FnZVBvcnRQcm94eSogcG9y
dDIpCit2b2lkIE1lc3NhZ2VQb3J0OjplbnRhbmdsZShQYXNzT3duUHRyPE1lc3NhZ2VQb3J0UHJv
eHlCYXNlPiByZW1vdGUpCiB7Ci0gICAgcG9ydDEtPmVudGFuZ2xlKHBvcnQyKTsKLSAgICBwb3J0
Mi0+ZW50YW5nbGUocG9ydDEpOwotfQorICAgIC8vIE9ubHkgaW52b2tlZCB0byBzZXQgb3VyIGlu
aXRpYWwgZW50YW5nbGVtZW50LgorICAgIEFTU0VSVCghbV9lbnRhbmdsZWRQb3J0KTsKKyAgICBB
U1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIAotdm9pZCBNZXNzYWdlUG9ydDo6ZW50
YW5nbGUoTWVzc2FnZVBvcnRQcm94eSogcmVtb3RlKQotewotICAgIC8vIFVuZW50YW5nbGUgZnJv
bSBvdXIgY3VycmVudCBwb3J0IGZpcnN0LgotICAgIGlmIChtX2VudGFuZ2xlZFBvcnQpIHsKLSAg
ICAgICAgQVNTRVJUKG1fZW50YW5nbGVkUG9ydCAhPSByZW1vdGUpOwotICAgICAgICB1bmVudGFu
Z2xlKCk7Ci0gICAgfQotICAgIG1fZW50YW5nbGVkUG9ydCA9IHJlbW90ZTsKKyAgICAvLyBEb24n
dCBlbnRhbmdsZSB0aGUgcG9ydHMgaWYgdGhlIGNoYW5uZWwgaXMgY2xvc2VkLgorICAgIGlmIChy
ZW1vdGUtPmVudGFuZ2xlSWZPcGVuKHRoaXMpKQorICAgICAgICBtX2VudGFuZ2xlZFBvcnQgPSBy
ZW1vdGU7CiB9CiAKLXZvaWQgTWVzc2FnZVBvcnQ6OnVuZW50YW5nbGUoKQotewotICAgIC8vIFVu
ZW50YW5nbGUgb3VyIGVuZCBiZWZvcmUgdW5lbnRhbmdsaW5nIHRoZSBvdGhlciBlbmQuCi0gICAg
aWYgKG1fZW50YW5nbGVkUG9ydCkgewotICAgICAgICBNZXNzYWdlUG9ydFByb3h5KiByZW1vdGUg
PSBtX2VudGFuZ2xlZFBvcnQ7Ci0gICAgICAgIG1fZW50YW5nbGVkUG9ydCA9IDA7Ci0gICAgICAg
IHJlbW90ZS0+dW5lbnRhbmdsZSgpOwotICAgIH0KLX0KKwogCiB2b2lkIE1lc3NhZ2VQb3J0Ojpj
b250ZXh0RGVzdHJveWVkKCkKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KTsKLQotICAgIGlmIChtX2VudGFuZ2xlZFBvcnQpCi0gICAgICAgIHVuZW50YW5nbGUoKTsKLQor
ICAgIC8vIE11c3QgY2xvc2UgcG9ydCBiZWZvcmUgYmxvd2luZyBhd2F5IHRoZSBjYWNoZWQgY29u
dGV4dCwgdG8gZW5zdXJlIHRoYXQgd2UgZ2V0IG5vIG1vcmUgY2FsbHMgdG8gbWVzc2FnZUF2YWls
YWJsZSgpLgorICAgIGNsb3NlKCk7CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsK
IH0KIAotdm9pZCBNZXNzYWdlUG9ydDo6YXR0YWNoVG9Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCi17Ci0gICAgQVNTRVJUKCFtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOwotICAgIEFTU0VSVCghbV9xdWV1ZUlzT3Blbik7Ci0KLSAgICBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+Y3JlYXRlZE1lc3NhZ2VQb3J0KHRoaXMpOwotICAgIAotICAg
IC8vIEZJWE1FOiBOZWVkIHRvIGNhbGwgcHJvY2Vzc01lc3NhZ2VQb3J0TWVzc2FnZXNTb29uKCk/
Ci19Ci0KIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIE1lc3NhZ2VQb3J0OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
OwpAQCAtMjQyLDE3ICsxNDMsMTkgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogTWVzc2FnZVBv
cnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogdm9pZCBNZXNzYWdlUG9ydDo6ZGlz
cGF0Y2hNZXNzYWdlcygpCiB7CiAgICAgLy8gTWVzc2FnZXMgZm9yIGNvbnRleHRzIHRoYXQgYXJl
IG5vdCBmdWxseSBhY3RpdmUgZ2V0IGRpc3BhdGNoZWQgdG9vLCBidXQgSlNBYnN0cmFjdEV2ZW50
TGlzdGVuZXI6OmhhbmRsZUV2ZW50KCkgZG9lc24ndCBjYWxsIGhhbmRsZXJzIGZvciB0aGVzZS4K
LSAgICAvLyBGSVhNRTogU3VjaCBtZXNzYWdlcyBzaG91bGQgYmUgZGlzcGF0Y2hlZCBpZiB0aGUg
ZG9jdW1lbnQgcmV0dXJucyBmcm9tIHBhZ2UgY2FjaGUuIFRoZXkgYXJlIG9ubHkgYWxsb3dlZCB0
byBiZSBsb3N0IGlmIHRoZSBkb2N1bWVudCBpcyBkaXNjYXJkZWQuCisgICAgLy8gVGhlIEhUTUw1
IHNwZWMgc3BlY2lmaWVzIHRoYXQgYW55IG1lc3NhZ2VzIHNlbnQgdG8gYSBkb2N1bWVudCB0aGF0
IGlzIG5vdCBmdWxseSBhY3RpdmUgc2hvdWxkIGJlIGRyb3BwZWQsIHNvIHRoaXMgYmVoYXZpb3Ig
aXMgT0suCiAgICAgQVNTRVJUKHF1ZXVlSXNPcGVuKCkpOwogCi0gICAgUmVmUHRyPEV2ZW50RGF0
YT4gZXZlbnREYXRhOwotICAgIHdoaWxlIChtX21lc3NhZ2VRdWV1ZS50cnlHZXRNZXNzYWdlKGV2
ZW50RGF0YSkpIHsKLQotICAgICAgICBBU1NFUlQoIWV2ZW50RGF0YS0+bWVzc2FnZVBvcnQgfHwg
IWV2ZW50RGF0YS0+bWVzc2FnZVBvcnQtPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAg
ICAgIGlmIChldmVudERhdGEtPm1lc3NhZ2VQb3J0KQotICAgICAgICAgICAgZXZlbnREYXRhLT5t
ZXNzYWdlUG9ydC0+YXR0YWNoVG9Db250ZXh0KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0K
LSAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShldmVudERh
dGEtPm1lc3NhZ2UsICIiLCAiIiwgMCwgZXZlbnREYXRhLT5tZXNzYWdlUG9ydCk7CisgICAgUmVm
UHRyPE1lc3NhZ2VQb3J0UHJveHlCYXNlOjpFdmVudERhdGE+IGV2ZW50RGF0YTsKKyAgICB3aGls
ZSAobV9lbnRhbmdsZWRQb3J0ICYmIG1fZW50YW5nbGVkUG9ydC0+dHJ5R2V0TWVzc2FnZUZyb21S
ZW1vdGUoZXZlbnREYXRhKSkgeworICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQ7Cisg
ICAgICAgIE93blB0cjxNZXNzYWdlUG9ydFByb3h5QmFzZT4gcHJveHkgPSBldmVudERhdGEtPnBy
b3h5KCk7CisgICAgICAgIGlmIChwcm94eSkgeworICAgICAgICAgICAgLy8gVGhlIHJlbW90ZSBz
aWRlIHNlbnQgb3ZlciBhIHBvcnQgcHJveHksIHNvIGNyZWF0ZSBhIE1lc3NhZ2VQb3J0IHRvIHdy
YXAgaXQuCisgICAgICAgICAgICBwb3J0ID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZShtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOworICAgICAgICAgICAgcG9ydC0+ZW50YW5nbGUocHJveHkucmVsZWFz
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVu
dDo6Y3JlYXRlKGV2ZW50RGF0YS0+bWVzc2FnZSgpLCAiIiwgIiIsIDAsIHBvcnQpOwogCiAgICAg
ICAgIGlmIChtX29uTWVzc2FnZUxpc3RlbmVyKSB7CiAgICAgICAgICAgICBldnQtPnNldFRhcmdl
dCh0aGlzKTsKQEAgLTI2NiwzMSArMTY5LDYgQEAgdm9pZCBNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hN
ZXNzYWdlcygpCiAgICAgfQogfQogCi12b2lkIE1lc3NhZ2VQb3J0OjpxdWV1ZUNsb3NlRXZlbnQo
KQotewotICAgIEFTU0VSVCghbV9wZW5kaW5nQ2xvc2VFdmVudCk7Ci0gICAgbV9wZW5kaW5nQ2xv
c2VFdmVudCA9IHRydWU7Ci0KLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNr
KE1lc3NhZ2VQb3J0Q2xvc2VFdmVudFRhc2s6OmNyZWF0ZSh0aGlzKSk7Ci19Ci0KLXZvaWQgTWVz
c2FnZVBvcnQ6OmRpc3BhdGNoQ2xvc2VFdmVudCgpCi17Ci0gICAgQVNTRVJUKG1fcGVuZGluZ0Ns
b3NlRXZlbnQpOwotICAgIG1fcGVuZGluZ0Nsb3NlRXZlbnQgPSBmYWxzZTsKLQotICAgIFJlZlB0
cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xvc2VFdmVudCwgZmFs
c2UsIHRydWUpOwotICAgIGlmIChtX29uQ2xvc2VMaXN0ZW5lcikgewotICAgICAgICBldnQtPnNl
dFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwotICAg
ICAgICBtX29uQ2xvc2VMaXN0ZW5lci0+aGFuZGxlRXZlbnQoZXZ0LmdldCgpLCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVudChldnQu
cmVsZWFzZSgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KIHZvaWQgTWVzc2FnZVBvcnQ6
OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKICAgICBFdmVudExpc3Rl
bmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUp
OwpAQCAtMzQyLDkgKzIyMCwxNyBAQCBib29sIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gIWV2
ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKK3ZvaWQgTWVzc2FnZVBvcnQ6OnNldE9ubWVz
c2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCit7CisgICAgbV9v
bk1lc3NhZ2VMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7CisgICAgc3RhcnQoKTsKK30KKwogYm9v
bCBNZXNzYWdlUG9ydDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkKIHsKLSAgICByZXR1cm4gbV9wZW5k
aW5nQ2xvc2VFdmVudCB8fCAobV9xdWV1ZUlzT3BlbiAmJiAhbV9tZXNzYWdlUXVldWUuaXNFbXB0
eSgpKTsKKyAgICAvLyBUaGUgc3BlYyBzYXlzIHRoYXQgZW50YW5nbGVkIG1lc3NhZ2UgcG9ydHMg
c2hvdWxkIGFsd2F5cyBiZSB0cmVhdGVkIGFzIGlmIHRoZXkgaGF2ZSBhIHN0cm9uZyByZWZlcmVu
Y2UuCisgICAgLy8gV2UnbGwgYWxzbyBzdGlwdWxhdGUgdGhhdCB0aGUgcXVldWUgbmVlZHMgdG8g
YmUgb3BlbiAoaWYgdGhlIGFwcCBkcm9wcyBpdHMgcmVmZXJlbmNlIHRvIHRoZSBwb3J0IGJlZm9y
ZSBzdGFydCgpLWluZyBpdCwgdGhlbiBpdCdzIG5vdCByZWFsbHkgZW50YW5nbGVkIGFzIGl0J3Mg
dW5yZWFjaGFibGUpLgorICAgIHJldHVybiBtX3F1ZXVlSXNPcGVuICYmIG1fZW50YW5nbGVkUG9y
dCAmJiBtX2VudGFuZ2xlZFBvcnQtPmhhc1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oIGIv
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAppbmRleCAwNTRhZTQxLi42YjU2NTI0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCisrKyBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQ
b3J0LmgKQEAgLTMwLDEwICszMCwxMSBAQAogI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIK
ICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNp
bmNsdWRlICJNZXNzYWdlUG9ydFByb3h5LmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnRQcm94eUJh
c2UuaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01lc3NhZ2VR
dWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ1LDM1ICs0NiwyNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKICAgICBjbGFzcyBTdHJpbmc7Ci0gICAgY2xhc3MgV29ya2VyQ29udGV4dDsKIAotICAg
IGNsYXNzIE1lc3NhZ2VQb3J0IDogcHVibGljIE1lc3NhZ2VQb3J0UHJveHksIHB1YmxpYyBFdmVu
dFRhcmdldCB7CisgICAgY2xhc3MgTWVzc2FnZVBvcnQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZXNz
YWdlUG9ydD4sIHB1YmxpYyBFdmVudFRhcmdldCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlUG9y
dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KSk7IH0KICAgICAgICAgfk1lc3NhZ2VQb3J0KCk7CiAK
LSAgICAgICAgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gY2xvbmUoRXhjZXB0aW9uQ29kZSYpOyAv
LyBSZXR1cm5zIGEgcG9ydCB0aGF0IGlzbid0IGF0dGFjaGVkIHRvIGFueSBjb250ZXh0LgotCi0g
ICAgICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRhbmdsZWRQb3J0OyB9CiAg
ICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBN
ZXNzYWdlUG9ydCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgUGFzc1JlZlB0cjxNZXNzYWdl
UG9ydD4gc3RhcnRDb252ZXJzYXRpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7CiAgICAgICAgIHZvaWQgc3RhcnQoKTsKICAgICAgICAgdm9pZCBjbG9z
ZSgpOwogCi0gICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBNZXNzYWdlUG9ydFByb3h5IEFQ
SXMKLSAgICAgICAgdmlydHVhbCB2b2lkIGVudGFuZ2xlKE1lc3NhZ2VQb3J0UHJveHkqKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHVuZW50YW5nbGUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRl
bGl2ZXJNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9y
dD4pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcXVldWVDbG9zZUV2ZW50KCk7CisgICAgICAgIHZv
aWQgZW50YW5nbGUoUGFzc093blB0cjxNZXNzYWdlUG9ydFByb3h5QmFzZT4pOworICAgICAgICBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0UHJveHlCYXNlPiBkaXNlbnRhbmdsZShFeGNlcHRpb25Db2Rl
Jik7CiAKKyAgICAgICAgdm9pZCBtZXNzYWdlQXZhaWxhYmxlKCk7CiAgICAgICAgIGJvb2wgcXVl
dWVJc09wZW4oKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlSXNPcGVuOyB9CiAKLSAgICAgICAgTWVz
c2FnZVBvcnRQcm94eSogZW50YW5nbGVkUG9ydCgpIHsgcmV0dXJuIG1fZW50YW5nbGVkUG9ydDsg
fQotICAgICAgICBzdGF0aWMgdm9pZCBlbnRhbmdsZShNZXNzYWdlUG9ydFByb3h5KiwgTWVzc2Fn
ZVBvcnRQcm94eSopOwotCiAgICAgICAgIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOwotICAgICAg
ICB2b2lkIGF0dGFjaFRvQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKICAgICAg
ICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBNZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9ydCgp
IHsgcmV0dXJuIHRoaXM7IH0KQEAgLTg4LDUyICs3OSwzMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBF
dmVudExpc3RlbmVyc01hcDsKICAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVu
ZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQogCi0gICAgICAgIHVzaW5nIFJlZkNv
dW50ZWQ8TWVzc2FnZVBvcnRQcm94eT46OnJlZjsKLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxN
ZXNzYWdlUG9ydFByb3h5Pjo6ZGVyZWY7CisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVzc2Fn
ZVBvcnQ+OjpyZWY7CisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVzc2FnZVBvcnQ+OjpkZXJl
ZjsKIAogICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpOwogCi0gICAgICAgIC8vIEZJ
WE1FOiBQZXIgY3VycmVudCBzcGVjLCBzZXR0aW5nIG9ubWVzc2FnZSBzaG91bGQgYXV0b21hZ2lj
YWxseSBzdGFydCB0aGUgcG9ydCAodW5saWtlIGFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAu
Li4pKS4KLSAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNzYWdlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9
CisgICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwog
ICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX29uTWVz
c2FnZUxpc3RlbmVyLmdldCgpOyB9CiAKLSAgICAgICAgdm9pZCBzZXRPbmNsb3NlKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uQ2xvc2VMaXN0ZW5lciA9IGV2
ZW50TGlzdGVuZXI7IH0KLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25jbG9zZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb25DbG9zZUxpc3RlbmVyLmdldCgpOyB9Ci0KICAgICBwcml2YXRlOgotICAgICAg
ICBmcmllbmQgY2xhc3MgTWVzc2FnZVBvcnRDbG9zZUV2ZW50VGFzazsKIAogICAgICAgICBNZXNz
YWdlUG9ydChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZF
dmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQogCi0gICAgICAgIHZvaWQgZGlzcGF0Y2hDbG9zZUV2
ZW50KCk7CisgICAgICAgIE93blB0cjxNZXNzYWdlUG9ydFByb3h5QmFzZT4gbV9lbnRhbmdsZWRQ
b3J0OwogCi0gICAgICAgIE1lc3NhZ2VQb3J0UHJveHkqIG1fZW50YW5nbGVkUG9ydDsKLQotICAg
ICAgICAvLyBGSVhNRTogRXZlbnREYXRhIGlzIG5lY2Vzc2FyeSB0byBwYXNzIG1lc3NhZ2VzIHRv
IG90aGVyIHRocmVhZHMuIEluIHNpbmdsZSB0aHJlYWRlZCBjYXNlLCB3ZSBjYW4ganVzdCBxdWV1
ZSBhIGNyZWF0ZWQgZXZlbnQuCi0gICAgICAgIHN0cnVjdCBFdmVudERhdGEgOiBwdWJsaWMgUmVm
Q291bnRlZDxFdmVudERhdGE+IHsKLSAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50
RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9y
dD4pOwotICAgICAgICAgICAgfkV2ZW50RGF0YSgpOwotCi0gICAgICAgICAgICBTdHJpbmcgbWVz
c2FnZTsKLSAgICAgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQ7Ci0KLSAg
ICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIEV2ZW50RGF0YShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+KTsKLSAgICAgICAgfTsKLSAgICAgICAgTWVzc2Fn
ZVF1ZXVlPFJlZlB0cjxFdmVudERhdGE+ID4gbV9tZXNzYWdlUXVldWU7IC8vIEZJWE1FOiBObyBu
ZWVkIHRvIHVzZSBNZXNzYWdlUXVldWUgaW4gc2luZ2xlIHRocmVhZGVkIGNhc2UuCiAgICAgICAg
IGJvb2wgbV9xdWV1ZUlzT3BlbjsKIAogICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKICAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IG1fb25NZXNzYWdlTGlzdGVuZXI7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29u
Q2xvc2VMaXN0ZW5lcjsKIAogICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVu
ZXJzOwotCi0gICAgICAgIGJvb2wgbV9wZW5kaW5nQ2xvc2VFdmVudDsgLy8gVGhlIHBvcnQgaXMg
R0MgcHJvdGVjdGVkIHdoaWxlIHdhaXRpbmcgZm9yIGEgY2xvc2UgZXZlbnQgdG8gYmUgZGlzcGF0
Y2hlZC4KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9NZXNzYWdlUG9ydC5pZGwgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5pZGwKaW5k
ZXggMDNjNmJhYi4uZTVmOWFkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQu
aWRsCisrKyBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbApAQCAtMzQsMTYgKzM0LDEzIEBA
IG1vZHVsZSBldmVudHMgewogLy8gV2UgbmVlZCB0byBoYXZlIHNvbWV0aGluZyBhcyBhbiBPYmpD
IGJpbmRpbmcsIGJlY2F1c2UgTWVzc2FnZVBvcnQgaXMgdXNlZCBpbiBNZXNzYWdlRXZlbnQsIHdo
aWNoIGFscmVhZHkgaGFzIG9uZSwKIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGFjdHVhbGx5IGV4
cG9zZSB0aGUgQVBJIHdoaWxlIGl0IGlzIGluIGZsdXguCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9K
QVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCi0gICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBib29sZWFuIGFjdGl2ZTsKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJp
bmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9ydCkKICAgICAg
ICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICBbQ3VzdG9tXSBNZXNzYWdlUG9y
dCBzdGFydENvbnZlcnNhdGlvbihpbiBET01TdHJpbmcgbWVzc2FnZSk7CiAgICAgICAgIHZvaWQg
c3RhcnQoKTsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgICAgIC8vIGV2ZW50IGhhbmRs
ZXIgYXR0cmlidXRlcwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7
Ci0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2xvc2U7CiAKICAgICAgICAgLy8g
RXZlbnRUYXJnZXQgaW50ZXJmYWNlCiAgICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0
ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdl
UG9ydFByb3h5LmggYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydFByb3h5LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQwMjRmM2QuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9kb20vTWVz
c2FnZVBvcnRQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoNCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0gKg0K
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dA0KLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUNCi0gKiBtZXQ6DQotICoNCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodA0KLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4NCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUN
Ci0gKiBkaXN0cmlidXRpb24uDQotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCi0gKg0KLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMNCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUDQotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsDQotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQ0KLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLg0KLSAqLw0KLQ0KLSNpZm5kZWYgTWVzc2FnZVBvcnRQcm94eV9oDQotI2RlZmluZSBN
ZXNzYWdlUG9ydFByb3h5X2gNCi0NCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4NCi0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4NCi0NCi1uYW1lc3BhY2UgV2ViQ29yZSB7DQotDQotICAg
IGNsYXNzIE1lc3NhZ2VQb3J0Ow0KLSAgICBjbGFzcyBTdHJpbmc7DQotDQotICAgIGNsYXNzIE1l
c3NhZ2VQb3J0UHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZXNzYWdlUG9ydFByb3h5PiB7DQot
ICAgIHB1YmxpYzoNCi0gICAgICAgIHZpcnR1YWwgfk1lc3NhZ2VQb3J0UHJveHkoKSB7IH0NCi0N
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBlbnRhbmdsZShNZXNzYWdlUG9ydFByb3h5KikgPSAwOw0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHVuZW50YW5nbGUoKSA9IDA7DQotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVsaXZlck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1l
c3NhZ2VQb3J0PikgPSAwOw0KLSAgICAgICAgdmlydHVhbCB2b2lkIHF1ZXVlQ2xvc2VFdmVudCgp
ID0gMDsNCi0gICAgfTsNCi0NCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQotDQotI2VuZGlmIC8v
IE1lc3NhZ2VQb3J0UHJveHlfaA0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
UHJveHlCYXNlLmNwcCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0UHJveHlCYXNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTAyOTg2Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRQcm94eUJhc2UuY3BwCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0UHJveHlCYXNlLmgiCisKKyNp
bmNsdWRlICJNZXNzYWdlUG9ydFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFz
c1JlZlB0cjxNZXNzYWdlUG9ydFByb3h5QmFzZTo6RXZlbnREYXRhPiBNZXNzYWdlUG9ydFByb3h5
QmFzZTo6RXZlbnREYXRhOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzT3duUHRy
PE1lc3NhZ2VQb3J0UHJveHlCYXNlPiBwb3J0UHJveHkpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBFdmVudERhdGEobWVzc2FnZSwgcG9ydFByb3h5KSk7Cit9CisKK01lc3NhZ2VQb3J0UHJv
eHlCYXNlOjpFdmVudERhdGE6OkV2ZW50RGF0YShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRQcm94eUJhc2U+IHBvcnRQcm94eSkKKyAgICA6IG1fbWVzc2FnZSht
ZXNzYWdlLmNvcHkoKSkKKyAgICAsIG1fcHJveHkocG9ydFByb3h5KQoreworfQorCitNZXNzYWdl
UG9ydFByb3h5QmFzZTo6TWVzc2FnZVBvcnRQcm94eUJhc2UoUGFzc1JlZlB0cjxNZXNzYWdlUG9y
dFByb3h5PiBwcm94eSkKKyAgICA6IG1fcHJveHkocHJveHkpCit7Cit9CisKK01lc3NhZ2VQb3J0
UHJveHlCYXNlOjp+TWVzc2FnZVBvcnRQcm94eUJhc2UoKQoreworICAgIC8vIE1ha2Ugc3VyZSB3
ZSBjbG9zZSBvdXIgcHJveHkgb2JqZWN0IHdoZW4gdGhlIGJhc2UgaXMgZnJlZWQsIHRvIGtlZXAg
dGhlIHByb3h5IG9iamVjdHMgZnJvbSBsZWFraW5nLgorICAgIG1fcHJveHktPmNsb3NlKCk7Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9N
ZXNzYWdlUG9ydFByb3h5QmFzZS5oIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRQcm94eUJhc2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjJjOTUwCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRQcm94eUJhc2UuaApAQCAtMCwwICsxLDk2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBNZXNzYWdlUG9ydFByb3h5QmFzZV9oCisjZGVmaW5lIE1lc3NhZ2VQb3J0UHJv
eHlCYXNlX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBNZXNzYWdlUG9ydDsK
KyAgICBjbGFzcyBNZXNzYWdlUG9ydFByb3h5OworICAgIGNsYXNzIFN0cmluZzsKKworICAgIC8v
IE1lc3NhZ2VQb3J0UHJveHlCYXNlIGlzIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgaW50ZXJmYWNl
IHRvIHRoZSByZW1vdGUgc2lkZSBvZiBhIG1lc3NhZ2UgY2hhbm5lbC4KKyAgICAvLyBJdCBhY3Rz
IGFzIGEgd3JhcHBlciBhcm91bmQgdGhlIHBsYXRmb3JtLWRlcGVuZGVudCBNZXNzYWdlUG9ydFBy
b3h5IGltcGxlbWVudGF0aW9uIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgcGxhdGZvcm0tZGVwZW5k
ZW50IGNsb3NlKCkgbWV0aG9kIGlzIGludm9rZWQgYmVmb3JlIGRlc3RydWN0aW9uLgorICAgIGNs
YXNzIE1lc3NhZ2VQb3J0UHJveHlCYXNlIHsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgLy8gRW50
YW5nbGVzIHRoZSBwcm94eSB3aXRoIGEgcG9ydCAoY2FsbGVkIHdoZW4gYSBwb3J0IGhhcyBiZWVu
IGNsb25lZCwgYWZ0ZXIgdGhlIGNsb25lIGhhcyBiZWVuIG1hcnNoYWxsZWQgdG8gaXRzIG5ldyBv
d25pbmcgdGhyZWFkIGFuZCBpcyByZWFkeSB0byByZWNlaXZlIG1lc3NhZ2VzKS4KKyAgICAgICAg
Ly8gUmV0dXJucyBmYWxzZSBpZiB0aGUgZW50YW5nbGVtZW50IGZhaWxlZCBiZWNhdXNlIHRoZSBw
b3J0IHdhcyBjbG9zZWQuCisgICAgICAgIGJvb2wgZW50YW5nbGVJZk9wZW4oTWVzc2FnZVBvcnQq
KTsKKworICAgICAgICAvLyBEaXNlbnRhbmdsZXMgdGhlIHByb3h5IGZyb20gYSBnaXZlbiBwb3J0
IHNvIGl0IG5vIGxvbmdlciBmb3J3YXJkcyBtZXNzYWdlcyB0byB0aGUgcG9ydC4gQ2FsbGVkIHdo
ZW4gdGhlIHBvcnQgaXMgYmVpbmcgY2xvbmVkIGFuZCBubyBuZXcgb3duaW5nIHRocmVhZCBoYXMg
eWV0IGJlZW4gZXN0YWJsaXNoZWQuCisgICAgICAgIHZvaWQgZGlzZW50YW5nbGUoKTsKKworICAg
ICAgICAvLyBDbG9zZXMgdGhlIHBvcnQgKGVuc3VyZXMgdGhhdCBubyBmdXJ0aGVyIG1lc3NhZ2Vz
IGNhbiBiZSBhZGRlZCB0byBlaXRoZXIgcXVldWUpLgorICAgICAgICB2b2lkIGNsb3NlKCk7CisK
KyAgICAgICAgLy8gVXNlZCBieSBNZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgpIHRvIHByZXZlbnQg
Y2FsbGVycyBmcm9tIHBhc3NpbmcgYSBwb3J0J3Mgb3duIGVudGFuZ2xlZCBwb3J0LgorICAgICAg
ICBib29sIGlzUHJveHlGb3IoTWVzc2FnZVBvcnQqKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHByb3h5IGN1cnJlbnRseSBjb250YWlucyBtZXNzYWdlcyBmb3IgdGhpcyBwb3J0
LCBvciBtYXkgcmVjZWl2ZSBtZXNzYWdlcyBpbiB0aGUgZnV0dXJlIChpcyBvcGVuKS4KKyAgICAg
ICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKTsKKworICAgICAgICBjbGFzcyBFdmVudERhdGEg
OiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudERhdGE+IHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnREYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nJiwg
UGFzc093blB0cjxNZXNzYWdlUG9ydFByb3h5QmFzZT4pOworCisgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UoKSB7IHJldHVybiBtX21lc3NhZ2U7IH0KKyAgICAgICAgICAgIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRQcm94eUJhc2U+IHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5yZWxl
YXNlKCk7IH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEV2ZW50RGF0YShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRQcm94eUJhc2U+KTsKKyAgICAg
ICAgICAgIFN0cmluZyBtX21lc3NhZ2U7CisgICAgICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRQ
cm94eUJhc2U+IG1fcHJveHk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU2VuZHMgYSBtZXNz
YWdlIGFuZCBvcHRpb25hbCBjbG9uZWQgcG9ydCB0byB0aGUgcmVtb3RlIHBvcnQuCisgICAgICAg
IHZvaWQgcG9zdE1lc3NhZ2VUb1JlbW90ZShQYXNzUmVmUHRyPEV2ZW50RGF0YT4pOworCisgICAg
ICAgIC8vIEV4dHJhY3RzIGEgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIHF1ZXVlIGZvciB0aGlz
IHBvcnQuCisgICAgICAgIGJvb2wgdHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUoUmVmUHRyPEV2ZW50
RGF0YT4mKTsKKworICAgICAgICBNZXNzYWdlUG9ydFByb3h5QmFzZShQYXNzUmVmUHRyPE1lc3Nh
Z2VQb3J0UHJveHk+KTsKKyAgICAgICAgfk1lc3NhZ2VQb3J0UHJveHlCYXNlKCk7CisgICAgcHJp
dmF0ZToKKworICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnRQcm94eT4gbV9wcm94eTsKKyAgICB9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNZXNzYWdlUG9ydFByb3h5
QmFzZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9kZWZhdWx0L01lc3NhZ2VQb3J0UHJveHku
Y3BwIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9NZXNzYWdlUG9ydFByb3h5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQyNmIwCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9kb20vZGVmYXVsdC9NZXNzYWdlUG9ydFByb3h5LmNwcApAQCAtMCwwICsxLDIwMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydFByb3h5LmgiCisKKyNpbmNs
dWRlICJNZXNzYWdlUG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE1lc3NhZ2VQ
b3J0UHJveHlCYXNlIGltcGxlbWVudGF0aW9ucyAtIGp1c3QgZGVsZWdhdGUgdG8gdGhlIE1lc3Nh
Z2VQb3J0UHJveHkuCitib29sIE1lc3NhZ2VQb3J0UHJveHlCYXNlOjplbnRhbmdsZUlmT3BlbihN
ZXNzYWdlUG9ydCogcG9ydCkKK3sKKyAgICByZXR1cm4gbV9wcm94eS0+ZW50YW5nbGVJZk9wZW4o
cG9ydCk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnRQcm94eUJhc2U6OmRpc2VudGFuZ2xlKCkKK3sK
KyAgICBtX3Byb3h5LT5kaXNlbnRhbmdsZSgpOworfQorCit2b2lkIE1lc3NhZ2VQb3J0UHJveHlC
YXNlOjpwb3N0TWVzc2FnZVRvUmVtb3RlKFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRQcm94eUJhc2U6
OkV2ZW50RGF0YT4gbXNnKQoreworICAgIG1fcHJveHktPnBvc3RNZXNzYWdlVG9SZW1vdGUobXNn
KTsKK30KKworYm9vbCBNZXNzYWdlUG9ydFByb3h5QmFzZTo6dHJ5R2V0TWVzc2FnZUZyb21SZW1v
dGUoUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHlCYXNlOjpFdmVudERhdGE+JiByZXN1bHQpCit7Cisg
ICAgcmV0dXJuIG1fcHJveHktPnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKHJlc3VsdCk7Cit9CisK
K3ZvaWQgTWVzc2FnZVBvcnRQcm94eUJhc2U6OmNsb3NlKCkKK3sKKyAgICBtX3Byb3h5LT5jbG9z
ZSgpOworfQorCitib29sIE1lc3NhZ2VQb3J0UHJveHlCYXNlOjppc1Byb3h5Rm9yKE1lc3NhZ2VQ
b3J0KiBwb3J0KQoreworICAgIHJldHVybiBtX3Byb3h5LT5pc1Byb3h5Rm9yKHBvcnQpOworfQor
Citib29sIE1lc3NhZ2VQb3J0UHJveHlCYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKQoreworICAg
IHJldHVybiBtX3Byb3h5LT5oYXNQZW5kaW5nQWN0aXZpdHkoKTsKK30KKworTWVzc2FnZVBvcnRQ
cm94eTo6TWVzc2FnZVBvcnRQcm94eShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IGluY29t
aW5nLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IG91dGdvaW5nKQorICAgIDogbV9lbnRh
bmdsZWRQcm94eSgwKQorICAgICwgbV9pbmNvbWluZ1F1ZXVlKGluY29taW5nKQorICAgICwgbV9v
dXRnb2luZ1F1ZXVlKG91dGdvaW5nKQorICAgICwgbV9yZW1vdGVQb3J0KDApCit7Cit9CisKK01l
c3NhZ2VQb3J0UHJveHk6On5NZXNzYWdlUG9ydFByb3h5KCkKK3sKK30KKwordm9pZCBNZXNzYWdl
UG9ydFByb3h5OjpjcmVhdGVDaGFubmVsKFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQxLCBQ
YXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0MikKK3sKKyAgICAvLyBDcmVhdGUgaW5jb21pbmcv
b3V0Z29pbmcgcXVldWVzLgorICAgIFJlZlB0cjxNZXNzYWdlUG9ydFByb3h5OjpNZXNzYWdlUG9y
dFF1ZXVlPiBxdWV1ZTEgPSBNZXNzYWdlUG9ydFByb3h5OjpNZXNzYWdlUG9ydFF1ZXVlOjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8TWVzc2FnZVBvcnRQcm94eTo6TWVzc2FnZVBvcnRRdWV1ZT4gcXVl
dWUyID0gTWVzc2FnZVBvcnRQcm94eTo6TWVzc2FnZVBvcnRRdWV1ZTo6Y3JlYXRlKCk7CisKKyAg
ICAvLyBDcmVhdGUgcHJveGllcyBmb3IgZWFjaCBlbmRwb2ludC4KKyAgICBSZWZQdHI8TWVzc2Fn
ZVBvcnRQcm94eT4gcHJveHkxID0gYWRvcHRSZWYobmV3IE1lc3NhZ2VQb3J0UHJveHkocXVldWUx
LCBxdWV1ZTIpKTsKKyAgICBSZWZQdHI8TWVzc2FnZVBvcnRQcm94eT4gcHJveHkyID0gYWRvcHRS
ZWYobmV3IE1lc3NhZ2VQb3J0UHJveHkocXVldWUyLCBxdWV1ZTEpKTsKKworICAgIC8vIEVudGFu
Z2xlIHRoZSB0d28gZW5kcG9pbnRzLgorICAgIHByb3h5MS0+c2V0RW50YW5nbGVkUHJveHkocHJv
eHkyKTsKKyAgICBwcm94eTItPnNldEVudGFuZ2xlZFByb3h5KHByb3h5MSk7CisKKyAgICAvLyBO
b3cgZW50YW5nbGUgdGhlIHByb3hpZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbG9jYWwgcG9ydHMu
CisgICAgcG9ydDEtPmVudGFuZ2xlKG5ldyBNZXNzYWdlUG9ydFByb3h5QmFzZShwcm94eTIpKTsK
KyAgICBwb3J0Mi0+ZW50YW5nbGUobmV3IE1lc3NhZ2VQb3J0UHJveHlCYXNlKHByb3h5MSkpOwor
fQorCitib29sIE1lc3NhZ2VQb3J0UHJveHk6OmVudGFuZ2xlSWZPcGVuKE1lc3NhZ2VQb3J0KiBw
b3J0KQoreworICAgIC8vIFdlIGNhbid0IGNhbGwgbWVtYmVyIGZ1bmN0aW9ucyBvbiBvdXIgcmVt
b3RlIHBhaXIgd2hpbGUgaG9sZGluZyBvdXIgbXV0ZXggb3Igd2UnbGwgZGVhZGxvY2ssIGJ1dCB3
ZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgdGhlIHJlbW90ZSBwb3J0IGdldHRpbmcgY2xvc2VkL2Zy
ZWVkLCBzbyBjcmVhdGUgYSBzdGFuZGFsb25lIHJlZmVyZW5jZS4KKyAgICBSZWZQdHI8TWVzc2Fn
ZVBvcnRQcm94eT4gcmVtb3RlID0gZW50YW5nbGVkUHJveHkoKTsKKyAgICBpZiAoIXJlbW90ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlbW90ZS0+c2V0UmVtb3RlUG9ydChwb3J0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZXNzYWdlUG9ydFByb3h5OjpkaXNlbnRhbmds
ZSgpCit7CisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+IHJlbW90ZSA9IGVudGFuZ2xlZFBy
b3h5KCk7CisgICAgaWYgKHJlbW90ZSkKKyAgICAgICAgcmVtb3RlLT5zZXRSZW1vdGVQb3J0KDAp
OworfQorCit2b2lkIE1lc3NhZ2VQb3J0UHJveHk6OnNldFJlbW90ZVBvcnQoTWVzc2FnZVBvcnQq
IHBvcnQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAvLyBTaG91bGQg
bmV2ZXIgc2V0IHBvcnQgaWYgaXQgaXMgYWxyZWFkeSBzZXQuCisgICAgaWYgKHBvcnQpCisgICAg
ICAgIEFTU0VSVCghbV9yZW1vdGVQb3J0KTsKKyAgICBtX3JlbW90ZVBvcnQgPSBwb3J0OworfQor
CitNZXNzYWdlUG9ydCogTWVzc2FnZVBvcnRQcm94eTo6cmVtb3RlUG9ydCgpCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9yZW1vdGVQb3J0OworfQorCitQ
YXNzUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+IE1lc3NhZ2VQb3J0UHJveHk6OmVudGFuZ2xlZFBy
b3h5KCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIHJldHVybiBtX2Vu
dGFuZ2xlZFByb3h5OworfQorCit2b2lkIE1lc3NhZ2VQb3J0UHJveHk6OnNldEVudGFuZ2xlZFBy
b3h5KFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRQcm94eT4gcmVtb3RlKQoreworICAgIE11dGV4TG9j
a2VyIGxvY2sobV9tdXRleCk7CisgICAgLy8gU2hvdWxkIG9ubHkgYmUgc2V0IGFzIHBhcnQgb2Yg
aW5pdGlhbCBjcmVhdGlvbi9lbnRhbmdsZW1lbnQuCisgICAgaWYgKHJlbW90ZSkKKyAgICAgICAg
QVNTRVJUKCFtX2VudGFuZ2xlZFByb3h5LmdldCgpKTsKKyAgICBtX2VudGFuZ2xlZFByb3h5ID0g
cmVtb3RlOworfQorCit2b2lkIE1lc3NhZ2VQb3J0UHJveHk6OnBvc3RNZXNzYWdlVG9SZW1vdGUo
UGFzc1JlZlB0cjxNZXNzYWdlUG9ydFByb3h5QmFzZTo6RXZlbnREYXRhPiBtc2cpCit7CisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBpZiAoIW1fb3V0Z29pbmdRdWV1ZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGJvb2wgd2FzRW1wdHkgPSBtX291dGdvaW5nUXVldWUtPmFwcGVu
ZEFuZENoZWNrRW1wdHkobXNnKTsKKyAgICBpZiAod2FzRW1wdHkgJiYgbV9yZW1vdGVQb3J0KQor
ICAgICAgICBtX3JlbW90ZVBvcnQtPm1lc3NhZ2VBdmFpbGFibGUoKTsKK30KKworYm9vbCBNZXNz
YWdlUG9ydFByb3h5Ojp0cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShSZWZQdHI8TWVzc2FnZVBvcnRQ
cm94eUJhc2U6OkV2ZW50RGF0YT4mIHJlc3VsdCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1f
bXV0ZXgpOworICAgIHJldHVybiBtX2luY29taW5nUXVldWUtPnRyeUdldE1lc3NhZ2UocmVzdWx0
KTsKK30KKworYm9vbCBNZXNzYWdlUG9ydFByb3h5Ojppc1Byb3h5Rm9yKE1lc3NhZ2VQb3J0KiBw
b3J0KQoreworICAgIFJlZlB0cjxNZXNzYWdlUG9ydFByb3h5PiByZW1vdGUgPSBlbnRhbmdsZWRQ
cm94eSgpOworICAgIGlmICghcmVtb3RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHBvcnQgPT0gcmVtb3RlLT5yZW1vdGVQb3J0KCk7Cit9CisKKy8vIENsb3NlcyB0aGUgcG9y
dCBzbyBubyBmdXJ0aGVyIG1lc3NhZ2VzIGNhbiBiZSBzZW50IGZyb20gZWl0aGVyIGVuZC4KK3Zv
aWQgTWVzc2FnZVBvcnRQcm94eTo6Y2xvc2UoKQoreworICAgIFJlZlB0cjxNZXNzYWdlUG9ydFBy
b3h5PiByZW1vdGUgPSBlbnRhbmdsZWRQcm94eSgpOworICAgIGlmIChyZW1vdGUpIHsKKyAgICAg
ICAgY2xvc2VJbnRlcm5hbCgpOworICAgICAgICByZW1vdGUtPmNsb3NlSW50ZXJuYWwoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnRQcm94eTo6Y2xvc2VJbnRlcm5hbCgpCit7CisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAvLyBEaXNlbnRhbmdsZSBvdXJzZWx2ZXMg
ZnJvbSB0aGUgb3RoZXIgZW5kLiBXZSBzdGlsbCBtYWludGFpbiBhIHJlZmVyZW5jZSB0byBvdXIg
aW5jb21pbmcgcXVldWUsIHNpbmNlIHByZXZpb3VzbHktZXhpc3RpbmcgbWVzc2FnZXMgc2hvdWxk
IHN0aWxsIGJlIGRlbGl2ZXJlZC4KKyAgICBtX3JlbW90ZVBvcnQgPSAwOworICAgIG1fZW50YW5n
bGVkUHJveHkgPSAwOworICAgIG1fb3V0Z29pbmdRdWV1ZSA9IDA7Cit9CisKK2Jvb2wgTWVzc2Fn
ZVBvcnRQcm94eTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkKK3sKKyAgICBNdXRleExvY2tlciBsb2Nr
KG1fbXV0ZXgpOworICAgIHJldHVybiBtX2VudGFuZ2xlZFByb3h5IHx8ICFtX2luY29taW5nUXVl
dWUtPmlzRW1wdHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vZGVmYXVsdC9NZXNzYWdlUG9ydFByb3h5LmggYi9XZWJDb3JlL2RvbS9kZWZh
dWx0L01lc3NhZ2VQb3J0UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xYTlkNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9NZXNzYWdl
UG9ydFByb3h5LmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lc3NhZ2VQb3J0UHJveHlfaAor
I2RlZmluZSBNZXNzYWdlUG9ydFByb3h5X2gKKworI2luY2x1ZGUgIk1lc3NhZ2VQb3J0UHJveHlC
YXNlLmgiCisKKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIE1lc3NhZ2VQb3J0OworCisgICAgLy8gTWVzc2FnZVBvcnRQcm94
eSBpcyBhIHBsYXRmb3JtLWRlcGVuZGVudCBpbnRlcmZhY2UgdG8gdGhlIHJlbW90ZSBzaWRlIG9m
IGEgbWVzc2FnZSBjaGFubmVsLgorICAgIC8vIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBz
dXBwb3J0cyBtdWx0aXBsZSB0aHJlYWRzIHJ1bm5pbmcgd2l0aGluIGEgc2luZ2xlIHByb2Nlc3Mu
IEltcGxlbWVudGF0aW9ucyBmb3IgbXVsdGktcHJvY2VzcyBwbGF0Zm9ybXMgc2hvdWxkIGRlZmlu
ZSB0aGVzZSBwdWJsaWMgQVBJcyBpbiB0aGVpciBvd24gcGxhdGZvcm0tc3BlY2lmaWMgTWVzc2Fn
ZVBvcnRQcm94eSBmaWxlLgorICAgIC8vIFRoZSBnb2FsIG9mIHRoaXMgaW1wbGVtZW50YXRpb24g
aXMgdG8gZWxpbWluYXRlIGNvbnRlbnRpb24gZXhjZXB0IHdoZW4gY2xvbmluZyBvciBjbG9zaW5n
IHRoZSBwb3J0LCBzbyBlYWNoIHNpZGUgb2YgdGhlIGNoYW5uZWwgaGFzIGl0cyBvd24gc2VwYXJh
dGUgbXV0ZXguCisgICAgY2xhc3MgTWVzc2FnZVBvcnRQcm94eSA6IHB1YmxpYyBUaHJlYWRTYWZl
U2hhcmVkPE1lc3NhZ2VQb3J0UHJveHk+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIENyZWF0
ZXMgYSBjaGFubmVsIGVudGFuZ2xpbmcgdHdvIHBvcnRzLgorICAgICAgICBzdGF0aWMgdm9pZCBj
cmVhdGVDaGFubmVsKFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+LCBQYXNzUmVmUHRyPE1lc3NhZ2VQ
b3J0Pik7CisgICAgICAgIC8vIEVudGFuZ2xlcyB0aGUgcHJveHkgd2l0aCBhIHBvcnQgKGNhbGxl
ZCB3aGVuIGEgcG9ydCBoYXMgYmVlbiBjbG9uZWQsIGFmdGVyIHRoZSBjbG9uZSBoYXMgYmVlbiBt
YXJzaGFsbGVkIHRvIGl0cyBuZXcgb3duaW5nIHRocmVhZCBhbmQgaXMgcmVhZHkgdG8gcmVjZWl2
ZSBtZXNzYWdlcykuCisgICAgICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGVudGFuZ2xlbWVu
dCBmYWlsZWQgYmVjYXVzZSB0aGUgcG9ydCB3YXMgY2xvc2VkLgorICAgICAgICBib29sIGVudGFu
Z2xlSWZPcGVuKE1lc3NhZ2VQb3J0Kik7CisKKyAgICAgICAgLy8gRGlzZW50YW5nbGVzIHRoZSBw
cm94eSBmcm9tIGEgZ2l2ZW4gcG9ydCBzbyBpdCBubyBsb25nZXIgZm9yd2FyZHMgbWVzc2FnZXMg
dG8gdGhlIHBvcnQuIENhbGxlZCB3aGVuIHRoZSBwb3J0IGlzIGJlaW5nIGNsb25lZCBhbmQgbm8g
bmV3IG93bmluZyB0aHJlYWQgaGFzIHlldCBiZWVuIGVzdGFibGlzaGVkLgorICAgICAgICB2b2lk
IGRpc2VudGFuZ2xlKCk7CisKKyAgICAgICAgLy8gU2VuZHMgYSBtZXNzYWdlIGFuZCBvcHRpb25h
bCBjbG9uZWQgcG9ydCB0byB0aGUgcmVtb3RlIHBvcnQuCisgICAgICAgIHZvaWQgcG9zdE1lc3Nh
Z2VUb1JlbW90ZShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHlCYXNlOjpFdmVudERhdGE+KTsK
KworICAgICAgICAvLyBFeHRyYWN0cyBhIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBxdWV1ZSBm
b3IgdGhpcyBwb3J0LgorICAgICAgICBib29sIHRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKFJlZlB0
cjxNZXNzYWdlUG9ydFByb3h5QmFzZTo6RXZlbnREYXRhPiYpOworCisgICAgICAgIC8vIENsb3Nl
cyB0aGUgcG9ydCAoZW5zdXJlcyB0aGF0IG5vIGZ1cnRoZXIgbWVzc2FnZXMgY2FuIGJlIGFkZGVk
IHRvIGVpdGhlciBxdWV1ZSkuCisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAvLyBV
c2VkIGJ5IE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCkgdG8gcHJldmVudCBjYWxsZXJzIGZyb20g
cGFzc2luZyBhIHBvcnQncyBvd24gZW50YW5nbGVkIHBvcnQuCisgICAgICAgIGJvb2wgaXNQcm94
eUZvcihNZXNzYWdlUG9ydCopOworCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJv
eHkgY3VycmVudGx5IGNvbnRhaW5zIG1lc3NhZ2VzIGZvciB0aGlzIHBvcnQsIG9yIG1heSByZWNl
aXZlIG1lc3NhZ2VzIGluIHRoZSBmdXR1cmUgKGlzIG9wZW4pLgorICAgICAgICBib29sIGhhc1Bl
bmRpbmdBY3Rpdml0eSgpOworCisgICAgICAgIC8vIFdyYXBwZXIgZm9yIE1lc3NhZ2VRdWV1ZSB0
aGF0IGFsbG93cyB1cyB0byBkbyB0aHJlYWQgc2FmZSBzaGFyaW5nIGJ5IHR3byBwcm94aWVzLgor
ICAgICAgICBjbGFzcyBNZXNzYWdlUG9ydFF1ZXVlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8
TWVzc2FnZVBvcnRRdWV1ZT4KKyAgICAgICAgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydFF1ZXVlPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgTWVzc2FnZVBvcnRRdWV1ZSgpKTsgfQorCisgICAgICAgICAgICBpbmxpbmUg
Ym9vbCB0cnlHZXRNZXNzYWdlKFJlZlB0cjxNZXNzYWdlUG9ydFByb3h5QmFzZTo6RXZlbnREYXRh
PiYgcmVzdWx0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3F1ZXVl
LnRyeUdldE1lc3NhZ2UocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5s
aW5lIGJvb2wgYXBwZW5kQW5kQ2hlY2tFbXB0eShjb25zdCBSZWZQdHI8TWVzc2FnZVBvcnRQcm94
eUJhc2U6OkV2ZW50RGF0YT4mIG1lc3NhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fcXVldWUuYXBwZW5kQW5kQ2hlY2tFbXB0eShtZXNzYWdlKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaW5saW5lIGJvb2wgaXNFbXB0eSgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcXVldWUuaXNFbXB0eSgpOworICAgICAgICAgICAg
fQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgTWVzc2FnZVBvcnRRdWV1ZSgpIHt9Cisg
ICAgICAgICAgICAvLyBGSVhNRTogVXNlIGEgbG9jay1mcmVlIHF1ZXVlIGltcGxlbWVudGF0aW9u
IHRvIGNvbXBsZXRlbHkgZWxpbWluYXRlIGNvbnRlbnRpb24gd2hlbiBzZW5kaW5nL3JlY2Vpdmlu
ZyBtZXNzYWdlcy4KKyAgICAgICAgICAgIE1lc3NhZ2VRdWV1ZTxSZWZQdHI8TWVzc2FnZVBvcnRQ
cm94eUJhc2U6OkV2ZW50RGF0YT4gPiBtX3F1ZXVlOworICAgICAgICB9OworCisgICAgICAgIH5N
ZXNzYWdlUG9ydFByb3h5KCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgTWVzc2FnZVBvcnRQcm94
eShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IGluY29taW5nLCBQYXNzUmVmUHRyPE1lc3Nh
Z2VQb3J0UXVldWU+IG91dGdvaW5nKTsKKworICAgICAgICB2b2lkIGFkZE1lc3NhZ2VUb1F1ZXVl
KFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRQcm94eUJhc2U6OkV2ZW50RGF0YT4pOworCisgICAgICAg
IFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRQcm94eT4gZW50YW5nbGVkUHJveHkoKTsKKyAgICAgICAg
dm9pZCBzZXRFbnRhbmdsZWRQcm94eShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+KTsKKwor
ICAgICAgICB2b2lkIHNldFJlbW90ZVBvcnQoTWVzc2FnZVBvcnQqKTsKKyAgICAgICAgTWVzc2Fn
ZVBvcnQqIHJlbW90ZVBvcnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZUludGVybmFsKCk7CisKKyAg
ICAgICAgLy8gTXV0ZXggdXNlZCB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgb2Jq
ZWN0IGludGVybmFscy4KKyAgICAgICAgTXV0ZXggbV9tdXRleDsKKworICAgICAgICAvLyBQb2lu
dGVyIHRvIG91ciBlbnRhbmdsZWQgcGFpciAtIGNsZWFyZWQgd2hlbiBjbG9zZSgpIGlzIGNhbGxl
ZC4KKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+IG1fZW50YW5nbGVkUHJveHk7CisK
KyAgICAgICAgLy8gUmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHF1ZXVlIGZvciB0aGUgKGxvY2Fs
KSBlbnRhbmdsZWQgcG9ydC4KKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IG1faW5j
b21pbmdRdWV1ZTsKKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IG1fb3V0Z29pbmdR
dWV1ZTsKKworICAgICAgICAvLyBUaGUgcG9ydCB3ZSBhcmUgcHJveHlpbmcgZm9yICh0aGUgcmVt
b3RlIHBvcnQpIC0gdGhpcyBpcyB0aGUgcG9ydCB0aGF0IGlzIG5vdGlmaWVkIHdoZW4gbmV3IG1l
c3NhZ2VzIGFycml2ZS4KKyAgICAgICAgTWVzc2FnZVBvcnQqIG1fcmVtb3RlUG9ydDsKKyAgICB9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNZXNzYWdlUG9ydFByb3h5
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKaW5kZXggYmMxMTkyZC4uYjQ3OWJhYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAg
LTg3LDE0ICs4NywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBvc3RNZXNzYWdl
VGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBQb3N0TWVzc2FnZVRpbWVy
KERPTVdpbmRvdyogd2luZG93LCBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZlbnQsIFNlY3Vy
aXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4pCisgICAgUG9zdE1lc3NhZ2VUaW1lcihET01XaW5kb3cq
IHdpbmRvdywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZU9yaWdp
biwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydFBy
b3h5QmFzZT4gcG9ydFByb3h5LCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3JpZ2luKQogICAgICAg
ICA6IG1fd2luZG93KHdpbmRvdykKLSAgICAgICAgLCBtX2V2ZW50KGV2ZW50KQorICAgICAgICAs
IG1fbWVzc2FnZShtZXNzYWdlKQorICAgICAgICAsIG1fb3JpZ2luKHNvdXJjZU9yaWdpbikKKyAg
ICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV9wcm94eShwb3J0UHJveHkpCiAg
ICAgICAgICwgbV90YXJnZXRPcmlnaW4odGFyZ2V0T3JpZ2luKQogICAgIHsKICAgICB9CiAKLSAg
ICBNZXNzYWdlRXZlbnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5nZXQoKTsgfQor
ICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBkb2N1bWVudCkKKyAgICB7CisgICAgICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IG1lc3Nh
Z2VQb3J0OworICAgICAgICBpZiAobV9wcm94eSkgeworICAgICAgICAgICAgbWVzc2FnZVBvcnQg
PSBNZXNzYWdlUG9ydDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICAgICAgICAgIG1lc3NhZ2VQb3J0
LT5lbnRhbmdsZShtX3Byb3h5LnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1fbWVzc2FnZSwgbV9vcmlnaW4sICIiLCBtX3NvdXJjZSwg
bWVzc2FnZVBvcnQpOworICAgIH0KICAgICBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRPcmlnaW4uZ2V0KCk7IH0KIAogcHJpdmF0ZToKQEAgLTEw
NCw3ICsxMTUsMTAgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBSZWZQdHI8RE9NV2luZG93PiBt
X3dpbmRvdzsKLSAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBtX2V2ZW50OworICAgIFN0cmluZyBt
X21lc3NhZ2U7CisgICAgU3RyaW5nIG1fb3JpZ2luOworICAgIFJlZlB0cjxET01XaW5kb3c+IG1f
c291cmNlOworICAgIE93blB0cjxNZXNzYWdlUG9ydFByb3h5QmFzZT4gbV9wcm94eTsKICAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fdGFyZ2V0T3JpZ2luOwogfTsKIApAQCAtNTkxLDkgKzYw
NSw5IEBAIHZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCwgY29uCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBS
ZWZQdHI8TWVzc2FnZVBvcnQ+IG5ld01lc3NhZ2VQb3J0OworICAgIE93blB0cjxNZXNzYWdlUG9y
dFByb3h5QmFzZT4gcHJveHk7CiAgICAgaWYgKG1lc3NhZ2VQb3J0KQotICAgICAgICBuZXdNZXNz
YWdlUG9ydCA9IG1lc3NhZ2VQb3J0LT5jbG9uZShlYyk7CisgICAgICAgIHByb3h5ID0gbWVzc2Fn
ZVBvcnQtPmRpc2VudGFuZ2xlKGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApA
QCAtNjA1LDcgKzYxOSw3IEBAIHZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCwgY29uCiAgICAgU3RyaW5nIHNv
dXJjZU9yaWdpbiA9IHNvdXJjZURvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
OwogCiAgICAgLy8gU2NoZWR1bGUgdGhlIG1lc3NhZ2UuCi0gICAgUG9zdE1lc3NhZ2VUaW1lciog
dGltZXIgPSBuZXcgUG9zdE1lc3NhZ2VUaW1lcih0aGlzLCBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSht
ZXNzYWdlLCBzb3VyY2VPcmlnaW4sICIiLCBzb3VyY2UsIG5ld01lc3NhZ2VQb3J0KSwgdGFyZ2V0
LmdldCgpKTsKKyAgICBQb3N0TWVzc2FnZVRpbWVyKiB0aW1lciA9IG5ldyBQb3N0TWVzc2FnZVRp
bWVyKHRoaXMsIG1lc3NhZ2UsIHNvdXJjZU9yaWdpbiwgc291cmNlLCBwcm94eS5yZWxlYXNlKCks
IHRhcmdldC5nZXQoKSk7CiAgICAgdGltZXItPnN0YXJ0T25lU2hvdCgwKTsKIH0KIApAQCAtNjI2
LDEzICs2NDAsOCBAQCB2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RN
ZXNzYWdlVGltZXIqIHQpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBNZXNzYWdlUG9ydCogbWVz
c2FnZVBvcnQgPSB0aW1lci0+ZXZlbnQoKS0+bWVzc2FnZVBvcnQoKTsKLSAgICBBU1NFUlQoIW1l
c3NhZ2VQb3J0IHx8ICFtZXNzYWdlUG9ydC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAg
ICBpZiAobWVzc2FnZVBvcnQpCi0gICAgICAgIG1lc3NhZ2VQb3J0LT5hdHRhY2hUb0NvbnRleHQo
ZG9jdW1lbnQoKSk7Ci0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2
ZW50KHRpbWVyLT5ldmVudCgpLCBlYyk7CisgICAgZGlzcGF0Y2hFdmVudCh0aW1lci0+ZXZlbnQo
ZG9jdW1lbnQoKSksIGVjKTsKIH0KIAogRE9NU2VsZWN0aW9uKiBET01XaW5kb3c6OmdldFNlbGVj
dGlvbigpCg==
</data>
<flag name="review"
          id="15797"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31118</attachid>
            <date>2009-06-09 17:38:40 -0700</date>
            <delta_ts>2009-06-16 22:32:39 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>patch-2.txt</filename>
            <type>text/plain</type>
            <size>80162</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBkMDZkZmEwLi44NTBiZTdmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMDktMDYtMDkgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MDQzPgorICAgICAgICBBZGRlZCBzdXBwb3J0
IGZvciBtdWx0aS10aHJlYWRlZCBNZXNzYWdlUG9ydHMuCisKKyAgICAgICAqIHd0Zi9NZXNzYWdl
UXVldWUuaDoKKyAgICAgICAgKFdURjo6OjphcHBlbmRBbmRDaGVja0VtcHR5KToKKyAgICAgICAg
ICAgIEFkZGVkIEFQSSB0byB0ZXN0IHdoZXRoZXIgdGhlIHF1ZXVlIHdhcyBlbXB0eSBiZWZvcmUg
YWRkaW5nIGFuIGVsZW1lbnQuCisgCiAyMDA5LTA2LTA5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJh
cnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaCBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaAppbmRleCA5NTQ5ZjM3Li43NzIxZGJhIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvd3RmL01lc3NhZ2VRdWV1ZS5oCkBAIC00Nyw5ICs0NywxMCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KICAgICBjbGFzcyBNZXNzYWdlUXVldWUg
OiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBNZXNzYWdlUXVldWUoKSA6IG1f
a2lsbGVkKGZhbHNlKSB7fQorICAgICAgICBNZXNzYWdlUXVldWUoKSA6IG1fa2lsbGVkKGZhbHNl
KSB7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IERhdGFUeXBlJik7Cisg
ICAgICAgIGJvb2wgYXBwZW5kQW5kQ2hlY2tFbXB0eShjb25zdCBEYXRhVHlwZSYpOwogICAgICAg
ICB2b2lkIHByZXBlbmQoY29uc3QgRGF0YVR5cGUmKTsKICAgICAgICAgYm9vbCB3YWl0Rm9yTWVz
c2FnZShEYXRhVHlwZSYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+CkBA
IC04MSw2ICs4MiwxNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgbV9jb25kaXRpb24uc2ln
bmFsKCk7CiAgICAgfQogCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBxdWV1ZSB3YXMgZW1w
dHkgYmVmb3JlIHRoZSBpdGVtIHdhcyBhZGRlZC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRh
VHlwZT4KKyAgICBpbmxpbmUgYm9vbCBNZXNzYWdlUXVldWU8RGF0YVR5cGU+OjphcHBlbmRBbmRD
aGVja0VtcHR5KGNvbnN0IERhdGFUeXBlJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAgICAgYm9vbCB3YXNFbXB0eSA9IG1fcXVldWUuaXNF
bXB0eSgpOworICAgICAgICBtX3F1ZXVlLmFwcGVuZChtZXNzYWdlKTsKKyAgICAgICAgbV9jb25k
aXRpb24uc2lnbmFsKCk7CisgICAgICAgIHJldHVybiB3YXNFbXB0eTsKKyAgICB9CisKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KICAgICBpbmxpbmUgdm9pZCBNZXNzYWdlUXVldWU8
RGF0YVR5cGU+OjpwcmVwZW5kKGNvbnN0IERhdGFUeXBlJiBtZXNzYWdlKQogICAgIHsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAxZWMzMWYxLi43MDZmODBmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDQgKzEsMjYgQEAKLTIwMDktMDYtMDkgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5jb20+CisyMDA5LTA2LTA5ICBEcmV3IFdpbHNvbiAg
PGF0d2lsc29uQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NTA0Mz4KKyAgICAgICAgVXBkYXRlZCBNZXNzYWdlQ2hhbm5lbC9NZXNzYWdlUG9ydHMgdGVzdHMg
dG8gcmVmbGVjdCBsYXRlc3Qgc3BlYyAoY2xvc2UgZXZlbnQgaGFzIGJlZW4gcmVtb3ZlZCkuCisg
ICAgICAgIEFkZGVkIG1vcmUgdGVzdHMgb2YgcG9ydCBjbG9uaW5nLgorCisgICAgICAgICogZmFz
dC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZh
c3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLmh0bWwtZGlzYWJsZWQ6CisgICAgICAgICog
ZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTMtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGZhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLmh0bWwtZGlzYWJsZWQ6CisgICAgICAg
ICogZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MuaHRtbC1kaXNhYmxlZDoKKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtY2xvbmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtY2xvbmUuaHRtbC1kaXNhYmxlZDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtbm8td3JhcHBlci1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1vbmNsb3NlLWV4cGVj
dGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtb25j
bG9zZS5odG1sLWRpc2FibGVkOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3Nh
Z2UtcG9ydC5odG1sLWRpc2FibGVkOgorCisgMjAwOS0wNi0wOSAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTIt
ZXhwZWN0ZWQudHh0CmluZGV4IGM1YWZhNjAuLjY1YjgwODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMi1leHBlY3RlZC50eHQK
QEAgLTEsNSArMSw0IEBACiBUZXN0IHRoYXQgTWVzc2FnZVBvcnQgY2xvc2UgZXZlbnQgZ2V0cyBk
ZWxpdmVyZWQgKHdpdGhvdXQgY3Jhc2hpbmcpIGV2ZW4gaWYgdGhlIGNoYW5uZWwgb2JqZWN0IGlz
IGdhcmJhZ2UgY29sbGVjdGVkLgogCi1vbmNsb3NlCi1jbG9zZSBsaXN0ZW5lcgorRE9ORQogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMi5o
dG1sLWRpc2FibGVkIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdj
LTIuaHRtbC1kaXNhYmxlZAppbmRleCBlMGI3MzQ3Li42MWU1ZjAxIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMi5odG1sLWRpc2FibGVkCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLmh0bWwtZGlz
YWJsZWQKQEAgLTYsNyArNiw2IEBAIGZ1bmN0aW9uIGdjKCkKIHsKICAgICBpZiAod2luZG93LkdD
Q29udHJvbGxlcikKICAgICAgICAgcmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7Ci0KICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsgLy8gPiBmb3JjZSBnYXJiYWdlIGNv
bGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlLIGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxl
Y3QpCiAgICAgICAgIHZhciBzID0gbmV3IFN0cmluZygiYWJjIik7CiAgICAgfQpAQCAtMjQsOSAr
MjMsNiBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAKIHZhciBjaGFubmVs
ID0gbmV3IE1lc3NhZ2VDaGFubmVsOwogCi1jaGFubmVsLnBvcnQxLm9uY2xvc2UgPSBmdW5jdGlv
bigpIHsgbG9nKCJvbmNsb3NlIik7IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsg
Z2MoKTsgfSwgMCkgfQotY2hhbm5lbC5wb3J0MS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsIGZ1
bmN0aW9uKCkgeyBsb2coImNsb3NlIGxpc3RlbmVyIik7IGdjKCk7IH0sIGZhbHNlKTsKLQogZ2Mo
KTsKIGNoYW5uZWwucG9ydDEuc3RhcnQoKTsKIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoIm1z
ZyIpOwpAQCAtMzUsNyArMzEsMTUgQEAgZ2MoKTsKIGNoYW5uZWwucG9ydDEuY2xvc2UoKTsKIGNo
YW5uZWwucG9ydDIuY2xvc2UoKTsKIGdjKCk7CisKK3NldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisg
ICAgbG9nKCJET05FIik7CisgICAgZ2MoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9LCAw
KTsKIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CiBnYygpOworCiA8L3NjcmlwdD4KIDwv
Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5l
bC1nYy0zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hh
bm5lbC1nYy0zLWV4cGVjdGVkLnR4dAppbmRleCBhYTliYjVkLi44YWY4OTI2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMy1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTMtZXhw
ZWN0ZWQudHh0CkBAIC0zLDUgKzMsNSBAQCBUZXN0IHRoYXQgTWVzc2FnZVBvcnQgbWVzc2FnZXMg
YXJlIGRlbGl2ZXJlZCBldmVuIGlmIGJvdGggcG9ydHMgYXJlIGluYWNjZXNzaWJsZQogU2hvdWxk
IHNheSBQQVNTIHR3aWNlLgogCiBQQVNTOiBtZXNzYWdlIGRlbGl2ZXJlZC4gUG9ydDogW29iamVj
dCBNZXNzYWdlUG9ydF0KLVBBU1M6IGNsb3NlIG1lc3NhZ2UgZGVsaXZlcmVkLiBQb3J0OiBbb2Jq
ZWN0IE1lc3NhZ2VQb3J0XQorUEFTUzogcG9ydCBjbG9zZWQuCiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLmh0bWwtZGlzYWJsZWQgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMy5odG1sLWRpc2FibGVk
CmluZGV4IGYxNTg2N2YuLmI5MDZhYTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLmh0bWwtZGlzYWJsZWQKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTMuaHRtbC1kaXNhYmxlZApAQCAtMjgsNyAr
MjgsNiBAQCBmdW5jdGlvbiB0ZXN0MSgpCiAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNo
YW5uZWw7CiAgICAgCiAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQp
IHsgbG9nKCJQQVNTOiBtZXNzYWdlIGRlbGl2ZXJlZC4gUG9ydDogIiArIGV2dC50YXJnZXQpOyB0
ZXN0MigpOyB9Ci0gICAgY2hhbm5lbC5wb3J0MS5zdGFydCgpOwogICAgIGNoYW5uZWwucG9ydDIu
cG9zdE1lc3NhZ2UoIm1zZyIpOwogICAgIAogICAgIGNoYW5uZWwgPSAwOwpAQCAtMzksMTEgKzM4
LDEzIEBAIGZ1bmN0aW9uIHRlc3QyKCkKIHsKICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdl
Q2hhbm5lbDsKICAgICAKLSAgICBjaGFubmVsLnBvcnQxLm9uY2xvc2UgPSBmdW5jdGlvbihldnQp
IHsgbG9nKCJQQVNTOiBjbG9zZSBtZXNzYWdlIGRlbGl2ZXJlZC4gUG9ydDogIiArIGV2dC50YXJn
ZXQpOyBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7IH0KICAgICBjaGFubmVsLnBvcnQyLmNsb3NlKCk7CiAgICAgCiAgICAg
Y2hhbm5lbCA9IDA7CiAgICAgZ2MoKTsKKyAgICBsb2coIlBBU1M6IHBvcnQgY2xvc2VkLiIpOwor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0KIAogdGVzdDEoKTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtZXhwZWN0ZWQudHh0CmluZGV4
IDU0Yzc1ZTAuLjk0OGYzY2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21l
c3NhZ2UtY2hhbm5lbC1nYy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVkLnR4dApAQCAtMyw2ICszLDUgQEAgVGVzdCBz
b21lIGNhc2VzIG9mIE1lc3NhZ2VQb3J0IGdhcmJhZ2UgY29sbGVjdGlvbi4KIFNob3VsZCBiZSAn
YmFyJzogYmFyCiBvbm1lc3NhZ2UKIG1lc3NhZ2UgbGlzdGVuZXIKLW9uY2xvc2UKLWNsb3NlIGxp
c3RlbmVyCitET05FCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3Nh
Z2UtY2hhbm5lbC1nYy5odG1sLWRpc2FibGVkIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1jaGFubmVsLWdjLmh0bWwtZGlzYWJsZWQKaW5kZXggNWU0OWU5ZC4uY2FhMTA4ZSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwt
ZGlzYWJsZWQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdj
Lmh0bWwtZGlzYWJsZWQKQEAgLTI5LDggKzI5LDYgQEAgZ2MoKTsKIGxvZygiU2hvdWxkIGJlICdi
YXInOiAiICsgY2hhbm5lbC5wb3J0MS5mb28pOwogCiBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9
IGZ1bmN0aW9uKCkgeyBsb2coIm9ubWVzc2FnZSIpOyB9Ci1jaGFubmVsLnBvcnQxLm9uY2xvc2Ug
PSBmdW5jdGlvbigpIHsgbG9nKCJvbmNsb3NlIik7IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKSB9LCAwKSB9Ci1jaGFubmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIiwg
ZnVuY3Rpb24oKSB7IGxvZygiY2xvc2UgbGlzdGVuZXIiKTsgfSwgZmFsc2UpOwogY2hhbm5lbC5w
b3J0MS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24oKSB7IGxvZygibWVzc2Fn
ZSBsaXN0ZW5lciIpOyB9LCBmYWxzZSk7CiAKIGdjKCk7CkBAIC00Miw1ICs0MCwxMiBAQCBjaGFu
bmVsLnBvcnQxLmNsb3NlKCk7CiBjaGFubmVsLnBvcnQyLmNsb3NlKCk7CiAKIGdjKCk7CisKK3Nl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgbG9nKCJET05FIik7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpCit9LCAwKTsKKwogPC9zY3JpcHQ+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtY2xvbmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWNsb25lLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTU1NzY1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWNsb25lLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDEyIEBACitUZXN0cyB2YXJpb3VzIHVzZSBjYXNlcyB3aGVuIGNsb25pbmcgTWVz
c2FnZVBvcnRzLgorCitTaG91bGQgYmUgYSBzZXJpZXMgb2YgU1VDQ0VTUyBtZXNzYWdlcywgZm9s
bG93ZWQgd2l0aCBET05FLgorCitTVUNDRVNTOiBQb3N0aW5nIHBvcnQgdG8gaXRzZWxmCitTVUND
RVNTOiBQb3N0aW5nIGVudGFuZ2xlZCBwb3J0CitTVUNDRVNTOiBQb3N0aW5nIGNsb25lZCBwb3J0
CitTVUNDRVNTOiBQb3N0ZWQgbWVzc2FnZXMgdG8gY2xvbmVkIHBvcnQKK1NVQ0NFU1M6IENsb25l
ZCBib3RoIGVuZHBvaW50cyBvZiBhIGNoYW5uZWwKK1NVQ0NFU1M6IEdvdCBjbG9zZWQgcG9ydCB3
aXRoIGV2ZW50IG1lc3NhZ2UgY2xvc2VkCitET05FCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1jbG9uZS5odG1sLWRpc2FibGVkIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWNsb25lLmh0bWwtZGlzYWJsZWQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1ODVmNQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1jbG9uZS5odG1sLWRpc2FibGVkCkBA
IC0wLDAgKzEsMTMzIEBACis8Ym9keT4KKzxwPlRlc3RzIHZhcmlvdXMgdXNlIGNhc2VzIHdoZW4g
Y2xvbmluZyBNZXNzYWdlUG9ydHMuPC9wPgorPHA+U2hvdWxkIGJlIGEgc2VyaWVzIG9mIFNVQ0NF
U1MgbWVzc2FnZXMsIGZvbGxvd2VkIHdpdGggRE9ORS48L3A+Cis8cHJlIGlkPWxvZz48L3ByZT4K
KzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGdjKCkKK3sKKyAgICBpZiAod2luZG93LkdDQ29udHJvbGxl
cikKKyAgICAgICAgcmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsgLy8gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIChG
RiByZXF1aXJlcyBhYm91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBjb2xsZWN0KQorICAgICAg
ICB2YXIgcyA9IG5ldyBTdHJpbmcoImFiYyIpOworICAgIH0KK30KKworZnVuY3Rpb24gbG9nKG1l
c3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVySFRNTCAr
PSBtZXNzYWdlICsgIjxicj4iOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGNoYW5uZWwgPSBuZXcgTWVz
c2FnZUNoYW5uZWw7CitjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGNoYW5uZWwucG9ydDIub25t
ZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgIGZhaWwoIkZBSUw6IFNob3VsZCBub3QgaGF2ZSBy
ZWNlaXZlZCBtZXNzYWdlOiAiICsgZXZ0LmRhdGEpOworfQordHJ5IHsKKyAgY2hhbm5lbC5wb3J0
MS5wb3N0TWVzc2FnZSgibXNnIiwgcG9ydDEpOworICBsb2coIkZBSUw6IFBvc3RpbmcgcG9ydCB0
byBpdHNlbGYgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiIpOworfSBjYXRjaCAoZXgpIHsKKyAg
bG9nKCJTVUNDRVNTOiBQb3N0aW5nIHBvcnQgdG8gaXRzZWxmIik7Cit9CisKK3RyeSB7CisgIGNo
YW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoIm1zZyIsIHBvcnQyKTsKKyAgbG9nKCJGQUlMOiBQb3N0
aW5nIHBvcnQgdG8gZW50YW5nbGVkIHBhaXIgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiIpOwor
fSBjYXRjaCAoZXgpIHsKKyAgbG9nKCJTVUNDRVNTOiBQb3N0aW5nIGVudGFuZ2xlZCBwb3J0Iik7
Cit9CisKK2NoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7Cit2YXIgY2hhbm5lbDIgPSBuZXcg
TWVzc2FnZUNoYW5uZWw7CitjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCJtc2ciLCBjaGFubmVs
Mi5wb3J0MSk7CisKKy8vIFNob3VsZCBub3QgYmUgYWJsZSB0byBwb3N0IGEgY2xvbmVkIHBvcnQK
K3RyeSB7CisgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwyLnBvcnQx
KTsKKyAgbG9nKCJGQUlMOiBQb3N0aW5nIGNsb25lZCBwb3J0IHNob3VsZCB0aHJvdyBhbiBleGNl
cHRpb24iKTsKK30gY2F0Y2ggKGV4KSB7CisgIGxvZygiU1VDQ0VTUzogUG9zdGluZyBjbG9uZWQg
cG9ydCIpOworfQorCisvLyBUZXN0IHBvc3RpbmcgbWVzc2FnZXMgdG8gYSBwb3J0IGluIGNsb25l
ZCBzdGF0ZQorCit2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKK3ZhciBjaGFubmVs
MiA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKK2NoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoIm1zZyIs
IGNoYW5uZWwyLnBvcnQxKTsKK2NoYW5uZWwyLnBvcnQyLnBvc3RNZXNzYWdlKCIxIik7CitjaGFu
bmVsMi5wb3J0Mi5wb3N0TWVzc2FnZSgiMiIpOworY2hhbm5lbDIucG9ydDIucG9zdE1lc3NhZ2Uo
IjMiKTsKK2NoYW5uZWwucG9ydDIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KQoreworICAgIHZh
ciBtc2dJbmRleCA9IDE7CisgICAgZXZ0Lm1lc3NhZ2VQb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9u
KGV2dCkgeworICAgICAgICBpZiAoZXZ0LmRhdGEgIT0gbXNnSW5kZXgpCisgICAgICAgICAgICBs
b2coIkZBSUw6IEdvdCBtZXNzYWdlICIgKyBldnQuZGF0YSArICIsIGV4cGVjdGVkICIgKyBtc2dJ
bmRleCk7CisgICAgICAgIG1zZ0luZGV4Kys7CisgICAgICAgIGlmIChtc2dJbmRleCA9PSA0KSB7
CisgICAgICAgICAgICBsb2coIlNVQ0NFU1M6IFBvc3RlZCBtZXNzYWdlcyB0byBjbG9uZWQgcG9y
dCIpOworICAgICAgICAgICAgdGVzdERvdWJseUNsb25lZFBvcnQoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworZnVuY3Rpb24gdGVzdERvdWJseUNsb25lZFBvcnQoKQoreworICAgIHZhciBjaGFu
bmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsOworICAgIHZhciBjaGFubmVsMiA9IG5ldyBNZXNzYWdl
Q2hhbm5lbDsKKyAgICBjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCJtc2ciLCBjaGFubmVsMi5w
b3J0MSk7CisgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgibXNnIiwgY2hhbm5lbDIucG9y
dDIpOworICAgIGdjKCk7CisgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dnQpIHsKKyAgICAgICAgZXZ0Lm1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCJ0ZXN0bWUiKTsKKyAg
ICB9CisgICAgY2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAg
ICAgZXZ0Lm1lc3NhZ2VQb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAg
ICAgIGlmIChldnQuZGF0YSA9PSAidGVzdG1lIikKKyAgICAgICAgICAgICAgICBsb2coIlNVQ0NF
U1M6IENsb25lZCBib3RoIGVuZHBvaW50cyBvZiBhIGNoYW5uZWwiKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBsb2coIkZBSUw6IEludmFsaWQgbWVzc2FnZSBhcnJpdmVkOiAi
ICsgZXZ0LmRhdGEpOworICAgICAgICAgICAgdGVzdFBvc3RDbG9zZVBvcnQoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgIAorfQorCisvLyAqU2hvdWxkKiBiZSBhYmxlIHRvIHBvc3QgYSBjbG9zZWQg
cG9ydAorZnVuY3Rpb24gdGVzdFBvc3RDbG9zZVBvcnQoKQoreworICAgIHZhciBjaGFubmVsID0g
bmV3IE1lc3NhZ2VDaGFubmVsOworICAgIHZhciBjaGFubmVsMiA9IG5ldyBNZXNzYWdlQ2hhbm5l
bDsKKyAgICBjaGFubmVsMi5wb3J0Mi5jbG9zZSgpOworICAgIGNoYW5uZWwucG9ydDEucG9zdE1l
c3NhZ2UoImNsb3NlZCIsIGNoYW5uZWwyLnBvcnQyKTsKKyAgICBjaGFubmVsLnBvcnQyLm9ubWVz
c2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBpZiAoIWV2dC5tZXNzYWdlUG9ydCkKKyAg
ICAgICAgICAgIGxvZygiRkFJTDogQ2xvc2VkIHBvcnQgbm90IHNlbnQiKTsKKyAgICAgICAgZWxz
ZSBpZiAoZXZ0LmRhdGEgIT0gImNsb3NlZCIpCisgICAgICAgICAgICBsb2coIkZBSUw6IFVuZXhw
ZWN0ZWQgbWVzc2FnZTogIiArIGV2dC5kYXRhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bG9nKCJTVUNDRVNTOiBHb3QgY2xvc2VkIHBvcnQgd2l0aCBldmVudCBtZXNzYWdlICIgKyBldnQu
ZGF0YSk7CisgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CisgICAgICAgIGRvbmUoKTsKKyAg
ICB9Cit9CisKK3ZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgbG9nKCJG
QUlMOiB0aW1lb3V0IHdhaXRpbmcgZm9yIG1lc3NhZ2UgZGVsaXZlcnkiKTsKKyAgICBkb25lKCk7
Cit9LCAxMDAwKTsKKworZnVuY3Rpb24gZG9uZSgpCit7CisgICAgbG9nKCJET05FIik7CisKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZXhwZWN0ZWQudHh0CmluZGV4IDQ3OWIz
MTQuLmM5YmY2MzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2Ut
cG9ydC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1w
b3J0LWV4cGVjdGVkLnR4dApAQCAtNCw4ICs0LDcgQEAgU2hvdWxkIGJlIGEgc2VyaWVzIG9mIFNV
Q0NFU1MgbWVzc2FnZXMsIGZvbGxvd2VkIHdpdGggRE9ORS4KIAogU2ltcGxlIGV4Y2hhbmdlOiBT
VUNDRVNTCiBQb3N0ZWQgcG9ydDogU1VDQ0VTUwotQ29udmVyc2F0aW9uOiBTVUNDRVNTCi1BIHBv
cnQgaXMgYWN0aXZlOiBTVUNDRVNTCi1BIGNsb3NlZCBwb3J0IGlzIGluYWN0aXZlOiBTVUNDRVNT
CitFdmVudCBMaXN0ZW5lcjogU1VDQ0VTUworQ2xvc2VkIHBvcnQ6IFNVQ0NFU1MKIERPTkUKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW5vLXdyYXBw
ZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW5v
LXdyYXBwZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjVlYWJkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNz
YWdlLXBvcnQtbm8td3JhcHBlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACitUZXN0IHRo
YXQgZGVsaXZlcmluZyBhIG1lc3NhZ2UgdG8gYSBwb3J0IHRoYXQgd2FzIG5ldmVyIHJlZmVyZW5j
ZWQgZnJvbSBKUyBkb2Vzbid0IGNhdXNlIGEgY3Jhc2guCisKK1BBU1MKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW9uY2xvc2UtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW9uY2xvc2UtZXhwZWN0ZWQu
dHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2M1ZTBkLi4wMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1vbmNsb3NlLWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotVGVzdCB0aGF0IGNsb3NlIGV2ZW50IGhh
bmRsZXIgaXMgaW52b2tlZCB3aGVuIGEgTWVzc2FnZVBvcnQgaXMgY2xvc2VkLgotCi1QQVNTCi0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1vbmNsb3Nl
Lmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtb25j
bG9zZS5odG1sLWRpc2FibGVkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmQ1YmZh
Li4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1vbmNs
b3NlLmh0bWwtZGlzYWJsZWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPGJvZHk+
Ci08cD5UZXN0IHRoYXQgY2xvc2UgZXZlbnQgaGFuZGxlciBpcyBpbnZva2VkIHdoZW4gYSBNZXNz
YWdlUG9ydCBpcyBjbG9zZWQuPC9wPgotPHByZSBpZD1sb2c+PC9wcmU+Ci08c2NyaXB0PgotZnVu
Y3Rpb24gZ2MoKQotewotICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQotICAgICAgICByZXR1
cm4gR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7IGkrKykgeyAvLyA+IGZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJv
dXQgOUsgYWxsb2NhdGlvbnMgYmVmb3JlIGEgY29sbGVjdCkKLSAgICAgICAgdmFyIHMgPSBuZXcg
U3RyaW5nKCJhYmMiKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGxvZyhtZXNzYWdlKQotewotICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8
YnI+IjsKLX0KLQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3QoKQotewotICAgIC8vIFNpbmdsZSBm
cmFtZS4KLSAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKLSAgICB2YXIgY2xv
c2VDb3VudCA9IDA7Ci0gICAgZnVuY3Rpb24gb25jbG9zZSgpCi0gICAgewotICAgICAgICArK2Ns
b3NlQ291bnQ7Ci0gICAgICAgIGlmIChjbG9zZUNvdW50ID09IDQpCi0gICAgICAgICAgICB0ZXN0
MigpOwotICAgIH0KLQotICAgIGNoYW5uZWwucG9ydDEub25jbG9zZSA9IG9uY2xvc2U7Ci0gICAg
Y2hhbm5lbC5wb3J0Mi5vbmNsb3NlID0gb25jbG9zZTsKLSAgICBjaGFubmVsLnBvcnQxLmFkZEV2
ZW50TGlzdGVuZXIoImNsb3NlIiwgb25jbG9zZSwgZmFsc2UpOwotICAgIGNoYW5uZWwucG9ydDIu
YWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbmNsb3NlLCBmYWxzZSk7Ci0gICAgCi0gICAgZ2Mo
KTsKLSAgICBjaGFubmVsLnBvcnQxLnN0YXJ0KCk7Ci0gICAgY2hhbm5lbC5wb3J0Mi5zdGFydCgp
OwotICAgIGNoYW5uZWwucG9ydDEuY2xvc2UoKTsKLX0KLQotZnVuY3Rpb24gdGVzdDIoKQotewot
ICAgIC8vIENyb3NzLWZyYW1lLgotICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVs
OwotICAgIHdpbmRvdy5mcmFtZXNbMF0ucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwucG9ydDIs
ICIqIik7Ci0KLSAgICB2YXIgbWFpblBvcnQgPSBjaGFubmVsLnBvcnQxOwotICAgIG1haW5Qb3J0
LnN0YXJ0KCk7Ci0KLSAgICB2YXIgY2xvc2VDb3VudCA9IDA7Ci0gICAgZnVuY3Rpb24gb25jbG9z
ZSgpCi0gICAgewotICAgICAgICArK2Nsb3NlQ291bnQ7Ci0gICAgICAgIGlmIChjbG9zZUNvdW50
ID09IDIpCi0gICAgICAgICAgICB0ZXN0MygpOwotICAgIH0KLQotICAgIG1haW5Qb3J0LnBvc3RN
ZXNzYWdlKCJjbG9zZVBvcnQiKTsKLSAgICBtYWluUG9ydC5vbmNsb3NlID0gb25jbG9zZTsKLSAg
ICBtYWluUG9ydC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsIG9uY2xvc2UsIGZhbHNlKTsKLSAg
ICBnYygpOwotfQotCi1mdW5jdGlvbiB0ZXN0MygpCi17Ci0gICAgLy8gRG9jdW1lbnQgZGVzdHJv
eWVkLgotICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsOwotICAgIHdpbmRvdy5m
cmFtZXNbMF0ucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwucG9ydDIsICIqIik7Ci0KLSAgICB2
YXIgbWFpblBvcnQgPSBjaGFubmVsLnBvcnQxOwotICAgIG1haW5Qb3J0LnN0YXJ0KCk7Ci0KLSAg
ICB2YXIgY2xvc2VDb3VudCA9IDA7Ci0gICAgZnVuY3Rpb24gb25jbG9zZSgpCi0gICAgewotICAg
ICAgICArK2Nsb3NlQ291bnQ7Ci0gICAgICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBjbG9zZSBl
dmVudCBmcm9tIGRvY3VtZW50IGRlc3RydWN0aW9uLiIpOwotICAgIH0KLQotICAgIG1haW5Qb3J0
LnBvc3RNZXNzYWdlKCJjbG9zZUZyYW1lIik7Ci0gICAgbWFpblBvcnQub25jbG9zZSA9IG9uY2xv
c2U7Ci0gICAgbWFpblBvcnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbmNsb3NlLCBmYWxz
ZSk7Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKGNsb3NlQ291bnQg
PT0gMCkKLSAgICAgICAgICAgIGxvZygiUEFTUyIpOwotICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOwotICAgIH0sIDUwKTsKLQotICAgIGdjKCk7Ci19Ci08L3NjcmlwdD4KLTxpZnJhbWUg
c3JjPSJyZXNvdXJjZXMvbWVzc2FnZS1wb3J0LWlmcmFtZS5odG1sIiBvbmxvYWQ9InRlc3QoKSI+
PC9pZnJhbWU+Ci08L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
ZXNzYWdlLXBvcnQuaHRtbC1kaXNhYmxlZCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3Nh
Z2UtcG9ydC5odG1sLWRpc2FibGVkCmluZGV4IDBmNGFiMTUuLjYyZThlOTEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC5odG1sLWRpc2FibGVkCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC5odG1sLWRpc2FibGVkCkBAIC0y
OCw3ICsyOCw2IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgbG9nKCJTaW1wbGUgZXhj
aGFuZ2U6IEZBSUwuIEdvdCBtZXNzYWdlICciICsgZXZ0LmRhdGEgKyAiJyBmcm9tICciICsgZXZ0
Lm9yaWdpbiArICInLiIpOwogICAgICAgICB0ZXN0MigpOwogICAgIH07Ci0gICAgbWFpblBvcnQu
c3RhcnQoKTsKIH0KIAogZnVuY3Rpb24gdGVzdDIoKQpAQCAtNDIsMzQgKzQxLDQ2IEBAIGZ1bmN0
aW9uIHRlc3QyKCkKICAgICAgICAgICAgIGxvZygiUG9zdGVkIHBvcnQ6IEZBSUwuIEdvdCBtZXNz
YWdlICciICsgZXZ0LmRhdGEgKyAiJyBmcm9tICciICsgZXZ0Lm9yaWdpbiArICInLiIpOwogICAg
ICAgICB0ZXN0MygpOwogICAgIH07Ci0gICAgY2hhbm5lbC5wb3J0MS5zdGFydCgpOwogfQogCiBm
dW5jdGlvbiB0ZXN0MygpCiB7Ci0gICAgdmFyIHBvcnQgPSBtYWluUG9ydC5zdGFydENvbnZlcnNh
dGlvbigibmV3Q29udmVyc2F0aW9uIik7Ci0gICAgcG9ydC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dnQpIHsKLSAgICAgICAgaWYgKGV2dC5kYXRhID09ICJoZXkiICYmIGV2dC5vcmlnaW4gPT0gIiIp
Ci0gICAgICAgICAgICBsb2coIkNvbnZlcnNhdGlvbjogU1VDQ0VTUyIpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBsb2coIkNvbnZlcnNhdGlvbjogRkFJTC4gR290IG1lc3NhZ2UgJyIgKyBl
dnQuZGF0YSArICInIGZyb20gJyIgKyBldnQub3JpZ2luICsgIicuIik7Ci0gICAgICAgIHRlc3Q0
KCk7Ci0gICAgfTsKLSAgICBwb3J0LnN0YXJ0KCk7CisgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVz
c2FnZUNoYW5uZWw7CisgICAgY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSgiMSIpOworICAgIHZh
ciBzdGFydGVkID0gZmFsc2U7CisgICAgY2hhbm5lbC5wb3J0Mi5hZGRFdmVudExpc3RlbmVyKCJt
ZXNzYWdlIiwgZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGlmIChzdGFydGVkKSB7CisgICAgICAg
ICAgICBsb2coIkV2ZW50IExpc3RlbmVyOiBTVUNDRVNTIik7CisgICAgICAgICAgICB0ZXN0NCgp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxvZygiRXZlbnQgTGlzdGVuZXI6IEZBSUwu
IEV2ZW50IGxpc3RlbmVyIGNhbGxlZCBiZWZvcmUgc3RhcnQoKSIpOworICAgfSk7CisgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgY2hhbm5lbC5wb3J0Mi5zdGFydCgpOworICAgICAg
c3RhcnRlZCA9IHRydWU7CisgICB9LCAxMDApOworICAgIAogfQogCiBmdW5jdGlvbiB0ZXN0NCgp
CiB7Ci0gICAgbG9nKCJBIHBvcnQgaXMgYWN0aXZlOiAiICsgKG1haW5Qb3J0LmFjdGl2ZSA/ICJT
VUNDRVNTIiA6ICJGQUlMIikpOwotCi0gICAgbWFpblBvcnQuY2xvc2UoKTsKLQotICAgIGxvZygi
QSBjbG9zZWQgcG9ydCBpcyBpbmFjdGl2ZTogIiArIChtYWluUG9ydC5hY3RpdmUgPyAiRkFJTCIg
OiAiU1VDQ0VTUyIpKTsKKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAg
ICBjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCIxIik7CisgICAgY2hhbm5lbC5wb3J0MS5jbG9z
ZSgpOworICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoIjIiKTsKKyAgICBjaGFubmVsLnBv
cnQyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBpZiAoZXZ0LmRhdGEgPT0g
IjEiKQorICAgICAgICAgICAgbG9nKCJDbG9zZWQgcG9ydDogU1VDQ0VTUyIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsb2coIkNsb3NlZCBwb3J0OiBGQUlMLiBHb3QgbWVzc2FnZTogIiAr
IGV2dC5kYXRhICsgIiBhZnRlciBjbG9zZSIpOworICAgIH0KIAotICAgIGxvZygiRE9ORSIpOwor
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiRE9ORSIpOwogCi0gICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
IH0sIDEwMCk7CiB9CiAKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOWEzYmFlLi40Y2YwZGU4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw0ICsxLDkzIEBA
Ci0yMDA5LTA2LTA5ICBEZWFuIE1jTmFtZWUgIDxkZWFubUBjaHJvbWl1bS5vcmc+CisyMDA5LTA2
LTA5ICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNTA0Mz4KKyAgICAgICAgUmVtb3ZlZCBvYnNvbGV0ZSBNZXNzYWdl
UG9ydC5zdGFydENvbnZlcnNhdGlvbigpLCBhY3RpdmUgYW5kIG9uY2xvc2UgQVBJcy4KKworICAg
ICAgICBSZWZhY3RvcmVkIE1lc3NhZ2VQb3J0UHJveHkgaW50byBNZXNzYWdlUG9ydFByb3h5V3Jh
cHBlciBhbmQgYSBwbGF0Zm9ybS1kZXBlbmRlbnQgTWVzc2FnZVBvcnRQcm94eQorICAgICAgICBp
bXBsZW1lbnRhdGlvbi4gTW9kaWZpZWQgQVBJcyB0byBzaW1wbGlmeSBjcm9zcy1wcm9jZXNzIGlt
cGxlbWVudGF0aW9ucyBieSBtb3ZpbmcgdGhlIG1lc3NhZ2luZyBjb2RlCisgICAgICAgIGVudGly
ZWx5IGludG8gdGhlIHBsYXRmb3JtLWRlcGVuZGVudCBwcm94eS4KKworICAgICAgICBDcmVhdGVk
IGEgdGhyZWFkLXNhZmUgZGVmYXVsdCBNZXNzYWdlUG9ydFByb3h5IGltcGxlbWVudGF0aW9uLgor
CisgICAgICAgIENoYW5nZWQgRE9NV2luZG93IG1lc3NhZ2luZyB0byBjcmVhdGUgdGhlIE1lc3Nh
Z2VFdmVudCBpbiB0aGUgdGFyZ2V0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8gbWF0Y2ggaG93
CisgICAgICAgIGNyb3NzLXRocmVhZCBNZXNzYWdlUG9ydHMgd29yay4KKyAgICAgICAgCisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2Fn
ZVBvcnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6bWFyayk6
CisgICAgICAgICAgICBDaGFuZ2VkIHBvcnRzIHRvIG5vdCBtYXJrIHRoZWlyIGVudGFuZ2xlZCBw
YWlyIGFzIHJlYWNoYWJsZSwgcGVyIHRoZSBzcGVjLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBkb20vTWVzc2FnZUNoYW5u
ZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUNoYW5uZWw6Ok1lc3NhZ2VDaGFubmVs
KToKKyAgICAgICAgICAgIFVwZGF0ZWQgdG8gdXNlIE1lc3NhZ2VQb3J0UHJveHk6OmNyZWF0ZUNo
YW5uZWwoKSB0byBlbnRhbmdsZSB0aGUgcG9ydHMuCisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpNZXNzYWdlUG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6fk1lc3NhZ2VQb3J0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
UG9ydDo6ZGlzZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6Om1lc3Nh
Z2VBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnN0YXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlUG9ydDo6ZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmNv
bnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmRpc3BhdGNo
TWVzc2FnZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnNldE9ubWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAg
ICAgICAgICAgIENoYW5nZWQgdGhlc2UgQVBJcyB0byBkZWxlZ2F0ZSB0byBuZXcgTWVzc2FnZVBv
cnRQcm94eSBBUElzCisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0Lmg6CisgICAgICAgICogZG9t
L01lc3NhZ2VQb3J0LmlkbDoKKyAgICAgICAgICAgIFJlbW92ZWQgc3RhcnRDb252ZXJzYXRpb24g
YW5kIG9uY2xvc2UKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnRQcm94eS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydFByb3h5V3JhcHBlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6OkV2ZW50RGF0YTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyOjpFdmVudERhdGE6OkV2
ZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5V3JhcHBlcjo6fk1l
c3NhZ2VQb3J0UHJveHlXcmFwcGVyKToKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnRQcm94eVdy
YXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5V3JhcHBl
cjo6RXZlbnREYXRhOjptZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJv
eHlXcmFwcGVyOjpFdmVudERhdGE6OnByb3h5KToKKyAgICAgICAgICAgICBDaGFuZ2VkIEV2ZW50
RGF0YSB0byBob2xkIGEgcmVmZXJlbmNlIHRvIGEgTWVzc2FnZVBvcnRQcm94eSBvYmplY3QgaW5z
dGVhZCBvZiBhIE1lc3NhZ2VQb3J0IHRvIGVuYWJsZSBjcm9zcy10aHJlYWQgbWVzc2FnaW5nLgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6Ok1lc3NhZ2VQb3J0UHJv
eHlXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyOjpj
cmVhdGUpOiAgICAgICAgCisgICAgICAgKiBkb20vZGVmYXVsdC9NZXNzYWdlUG9ydFByb3h5LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5V3JhcHBlcjo6ZW50
YW5nbGVJZk9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6
OmRpc2VudGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHlXcmFwcGVy
Ojpwb3N0TWVzc2FnZVRvUmVtb3RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJv
eHlXcmFwcGVyOjp0cnlHZXRNZXNzYWdlRnJvbVJlbW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlUG9ydFByb3h5V3JhcHBlcjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRQcm94eVdyYXBwZXI6OmlzUHJveHlGb3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRQcm94eVdyYXBwZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZXNzYWdlUG9ydFByb3h5OjpNZXNzYWdlUG9ydFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lc3NhZ2VQb3J0UHJveHk6On5NZXNzYWdlUG9ydFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lc3NhZ2VQb3J0UHJveHk6OmNyZWF0ZUNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6TWVz
c2FnZVBvcnRQcm94eTo6ZW50YW5nbGVJZk9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRQcm94eTo6ZGlzZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQ
cm94eTo6c2V0UmVtb3RlUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5
OjpyZW1vdGVQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6OmVudGFu
Z2xlZFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6OnNldEVudGFu
Z2xlZFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6OnBvc3RNZXNz
YWdlVG9SZW1vdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eTo6dHJ5R2V0
TWVzc2FnZUZyb21SZW1vdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eTo6
aXNQcm94eUZvcik6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5OjpjbG9zZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5OjpjbG9zZUludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6Omhhc1BlbmRpbmdBY3Rpdml0eSk6Cisg
ICAgICAgICogZG9tL2RlZmF1bHQvTWVzc2FnZVBvcnRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6Ok1lc3NhZ2VQb3J0UXVldWU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5OjpNZXNzYWdlUG9ydFF1ZXVlOjp0cnlH
ZXRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UHJveHk6Ok1lc3NhZ2VQ
b3J0UXVldWU6OmFwcGVuZEFuZENoZWNrRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRQcm94eTo6TWVzc2FnZVBvcnRRdWV1ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZXNzYWdlUG9ydFByb3h5OjpNZXNzYWdlUG9ydFF1ZXVlOjpNZXNzYWdlUG9ydFF1ZXVlKToK
KyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3N0TWVz
c2FnZVRpbWVyOjpQb3N0TWVzc2FnZVRpbWVyKToKKyAgICAgICAgICAgIENoYW5nZWQgRE9NV2lu
ZG93IG1lc3NhZ2luZyB0byBjcmVhdGUgdGhlIE1lc3NhZ2VFdmVudCBpbiB0aGUgdGFyZ2V0IFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8gbWF0Y2ggaG93IGNyb3NzLXRocmVhZCBNZXNzYWdlUG9y
dHMgd29yay4KKyAgICAgICAgKFdlYkNvcmU6OlBvc3RNZXNzYWdlVGltZXI6OmV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93Ojpwb3N0TWVzc2FnZVRpbWVyRmlyZWQpOgorCisgMjAwOS0wNi0wOSAgRGVh
biBNY05hbWVlICA8ZGVhbm1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9s
aXZlciBIdW50LgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA2MDUy
Y2U0Li5lOGQ4MTk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTg5
NzksNyArODk3OSwxMSBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxkb21cTWVzc2FnZVBvcnRQcm94eS5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGRvbVxkZWZhdWx0XE1lc3NhZ2VQb3J0UHJveHkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxkZWZhdWx0XE1lc3NhZ2VQb3J0
UHJveHkuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjN2IyN2VlLi4xNzFjZTNjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQwLDEzICs2NDAs
MTYgQEAKIAkJNDExMDQ2NDIwRkEyMjJBNjAwQkE0MzZBIC8qIFNjcmlwdEV2ZW50TGlzdGVuZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDExMDQ2
NDAwRkEyMjJBNjAwQkE0MzZBIC8qIFNjcmlwdEV2ZW50TGlzdGVuZXIuY3BwICovOyB9OwogCQk0
MTI3RDUzNzBGOEFBQjFEMDBFNDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1
IC8qIFNjcmlwdFN0YXRlLmNwcCAqLzsgfTsKIAkJNDEyQTY4NDcwRjZCMDNERDAwMEVBNjZFIC8q
IFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDEyQTY4NDYwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9iamVj
dFF1YXJhbnRpbmUuY3BwICovOyB9OwotCQk0MTVFM0VGNjBGOEQ2N0ZFMDA3RUVCNTAgLyogTWVz
c2FnZVBvcnRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDE1RTNFRjUwRjhENjdGRTAwN0VFQjUwIC8qIE1lc3NhZ2VQb3J0UHJveHkuaCAqLzsg
fTsKIAkJNDE2RTc1QkUwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxTdGFjay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QkMwRURGOEZE
NzAwMzYwRTFEIC8qIFNjcmlwdENhbGxTdGFjay5oICovOyB9OwogCQk0MTZFNzVCRjBFREY4RkQ3
MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUJEMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRD
YWxsU3RhY2suY3BwICovOyB9OwogCQk0MTZFNzVDQjBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0
Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTZFNzVDOTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmggKi87IH07CiAJ
CTQxNkU3NUNDMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1Q0EwRURGOTBDNzAw
MzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgKi87IH07CiAJCTQxNkY0NUYwMEVEN0IzMTEw
MDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNkY0NUVGMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTk1
MzY1MTBGNjgyMjI0MDBEMEM2NzkgLyogU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5NTM2NTAwRjY4MjIyNDAw
RDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCAqLzsgfTsKKwkJNDFCRTc5NTUwRkQ4
NThBQjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRTc5NTMwRkQ4NThBQjAwMDc4MDE5IC8qIE1l
c3NhZ2VQb3J0UHJveHkuY3BwICovOyB9OworCQk0MUJFNzk1NjBGRDg1OEFCMDAwNzgwMTkgLyog
TWVzc2FnZVBvcnRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFCRTc5NTQwRkQ4NThBQjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJveHkuaCAq
LzsgfTsKKwkJNDFCRTc5NkUwRkQ5OTE0MjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJveHlXcmFw
cGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
QkU3OTZDMEZEOTkxNDIwMDA3ODAxOSAvKiBNZXNzYWdlUG9ydFByb3h5V3JhcHBlci5jcHAgKi87
IH07CisJCTQxQkU3OTZGMEZEOTkxNDIwMDA3ODAxOSAvKiBNZXNzYWdlUG9ydFByb3h5V3JhcHBl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRTc5
NkQwRkQ5OTE0MjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyLmggKi87IH07CiAJ
CTQxQzc2MEIxMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVG
IC8qIFNjcmlwdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDFEMDE1Q0EwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQwMTVDODBGNEI1
QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLzsgfTsKIAkJNDFEMDE1Q0IwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5j
cHAgKi87IH07CkBAIC01NTMwLDEzICs1NTMzLDE2IEBACiAJCTQxMTA0NjQwMEZBMjIyQTYwMEJB
NDM2QSAvKiBTY3JpcHRFdmVudExpc3RlbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTI3RDUzNjBGOEFBQjFEMDBFNDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0U3RhdGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTJBNjg0NjBGNkIwM0REMDAwRUE2NkUgLyogU2Ny
aXB0T2JqZWN0UXVhcmFudGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDE1RTNFRjUwRjhENjdGRTAwN0VFQjUwIC8qIE1lc3NhZ2VQb3J0UHJveHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZVBvcnRQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0
Q2FsbFN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENhbGxT
dGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCRDBFREY4RkQ3MDAz
NjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcmlwdENhbGxTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxNkU3NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxs
RnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2Fs
bEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RjQ1RUYwRUQ3QjMx
MTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY3JpcHRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE5NTM2
NTAwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MUJFNzk1MzBGRDg1OEFCMDAwNzgwMTkgLyogTWVzc2Fn
ZVBvcnRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBNZXNz
YWdlUG9ydFByb3h5LmNwcDsgcGF0aCA9IGRlZmF1bHQvTWVzc2FnZVBvcnRQcm94eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQkU3OTU0MEZEODU4QUIwMDA3ODAxOSAvKiBN
ZXNzYWdlUG9ydFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1lc3Nh
Z2VQb3J0UHJveHkuaDsgcGF0aCA9IGRlZmF1bHQvTWVzc2FnZVBvcnRQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MUJFNzk2QzBGRDk5MTQyMDAwNzgwMTkgLyogTWVzc2Fn
ZVBvcnRQcm94eVdyYXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWVzc2FnZVBvcnRQcm94eVdyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MUJFNzk2RDBGRDk5MTQyMDAwNzgwMTkgLyogTWVzc2FnZVBvcnRQcm94eVdyYXBwZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZVBvcnRQcm94eVdyYXBw
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFDNzYwQjAwRURFMDNEMzAwQzE2
NTVGIC8qIFNjcmlwdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmlwdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDAxNUM4MEY0QjVD
NzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb250ZW50VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQwMTVD
OTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTQ0MjIsNyArMTQ0MjgsMTAgQEAKIAkJCQlFMUFERUNCRTBFNzZBQ0YxMDA0QTFB
NUUgLyogTWVzc2FnZVBvcnQuY3BwICovLAogCQkJCUUxQURFQ0JEMEU3NkFDRjEwMDRBMUE1RSAv
KiBNZXNzYWdlUG9ydC5oICovLAogCQkJCUUxQURFQ0M2MEU3NkFEMUYwMDRBMUE1RSAvKiBNZXNz
YWdlUG9ydC5pZGwgKi8sCi0JCQkJNDE1RTNFRjUwRjhENjdGRTAwN0VFQjUwIC8qIE1lc3NhZ2VQ
b3J0UHJveHkuaCAqLywKKwkJCQk0MUJFNzk2QzBGRDk5MTQyMDAwNzgwMTkgLyogTWVzc2FnZVBv
cnRQcm94eVdyYXBwZXIuY3BwICovLAorCQkJCTQxQkU3OTZEMEZEOTkxNDIwMDA3ODAxOSAvKiBN
ZXNzYWdlUG9ydFByb3h5V3JhcHBlci5oICovLAorCQkJCTQxQkU3OTUzMEZEODU4QUIwMDA3ODAx
OSAvKiBNZXNzYWdlUG9ydFByb3h5LmNwcCAqLywKKwkJCQk0MUJFNzk1NDBGRDg1OEFCMDAwNzgw
MTkgLyogTWVzc2FnZVBvcnRQcm94eS5oICovLAogCQkJCTg1MDMxQjJGMEE0NEVGQzcwMEY5OTJF
MCAvKiBNb3VzZUV2ZW50LmNwcCAqLywKIAkJCQk4NTAzMUIzMDBBNDRFRkM3MDBGOTkyRTAgLyog
TW91c2VFdmVudC5oICovLAogCQkJCTE0MUI5NEU1MDlFQzQyMjMwMDBFOTQxMyAvKiBNb3VzZUV2
ZW50LmlkbCAqLywKQEAgLTE2MDk1LDcgKzE2MTA0LDYgQEAKIAkJCQlFMUFERUNDRTBFNzZBRDhC
MDA0QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NzkzRTg0
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
QURFQ0JGMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDE1RTNFRjYwRjhENjdGRTAwN0VFQjUwIC8qIE1lc3NhZ2VQb3J0UHJveHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTlDNkU0RTgwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlT
ZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovLApAQCAtMTY3OTIsNiArMTY4MDAsOCBA
QAogCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxOEY4MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVy
UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OUNDQzUzMEY0NEU5ODEwMEI1REExMCAvKiBS
ZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFCRTc5NTYw
RkQ4NThBQjAwMDc4MDE5IC8qIE1lc3NhZ2VQb3J0UHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTQxQkU3OTZGMEZEOTkxNDIwMDA3ODAxOSAvKiBNZXNzYWdlUG9ydFByb3h5V3JhcHBlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xODc4NSw2ICsxODc5NSw4IEBACiAJCQkJODQ1RTcyRkIwRkQyNjIz
OTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFFQkYzQTBG
RDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBODlDQ0M1MjBGNDRFOTgxMDBCNURBMTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDFCRTc5NTUwRkQ4NThBQjAwMDc4MDE5IC8qIE1lc3Nh
Z2VQb3J0UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDFCRTc5NkUwRkQ5OTE0MjAwMDc4
MDE5IC8qIE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKaW5kZXggZjQ4MDlhZS4uZTNh
Y2JlYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9t
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCkBA
IC00MywxMyArNDMsNiBAQCB2b2lkIEpTTWVzc2FnZVBvcnQ6Om1hcmsoKQogICAgIERPTU9iamVj
dDo6bWFyaygpOwogCiAgICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9ubWVzc2FnZSgpKTsKLSAg
ICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25jbG9zZSgpKTsKLQotICAgIGlmIChNZXNzYWdlUG9y
dFByb3h5KiBlbnRhbmdsZWRQb3J0ID0gbV9pbXBsLT5lbnRhbmdsZWRQb3J0KCkpIHsKLSAgICAg
ICAgRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6
aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpLCBlbnRhbmdsZWRQb3J0KTsKLSAgICAgICAgaWYgKHdy
YXBwZXIgJiYgIXdyYXBwZXItPm1hcmtlZCgpKQotICAgICAgICAgICAgd3JhcHBlci0+bWFyaygp
OwotICAgIH0KIAogICAgIHR5cGVkZWYgTWVzc2FnZVBvcnQ6OkV2ZW50TGlzdGVuZXJzTWFwIEV2
ZW50TGlzdGVuZXJzTWFwOwogICAgIHR5cGVkZWYgTWVzc2FnZVBvcnQ6Okxpc3RlbmVyVmVjdG9y
IExpc3RlbmVyVmVjdG9yOwpAQCAtNjAsMTQgKzUzLDYgQEAgdm9pZCBKU01lc3NhZ2VQb3J0Ojpt
YXJrKCkKICAgICB9CiB9CiAKLUpTVmFsdWUgSlNNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJzYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgY29uc3QgVVN0cmluZyYgbWVzc2Fn
ZSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Ci0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBp
bXBsKCktPnN0YXJ0Q29udmVyc2F0aW9uKGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCBtZXNzYWdlKS5nZXQoKSk7Ci19Ci0KIEpTVmFsdWUgSlNNZXNzYWdlUG9ydDo6YWRk
RXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3Qo
aW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcAppbmRleCBmY2UwNGI2Li4yNGU4
MGI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0
Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0
Q3VzdG9tLmNwcApAQCAtNzMsNTQgKzczLDYgQEAgQUNDRVNTT1JfU0VUVEVSKE1lc3NhZ2VQb3J0
T25tZXNzYWdlKQogICAgIH0KIH0KIAotQUNDRVNTT1JfR0VUVEVSKE1lc3NhZ2VQb3J0T25jbG9z
ZSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5NZXNzYWdlUG9ydC5vbmNsb3NlLl9nZXQiKTsKLSAg
ICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxNZXNz
YWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIFY4UHJveHk6OkV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KG1lc3NhZ2VQb3J0LT5vbmNs
b3NlKCkpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIoTWVzc2FnZVBvcnRPbmNsb3NlKQotewotICAg
IElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0Lm9uY2xvc2UuX3NldCIpOwotICAgIE1lc3NhZ2VQ
b3J0KiBtZXNzYWdlUG9ydCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihW
OENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAodmFsdWUt
PklzTnVsbCgpKSB7Ci0gICAgICAgIGlmIChtZXNzYWdlUG9ydC0+b25jbG9zZSgpKSB7Ci0gICAg
ICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhP
YmplY3RFdmVudExpc3RlbmVyKj4obWVzc2FnZVBvcnQtPm9uY2xvc2UoKSk7Ci0gICAgICAgICAg
ICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIGxpc3RlbmVyLT5nZXRMaXN0
ZW5lck9iamVjdCgpLCBWOEN1c3RvbTo6a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIG1lc3NhZ2VQ
b3J0LT5zZXRPbmNsb3NlKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5
ID0gVjhQcm94eTo6cmV0cmlldmUobWVzc2FnZVBvcnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7Ci0gICAgICAgIGlmICghcHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVj
dEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0g
ICAgICAgICAgICBtZXNzYWdlUG9ydC0+c2V0T25jbG9zZShsaXN0ZW5lcik7Ci0gICAgICAgICAg
ICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6
a01lc3NhZ2VQb3J0UmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1D
QUxMQkFDS19GVU5DX0RFQ0woTWVzc2FnZVBvcnRTdGFydENvbnZlcnNhdGlvbikKLXsKLSAgICBJ
TkNfU1RBVFMoIkRPTS5NZXNzYWdlUG9ydC5TdGFydENvbnZlcnNhdGlvbigpIik7Ci0gICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPCAxKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3Vn
aCBhcmd1bWVudHMiLCBWOFByb3h5OjpTWU5UQVhfRVJST1IpOwotICAgIE1lc3NhZ2VQb3J0KiBt
ZXNzYWdlUG9ydCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNz
SW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdzLkhvbGRlcigpKTsKLQotICAgIFY4UHJveHkqIHByb3h5
ID0gVjhQcm94eTo6cmV0cmlldmUobWVzc2FnZVBvcnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7Ci0gICAgaWYgKCFwcm94eSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQot
ICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCA9IG1lc3NhZ2VQb3J0LT5zdGFydENvbnZlcnNh
dGlvbihtZXNzYWdlUG9ydC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0b1dlYkNvcmVTdHJp
bmcoYXJnc1swXSkpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhQcm94
eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBwb3J0LmdldCgpKTsKLSAg
ICByZXR1cm4gd3JhcHBlcjsKLX0KLQogQ0FMTEJBQ0tfRlVOQ19ERUNMKE1lc3NhZ2VQb3J0QWRk
RXZlbnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5NZXNzYWdlUG9ydC5BZGRFdmVu
dExpc3RlbmVyKCkiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVsLmNw
cCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVsLmNwcAppbmRleCAzYTkwOTEzLi5jY2ExZTUy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vTWVzc2FnZUNoYW5uZWwuY3BwCkBAIC0yOCwxNCArMjgsMTUgQEAKICNpbmNsdWRlICJN
ZXNzYWdlQ2hhbm5lbC5oIgogCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJN
ZXNzYWdlUG9ydFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTWVzc2FnZUNoYW5u
ZWw6Ok1lc3NhZ2VDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAg
OiBtX3BvcnQxKE1lc3NhZ2VQb3J0OjpjcmVhdGUoY29udGV4dCkpCi0gICAgLCBtX3BvcnQyKE1l
c3NhZ2VQb3J0OjpjcmVhdGUoY29udGV4dCkpCisgICAgOiBtX3BvcnQxKE1lc3NhZ2VQb3J0Ojpj
cmVhdGUoKmNvbnRleHQpKQorICAgICwgbV9wb3J0MihNZXNzYWdlUG9ydDo6Y3JlYXRlKCpjb250
ZXh0KSkKIHsKLSAgICBNZXNzYWdlUG9ydDo6ZW50YW5nbGUobV9wb3J0MS5nZXQoKSwgbV9wb3J0
Mi5nZXQoKSk7CisgICAgTWVzc2FnZVBvcnRQcm94eTo6Y3JlYXRlQ2hhbm5lbChtX3BvcnQxLmdl
dCgpLCBtX3BvcnQyLmdldCgpKTsKIH0KIAogTWVzc2FnZUNoYW5uZWw6On5NZXNzYWdlQ2hhbm5l
bCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAgYi9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5jcHAKaW5kZXggZWZkODllNy4uMDY3OTU1NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNw
cApAQCAtMzgsODkgKzM4LDIzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVz
c2FnZVBvcnRDbG9zZUV2ZW50VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydENsb3NlRXZl
bnRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVBvcnRDbG9zZUV2ZW50VGFzayhwb3J0KSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE1lc3NhZ2VQb3J0Q2xvc2VFdmVudFRhc2soUGFzc1Jl
ZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKLSAgICAgICAgOiBtX3BvcnQocG9ydCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3BvcnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB1bnVzZWRDb250ZXh0KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRCh1bnVzZWRDb250ZXh0LCB1bnVzZWRDb250ZXh0ID09IG1fcG9ydC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgQVNTRVJUKCFtX3BvcnQtPmFjdGl2
ZSgpKTsKLQotICAgICAgICAvLyBDbG9zaW5nIG1heSBkZXN0cm95IHRoZSBwb3J0LCBkaXNwYXRj
aCBhbnkgcmVtYWluaW5nIG1lc3NhZ2VzIG5vdy4KLSAgICAgICAgaWYgKG1fcG9ydC0+cXVldWVJ
c09wZW4oKSkKLSAgICAgICAgICAgIG1fcG9ydC0+ZGlzcGF0Y2hNZXNzYWdlcygpOwotCi0gICAg
ICAgIG1fcG9ydC0+ZGlzcGF0Y2hDbG9zZUV2ZW50KCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBtX3BvcnQ7Ci19OwotCi1QYXNzUmVmUHRyPE1lc3NhZ2VQb3J0OjpFdmVudERh
dGE+IE1lc3NhZ2VQb3J0OjpFdmVudERhdGE6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBFdmVudERhdGEobWVzc2FnZSwgcG9ydCkpOwotfQotCi1NZXNzYWdlUG9ydDo6RXZlbnREYXRh
OjpFdmVudERhdGEoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0
PiBtZXNzYWdlUG9ydCkKLSAgICA6IG1lc3NhZ2UobWVzc2FnZS5jb3B5KCkpCi0gICAgLCBtZXNz
YWdlUG9ydChtZXNzYWdlUG9ydCkKLXsKLX0KLQotTWVzc2FnZVBvcnQ6OkV2ZW50RGF0YTo6fkV2
ZW50RGF0YSgpCi17Ci19Ci0KLU1lc3NhZ2VQb3J0OjpNZXNzYWdlUG9ydChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorTWVzc2FnZVBvcnQ6Ok1lc3NhZ2VQ
b3J0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAg
OiBtX2VudGFuZ2xlZFBvcnQoMCkKICAgICAsIG1fcXVldWVJc09wZW4oZmFsc2UpCi0gICAgLCBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAsIG1f
cGVuZGluZ0Nsb3NlRXZlbnQoZmFsc2UpCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
JnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7Ci0gICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRNZXNzYWdlUG9ydCh0
aGlzKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRNZXNzYWdlUG9ydCh0
aGlzKTsKKyAgCisgICAgLy8gRG9uJ3QgbmVlZCB0byBjYWxsIHByb2Nlc3NNZXNzYWdlUG9ydE1l
c3NhZ2VzU29vbigpIGhlcmUsIGJlY2F1c2UgdGhlIHBvcnQgd2lsbCBub3QgYmUgb3BlbmVkIHVu
dGlsIHN0YXJ0KCkgaXMgaW52b2tlZC4KIH0KIAogTWVzc2FnZVBvcnQ6On5NZXNzYWdlUG9ydCgp
CiB7Ci0gICAgaWYgKG1fZW50YW5nbGVkUG9ydCkKLSAgICAgICAgdW5lbnRhbmdsZSgpOwotCisg
ICAgY2xvc2UoKTsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRlc3Ryb3llZE1lc3NhZ2VQb3J0KHRoaXMpOwogfQog
Ci1QYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBNZXNzYWdlUG9ydDo6Y2xvbmUoRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQpIHsKLSAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPE1l
c3NhZ2VQb3J0UHJveHk+IHJlbW90ZVBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7Ci0gICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBuZXdQb3J0ID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZSgwKTsKLQotICAgIC8v
IE1vdmUgYWxsIHRoZSBldmVudHMgaW4gdGhlIHBvcnQgbWVzc2FnZSBxdWV1ZSBvZiBvcmlnaW5h
bCBwb3J0IHRvIHRoZSBwb3J0IG1lc3NhZ2UgcXVldWUgb2YgbmV3IHBvcnQsIGlmIGFueSwgbGVh
dmluZyB0aGUgbmV3IHBvcnQncyBwb3J0IG1lc3NhZ2UgcXVldWUgaW4gaXRzIGluaXRpYWwgY2xv
c2VkIHN0YXRlLgotICAgIC8vIElmIGV2ZW50cyBhcmUgcG9zdGVkIChlLmcuIGZyb20gYSB3b3Jr
ZXIgdGhyZWFkKSB3aGlsZSB0aGlzIGNvZGUgaXMgZXhlY3V0aW5nLCB0aGVyZSBpcyBubyBndWFy
YW50ZWUgd2hldGhlciB0aGV5IGVuZCB1cCBpbiB0aGUgb3JpZ2luYWwgb3IgbmV3IHBvcnQncyBt
ZXNzYWdlIHF1ZXVlLgotICAgIFJlZlB0cjxFdmVudERhdGE+IGV2ZW50RGF0YTsKLSAgICB3aGls
ZSAobV9tZXNzYWdlUXVldWUudHJ5R2V0TWVzc2FnZShldmVudERhdGEpKQotICAgICAgICBuZXdQ
b3J0LT5tX21lc3NhZ2VRdWV1ZS5hcHBlbmQoZXZlbnREYXRhKTsKLQotICAgIGVudGFuZ2xlKHJl
bW90ZVBvcnQuZ2V0KCksIG5ld1BvcnQuZ2V0KCkpOyAvLyBUaGUgcG9ydCBvYmplY3Qgd2lsbCBi
ZSB1bmVudGFuZ2xlZC4KLSAgICByZXR1cm4gbmV3UG9ydDsKLX0KLQogdm9pZCBNZXNzYWdlUG9y
dDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBwb3N0TWVzc2FnZShtZXNzYWdlLCAwLCBlYyk7CkBAIC0xMjgsNDcgKzYyLDQ0IEBA
IHZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiAKIHZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIGRhdGFQb3J0LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCB8fCAhbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KQorICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIGlmICghbV9lbnRh
bmdsZWRQb3J0KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG5l
d01lc3NhZ2VQb3J0OworICAgIE93blB0cjxNZXNzYWdlUG9ydFByb3h5V3JhcHBlcj4gcHJveHk7
CiAgICAgaWYgKGRhdGFQb3J0KSB7Ci0gICAgICAgIGlmIChkYXRhUG9ydCA9PSB0aGlzIHx8IGRh
dGFQb3J0ID09IG1fZW50YW5nbGVkUG9ydCkgewotICAgICAgICAgICAgZWMgPSBJTlZBTElEX0FD
Q0VTU19FUlI7CisgICAgICAgIGlmIChkYXRhUG9ydCA9PSB0aGlzIHx8IG1fZW50YW5nbGVkUG9y
dC0+aXNQcm94eUZvcihkYXRhUG9ydCkpIHsKKyAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgZWMgPSAwOwot
ICAgICAgICBuZXdNZXNzYWdlUG9ydCA9IGRhdGFQb3J0LT5jbG9uZShlYyk7CisgICAgICAgIHBy
b3h5ID0gZGF0YVBvcnQtPmRpc2VudGFuZ2xlKGVjKTsKICAgICAgICAgaWYgKGVjKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIG1fZW50YW5nbGVkUG9ydC0+ZGVsaXZlck1lc3Nh
Z2UobWVzc2FnZSwgbmV3TWVzc2FnZVBvcnQpOworICAgIG1fZW50YW5nbGVkUG9ydC0+cG9zdE1l
c3NhZ2VUb1JlbW90ZShNZXNzYWdlUG9ydFByb3h5V3JhcHBlcjo6RXZlbnREYXRhOjpjcmVhdGUo
bWVzc2FnZSwgcHJveHkucmVsZWFzZSgpKSk7CiB9CiAKLXZvaWQgTWVzc2FnZVBvcnQ6OmRlbGl2
ZXJNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4g
ZGF0YVBvcnQpCitQYXNzT3duUHRyPE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyPiBNZXNzYWdlUG9y
dDo6ZGlzZW50YW5nbGUoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgbV9tZXNzYWdlUXVldWUu
YXBwZW5kKEV2ZW50RGF0YTo6Y3JlYXRlKG1lc3NhZ2UsIGRhdGFQb3J0KSk7Ci0gICAgaWYgKG1f
cXVldWVJc09wZW4gJiYgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpOworICAg
IGlmICghbV9lbnRhbmdsZWRQb3J0KQorICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwor
ICAgIGVsc2UKKyAgICAgICAgbV9lbnRhbmdsZWRQb3J0LT5kaXNlbnRhbmdsZSgpOworICAgIHJl
dHVybiBtX2VudGFuZ2xlZFBvcnQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPE1lc3NhZ2VQ
b3J0PiBNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJzYXRpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorLy8gSW52
b2tlZCB0byBub3RpZnkgdXMgdGhhdCB0aGVyZSBhcmUgbWVzc2FnZXMgYXZhaWxhYmxlIGZvciB0
aGlzIHBvcnQuCisvLyBUaGlzIGNvZGUgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFk
LCBhbmQgc28gc2hvdWxkIG5vdCBjYWxsIGFueSBub24tdGhyZWFkc2FmZSBBUElzIChpLmUuIHNo
b3VsZCBub3QgY2FsbCBpbnRvIHRoZSBlbnRhbmdsZWQgcHJveHkgb3IgYWNjZXNzIG11dGFibGUg
dmFyaWFibGVzKS4KK3ZvaWQgTWVzc2FnZVBvcnQ6Om1lc3NhZ2VBdmFpbGFibGUoKQogewotICAg
IFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDEgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOwotICAgIGlmICghbV9lbnRhbmdsZWRQb3J0IHx8ICFtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpCi0gICAgICAgIHJldHVybiBwb3J0MTsKLSAgICBSZWZQdHI8TWVzc2Fn
ZVBvcnQ+IHBvcnQyID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZSgwKTsKLQotICAgIGVudGFuZ2xlKHBv
cnQxLmdldCgpLCBwb3J0Mi5nZXQoKSk7Ci0KLSAgICBtX2VudGFuZ2xlZFBvcnQtPmRlbGl2ZXJN
ZXNzYWdlKG1lc3NhZ2UsIHBvcnQyKTsKLSAgICByZXR1cm4gcG9ydDE7CisgICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5w
cm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKTsKIH0KIAogdm9pZCBNZXNzYWdlUG9ydDo6
c3RhcnQoKQogewotICAgIGlmIChtX3F1ZXVlSXNPcGVuIHx8ICFtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgaWYgKG1f
cXVldWVJc09wZW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcXVldWVJc09wZW4gPSB0cnVl
OwpAQCAtMTc5LDYxICsxMTAsMzAgQEAgdm9pZCBNZXNzYWdlUG9ydDo6Y2xvc2UoKQogewogICAg
IGlmICghbV9lbnRhbmdsZWRQb3J0KQogICAgICAgICByZXR1cm47Ci0KLSAgICBNZXNzYWdlUG9y
dFByb3h5KiBvdGhlclBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7Ci0gICAgdW5lbnRhbmdsZSgpOwot
Ci0gICAgcXVldWVDbG9zZUV2ZW50KCk7Ci0gICAgb3RoZXJQb3J0LT5xdWV1ZUNsb3NlRXZlbnQo
KTsKKyAgICBtX2VudGFuZ2xlZFBvcnQtPmNsb3NlKCk7CiB9CiAKLXZvaWQgTWVzc2FnZVBvcnQ6
OmVudGFuZ2xlKE1lc3NhZ2VQb3J0UHJveHkqIHBvcnQxLCBNZXNzYWdlUG9ydFByb3h5KiBwb3J0
MikKK3ZvaWQgTWVzc2FnZVBvcnQ6OmVudGFuZ2xlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRQcm94
eVdyYXBwZXI+IHJlbW90ZSkKIHsKLSAgICBwb3J0MS0+ZW50YW5nbGUocG9ydDIpOwotICAgIHBv
cnQyLT5lbnRhbmdsZShwb3J0MSk7Ci19CisgICAgLy8gT25seSBpbnZva2VkIHRvIHNldCBvdXIg
aW5pdGlhbCBlbnRhbmdsZW1lbnQuCisgICAgQVNTRVJUKCFtX2VudGFuZ2xlZFBvcnQpOworICAg
IEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCi12b2lkIE1lc3NhZ2VQb3J0Ojpl
bnRhbmdsZShNZXNzYWdlUG9ydFByb3h5KiByZW1vdGUpCi17Ci0gICAgLy8gVW5lbnRhbmdsZSBm
cm9tIG91ciBjdXJyZW50IHBvcnQgZmlyc3QuCi0gICAgaWYgKG1fZW50YW5nbGVkUG9ydCkgewot
ICAgICAgICBBU1NFUlQobV9lbnRhbmdsZWRQb3J0ICE9IHJlbW90ZSk7Ci0gICAgICAgIHVuZW50
YW5nbGUoKTsKLSAgICB9Ci0gICAgbV9lbnRhbmdsZWRQb3J0ID0gcmVtb3RlOworICAgIC8vIERv
bid0IGVudGFuZ2xlIHRoZSBwb3J0cyBpZiB0aGUgY2hhbm5lbCBpcyBjbG9zZWQuCisgICAgaWYg
KHJlbW90ZS0+ZW50YW5nbGVJZk9wZW4odGhpcykpCisgICAgICAgIG1fZW50YW5nbGVkUG9ydCA9
IHJlbW90ZTsKIH0KIAotdm9pZCBNZXNzYWdlUG9ydDo6dW5lbnRhbmdsZSgpCi17Ci0gICAgLy8g
VW5lbnRhbmdsZSBvdXIgZW5kIGJlZm9yZSB1bmVudGFuZ2xpbmcgdGhlIG90aGVyIGVuZC4KLSAg
ICBpZiAobV9lbnRhbmdsZWRQb3J0KSB7Ci0gICAgICAgIE1lc3NhZ2VQb3J0UHJveHkqIHJlbW90
ZSA9IG1fZW50YW5nbGVkUG9ydDsKLSAgICAgICAgbV9lbnRhbmdsZWRQb3J0ID0gMDsKLSAgICAg
ICAgcmVtb3RlLT51bmVudGFuZ2xlKCk7Ci0gICAgfQotfQorCiAKIHZvaWQgTWVzc2FnZVBvcnQ6
OmNvbnRleHREZXN0cm95ZWQoKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOwotCi0gICAgaWYgKG1fZW50YW5nbGVkUG9ydCkKLSAgICAgICAgdW5lbnRhbmdsZSgpOwot
CisgICAgLy8gTXVzdCBjbG9zZSBwb3J0IGJlZm9yZSBibG93aW5nIGF3YXkgdGhlIGNhY2hlZCBj
b250ZXh0LCB0byBlbnN1cmUgdGhhdCB3ZSBnZXQgbm8gbW9yZSBjYWxscyB0byBtZXNzYWdlQXZh
aWxhYmxlKCkuCisgICAgY2xvc2UoKTsKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAw
OwogfQogCi12b2lkIE1lc3NhZ2VQb3J0OjphdHRhY2hUb0NvbnRleHQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLXsKLSAgICBBU1NFUlQoIW1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlSXNPcGVuKTsKLQotICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5jcmVhdGVkTWVzc2FnZVBvcnQodGhpcyk7Ci0gICAgCi0g
ICAgLy8gRklYTUU6IE5lZWQgdG8gY2FsbCBwcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24o
KT8KLX0KLQogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogTWVzc2FnZVBvcnQ6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CkBAIC0yNDIsMTcgKzE0MiwxOSBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBNZXNzYWdl
UG9ydDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiB2b2lkIE1lc3NhZ2VQb3J0Ojpk
aXNwYXRjaE1lc3NhZ2VzKCkKIHsKICAgICAvLyBNZXNzYWdlcyBmb3IgY29udGV4dHMgdGhhdCBh
cmUgbm90IGZ1bGx5IGFjdGl2ZSBnZXQgZGlzcGF0Y2hlZCB0b28sIGJ1dCBKU0Fic3RyYWN0RXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoKSBkb2Vzbid0IGNhbGwgaGFuZGxlcnMgZm9yIHRoZXNl
LgotICAgIC8vIEZJWE1FOiBTdWNoIG1lc3NhZ2VzIHNob3VsZCBiZSBkaXNwYXRjaGVkIGlmIHRo
ZSBkb2N1bWVudCByZXR1cm5zIGZyb20gcGFnZSBjYWNoZS4gVGhleSBhcmUgb25seSBhbGxvd2Vk
IHRvIGJlIGxvc3QgaWYgdGhlIGRvY3VtZW50IGlzIGRpc2NhcmRlZC4KKyAgICAvLyBUaGUgSFRN
TDUgc3BlYyBzcGVjaWZpZXMgdGhhdCBhbnkgbWVzc2FnZXMgc2VudCB0byBhIGRvY3VtZW50IHRo
YXQgaXMgbm90IGZ1bGx5IGFjdGl2ZSBzaG91bGQgYmUgZHJvcHBlZCwgc28gdGhpcyBiZWhhdmlv
ciBpcyBPSy4KICAgICBBU1NFUlQocXVldWVJc09wZW4oKSk7CiAKLSAgICBSZWZQdHI8RXZlbnRE
YXRhPiBldmVudERhdGE7Ci0gICAgd2hpbGUgKG1fbWVzc2FnZVF1ZXVlLnRyeUdldE1lc3NhZ2Uo
ZXZlbnREYXRhKSkgewotCi0gICAgICAgIEFTU0VSVCghZXZlbnREYXRhLT5tZXNzYWdlUG9ydCB8
fCAhZXZlbnREYXRhLT5tZXNzYWdlUG9ydC0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAg
ICAgICAgaWYgKGV2ZW50RGF0YS0+bWVzc2FnZVBvcnQpCi0gICAgICAgICAgICBldmVudERhdGEt
Pm1lc3NhZ2VQb3J0LT5hdHRhY2hUb0NvbnRleHQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
LQotICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50
RGF0YS0+bWVzc2FnZSwgIiIsICIiLCAwLCBldmVudERhdGEtPm1lc3NhZ2VQb3J0KTsKKyAgICBS
ZWZQdHI8TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6OkV2ZW50RGF0YT4gZXZlbnREYXRhOworICAg
IHdoaWxlIChtX2VudGFuZ2xlZFBvcnQgJiYgbV9lbnRhbmdsZWRQb3J0LT50cnlHZXRNZXNzYWdl
RnJvbVJlbW90ZShldmVudERhdGEpKSB7CisgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9y
dDsKKyAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyPiBwcm94eSA9IGV2ZW50
RGF0YS0+cHJveHkoKTsKKyAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICAvLyBUaGUg
cmVtb3RlIHNpZGUgc2VudCBvdmVyIGEgcG9ydCBwcm94eSwgc28gY3JlYXRlIGEgTWVzc2FnZVBv
cnQgdG8gd3JhcCBpdC4KKyAgICAgICAgICAgIHBvcnQgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKCpt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAgICAgICAgcG9ydC0+ZW50YW5nbGUocHJv
eHkucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1l
c3NhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50RGF0YS0+bWVzc2FnZSgpLCAiIiwgIiIsIDAsIHBvcnQp
OwogCiAgICAgICAgIGlmIChtX29uTWVzc2FnZUxpc3RlbmVyKSB7CiAgICAgICAgICAgICBldnQt
PnNldFRhcmdldCh0aGlzKTsKQEAgLTI2NiwzMSArMTY4LDYgQEAgdm9pZCBNZXNzYWdlUG9ydDo6
ZGlzcGF0Y2hNZXNzYWdlcygpCiAgICAgfQogfQogCi12b2lkIE1lc3NhZ2VQb3J0OjpxdWV1ZUNs
b3NlRXZlbnQoKQotewotICAgIEFTU0VSVCghbV9wZW5kaW5nQ2xvc2VFdmVudCk7Ci0gICAgbV9w
ZW5kaW5nQ2xvc2VFdmVudCA9IHRydWU7Ci0KLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnBvc3RUYXNrKE1lc3NhZ2VQb3J0Q2xvc2VFdmVudFRhc2s6OmNyZWF0ZSh0aGlzKSk7Ci19Ci0K
LXZvaWQgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoQ2xvc2VFdmVudCgpCi17Ci0gICAgQVNTRVJUKG1f
cGVuZGluZ0Nsb3NlRXZlbnQpOwotICAgIG1fcGVuZGluZ0Nsb3NlRXZlbnQgPSBmYWxzZTsKLQot
ICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xvc2VF
dmVudCwgZmFsc2UsIHRydWUpOwotICAgIGlmIChtX29uQ2xvc2VMaXN0ZW5lcikgewotICAgICAg
ICBldnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KHRo
aXMpOwotICAgICAgICBtX29uQ2xvc2VMaXN0ZW5lci0+aGFuZGxlRXZlbnQoZXZ0LmdldCgpLCBm
YWxzZSk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hF
dmVudChldnQucmVsZWFzZSgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KIHZvaWQgTWVz
c2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKICAgICBF
dmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChl
dmVudFR5cGUpOwpAQCAtMzQyLDkgKzIxOSwxNyBAQCBib29sIE1lc3NhZ2VQb3J0OjpkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBy
ZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKK3ZvaWQgTWVzc2FnZVBvcnQ6
OnNldE9ubWVzc2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCit7
CisgICAgbV9vbk1lc3NhZ2VMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7CisgICAgc3RhcnQoKTsK
K30KKwogYm9vbCBNZXNzYWdlUG9ydDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkKIHsKLSAgICByZXR1
cm4gbV9wZW5kaW5nQ2xvc2VFdmVudCB8fCAobV9xdWV1ZUlzT3BlbiAmJiAhbV9tZXNzYWdlUXVl
dWUuaXNFbXB0eSgpKTsKKyAgICAvLyBUaGUgc3BlYyBzYXlzIHRoYXQgZW50YW5nbGVkIG1lc3Nh
Z2UgcG9ydHMgc2hvdWxkIGFsd2F5cyBiZSB0cmVhdGVkIGFzIGlmIHRoZXkgaGF2ZSBhIHN0cm9u
ZyByZWZlcmVuY2UuCisgICAgLy8gV2UnbGwgYWxzbyBzdGlwdWxhdGUgdGhhdCB0aGUgcXVldWUg
bmVlZHMgdG8gYmUgb3BlbiAoaWYgdGhlIGFwcCBkcm9wcyBpdHMgcmVmZXJlbmNlIHRvIHRoZSBw
b3J0IGJlZm9yZSBzdGFydCgpLWluZyBpdCwgdGhlbiBpdCdzIG5vdCByZWFsbHkgZW50YW5nbGVk
IGFzIGl0J3MgdW5yZWFjaGFibGUpLgorICAgIHJldHVybiBtX3F1ZXVlSXNPcGVuICYmIG1fZW50
YW5nbGVkUG9ydCAmJiBtX2VudGFuZ2xlZFBvcnQtPmhhc1BlbmRpbmdBY3Rpdml0eSgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdl
UG9ydC5oIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAppbmRleCAwNTRhZTQxLi4xYjNjNmFj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCisrKyBiL1dlYkNvcmUvZG9t
L01lc3NhZ2VQb3J0LmgKQEAgLTMwLDEwICszMCwxMSBAQAogI2luY2x1ZGUgIkF0b21pY1N0cmlu
Z0hhc2guaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJn
ZXQuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydFByb3h5LmgiCisjaW5jbHVkZSAiTWVzc2FnZVBv
cnRQcm94eVdyYXBwZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ1LDM1ICs0NiwyNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBTdHJpbmc7Ci0gICAgY2xhc3MgV29ya2VyQ29u
dGV4dDsKIAotICAgIGNsYXNzIE1lc3NhZ2VQb3J0IDogcHVibGljIE1lc3NhZ2VQb3J0UHJveHks
IHB1YmxpYyBFdmVudFRhcmdldCB7CisgICAgY2xhc3MgTWVzc2FnZVBvcnQgOiBwdWJsaWMgUmVm
Q291bnRlZDxNZXNzYWdlUG9ydD4sIHB1YmxpYyBFdmVudFRhcmdldCB7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNZXNzYWdlUG9ydChzY3JpcHRFeGVjdXRpb25Db250ZXh0KSk7IH0KKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVBvcnQo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpOyB9CiAgICAgICAgIH5NZXNzYWdlUG9ydCgpOwogCi0g
ICAgICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IGNsb25lKEV4Y2VwdGlvbkNvZGUmKTsgLy8g
UmV0dXJucyBhIHBvcnQgdGhhdCBpc24ndCBhdHRhY2hlZCB0byBhbnkgY29udGV4dC4KLQotICAg
ICAgICBib29sIGFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50YW5nbGVkUG9ydDsgfQogICAg
ICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVz
c2FnZVBvcnQqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBv
cnQ+IHN0YXJ0Q29udmVyc2F0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpOwogICAgICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgICAgIHZvaWQgY2xvc2Uo
KTsKIAotICAgICAgICAvLyBJbXBsZW1lbnRhdGlvbnMgb2YgTWVzc2FnZVBvcnRQcm94eSBBUElz
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBlbnRhbmdsZShNZXNzYWdlUG9ydFByb3h5Kik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCB1bmVudGFuZ2xlKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkZWxp
dmVyTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHF1ZXVlQ2xvc2VFdmVudCgpOworICAgICAgICB2b2lk
IGVudGFuZ2xlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI+KTsKKyAgICAgICAg
UGFzc093blB0cjxNZXNzYWdlUG9ydFByb3h5V3JhcHBlcj4gZGlzZW50YW5nbGUoRXhjZXB0aW9u
Q29kZSYpOwogCisgICAgICAgIHZvaWQgbWVzc2FnZUF2YWlsYWJsZSgpOwogICAgICAgICBib29s
IHF1ZXVlSXNPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZUlzT3BlbjsgfQogCi0gICAgICAg
IE1lc3NhZ2VQb3J0UHJveHkqIGVudGFuZ2xlZFBvcnQoKSB7IHJldHVybiBtX2VudGFuZ2xlZFBv
cnQ7IH0KLSAgICAgICAgc3RhdGljIHZvaWQgZW50YW5nbGUoTWVzc2FnZVBvcnRQcm94eSosIE1l
c3NhZ2VQb3J0UHJveHkqKTsKLQogICAgICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKLSAg
ICAgICAgdm9pZCBhdHRhY2hUb0NvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCiAg
ICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgTWVzc2FnZVBvcnQqIHRvTWVzc2FnZVBv
cnQoKSB7IHJldHVybiB0aGlzOyB9CkBAIC04OCw1MiArNzksMzAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rv
cj4gRXZlbnRMaXN0ZW5lcnNNYXA7CiAgICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExp
c3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KIAotICAgICAgICB1c2luZyBS
ZWZDb3VudGVkPE1lc3NhZ2VQb3J0UHJveHk+OjpyZWY7Ci0gICAgICAgIHVzaW5nIFJlZkNvdW50
ZWQ8TWVzc2FnZVBvcnRQcm94eT46OmRlcmVmOworICAgICAgICB1c2luZyBSZWZDb3VudGVkPE1l
c3NhZ2VQb3J0Pjo6cmVmOworICAgICAgICB1c2luZyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0Pjo6
ZGVyZWY7CiAKICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKTsKIAotICAgICAgICAv
LyBGSVhNRTogUGVyIGN1cnJlbnQgc3BlYywgc2V0dGluZyBvbm1lc3NhZ2Ugc2hvdWxkIGF1dG9t
YWdpY2FsbHkgc3RhcnQgdGhlIHBvcnQgKHVubGlrZSBhZGRFdmVudExpc3RlbmVyKCJtZXNzYWdl
IiwgLi4uKSkuCi0gICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uTWVzc2FnZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5l
cjsgfQorICAgICAgICB2b2lkIHNldE9ubWVzc2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
KTsKICAgICAgICAgRXZlbnRMaXN0ZW5lciogb25tZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9v
bk1lc3NhZ2VMaXN0ZW5lci5nZXQoKTsgfQogCi0gICAgICAgIHZvaWQgc2V0T25jbG9zZShQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkNsb3NlTGlzdGVuZXIg
PSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uY2xvc2UoKSBjb25z
dCB7IHJldHVybiBtX29uQ2xvc2VMaXN0ZW5lci5nZXQoKTsgfQotCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VQb3J0Q2xvc2VFdmVudFRhc2s7CiAKLSAgICAgICAg
TWVzc2FnZVBvcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgICAgICBNZXNzYWdlUG9y
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2
ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpIHsgZGVyZWYoKTsgfQogCi0gICAgICAgIHZvaWQgZGlzcGF0Y2hDbG9zZUV2ZW50KCk7
CisgICAgICAgIE93blB0cjxNZXNzYWdlUG9ydFByb3h5V3JhcHBlcj4gbV9lbnRhbmdsZWRQb3J0
OwogCi0gICAgICAgIE1lc3NhZ2VQb3J0UHJveHkqIG1fZW50YW5nbGVkUG9ydDsKLQotICAgICAg
ICAvLyBGSVhNRTogRXZlbnREYXRhIGlzIG5lY2Vzc2FyeSB0byBwYXNzIG1lc3NhZ2VzIHRvIG90
aGVyIHRocmVhZHMuIEluIHNpbmdsZSB0aHJlYWRlZCBjYXNlLCB3ZSBjYW4ganVzdCBxdWV1ZSBh
IGNyZWF0ZWQgZXZlbnQuCi0gICAgICAgIHN0cnVjdCBFdmVudERhdGEgOiBwdWJsaWMgUmVmQ291
bnRlZDxFdmVudERhdGE+IHsKLSAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50RGF0
YT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4p
OwotICAgICAgICAgICAgfkV2ZW50RGF0YSgpOwotCi0gICAgICAgICAgICBTdHJpbmcgbWVzc2Fn
ZTsKLSAgICAgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQ7Ci0KLSAgICAg
ICAgcHJpdmF0ZToKLSAgICAgICAgICAgIEV2ZW50RGF0YShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+KTsKLSAgICAgICAgfTsKLSAgICAgICAgTWVzc2FnZVF1
ZXVlPFJlZlB0cjxFdmVudERhdGE+ID4gbV9tZXNzYWdlUXVldWU7IC8vIEZJWE1FOiBObyBuZWVk
IHRvIHVzZSBNZXNzYWdlUXVldWUgaW4gc2luZ2xlIHRocmVhZGVkIGNhc2UuCiAgICAgICAgIGJv
b2wgbV9xdWV1ZUlzT3BlbjsKIAogICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKICAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1f
b25NZXNzYWdlTGlzdGVuZXI7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2xv
c2VMaXN0ZW5lcjsKIAogICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJz
OwotCi0gICAgICAgIGJvb2wgbV9wZW5kaW5nQ2xvc2VFdmVudDsgLy8gVGhlIHBvcnQgaXMgR0Mg
cHJvdGVjdGVkIHdoaWxlIHdhaXRpbmcgZm9yIGEgY2xvc2UgZXZlbnQgdG8gYmUgZGlzcGF0Y2hl
ZC4KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5pZGwgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5pZGwKaW5kZXgg
MDNjNmJhYi4uZTVmOWFkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRs
CisrKyBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbApAQCAtMzQsMTYgKzM0LDEzIEBAIG1v
ZHVsZSBldmVudHMgewogLy8gV2UgbmVlZCB0byBoYXZlIHNvbWV0aGluZyBhcyBhbiBPYmpDIGJp
bmRpbmcsIGJlY2F1c2UgTWVzc2FnZVBvcnQgaXMgdXNlZCBpbiBNZXNzYWdlRXZlbnQsIHdoaWNo
IGFscmVhZHkgaGFzIG9uZSwKIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGFjdHVhbGx5IGV4cG9z
ZSB0aGUgQVBJIHdoaWxlIGl0IGlzIGluIGZsdXguCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZB
U0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBib29sZWFuIGFjdGl2ZTsKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJpbmcg
bWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9ydCkKICAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICBbQ3VzdG9tXSBNZXNzYWdlUG9ydCBz
dGFydENvbnZlcnNhdGlvbihpbiBET01TdHJpbmcgbWVzc2FnZSk7CiAgICAgICAgIHZvaWQgc3Rh
cnQoKTsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIg
YXR0cmlidXRlcwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7Ci0g
ICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2xvc2U7CiAKICAgICAgICAgLy8gRXZl
bnRUYXJnZXQgaW50ZXJmYWNlCiAgICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5l
cihpbiBET01TdHJpbmcgdHlwZSwgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9y
dFByb3h5LmggYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydFByb3h5LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQwMjRmM2QuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnRQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoNCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0gKg0KLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dA0KLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUNCi0gKiBtZXQ6DQotICoNCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodA0KLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4NCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCi0g
KiBkaXN0cmlidXRpb24uDQotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCi0gKg0KLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMNCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
DQotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsDQotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQ0KLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLg0KLSAqLw0KLQ0KLSNpZm5kZWYgTWVzc2FnZVBvcnRQcm94eV9oDQotI2RlZmluZSBNZXNz
YWdlUG9ydFByb3h5X2gNCi0NCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4NCi0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4NCi0NCi1uYW1lc3BhY2UgV2ViQ29yZSB7DQotDQotICAgIGNs
YXNzIE1lc3NhZ2VQb3J0Ow0KLSAgICBjbGFzcyBTdHJpbmc7DQotDQotICAgIGNsYXNzIE1lc3Nh
Z2VQb3J0UHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZXNzYWdlUG9ydFByb3h5PiB7DQotICAg
IHB1YmxpYzoNCi0gICAgICAgIHZpcnR1YWwgfk1lc3NhZ2VQb3J0UHJveHkoKSB7IH0NCi0NCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBlbnRhbmdsZShNZXNzYWdlUG9ydFByb3h5KikgPSAwOw0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHVuZW50YW5nbGUoKSA9IDA7DQotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGVsaXZlck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3Nh
Z2VQb3J0PikgPSAwOw0KLSAgICAgICAgdmlydHVhbCB2b2lkIHF1ZXVlQ2xvc2VFdmVudCgpID0g
MDsNCi0gICAgfTsNCi0NCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQotDQotI2VuZGlmIC8vIE1l
c3NhZ2VQb3J0UHJveHlfaA0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0UHJv
eHlXcmFwcGVyLmNwcCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0UHJveHlXcmFwcGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Y4ODQ1Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRQcm94eVdyYXBwZXIuY3BwCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0UHJveHlXcmFwcGVy
LmgiCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc093blB0cjxNZXNzYWdlUG9ydFByb3h5V3JhcHBlcj4gTWVzc2FnZVBvcnRQcm94
eVdyYXBwZXI6OmNyZWF0ZShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+IHByb3h5KQorewor
ICAgIHJldHVybiBuZXcgTWVzc2FnZVBvcnRQcm94eVdyYXBwZXIocHJveHkpOworfQorCitQYXNz
UmVmUHRyPE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyOjpFdmVudERhdGE+IE1lc3NhZ2VQb3J0UHJv
eHlXcmFwcGVyOjpFdmVudERhdGE6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI+IHBvcnRQcm94eSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEV2ZW50RGF0YShtZXNzYWdlLCBwb3J0UHJveHkpKTsKK30KKworTWVzc2Fn
ZVBvcnRQcm94eVdyYXBwZXI6OkV2ZW50RGF0YTo6RXZlbnREYXRhKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydFByb3h5V3JhcHBlcj4gcG9ydFByb3h5KQorICAg
IDogbV9tZXNzYWdlKG1lc3NhZ2UuY29weSgpKQorICAgICwgbV9wcm94eShwb3J0UHJveHkpCit7
Cit9CisKK01lc3NhZ2VQb3J0UHJveHlXcmFwcGVyOjpNZXNzYWdlUG9ydFByb3h5V3JhcHBlcihQ
YXNzUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+IHByb3h5KQorICAgIDogbV9wcm94eShwcm94eSkK
K3sKK30KKworTWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6On5NZXNzYWdlUG9ydFByb3h5V3JhcHBl
cigpCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGNsb3NlIG91ciBwcm94eSBvYmplY3Qgd2hlbiB0
aGUgYmFzZSBpcyBmcmVlZCwgdG8ga2VlcCB0aGUgcHJveHkgb2JqZWN0cyBmcm9tIGxlYWtpbmcu
CisgICAgbV9wcm94eS0+Y2xvc2UoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0UHJveHlXcmFwcGVyLmggYi9XZWJD
b3JlL2RvbS9NZXNzYWdlUG9ydFByb3h5V3JhcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjg4MWEzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2RvbS9NZXNz
YWdlUG9ydFByb3h5V3JhcHBlci5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lc3NhZ2VQb3J0
UHJveHlXcmFwcGVyX2gKKyNkZWZpbmUgTWVzc2FnZVBvcnRQcm94eVdyYXBwZXJfaAorCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIE1lc3NhZ2VQb3J0OworICAgIGNsYXNzIE1lc3Nh
Z2VQb3J0UHJveHk7CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgLy8gTWVzc2FnZVBvcnRQcm94
eVdyYXBwZXIgaXMgYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBpbnRlcmZhY2UgdG8gdGhlIHJlbW90
ZSBzaWRlIG9mIGEgbWVzc2FnZSBjaGFubmVsLgorICAgIC8vIEl0IGFjdHMgYXMgYSB3cmFwcGVy
IGFyb3VuZCB0aGUgcGxhdGZvcm0tZGVwZW5kZW50IE1lc3NhZ2VQb3J0UHJveHkgaW1wbGVtZW50
YXRpb24gd2hpY2ggZW5zdXJlcyB0aGF0IHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgY2xvc2UoKSBt
ZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3MgTWVzc2FnZVBv
cnRQcm94eVdyYXBwZXIgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorCisgICAgICAgIC8v
IENyZWF0ZXMgYSBuZXcgd3JhcHBlciBmb3IgdGhlIHBhc3NlZCBwcm94eSBvYmplY3QuCisgICAg
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyPiBjcmVhdGUoUGFz
c1JlZlB0cjxNZXNzYWdlUG9ydFByb3h5PiBwcm94eSk7CisKKyAgICAgICAgLy8gRW50YW5nbGVz
IHRoZSBwcm94eSB3aXRoIGEgcG9ydCAoY2FsbGVkIHdoZW4gYSBwb3J0IGhhcyBiZWVuIGNsb25l
ZCwgYWZ0ZXIgdGhlIGNsb25lIGhhcyBiZWVuIG1hcnNoYWxsZWQgdG8gaXRzIG5ldyBvd25pbmcg
dGhyZWFkIGFuZCBpcyByZWFkeSB0byByZWNlaXZlIG1lc3NhZ2VzKS4KKyAgICAgICAgLy8gUmV0
dXJucyBmYWxzZSBpZiB0aGUgZW50YW5nbGVtZW50IGZhaWxlZCBiZWNhdXNlIHRoZSBwb3J0IHdh
cyBjbG9zZWQuCisgICAgICAgIGJvb2wgZW50YW5nbGVJZk9wZW4oTWVzc2FnZVBvcnQqKTsKKwor
ICAgICAgICAvLyBEaXNlbnRhbmdsZXMgdGhlIHByb3h5IGZyb20gYSBnaXZlbiBwb3J0IHNvIGl0
IG5vIGxvbmdlciBmb3J3YXJkcyBtZXNzYWdlcyB0byB0aGUgcG9ydC4gQ2FsbGVkIHdoZW4gdGhl
IHBvcnQgaXMgYmVpbmcgY2xvbmVkIGFuZCBubyBuZXcgb3duaW5nIHRocmVhZCBoYXMgeWV0IGJl
ZW4gZXN0YWJsaXNoZWQuCisgICAgICAgIHZvaWQgZGlzZW50YW5nbGUoKTsKKworICAgICAgICAv
LyBDbG9zZXMgdGhlIHBvcnQgKGVuc3VyZXMgdGhhdCBubyBmdXJ0aGVyIG1lc3NhZ2VzIGNhbiBi
ZSBhZGRlZCB0byBlaXRoZXIgcXVldWUpLgorICAgICAgICB2b2lkIGNsb3NlKCk7CisKKyAgICAg
ICAgLy8gVXNlZCBieSBNZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgpIHRvIHByZXZlbnQgY2FsbGVy
cyBmcm9tIHBhc3NpbmcgYSBwb3J0J3Mgb3duIGVudGFuZ2xlZCBwb3J0LgorICAgICAgICBib29s
IGlzUHJveHlGb3IoTWVzc2FnZVBvcnQqKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHByb3h5IGN1cnJlbnRseSBjb250YWlucyBtZXNzYWdlcyBmb3IgdGhpcyBwb3J0LCBvciBt
YXkgcmVjZWl2ZSBtZXNzYWdlcyBpbiB0aGUgZnV0dXJlIChpcyBvcGVuKS4KKyAgICAgICAgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKTsKKworICAgICAgICBjbGFzcyBFdmVudERhdGEgOiBwdWJs
aWMgUmVmQ291bnRlZDxFdmVudERhdGE+IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8RXZlbnREYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nJiwgUGFzc093
blB0cjxNZXNzYWdlUG9ydFByb3h5V3JhcHBlcj4pOworCisgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UoKSB7IHJldHVybiBtX21lc3NhZ2U7IH0KKyAgICAgICAgICAgIFBhc3NPd25Q
dHI8TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI+IHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5yZWxl
YXNlKCk7IH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEV2ZW50RGF0YShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI+KTsKKyAg
ICAgICAgICAgIFN0cmluZyBtX21lc3NhZ2U7CisgICAgICAgICAgICBPd25QdHI8TWVzc2FnZVBv
cnRQcm94eVdyYXBwZXI+IG1fcHJveHk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU2VuZHMg
YSBtZXNzYWdlIGFuZCBvcHRpb25hbCBjbG9uZWQgcG9ydCB0byB0aGUgcmVtb3RlIHBvcnQuCisg
ICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VUb1JlbW90ZShQYXNzUmVmUHRyPEV2ZW50RGF0YT4pOwor
CisgICAgICAgIC8vIEV4dHJhY3RzIGEgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIHF1ZXVlIGZv
ciB0aGlzIHBvcnQuCisgICAgICAgIGJvb2wgdHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUoUmVmUHRy
PEV2ZW50RGF0YT4mKTsKKworICAgICAgICB+TWVzc2FnZVBvcnRQcm94eVdyYXBwZXIoKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyKFBhc3NSZWZQdHI8
TWVzc2FnZVBvcnRQcm94eT4pOworICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnRQcm94eT4gbV9w
cm94eTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNZXNz
YWdlUG9ydFByb3h5V3JhcHBlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9kZWZhdWx0L01l
c3NhZ2VQb3J0UHJveHkuY3BwIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9NZXNzYWdlUG9ydFByb3h5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzkyM2JjCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9NZXNzYWdlUG9ydFByb3h5LmNwcApAQCAt
MCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydFBy
b3h5LmgiCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyIGltcGxlbWVudGF0aW9ucyAtIGp1c3QgZGVs
ZWdhdGUgdG8gdGhlIE1lc3NhZ2VQb3J0UHJveHkuCitib29sIE1lc3NhZ2VQb3J0UHJveHlXcmFw
cGVyOjplbnRhbmdsZUlmT3BlbihNZXNzYWdlUG9ydCogcG9ydCkKK3sKKyAgICByZXR1cm4gbV9w
cm94eS0+ZW50YW5nbGVJZk9wZW4ocG9ydCk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnRQcm94eVdy
YXBwZXI6OmRpc2VudGFuZ2xlKCkKK3sKKyAgICBtX3Byb3h5LT5kaXNlbnRhbmdsZSgpOworfQor
Cit2b2lkIE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyOjpwb3N0TWVzc2FnZVRvUmVtb3RlKFBhc3NS
ZWZQdHI8TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6OkV2ZW50RGF0YT4gbWVzc2FnZSkKK3sKKyAg
ICBtX3Byb3h5LT5wb3N0TWVzc2FnZVRvUmVtb3RlKG1lc3NhZ2UpOworfQorCitib29sIE1lc3Nh
Z2VQb3J0UHJveHlXcmFwcGVyOjp0cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShSZWZQdHI8TWVzc2Fn
ZVBvcnRQcm94eVdyYXBwZXI6OkV2ZW50RGF0YT4mIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gbV9w
cm94eS0+dHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUocmVzdWx0KTsKK30KKwordm9pZCBNZXNzYWdl
UG9ydFByb3h5V3JhcHBlcjo6Y2xvc2UoKQoreworICAgIG1fcHJveHktPmNsb3NlKCk7Cit9CisK
K2Jvb2wgTWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6OmlzUHJveHlGb3IoTWVzc2FnZVBvcnQqIHBv
cnQpCit7CisgICAgcmV0dXJuIG1fcHJveHktPmlzUHJveHlGb3IocG9ydCk7Cit9CisKK2Jvb2wg
TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpCit7CisgICAgcmV0
dXJuIG1fcHJveHktPmhhc1BlbmRpbmdBY3Rpdml0eSgpOworfQorCitNZXNzYWdlUG9ydFByb3h5
OjpNZXNzYWdlUG9ydFByb3h5KFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRRdWV1ZT4gaW5jb21pbmcs
IFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRRdWV1ZT4gb3V0Z29pbmcpCisgICAgOiBtX2VudGFuZ2xl
ZFByb3h5KDApCisgICAgLCBtX2luY29taW5nUXVldWUoaW5jb21pbmcpCisgICAgLCBtX291dGdv
aW5nUXVldWUob3V0Z29pbmcpCisgICAgLCBtX3JlbW90ZVBvcnQoMCkKK3sKK30KKworTWVzc2Fn
ZVBvcnRQcm94eTo6fk1lc3NhZ2VQb3J0UHJveHkoKQoreworfQorCit2b2lkIE1lc3NhZ2VQb3J0
UHJveHk6OmNyZWF0ZUNoYW5uZWwoUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDEsIFBhc3NS
ZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQyKQoreworICAgIC8vIENyZWF0ZSBpbmNvbWluZy9vdXRn
b2luZyBxdWV1ZXMuCisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk6Ok1lc3NhZ2VQb3J0UXVl
dWU+IHF1ZXVlMSA9IE1lc3NhZ2VQb3J0UHJveHk6Ok1lc3NhZ2VQb3J0UXVldWU6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxNZXNzYWdlUG9ydFByb3h5OjpNZXNzYWdlUG9ydFF1ZXVlPiBxdWV1ZTIg
PSBNZXNzYWdlUG9ydFByb3h5OjpNZXNzYWdlUG9ydFF1ZXVlOjpjcmVhdGUoKTsKKworICAgIC8v
IENyZWF0ZSBwcm94aWVzIGZvciBlYWNoIGVuZHBvaW50LgorICAgIFJlZlB0cjxNZXNzYWdlUG9y
dFByb3h5PiBwcm94eTEgPSBhZG9wdFJlZihuZXcgTWVzc2FnZVBvcnRQcm94eShxdWV1ZTEsIHF1
ZXVlMikpOworICAgIFJlZlB0cjxNZXNzYWdlUG9ydFByb3h5PiBwcm94eTIgPSBhZG9wdFJlZihu
ZXcgTWVzc2FnZVBvcnRQcm94eShxdWV1ZTIsIHF1ZXVlMSkpOworCisgICAgLy8gRW50YW5nbGUg
dGhlIHR3byBlbmRwb2ludHMuCisgICAgcHJveHkxLT5zZXRFbnRhbmdsZWRQcm94eShwcm94eTIp
OworICAgIHByb3h5Mi0+c2V0RW50YW5nbGVkUHJveHkocHJveHkxKTsKKworICAgIC8vIE5vdyBl
bnRhbmdsZSB0aGUgcHJveGllcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBsb2NhbCBwb3J0cy4KKyAg
ICBwb3J0MS0+ZW50YW5nbGUoTWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6OmNyZWF0ZShwcm94eTIp
KTsKKyAgICBwb3J0Mi0+ZW50YW5nbGUoTWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6OmNyZWF0ZShw
cm94eTEpKTsKK30KKworYm9vbCBNZXNzYWdlUG9ydFByb3h5OjplbnRhbmdsZUlmT3BlbihNZXNz
YWdlUG9ydCogcG9ydCkKK3sKKyAgICAvLyBXZSBjYW4ndCBjYWxsIG1lbWJlciBmdW5jdGlvbnMg
b24gb3VyIHJlbW90ZSBwYWlyIHdoaWxlIGhvbGRpbmcgb3VyIG11dGV4IG9yIHdlJ2xsIGRlYWRs
b2NrLCBidXQgd2UgbmVlZCB0byBndWFyZCBhZ2FpbnN0IHRoZSByZW1vdGUgcG9ydCBnZXR0aW5n
IGNsb3NlZC9mcmVlZCwgc28gY3JlYXRlIGEgc3RhbmRhbG9uZSByZWZlcmVuY2UuCisgICAgUmVm
UHRyPE1lc3NhZ2VQb3J0UHJveHk+IHJlbW90ZSA9IGVudGFuZ2xlZFByb3h5KCk7CisgICAgaWYg
KCFyZW1vdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZW1vdGUtPnNldFJlbW90ZVBv
cnQocG9ydCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnRQcm94eTo6
ZGlzZW50YW5nbGUoKQoreworICAgIFJlZlB0cjxNZXNzYWdlUG9ydFByb3h5PiByZW1vdGUgPSBl
bnRhbmdsZWRQcm94eSgpOworICAgIGlmIChyZW1vdGUpCisgICAgICAgIHJlbW90ZS0+c2V0UmVt
b3RlUG9ydCgwKTsKK30KKwordm9pZCBNZXNzYWdlUG9ydFByb3h5OjpzZXRSZW1vdGVQb3J0KE1l
c3NhZ2VQb3J0KiBwb3J0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAg
Ly8gU2hvdWxkIG5ldmVyIHNldCBwb3J0IGlmIGl0IGlzIGFscmVhZHkgc2V0LgorICAgIEFTU0VS
VCghcG9ydCB8fCAhbV9yZW1vdGVQb3J0KTsKKyAgICBtX3JlbW90ZVBvcnQgPSBwb3J0OworfQor
CitNZXNzYWdlUG9ydCogTWVzc2FnZVBvcnRQcm94eTo6cmVtb3RlUG9ydCgpCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9yZW1vdGVQb3J0OworfQorCitQ
YXNzUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+IE1lc3NhZ2VQb3J0UHJveHk6OmVudGFuZ2xlZFBy
b3h5KCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIHJldHVybiBtX2Vu
dGFuZ2xlZFByb3h5OworfQorCit2b2lkIE1lc3NhZ2VQb3J0UHJveHk6OnNldEVudGFuZ2xlZFBy
b3h5KFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRQcm94eT4gcmVtb3RlKQoreworICAgIE11dGV4TG9j
a2VyIGxvY2sobV9tdXRleCk7CisgICAgLy8gU2hvdWxkIG9ubHkgYmUgc2V0IGFzIHBhcnQgb2Yg
aW5pdGlhbCBjcmVhdGlvbi9lbnRhbmdsZW1lbnQuCisgICAgaWYgKHJlbW90ZSkKKyAgICAgICAg
QVNTRVJUKCFtX2VudGFuZ2xlZFByb3h5LmdldCgpKTsKKyAgICBtX2VudGFuZ2xlZFByb3h5ID0g
cmVtb3RlOworfQorCit2b2lkIE1lc3NhZ2VQb3J0UHJveHk6OnBvc3RNZXNzYWdlVG9SZW1vdGUo
UGFzc1JlZlB0cjxNZXNzYWdlUG9ydFByb3h5V3JhcHBlcjo6RXZlbnREYXRhPiBtZXNzYWdlKQor
eworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgaWYgKCFtX291dGdvaW5nUXVl
dWUpCisgICAgICAgIHJldHVybjsKKyAgICBib29sIHdhc0VtcHR5ID0gbV9vdXRnb2luZ1F1ZXVl
LT5hcHBlbmRBbmRDaGVja0VtcHR5KG1lc3NhZ2UpOworICAgIGlmICh3YXNFbXB0eSAmJiBtX3Jl
bW90ZVBvcnQpCisgICAgICAgIG1fcmVtb3RlUG9ydC0+bWVzc2FnZUF2YWlsYWJsZSgpOworfQor
Citib29sIE1lc3NhZ2VQb3J0UHJveHk6OnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKFJlZlB0cjxN
ZXNzYWdlUG9ydFByb3h5V3JhcHBlcjo6RXZlbnREYXRhPiYgcmVzdWx0KQoreworICAgIE11dGV4
TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgcmV0dXJuIG1faW5jb21pbmdRdWV1ZS0+dHJ5R2V0
TWVzc2FnZShyZXN1bHQpOworfQorCitib29sIE1lc3NhZ2VQb3J0UHJveHk6OmlzUHJveHlGb3Io
TWVzc2FnZVBvcnQqIHBvcnQpCit7CisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+IHJlbW90
ZSA9IGVudGFuZ2xlZFByb3h5KCk7CisgICAgcmV0dXJuIHJlbW90ZSAmJiAocmVtb3RlLT5yZW1v
dGVQb3J0KCkgPT0gcG9ydCk7Cit9CisKKy8vIENsb3NlcyB0aGUgcG9ydCBzbyBubyBmdXJ0aGVy
IG1lc3NhZ2VzIGNhbiBiZSBzZW50IGZyb20gZWl0aGVyIGVuZC4KK3ZvaWQgTWVzc2FnZVBvcnRQ
cm94eTo6Y2xvc2UoKQoreworICAgIFJlZlB0cjxNZXNzYWdlUG9ydFByb3h5PiByZW1vdGUgPSBl
bnRhbmdsZWRQcm94eSgpOworICAgIGlmICghcmVtb3RlKQorICAgICAgICByZXR1cm47CisgICAg
Y2xvc2VJbnRlcm5hbCgpOworICAgIHJlbW90ZS0+Y2xvc2VJbnRlcm5hbCgpOworfQorCit2b2lk
IE1lc3NhZ2VQb3J0UHJveHk6OmNsb3NlSW50ZXJuYWwoKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2sobV9tdXRleCk7CisgICAgLy8gRGlzZW50YW5nbGUgb3Vyc2VsdmVzIGZyb20gdGhlIG90aGVy
IGVuZC4gV2Ugc3RpbGwgbWFpbnRhaW4gYSByZWZlcmVuY2UgdG8gb3VyIGluY29taW5nIHF1ZXVl
LCBzaW5jZSBwcmV2aW91c2x5LWV4aXN0aW5nIG1lc3NhZ2VzIHNob3VsZCBzdGlsbCBiZSBkZWxp
dmVyZWQuCisgICAgbV9yZW1vdGVQb3J0ID0gMDsKKyAgICBtX2VudGFuZ2xlZFByb3h5ID0gMDsK
KyAgICBtX291dGdvaW5nUXVldWUgPSAwOworfQorCitib29sIE1lc3NhZ2VQb3J0UHJveHk6Omhh
c1BlbmRpbmdBY3Rpdml0eSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAg
ICByZXR1cm4gbV9lbnRhbmdsZWRQcm94eSB8fCAhbV9pbmNvbWluZ1F1ZXVlLT5pc0VtcHR5KCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL2Rl
ZmF1bHQvTWVzc2FnZVBvcnRQcm94eS5oIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9NZXNzYWdlUG9y
dFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmNzczOQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZG9tL2RlZmF1bHQvTWVzc2FnZVBvcnRQcm94eS5oCkBA
IC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBNZXNzYWdlUG9ydFByb3h5X2gKKyNkZWZpbmUgTWVzc2Fn
ZVBvcnRQcm94eV9oCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydFByb3h5V3JhcHBlci5oIgorCisj
aW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAg
ICBjbGFzcyBNZXNzYWdlUG9ydDsKKworICAgIC8vIE1lc3NhZ2VQb3J0UHJveHkgaXMgYSBwbGF0
Zm9ybS1kZXBlbmRlbnQgaW50ZXJmYWNlIHRvIHRoZSByZW1vdGUgc2lkZSBvZiBhIG1lc3NhZ2Ug
Y2hhbm5lbC4KKyAgICAvLyBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgbXVs
dGlwbGUgdGhyZWFkcyBydW5uaW5nIHdpdGhpbiBhIHNpbmdsZSBwcm9jZXNzLiBJbXBsZW1lbnRh
dGlvbnMgZm9yIG11bHRpLXByb2Nlc3MgcGxhdGZvcm1zIHNob3VsZCBkZWZpbmUgdGhlc2UgcHVi
bGljIEFQSXMgaW4gdGhlaXIgb3duIHBsYXRmb3JtLXNwZWNpZmljIE1lc3NhZ2VQb3J0UHJveHkg
ZmlsZS4KKyAgICAvLyBUaGUgZ29hbCBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHRvIGVsaW1p
bmF0ZSBjb250ZW50aW9uIGV4Y2VwdCB3aGVuIGNsb25pbmcgb3IgY2xvc2luZyB0aGUgcG9ydCwg
c28gZWFjaCBzaWRlIG9mIHRoZSBjaGFubmVsIGhhcyBpdHMgb3duIHNlcGFyYXRlIG11dGV4Lgor
ICAgIGNsYXNzIE1lc3NhZ2VQb3J0UHJveHkgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxNZXNz
YWdlUG9ydFByb3h5PiB7CisgICAgcHVibGljOgorICAgICAgICAvLyBDcmVhdGVzIGEgY2hhbm5l
bCBlbnRhbmdsaW5nIHR3byBwb3J0cy4KKyAgICAgICAgc3RhdGljIHZvaWQgY3JlYXRlQ2hhbm5l
bChQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4pOworCisg
ICAgICAgIC8vIEVudGFuZ2xlcyB0aGUgcHJveHkgd2l0aCBhIHBvcnQgKGNhbGxlZCB3aGVuIGEg
cG9ydCBoYXMgYmVlbiBjbG9uZWQsIGFmdGVyIHRoZSBjbG9uZSBoYXMgYmVlbiBtYXJzaGFsbGVk
IHRvIGl0cyBuZXcgb3duaW5nIHRocmVhZCBhbmQgaXMgcmVhZHkgdG8gcmVjZWl2ZSBtZXNzYWdl
cykuCisgICAgICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGVudGFuZ2xlbWVudCBmYWlsZWQg
YmVjYXVzZSB0aGUgcG9ydCB3YXMgY2xvc2VkLgorICAgICAgICBib29sIGVudGFuZ2xlSWZPcGVu
KE1lc3NhZ2VQb3J0Kik7CisKKyAgICAgICAgLy8gRGlzZW50YW5nbGVzIHRoZSBwcm94eSBmcm9t
IGEgZ2l2ZW4gcG9ydCBzbyBpdCBubyBsb25nZXIgZm9yd2FyZHMgbWVzc2FnZXMgdG8gdGhlIHBv
cnQuIENhbGxlZCB3aGVuIHRoZSBwb3J0IGlzIGJlaW5nIGNsb25lZCBhbmQgbm8gbmV3IG93bmlu
ZyB0aHJlYWQgaGFzIHlldCBiZWVuIGVzdGFibGlzaGVkLgorICAgICAgICB2b2lkIGRpc2VudGFu
Z2xlKCk7CisKKyAgICAgICAgLy8gU2VuZHMgYSBtZXNzYWdlIGFuZCBvcHRpb25hbCBjbG9uZWQg
cG9ydCB0byB0aGUgcmVtb3RlIHBvcnQuCisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VUb1JlbW90
ZShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHlXcmFwcGVyOjpFdmVudERhdGE+KTsKKworICAg
ICAgICAvLyBFeHRyYWN0cyBhIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBxdWV1ZSBmb3IgdGhp
cyBwb3J0LgorICAgICAgICBib29sIHRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKFJlZlB0cjxNZXNz
YWdlUG9ydFByb3h5V3JhcHBlcjo6RXZlbnREYXRhPiYpOworCisgICAgICAgIC8vIENsb3NlcyB0
aGUgcG9ydCAoZW5zdXJlcyB0aGF0IG5vIGZ1cnRoZXIgbWVzc2FnZXMgY2FuIGJlIGFkZGVkIHRv
IGVpdGhlciBxdWV1ZSkuCisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAvLyBVc2Vk
IGJ5IE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCkgdG8gcHJldmVudCBjYWxsZXJzIGZyb20gcGFz
c2luZyBhIHBvcnQncyBvd24gZW50YW5nbGVkIHBvcnQuCisgICAgICAgIGJvb2wgaXNQcm94eUZv
cihNZXNzYWdlUG9ydCopOworCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJveHkg
Y3VycmVudGx5IGNvbnRhaW5zIG1lc3NhZ2VzIGZvciB0aGlzIHBvcnQsIG9yIG1heSByZWNlaXZl
IG1lc3NhZ2VzIGluIHRoZSBmdXR1cmUgKGlzIG9wZW4pLgorICAgICAgICBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSgpOworCisgICAgICAgIC8vIFdyYXBwZXIgZm9yIE1lc3NhZ2VRdWV1ZSB0aGF0
IGFsbG93cyB1cyB0byBkbyB0aHJlYWQgc2FmZSBzaGFyaW5nIGJ5IHR3byBwcm94aWVzLgorICAg
ICAgICBjbGFzcyBNZXNzYWdlUG9ydFF1ZXVlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8TWVz
c2FnZVBvcnRRdWV1ZT4geworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNZXNzYWdlUG9ydFF1ZXVlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
TWVzc2FnZVBvcnRRdWV1ZSgpKTsgfQorCisgICAgICAgICAgICBpbmxpbmUgYm9vbCB0cnlHZXRN
ZXNzYWdlKFJlZlB0cjxNZXNzYWdlUG9ydFByb3h5V3JhcHBlcjo6RXZlbnREYXRhPiYgcmVzdWx0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3F1ZXVlLnRyeUdldE1l
c3NhZ2UocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5saW5lIGJvb2wg
YXBwZW5kQW5kQ2hlY2tFbXB0eShjb25zdCBSZWZQdHI8TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6
OkV2ZW50RGF0YT4mIG1lc3NhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fcXVldWUuYXBwZW5kQW5kQ2hlY2tFbXB0eShtZXNzYWdlKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaW5saW5lIGJvb2wgaXNFbXB0eSgpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fcXVldWUuaXNFbXB0eSgpOworICAgICAgICAgICAgfQorICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgTWVzc2FnZVBvcnRRdWV1ZSgpIHsgfQorICAgICAg
ICAgICAgLy8gRklYTUU6IFVzZSBhIGxvY2stZnJlZSBxdWV1ZSBpbXBsZW1lbnRhdGlvbiB0byBj
b21wbGV0ZWx5IGVsaW1pbmF0ZSBjb250ZW50aW9uIHdoZW4gc2VuZGluZy9yZWNlaXZpbmcgbWVz
c2FnZXMuCisgICAgICAgICAgICBNZXNzYWdlUXVldWU8UmVmUHRyPE1lc3NhZ2VQb3J0UHJveHlX
cmFwcGVyOjpFdmVudERhdGE+ID4gbV9xdWV1ZTsKKyAgICAgICAgfTsKKworICAgICAgICB+TWVz
c2FnZVBvcnRQcm94eSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWVzc2FnZVBvcnRQcm94
eShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IGluY29taW5nLCBQYXNzUmVmUHRyPE1lc3Nh
Z2VQb3J0UXVldWU+IG91dGdvaW5nKTsKKworICAgICAgICB2b2lkIGFkZE1lc3NhZ2VUb1F1ZXVl
KFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6OkV2ZW50RGF0YT4pOworCisgICAg
ICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRQcm94eT4gZW50YW5nbGVkUHJveHkoKTsKKyAgICAg
ICAgdm9pZCBzZXRFbnRhbmdsZWRQcm94eShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+KTsK
KworICAgICAgICB2b2lkIHNldFJlbW90ZVBvcnQoTWVzc2FnZVBvcnQqKTsKKyAgICAgICAgTWVz
c2FnZVBvcnQqIHJlbW90ZVBvcnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZUludGVybmFsKCk7CisK
KyAgICAgICAgLy8gTXV0ZXggdXNlZCB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUg
b2JqZWN0IGludGVybmFscy4KKyAgICAgICAgTXV0ZXggbV9tdXRleDsKKworICAgICAgICAvLyBQ
b2ludGVyIHRvIG91ciBlbnRhbmdsZWQgcGFpciAtIGNsZWFyZWQgd2hlbiBjbG9zZSgpIGlzIGNh
bGxlZC4KKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0UHJveHk+IG1fZW50YW5nbGVkUHJveHk7
CisKKyAgICAgICAgLy8gUmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHF1ZXVlIGZvciB0aGUgKGxv
Y2FsKSBlbnRhbmdsZWQgcG9ydC4KKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IG1f
aW5jb21pbmdRdWV1ZTsKKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IG1fb3V0Z29p
bmdRdWV1ZTsKKworICAgICAgICAvLyBUaGUgcG9ydCB3ZSBhcmUgcHJveHlpbmcgZm9yICh0aGUg
cmVtb3RlIHBvcnQpIC0gdGhpcyBpcyB0aGUgcG9ydCB0aGF0IGlzIG5vdGlmaWVkIHdoZW4gbmV3
IG1lc3NhZ2VzIGFycml2ZS4KKyAgICAgICAgTWVzc2FnZVBvcnQqIG1fcmVtb3RlUG9ydDsKKyAg
ICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNZXNzYWdlUG9ydFBy
b3h5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggYmMxMTkyZC4uZjMxYzgyNSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAK
QEAgLTg3LDE0ICs4NywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBvc3RNZXNz
YWdlVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBQb3N0TWVzc2FnZVRp
bWVyKERPTVdpbmRvdyogd2luZG93LCBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZlbnQsIFNl
Y3VyaXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4pCisgICAgUG9zdE1lc3NhZ2VUaW1lcihET01XaW5k
b3cqIHdpbmRvdywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZU9y
aWdpbiwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFzc093blB0cjxNZXNzYWdlUG9y
dFByb3h5V3JhcHBlcj4gcG9ydFByb3h5LCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3JpZ2luKQog
ICAgICAgICA6IG1fd2luZG93KHdpbmRvdykKLSAgICAgICAgLCBtX2V2ZW50KGV2ZW50KQorICAg
ICAgICAsIG1fbWVzc2FnZShtZXNzYWdlKQorICAgICAgICAsIG1fb3JpZ2luKHNvdXJjZU9yaWdp
bikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV9wcm94eShwb3J0UHJv
eHkpCiAgICAgICAgICwgbV90YXJnZXRPcmlnaW4odGFyZ2V0T3JpZ2luKQogICAgIHsKICAgICB9
CiAKLSAgICBNZXNzYWdlRXZlbnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5nZXQo
KTsgfQorICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBkb2N1bWVudCkKKyAgICB7CisgICAgICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+
IG1lc3NhZ2VQb3J0OworICAgICAgICBpZiAobV9wcm94eSkgeworICAgICAgICAgICAgbWVzc2Fn
ZVBvcnQgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKCpkb2N1bWVudCk7CisgICAgICAgICAgICBtZXNz
YWdlUG9ydC0+ZW50YW5nbGUobV9wcm94eS5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtX21lc3NhZ2UsIG1fb3JpZ2luLCAiIiwgbV9z
b3VyY2UsIG1lc3NhZ2VQb3J0KTsKKyAgICB9CiAgICAgU2VjdXJpdHlPcmlnaW4qIHRhcmdldE9y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0T3JpZ2luLmdldCgpOyB9CiAKIHByaXZhdGU6
CkBAIC0xMDQsNyArMTE1LDEwIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgUmVmUHRyPERPTVdp
bmRvdz4gbV93aW5kb3c7Ci0gICAgUmVmUHRyPE1lc3NhZ2VFdmVudD4gbV9ldmVudDsKKyAgICBT
dHJpbmcgbV9tZXNzYWdlOworICAgIFN0cmluZyBtX29yaWdpbjsKKyAgICBSZWZQdHI8RE9NV2lu
ZG93PiBtX3NvdXJjZTsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI+IG1fcHJv
eHk7CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3RhcmdldE9yaWdpbjsKIH07CiAKQEAg
LTU5MSw5ICs2MDUsOSBAQCB2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQsIGNvbgogICAgICAgICB9CiAgICAg
fQogCi0gICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBuZXdNZXNzYWdlUG9ydDsKKyAgICBPd25QdHI8
TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI+IHByb3h5OwogICAgIGlmIChtZXNzYWdlUG9ydCkKLSAg
ICAgICAgbmV3TWVzc2FnZVBvcnQgPSBtZXNzYWdlUG9ydC0+Y2xvbmUoZWMpOworICAgICAgICBw
cm94eSA9IG1lc3NhZ2VQb3J0LT5kaXNlbnRhbmdsZShlYyk7CiAgICAgaWYgKGVjKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTYwNSw3ICs2MTksNyBAQCB2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQsIGNvbgog
ICAgIFN0cmluZyBzb3VyY2VPcmlnaW4gPSBzb3VyY2VEb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4o
KS0+dG9TdHJpbmcoKTsKIAogICAgIC8vIFNjaGVkdWxlIHRoZSBtZXNzYWdlLgotICAgIFBvc3RN
ZXNzYWdlVGltZXIqIHRpbWVyID0gbmV3IFBvc3RNZXNzYWdlVGltZXIodGhpcywgTWVzc2FnZUV2
ZW50OjpjcmVhdGUobWVzc2FnZSwgc291cmNlT3JpZ2luLCAiIiwgc291cmNlLCBuZXdNZXNzYWdl
UG9ydCksIHRhcmdldC5nZXQoKSk7CisgICAgUG9zdE1lc3NhZ2VUaW1lciogdGltZXIgPSBuZXcg
UG9zdE1lc3NhZ2VUaW1lcih0aGlzLCBtZXNzYWdlLCBzb3VyY2VPcmlnaW4sIHNvdXJjZSwgcHJv
eHkucmVsZWFzZSgpLCB0YXJnZXQuZ2V0KCkpOwogICAgIHRpbWVyLT5zdGFydE9uZVNob3QoMCk7
CiB9CiAKQEAgLTYyNiwxMyArNjQwLDggQEAgdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlVGlt
ZXJGaXJlZChQb3N0TWVzc2FnZVRpbWVyKiB0KQogICAgICAgICB9CiAgICAgfQogCi0gICAgTWVz
c2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gdGltZXItPmV2ZW50KCktPm1lc3NhZ2VQb3J0KCk7Ci0g
ICAgQVNTRVJUKCFtZXNzYWdlUG9ydCB8fCAhbWVzc2FnZVBvcnQtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7Ci0gICAgaWYgKG1lc3NhZ2VQb3J0KQotICAgICAgICBtZXNzYWdlUG9ydC0+YXR0
YWNoVG9Db250ZXh0KGRvY3VtZW50KCkpOwotCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgZGlzcGF0Y2hFdmVudCh0aW1lci0+ZXZlbnQoKSwgZWMpOworICAgIGRpc3BhdGNoRXZlbnQo
dGltZXItPmV2ZW50KGRvY3VtZW50KCkpLCBlYyk7CiB9CiAKIERPTVNlbGVjdGlvbiogRE9NV2lu
ZG93OjpnZXRTZWxlY3Rpb24oKQo=
</data>
<flag name="review"
          id="15855"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31400</attachid>
            <date>2009-06-16 22:32:39 -0700</date>
            <delta_ts>2009-06-17 10:46:58 -0700</delta_ts>
            <desc>Proposed patch addressing Levin&apos;s comments</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>84765</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBjYmM0N2FkLi5iZTVjNTBiIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMDktMDYtMTYgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MDQzPgorICAgICAgICBBZGRlZCBzdXBwb3J0
IGZvciBtdWx0aS10aHJlYWRlZCBNZXNzYWdlUG9ydHMuCisKKyAgICAgICAqIHd0Zi9NZXNzYWdl
UXVldWUuaDoKKyAgICAgICAgKFdURjo6OjphcHBlbmRBbmRDaGVja0VtcHR5KToKKyAgICAgICAg
ICAgIEFkZGVkIEFQSSB0byB0ZXN0IHdoZXRoZXIgdGhlIHF1ZXVlIHdhcyBlbXB0eSBiZWZvcmUg
YWRkaW5nIGFuIGVsZW1lbnQuCisgIAogMjAwOS0wNi0xMiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L01lc3NhZ2VRdWV1ZS5oCmluZGV4IDk1NDlmMzcuLjc3MjFkYmEgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvTWVz
c2FnZVF1ZXVlLmgKQEAgLTQ3LDkgKzQ3LDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIERhdGFUeXBlPgogICAgIGNsYXNzIE1lc3NhZ2VRdWV1ZSA6IE5vbmNvcHlh
YmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1lc3NhZ2VRdWV1ZSgpIDogbV9raWxsZWQoZmFs
c2UpIHt9CisgICAgICAgIE1lc3NhZ2VRdWV1ZSgpIDogbV9raWxsZWQoZmFsc2UpIHsgfQogICAg
ICAgICAKICAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgRGF0YVR5cGUmKTsKKyAgICAgICAgYm9v
bCBhcHBlbmRBbmRDaGVja0VtcHR5KGNvbnN0IERhdGFUeXBlJik7CiAgICAgICAgIHZvaWQgcHJl
cGVuZChjb25zdCBEYXRhVHlwZSYpOwogICAgICAgICBib29sIHdhaXRGb3JNZXNzYWdlKERhdGFU
eXBlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KQEAgLTgxLDYgKzgy
LDE3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKICAg
ICB9CiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXVlIHdhcyBlbXB0eSBiZWZvcmUg
dGhlIGl0ZW0gd2FzIGFkZGVkLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgorICAg
IGlubGluZSBib29sIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OmFwcGVuZEFuZENoZWNrRW1wdHko
Y29uc3QgRGF0YVR5cGUmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
KG1fbXV0ZXgpOworICAgICAgICBib29sIHdhc0VtcHR5ID0gbV9xdWV1ZS5pc0VtcHR5KCk7Cisg
ICAgICAgIG1fcXVldWUuYXBwZW5kKG1lc3NhZ2UpOworICAgICAgICBtX2NvbmRpdGlvbi5zaWdu
YWwoKTsKKyAgICAgICAgcmV0dXJuIHdhc0VtcHR5OworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIERhdGFUeXBlPgogICAgIGlubGluZSB2b2lkIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46
OnByZXBlbmQoY29uc3QgRGF0YVR5cGUmIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQyYWU4NmIu
LjViMzljMmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wNi0xNiAgRHJldyBXaWxzb24g
IDxhdHdpbHNvbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjUwNDM+CisgICAgICAgIFVwZGF0ZWQgTWVzc2FnZUNoYW5uZWwvTWVzc2FnZVBvcnRzIHRlc3Rz
IHRvIHJlZmxlY3QgbGF0ZXN0IHNwZWMgKGNsb3NlIGV2ZW50IGhhcyBiZWVuIHJlbW92ZWQpLgor
ICAgICAgICBBZGRlZCBtb3JlIHRlc3RzIG9mIHBvcnQgY2xvbmluZy4KKworICAgICAgICAqIGZh
c3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMi5odG1sLWRpc2FibGVkOgorICAgICAgICAq
IGZhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMy5odG1sLWRpc2FibGVkOgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwtZGlzYWJsZWQ6CisgICAgICAg
ICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWNsb25lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWNsb25lLmh0bWwtZGlzYWJsZWQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW5vLXdyYXBwZXItZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtb25jbG9zZS1leHBl
Y3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW9u
Y2xvc2UuaHRtbC1kaXNhYmxlZDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tZXNz
YWdlLXBvcnQuaHRtbC1kaXNhYmxlZDoKKwogMjAwOS0wNi0xMiAgSmFuIE1pY2hhZWwgQWxvbnpv
ICA8am1hbG9uem9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5v
cm9uaGEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5u
ZWwtZ2MtMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNo
YW5uZWwtZ2MtMi1leHBlY3RlZC50eHQKaW5kZXggYzVhZmE2MC4uNjViODA4NyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTItZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLWV4
cGVjdGVkLnR4dApAQCAtMSw1ICsxLDQgQEAKIFRlc3QgdGhhdCBNZXNzYWdlUG9ydCBjbG9zZSBl
dmVudCBnZXRzIGRlbGl2ZXJlZCAod2l0aG91dCBjcmFzaGluZykgZXZlbiBpZiB0aGUgY2hhbm5l
bCBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAKLW9uY2xvc2UKLWNsb3NlIGxpc3RlbmVy
CitET05FCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hh
bm5lbC1nYy0yLmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdl
LWNoYW5uZWwtZ2MtMi5odG1sLWRpc2FibGVkCmluZGV4IGUwYjczNDcuLjYxZTVmMDEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLmh0bWwt
ZGlzYWJsZWQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdj
LTIuaHRtbC1kaXNhYmxlZApAQCAtNiw3ICs2LDYgQEAgZnVuY3Rpb24gZ2MoKQogewogICAgIGlm
ICh3aW5kb3cuR0NDb250cm9sbGVyKQogICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxl
Y3QoKTsKLQogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeyAvLyA+IGZvcmNl
IGdhcmJhZ2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlvbnMgYmVm
b3JlIGEgY29sbGVjdCkKICAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCJhYmMiKTsKICAgICB9
CkBAIC0yNCw5ICsyMyw2IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKIAog
dmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CiAKLWNoYW5uZWwucG9ydDEub25jbG9z
ZSA9IGZ1bmN0aW9uKCkgeyBsb2coIm9uY2xvc2UiKTsgc2V0VGltZW91dChmdW5jdGlvbigpIHsg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOyBnYygpOyB9LCAwKSB9Ci1jaGFubmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIo
ImNsb3NlIiwgZnVuY3Rpb24oKSB7IGxvZygiY2xvc2UgbGlzdGVuZXIiKTsgZ2MoKTsgfSwgZmFs
c2UpOwotCiBnYygpOwogY2hhbm5lbC5wb3J0MS5zdGFydCgpOwogY2hhbm5lbC5wb3J0Mi5wb3N0
TWVzc2FnZSgibXNnIik7CkBAIC0zNSw3ICszMSwxNSBAQCBnYygpOwogY2hhbm5lbC5wb3J0MS5j
bG9zZSgpOwogY2hhbm5lbC5wb3J0Mi5jbG9zZSgpOwogZ2MoKTsKKworc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICBsb2coIkRPTkUiKTsKKyAgICBnYygpOworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30sIDApOwogY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKIGdjKCk7CisKIDwv
c2NyaXB0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1jaGFubmVsLWdjLTMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bWVzc2FnZS1jaGFubmVsLWdjLTMtZXhwZWN0ZWQudHh0CmluZGV4IGFhOWJiNWQuLjhhZjg5MjYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0z
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5u
ZWwtZ2MtMy1leHBlY3RlZC50eHQKQEAgLTMsNSArMyw1IEBAIFRlc3QgdGhhdCBNZXNzYWdlUG9y
dCBtZXNzYWdlcyBhcmUgZGVsaXZlcmVkIGV2ZW4gaWYgYm90aCBwb3J0cyBhcmUgaW5hY2Nlc3Np
YmxlCiBTaG91bGQgc2F5IFBBU1MgdHdpY2UuCiAKIFBBU1M6IG1lc3NhZ2UgZGVsaXZlcmVkLiBQ
b3J0OiBbb2JqZWN0IE1lc3NhZ2VQb3J0XQotUEFTUzogY2xvc2UgbWVzc2FnZSBkZWxpdmVyZWQu
IFBvcnQ6IFtvYmplY3QgTWVzc2FnZVBvcnRdCitQQVNTOiBwb3J0IGNsb3NlZC4KIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTMuaHRtbC1k
aXNhYmxlZCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLmh0
bWwtZGlzYWJsZWQKaW5kZXggZjE1ODY3Zi4uYjkwNmFhNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTMuaHRtbC1kaXNhYmxlZAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMy5odG1sLWRpc2FibGVk
CkBAIC0yOCw3ICsyOCw2IEBAIGZ1bmN0aW9uIHRlc3QxKCkKICAgICB2YXIgY2hhbm5lbCA9IG5l
dyBNZXNzYWdlQ2hhbm5lbDsKICAgICAKICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1
bmN0aW9uKGV2dCkgeyBsb2coIlBBU1M6IG1lc3NhZ2UgZGVsaXZlcmVkLiBQb3J0OiAiICsgZXZ0
LnRhcmdldCk7IHRlc3QyKCk7IH0KLSAgICBjaGFubmVsLnBvcnQxLnN0YXJ0KCk7CiAgICAgY2hh
bm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgibXNnIik7CiAgICAgCiAgICAgY2hhbm5lbCA9IDA7CkBA
IC0zOSwxMSArMzgsMTMgQEAgZnVuY3Rpb24gdGVzdDIoKQogewogICAgIHZhciBjaGFubmVsID0g
bmV3IE1lc3NhZ2VDaGFubmVsOwogICAgIAotICAgIGNoYW5uZWwucG9ydDEub25jbG9zZSA9IGZ1
bmN0aW9uKGV2dCkgeyBsb2coIlBBU1M6IGNsb3NlIG1lc3NhZ2UgZGVsaXZlcmVkLiBQb3J0OiAi
ICsgZXZ0LnRhcmdldCk7IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsgfQogICAgIGNoYW5uZWwucG9ydDIuY2xvc2UoKTsK
ICAgICAKICAgICBjaGFubmVsID0gMDsKICAgICBnYygpOworICAgIGxvZygiUEFTUzogcG9ydCBj
bG9zZWQuIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogfQogCiB0ZXN0MSgpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy1leHBlY3Rl
ZC50eHQKaW5kZXggNTRjNzVlMC4uOTQ4ZjNjZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtZXhwZWN0ZWQudHh0CkBAIC0zLDYgKzMs
NSBAQCBUZXN0IHNvbWUgY2FzZXMgb2YgTWVzc2FnZVBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uLgog
U2hvdWxkIGJlICdiYXInOiBiYXIKIG9ubWVzc2FnZQogbWVzc2FnZSBsaXN0ZW5lcgotb25jbG9z
ZQotY2xvc2UgbGlzdGVuZXIKK0RPTkUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MuaHRtbC1kaXNhYmxlZAppbmRleCA1ZTQ5ZTlkLi5j
YWExMDhlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5u
ZWwtZ2MuaHRtbC1kaXNhYmxlZAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdl
LWNoYW5uZWwtZ2MuaHRtbC1kaXNhYmxlZApAQCAtMjksOCArMjksNiBAQCBnYygpOwogbG9nKCJT
aG91bGQgYmUgJ2Jhcic6ICIgKyBjaGFubmVsLnBvcnQxLmZvbyk7CiAKIGNoYW5uZWwucG9ydDEu
b25tZXNzYWdlID0gZnVuY3Rpb24oKSB7IGxvZygib25tZXNzYWdlIik7IH0KLWNoYW5uZWwucG9y
dDEub25jbG9zZSA9IGZ1bmN0aW9uKCkgeyBsb2coIm9uY2xvc2UiKTsgc2V0VGltZW91dChmdW5j
dGlvbigpIHsgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpIH0sIDApIH0KLWNoYW5uZWwucG9ydDEuYWRkRXZlbnRMaXN0ZW5l
cigiY2xvc2UiLCBmdW5jdGlvbigpIHsgbG9nKCJjbG9zZSBsaXN0ZW5lciIpOyB9LCBmYWxzZSk7
CiBjaGFubmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbigpIHsg
bG9nKCJtZXNzYWdlIGxpc3RlbmVyIik7IH0sIGZhbHNlKTsKIAogZ2MoKTsKQEAgLTQyLDUgKzQw
LDEyIEBAIGNoYW5uZWwucG9ydDEuY2xvc2UoKTsKIGNoYW5uZWwucG9ydDIuY2xvc2UoKTsKIAog
Z2MoKTsKKworc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICBsb2coIkRPTkUiKTsKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCkKK30sIDApOworCiA8L3NjcmlwdD4KIDwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1jbG9uZS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtY2xvbmUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzI3OGEKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtY2xvbmUtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3RzIHZhcmlvdXMgdXNlIGNhc2VzIHdoZW4g
Y2xvbmluZyBNZXNzYWdlUG9ydHMuCisKK1Nob3VsZCBiZSBhIHNlcmllcyBvZiBTVUNDRVNTIG1l
c3NhZ2VzLCBmb2xsb3dlZCB3aXRoIERPTkUuCisKK1NVQ0NFU1M6IFBvc3RpbmcgcG9ydCB0byBp
dHNlbGY6IEVycm9yOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMQorU1VDQ0VT
UzogUG9zdGluZyBlbnRhbmdsZWQgcG9ydDogRXJyb3I6IElOVkFMSURfU1RBVEVfRVJSOiBET00g
RXhjZXB0aW9uIDExCitTVUNDRVNTOiBQb3N0aW5nIGNsb25lZCBwb3J0LgorU1VDQ0VTUzogUG9z
dGVkIG1lc3NhZ2VzIHRvIGNsb25lZCBwb3J0LgorU1VDQ0VTUzogQ2xvbmVkIGJvdGggZW5kcG9p
bnRzIG9mIGEgY2hhbm5lbC4KK1NVQ0NFU1M6IEdvdCBjbG9zZWQgcG9ydCB3aXRoIGV2ZW50IG1l
c3NhZ2UgY2xvc2VkCitET05FCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L21lc3NhZ2UtcG9ydC1jbG9uZS5odG1sLWRpc2FibGVkIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvbWVzc2FnZS1wb3J0LWNsb25lLmh0bWwtZGlzYWJsZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOTVjZTI5NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1jbG9uZS5odG1sLWRpc2FibGVkCkBAIC0wLDAgKzEsMTI4
IEBACis8Ym9keT4KKzxwPlRlc3RzIHZhcmlvdXMgdXNlIGNhc2VzIHdoZW4gY2xvbmluZyBNZXNz
YWdlUG9ydHMuPC9wPgorPHA+U2hvdWxkIGJlIGEgc2VyaWVzIG9mIFNVQ0NFU1MgbWVzc2FnZXMs
IGZvbGxvd2VkIHdpdGggRE9ORS48L3A+Cis8cHJlIGlkPWxvZz48L3ByZT4KKzxzY3JpcHQ+CisK
K2Z1bmN0aW9uIGdjKCkKK3sKKyAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICAgICAg
cmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyBpKyspIHsgLy8gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIChGRiByZXF1aXJlcyBh
Ym91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBjb2xsZWN0KS4KKyAgICAgICAgdmFyIHMgPSBu
ZXcgU3RyaW5nKCJhYmMiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQorewor
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lckhUTUwgKz0gbWVzc2FnZSAr
ICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVs
OworY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBjaGFubmVsLnBvcnQyLm9ubWVzc2FnZSA9IGZ1
bmN0aW9uKGV2dCkgeworICAgIGZhaWwoIkZBSUw6IFNob3VsZCBub3QgaGF2ZSByZWNlaXZlZCBt
ZXNzYWdlOiAiICsgZXZ0LmRhdGEpOworfQordHJ5IHsKKyAgICBjaGFubmVsLnBvcnQxLnBvc3RN
ZXNzYWdlKCJtc2ciLCBjaGFubmVsLnBvcnQxKTsKKyAgICBsb2coIkZBSUw6IFBvc3RpbmcgcG9y
dCB0byBpdHNlbGYgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKK30gY2F0Y2ggKGV4KSB7
CisgICAgbG9nKCJTVUNDRVNTOiBQb3N0aW5nIHBvcnQgdG8gaXRzZWxmOiAiICsgZXgpOworfQor
Cit0cnkgeworICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwucG9y
dDIpOworICAgIGxvZygiRkFJTDogUG9zdGluZyBwb3J0IHRvIGVudGFuZ2xlZCBwYWlyIHNob3Vs
ZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Cit9IGNhdGNoIChleCkgeworICAgIGxvZygiU1VDQ0VT
UzogUG9zdGluZyBlbnRhbmdsZWQgcG9ydDogIiArIGV4KTsKK30KKworY2hhbm5lbCA9IG5ldyBN
ZXNzYWdlQ2hhbm5lbDsKK3ZhciBjaGFubmVsMiA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKK2NoYW5u
ZWwucG9ydDEucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwyLnBvcnQxKTsKKworLy8gU2hvdWxk
IG5vdCBiZSBhYmxlIHRvIHBvc3QgYSBjbG9uZWQgcG9ydC4KK3RyeSB7CisgICAgY2hhbm5lbC5w
b3J0MS5wb3N0TWVzc2FnZSgibXNnIiwgY2hhbm5lbDIucG9ydDEpOworICAgIGxvZygiRkFJTDog
UG9zdGluZyBjbG9uZWQgcG9ydCBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiIpOworfSBjYXRj
aCAoZXgpIHsKKyAgICBsb2coIlNVQ0NFU1M6IFBvc3RpbmcgY2xvbmVkIHBvcnQuIik7Cit9CisK
Ky8vIFRlc3QgcG9zdGluZyBtZXNzYWdlcyB0byBhIHBvcnQgaW4gY2xvbmVkIHN0YXRlLgorCit2
YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKK3ZhciBjaGFubmVsMiA9IG5ldyBNZXNz
YWdlQ2hhbm5lbDsKKworLy8gUG9zdCBtZXNzYWdlcyBiZWZvcmUgYW5kIGFmdGVyIGNsb25lIHRv
IG1ha2Ugc3VyZSBvcmRlcmluZyBpcyBwcmVzZXJ2ZWQgYW5kIGFsbCBtZXNzYWdlcyBhcmUgcmVj
ZWl2ZWQuCitjaGFubmVsMi5wb3J0Mi5wb3N0TWVzc2FnZSgiMSIpOyAKK2NoYW5uZWwucG9ydDEu
cG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwyLnBvcnQxKTsKK2NoYW5uZWwyLnBvcnQyLnBvc3RN
ZXNzYWdlKCIyIik7CitjaGFubmVsMi5wb3J0Mi5wb3N0TWVzc2FnZSgiMyIpOworY2hhbm5lbC5w
b3J0Mi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICB2YXIgbWVzc2FnZUluZGV4ID0g
MTsKKyAgICBldnQubWVzc2FnZVBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAg
ICAgIGlmIChldnQuZGF0YSAhPSBtZXNzYWdlSW5kZXgpCisgICAgICAgICAgICBsb2coIkZBSUw6
IEdvdCBtZXNzYWdlICIgKyBldnQuZGF0YSArICIsIGV4cGVjdGVkICIgKyBtZXNzYWdlSW5kZXgp
OworICAgICAgICBtZXNzYWdlSW5kZXgrKzsKKyAgICAgICAgaWYgKG1lc3NhZ2VJbmRleCA9PSA0
KSB7CisgICAgICAgICAgICBsb2coIlNVQ0NFU1M6IFBvc3RlZCBtZXNzYWdlcyB0byBjbG9uZWQg
cG9ydC4iKTsKKyAgICAgICAgICAgIHRlc3REb3VibHlDbG9uZWRQb3J0KCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3REb3VibHlDbG9uZWRQb3J0KCkKK3sKKyAgICB2YXIg
Y2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICB2YXIgY2hhbm5lbDIgPSBuZXcgTWVz
c2FnZUNoYW5uZWw7CisgICAgY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSgibXNnIiwgY2hhbm5l
bDIucG9ydDEpOworICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwy
LnBvcnQyKTsKKyAgICBnYygpOworICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rp
b24oZXZ0KSB7CisgICAgICAgIGV2dC5tZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgidGVzdG1lIik7
CisgICAgfQorICAgIGNoYW5uZWwucG9ydDIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7Cisg
ICAgICAgIGV2dC5tZXNzYWdlUG9ydC5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAg
ICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gInRlc3RtZSIpCisgICAgICAgICAgICAgICAgbG9nKCJT
VUNDRVNTOiBDbG9uZWQgYm90aCBlbmRwb2ludHMgb2YgYSBjaGFubmVsLiIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxvZygiRkFJTDogSW52YWxpZCBtZXNzYWdlIGFycml2
ZWQ6ICIgKyBldnQuZGF0YSk7CisgICAgICAgICAgICB0ZXN0UG9zdENsb3NlUG9ydCgpOworICAg
ICAgICB9CisgICAgfQorICAgCit9CisKKy8vICpTaG91bGQqIGJlIGFibGUgdG8gcG9zdCBhIGNs
b3NlZCBwb3J0LgorZnVuY3Rpb24gdGVzdFBvc3RDbG9zZVBvcnQoKQoreworICAgIHZhciBjaGFu
bmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsOworICAgIHZhciBjaGFubmVsMiA9IG5ldyBNZXNzYWdl
Q2hhbm5lbDsKKyAgICBjaGFubmVsMi5wb3J0Mi5jbG9zZSgpOworICAgIGNoYW5uZWwucG9ydDEu
cG9zdE1lc3NhZ2UoImNsb3NlZCIsIGNoYW5uZWwyLnBvcnQyKTsKKyAgICBjaGFubmVsLnBvcnQy
Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBpZiAoIWV2dC5tZXNzYWdlUG9y
dCkKKyAgICAgICAgICAgIGxvZygiRkFJTDogQ2xvc2VkIHBvcnQgbm90IHNlbnQuIik7CisgICAg
ICAgIGVsc2UgaWYgKGV2dC5kYXRhICE9ICJjbG9zZWQiKQorICAgICAgICAgICAgbG9nKCJGQUlM
OiBVbmV4cGVjdGVkIG1lc3NhZ2U6ICIgKyBldnQuZGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGxvZygiU1VDQ0VTUzogR290IGNsb3NlZCBwb3J0IHdpdGggZXZlbnQgbWVzc2FnZSAi
ICsgZXZ0LmRhdGEpOworICAgICAgICBkb25lKCk7CisgICAgfQorfQorCitmdW5jdGlvbiBkb25l
KCkKK3sKKyAgICBsb2coIkRPTkUiKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKzwv
c2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2Ut
cG9ydC1leHBlY3RlZC50eHQKaW5kZXggNDc5YjMxNC4uYzliZjYzNiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZXhwZWN0ZWQudHh0CkBAIC00LDggKzQs
NyBAQCBTaG91bGQgYmUgYSBzZXJpZXMgb2YgU1VDQ0VTUyBtZXNzYWdlcywgZm9sbG93ZWQgd2l0
aCBET05FLgogCiBTaW1wbGUgZXhjaGFuZ2U6IFNVQ0NFU1MKIFBvc3RlZCBwb3J0OiBTVUNDRVNT
Ci1Db252ZXJzYXRpb246IFNVQ0NFU1MKLUEgcG9ydCBpcyBhY3RpdmU6IFNVQ0NFU1MKLUEgY2xv
c2VkIHBvcnQgaXMgaW5hY3RpdmU6IFNVQ0NFU1MKK0V2ZW50IExpc3RlbmVyOiBTVUNDRVNTCitD
bG9zZWQgcG9ydDogU1VDQ0VTUwogRE9ORQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9tZXNzYWdlLXBvcnQtbm8td3JhcHBlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtbm8td3JhcHBlci1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhYmQ0MAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1uby13cmFwcGVyLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDQgQEAKK1Rlc3QgdGhhdCBkZWxpdmVyaW5nIGEgbWVzc2FnZSB0byBh
IHBvcnQgdGhhdCB3YXMgbmV2ZXIgcmVmZXJlbmNlZCBmcm9tIEpTIGRvZXNuJ3QgY2F1c2UgYSBj
cmFzaC4KKworUEFTUworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNz
YWdlLXBvcnQtb25jbG9zZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
ZXNzYWdlLXBvcnQtb25jbG9zZS1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDczYzVlMGQuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0LW9uY2xvc2UtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCww
IEBACi1UZXN0IHRoYXQgY2xvc2UgZXZlbnQgaGFuZGxlciBpcyBpbnZva2VkIHdoZW4gYSBNZXNz
YWdlUG9ydCBpcyBjbG9zZWQuCi0KLVBBU1MKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbWVzc2FnZS1wb3J0LW9uY2xvc2UuaHRtbC1kaXNhYmxlZCBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1vbmNsb3NlLmh0bWwtZGlzYWJsZWQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZDViZmEuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW9uY2xvc2UuaHRtbC1kaXNhYmxlZAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwMSArMCwwIEBACi08Ym9keT4KLTxwPlRlc3QgdGhhdCBjbG9zZSBldmVudCBo
YW5kbGVyIGlzIGludm9rZWQgd2hlbiBhIE1lc3NhZ2VQb3J0IGlzIGNsb3NlZC48L3A+Ci08cHJl
IGlkPWxvZz48L3ByZT4KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBnYygpCi17Ci0gICAgaWYgKHdpbmRv
dy5HQ0NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOwot
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7IC8vID4gZm9yY2UgZ2FyYmFn
ZSBjb2xsZWN0aW9uIChGRiByZXF1aXJlcyBhYm91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBj
b2xsZWN0KQotICAgICAgICB2YXIgcyA9IG5ldyBTdHJpbmcoImFiYyIpOwotICAgIH0KLX0KLQot
ZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCi17Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxv
ZyIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOwotfQotCi1pZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLX0KLQotZnVuY3Rp
b24gdGVzdCgpCi17Ci0gICAgLy8gU2luZ2xlIGZyYW1lLgotICAgIHZhciBjaGFubmVsID0gbmV3
IE1lc3NhZ2VDaGFubmVsOwotICAgIHZhciBjbG9zZUNvdW50ID0gMDsKLSAgICBmdW5jdGlvbiBv
bmNsb3NlKCkKLSAgICB7Ci0gICAgICAgICsrY2xvc2VDb3VudDsKLSAgICAgICAgaWYgKGNsb3Nl
Q291bnQgPT0gNCkKLSAgICAgICAgICAgIHRlc3QyKCk7Ci0gICAgfQotCi0gICAgY2hhbm5lbC5w
b3J0MS5vbmNsb3NlID0gb25jbG9zZTsKLSAgICBjaGFubmVsLnBvcnQyLm9uY2xvc2UgPSBvbmNs
b3NlOwotICAgIGNoYW5uZWwucG9ydDEuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbmNsb3Nl
LCBmYWxzZSk7Ci0gICAgY2hhbm5lbC5wb3J0Mi5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsIG9u
Y2xvc2UsIGZhbHNlKTsKLSAgICAKLSAgICBnYygpOwotICAgIGNoYW5uZWwucG9ydDEuc3RhcnQo
KTsKLSAgICBjaGFubmVsLnBvcnQyLnN0YXJ0KCk7Ci0gICAgY2hhbm5lbC5wb3J0MS5jbG9zZSgp
OwotfQotCi1mdW5jdGlvbiB0ZXN0MigpCi17Ci0gICAgLy8gQ3Jvc3MtZnJhbWUuCi0gICAgdmFy
IGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7Ci0gICAgd2luZG93LmZyYW1lc1swXS5wb3N0
TWVzc2FnZSgibXNnIiwgY2hhbm5lbC5wb3J0MiwgIioiKTsKLQotICAgIHZhciBtYWluUG9ydCA9
IGNoYW5uZWwucG9ydDE7Ci0gICAgbWFpblBvcnQuc3RhcnQoKTsKLQotICAgIHZhciBjbG9zZUNv
dW50ID0gMDsKLSAgICBmdW5jdGlvbiBvbmNsb3NlKCkKLSAgICB7Ci0gICAgICAgICsrY2xvc2VD
b3VudDsKLSAgICAgICAgaWYgKGNsb3NlQ291bnQgPT0gMikKLSAgICAgICAgICAgIHRlc3QzKCk7
Ci0gICAgfQotCi0gICAgbWFpblBvcnQucG9zdE1lc3NhZ2UoImNsb3NlUG9ydCIpOwotICAgIG1h
aW5Qb3J0Lm9uY2xvc2UgPSBvbmNsb3NlOwotICAgIG1haW5Qb3J0LmFkZEV2ZW50TGlzdGVuZXIo
ImNsb3NlIiwgb25jbG9zZSwgZmFsc2UpOwotICAgIGdjKCk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3Qz
KCkKLXsKLSAgICAvLyBEb2N1bWVudCBkZXN0cm95ZWQuCi0gICAgdmFyIGNoYW5uZWwgPSBuZXcg
TWVzc2FnZUNoYW5uZWw7Ci0gICAgd2luZG93LmZyYW1lc1swXS5wb3N0TWVzc2FnZSgibXNnIiwg
Y2hhbm5lbC5wb3J0MiwgIioiKTsKLQotICAgIHZhciBtYWluUG9ydCA9IGNoYW5uZWwucG9ydDE7
Ci0gICAgbWFpblBvcnQuc3RhcnQoKTsKLQotICAgIHZhciBjbG9zZUNvdW50ID0gMDsKLSAgICBm
dW5jdGlvbiBvbmNsb3NlKCkKLSAgICB7Ci0gICAgICAgICsrY2xvc2VDb3VudDsKLSAgICAgICAg
bG9nKCJGQUlMOiB1bmV4cGVjdGVkIGNsb3NlIGV2ZW50IGZyb20gZG9jdW1lbnQgZGVzdHJ1Y3Rp
b24uIik7Ci0gICAgfQotCi0gICAgbWFpblBvcnQucG9zdE1lc3NhZ2UoImNsb3NlRnJhbWUiKTsK
LSAgICBtYWluUG9ydC5vbmNsb3NlID0gb25jbG9zZTsKLSAgICBtYWluUG9ydC5hZGRFdmVudExp
c3RlbmVyKCJjbG9zZSIsIG9uY2xvc2UsIGZhbHNlKTsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgewotICAgICAgICBpZiAoY2xvc2VDb3VudCA9PSAwKQotICAgICAgICAgICAgbG9nKCJQQVNT
Iik7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgNTApOwotCi0gICAg
Z2MoKTsKLX0KLTwvc2NyaXB0PgotPGlmcmFtZSBzcmM9InJlc291cmNlcy9tZXNzYWdlLXBvcnQt
aWZyYW1lLmh0bWwiIG9ubG9hZD0idGVzdCgpIj48L2lmcmFtZT4KLTwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC5odG1sLWRpc2FibGVkIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0Lmh0bWwtZGlzYWJsZWQKaW5kZXgg
MGY0YWIxNS4uZDYzYjExNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0Lmh0bWwtZGlzYWJsZWQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0Lmh0bWwtZGlzYWJsZWQKQEAgLTI4LDcgKzI4LDYgQEAgZnVuY3Rpb24gdGVzdCgp
CiAgICAgICAgICAgICBsb2coIlNpbXBsZSBleGNoYW5nZTogRkFJTC4gR290IG1lc3NhZ2UgJyIg
KyBldnQuZGF0YSArICInIGZyb20gJyIgKyBldnQub3JpZ2luICsgIicuIik7CiAgICAgICAgIHRl
c3QyKCk7CiAgICAgfTsKLSAgICBtYWluUG9ydC5zdGFydCgpOwogfQogCiBmdW5jdGlvbiB0ZXN0
MigpCkBAIC00MiwzNCArNDEsNTMgQEAgZnVuY3Rpb24gdGVzdDIoKQogICAgICAgICAgICAgbG9n
KCJQb3N0ZWQgcG9ydDogRkFJTC4gR290IG1lc3NhZ2UgJyIgKyBldnQuZGF0YSArICInIGZyb20g
JyIgKyBldnQub3JpZ2luICsgIicuIik7CiAgICAgICAgIHRlc3QzKCk7CiAgICAgfTsKLSAgICBj
aGFubmVsLnBvcnQxLnN0YXJ0KCk7CiB9CiAKIGZ1bmN0aW9uIHRlc3QzKCkKIHsKLSAgICB2YXIg
cG9ydCA9IG1haW5Qb3J0LnN0YXJ0Q29udmVyc2F0aW9uKCJuZXdDb252ZXJzYXRpb24iKTsKLSAg
ICBwb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgewotICAgICAgICBpZiAoZXZ0LmRhdGEg
PT0gImhleSIgJiYgZXZ0Lm9yaWdpbiA9PSAiIikKLSAgICAgICAgICAgIGxvZygiQ29udmVyc2F0
aW9uOiBTVUNDRVNTIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvZygiQ29udmVyc2F0
aW9uOiBGQUlMLiBHb3QgbWVzc2FnZSAnIiArIGV2dC5kYXRhICsgIicgZnJvbSAnIiArIGV2dC5v
cmlnaW4gKyAiJy4iKTsKLSAgICAgICAgdGVzdDQoKTsKLSAgICB9OwotICAgIHBvcnQuc3RhcnQo
KTsKKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICBjaGFubmVsLnBv
cnQxLnBvc3RNZXNzYWdlKCIxIik7CisgICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTsKKyAgICBjaGFu
bmVsLnBvcnQyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihldnQpIHsKKyAg
ICAgICAgaWYgKHN0YXJ0ZWQpIHsKKyAgICAgICAgICAgIGxvZygiRXZlbnQgTGlzdGVuZXI6IFNV
Q0NFU1MiKTsKKyAgICAgICAgICAgIHRlc3Q0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbG9nKCJFdmVudCBMaXN0ZW5lcjogRkFJTC4gRXZlbnQgbGlzdGVuZXIgY2FsbGVkIGJlZm9y
ZSBzdGFydCgpIik7CisgICB9KTsKKyAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICBj
aGFubmVsLnBvcnQyLnN0YXJ0KCk7CisgICAgICBzdGFydGVkID0gdHJ1ZTsKKyAgIH0sIDEwMCk7
CisgICAgCiB9CiAKIGZ1bmN0aW9uIHRlc3Q0KCkKIHsKLSAgICBsb2coIkEgcG9ydCBpcyBhY3Rp
dmU6ICIgKyAobWFpblBvcnQuYWN0aXZlID8gIlNVQ0NFU1MiIDogIkZBSUwiKSk7Ci0KLSAgICBt
YWluUG9ydC5jbG9zZSgpOwotCi0gICAgbG9nKCJBIGNsb3NlZCBwb3J0IGlzIGluYWN0aXZlOiAi
ICsgKG1haW5Qb3J0LmFjdGl2ZSA/ICJGQUlMIiA6ICJTVUNDRVNTIikpOwotCi0gICAgbG9nKCJE
T05FIik7CisgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CisgICAgY2hhbm5l
bC5wb3J0MS5wb3N0TWVzc2FnZSgiMSIpOworICAgIGNoYW5uZWwucG9ydDEuY2xvc2UoKTsKKyAg
ICBjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCIyIik7CisgICAgY2hhbm5lbC5wb3J0Mi5vbm1l
c3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgaWYgKGV2dC5kYXRhID09ICIxIikgewor
ICAgICAgICAgICAgbG9nKCJDbG9zZWQgcG9ydDogU1VDQ0VTUyIpOworICAgICAgICAgICAgdGVz
dDUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsb2coIkNsb3NlZCBwb3J0OiBGQUlM
LiBHb3QgbWVzc2FnZTogIiArIGV2dC5kYXRhICsgIiBhZnRlciBjbG9zZSIpOworICAgfQorfQog
Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworZnVuY3Rpb24gdGVzdDUoKQoreworICAgIC8vIENy
ZWF0ZSBhIGNoYW5uZWwgYW5kIHB1dCBzb21lIG1lc3NhZ2VzIGluIGl0IHdoaWNoIHdpbGwgZ28g
dW5kZWxpdmVyZWQgYW5kIHNob3VsZCBub3QgbGVhaworICAgIHZhciBjaGFubmVsID0gbmV3IE1l
c3NhZ2VDaGFubmVsOworICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoImFiY2RlIik7Cisg
ICAgLy8gTm93IHdhaXQgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZSB0byBlbnN1cmUgbm8gbWVzc2Fn
ZXMgY29tZSBpbiBmcm9tIHByZXZpb3VzIHRlc3RzLgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgIGxvZygiRE9ORSIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0sIDEwMCk7CiB9CiAKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5OGE0ZWJmLi45M2FjYjU2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw0ICsx
LDk5IEBACi0yMDA5LTA2LTEyICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKzIwMDkt
MDYtMTYgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI1MDQzPgorICAgICAgICBSZW1vdmVkIG9ic29sZXRlIE1lc3Nh
Z2VQb3J0LnN0YXJ0Q29udmVyc2F0aW9uKCksIGFjdGl2ZSBhbmQgb25jbG9zZSBBUElzLgorCisg
ICAgICAgIFJlZmFjdG9yZWQgTWVzc2FnZVBvcnRQcm94eSBpbnRvIE1lc3NhZ2VQb3J0Q2hhbm5l
bCBhbmQgYSBwbGF0Zm9ybS1kZXBlbmRlbnQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwKKyAg
ICAgICAgaW1wbGVtZW50YXRpb24uIE1vZGlmaWVkIEFQSXMgdG8gc2ltcGxpZnkgY3Jvc3MtcHJv
Y2VzcyBpbXBsZW1lbnRhdGlvbnMgYnkgbW92aW5nIHRoZSBtZXNzYWdpbmcgY29kZQorICAgICAg
ICBlbnRpcmVseSBpbnRvIHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgcHJveHkuCisKKyAgICAgICAg
Q3JlYXRlZCBhIHRocmVhZC1zYWZlIGRlZmF1bHQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwg
aW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgQ2hhbmdlZCBET01XaW5kb3cgbWVzc2FnaW5nIHRv
IGNyZWF0ZSB0aGUgTWVzc2FnZUV2ZW50IGluIHRoZSB0YXJnZXQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCB0byBtYXRjaCBob3cKKyAgICAgICAgY3Jvc3MtdGhyZWFkIE1lc3NhZ2VQb3J0cyB3b3Jr
LgorICAgICAgICAKKyAgICAgICAgKiBHTlVNYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICAgICBBZGRlZCBNZXNzYWdlUG9ydENoYW5uZWwvUGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWwgZmlsZXMuCisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNz
YWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0OjptYXJr
KToKKyAgICAgICAgICAgIENoYW5nZWQgcG9ydHMgdG8gbm90IG1hcmsgdGhlaXIgZW50YW5nbGVk
IHBhaXIgYXMgcmVhY2hhYmxlLCBwZXIgdGhlIHNwZWMuCisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwOgorICAgICAgICAqIGRvbS9NZXNzYWdlQ2hh
bm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlQ2hhbm5lbDo6TWVzc2FnZUNoYW5u
ZWwpOgorICAgICAgICAgICAgVXBkYXRlZCB0byB1c2UgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWw6OmNyZWF0ZUNoYW5uZWwoKSB0byBlbnRhbmdsZSB0aGUgcG9ydHMuCisgICAgICAgICogZG9t
L01lc3NhZ2VQb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpNZXNzYWdl
UG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6fk1lc3NhZ2VQb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnQ6Om1lc3NhZ2VBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpjbG9zZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVz
c2FnZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBv
cnQ6OmRpc3BhdGNoTWVzc2FnZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnNl
dE9ubWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6aGFzUGVuZGluZ0Fj
dGl2aXR5KToKKyAgICAgICAgICAgIENoYW5nZWQgdGhlc2UgQVBJcyB0byBkZWxlZ2F0ZSB0byBu
ZXcgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwgQVBJcy4KKyAgICAgICAgKiBkb20vTWVzc2Fn
ZVBvcnQuaDoKKyAgICAgICAgICAgIFJlbmFtZWQgaXNRdWV1ZU9wZW4oKSB0byBzdGFydGVkKCku
CisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0LmlkbDoKKyAgICAgICAgICAgIFJlbW92ZWQgc3Rh
cnRDb252ZXJzYXRpb24gYW5kIG9uY2xvc2UuCisgICAgICAgKiBkb20vTWVzc2FnZVBvcnRQcm94
eS5oOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydENoYW5uZWwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OkV2
ZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6On5NZXNzYWdl
UG9ydENoYW5uZWwpOgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydENoYW5uZWwuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6bWVzc2Fn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6Y2hh
bm5lbCk6CisgICAgICAgICAgICBDaGFuZ2VkIEV2ZW50RGF0YSB0byBob2xkIGEgcmVmZXJlbmNl
IHRvIGEgTWVzc2FnZVBvcnRDaGFubmVsIG9iamVjdCBpbnN0ZWFkIG9mIGEgTWVzc2FnZVBvcnQg
dG8gZW5hYmxlIGNyb3NzLXRocmVhZCBtZXNzYWdpbmcuCisgICAgICAgIChXZWJDb3JlOjpNZXNz
YWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0Q2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZSk6ICAgICAgICAKKyAgICAgICAgKiBkb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMpOgorICAgICAgICAgICAgUmVuYW1lZCBp
c1F1ZXVlT3BlbigpIHRvIHN0YXJ0ZWQoKS4KKyAgICAgICAgKiBkb20vZGVmYXVsdC9QbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRDaGFubmVsOjplbnRhbmdsZUlmT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
UG9ydENoYW5uZWw6OmRpc2VudGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0
Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
UG9ydENoYW5uZWw6OnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBv
cnRDaGFubmVsOjppc0Nvbm5lY3RlZFRvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0
Q2hhbm5lbDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6flBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVs
OjpjcmVhdGVDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsOjplbnRhbmdsZUlmT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6ZGlzZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWw6OnNldFJlbW90ZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OnJlbW90ZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmVudGFuZ2xlZENoYW5uZWwpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OnNldEVudGFuZ2xlZENoYW5uZWwp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OnBvc3RNZXNz
YWdlVG9SZW1vdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWw6OnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjppc0Nvbm5lY3RlZFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y2xvc2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAg
ICAgKiBkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpNZXNzYWdlUG9ydFF1
ZXVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWw6Ok1lc3NhZ2VQb3J0UXVldWU6OnRyeUdldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0UXVldWU6OmFwcGVuZEFuZENo
ZWNrRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
Ok1lc3NhZ2VQb3J0UXVldWU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0UXVldWU6Ok1lc3NhZ2VQb3J0UXVldWUpOgor
ICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RNZXNz
YWdlVGltZXI6OlBvc3RNZXNzYWdlVGltZXIpOgorICAgICAgICAgICAgQ2hhbmdlZCBET01XaW5k
b3cgbWVzc2FnaW5nIHRvIGNyZWF0ZSB0aGUgTWVzc2FnZUV2ZW50IGluIHRoZSB0YXJnZXQgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCB0byBtYXRjaCBob3cgY3Jvc3MtdGhyZWFkIE1lc3NhZ2VQb3J0
cyB3b3JrLgorICAgICAgICAoV2ViQ29yZTo6UG9zdE1lc3NhZ2VUaW1lcjo6ZXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJGaXJlZCk6CisKKyAyMDA5LTA2LTEyICBEYXZp
ZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCBkYzViYjE0Li5iMjZmM2ZhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTY3Niw3ICs2
NzYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5o
IFwKIAlXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAgXAogCVdlYkNvcmUvZG9tL01lc3NhZ2VQ
b3J0LmggXAotCVdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0UHJveHkuaCBcCisJV2ViQ29yZS9kb20v
TWVzc2FnZVBvcnRDaGFubmVsLmNwcCBcCisJV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVs
LmggXAogCVdlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIFwKIAlXZWJDb3JlL2RvbS9Nb3VzZUV2
ZW50LmggXAogCVdlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcCBcCkBAIC03NjgsNiAr
NzY5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJM
aWJ4bWwyLmNwcCBcCiAJV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyU2NvcGUuY3BwIFwKIAlXZWJD
b3JlL2RvbS9YTUxUb2tlbml6ZXJTY29wZS5oIFwKKyAgICAgICAgV2ViQ29yZS9kb20vZGVmYXVs
dC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgXAorICAgICAgICBXZWJDb3JlL2RvbS9k
ZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggXAogCVdlYkNvcmUvZWRpdGluZy9B
cHBlbmROb2RlQ29tbWFuZC5jcHAgXAogCVdlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFu
ZC5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIFwKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGE0MDY3NTMuLjQyN2NkYTQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtOTEyNyw3ICs5MTI3LDE5IEBACiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxNZXNz
YWdlUG9ydFByb3h5LmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE1lc3NhZ2VQb3J0Q2hh
bm5lbC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxkb21cTWVzc2FnZVBvcnRDaGFubmVsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cZGVmYXVsdFxQbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxkb21cZGVmYXVsdFxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5o
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjN2IyN2VlLi4yNDU5MDkxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQwLDEzICs2NDAsMTYgQEAKIAkJ
NDExMDQ2NDIwRkEyMjJBNjAwQkE0MzZBIC8qIFNjcmlwdEV2ZW50TGlzdGVuZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDExMDQ2NDAwRkEyMjJB
NjAwQkE0MzZBIC8qIFNjcmlwdEV2ZW50TGlzdGVuZXIuY3BwICovOyB9OwogCQk0MTI3RDUzNzBG
OEFBQjFEMDBFNDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlw
dFN0YXRlLmNwcCAqLzsgfTsKIAkJNDEyQTY4NDcwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9i
amVjdFF1YXJhbnRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDEyQTY4NDYwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9iamVjdFF1YXJhbnRp
bmUuY3BwICovOyB9OwotCQk0MTVFM0VGNjBGOEQ2N0ZFMDA3RUVCNTAgLyogTWVzc2FnZVBvcnRQ
cm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1
RTNFRjUwRjhENjdGRTAwN0VFQjUwIC8qIE1lc3NhZ2VQb3J0UHJveHkuaCAqLzsgfTsKIAkJNDE2
RTc1QkUwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxTdGFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QkMwRURGOEZENzAwMzYwRTFE
IC8qIFNjcmlwdENhbGxTdGFjay5oICovOyB9OwogCQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbFN0YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxNkU3NUJEMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2su
Y3BwICovOyB9OwogCQk0MTZFNzVDQjBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVD
OTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmggKi87IH07CiAJCTQxNkU3NUND
MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8q
IFNjcmlwdENhbGxGcmFtZS5jcHAgKi87IH07CiAJCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAv
KiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxNkY0NUVGMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTk1MzY1MTBGNjgy
MjI0MDBEMEM2NzkgLyogU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5NTM2NTAwRjY4MjIyNDAwRDBDNjc5IC8q
IFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCAqLzsgfTsKKwkJNDFCRjcwMEIwRkU4NkY0OTAwNUU4
REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUJGNzAwOTBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBv
cnRDaGFubmVsLmNwcCAqLzsgfTsKKwkJNDFCRjcwMEMwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDFCRjcwMEEwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oICov
OyB9OworCQk0MUJGNzAwRjBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFCRjcwMEQwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNw
cCAqLzsgfTsKKwkJNDFCRjcwMTAwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUJGNzAwRTBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
aCAqLzsgfTsKIAkJNDFDNzYwQjEwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUM3NjBCMDBFREUw
M0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUQwMTVDQTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVu
dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
RDAxNUM4MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovOyB9OwogCQk0MUQwMTVD
QjBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENv
bnRlbnRUeXBlLmNwcCAqLzsgfTsKQEAgLTU1MzAsMTMgKzU1MzMsMTYgQEAKIAkJNDExMDQ2NDAw
RkEyMjJBNjAwQkE0MzZBIC8qIFNjcmlwdEV2ZW50TGlzdGVuZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRT
dGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRTdGF0
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMkE2ODQ2MEY2QjAzREQwMDBF
QTY2RSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0MTVFM0VGNTBGOEQ2N0ZFMDA3RUVCNTAgLyogTWVzc2FnZVBvcnRQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdlUG9ydFByb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUJDMEVERjhGRDcwMDM2MEUx
RCAvKiBTY3JpcHRDYWxsU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2NyaXB0Q2FsbFN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUJE
MEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FsbFN0YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDE2RTc1QzkwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRDYWxsRnJhbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8q
IFNjcmlwdENhbGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTY3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZG
NDVFRjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcmlwdFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTk1MzY1MDBGNjgyMjI0MDBEMEM2NzkgLyogU2NyaXB0T2JqZWN0UXVhcmFudGluZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRPYmplY3RRdWFyYW50aW5l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQkY3MDA5MEZFODZGNDkwMDVFOERF
QyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVzc2FnZVBvcnRDaGFubmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDFCRjcwMEEwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdlUG9ydENoYW5uZWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCRjcwMEQwRkU4NkY2MTAwNUU4REVDIC8qIFBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcDsgcGF0aCA9IGRlZmF1bHQv
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MUJGNzAwRTBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWwuaDsgcGF0aCA9IGRlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8q
IFNjcmlwdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDAxNUM4MEY0QjVDNzEwMDRB
NjYyRiAvKiBDb250ZW50VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b250ZW50VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQwMTVDOTBGNEI1
QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29udGVudFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTQzMTIsNiArMTQzMTgsMTAgQEAKIAkJRjUyM0QzMjQwMkRFNDQ3ODAxODYzNUNBIC8qIGRv
bSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDFCRjcw
MEQwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCAqLywK
KwkJCQk0MUJGNzAwRTBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWwuaCAqLywKKwkJCQk0MUJGNzAwOTBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBvcnRDaGFu
bmVsLmNwcCAqLywKKwkJCQk0MUJGNzAwQTBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBvcnRD
aGFubmVsLmggKi8sCiAJCQkJRTFDNERFNkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9i
amVjdC5jcHAgKi8sCiAJCQkJRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9i
amVjdC5oICovLAogCQkJCUE4QzRBN0ZDMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmNwcCAqLywK
QEAgLTE0NDIyLDcgKzE0NDMyLDYgQEAKIAkJCQlFMUFERUNCRTBFNzZBQ0YxMDA0QTFBNUUgLyog
TWVzc2FnZVBvcnQuY3BwICovLAogCQkJCUUxQURFQ0JEMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNz
YWdlUG9ydC5oICovLAogCQkJCUUxQURFQ0M2MEU3NkFEMUYwMDRBMUE1RSAvKiBNZXNzYWdlUG9y
dC5pZGwgKi8sCi0JCQkJNDE1RTNFRjUwRjhENjdGRTAwN0VFQjUwIC8qIE1lc3NhZ2VQb3J0UHJv
eHkuaCAqLywKIAkJCQk4NTAzMUIyRjBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VFdmVudC5jcHAg
Ki8sCiAJCQkJODUwMzFCMzAwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlRXZlbnQuaCAqLywKIAkJ
CQkxNDFCOTRFNTA5RUM0MjIzMDAwRTk0MTMgLyogTW91c2VFdmVudC5pZGwgKi8sCkBAIC0xNjA5
NSw3ICsxNjEwNCw2IEBACiAJCQkJRTFBREVDQ0UwRTc2QUQ4QjAwNEExQTVFIC8qIE1lc3NhZ2VD
aGFubmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMgLyog
TWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUFERUNCRjBFNzZBQ0YxMDA0QTFB
NUUgLyogTWVzc2FnZVBvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQxNUUzRUY2MEY4RDY3RkUw
MDdFRUI1MCAvKiBNZXNzYWdlUG9ydFByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOUM2RTRF
NDBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5QzZF
NEU4MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE2NzkyLDYgKzE2ODAwLDggQEAKIAkJCQkwODFFQkYzQjBGRDM0
RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMThG
ODMxQjgwRkQ0OEM3ODAwRDhDNTZCIC8qIFdvcmtlckxvYWRlclByb3h5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODlDQ0M1MzBGNDRFOTgxMDBCNURBMTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxQkY3MDBDMEZFODZGNDkwMDVFOERFQyAvKiBN
ZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxQkY3MDEwMEZFODZGNjEw
MDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xODc4NSw2ICsxODc5NSw4IEBACiAJCQkJODQ1RTcyRkIwRkQyNjIzOTAwQTg3RDc5IC8qIFNW
R0ZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFFQkYzQTBGRDM0RjQxMDBEQTc1NTkg
LyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODlDQ0M1MjBGNDRF
OTgxMDBCNURBMTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNDFCRjcwMEIwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUJGNzAwRjBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAppbmRleCBmNDgwOWFlLi5lM2FjYmVjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKQEAgLTQzLDEzICs0
Myw2IEBAIHZvaWQgSlNNZXNzYWdlUG9ydDo6bWFyaygpCiAgICAgRE9NT2JqZWN0OjptYXJrKCk7
CiAKICAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25tZXNzYWdlKCkpOwotICAgIG1hcmtJZk5v
dE51bGwobV9pbXBsLT5vbmNsb3NlKCkpOwotCi0gICAgaWYgKE1lc3NhZ2VQb3J0UHJveHkqIGVu
dGFuZ2xlZFBvcnQgPSBtX2ltcGwtPmVudGFuZ2xlZFBvcnQoKSkgewotICAgICAgICBET01PYmpl
Y3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCpIZWFwOjpoZWFwKHRoaXMp
LT5nbG9iYWxEYXRhKCksIGVudGFuZ2xlZFBvcnQpOwotICAgICAgICBpZiAod3JhcHBlciAmJiAh
d3JhcHBlci0+bWFya2VkKCkpCi0gICAgICAgICAgICB3cmFwcGVyLT5tYXJrKCk7Ci0gICAgfQog
CiAgICAgdHlwZWRlZiBNZXNzYWdlUG9ydDo6RXZlbnRMaXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5l
cnNNYXA7CiAgICAgdHlwZWRlZiBNZXNzYWdlUG9ydDo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJW
ZWN0b3I7CkBAIC02MCwxNCArNTMsNiBAQCB2b2lkIEpTTWVzc2FnZVBvcnQ6Om1hcmsoKQogICAg
IH0KIH0KIAotSlNWYWx1ZSBKU01lc3NhZ2VQb3J0OjpzdGFydENvbnZlcnNhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBjb25zdCBVU3RyaW5nJiBtZXNzYWdlID0gYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKTsKLQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGltcGwoKS0+c3Rh
cnRDb252ZXJzYXRpb24oZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1l
c3NhZ2UpLmdldCgpKTsKLX0KLQogSlNWYWx1ZSBKU01lc3NhZ2VQb3J0OjphZGRFdmVudExpc3Rl
bmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCmluZGV4IGZjZTA0YjYuLjI0ZTgwYjggMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3Bw
CkBAIC03Myw1NCArNzMsNiBAQCBBQ0NFU1NPUl9TRVRURVIoTWVzc2FnZVBvcnRPbm1lc3NhZ2Up
CiAgICAgfQogfQogCi1BQ0NFU1NPUl9HRVRURVIoTWVzc2FnZVBvcnRPbmNsb3NlKQotewotICAg
IElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0Lm9uY2xvc2UuX2dldCIpOwotICAgIE1lc3NhZ2VQ
b3J0KiBtZXNzYWdlUG9ydCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihW
OENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gVjhQ
cm94eTo6RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QobWVzc2FnZVBvcnQtPm9uY2xvc2UoKSk7Ci19
Ci0KLUFDQ0VTU09SX1NFVFRFUihNZXNzYWdlUG9ydE9uY2xvc2UpCi17Ci0gICAgSU5DX1NUQVRT
KCJET00uTWVzc2FnZVBvcnQub25jbG9zZS5fc2V0Iik7Ci0gICAgTWVzc2FnZVBvcnQqIG1lc3Nh
Z2VQb3J0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRl
eDo6TUVTU0FHRVBPUlQsIGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkp
IHsKLSAgICAgICAgaWYgKG1lc3NhZ2VQb3J0LT5vbmNsb3NlKCkpIHsKLSAgICAgICAgICAgIFY4
T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50
TGlzdGVuZXIqPihtZXNzYWdlUG9ydC0+b25jbG9zZSgpKTsKLSAgICAgICAgICAgIHJlbW92ZUhp
ZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0
KCksIFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgbWVzc2FnZVBvcnQtPnNldE9u
Y2xvc2UoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5
OjpyZXRyaWV2ZShtZXNzYWdlUG9ydC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAg
ICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0
ZW5lcih2YWx1ZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAg
IG1lc3NhZ2VQb3J0LT5zZXRPbmNsb3NlKGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNyZWF0ZUhp
ZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprTWVzc2FnZVBv
cnRSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNBTExCQUNLX0ZV
TkNfREVDTChNZXNzYWdlUG9ydFN0YXJ0Q29udmVyc2F0aW9uKQotewotICAgIElOQ19TVEFUUygi
RE9NLk1lc3NhZ2VQb3J0LlN0YXJ0Q29udmVyc2F0aW9uKCkiKTsKLSAgICBpZiAoYXJncy5MZW5n
dGgoKSA8IDEpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIsIFY4UHJveHk6OlNZTlRBWF9FUlJPUik7Ci0gICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0
ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVT
U0FHRVBPUlQsIGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5
OjpyZXRyaWV2ZShtZXNzYWdlUG9ydC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBp
ZiAoIXByb3h5KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBwb3J0ID0gbWVzc2FnZVBvcnQtPnN0YXJ0Q29udmVyc2F0aW9uKG1lc3Nh
Z2VQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBWOFByb3h5OjpUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIHBvcnQuZ2V0KCkpOwotICAgIHJldHVybiB3
cmFwcGVyOwotfQotCiBDQUxMQkFDS19GVU5DX0RFQ0woTWVzc2FnZVBvcnRBZGRFdmVudExpc3Rl
bmVyKQogewogICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0LkFkZEV2ZW50TGlzdGVuZXIo
KSIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZUNoYW5uZWwuY3BwIGIvV2ViQ29y
ZS9kb20vTWVzc2FnZUNoYW5uZWwuY3BwCmluZGV4IDNhOTA5MTMuLmFjMGE0YWIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVsLmNwcAorKysgYi9XZWJDb3JlL2RvbS9NZXNz
YWdlQ2hhbm5lbC5jcHAKQEAgLTI4LDE0ICsyOCwxNSBAQAogI2luY2x1ZGUgIk1lc3NhZ2VDaGFu
bmVsLmgiCiAKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTWVzc2FnZUNoYW5u
ZWw6Ok1lc3NhZ2VDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAg
OiBtX3BvcnQxKE1lc3NhZ2VQb3J0OjpjcmVhdGUoY29udGV4dCkpCi0gICAgLCBtX3BvcnQyKE1l
c3NhZ2VQb3J0OjpjcmVhdGUoY29udGV4dCkpCisgICAgOiBtX3BvcnQxKE1lc3NhZ2VQb3J0Ojpj
cmVhdGUoKmNvbnRleHQpKQorICAgICwgbV9wb3J0MihNZXNzYWdlUG9ydDo6Y3JlYXRlKCpjb250
ZXh0KSkKIHsKLSAgICBNZXNzYWdlUG9ydDo6ZW50YW5nbGUobV9wb3J0MS5nZXQoKSwgbV9wb3J0
Mi5nZXQoKSk7CisgICAgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZUNoYW5uZWwo
bV9wb3J0MS5nZXQoKSwgbV9wb3J0Mi5nZXQoKSk7CiB9CiAKIE1lc3NhZ2VDaGFubmVsOjp+TWVz
c2FnZUNoYW5uZWwoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIv
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCmluZGV4IGVmZDg5ZTcuLjRjMTk1MjQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9NZXNz
YWdlUG9ydC5jcHAKQEAgLTM4LDg5ICszOCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIE1lc3NhZ2VQb3J0Q2xvc2VFdmVudFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZVBv
cnRDbG9zZUV2ZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VQb3J0Q2xvc2VFdmVudFRh
c2socG9ydCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNZXNzYWdlUG9ydENsb3NlRXZlbnRU
YXNrKFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQpCi0gICAgICAgIDogbV9wb3J0KHBvcnQp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9wb3J0KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogdW51c2VkQ29udGV4dCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQodW51c2VkQ29udGV4dCwgdW51c2VkQ29udGV4dCA9
PSBtX3BvcnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgICAgIEFTU0VSVCghbV9w
b3J0LT5hY3RpdmUoKSk7Ci0KLSAgICAgICAgLy8gQ2xvc2luZyBtYXkgZGVzdHJveSB0aGUgcG9y
dCwgZGlzcGF0Y2ggYW55IHJlbWFpbmluZyBtZXNzYWdlcyBub3cuCi0gICAgICAgIGlmIChtX3Bv
cnQtPnF1ZXVlSXNPcGVuKCkpCi0gICAgICAgICAgICBtX3BvcnQtPmRpc3BhdGNoTWVzc2FnZXMo
KTsKLQotICAgICAgICBtX3BvcnQtPmRpc3BhdGNoQ2xvc2VFdmVudCgpOwotICAgIH0KLQotICAg
IFJlZlB0cjxNZXNzYWdlUG9ydD4gbV9wb3J0OwotfTsKLQotUGFzc1JlZlB0cjxNZXNzYWdlUG9y
dDo6RXZlbnREYXRhPiBNZXNzYWdlUG9ydDo6RXZlbnREYXRhOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRXZlbnREYXRhKG1lc3NhZ2UsIHBvcnQpKTsKLX0KLQotTWVzc2FnZVBvcnQ6
OkV2ZW50RGF0YTo6RXZlbnREYXRhKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxN
ZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQpCi0gICAgOiBtZXNzYWdlKG1lc3NhZ2UuY29weSgpKQot
ICAgICwgbWVzc2FnZVBvcnQobWVzc2FnZVBvcnQpCi17Ci19Ci0KLU1lc3NhZ2VQb3J0OjpFdmVu
dERhdGE6On5FdmVudERhdGEoKQotewotfQotCi1NZXNzYWdlUG9ydDo6TWVzc2FnZVBvcnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICA6IG1fZW50
YW5nbGVkUG9ydCgwKQotICAgICwgbV9xdWV1ZUlzT3BlbihmYWxzZSkKLSAgICAsIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICwgbV9wZW5kaW5n
Q2xvc2VFdmVudChmYWxzZSkKK01lc3NhZ2VQb3J0OjpNZXNzYWdlUG9ydChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgIDogbV9lbnRhbmdsZWRDaGFu
bmVsKDApCisgICAgLCBtX3N0YXJ0ZWQoZmFsc2UpCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoJnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7Ci0gICAgaWYgKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRNZXNzYWdl
UG9ydCh0aGlzKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRNZXNzYWdl
UG9ydCh0aGlzKTsKKyAgCisgICAgLy8gRG9uJ3QgbmVlZCB0byBjYWxsIHByb2Nlc3NNZXNzYWdl
UG9ydE1lc3NhZ2VzU29vbigpIGhlcmUsIGJlY2F1c2UgdGhlIHBvcnQgd2lsbCBub3QgYmUgb3Bl
bmVkIHVudGlsIHN0YXJ0KCkgaXMgaW52b2tlZC4KIH0KIAogTWVzc2FnZVBvcnQ6On5NZXNzYWdl
UG9ydCgpCiB7Ci0gICAgaWYgKG1fZW50YW5nbGVkUG9ydCkKLSAgICAgICAgdW5lbnRhbmdsZSgp
OwotCisgICAgY2xvc2UoKTsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAg
ICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRlc3Ryb3llZE1lc3NhZ2VQb3J0KHRoaXMp
OwogfQogCi1QYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBNZXNzYWdlUG9ydDo6Y2xvbmUoRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQpIHsKLSAgICAgICAgZWMg
PSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVm
UHRyPE1lc3NhZ2VQb3J0UHJveHk+IHJlbW90ZVBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7Ci0gICAg
UmVmUHRyPE1lc3NhZ2VQb3J0PiBuZXdQb3J0ID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZSgwKTsKLQot
ICAgIC8vIE1vdmUgYWxsIHRoZSBldmVudHMgaW4gdGhlIHBvcnQgbWVzc2FnZSBxdWV1ZSBvZiBv
cmlnaW5hbCBwb3J0IHRvIHRoZSBwb3J0IG1lc3NhZ2UgcXVldWUgb2YgbmV3IHBvcnQsIGlmIGFu
eSwgbGVhdmluZyB0aGUgbmV3IHBvcnQncyBwb3J0IG1lc3NhZ2UgcXVldWUgaW4gaXRzIGluaXRp
YWwgY2xvc2VkIHN0YXRlLgotICAgIC8vIElmIGV2ZW50cyBhcmUgcG9zdGVkIChlLmcuIGZyb20g
YSB3b3JrZXIgdGhyZWFkKSB3aGlsZSB0aGlzIGNvZGUgaXMgZXhlY3V0aW5nLCB0aGVyZSBpcyBu
byBndWFyYW50ZWUgd2hldGhlciB0aGV5IGVuZCB1cCBpbiB0aGUgb3JpZ2luYWwgb3IgbmV3IHBv
cnQncyBtZXNzYWdlIHF1ZXVlLgotICAgIFJlZlB0cjxFdmVudERhdGE+IGV2ZW50RGF0YTsKLSAg
ICB3aGlsZSAobV9tZXNzYWdlUXVldWUudHJ5R2V0TWVzc2FnZShldmVudERhdGEpKQotICAgICAg
ICBuZXdQb3J0LT5tX21lc3NhZ2VRdWV1ZS5hcHBlbmQoZXZlbnREYXRhKTsKLQotICAgIGVudGFu
Z2xlKHJlbW90ZVBvcnQuZ2V0KCksIG5ld1BvcnQuZ2V0KCkpOyAvLyBUaGUgcG9ydCBvYmplY3Qg
d2lsbCBiZSB1bmVudGFuZ2xlZC4KLSAgICByZXR1cm4gbmV3UG9ydDsKLX0KLQogdm9pZCBNZXNz
YWdlUG9ydDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBwb3N0TWVzc2FnZShtZXNzYWdlLCAwLCBlYyk7CkBAIC0xMjgsMTEyICs2
Miw3OCBAQCB2b2lkIE1lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIE1lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBkYXRhUG9ydCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQgfHwgIW1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICBpZiAo
IW1fZW50YW5nbGVkQ2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPE1lc3Nh
Z2VQb3J0PiBuZXdNZXNzYWdlUG9ydDsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBj
aGFubmVsOwogICAgIGlmIChkYXRhUG9ydCkgewotICAgICAgICBpZiAoZGF0YVBvcnQgPT0gdGhp
cyB8fCBkYXRhUG9ydCA9PSBtX2VudGFuZ2xlZFBvcnQpIHsKLSAgICAgICAgICAgIGVjID0gSU5W
QUxJRF9BQ0NFU1NfRVJSOworICAgICAgICBpZiAoZGF0YVBvcnQgPT0gdGhpcyB8fCBtX2VudGFu
Z2xlZENoYW5uZWwtPmlzQ29ubmVjdGVkVG8oZGF0YVBvcnQpKSB7CisgICAgICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGVjID0gMDsKLSAgICAgICAgbmV3TWVzc2FnZVBvcnQgPSBkYXRhUG9ydC0+Y2xvbmUoZWMp
OworICAgICAgICBjaGFubmVsID0gZGF0YVBvcnQtPmRpc2VudGFuZ2xlKGVjKTsKICAgICAgICAg
aWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIG1fZW50YW5nbGVkUG9y
dC0+ZGVsaXZlck1lc3NhZ2UobWVzc2FnZSwgbmV3TWVzc2FnZVBvcnQpOworICAgIG1fZW50YW5n
bGVkQ2hhbm5lbC0+cG9zdE1lc3NhZ2VUb1JlbW90ZShNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50
RGF0YTo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWwucmVsZWFzZSgpKSk7CiB9CiAKLXZvaWQgTWVz
c2FnZVBvcnQ6OmRlbGl2ZXJNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0
cjxNZXNzYWdlUG9ydD4gZGF0YVBvcnQpCitQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4g
TWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlKEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1fbWVz
c2FnZVF1ZXVlLmFwcGVuZChFdmVudERhdGE6OmNyZWF0ZShtZXNzYWdlLCBkYXRhUG9ydCkpOwot
ICAgIGlmIChtX3F1ZXVlSXNPcGVuICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAg
ICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nv
b24oKTsKKyAgICBpZiAoIW1fZW50YW5nbGVkQ2hhbm5lbCkKKyAgICAgICAgZWMgPSBJTlZBTElE
X1NUQVRFX0VSUjsKKyAgICBlbHNlCisgICAgICAgIG1fZW50YW5nbGVkQ2hhbm5lbC0+ZGlzZW50
YW5nbGUoKTsKKyAgICByZXR1cm4gbV9lbnRhbmdsZWRDaGFubmVsLnJlbGVhc2UoKTsKIH0KIAot
UGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKKy8vIEludm9rZWQgdG8gbm90aWZ5IHVzIHRoYXQgdGhlcmUgYXJlIG1lc3Nh
Z2VzIGF2YWlsYWJsZSBmb3IgdGhpcyBwb3J0LgorLy8gVGhpcyBjb2RlIG1heSBiZSBjYWxsZWQg
ZnJvbSBhbm90aGVyIHRocmVhZCwgYW5kIHNvIHNob3VsZCBub3QgY2FsbCBhbnkgbm9uLXRocmVh
ZHNhZmUgQVBJcyAoaS5lLiBzaG91bGQgbm90IGNhbGwgaW50byB0aGUgZW50YW5nbGVkIGNoYW5u
ZWwgb3IgYWNjZXNzIG11dGFibGUgdmFyaWFibGVzKS4KK3ZvaWQgTWVzc2FnZVBvcnQ6Om1lc3Nh
Z2VBdmFpbGFibGUoKQogewotICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDEgPSBNZXNzYWdl
UG9ydDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIGlmICghbV9lbnRhbmds
ZWRQb3J0IHx8ICFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgICAgIHJldHVybiBwb3J0
MTsKLSAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQyID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZSgw
KTsKLQotICAgIGVudGFuZ2xlKHBvcnQxLmdldCgpLCBwb3J0Mi5nZXQoKSk7Ci0KLSAgICBtX2Vu
dGFuZ2xlZFBvcnQtPmRlbGl2ZXJNZXNzYWdlKG1lc3NhZ2UsIHBvcnQyKTsKLSAgICByZXR1cm4g
cG9ydDE7CisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKTsKIH0K
IAogdm9pZCBNZXNzYWdlUG9ydDo6c3RhcnQoKQogewotICAgIGlmIChtX3F1ZXVlSXNPcGVuIHx8
ICFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7CisgICAgaWYgKG1fc3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9x
dWV1ZUlzT3BlbiA9IHRydWU7CisgICAgbV9zdGFydGVkID0gdHJ1ZTsKICAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPnByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpOwogfQogCiB2
b2lkIE1lc3NhZ2VQb3J0OjpjbG9zZSgpCiB7Ci0gICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQpCisg
ICAgaWYgKCFtX2VudGFuZ2xlZENoYW5uZWwpCiAgICAgICAgIHJldHVybjsKLQotICAgIE1lc3Nh
Z2VQb3J0UHJveHkqIG90aGVyUG9ydCA9IG1fZW50YW5nbGVkUG9ydDsKLSAgICB1bmVudGFuZ2xl
KCk7Ci0KLSAgICBxdWV1ZUNsb3NlRXZlbnQoKTsKLSAgICBvdGhlclBvcnQtPnF1ZXVlQ2xvc2VF
dmVudCgpOworICAgIG1fZW50YW5nbGVkQ2hhbm5lbC0+Y2xvc2UoKTsKIH0KIAotdm9pZCBNZXNz
YWdlUG9ydDo6ZW50YW5nbGUoTWVzc2FnZVBvcnRQcm94eSogcG9ydDEsIE1lc3NhZ2VQb3J0UHJv
eHkqIHBvcnQyKQordm9pZCBNZXNzYWdlUG9ydDo6ZW50YW5nbGUoUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWw+IHJlbW90ZSkKIHsKLSAgICBwb3J0MS0+ZW50YW5nbGUocG9ydDIpOwotICAg
IHBvcnQyLT5lbnRhbmdsZShwb3J0MSk7Ci19CisgICAgLy8gT25seSBpbnZva2VkIHRvIHNldCBv
dXIgaW5pdGlhbCBlbnRhbmdsZW1lbnQuCisgICAgQVNTRVJUKCFtX2VudGFuZ2xlZENoYW5uZWwp
OworICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCi12b2lkIE1lc3NhZ2VQ
b3J0OjplbnRhbmdsZShNZXNzYWdlUG9ydFByb3h5KiByZW1vdGUpCi17Ci0gICAgLy8gVW5lbnRh
bmdsZSBmcm9tIG91ciBjdXJyZW50IHBvcnQgZmlyc3QuCi0gICAgaWYgKG1fZW50YW5nbGVkUG9y
dCkgewotICAgICAgICBBU1NFUlQobV9lbnRhbmdsZWRQb3J0ICE9IHJlbW90ZSk7Ci0gICAgICAg
IHVuZW50YW5nbGUoKTsKLSAgICB9Ci0gICAgbV9lbnRhbmdsZWRQb3J0ID0gcmVtb3RlOworICAg
IC8vIERvbid0IGVudGFuZ2xlIHRoZSBwb3J0cyBpZiB0aGUgY2hhbm5lbCBpcyBjbG9zZWQuCisg
ICAgaWYgKHJlbW90ZS0+ZW50YW5nbGVJZk9wZW4odGhpcykpCisgICAgICAgIG1fZW50YW5nbGVk
Q2hhbm5lbCA9IHJlbW90ZTsKIH0KIAotdm9pZCBNZXNzYWdlUG9ydDo6dW5lbnRhbmdsZSgpCi17
Ci0gICAgLy8gVW5lbnRhbmdsZSBvdXIgZW5kIGJlZm9yZSB1bmVudGFuZ2xpbmcgdGhlIG90aGVy
IGVuZC4KLSAgICBpZiAobV9lbnRhbmdsZWRQb3J0KSB7Ci0gICAgICAgIE1lc3NhZ2VQb3J0UHJv
eHkqIHJlbW90ZSA9IG1fZW50YW5nbGVkUG9ydDsKLSAgICAgICAgbV9lbnRhbmdsZWRQb3J0ID0g
MDsKLSAgICAgICAgcmVtb3RlLT51bmVudGFuZ2xlKCk7Ci0gICAgfQotfQorCiAKIHZvaWQgTWVz
c2FnZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQoKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOwotCi0gICAgaWYgKG1fZW50YW5nbGVkUG9ydCkKLSAgICAgICAgdW5lbnRh
bmdsZSgpOwotCisgICAgLy8gTXVzdCBjbG9zZSBwb3J0IGJlZm9yZSBibG93aW5nIGF3YXkgdGhl
IGNhY2hlZCBjb250ZXh0LCB0byBlbnN1cmUgdGhhdCB3ZSBnZXQgbm8gbW9yZSBjYWxscyB0byBt
ZXNzYWdlQXZhaWxhYmxlKCkuCisgICAgY2xvc2UoKTsKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgPSAwOwogfQogCi12b2lkIE1lc3NhZ2VQb3J0OjphdHRhY2hUb0NvbnRleHQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLXsKLSAgICBBU1NFUlQo
IW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlSXNPcGVuKTsK
LQotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jcmVhdGVkTWVzc2FnZVBvcnQodGhpcyk7
Ci0gICAgCi0gICAgLy8gRklYTUU6IE5lZWQgdG8gY2FsbCBwcm9jZXNzTWVzc2FnZVBvcnRNZXNz
YWdlc1Nvb24oKT8KLX0KLQogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogTWVzc2FnZVBvcnQ6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7CkBAIC0yNDIsMTcgKzE0MiwxOSBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBNZXNzYWdlUG9ydDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiB2b2lkIE1lc3Nh
Z2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKIHsKICAgICAvLyBNZXNzYWdlcyBmb3IgY29udGV4
dHMgdGhhdCBhcmUgbm90IGZ1bGx5IGFjdGl2ZSBnZXQgZGlzcGF0Y2hlZCB0b28sIGJ1dCBKU0Fi
c3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoKSBkb2Vzbid0IGNhbGwgaGFuZGxlcnMg
Zm9yIHRoZXNlLgotICAgIC8vIEZJWE1FOiBTdWNoIG1lc3NhZ2VzIHNob3VsZCBiZSBkaXNwYXRj
aGVkIGlmIHRoZSBkb2N1bWVudCByZXR1cm5zIGZyb20gcGFnZSBjYWNoZS4gVGhleSBhcmUgb25s
eSBhbGxvd2VkIHRvIGJlIGxvc3QgaWYgdGhlIGRvY3VtZW50IGlzIGRpc2NhcmRlZC4KLSAgICBB
U1NFUlQocXVldWVJc09wZW4oKSk7Ci0KLSAgICBSZWZQdHI8RXZlbnREYXRhPiBldmVudERhdGE7
Ci0gICAgd2hpbGUgKG1fbWVzc2FnZVF1ZXVlLnRyeUdldE1lc3NhZ2UoZXZlbnREYXRhKSkgewot
Ci0gICAgICAgIEFTU0VSVCghZXZlbnREYXRhLT5tZXNzYWdlUG9ydCB8fCAhZXZlbnREYXRhLT5t
ZXNzYWdlUG9ydC0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICAgICAgaWYgKGV2ZW50
RGF0YS0+bWVzc2FnZVBvcnQpCi0gICAgICAgICAgICBldmVudERhdGEtPm1lc3NhZ2VQb3J0LT5h
dHRhY2hUb0NvbnRleHQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLQotICAgICAgICBSZWZQ
dHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50RGF0YS0+bWVzc2FnZSwg
IiIsICIiLCAwLCBldmVudERhdGEtPm1lc3NhZ2VQb3J0KTsKKyAgICAvLyBUaGUgSFRNTDUgc3Bl
YyBzcGVjaWZpZXMgdGhhdCBhbnkgbWVzc2FnZXMgc2VudCB0byBhIGRvY3VtZW50IHRoYXQgaXMg
bm90IGZ1bGx5IGFjdGl2ZSBzaG91bGQgYmUgZHJvcHBlZCwgc28gdGhpcyBiZWhhdmlvciBpcyBP
Sy4KKyAgICBBU1NFUlQoc3RhcnRlZCgpKTsKKworICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWw6OkV2ZW50RGF0YT4gZXZlbnREYXRhOworICAgIHdoaWxlIChtX2VudGFuZ2xlZENoYW5uZWwg
JiYgbV9lbnRhbmdsZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShldmVudERhdGEp
KSB7CisgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDsKKyAgICAgICAgT3duUHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCA9IGV2ZW50RGF0YS0+Y2hhbm5lbCgpOworICAgICAg
ICBpZiAoY2hhbm5lbCkgeworICAgICAgICAgICAgLy8gVGhlIHJlbW90ZSBzaWRlIHNlbnQgb3Zl
ciBhIE1lc3NhZ2VQb3J0Q2hhbm5lbCwgc28gY3JlYXRlIGEgTWVzc2FnZVBvcnQgdG8gd3JhcCBp
dC4KKyAgICAgICAgICAgIHBvcnQgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKCptX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOworICAgICAgICAgICAgcG9ydC0+ZW50YW5nbGUoY2hhbm5lbC5yZWxlYXNl
KCkpOworICAgICAgICB9CisgICAgICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50
OjpjcmVhdGUoZXZlbnREYXRhLT5tZXNzYWdlKCksICIiLCAiIiwgMCwgcG9ydCk7CiAKICAgICAg
ICAgaWYgKG1fb25NZXNzYWdlTGlzdGVuZXIpIHsKICAgICAgICAgICAgIGV2dC0+c2V0VGFyZ2V0
KHRoaXMpOwpAQCAtMjY2LDMxICsxNjgsNiBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1l
c3NhZ2VzKCkKICAgICB9CiB9CiAKLXZvaWQgTWVzc2FnZVBvcnQ6OnF1ZXVlQ2xvc2VFdmVudCgp
Ci17Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdDbG9zZUV2ZW50KTsKLSAgICBtX3BlbmRpbmdDbG9z
ZUV2ZW50ID0gdHJ1ZTsKLQotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2so
TWVzc2FnZVBvcnRDbG9zZUV2ZW50VGFzazo6Y3JlYXRlKHRoaXMpKTsKLX0KLQotdm9pZCBNZXNz
YWdlUG9ydDo6ZGlzcGF0Y2hDbG9zZUV2ZW50KCkKLXsKLSAgICBBU1NFUlQobV9wZW5kaW5nQ2xv
c2VFdmVudCk7Ci0gICAgbV9wZW5kaW5nQ2xvc2VFdmVudCA9IGZhbHNlOwotCi0gICAgUmVmUHRy
PEV2ZW50PiBldnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbG9zZUV2ZW50LCBmYWxz
ZSwgdHJ1ZSk7Ci0gICAgaWYgKG1fb25DbG9zZUxpc3RlbmVyKSB7Ci0gICAgICAgIGV2dC0+c2V0
VGFyZ2V0KHRoaXMpOwotICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAg
ICAgIG1fb25DbG9zZUxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2ZW50KGV2dC5y
ZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0KLQogdm9pZCBNZXNzYWdlUG9ydDo6
YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyLCBib29sKQogewogICAgIEV2ZW50TGlzdGVu
ZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7
CkBAIC0zNDIsOSArMjE5LDE3IEBAIGJvb2wgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiAhZXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAordm9pZCBNZXNzYWdlUG9ydDo6c2V0T25tZXNz
YWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKK3sKKyAgICBtX29u
TWVzc2FnZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsKKyAgICBzdGFydCgpOworfQorCiBib29s
IE1lc3NhZ2VQb3J0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKQogewotICAgIHJldHVybiBtX3BlbmRp
bmdDbG9zZUV2ZW50IHx8IChtX3F1ZXVlSXNPcGVuICYmICFtX21lc3NhZ2VRdWV1ZS5pc0VtcHR5
KCkpOworICAgIC8vIFRoZSBzcGVjIHNheXMgdGhhdCBlbnRhbmdsZWQgbWVzc2FnZSBwb3J0cyBz
aG91bGQgYWx3YXlzIGJlIHRyZWF0ZWQgYXMgaWYgdGhleSBoYXZlIGEgc3Ryb25nIHJlZmVyZW5j
ZS4KKyAgICAvLyBXZSdsbCBhbHNvIHN0aXB1bGF0ZSB0aGF0IHRoZSBxdWV1ZSBuZWVkcyB0byBi
ZSBvcGVuIChpZiB0aGUgYXBwIGRyb3BzIGl0cyByZWZlcmVuY2UgdG8gdGhlIHBvcnQgYmVmb3Jl
IHN0YXJ0KCktaW5nIGl0LCB0aGVuIGl0J3Mgbm90IHJlYWxseSBlbnRhbmdsZWQgYXMgaXQncyB1
bnJlYWNoYWJsZSkuCisgICAgcmV0dXJuIG1fc3RhcnRlZCAmJiBtX2VudGFuZ2xlZENoYW5uZWwg
JiYgbV9lbnRhbmdsZWRDaGFubmVsLT5oYXNQZW5kaW5nQWN0aXZpdHkoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaCBi
L1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgKaW5kZXggMDU0YWU0MS4uN2NkMWVhNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAorKysgYi9XZWJDb3JlL2RvbS9NZXNzYWdl
UG9ydC5oCkBAIC0zMCwxMCArMzAsMTEgQEAKICNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgi
CiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0j
aW5jbHVkZSAiTWVzc2FnZVBvcnRQcm94eS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5l
bC5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1
ZXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMzUgKzQ2LDI1IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogICAgIGNsYXNzIFN0cmluZzsKLSAgICBjbGFzcyBXb3JrZXJDb250ZXh0OwogCi0gICAg
Y2xhc3MgTWVzc2FnZVBvcnQgOiBwdWJsaWMgTWVzc2FnZVBvcnRQcm94eSwgcHVibGljIEV2ZW50
VGFyZ2V0IHsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lc3Nh
Z2VQb3J0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VQb3J0
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxN
ZXNzYWdlUG9ydD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlUG9ydChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KSk7IH0KICAgICAgICAgfk1lc3NhZ2VQb3J0KCk7CiAKLSAgICAgICAgUGFzc1Jl
ZlB0cjxNZXNzYWdlUG9ydD4gY2xvbmUoRXhjZXB0aW9uQ29kZSYpOyAvLyBSZXR1cm5zIGEgcG9y
dCB0aGF0IGlzbid0IGF0dGFjaGVkIHRvIGFueSBjb250ZXh0LgotCi0gICAgICAgIGJvb2wgYWN0
aXZlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRhbmdsZWRQb3J0OyB9CiAgICAgICAgIHZvaWQgcG9z
dE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAg
IHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlUG9ydCosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gc3RhcnRDb252
ZXJzYXRpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7
CiAgICAgICAgIHZvaWQgc3RhcnQoKTsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogCi0gICAgICAg
IC8vIEltcGxlbWVudGF0aW9ucyBvZiBNZXNzYWdlUG9ydFByb3h5IEFQSXMKLSAgICAgICAgdmly
dHVhbCB2b2lkIGVudGFuZ2xlKE1lc3NhZ2VQb3J0UHJveHkqKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHVuZW50YW5nbGUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRlbGl2ZXJNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4pOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcXVldWVDbG9zZUV2ZW50KCk7Ci0KLSAgICAgICAgYm9vbCBxdWV1ZUlzT3Bl
bigpIGNvbnN0IHsgcmV0dXJuIG1fcXVldWVJc09wZW47IH0KKyAgICAgICAgdm9pZCBlbnRhbmds
ZShQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4pOworICAgICAgICBQYXNzT3duUHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbD4gZGlzZW50YW5nbGUoRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAg
IE1lc3NhZ2VQb3J0UHJveHkqIGVudGFuZ2xlZFBvcnQoKSB7IHJldHVybiBtX2VudGFuZ2xlZFBv
cnQ7IH0KLSAgICAgICAgc3RhdGljIHZvaWQgZW50YW5nbGUoTWVzc2FnZVBvcnRQcm94eSosIE1l
c3NhZ2VQb3J0UHJveHkqKTsKKyAgICAgICAgdm9pZCBtZXNzYWdlQXZhaWxhYmxlKCk7CisgICAg
ICAgIGJvb2wgc3RhcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRlZDsgfQogCiAgICAgICAg
IHZvaWQgY29udGV4dERlc3Ryb3llZCgpOwotICAgICAgICB2b2lkIGF0dGFjaFRvQ29udGV4dChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKICAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICAgICAgdmly
dHVhbCBNZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9ydCgpIHsgcmV0dXJuIHRoaXM7IH0KQEAgLTg4
LDUyICs3OSwyOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsKICAgICAg
ICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExp
c3RlbmVyczsgfQogCi0gICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVzc2FnZVBvcnRQcm94eT46
OnJlZjsKLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxNZXNzYWdlUG9ydFByb3h5Pjo6ZGVyZWY7
CisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVzc2FnZVBvcnQ+OjpyZWY7CisgICAgICAgIHVz
aW5nIFJlZkNvdW50ZWQ8TWVzc2FnZVBvcnQ+OjpkZXJlZjsKIAogICAgICAgICBib29sIGhhc1Bl
bmRpbmdBY3Rpdml0eSgpOwogCi0gICAgICAgIC8vIEZJWE1FOiBQZXIgY3VycmVudCBzcGVjLCBz
ZXR0aW5nIG9ubWVzc2FnZSBzaG91bGQgYXV0b21hZ2ljYWxseSBzdGFydCB0aGUgcG9ydCAodW5s
aWtlIGFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAuLi4pKS4KLSAgICAgICAgdm9pZCBzZXRP
bm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25N
ZXNzYWdlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CisgICAgICAgIHZvaWQgc2V0T25tZXNz
YWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgICAgICBFdmVudExpc3RlbmVyKiBv
bm1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CiAK
LSAgICAgICAgdm9pZCBzZXRPbmNsb3NlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikgeyBtX29uQ2xvc2VMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICAgICAg
RXZlbnRMaXN0ZW5lciogb25jbG9zZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25DbG9zZUxpc3RlbmVy
LmdldCgpOyB9Ci0KICAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVBv
cnRDbG9zZUV2ZW50VGFzazsKLQotICAgICAgICBNZXNzYWdlUG9ydChTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CisgICAgICAgIE1lc3NhZ2VQb3J0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAKLSAgICAg
ICAgdm9pZCBkaXNwYXRjaENsb3NlRXZlbnQoKTsKKyAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0
Q2hhbm5lbD4gbV9lbnRhbmdsZWRDaGFubmVsOwogCi0gICAgICAgIE1lc3NhZ2VQb3J0UHJveHkq
IG1fZW50YW5nbGVkUG9ydDsKLQotICAgICAgICAvLyBGSVhNRTogRXZlbnREYXRhIGlzIG5lY2Vz
c2FyeSB0byBwYXNzIG1lc3NhZ2VzIHRvIG90aGVyIHRocmVhZHMuIEluIHNpbmdsZSB0aHJlYWRl
ZCBjYXNlLCB3ZSBjYW4ganVzdCBxdWV1ZSBhIGNyZWF0ZWQgZXZlbnQuCi0gICAgICAgIHN0cnVj
dCBFdmVudERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudERhdGE+IHsKLSAgICAgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4pOwotICAgICAgICAgICAgfkV2ZW50RGF0YSgpOwot
Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICAgICAgICAgIFJlZlB0cjxNZXNzYWdl
UG9ydD4gbWVzc2FnZVBvcnQ7Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIEV2ZW50
RGF0YShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+KTsKLSAg
ICAgICAgfTsKLSAgICAgICAgTWVzc2FnZVF1ZXVlPFJlZlB0cjxFdmVudERhdGE+ID4gbV9tZXNz
YWdlUXVldWU7IC8vIEZJWE1FOiBObyBuZWVkIHRvIHVzZSBNZXNzYWdlUXVldWUgaW4gc2luZ2xl
IHRocmVhZGVkIGNhc2UuCi0gICAgICAgIGJvb2wgbV9xdWV1ZUlzT3BlbjsKKyAgICAgICAgYm9v
bCBtX3N0YXJ0ZWQ7CiAKICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogCiAgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uTWVz
c2FnZUxpc3RlbmVyOwotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkNsb3NlTGlz
dGVuZXI7CiAKICAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKLQot
ICAgICAgICBib29sIG1fcGVuZGluZ0Nsb3NlRXZlbnQ7IC8vIFRoZSBwb3J0IGlzIEdDIHByb3Rl
Y3RlZCB3aGlsZSB3YWl0aW5nIGZvciBhIGNsb3NlIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuCiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
TWVzc2FnZVBvcnQuaWRsIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRsCmluZGV4IDAzYzZi
YWIuLmU1ZjlhZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbAorKysg
Yi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5pZGwKQEAgLTM0LDE2ICszNCwxMyBAQCBtb2R1bGUg
ZXZlbnRzIHsKIC8vIFdlIG5lZWQgdG8gaGF2ZSBzb21ldGhpbmcgYXMgYW4gT2JqQyBiaW5kaW5n
LCBiZWNhdXNlIE1lc3NhZ2VQb3J0IGlzIHVzZWQgaW4gTWVzc2FnZUV2ZW50LCB3aGljaCBhbHJl
YWR5IGhhcyBvbmUsCiAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBleHBvc2UgdGhl
IEFQSSB3aGlsZSBpdCBpcyBpbiBmbHV4LgogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQ
VCkgJiYgTEFOR1VBR0VfSkFWQVNDUklQVAotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9v
bGVhbiBhY3RpdmU7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3Nh
Z2UsIGluIFtPcHRpb25hbF0gTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQpCiAgICAgICAgICAgICBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgW0N1c3RvbV0gTWVzc2FnZVBvcnQgc3RhcnRD
b252ZXJzYXRpb24oaW4gRE9NU3RyaW5nIG1lc3NhZ2UpOwogICAgICAgICB2b2lkIHN0YXJ0KCk7
CiAgICAgICAgIHZvaWQgY2xvc2UoKTsKIAogICAgICAgICAvLyBldmVudCBoYW5kbGVyIGF0dHJp
YnV0ZXMKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOwotICAgICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNsb3NlOwogCiAgICAgICAgIC8vIEV2ZW50VGFy
Z2V0IGludGVyZmFjZQogICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4g
RE9NU3RyaW5nIHR5cGUsIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFu
bmVsLmNwcCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4ZDRmNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCisKKyNpbmNsdWRlICJQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShQYXNz
UmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQoreworICAgIHJldHVy
biBuZXcgTWVzc2FnZVBvcnRDaGFubmVsKGNoYW5uZWwpOworfQorCitQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWw+IGNoYW5uZWwpCit7CisgICAgcmV0dXJuIG5ldyBFdmVudERhdGEobWVzc2FnZSwgY2hhbm5l
bCk7Cit9CisKK01lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhOjpFdmVudERhdGEoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCkK
KyAgICA6IG1fbWVzc2FnZShtZXNzYWdlLmNvcHkoKSkKKyAgICAsIG1fY2hhbm5lbChjaGFubmVs
KQoreworfQorCitNZXNzYWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0Q2hhbm5lbChQYXNzUmVm
UHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQorICAgIDogbV9jaGFubmVs
KGNoYW5uZWwpCit7Cit9CisKK01lc3NhZ2VQb3J0Q2hhbm5lbDo6fk1lc3NhZ2VQb3J0Q2hhbm5l
bCgpCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGNsb3NlIG91ciBwbGF0Zm9ybSBjaGFubmVsIHdo
ZW4gdGhlIGJhc2UgaXMgZnJlZWQsIHRvIGtlZXAgdGhlIGNoYW5uZWwgb2JqZWN0cyBmcm9tIGxl
YWtpbmcuCisgICAgbV9jaGFubmVsLT5jbG9zZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydENoYW5uZWwuaCBiL1dlYkNv
cmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmFiMGJmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9y
dENoYW5uZWwuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZXNzYWdlUG9ydENoYW5uZWxfaAor
I2RlZmluZSBNZXNzYWdlUG9ydENoYW5uZWxfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAg
IGNsYXNzIE1lc3NhZ2VQb3J0OworICAgIGNsYXNzIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVs
OworICAgIGNsYXNzIFN0cmluZzsKKworICAgIC8vIE1lc3NhZ2VQb3J0Q2hhbm5lbCBpcyBhIHBs
YXRmb3JtLWluZGVwZW5kZW50IGludGVyZmFjZSB0byB0aGUgcmVtb3RlIHNpZGUgb2YgYSBtZXNz
YWdlIGNoYW5uZWwuCisgICAgLy8gSXQgYWN0cyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBwbGF0
Zm9ybS1kZXBlbmRlbnQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwgaW1wbGVtZW50YXRpb24g
d2hpY2ggZW5zdXJlcyB0aGF0IHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgY2xvc2UoKSBtZXRob2Qg
aXMgaW52b2tlZCBiZWZvcmUgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3MgTWVzc2FnZVBvcnRDaGFu
bmVsIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gQ3JlYXRlcyBhIG5l
dyB3cmFwcGVyIGZvciB0aGUgcGFzc2VkIGNoYW5uZWwuCisgICAgICAgIHN0YXRpYyBQYXNzT3du
UHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY3JlYXRlKFBhc3NSZWZQdHI8UGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWw+KTsKKworICAgICAgICAvLyBFbnRhbmdsZXMgdGhlIGNoYW5uZWwgd2l0aCBh
IHBvcnQgKGNhbGxlZCB3aGVuIGEgcG9ydCBoYXMgYmVlbiBjbG9uZWQsIGFmdGVyIHRoZSBjbG9u
ZSBoYXMgYmVlbiBtYXJzaGFsbGVkIHRvIGl0cyBuZXcgb3duaW5nIHRocmVhZCBhbmQgaXMgcmVh
ZHkgdG8gcmVjZWl2ZSBtZXNzYWdlcykuCisgICAgICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhl
IGVudGFuZ2xlbWVudCBmYWlsZWQgYmVjYXVzZSB0aGUgcG9ydCB3YXMgY2xvc2VkLgorICAgICAg
ICBib29sIGVudGFuZ2xlSWZPcGVuKE1lc3NhZ2VQb3J0Kik7CisKKyAgICAgICAgLy8gRGlzZW50
YW5nbGVzIHRoZSBjaGFubmVsIGZyb20gYSBnaXZlbiBwb3J0IHNvIGl0IG5vIGxvbmdlciBmb3J3
YXJkcyBtZXNzYWdlcyB0byB0aGUgcG9ydC4gQ2FsbGVkIHdoZW4gdGhlIHBvcnQgaXMgYmVpbmcg
Y2xvbmVkIGFuZCBubyBuZXcgb3duaW5nIHRocmVhZCBoYXMgeWV0IGJlZW4gZXN0YWJsaXNoZWQu
CisgICAgICAgIHZvaWQgZGlzZW50YW5nbGUoKTsKKworICAgICAgICAvLyBDbG9zZXMgdGhlIHBv
cnQgKGVuc3VyZXMgdGhhdCBubyBmdXJ0aGVyIG1lc3NhZ2VzIGNhbiBiZSBhZGRlZCB0byBlaXRo
ZXIgcXVldWUpLgorICAgICAgICB2b2lkIGNsb3NlKCk7CisKKyAgICAgICAgLy8gVXNlZCBieSBN
ZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgpIHRvIHByZXZlbnQgY2FsbGVycyBmcm9tIHBhc3Npbmcg
YSBwb3J0J3Mgb3duIGVudGFuZ2xlZCBwb3J0LgorICAgICAgICBib29sIGlzQ29ubmVjdGVkVG8o
TWVzc2FnZVBvcnQqKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYW5uZWwg
Y3VycmVudGx5IGNvbnRhaW5zIG1lc3NhZ2VzIGZvciB0aGlzIHBvcnQsIG9yIG1heSByZWNlaXZl
IG1lc3NhZ2VzIGluIHRoZSBmdXR1cmUgKGlzIG9wZW4pLgorICAgICAgICBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSgpOworCisgICAgICAgIGNsYXNzIEV2ZW50RGF0YSB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEV2ZW50RGF0YT4gY3JlYXRlKGNvbnN0
IFN0cmluZyYsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPik7CisKKyAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSgpIHsgcmV0dXJuIG1fbWVzc2FnZTsgfQorICAgICAgICAg
ICAgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwoKSB7IHJldHVybiBtX2No
YW5uZWwucmVsZWFzZSgpOyB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEV2ZW50
RGF0YShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
Pik7CisgICAgICAgICAgICBTdHJpbmcgbV9tZXNzYWdlOworICAgICAgICAgICAgT3duUHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbD4gbV9jaGFubmVsOworICAgICAgICB9OworCisgICAgICAgIC8vIFNl
bmRzIGEgbWVzc2FnZSBhbmQgb3B0aW9uYWwgY2xvbmVkIHBvcnQgdG8gdGhlIHJlbW90ZSBwb3J0
LgorICAgICAgICB2b2lkIHBvc3RNZXNzYWdlVG9SZW1vdGUoUGFzc093blB0cjxFdmVudERhdGE+
KTsKKworICAgICAgICAvLyBFeHRyYWN0cyBhIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBxdWV1
ZSBmb3IgdGhpcyBwb3J0LgorICAgICAgICBib29sIHRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKE93
blB0cjxFdmVudERhdGE+Jik7CisKKyAgICAgICAgfk1lc3NhZ2VQb3J0Q2hhbm5lbCgpOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTWVzc2FnZVBvcnRDaGFubmVsKFBhc3NSZWZQdHI8UGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWw+KTsKKyAgICAgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsPiBtX2NoYW5uZWw7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gTWVzc2FnZVBvcnRDaGFubmVsX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L01lc3NhZ2VQb3J0UHJveHkuaCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0UHJveHkuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyNGYzZC4uMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0v
Kg0KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
Lg0KLSAqDQotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0DQotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KLSAqIG1ldDoNCi0gKg0K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0DQotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQ0KLSAqIGRpc3RyaWJ1dGlvbi4NCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0K
LSAqDQotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUw0KLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQNCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsDQotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZDQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0K
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuDQotICovDQotDQotI2lmbmRlZiBNZXNzYWdlUG9ydFByb3h5X2gNCi0j
ZGVmaW5lIE1lc3NhZ2VQb3J0UHJveHlfaA0KLQ0KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
Pg0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPg0KLQ0KLW5hbWVzcGFjZSBXZWJDb3JlIHsN
Ci0NCi0gICAgY2xhc3MgTWVzc2FnZVBvcnQ7DQotICAgIGNsYXNzIFN0cmluZzsNCi0NCi0gICAg
Y2xhc3MgTWVzc2FnZVBvcnRQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0UHJv
eHk+IHsNCi0gICAgcHVibGljOg0KLSAgICAgICAgdmlydHVhbCB+TWVzc2FnZVBvcnRQcm94eSgp
IHsgfQ0KLQ0KLSAgICAgICAgdmlydHVhbCB2b2lkIGVudGFuZ2xlKE1lc3NhZ2VQb3J0UHJveHkq
KSA9IDA7DQotICAgICAgICB2aXJ0dWFsIHZvaWQgdW5lbnRhbmdsZSgpID0gMDsNCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBkZWxpdmVyTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NS
ZWZQdHI8TWVzc2FnZVBvcnQ+KSA9IDA7DQotICAgICAgICB2aXJ0dWFsIHZvaWQgcXVldWVDbG9z
ZUV2ZW50KCkgPSAwOw0KLSAgICB9Ow0KLQ0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCi0NCi0j
ZW5kaWYgLy8gTWVzc2FnZVBvcnRQcm94eV9oDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmNwcAppbmRleCBjNTE4NzM0Li40NWQ0ZTIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcApAQCAtODgsNyArODgsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMoKQogICAgICAgICBNZXNzYWdlUG9ydCogcG9y
dCA9IHBvcnRzW2ldOwogICAgICAgICAvLyBUaGUgcG9ydCBtYXkgYmUgZGVzdHJveWVkLCBhbmQg
YW5vdGhlciBvbmUgY3JlYXRlZCBhdCB0aGUgc2FtZSBhZGRyZXNzLCBidXQgdGhpcyBpcyBzYWZl
LCBhcyB0aGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuCiAgICAgICAgIC8vIGFzIGEgcmVzdWx0IGlz
IHRoYXQgZGlzcGF0Y2hNZXNzYWdlcygpIHdpbGwgYmUgY2FsbGVkIG5lZWRsZXNzbHkuCi0gICAg
ICAgIGlmIChtX21lc3NhZ2VQb3J0cy5jb250YWlucyhwb3J0KSAmJiBwb3J0LT5xdWV1ZUlzT3Bl
bigpKQorICAgICAgICBpZiAobV9tZXNzYWdlUG9ydHMuY29udGFpbnMocG9ydCkgJiYgcG9ydC0+
c3RhcnRlZCgpKQogICAgICAgICAgICAgcG9ydC0+ZGlzcGF0Y2hNZXNzYWdlcygpOwogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuY3BwIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5MWY4MgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWwuY3BwCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE1lc3NhZ2VQb3J0Q2hhbm5lbCBpbXBsZW1lbnRh
dGlvbnMgLSBqdXN0IGRlbGVnYXRlIHRvIHRoZSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC4K
K2Jvb2wgTWVzc2FnZVBvcnRDaGFubmVsOjplbnRhbmdsZUlmT3BlbihNZXNzYWdlUG9ydCogcG9y
dCkKK3sKKyAgICByZXR1cm4gbV9jaGFubmVsLT5lbnRhbmdsZUlmT3Blbihwb3J0KTsKK30KKwor
dm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6OmRpc2VudGFuZ2xlKCkKK3sKKyAgICBtX2NoYW5uZWwt
PmRpc2VudGFuZ2xlKCk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2Fn
ZVRvUmVtb3RlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+IG1lc3Nh
Z2UpCit7CisgICAgbV9jaGFubmVsLT5wb3N0TWVzc2FnZVRvUmVtb3RlKG1lc3NhZ2UpOworfQor
Citib29sIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6dHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUoT3duUHRy
PE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiYgcmVzdWx0KQoreworICAgIHJldHVybiBt
X2NoYW5uZWwtPnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKHJlc3VsdCk7Cit9CisKK3ZvaWQgTWVz
c2FnZVBvcnRDaGFubmVsOjpjbG9zZSgpCit7CisgICAgbV9jaGFubmVsLT5jbG9zZSgpOworfQor
Citib29sIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6aXNDb25uZWN0ZWRUbyhNZXNzYWdlUG9ydCogcG9y
dCkKK3sKKyAgICByZXR1cm4gbV9jaGFubmVsLT5pc0Nvbm5lY3RlZFRvKHBvcnQpOworfQorCiti
b29sIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkKK3sKKyAgICByZXR1
cm4gbV9jaGFubmVsLT5oYXNQZW5kaW5nQWN0aXZpdHkoKTsKK30KKworCitQYXNzUmVmUHRyPFBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3Jl
YXRlKFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRRdWV1ZT4gaW5jb21pbmcsIFBhc3NSZWZQdHI8TWVz
c2FnZVBvcnRRdWV1ZT4gb3V0Z29pbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbChpbmNvbWluZywgb3V0Z29pbmcpKTsKK30KKworUGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWw6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsKFBhc3NSZWZQ
dHI8TWVzc2FnZVBvcnRRdWV1ZT4gaW5jb21pbmcsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRRdWV1
ZT4gb3V0Z29pbmcpCisgICAgOiBtX2VudGFuZ2xlZENoYW5uZWwoMCkKKyAgICAsIG1faW5jb21p
bmdRdWV1ZShpbmNvbWluZykKKyAgICAsIG1fb3V0Z29pbmdRdWV1ZShvdXRnb2luZykKKyAgICAs
IG1fcmVtb3RlUG9ydCgwKQoreworfQorCitQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6flBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsKCkKK3sKK30KKwordm9pZCBQbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbDo6Y3JlYXRlQ2hhbm5lbChQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0MSwg
UGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDIpCit7CisgICAgLy8gQ3JlYXRlIGluY29taW5n
L291dGdvaW5nIHF1ZXVlcy4KKyAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
Ok1lc3NhZ2VQb3J0UXVldWU+IHF1ZXVlMSA9IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpN
ZXNzYWdlUG9ydFF1ZXVlOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWw6Ok1lc3NhZ2VQb3J0UXVldWU+IHF1ZXVlMiA9IFBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsOjpNZXNzYWdlUG9ydFF1ZXVlOjpjcmVhdGUoKTsKKworICAgIC8vIENyZWF0ZSBwcm94
aWVzIGZvciBlYWNoIGVuZHBvaW50LgorICAgIFJlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbD4gY2hhbm5lbDEgPSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHF1ZXVl
MSwgcXVldWUyKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5u
ZWwyID0gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShxdWV1ZTIsIHF1ZXVlMSk7
CisKKyAgICAvLyBFbnRhbmdsZSB0aGUgdHdvIGVuZHBvaW50cy4KKyAgICBjaGFubmVsMS0+c2V0
RW50YW5nbGVkQ2hhbm5lbChjaGFubmVsMik7CisgICAgY2hhbm5lbDItPnNldEVudGFuZ2xlZENo
YW5uZWwoY2hhbm5lbDEpOworCisgICAgLy8gTm93IGVudGFuZ2xlIHRoZSBwcm94aWVzIHdpdGgg
dGhlIGFwcHJvcHJpYXRlIGxvY2FsIHBvcnRzLgorICAgIHBvcnQxLT5lbnRhbmdsZShNZXNzYWdl
UG9ydENoYW5uZWw6OmNyZWF0ZShjaGFubmVsMikpOworICAgIHBvcnQyLT5lbnRhbmdsZShNZXNz
YWdlUG9ydENoYW5uZWw6OmNyZWF0ZShjaGFubmVsMSkpOworfQorCitib29sIFBsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsOjplbnRhbmdsZUlmT3BlbihNZXNzYWdlUG9ydCogcG9ydCkKK3sKKyAg
ICAvLyBXZSBjYW4ndCBjYWxsIG1lbWJlciBmdW5jdGlvbnMgb24gb3VyIHJlbW90ZSBwYWlyIHdo
aWxlIGhvbGRpbmcgb3VyIG11dGV4IG9yIHdlJ2xsIGRlYWRsb2NrLCBidXQgd2UgbmVlZCB0byBn
dWFyZCBhZ2FpbnN0IHRoZSByZW1vdGUgcG9ydCBnZXR0aW5nIGNsb3NlZC9mcmVlZCwgc28gY3Jl
YXRlIGEgc3RhbmRhbG9uZSByZWZlcmVuY2UuCisgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsPiByZW1vdGUgPSBlbnRhbmdsZWRDaGFubmVsKCk7CisgICAgaWYgKCFyZW1vdGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZW1vdGUtPnNldFJlbW90ZVBvcnQocG9ydCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
OmRpc2VudGFuZ2xlKCkKK3sKKyAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+
IHJlbW90ZSA9IGVudGFuZ2xlZENoYW5uZWwoKTsKKyAgICBpZiAocmVtb3RlKQorICAgICAgICBy
ZW1vdGUtPnNldFJlbW90ZVBvcnQoMCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWw6OnNldFJlbW90ZVBvcnQoTWVzc2FnZVBvcnQqIHBvcnQpCit7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9jayhtX211dGV4KTsKKyAgICAvLyBTaG91bGQgbmV2ZXIgc2V0IHBvcnQgaWYgaXQgaXMg
YWxyZWFkeSBzZXQuCisgICAgQVNTRVJUKCFwb3J0IHx8ICFtX3JlbW90ZVBvcnQpOworICAgIG1f
cmVtb3RlUG9ydCA9IHBvcnQ7Cit9CisKK01lc3NhZ2VQb3J0KiBQbGF0Zm9ybU1lc3NhZ2VQb3J0
Q2hhbm5lbDo6cmVtb3RlUG9ydCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsK
KyAgICByZXR1cm4gbV9yZW1vdGVQb3J0OworfQorCitQYXNzUmVmUHRyPFBsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsPiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6ZW50YW5nbGVkQ2hhbm5l
bCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9lbnRh
bmdsZWRDaGFubmVsOworfQorCit2b2lkIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpzZXRF
bnRhbmdsZWRDaGFubmVsKFBhc3NSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IHJl
bW90ZSkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIC8vIFNob3VsZCBv
bmx5IGJlIHNldCBhcyBwYXJ0IG9mIGluaXRpYWwgY3JlYXRpb24vZW50YW5nbGVtZW50LgorICAg
IGlmIChyZW1vdGUpCisgICAgICAgIEFTU0VSVCghbV9lbnRhbmdsZWRDaGFubmVsLmdldCgpKTsK
KyAgICBtX2VudGFuZ2xlZENoYW5uZWwgPSByZW1vdGU7Cit9CisKK3ZvaWQgUGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWw6OnBvc3RNZXNzYWdlVG9SZW1vdGUoUGFzc093blB0cjxNZXNzYWdlUG9y
dENoYW5uZWw6OkV2ZW50RGF0YT4gbWVzc2FnZSkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1f
bXV0ZXgpOworICAgIGlmICghbV9vdXRnb2luZ1F1ZXVlKQorICAgICAgICByZXR1cm47CisgICAg
Ym9vbCB3YXNFbXB0eSA9IG1fb3V0Z29pbmdRdWV1ZS0+YXBwZW5kQW5kQ2hlY2tFbXB0eShtZXNz
YWdlKTsKKyAgICBpZiAod2FzRW1wdHkgJiYgbV9yZW1vdGVQb3J0KQorICAgICAgICBtX3JlbW90
ZVBvcnQtPm1lc3NhZ2VBdmFpbGFibGUoKTsKK30KKworYm9vbCBQbGF0Zm9ybU1lc3NhZ2VQb3J0
Q2hhbm5lbDo6dHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUoT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bDo6RXZlbnREYXRhPiYgcmVzdWx0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7
CisgICAgcmV0dXJuIG1faW5jb21pbmdRdWV1ZS0+dHJ5R2V0TWVzc2FnZShyZXN1bHQpOworfQor
Citib29sIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjppc0Nvbm5lY3RlZFRvKE1lc3NhZ2VQ
b3J0KiBwb3J0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgcmV0dXJu
IG1fcmVtb3RlUG9ydCA9PSBwb3J0OworfQorCisvLyBDbG9zZXMgdGhlIHBvcnQgc28gbm8gZnVy
dGhlciBtZXNzYWdlcyBjYW4gYmUgc2VudCBmcm9tIGVpdGhlciBlbmQuCit2b2lkIFBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjpjbG9zZSgpCit7CisgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsPiByZW1vdGUgPSBlbnRhbmdsZWRDaGFubmVsKCk7CisgICAgaWYgKCFyZW1v
dGUpCisgICAgICAgIHJldHVybjsKKyAgICBjbG9zZUludGVybmFsKCk7CisgICAgcmVtb3RlLT5j
bG9zZUludGVybmFsKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNs
b3NlSW50ZXJuYWwoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgLy8g
RGlzZW50YW5nbGUgb3Vyc2VsdmVzIGZyb20gdGhlIG90aGVyIGVuZC4gV2Ugc3RpbGwgbWFpbnRh
aW4gYSByZWZlcmVuY2UgdG8gb3VyIGluY29taW5nIHF1ZXVlLCBzaW5jZSBwcmV2aW91c2x5LWV4
aXN0aW5nIG1lc3NhZ2VzIHNob3VsZCBzdGlsbCBiZSBkZWxpdmVyZWQuCisgICAgbV9yZW1vdGVQ
b3J0ID0gMDsKKyAgICBtX2VudGFuZ2xlZENoYW5uZWwgPSAwOworICAgIG1fb3V0Z29pbmdRdWV1
ZSA9IDA7Cit9CisKK2Jvb2wgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6Omhhc1BlbmRpbmdB
Y3Rpdml0eSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4g
bV9lbnRhbmdsZWRDaGFubmVsIHx8ICFtX2luY29taW5nUXVldWUtPmlzRW1wdHkoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vZGVmYXVsdC9Q
bGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjFmMDZhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsX2gKKyNkZWZpbmUgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWxfaAor
CisjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCisKKyNpbmNsdWRlIDx3dGYvTWVzc2Fn
ZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIE1lc3NhZ2VQb3J0
OworCisgICAgLy8gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwgaXMgYSBwbGF0Zm9ybS1kZXBl
bmRlbnQgaW50ZXJmYWNlIHRvIHRoZSByZW1vdGUgc2lkZSBvZiBhIG1lc3NhZ2UgY2hhbm5lbC4K
KyAgICAvLyBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgbXVsdGlwbGUgdGhy
ZWFkcyBydW5uaW5nIHdpdGhpbiBhIHNpbmdsZSBwcm9jZXNzLiBJbXBsZW1lbnRhdGlvbnMgZm9y
IG11bHRpLXByb2Nlc3MgcGxhdGZvcm1zIHNob3VsZCBkZWZpbmUgdGhlc2UgcHVibGljIEFQSXMg
aW4gdGhlaXIgb3duIHBsYXRmb3JtLXNwZWNpZmljIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVs
IGZpbGUuCisgICAgLy8gVGhlIGdvYWwgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0byBlbGlt
aW5hdGUgY29udGVudGlvbiBleGNlcHQgd2hlbiBjbG9uaW5nIG9yIGNsb3NpbmcgdGhlIHBvcnQs
IHNvIGVhY2ggc2lkZSBvZiB0aGUgY2hhbm5lbCBoYXMgaXRzIG93biBzZXBhcmF0ZSBtdXRleC4K
KyAgICBjbGFzcyBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCA6IHB1YmxpYyBUaHJlYWRTYWZl
U2hhcmVkPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiB7CisgICAgcHVibGljOgorICAgICAg
ICAvLyBDcmVhdGVzIGEgY2hhbm5lbCBlbnRhbmdsaW5nIHR3byBwb3J0cy4KKyAgICAgICAgc3Rh
dGljIHZvaWQgY3JlYXRlQ2hhbm5lbChQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiwgUGFzc1JlZlB0
cjxNZXNzYWdlUG9ydD4pOworCisgICAgICAgIC8vIEVudGFuZ2xlcyB0aGUgY2hhbm5lbCB3aXRo
IGEgcG9ydCAoY2FsbGVkIHdoZW4gYSBwb3J0IGhhcyBiZWVuIGNsb25lZCwgYWZ0ZXIgdGhlIGNs
b25lIGhhcyBiZWVuIG1hcnNoYWxsZWQgdG8gaXRzIG5ldyBvd25pbmcgdGhyZWFkIGFuZCBpcyBy
ZWFkeSB0byByZWNlaXZlIG1lc3NhZ2VzKS4KKyAgICAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0
aGUgZW50YW5nbGVtZW50IGZhaWxlZCBiZWNhdXNlIHRoZSBwb3J0IHdhcyBjbG9zZWQuCisgICAg
ICAgIGJvb2wgZW50YW5nbGVJZk9wZW4oTWVzc2FnZVBvcnQqKTsKKworICAgICAgICAvLyBEaXNl
bnRhbmdsZXMgdGhlIGNoYW5uZWwgZnJvbSBhIGdpdmVuIHBvcnQgc28gaXQgbm8gbG9uZ2VyIGZv
cndhcmRzIG1lc3NhZ2VzIHRvIHRoZSBwb3J0LiBDYWxsZWQgd2hlbiB0aGUgcG9ydCBpcyBiZWlu
ZyBjbG9uZWQgYW5kIG5vIG5ldyBvd25pbmcgdGhyZWFkIGhhcyB5ZXQgYmVlbiBlc3RhYmxpc2hl
ZC4KKyAgICAgICAgdm9pZCBkaXNlbnRhbmdsZSgpOworCisgICAgICAgIC8vIFNlbmRzIGEgbWVz
c2FnZSBhbmQgb3B0aW9uYWwgY2xvbmVkIHBvcnQgdG8gdGhlIHJlbW90ZSBwb3J0LgorICAgICAg
ICB2b2lkIHBvc3RNZXNzYWdlVG9SZW1vdGUoUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6
OkV2ZW50RGF0YT4pOworCisgICAgICAgIC8vIEV4dHJhY3RzIGEgbWVzc2FnZSBmcm9tIHRoZSBt
ZXNzYWdlIHF1ZXVlIGZvciB0aGlzIHBvcnQuCisgICAgICAgIGJvb2wgdHJ5R2V0TWVzc2FnZUZy
b21SZW1vdGUoT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiYpOworCisgICAg
ICAgIC8vIENsb3NlcyB0aGUgcG9ydCAoZW5zdXJlcyB0aGF0IG5vIGZ1cnRoZXIgbWVzc2FnZXMg
Y2FuIGJlIGFkZGVkIHRvIGVpdGhlciBxdWV1ZSkuCisgICAgICAgIHZvaWQgY2xvc2UoKTsKKwor
ICAgICAgICAvLyBVc2VkIGJ5IE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCkgdG8gcHJldmVudCBj
YWxsZXJzIGZyb20gcGFzc2luZyBhIHBvcnQncyBvd24gZW50YW5nbGVkIHBvcnQuCisgICAgICAg
IGJvb2wgaXNDb25uZWN0ZWRUbyhNZXNzYWdlUG9ydCopOworCisgICAgICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgY2hhbm5lbCBjdXJyZW50bHkgY29udGFpbnMgbWVzc2FnZXMgZm9yIHRoaXMg
cG9ydCwgb3IgbWF5IHJlY2VpdmUgbWVzc2FnZXMgaW4gdGhlIGZ1dHVyZSAoaXMgb3BlbikuCisg
ICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCk7CisKKyAgICAgICAgLy8gV3JhcHBlciBm
b3IgTWVzc2FnZVF1ZXVlIHRoYXQgYWxsb3dzIHVzIHRvIGRvIHRocmVhZCBzYWZlIHNoYXJpbmcg
YnkgdHdvIHByb3hpZXMuCisgICAgICAgIGNsYXNzIE1lc3NhZ2VQb3J0UXVldWUgOiBwdWJsaWMg
VGhyZWFkU2FmZVNoYXJlZDxNZXNzYWdlUG9ydFF1ZXVlPiB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlUG9ydFF1ZXVlKCkpOyB9CisKKyAgICAgICAgICAg
IGJvb2wgdHJ5R2V0TWVzc2FnZShPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+
JiByZXN1bHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRDaGFu
bmVsOjpFdmVudERhdGEqIGhvbGRlcjsKKyAgICAgICAgICAgICAgICBib29sIG1lc3NhZ2VBdmFp
bGFibGUgPSBtX3F1ZXVlLnRyeUdldE1lc3NhZ2UoaG9sZGVyKTsKKyAgICAgICAgICAgICAgICBp
ZiAobWVzc2FnZUF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChob2xk
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlQXZhaWxhYmxlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBib29sIGFwcGVuZEFuZENoZWNrRW1wdHkoUGFzc093blB0cjxN
ZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gbWVzc2FnZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9xdWV1ZS5hcHBlbmRBbmRDaGVja0VtcHR5KG1lc3NhZ2Uu
cmVsZWFzZSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBpc0VtcHR5KCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9xdWV1ZS5pc0VtcHR5KCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH5NZXNzYWdlUG9ydFF1ZXVlKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBNYW51YWxseSBmcmVlIGFueSBpdGVtcyBsZWZ0
IGluIHRoZSBxdWV1ZSwgc2luY2Ugd2UgY2FuJ3QgdXNlIE93blB0ciBpbnRlcm5hbGx5LgorICAg
ICAgICAgICAgICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhKiBkYXRhOworICAgICAg
ICAgICAgICAgIHdoaWxlIChtX3F1ZXVlLnRyeUdldE1lc3NhZ2UoZGF0YSkpCisgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBkYXRhOworICAgICAgICAgICAgfQorICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgTWVzc2FnZVBvcnRRdWV1ZSgpIHsgfQorCisgICAgICAgICAgICAvLyBPd25Q
dHIgaXMgTm9uY29weWFibGUsIHNvIHdlIGNhbid0IHVzZSBpdCBhcyB0aGUgdGVtcGxhdGUgdHlw
ZSBpbiBhIE1lc3NhZ2VRdWV1ZS4gU28gd2UganVzdCBzdG9yZSBhIHBvaW50ZXIgdG8gRXZlbnRE
YXRhIGFuZCBtYW51YWxseSBmcmVlIGl0IGluIHRoZSBkZXN0cnVjdG9yLgorICAgICAgICAgICAg
Ly8gRklYTUU6IFVzZSBhIGxvY2stZnJlZSBxdWV1ZSBpbXBsZW1lbnRhdGlvbiB0byBjb21wbGV0
ZWx5IGVsaW1pbmF0ZSBjb250ZW50aW9uIHdoZW4gc2VuZGluZy9yZWNlaXZpbmcgbWVzc2FnZXMu
CisgICAgICAgICAgICBNZXNzYWdlUXVldWU8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGEq
PiBtX3F1ZXVlOworICAgICAgICB9OworCisgICAgICAgIH5QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWw+IGNyZWF0ZShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+
IGluY29taW5nLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IG91dGdvaW5nKTsKKyAgICAg
ICAgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwoUGFzc1JlZlB0cjxNZXNzYWdlUG9ydFF1ZXVl
PiBpbmNvbWluZywgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydFF1ZXVlPiBvdXRnb2luZyk7CisKKyAg
ICAgICAgUGFzc1JlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gZW50YW5nbGVkQ2hh
bm5lbCgpOworICAgICAgICB2b2lkIHNldEVudGFuZ2xlZENoYW5uZWwoUGFzc1JlZlB0cjxQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4pOworCisgICAgICAgIHZvaWQgc2V0UmVtb3RlUG9ydChN
ZXNzYWdlUG9ydCopOworICAgICAgICBNZXNzYWdlUG9ydCogcmVtb3RlUG9ydCgpOworICAgICAg
ICB2b2lkIGNsb3NlSW50ZXJuYWwoKTsKKworICAgICAgICAvLyBNdXRleCB1c2VkIHRvIGVuc3Vy
ZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBvYmplY3QgaW50ZXJuYWxzLgorICAgICAgICBNdXRl
eCBtX211dGV4OworCisgICAgICAgIC8vIFBvaW50ZXIgdG8gb3VyIGVudGFuZ2xlZCBwYWlyIC0g
Y2xlYXJlZCB3aGVuIGNsb3NlKCkgaXMgY2FsbGVkLgorICAgICAgICBSZWZQdHI8UGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWw+IG1fZW50YW5nbGVkQ2hhbm5lbDsKKworICAgICAgICAvLyBSZWZl
cmVuY2UgdG8gdGhlIG1lc3NhZ2UgcXVldWUgZm9yIHRoZSAobG9jYWwpIGVudGFuZ2xlZCBwb3J0
LgorICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnRRdWV1ZT4gbV9pbmNvbWluZ1F1ZXVlOworICAg
ICAgICBSZWZQdHI8TWVzc2FnZVBvcnRRdWV1ZT4gbV9vdXRnb2luZ1F1ZXVlOworCisgICAgICAg
IC8vIFRoZSBwb3J0IHdlIGFyZSBjb25uZWN0ZWQgdG8gKHRoZSByZW1vdGUgcG9ydCkgLSB0aGlz
IGlzIHRoZSBwb3J0IHRoYXQgaXMgbm90aWZpZWQgd2hlbiBuZXcgbWVzc2FnZXMgYXJyaXZlLgor
ICAgICAgICBNZXNzYWdlUG9ydCogbV9yZW1vdGVQb3J0OworICAgIH07CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsX2gKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKaW5kZXggYmMxMTkyZC4uNDdkYzA0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTg3LDE0
ICs4NywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBvc3RNZXNzYWdlVGltZXIg
OiBwdWJsaWMgVGltZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBQb3N0TWVzc2FnZVRpbWVyKERPTVdp
bmRvdyogd2luZG93LCBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZlbnQsIFNlY3VyaXR5T3Jp
Z2luKiB0YXJnZXRPcmlnaW4pCisgICAgUG9zdE1lc3NhZ2VUaW1lcihET01XaW5kb3cqIHdpbmRv
dywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZU9yaWdpbiwgUGFz
c1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+
IGNoYW5uZWwsIFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4pCiAgICAgICAgIDogbV93aW5k
b3cod2luZG93KQotICAgICAgICAsIG1fZXZlbnQoZXZlbnQpCisgICAgICAgICwgbV9tZXNzYWdl
KG1lc3NhZ2UpCisgICAgICAgICwgbV9vcmlnaW4oc291cmNlT3JpZ2luKQorICAgICAgICAsIG1f
c291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX2NoYW5uZWwoY2hhbm5lbCkKICAgICAgICAgLCBt
X3RhcmdldE9yaWdpbih0YXJnZXRPcmlnaW4pCiAgICAgewogICAgIH0KIAotICAgIE1lc3NhZ2VF
dmVudCogZXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50LmdldCgpOyB9CisgICAgUGFzc1Jl
ZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGRvY3VtZW50
KQorICAgIHsKKyAgICAgICAgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQ7Cisg
ICAgICAgIGlmIChtX2NoYW5uZWwpIHsKKyAgICAgICAgICAgIG1lc3NhZ2VQb3J0ID0gTWVzc2Fn
ZVBvcnQ6OmNyZWF0ZSgqZG9jdW1lbnQpOworICAgICAgICAgICAgbWVzc2FnZVBvcnQtPmVudGFu
Z2xlKG1fY2hhbm5lbC5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBNZXNz
YWdlRXZlbnQ6OmNyZWF0ZShtX21lc3NhZ2UsIG1fb3JpZ2luLCAiIiwgbV9zb3VyY2UsIG1lc3Nh
Z2VQb3J0KTsKKyAgICB9CiAgICAgU2VjdXJpdHlPcmlnaW4qIHRhcmdldE9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fdGFyZ2V0T3JpZ2luLmdldCgpOyB9CiAKIHByaXZhdGU6CkBAIC0xMDQsNyAr
MTE1LDEwIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV93aW5k
b3c7Ci0gICAgUmVmUHRyPE1lc3NhZ2VFdmVudD4gbV9ldmVudDsKKyAgICBTdHJpbmcgbV9tZXNz
YWdlOworICAgIFN0cmluZyBtX29yaWdpbjsKKyAgICBSZWZQdHI8RE9NV2luZG93PiBtX3NvdXJj
ZTsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBtX2NoYW5uZWw7CiAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX3RhcmdldE9yaWdpbjsKIH07CiAKQEAgLTU5MSw5ICs2MDUsOSBA
QCB2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNz
YWdlUG9ydCogbWVzc2FnZVBvcnQsIGNvbgogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBuZXdNZXNzYWdlUG9ydDsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsPiBjaGFubmVsOwogICAgIGlmIChtZXNzYWdlUG9ydCkKLSAgICAgICAgbmV3TWVzc2FnZVBv
cnQgPSBtZXNzYWdlUG9ydC0+Y2xvbmUoZWMpOworICAgICAgICBjaGFubmVsID0gbWVzc2FnZVBv
cnQtPmRpc2VudGFuZ2xlKGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NjA1LDcgKzYxOSw3IEBAIHZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCwgY29uCiAgICAgU3RyaW5nIHNvdXJj
ZU9yaWdpbiA9IHNvdXJjZURvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpOwog
CiAgICAgLy8gU2NoZWR1bGUgdGhlIG1lc3NhZ2UuCi0gICAgUG9zdE1lc3NhZ2VUaW1lciogdGlt
ZXIgPSBuZXcgUG9zdE1lc3NhZ2VUaW1lcih0aGlzLCBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNz
YWdlLCBzb3VyY2VPcmlnaW4sICIiLCBzb3VyY2UsIG5ld01lc3NhZ2VQb3J0KSwgdGFyZ2V0Lmdl
dCgpKTsKKyAgICBQb3N0TWVzc2FnZVRpbWVyKiB0aW1lciA9IG5ldyBQb3N0TWVzc2FnZVRpbWVy
KHRoaXMsIG1lc3NhZ2UsIHNvdXJjZU9yaWdpbiwgc291cmNlLCBjaGFubmVsLnJlbGVhc2UoKSwg
dGFyZ2V0LmdldCgpKTsKICAgICB0aW1lci0+c3RhcnRPbmVTaG90KDApOwogfQogCkBAIC02MjYs
MTMgKzY0MCw4IEBAIHZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZVRpbWVyRmlyZWQoUG9zdE1l
c3NhZ2VUaW1lciogdCkKICAgICAgICAgfQogICAgIH0KIAotICAgIE1lc3NhZ2VQb3J0KiBtZXNz
YWdlUG9ydCA9IHRpbWVyLT5ldmVudCgpLT5tZXNzYWdlUG9ydCgpOwotICAgIEFTU0VSVCghbWVz
c2FnZVBvcnQgfHwgIW1lc3NhZ2VQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAg
IGlmIChtZXNzYWdlUG9ydCkKLSAgICAgICAgbWVzc2FnZVBvcnQtPmF0dGFjaFRvQ29udGV4dChk
b2N1bWVudCgpKTsKLQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRpc3BhdGNoRXZl
bnQodGltZXItPmV2ZW50KCksIGVjKTsKKyAgICBkaXNwYXRjaEV2ZW50KHRpbWVyLT5ldmVudChk
b2N1bWVudCgpKSwgZWMpOwogfQogCiBET01TZWxlY3Rpb24qIERPTVdpbmRvdzo6Z2V0U2VsZWN0
aW9uKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31420</attachid>
            <date>2009-06-17 10:46:58 -0700</date>
            <delta_ts>2009-06-18 15:57:04 -0700</delta_ts>
            <desc>Reflecting Levin&apos;s latest comment&apos;s</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>84765</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBjYmM0N2FkLi5iZTVjNTBiIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMDktMDYtMTYgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MDQzPgorICAgICAgICBBZGRlZCBzdXBwb3J0
IGZvciBtdWx0aS10aHJlYWRlZCBNZXNzYWdlUG9ydHMuCisKKyAgICAgICAqIHd0Zi9NZXNzYWdl
UXVldWUuaDoKKyAgICAgICAgKFdURjo6OjphcHBlbmRBbmRDaGVja0VtcHR5KToKKyAgICAgICAg
ICAgIEFkZGVkIEFQSSB0byB0ZXN0IHdoZXRoZXIgdGhlIHF1ZXVlIHdhcyBlbXB0eSBiZWZvcmUg
YWRkaW5nIGFuIGVsZW1lbnQuCisgIAogMjAwOS0wNi0xMiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L01lc3NhZ2VRdWV1ZS5oCmluZGV4IDk1NDlmMzcuLjc3MjFkYmEgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvTWVz
c2FnZVF1ZXVlLmgKQEAgLTQ3LDkgKzQ3LDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIERhdGFUeXBlPgogICAgIGNsYXNzIE1lc3NhZ2VRdWV1ZSA6IE5vbmNvcHlh
YmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1lc3NhZ2VRdWV1ZSgpIDogbV9raWxsZWQoZmFs
c2UpIHt9CisgICAgICAgIE1lc3NhZ2VRdWV1ZSgpIDogbV9raWxsZWQoZmFsc2UpIHsgfQogICAg
ICAgICAKICAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgRGF0YVR5cGUmKTsKKyAgICAgICAgYm9v
bCBhcHBlbmRBbmRDaGVja0VtcHR5KGNvbnN0IERhdGFUeXBlJik7CiAgICAgICAgIHZvaWQgcHJl
cGVuZChjb25zdCBEYXRhVHlwZSYpOwogICAgICAgICBib29sIHdhaXRGb3JNZXNzYWdlKERhdGFU
eXBlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KQEAgLTgxLDYgKzgy
LDE3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKICAg
ICB9CiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXVlIHdhcyBlbXB0eSBiZWZvcmUg
dGhlIGl0ZW0gd2FzIGFkZGVkLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgorICAg
IGlubGluZSBib29sIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OmFwcGVuZEFuZENoZWNrRW1wdHko
Y29uc3QgRGF0YVR5cGUmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
KG1fbXV0ZXgpOworICAgICAgICBib29sIHdhc0VtcHR5ID0gbV9xdWV1ZS5pc0VtcHR5KCk7Cisg
ICAgICAgIG1fcXVldWUuYXBwZW5kKG1lc3NhZ2UpOworICAgICAgICBtX2NvbmRpdGlvbi5zaWdu
YWwoKTsKKyAgICAgICAgcmV0dXJuIHdhc0VtcHR5OworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIERhdGFUeXBlPgogICAgIGlubGluZSB2b2lkIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46
OnByZXBlbmQoY29uc3QgRGF0YVR5cGUmIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQyYWU4NmIu
LjViMzljMmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wNi0xNiAgRHJldyBXaWxzb24g
IDxhdHdpbHNvbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjUwNDM+CisgICAgICAgIFVwZGF0ZWQgTWVzc2FnZUNoYW5uZWwvTWVzc2FnZVBvcnRzIHRlc3Rz
IHRvIHJlZmxlY3QgbGF0ZXN0IHNwZWMgKGNsb3NlIGV2ZW50IGhhcyBiZWVuIHJlbW92ZWQpLgor
ICAgICAgICBBZGRlZCBtb3JlIHRlc3RzIG9mIHBvcnQgY2xvbmluZy4KKworICAgICAgICAqIGZh
c3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMi5odG1sLWRpc2FibGVkOgorICAgICAgICAq
IGZhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMy5odG1sLWRpc2FibGVkOgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwtZGlzYWJsZWQ6CisgICAgICAg
ICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWNsb25lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWNsb25lLmh0bWwtZGlzYWJsZWQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW5vLXdyYXBwZXItZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtb25jbG9zZS1leHBl
Y3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW9u
Y2xvc2UuaHRtbC1kaXNhYmxlZDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tZXNz
YWdlLXBvcnQuaHRtbC1kaXNhYmxlZDoKKwogMjAwOS0wNi0xMiAgSmFuIE1pY2hhZWwgQWxvbnpv
ICA8am1hbG9uem9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5v
cm9uaGEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5u
ZWwtZ2MtMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNo
YW5uZWwtZ2MtMi1leHBlY3RlZC50eHQKaW5kZXggYzVhZmE2MC4uNjViODA4NyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTItZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLWV4
cGVjdGVkLnR4dApAQCAtMSw1ICsxLDQgQEAKIFRlc3QgdGhhdCBNZXNzYWdlUG9ydCBjbG9zZSBl
dmVudCBnZXRzIGRlbGl2ZXJlZCAod2l0aG91dCBjcmFzaGluZykgZXZlbiBpZiB0aGUgY2hhbm5l
bCBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAKLW9uY2xvc2UKLWNsb3NlIGxpc3RlbmVy
CitET05FCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hh
bm5lbC1nYy0yLmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdl
LWNoYW5uZWwtZ2MtMi5odG1sLWRpc2FibGVkCmluZGV4IGUwYjczNDcuLjYxZTVmMDEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0yLmh0bWwt
ZGlzYWJsZWQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdj
LTIuaHRtbC1kaXNhYmxlZApAQCAtNiw3ICs2LDYgQEAgZnVuY3Rpb24gZ2MoKQogewogICAgIGlm
ICh3aW5kb3cuR0NDb250cm9sbGVyKQogICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxl
Y3QoKTsKLQogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeyAvLyA+IGZvcmNl
IGdhcmJhZ2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlvbnMgYmVm
b3JlIGEgY29sbGVjdCkKICAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCJhYmMiKTsKICAgICB9
CkBAIC0yNCw5ICsyMyw2IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKIAog
dmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CiAKLWNoYW5uZWwucG9ydDEub25jbG9z
ZSA9IGZ1bmN0aW9uKCkgeyBsb2coIm9uY2xvc2UiKTsgc2V0VGltZW91dChmdW5jdGlvbigpIHsg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOyBnYygpOyB9LCAwKSB9Ci1jaGFubmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIo
ImNsb3NlIiwgZnVuY3Rpb24oKSB7IGxvZygiY2xvc2UgbGlzdGVuZXIiKTsgZ2MoKTsgfSwgZmFs
c2UpOwotCiBnYygpOwogY2hhbm5lbC5wb3J0MS5zdGFydCgpOwogY2hhbm5lbC5wb3J0Mi5wb3N0
TWVzc2FnZSgibXNnIik7CkBAIC0zNSw3ICszMSwxNSBAQCBnYygpOwogY2hhbm5lbC5wb3J0MS5j
bG9zZSgpOwogY2hhbm5lbC5wb3J0Mi5jbG9zZSgpOwogZ2MoKTsKKworc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICBsb2coIkRPTkUiKTsKKyAgICBnYygpOworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30sIDApOwogY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKIGdjKCk7CisKIDwv
c2NyaXB0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1jaGFubmVsLWdjLTMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bWVzc2FnZS1jaGFubmVsLWdjLTMtZXhwZWN0ZWQudHh0CmluZGV4IGFhOWJiNWQuLjhhZjg5MjYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0z
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5u
ZWwtZ2MtMy1leHBlY3RlZC50eHQKQEAgLTMsNSArMyw1IEBAIFRlc3QgdGhhdCBNZXNzYWdlUG9y
dCBtZXNzYWdlcyBhcmUgZGVsaXZlcmVkIGV2ZW4gaWYgYm90aCBwb3J0cyBhcmUgaW5hY2Nlc3Np
YmxlCiBTaG91bGQgc2F5IFBBU1MgdHdpY2UuCiAKIFBBU1M6IG1lc3NhZ2UgZGVsaXZlcmVkLiBQ
b3J0OiBbb2JqZWN0IE1lc3NhZ2VQb3J0XQotUEFTUzogY2xvc2UgbWVzc2FnZSBkZWxpdmVyZWQu
IFBvcnQ6IFtvYmplY3QgTWVzc2FnZVBvcnRdCitQQVNTOiBwb3J0IGNsb3NlZC4KIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTMuaHRtbC1k
aXNhYmxlZCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy0zLmh0
bWwtZGlzYWJsZWQKaW5kZXggZjE1ODY3Zi4uYjkwNmFhNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTMuaHRtbC1kaXNhYmxlZAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtMy5odG1sLWRpc2FibGVk
CkBAIC0yOCw3ICsyOCw2IEBAIGZ1bmN0aW9uIHRlc3QxKCkKICAgICB2YXIgY2hhbm5lbCA9IG5l
dyBNZXNzYWdlQ2hhbm5lbDsKICAgICAKICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1
bmN0aW9uKGV2dCkgeyBsb2coIlBBU1M6IG1lc3NhZ2UgZGVsaXZlcmVkLiBQb3J0OiAiICsgZXZ0
LnRhcmdldCk7IHRlc3QyKCk7IH0KLSAgICBjaGFubmVsLnBvcnQxLnN0YXJ0KCk7CiAgICAgY2hh
bm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgibXNnIik7CiAgICAgCiAgICAgY2hhbm5lbCA9IDA7CkBA
IC0zOSwxMSArMzgsMTMgQEAgZnVuY3Rpb24gdGVzdDIoKQogewogICAgIHZhciBjaGFubmVsID0g
bmV3IE1lc3NhZ2VDaGFubmVsOwogICAgIAotICAgIGNoYW5uZWwucG9ydDEub25jbG9zZSA9IGZ1
bmN0aW9uKGV2dCkgeyBsb2coIlBBU1M6IGNsb3NlIG1lc3NhZ2UgZGVsaXZlcmVkLiBQb3J0OiAi
ICsgZXZ0LnRhcmdldCk7IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsgfQogICAgIGNoYW5uZWwucG9ydDIuY2xvc2UoKTsK
ICAgICAKICAgICBjaGFubmVsID0gMDsKICAgICBnYygpOworICAgIGxvZygiUEFTUzogcG9ydCBj
bG9zZWQuIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogfQogCiB0ZXN0MSgpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy1leHBlY3Rl
ZC50eHQKaW5kZXggNTRjNzVlMC4uOTQ4ZjNjZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtZXhwZWN0ZWQudHh0CkBAIC0zLDYgKzMs
NSBAQCBUZXN0IHNvbWUgY2FzZXMgb2YgTWVzc2FnZVBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uLgog
U2hvdWxkIGJlICdiYXInOiBiYXIKIG9ubWVzc2FnZQogbWVzc2FnZSBsaXN0ZW5lcgotb25jbG9z
ZQotY2xvc2UgbGlzdGVuZXIKK0RPTkUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MuaHRtbC1kaXNhYmxlZAppbmRleCA1ZTQ5ZTlkLi5j
YWExMDhlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5u
ZWwtZ2MuaHRtbC1kaXNhYmxlZAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdl
LWNoYW5uZWwtZ2MuaHRtbC1kaXNhYmxlZApAQCAtMjksOCArMjksNiBAQCBnYygpOwogbG9nKCJT
aG91bGQgYmUgJ2Jhcic6ICIgKyBjaGFubmVsLnBvcnQxLmZvbyk7CiAKIGNoYW5uZWwucG9ydDEu
b25tZXNzYWdlID0gZnVuY3Rpb24oKSB7IGxvZygib25tZXNzYWdlIik7IH0KLWNoYW5uZWwucG9y
dDEub25jbG9zZSA9IGZ1bmN0aW9uKCkgeyBsb2coIm9uY2xvc2UiKTsgc2V0VGltZW91dChmdW5j
dGlvbigpIHsgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpIH0sIDApIH0KLWNoYW5uZWwucG9ydDEuYWRkRXZlbnRMaXN0ZW5l
cigiY2xvc2UiLCBmdW5jdGlvbigpIHsgbG9nKCJjbG9zZSBsaXN0ZW5lciIpOyB9LCBmYWxzZSk7
CiBjaGFubmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbigpIHsg
bG9nKCJtZXNzYWdlIGxpc3RlbmVyIik7IH0sIGZhbHNlKTsKIAogZ2MoKTsKQEAgLTQyLDUgKzQw
LDEyIEBAIGNoYW5uZWwucG9ydDEuY2xvc2UoKTsKIGNoYW5uZWwucG9ydDIuY2xvc2UoKTsKIAog
Z2MoKTsKKworc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICBsb2coIkRPTkUiKTsKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCkKK30sIDApOworCiA8L3NjcmlwdD4KIDwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1jbG9uZS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtY2xvbmUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzI3OGEKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtY2xvbmUtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3RzIHZhcmlvdXMgdXNlIGNhc2VzIHdoZW4g
Y2xvbmluZyBNZXNzYWdlUG9ydHMuCisKK1Nob3VsZCBiZSBhIHNlcmllcyBvZiBTVUNDRVNTIG1l
c3NhZ2VzLCBmb2xsb3dlZCB3aXRoIERPTkUuCisKK1NVQ0NFU1M6IFBvc3RpbmcgcG9ydCB0byBp
dHNlbGY6IEVycm9yOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMQorU1VDQ0VT
UzogUG9zdGluZyBlbnRhbmdsZWQgcG9ydDogRXJyb3I6IElOVkFMSURfU1RBVEVfRVJSOiBET00g
RXhjZXB0aW9uIDExCitTVUNDRVNTOiBQb3N0aW5nIGNsb25lZCBwb3J0LgorU1VDQ0VTUzogUG9z
dGVkIG1lc3NhZ2VzIHRvIGNsb25lZCBwb3J0LgorU1VDQ0VTUzogQ2xvbmVkIGJvdGggZW5kcG9p
bnRzIG9mIGEgY2hhbm5lbC4KK1NVQ0NFU1M6IEdvdCBjbG9zZWQgcG9ydCB3aXRoIGV2ZW50IG1l
c3NhZ2UgY2xvc2VkCitET05FCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L21lc3NhZ2UtcG9ydC1jbG9uZS5odG1sLWRpc2FibGVkIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvbWVzc2FnZS1wb3J0LWNsb25lLmh0bWwtZGlzYWJsZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOTVjZTI5NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1jbG9uZS5odG1sLWRpc2FibGVkCkBAIC0wLDAgKzEsMTI4
IEBACis8Ym9keT4KKzxwPlRlc3RzIHZhcmlvdXMgdXNlIGNhc2VzIHdoZW4gY2xvbmluZyBNZXNz
YWdlUG9ydHMuPC9wPgorPHA+U2hvdWxkIGJlIGEgc2VyaWVzIG9mIFNVQ0NFU1MgbWVzc2FnZXMs
IGZvbGxvd2VkIHdpdGggRE9ORS48L3A+Cis8cHJlIGlkPWxvZz48L3ByZT4KKzxzY3JpcHQ+CisK
K2Z1bmN0aW9uIGdjKCkKK3sKKyAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICAgICAg
cmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyBpKyspIHsgLy8gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIChGRiByZXF1aXJlcyBh
Ym91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBjb2xsZWN0KS4KKyAgICAgICAgdmFyIHMgPSBu
ZXcgU3RyaW5nKCJhYmMiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQorewor
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lckhUTUwgKz0gbWVzc2FnZSAr
ICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVs
OworY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBjaGFubmVsLnBvcnQyLm9ubWVzc2FnZSA9IGZ1
bmN0aW9uKGV2dCkgeworICAgIGZhaWwoIkZBSUw6IFNob3VsZCBub3QgaGF2ZSByZWNlaXZlZCBt
ZXNzYWdlOiAiICsgZXZ0LmRhdGEpOworfQordHJ5IHsKKyAgICBjaGFubmVsLnBvcnQxLnBvc3RN
ZXNzYWdlKCJtc2ciLCBjaGFubmVsLnBvcnQxKTsKKyAgICBsb2coIkZBSUw6IFBvc3RpbmcgcG9y
dCB0byBpdHNlbGYgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKK30gY2F0Y2ggKGV4KSB7
CisgICAgbG9nKCJTVUNDRVNTOiBQb3N0aW5nIHBvcnQgdG8gaXRzZWxmOiAiICsgZXgpOworfQor
Cit0cnkgeworICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwucG9y
dDIpOworICAgIGxvZygiRkFJTDogUG9zdGluZyBwb3J0IHRvIGVudGFuZ2xlZCBwYWlyIHNob3Vs
ZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Cit9IGNhdGNoIChleCkgeworICAgIGxvZygiU1VDQ0VT
UzogUG9zdGluZyBlbnRhbmdsZWQgcG9ydDogIiArIGV4KTsKK30KKworY2hhbm5lbCA9IG5ldyBN
ZXNzYWdlQ2hhbm5lbDsKK3ZhciBjaGFubmVsMiA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKK2NoYW5u
ZWwucG9ydDEucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwyLnBvcnQxKTsKKworLy8gU2hvdWxk
IG5vdCBiZSBhYmxlIHRvIHBvc3QgYSBjbG9uZWQgcG9ydC4KK3RyeSB7CisgICAgY2hhbm5lbC5w
b3J0MS5wb3N0TWVzc2FnZSgibXNnIiwgY2hhbm5lbDIucG9ydDEpOworICAgIGxvZygiRkFJTDog
UG9zdGluZyBjbG9uZWQgcG9ydCBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiIpOworfSBjYXRj
aCAoZXgpIHsKKyAgICBsb2coIlNVQ0NFU1M6IFBvc3RpbmcgY2xvbmVkIHBvcnQuIik7Cit9CisK
Ky8vIFRlc3QgcG9zdGluZyBtZXNzYWdlcyB0byBhIHBvcnQgaW4gY2xvbmVkIHN0YXRlLgorCit2
YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKK3ZhciBjaGFubmVsMiA9IG5ldyBNZXNz
YWdlQ2hhbm5lbDsKKworLy8gUG9zdCBtZXNzYWdlcyBiZWZvcmUgYW5kIGFmdGVyIGNsb25lIHRv
IG1ha2Ugc3VyZSBvcmRlcmluZyBpcyBwcmVzZXJ2ZWQgYW5kIGFsbCBtZXNzYWdlcyBhcmUgcmVj
ZWl2ZWQuCitjaGFubmVsMi5wb3J0Mi5wb3N0TWVzc2FnZSgiMSIpOyAKK2NoYW5uZWwucG9ydDEu
cG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwyLnBvcnQxKTsKK2NoYW5uZWwyLnBvcnQyLnBvc3RN
ZXNzYWdlKCIyIik7CitjaGFubmVsMi5wb3J0Mi5wb3N0TWVzc2FnZSgiMyIpOworY2hhbm5lbC5w
b3J0Mi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICB2YXIgbWVzc2FnZUluZGV4ID0g
MTsKKyAgICBldnQubWVzc2FnZVBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAg
ICAgIGlmIChldnQuZGF0YSAhPSBtZXNzYWdlSW5kZXgpCisgICAgICAgICAgICBsb2coIkZBSUw6
IEdvdCBtZXNzYWdlICIgKyBldnQuZGF0YSArICIsIGV4cGVjdGVkICIgKyBtZXNzYWdlSW5kZXgp
OworICAgICAgICBtZXNzYWdlSW5kZXgrKzsKKyAgICAgICAgaWYgKG1lc3NhZ2VJbmRleCA9PSA0
KSB7CisgICAgICAgICAgICBsb2coIlNVQ0NFU1M6IFBvc3RlZCBtZXNzYWdlcyB0byBjbG9uZWQg
cG9ydC4iKTsKKyAgICAgICAgICAgIHRlc3REb3VibHlDbG9uZWRQb3J0KCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3REb3VibHlDbG9uZWRQb3J0KCkKK3sKKyAgICB2YXIg
Y2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICB2YXIgY2hhbm5lbDIgPSBuZXcgTWVz
c2FnZUNoYW5uZWw7CisgICAgY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSgibXNnIiwgY2hhbm5l
bDIucG9ydDEpOworICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwy
LnBvcnQyKTsKKyAgICBnYygpOworICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rp
b24oZXZ0KSB7CisgICAgICAgIGV2dC5tZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgidGVzdG1lIik7
CisgICAgfQorICAgIGNoYW5uZWwucG9ydDIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7Cisg
ICAgICAgIGV2dC5tZXNzYWdlUG9ydC5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAg
ICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gInRlc3RtZSIpCisgICAgICAgICAgICAgICAgbG9nKCJT
VUNDRVNTOiBDbG9uZWQgYm90aCBlbmRwb2ludHMgb2YgYSBjaGFubmVsLiIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxvZygiRkFJTDogSW52YWxpZCBtZXNzYWdlIGFycml2
ZWQ6ICIgKyBldnQuZGF0YSk7CisgICAgICAgICAgICB0ZXN0UG9zdENsb3NlUG9ydCgpOworICAg
ICAgICB9CisgICAgfQorICAgCit9CisKKy8vICpTaG91bGQqIGJlIGFibGUgdG8gcG9zdCBhIGNs
b3NlZCBwb3J0LgorZnVuY3Rpb24gdGVzdFBvc3RDbG9zZVBvcnQoKQoreworICAgIHZhciBjaGFu
bmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsOworICAgIHZhciBjaGFubmVsMiA9IG5ldyBNZXNzYWdl
Q2hhbm5lbDsKKyAgICBjaGFubmVsMi5wb3J0Mi5jbG9zZSgpOworICAgIGNoYW5uZWwucG9ydDEu
cG9zdE1lc3NhZ2UoImNsb3NlZCIsIGNoYW5uZWwyLnBvcnQyKTsKKyAgICBjaGFubmVsLnBvcnQy
Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBpZiAoIWV2dC5tZXNzYWdlUG9y
dCkKKyAgICAgICAgICAgIGxvZygiRkFJTDogQ2xvc2VkIHBvcnQgbm90IHNlbnQuIik7CisgICAg
ICAgIGVsc2UgaWYgKGV2dC5kYXRhICE9ICJjbG9zZWQiKQorICAgICAgICAgICAgbG9nKCJGQUlM
OiBVbmV4cGVjdGVkIG1lc3NhZ2U6ICIgKyBldnQuZGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGxvZygiU1VDQ0VTUzogR290IGNsb3NlZCBwb3J0IHdpdGggZXZlbnQgbWVzc2FnZSAi
ICsgZXZ0LmRhdGEpOworICAgICAgICBkb25lKCk7CisgICAgfQorfQorCitmdW5jdGlvbiBkb25l
KCkKK3sKKyAgICBsb2coIkRPTkUiKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKzwv
c2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2Ut
cG9ydC1leHBlY3RlZC50eHQKaW5kZXggNDc5YjMxNC4uYzliZjYzNiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZXhwZWN0ZWQudHh0CkBAIC00LDggKzQs
NyBAQCBTaG91bGQgYmUgYSBzZXJpZXMgb2YgU1VDQ0VTUyBtZXNzYWdlcywgZm9sbG93ZWQgd2l0
aCBET05FLgogCiBTaW1wbGUgZXhjaGFuZ2U6IFNVQ0NFU1MKIFBvc3RlZCBwb3J0OiBTVUNDRVNT
Ci1Db252ZXJzYXRpb246IFNVQ0NFU1MKLUEgcG9ydCBpcyBhY3RpdmU6IFNVQ0NFU1MKLUEgY2xv
c2VkIHBvcnQgaXMgaW5hY3RpdmU6IFNVQ0NFU1MKK0V2ZW50IExpc3RlbmVyOiBTVUNDRVNTCitD
bG9zZWQgcG9ydDogU1VDQ0VTUwogRE9ORQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9tZXNzYWdlLXBvcnQtbm8td3JhcHBlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtbm8td3JhcHBlci1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhYmQ0MAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1uby13cmFwcGVyLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDQgQEAKK1Rlc3QgdGhhdCBkZWxpdmVyaW5nIGEgbWVzc2FnZSB0byBh
IHBvcnQgdGhhdCB3YXMgbmV2ZXIgcmVmZXJlbmNlZCBmcm9tIEpTIGRvZXNuJ3QgY2F1c2UgYSBj
cmFzaC4KKworUEFTUworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNz
YWdlLXBvcnQtb25jbG9zZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
ZXNzYWdlLXBvcnQtb25jbG9zZS1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDczYzVlMGQuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0LW9uY2xvc2UtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCww
IEBACi1UZXN0IHRoYXQgY2xvc2UgZXZlbnQgaGFuZGxlciBpcyBpbnZva2VkIHdoZW4gYSBNZXNz
YWdlUG9ydCBpcyBjbG9zZWQuCi0KLVBBU1MKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbWVzc2FnZS1wb3J0LW9uY2xvc2UuaHRtbC1kaXNhYmxlZCBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1vbmNsb3NlLmh0bWwtZGlzYWJsZWQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZDViZmEuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LW9uY2xvc2UuaHRtbC1kaXNhYmxlZAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwMSArMCwwIEBACi08Ym9keT4KLTxwPlRlc3QgdGhhdCBjbG9zZSBldmVudCBo
YW5kbGVyIGlzIGludm9rZWQgd2hlbiBhIE1lc3NhZ2VQb3J0IGlzIGNsb3NlZC48L3A+Ci08cHJl
IGlkPWxvZz48L3ByZT4KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBnYygpCi17Ci0gICAgaWYgKHdpbmRv
dy5HQ0NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOwot
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7IC8vID4gZm9yY2UgZ2FyYmFn
ZSBjb2xsZWN0aW9uIChGRiByZXF1aXJlcyBhYm91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBj
b2xsZWN0KQotICAgICAgICB2YXIgcyA9IG5ldyBTdHJpbmcoImFiYyIpOwotICAgIH0KLX0KLQot
ZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCi17Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxv
ZyIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOwotfQotCi1pZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLX0KLQotZnVuY3Rp
b24gdGVzdCgpCi17Ci0gICAgLy8gU2luZ2xlIGZyYW1lLgotICAgIHZhciBjaGFubmVsID0gbmV3
IE1lc3NhZ2VDaGFubmVsOwotICAgIHZhciBjbG9zZUNvdW50ID0gMDsKLSAgICBmdW5jdGlvbiBv
bmNsb3NlKCkKLSAgICB7Ci0gICAgICAgICsrY2xvc2VDb3VudDsKLSAgICAgICAgaWYgKGNsb3Nl
Q291bnQgPT0gNCkKLSAgICAgICAgICAgIHRlc3QyKCk7Ci0gICAgfQotCi0gICAgY2hhbm5lbC5w
b3J0MS5vbmNsb3NlID0gb25jbG9zZTsKLSAgICBjaGFubmVsLnBvcnQyLm9uY2xvc2UgPSBvbmNs
b3NlOwotICAgIGNoYW5uZWwucG9ydDEuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbmNsb3Nl
LCBmYWxzZSk7Ci0gICAgY2hhbm5lbC5wb3J0Mi5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsIG9u
Y2xvc2UsIGZhbHNlKTsKLSAgICAKLSAgICBnYygpOwotICAgIGNoYW5uZWwucG9ydDEuc3RhcnQo
KTsKLSAgICBjaGFubmVsLnBvcnQyLnN0YXJ0KCk7Ci0gICAgY2hhbm5lbC5wb3J0MS5jbG9zZSgp
OwotfQotCi1mdW5jdGlvbiB0ZXN0MigpCi17Ci0gICAgLy8gQ3Jvc3MtZnJhbWUuCi0gICAgdmFy
IGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7Ci0gICAgd2luZG93LmZyYW1lc1swXS5wb3N0
TWVzc2FnZSgibXNnIiwgY2hhbm5lbC5wb3J0MiwgIioiKTsKLQotICAgIHZhciBtYWluUG9ydCA9
IGNoYW5uZWwucG9ydDE7Ci0gICAgbWFpblBvcnQuc3RhcnQoKTsKLQotICAgIHZhciBjbG9zZUNv
dW50ID0gMDsKLSAgICBmdW5jdGlvbiBvbmNsb3NlKCkKLSAgICB7Ci0gICAgICAgICsrY2xvc2VD
b3VudDsKLSAgICAgICAgaWYgKGNsb3NlQ291bnQgPT0gMikKLSAgICAgICAgICAgIHRlc3QzKCk7
Ci0gICAgfQotCi0gICAgbWFpblBvcnQucG9zdE1lc3NhZ2UoImNsb3NlUG9ydCIpOwotICAgIG1h
aW5Qb3J0Lm9uY2xvc2UgPSBvbmNsb3NlOwotICAgIG1haW5Qb3J0LmFkZEV2ZW50TGlzdGVuZXIo
ImNsb3NlIiwgb25jbG9zZSwgZmFsc2UpOwotICAgIGdjKCk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3Qz
KCkKLXsKLSAgICAvLyBEb2N1bWVudCBkZXN0cm95ZWQuCi0gICAgdmFyIGNoYW5uZWwgPSBuZXcg
TWVzc2FnZUNoYW5uZWw7Ci0gICAgd2luZG93LmZyYW1lc1swXS5wb3N0TWVzc2FnZSgibXNnIiwg
Y2hhbm5lbC5wb3J0MiwgIioiKTsKLQotICAgIHZhciBtYWluUG9ydCA9IGNoYW5uZWwucG9ydDE7
Ci0gICAgbWFpblBvcnQuc3RhcnQoKTsKLQotICAgIHZhciBjbG9zZUNvdW50ID0gMDsKLSAgICBm
dW5jdGlvbiBvbmNsb3NlKCkKLSAgICB7Ci0gICAgICAgICsrY2xvc2VDb3VudDsKLSAgICAgICAg
bG9nKCJGQUlMOiB1bmV4cGVjdGVkIGNsb3NlIGV2ZW50IGZyb20gZG9jdW1lbnQgZGVzdHJ1Y3Rp
b24uIik7Ci0gICAgfQotCi0gICAgbWFpblBvcnQucG9zdE1lc3NhZ2UoImNsb3NlRnJhbWUiKTsK
LSAgICBtYWluUG9ydC5vbmNsb3NlID0gb25jbG9zZTsKLSAgICBtYWluUG9ydC5hZGRFdmVudExp
c3RlbmVyKCJjbG9zZSIsIG9uY2xvc2UsIGZhbHNlKTsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgewotICAgICAgICBpZiAoY2xvc2VDb3VudCA9PSAwKQotICAgICAgICAgICAgbG9nKCJQQVNT
Iik7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci0gICAgfSwgNTApOwotCi0gICAg
Z2MoKTsKLX0KLTwvc2NyaXB0PgotPGlmcmFtZSBzcmM9InJlc291cmNlcy9tZXNzYWdlLXBvcnQt
aWZyYW1lLmh0bWwiIG9ubG9hZD0idGVzdCgpIj48L2lmcmFtZT4KLTwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC5odG1sLWRpc2FibGVkIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0Lmh0bWwtZGlzYWJsZWQKaW5kZXgg
MGY0YWIxNS4uZDYzYjExNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0Lmh0bWwtZGlzYWJsZWQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0Lmh0bWwtZGlzYWJsZWQKQEAgLTI4LDcgKzI4LDYgQEAgZnVuY3Rpb24gdGVzdCgp
CiAgICAgICAgICAgICBsb2coIlNpbXBsZSBleGNoYW5nZTogRkFJTC4gR290IG1lc3NhZ2UgJyIg
KyBldnQuZGF0YSArICInIGZyb20gJyIgKyBldnQub3JpZ2luICsgIicuIik7CiAgICAgICAgIHRl
c3QyKCk7CiAgICAgfTsKLSAgICBtYWluUG9ydC5zdGFydCgpOwogfQogCiBmdW5jdGlvbiB0ZXN0
MigpCkBAIC00MiwzNCArNDEsNTMgQEAgZnVuY3Rpb24gdGVzdDIoKQogICAgICAgICAgICAgbG9n
KCJQb3N0ZWQgcG9ydDogRkFJTC4gR290IG1lc3NhZ2UgJyIgKyBldnQuZGF0YSArICInIGZyb20g
JyIgKyBldnQub3JpZ2luICsgIicuIik7CiAgICAgICAgIHRlc3QzKCk7CiAgICAgfTsKLSAgICBj
aGFubmVsLnBvcnQxLnN0YXJ0KCk7CiB9CiAKIGZ1bmN0aW9uIHRlc3QzKCkKIHsKLSAgICB2YXIg
cG9ydCA9IG1haW5Qb3J0LnN0YXJ0Q29udmVyc2F0aW9uKCJuZXdDb252ZXJzYXRpb24iKTsKLSAg
ICBwb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgewotICAgICAgICBpZiAoZXZ0LmRhdGEg
PT0gImhleSIgJiYgZXZ0Lm9yaWdpbiA9PSAiIikKLSAgICAgICAgICAgIGxvZygiQ29udmVyc2F0
aW9uOiBTVUNDRVNTIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvZygiQ29udmVyc2F0
aW9uOiBGQUlMLiBHb3QgbWVzc2FnZSAnIiArIGV2dC5kYXRhICsgIicgZnJvbSAnIiArIGV2dC5v
cmlnaW4gKyAiJy4iKTsKLSAgICAgICAgdGVzdDQoKTsKLSAgICB9OwotICAgIHBvcnQuc3RhcnQo
KTsKKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICBjaGFubmVsLnBv
cnQxLnBvc3RNZXNzYWdlKCIxIik7CisgICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTsKKyAgICBjaGFu
bmVsLnBvcnQyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihldnQpIHsKKyAg
ICAgICAgaWYgKHN0YXJ0ZWQpIHsKKyAgICAgICAgICAgIGxvZygiRXZlbnQgTGlzdGVuZXI6IFNV
Q0NFU1MiKTsKKyAgICAgICAgICAgIHRlc3Q0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbG9nKCJFdmVudCBMaXN0ZW5lcjogRkFJTC4gRXZlbnQgbGlzdGVuZXIgY2FsbGVkIGJlZm9y
ZSBzdGFydCgpIik7CisgICB9KTsKKyAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICBj
aGFubmVsLnBvcnQyLnN0YXJ0KCk7CisgICAgICBzdGFydGVkID0gdHJ1ZTsKKyAgIH0sIDEwMCk7
CisgICAgCiB9CiAKIGZ1bmN0aW9uIHRlc3Q0KCkKIHsKLSAgICBsb2coIkEgcG9ydCBpcyBhY3Rp
dmU6ICIgKyAobWFpblBvcnQuYWN0aXZlID8gIlNVQ0NFU1MiIDogIkZBSUwiKSk7Ci0KLSAgICBt
YWluUG9ydC5jbG9zZSgpOwotCi0gICAgbG9nKCJBIGNsb3NlZCBwb3J0IGlzIGluYWN0aXZlOiAi
ICsgKG1haW5Qb3J0LmFjdGl2ZSA/ICJGQUlMIiA6ICJTVUNDRVNTIikpOwotCi0gICAgbG9nKCJE
T05FIik7CisgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CisgICAgY2hhbm5l
bC5wb3J0MS5wb3N0TWVzc2FnZSgiMSIpOworICAgIGNoYW5uZWwucG9ydDEuY2xvc2UoKTsKKyAg
ICBjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCIyIik7CisgICAgY2hhbm5lbC5wb3J0Mi5vbm1l
c3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgaWYgKGV2dC5kYXRhID09ICIxIikgewor
ICAgICAgICAgICAgbG9nKCJDbG9zZWQgcG9ydDogU1VDQ0VTUyIpOworICAgICAgICAgICAgdGVz
dDUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsb2coIkNsb3NlZCBwb3J0OiBGQUlM
LiBHb3QgbWVzc2FnZTogIiArIGV2dC5kYXRhICsgIiBhZnRlciBjbG9zZSIpOworICAgfQorfQog
Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworZnVuY3Rpb24gdGVzdDUoKQoreworICAgIC8vIENy
ZWF0ZSBhIGNoYW5uZWwgYW5kIHB1dCBzb21lIG1lc3NhZ2VzIGluIGl0IHdoaWNoIHdpbGwgZ28g
dW5kZWxpdmVyZWQgYW5kIHNob3VsZCBub3QgbGVhaworICAgIHZhciBjaGFubmVsID0gbmV3IE1l
c3NhZ2VDaGFubmVsOworICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoImFiY2RlIik7Cisg
ICAgLy8gTm93IHdhaXQgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZSB0byBlbnN1cmUgbm8gbWVzc2Fn
ZXMgY29tZSBpbiBmcm9tIHByZXZpb3VzIHRlc3RzLgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgIGxvZygiRE9ORSIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0sIDEwMCk7CiB9CiAKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5OGE0ZWJmLi45M2FjYjU2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw0ICsx
LDk5IEBACi0yMDA5LTA2LTEyICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKzIwMDkt
MDYtMTYgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI1MDQzPgorICAgICAgICBSZW1vdmVkIG9ic29sZXRlIE1lc3Nh
Z2VQb3J0LnN0YXJ0Q29udmVyc2F0aW9uKCksIGFjdGl2ZSBhbmQgb25jbG9zZSBBUElzLgorCisg
ICAgICAgIFJlZmFjdG9yZWQgTWVzc2FnZVBvcnRQcm94eSBpbnRvIE1lc3NhZ2VQb3J0Q2hhbm5l
bCBhbmQgYSBwbGF0Zm9ybS1kZXBlbmRlbnQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwKKyAg
ICAgICAgaW1wbGVtZW50YXRpb24uIE1vZGlmaWVkIEFQSXMgdG8gc2ltcGxpZnkgY3Jvc3MtcHJv
Y2VzcyBpbXBsZW1lbnRhdGlvbnMgYnkgbW92aW5nIHRoZSBtZXNzYWdpbmcgY29kZQorICAgICAg
ICBlbnRpcmVseSBpbnRvIHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgcHJveHkuCisKKyAgICAgICAg
Q3JlYXRlZCBhIHRocmVhZC1zYWZlIGRlZmF1bHQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwg
aW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgQ2hhbmdlZCBET01XaW5kb3cgbWVzc2FnaW5nIHRv
IGNyZWF0ZSB0aGUgTWVzc2FnZUV2ZW50IGluIHRoZSB0YXJnZXQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCB0byBtYXRjaCBob3cKKyAgICAgICAgY3Jvc3MtdGhyZWFkIE1lc3NhZ2VQb3J0cyB3b3Jr
LgorICAgICAgICAKKyAgICAgICAgKiBHTlVNYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICAgICBBZGRlZCBNZXNzYWdlUG9ydENoYW5uZWwvUGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWwgZmlsZXMuCisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNz
YWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0OjptYXJr
KToKKyAgICAgICAgICAgIENoYW5nZWQgcG9ydHMgdG8gbm90IG1hcmsgdGhlaXIgZW50YW5nbGVk
IHBhaXIgYXMgcmVhY2hhYmxlLCBwZXIgdGhlIHNwZWMuCisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwOgorICAgICAgICAqIGRvbS9NZXNzYWdlQ2hh
bm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlQ2hhbm5lbDo6TWVzc2FnZUNoYW5u
ZWwpOgorICAgICAgICAgICAgVXBkYXRlZCB0byB1c2UgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWw6OmNyZWF0ZUNoYW5uZWwoKSB0byBlbnRhbmdsZSB0aGUgcG9ydHMuCisgICAgICAgICogZG9t
L01lc3NhZ2VQb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpNZXNzYWdl
UG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6fk1lc3NhZ2VQb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnQ6Om1lc3NhZ2VBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpjbG9zZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVz
c2FnZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBv
cnQ6OmRpc3BhdGNoTWVzc2FnZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnNl
dE9ubWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6aGFzUGVuZGluZ0Fj
dGl2aXR5KToKKyAgICAgICAgICAgIENoYW5nZWQgdGhlc2UgQVBJcyB0byBkZWxlZ2F0ZSB0byBu
ZXcgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwgQVBJcy4KKyAgICAgICAgKiBkb20vTWVzc2Fn
ZVBvcnQuaDoKKyAgICAgICAgICAgIFJlbmFtZWQgaXNRdWV1ZU9wZW4oKSB0byBzdGFydGVkKCku
CisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0LmlkbDoKKyAgICAgICAgICAgIFJlbW92ZWQgc3Rh
cnRDb252ZXJzYXRpb24gYW5kIG9uY2xvc2UuCisgICAgICAgKiBkb20vTWVzc2FnZVBvcnRQcm94
eS5oOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydENoYW5uZWwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OkV2
ZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6On5NZXNzYWdl
UG9ydENoYW5uZWwpOgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydENoYW5uZWwuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6bWVzc2Fn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6Y2hh
bm5lbCk6CisgICAgICAgICAgICBDaGFuZ2VkIEV2ZW50RGF0YSB0byBob2xkIGEgcmVmZXJlbmNl
IHRvIGEgTWVzc2FnZVBvcnRDaGFubmVsIG9iamVjdCBpbnN0ZWFkIG9mIGEgTWVzc2FnZVBvcnQg
dG8gZW5hYmxlIGNyb3NzLXRocmVhZCBtZXNzYWdpbmcuCisgICAgICAgIChXZWJDb3JlOjpNZXNz
YWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0Q2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZSk6ICAgICAgICAKKyAgICAgICAgKiBkb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMpOgorICAgICAgICAgICAgUmVuYW1lZCBp
c1F1ZXVlT3BlbigpIHRvIHN0YXJ0ZWQoKS4KKyAgICAgICAgKiBkb20vZGVmYXVsdC9QbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVBvcnRDaGFubmVsOjplbnRhbmdsZUlmT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
UG9ydENoYW5uZWw6OmRpc2VudGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0
Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
UG9ydENoYW5uZWw6OnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBv
cnRDaGFubmVsOjppc0Nvbm5lY3RlZFRvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0
Q2hhbm5lbDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6flBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVs
OjpjcmVhdGVDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsOjplbnRhbmdsZUlmT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6ZGlzZW50YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWw6OnNldFJlbW90ZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OnJlbW90ZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmVudGFuZ2xlZENoYW5uZWwpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OnNldEVudGFuZ2xlZENoYW5uZWwp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OnBvc3RNZXNz
YWdlVG9SZW1vdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWw6OnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjppc0Nvbm5lY3RlZFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y2xvc2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAg
ICAgKiBkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpNZXNzYWdlUG9ydFF1
ZXVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWw6Ok1lc3NhZ2VQb3J0UXVldWU6OnRyeUdldE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0UXVldWU6OmFwcGVuZEFuZENo
ZWNrRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
Ok1lc3NhZ2VQb3J0UXVldWU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0UXVldWU6Ok1lc3NhZ2VQb3J0UXVldWUpOgor
ICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RNZXNz
YWdlVGltZXI6OlBvc3RNZXNzYWdlVGltZXIpOgorICAgICAgICAgICAgQ2hhbmdlZCBET01XaW5k
b3cgbWVzc2FnaW5nIHRvIGNyZWF0ZSB0aGUgTWVzc2FnZUV2ZW50IGluIHRoZSB0YXJnZXQgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCB0byBtYXRjaCBob3cgY3Jvc3MtdGhyZWFkIE1lc3NhZ2VQb3J0
cyB3b3JrLgorICAgICAgICAoV2ViQ29yZTo6UG9zdE1lc3NhZ2VUaW1lcjo6ZXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJGaXJlZCk6CisKKyAyMDA5LTA2LTEyICBEYXZp
ZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCBkYzViYjE0Li43Mzk3Y2UyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTY3Niw3ICs2
NzYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5o
IFwKIAlXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAgXAogCVdlYkNvcmUvZG9tL01lc3NhZ2VQ
b3J0LmggXAotCVdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0UHJveHkuaCBcCisJV2ViQ29yZS9kb20v
TWVzc2FnZVBvcnRDaGFubmVsLmNwcCBcCisJV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVs
LmggXAogCVdlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIFwKIAlXZWJDb3JlL2RvbS9Nb3VzZUV2
ZW50LmggXAogCVdlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcCBcCkBAIC03NjgsNiAr
NzY5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJM
aWJ4bWwyLmNwcCBcCiAJV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyU2NvcGUuY3BwIFwKIAlXZWJD
b3JlL2RvbS9YTUxUb2tlbml6ZXJTY29wZS5oIFwKKwlXZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRm
b3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBcCisJV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1h
bmQuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaCBcCiAJV2ViQ29y
ZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagppbmRleCBhNDA2NzUzLi40MjdjZGE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKQEAgLTkxMjcsNyArOTEyNywxOSBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTWVzc2FnZVBvcnRQcm94eS5o
Ig0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxNZXNzYWdlUG9ydENoYW5uZWwuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE1l
c3NhZ2VQb3J0Q2hhbm5lbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZG9tXGRlZmF1bHRcUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZG9tXGRlZmF1bHRcUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYzdiMjdlZS4uMjQ1OTA5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTY0MCwxMyArNjQwLDE2IEBACiAJCTQxMTA0NjQyMEZBMjIy
QTYwMEJBNDM2QSAvKiBTY3JpcHRFdmVudExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMTA0NjQwMEZBMjIyQTYwMEJBNDM2QSAvKiBT
Y3JpcHRFdmVudExpc3RlbmVyLmNwcCAqLzsgfTsKIAkJNDEyN0Q1MzcwRjhBQUIxRDAwRTQyNEY1
IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi87
IH07CiAJCTQxMkE2ODQ3MEY2QjAzREQwMDBFQTY2RSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5l
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMkE2
ODQ2MEY2QjAzREQwMDBFQTY2RSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCAqLzsgfTsK
LQkJNDE1RTNFRjYwRjhENjdGRTAwN0VFQjUwIC8qIE1lc3NhZ2VQb3J0UHJveHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNUUzRUY1MEY4RDY3RkUw
MDdFRUI1MCAvKiBNZXNzYWdlUG9ydFByb3h5LmggKi87IH07CiAJCTQxNkU3NUJFMEVERjhGRDcw
MDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUJDMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxs
U3RhY2suaCAqLzsgfTsKIAkJNDE2RTc1QkYwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxT
dGFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLzsgfTsKIAkJ
NDE2RTc1Q0IwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QzkwRURGOTBDNzAwMzYw
RTFEIC8qIFNjcmlwdENhbGxGcmFtZS5oICovOyB9OwogCQk0MTZFNzVDQzBFREY5MEM3MDAzNjBF
MUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJh
bWUuY3BwICovOyB9OwogCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZGNDVF
RjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE5NTM2NTEwRjY4MjIyNDAwRDBDNjc5IC8q
IFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxOTUzNjUwMEY2ODIyMjQwMEQwQzY3OSAvKiBTY3JpcHRPYmplY3RR
dWFyYW50aW5lLmggKi87IH07CisJCTQxQkY3MDBCMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdl
UG9ydENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDFCRjcwMDkwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAg
Ki87IH07CisJCTQxQkY3MDBDMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBB
MEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCAqLzsgfTsKKwkJNDFCRjcw
MEYwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBEMEZFODZG
NjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgKi87IH07CisJCTQx
QkY3MDEwMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRjcwMEUwRkU4
NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggKi87IH07CiAJCTQx
Qzc2MEIxMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8q
IFNjcmlwdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNDFEMDE1Q0EwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQwMTVDODBGNEI1Qzcx
MDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLzsgfTsKIAkJNDFEMDE1Q0IwRjRCNUM3MTAwNEE2
NjJGIC8qIENvbnRlbnRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAg
Ki87IH07CkBAIC01NTMwLDEzICs1NTMzLDE2IEBACiAJCTQxMTA0NjQwMEZBMjIyQTYwMEJBNDM2
QSAvKiBTY3JpcHRFdmVudExpc3RlbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTI3RDUzNjBGOEFBQjFEMDBFNDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0U3RhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTJBNjg0NjBGNkIwM0REMDAwRUE2NkUgLyogU2NyaXB0
T2JqZWN0UXVhcmFudGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDE1RTNFRjUwRjhENjdGRTAwN0VFQjUwIC8qIE1lc3NhZ2VQb3J0UHJveHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZVBvcnRQcm94eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2Fs
bFN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENhbGxTdGFj
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBF
MUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNjcmlwdENhbGxTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxNkU3NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJh
bWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FsbEZy
YW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RjQ1RUYwRUQ3QjMxMTAw
ODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTY3JpcHRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE5NTM2NTAw
RjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0MUJGNzAwOTBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBv
cnRDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lc3Nh
Z2VQb3J0Q2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQkY3MDBB
MEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZVBvcnRDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxQkY3MDBEMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHA7IHBhdGggPSBkZWZhdWx0L1BsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCRjcwMEUw
RkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmg7IHBh
dGggPSBkZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVu
dFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudFR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8q
IENvbnRlbnRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
bnRlbnRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MzEyLDYgKzE0
MzE4LDEwIEBACiAJCUY1MjNEMzI0MDJERTQ0NzgwMTg2MzVDQSAvKiBkb20gKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTQxQkY3MDBEMEZFODZGNjEwMDVF
OERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgKi8sCisJCQkJNDFCRjcwMEUw
RkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggKi8sCisJCQkJ
NDFCRjcwMDkwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgKi8sCisJ
CQkJNDFCRjcwMEEwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovLAog
CQkJCUUxQzRERTZEMEVBNzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwICovLAog
CQkJCUUxQzRERTY4MEVBNzVDMUUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuaCAqLywKIAkJ
CQlBOEM0QTdGQzA5RDU2MzI3MDAwM0FDOEQgLyogQXR0ci5jcHAgKi8sCkBAIC0xNDQyMiw3ICsx
NDQzMiw2IEBACiAJCQkJRTFBREVDQkUwRTc2QUNGMTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmNw
cCAqLywKIAkJCQlFMUFERUNCRDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaCAqLywK
IAkJCQlFMUFERUNDNjBFNzZBRDFGMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaWRsICovLAotCQkJ
CTQxNUUzRUY1MEY4RDY3RkUwMDdFRUI1MCAvKiBNZXNzYWdlUG9ydFByb3h5LmggKi8sCiAJCQkJ
ODUwMzFCMkYwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlRXZlbnQuY3BwICovLAogCQkJCTg1MDMx
QjMwMEE0NEVGQzcwMEY5OTJFMCAvKiBNb3VzZUV2ZW50LmggKi8sCiAJCQkJMTQxQjk0RTUwOUVD
NDIyMzAwMEU5NDEzIC8qIE1vdXNlRXZlbnQuaWRsICovLApAQCAtMTYwOTUsNyArMTYxMDQsNiBA
QAogCQkJCUUxQURFQ0NFMEU3NkFEOEIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzU3OTNFODQwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBREVDQkYwRTc2QUNGMTAwNEExQTVFIC8qIE1lc3NhZ2VQ
b3J0LmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTVFM0VGNjBGOEQ2N0ZFMDA3RUVCNTAgLyogTWVz
c2FnZVBvcnRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlDNkU0RTQwRDc0NUUwNTAwNjQ0
MkU5IC8qIE1pbWVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOUM2RTRFODBENzQ1RTE4MDA2
NDQyRTkgLyogTWltZVR5cGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzZENzRBRDUwOUFB
MjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0xNjc5Miw2ICsxNjgwMCw4IEBACiAJCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8q
IFNWR0ZpbHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE4RjgzMUI4MEZENDhDNzgw
MEQ4QzU2QiAvKiBXb3JrZXJMb2FkZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg5Q0ND
NTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0MUJGNzAwQzBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBvcnRDaGFu
bmVsLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUJGNzAxMDBGRTg2RjYxMDA1RThERUMgLyogUGxh
dGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTg3ODUsNiArMTg3
OTUsOCBAQAogCQkJCTg0NUU3MkZCMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMDgxRUJGM0EwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5Q0NDNTIwRjQ0RTk4MTAwQjVEQTEwIC8q
IFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQxQkY3
MDBCMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNDFCRjcwMEYwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHAKaW5kZXggZjQ4MDlhZS4uZTNhY2JlYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCkBAIC00MywxMyArNDMsNiBAQCB2b2lkIEpT
TWVzc2FnZVBvcnQ6Om1hcmsoKQogICAgIERPTU9iamVjdDo6bWFyaygpOwogCiAgICAgbWFya0lm
Tm90TnVsbChtX2ltcGwtPm9ubWVzc2FnZSgpKTsKLSAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+
b25jbG9zZSgpKTsKLQotICAgIGlmIChNZXNzYWdlUG9ydFByb3h5KiBlbnRhbmdsZWRQb3J0ID0g
bV9pbXBsLT5lbnRhbmdsZWRQb3J0KCkpIHsKLSAgICAgICAgRE9NT2JqZWN0KiB3cmFwcGVyID0g
Z2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgp
LCBlbnRhbmdsZWRQb3J0KTsKLSAgICAgICAgaWYgKHdyYXBwZXIgJiYgIXdyYXBwZXItPm1hcmtl
ZCgpKQotICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOwotICAgIH0KIAogICAgIHR5cGVkZWYg
TWVzc2FnZVBvcnQ6OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50TGlzdGVuZXJzTWFwOwogICAgIHR5
cGVkZWYgTWVzc2FnZVBvcnQ6Okxpc3RlbmVyVmVjdG9yIExpc3RlbmVyVmVjdG9yOwpAQCAtNjAs
MTQgKzUzLDYgQEAgdm9pZCBKU01lc3NhZ2VQb3J0OjptYXJrKCkKICAgICB9CiB9CiAKLUpTVmFs
dWUgSlNNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJzYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQotewotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgY29uc3QgVVN0cmluZyYgbWVzc2FnZSA9IGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYyk7Ci0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBpbXBsKCktPnN0YXJ0Q29udmVyc2F0aW9u
KGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtZXNzYWdlKS5nZXQoKSk7
Ci19Ci0KIEpTVmFsdWUgSlNNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNz
YWdlUG9ydEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQ
b3J0Q3VzdG9tLmNwcAppbmRleCBmY2UwNGI2Li4yNGU4MGI4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcApAQCAtNzMsNTQgKzcz
LDYgQEAgQUNDRVNTT1JfU0VUVEVSKE1lc3NhZ2VQb3J0T25tZXNzYWdlKQogICAgIH0KIH0KIAot
QUNDRVNTT1JfR0VUVEVSKE1lc3NhZ2VQb3J0T25jbG9zZSkKLXsKLSAgICBJTkNfU1RBVFMoIkRP
TS5NZXNzYWdlUG9ydC5vbmNsb3NlLl9nZXQiKTsKLSAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBv
cnQgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpN
RVNTQUdFUE9SVCwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIFY4UHJveHk6OkV2ZW50TGlz
dGVuZXJUb1Y4T2JqZWN0KG1lc3NhZ2VQb3J0LT5vbmNsb3NlKCkpOwotfQotCi1BQ0NFU1NPUl9T
RVRURVIoTWVzc2FnZVBvcnRPbmNsb3NlKQotewotICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQ
b3J0Lm9uY2xvc2UuX3NldCIpOwotICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4UHJv
eHk6OlRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JU
LCBpbmZvLkhvbGRlcigpKTsKLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlm
IChtZXNzYWdlUG9ydC0+b25jbG9zZSgpKSB7Ci0gICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlz
dGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4obWVz
c2FnZVBvcnQtPm9uY2xvc2UoKSk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5
KGluZm8uSG9sZGVyKCksIGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpLCBWOEN1c3RvbTo6
a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVh
ciB0aGUgbGlzdGVuZXIuCi0gICAgICAgIG1lc3NhZ2VQb3J0LT5zZXRPbmNsb3NlKDApOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobWVz
c2FnZVBvcnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgICAgIGlmICghcHJveHkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZh
bHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICBtZXNzYWdlUG9ydC0+
c2V0T25jbG9zZShsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5
KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a01lc3NhZ2VQb3J0UmVxdWVzdENhY2hl
SW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1DQUxMQkFDS19GVU5DX0RFQ0woTWVzc2Fn
ZVBvcnRTdGFydENvbnZlcnNhdGlvbikKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5NZXNzYWdlUG9y
dC5TdGFydENvbnZlcnNhdGlvbigpIik7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQotICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpT
WU5UQVhfRVJST1IpOwotICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4UHJveHk6OlRv
TmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdz
LkhvbGRlcigpKTsKLQotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobWVz
c2FnZVBvcnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFwcm94eSkKLSAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4g
cG9ydCA9IG1lc3NhZ2VQb3J0LT5zdGFydENvbnZlcnNhdGlvbihtZXNzYWdlUG9ydC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOwotICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6Ok1FU1NBR0VQT1JULCBwb3J0LmdldCgpKTsKLSAgICByZXR1cm4gd3JhcHBlcjsKLX0KLQog
Q0FMTEJBQ0tfRlVOQ19ERUNMKE1lc3NhZ2VQb3J0QWRkRXZlbnRMaXN0ZW5lcikKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5NZXNzYWdlUG9ydC5BZGRFdmVudExpc3RlbmVyKCkiKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVsLmNwcCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VD
aGFubmVsLmNwcAppbmRleCAzYTkwOTEzLi5hYzBhNGFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9NZXNzYWdlQ2hhbm5lbC5jcHAKKysrIGIvV2ViQ29yZS9kb20vTWVzc2FnZUNoYW5uZWwuY3Bw
CkBAIC0yOCwxNCArMjgsMTUgQEAKICNpbmNsdWRlICJNZXNzYWdlQ2hhbm5lbC5oIgogCiAjaW5j
bHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE1lc3NhZ2VDaGFubmVsOjpNZXNzYWdlQ2hh
bm5lbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDogbV9wb3J0MShNZXNz
YWdlUG9ydDo6Y3JlYXRlKGNvbnRleHQpKQotICAgICwgbV9wb3J0MihNZXNzYWdlUG9ydDo6Y3Jl
YXRlKGNvbnRleHQpKQorICAgIDogbV9wb3J0MShNZXNzYWdlUG9ydDo6Y3JlYXRlKCpjb250ZXh0
KSkKKyAgICAsIG1fcG9ydDIoTWVzc2FnZVBvcnQ6OmNyZWF0ZSgqY29udGV4dCkpCiB7Ci0gICAg
TWVzc2FnZVBvcnQ6OmVudGFuZ2xlKG1fcG9ydDEuZ2V0KCksIG1fcG9ydDIuZ2V0KCkpOworICAg
IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGVDaGFubmVsKG1fcG9ydDEuZ2V0KCks
IG1fcG9ydDIuZ2V0KCkpOwogfQogCiBNZXNzYWdlQ2hhbm5lbDo6fk1lc3NhZ2VDaGFubmVsKCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcCBiL1dlYkNvcmUvZG9tL01l
c3NhZ2VQb3J0LmNwcAppbmRleCBlZmQ4OWU3Li5kZTdiOTQ4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5jcHAKKysrIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCkBA
IC0zOCw4OSArMzgsMjMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZXNzYWdl
UG9ydENsb3NlRXZlbnRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0Q2xvc2VFdmVudFRh
c2s+IGNyZWF0ZShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlUG9ydENsb3NlRXZlbnRUYXNrKHBvcnQpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgTWVzc2FnZVBvcnRDbG9zZUV2ZW50VGFzayhQYXNzUmVmUHRy
PE1lc3NhZ2VQb3J0PiBwb3J0KQotICAgICAgICA6IG1fcG9ydChwb3J0KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fcG9ydCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHVudXNlZENvbnRleHQpCi0gICAgewotICAgICAgICBB
U1NFUlRfVU5VU0VEKHVudXNlZENvbnRleHQsIHVudXNlZENvbnRleHQgPT0gbV9wb3J0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgICAgICBBU1NFUlQoIW1fcG9ydC0+YWN0aXZlKCkp
OwotCi0gICAgICAgIC8vIENsb3NpbmcgbWF5IGRlc3Ryb3kgdGhlIHBvcnQsIGRpc3BhdGNoIGFu
eSByZW1haW5pbmcgbWVzc2FnZXMgbm93LgotICAgICAgICBpZiAobV9wb3J0LT5xdWV1ZUlzT3Bl
bigpKQotICAgICAgICAgICAgbV9wb3J0LT5kaXNwYXRjaE1lc3NhZ2VzKCk7Ci0KLSAgICAgICAg
bV9wb3J0LT5kaXNwYXRjaENsb3NlRXZlbnQoKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8TWVzc2Fn
ZVBvcnQ+IG1fcG9ydDsKLX07Ci0KLVBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ6OkV2ZW50RGF0YT4g
TWVzc2FnZVBvcnQ6OkV2ZW50RGF0YTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFz
c1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV2
ZW50RGF0YShtZXNzYWdlLCBwb3J0KSk7Ci19Ci0KLU1lc3NhZ2VQb3J0OjpFdmVudERhdGE6OkV2
ZW50RGF0YShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IG1l
c3NhZ2VQb3J0KQotICAgIDogbWVzc2FnZShtZXNzYWdlLmNvcHkoKSkKLSAgICAsIG1lc3NhZ2VQ
b3J0KG1lc3NhZ2VQb3J0KQotewotfQotCi1NZXNzYWdlUG9ydDo6RXZlbnREYXRhOjp+RXZlbnRE
YXRhKCkKLXsKLX0KLQotTWVzc2FnZVBvcnQ6Ok1lc3NhZ2VQb3J0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgOiBtX2VudGFuZ2xlZFBvcnQoMCkK
LSAgICAsIG1fcXVldWVJc09wZW4oZmFsc2UpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAsIG1fcGVuZGluZ0Nsb3NlRXZlbnQoZmFs
c2UpCitNZXNzYWdlUG9ydDo6TWVzc2FnZVBvcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICA6IG1fZW50YW5nbGVkQ2hhbm5lbCgwKQorICAgICwg
bV9zdGFydGVkKGZhbHNlKQorICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KCZzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogewotICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAg
ICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jcmVhdGVkTWVzc2FnZVBvcnQodGhpcyk7Cisg
ICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jcmVhdGVkTWVzc2FnZVBvcnQodGhpcyk7Cisg
IAorICAgIC8vIERvbid0IG5lZWQgdG8gY2FsbCBwcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nv
b24oKSBoZXJlLCBiZWNhdXNlIHRoZSBwb3J0IHdpbGwgbm90IGJlIG9wZW5lZCB1bnRpbCBzdGFy
dCgpIGlzIGludm9rZWQuCiB9CiAKIE1lc3NhZ2VQb3J0Ojp+TWVzc2FnZVBvcnQoKQogewotICAg
IGlmIChtX2VudGFuZ2xlZFBvcnQpCi0gICAgICAgIHVuZW50YW5nbGUoKTsKLQorICAgIGNsb3Nl
KCk7CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5kZXN0cm95ZWRNZXNzYWdlUG9ydCh0aGlzKTsKIH0KIAotUGFzc1Jl
ZlB0cjxNZXNzYWdlUG9ydD4gTWVzc2FnZVBvcnQ6OmNsb25lKEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmICghbV9lbnRhbmdsZWRQb3J0KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxNZXNzYWdlUG9y
dFByb3h5PiByZW1vdGVQb3J0ID0gbV9lbnRhbmdsZWRQb3J0OwotICAgIFJlZlB0cjxNZXNzYWdl
UG9ydD4gbmV3UG9ydCA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoMCk7Ci0KLSAgICAvLyBNb3ZlIGFs
bCB0aGUgZXZlbnRzIGluIHRoZSBwb3J0IG1lc3NhZ2UgcXVldWUgb2Ygb3JpZ2luYWwgcG9ydCB0
byB0aGUgcG9ydCBtZXNzYWdlIHF1ZXVlIG9mIG5ldyBwb3J0LCBpZiBhbnksIGxlYXZpbmcgdGhl
IG5ldyBwb3J0J3MgcG9ydCBtZXNzYWdlIHF1ZXVlIGluIGl0cyBpbml0aWFsIGNsb3NlZCBzdGF0
ZS4KLSAgICAvLyBJZiBldmVudHMgYXJlIHBvc3RlZCAoZS5nLiBmcm9tIGEgd29ya2VyIHRocmVh
ZCkgd2hpbGUgdGhpcyBjb2RlIGlzIGV4ZWN1dGluZywgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHdo
ZXRoZXIgdGhleSBlbmQgdXAgaW4gdGhlIG9yaWdpbmFsIG9yIG5ldyBwb3J0J3MgbWVzc2FnZSBx
dWV1ZS4KLSAgICBSZWZQdHI8RXZlbnREYXRhPiBldmVudERhdGE7Ci0gICAgd2hpbGUgKG1fbWVz
c2FnZVF1ZXVlLnRyeUdldE1lc3NhZ2UoZXZlbnREYXRhKSkKLSAgICAgICAgbmV3UG9ydC0+bV9t
ZXNzYWdlUXVldWUuYXBwZW5kKGV2ZW50RGF0YSk7Ci0KLSAgICBlbnRhbmdsZShyZW1vdGVQb3J0
LmdldCgpLCBuZXdQb3J0LmdldCgpKTsgLy8gVGhlIHBvcnQgb2JqZWN0IHdpbGwgYmUgdW5lbnRh
bmdsZWQuCi0gICAgcmV0dXJuIG5ld1BvcnQ7Ci19Ci0KIHZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
cG9zdE1lc3NhZ2UobWVzc2FnZSwgMCwgZWMpOwpAQCAtMTI4LDExMiArNjIsNzYgQEAgdm9pZCBN
ZXNzYWdlUG9ydDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25D
b2RlJiBlYykKIAogdm9pZCBNZXNzYWdlUG9ydDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBNZXNzYWdlUG9ydCogZGF0YVBvcnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IGlmICghbV9lbnRhbmdsZWRQb3J0IHx8ICFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAg
QVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgaWYgKCFtX2VudGFuZ2xlZENo
YW5uZWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbmV3TWVz
c2FnZVBvcnQ7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbDsKICAgICBp
ZiAoZGF0YVBvcnQpIHsKLSAgICAgICAgaWYgKGRhdGFQb3J0ID09IHRoaXMgfHwgZGF0YVBvcnQg
PT0gbV9lbnRhbmdsZWRQb3J0KSB7Ci0gICAgICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKKyAgICAgICAgaWYgKGRhdGFQb3J0ID09IHRoaXMgfHwgbV9lbnRhbmdsZWRDaGFubmVsLT5p
c0Nvbm5lY3RlZFRvKGRhdGFQb3J0KSkgeworICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBlYyA9IDA7Ci0g
ICAgICAgIG5ld01lc3NhZ2VQb3J0ID0gZGF0YVBvcnQtPmNsb25lKGVjKTsKKyAgICAgICAgY2hh
bm5lbCA9IGRhdGFQb3J0LT5kaXNlbnRhbmdsZShlYyk7CiAgICAgICAgIGlmIChlYykKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBtX2VudGFuZ2xlZFBvcnQtPmRlbGl2ZXJNZXNz
YWdlKG1lc3NhZ2UsIG5ld01lc3NhZ2VQb3J0KTsKKyAgICBtX2VudGFuZ2xlZENoYW5uZWwtPnBv
c3RNZXNzYWdlVG9SZW1vdGUoTWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OmNyZWF0ZSht
ZXNzYWdlLCBjaGFubmVsLnJlbGVhc2UoKSkpOwogfQogCi12b2lkIE1lc3NhZ2VQb3J0OjpkZWxp
dmVyTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+
IGRhdGFQb3J0KQorUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IE1lc3NhZ2VQb3J0Ojpk
aXNlbnRhbmdsZShFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBtX21lc3NhZ2VRdWV1ZS5hcHBl
bmQoRXZlbnREYXRhOjpjcmVhdGUobWVzc2FnZSwgZGF0YVBvcnQpKTsKLSAgICBpZiAobV9xdWV1
ZUlzT3BlbiAmJiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+cHJvY2Vzc01lc3NhZ2VQb3J0TWVzc2FnZXNTb29uKCk7CisgICAgaWYg
KCFtX2VudGFuZ2xlZENoYW5uZWwpCisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Cisg
ICAgZWxzZQorICAgICAgICBtX2VudGFuZ2xlZENoYW5uZWwtPmRpc2VudGFuZ2xlKCk7CisgICAg
cmV0dXJuIG1fZW50YW5nbGVkQ2hhbm5lbC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8TWVz
c2FnZVBvcnQ+IE1lc3NhZ2VQb3J0OjpzdGFydENvbnZlcnNhdGlvbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisv
LyBJbnZva2VkIHRvIG5vdGlmeSB1cyB0aGF0IHRoZXJlIGFyZSBtZXNzYWdlcyBhdmFpbGFibGUg
Zm9yIHRoaXMgcG9ydC4KKy8vIFRoaXMgY29kZSBtYXkgYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0
aHJlYWQsIGFuZCBzbyBzaG91bGQgbm90IGNhbGwgYW55IG5vbi10aHJlYWRzYWZlIEFQSXMgKGku
ZS4gc2hvdWxkIG5vdCBjYWxsIGludG8gdGhlIGVudGFuZ2xlZCBjaGFubmVsIG9yIGFjY2VzcyBt
dXRhYmxlIHZhcmlhYmxlcykuCit2b2lkIE1lc3NhZ2VQb3J0OjptZXNzYWdlQXZhaWxhYmxlKCkK
IHsKLSAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQxID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZShz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCB8fCAhbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICAgICByZXR1cm4gcG9ydDE7Ci0gICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBwb3J0MiA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoMCk7Ci0KLSAgICBlbnRh
bmdsZShwb3J0MS5nZXQoKSwgcG9ydDIuZ2V0KCkpOwotCi0gICAgbV9lbnRhbmdsZWRQb3J0LT5k
ZWxpdmVyTWVzc2FnZShtZXNzYWdlLCBwb3J0Mik7Ci0gICAgcmV0dXJuIHBvcnQxOworICAgIEFT
U0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cHJvY2Vzc01lc3NhZ2VQb3J0TWVzc2FnZXNTb29uKCk7CiB9CiAKIHZvaWQgTWVzc2Fn
ZVBvcnQ6OnN0YXJ0KCkKIHsKLSAgICBpZiAobV9xdWV1ZUlzT3BlbiB8fCAhbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KQorICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAg
IGlmIChtX3N0YXJ0ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcXVldWVJc09wZW4gPSB0
cnVlOworICAgIG1fc3RhcnRlZCA9IHRydWU7CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5wcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKTsKIH0KIAogdm9pZCBNZXNzYWdlUG9y
dDo6Y2xvc2UoKQogewotICAgIGlmICghbV9lbnRhbmdsZWRQb3J0KQorICAgIGlmICghbV9lbnRh
bmdsZWRDaGFubmVsKQogICAgICAgICByZXR1cm47Ci0KLSAgICBNZXNzYWdlUG9ydFByb3h5KiBv
dGhlclBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7Ci0gICAgdW5lbnRhbmdsZSgpOwotCi0gICAgcXVl
dWVDbG9zZUV2ZW50KCk7Ci0gICAgb3RoZXJQb3J0LT5xdWV1ZUNsb3NlRXZlbnQoKTsKLX0KLQot
dm9pZCBNZXNzYWdlUG9ydDo6ZW50YW5nbGUoTWVzc2FnZVBvcnRQcm94eSogcG9ydDEsIE1lc3Nh
Z2VQb3J0UHJveHkqIHBvcnQyKQotewotICAgIHBvcnQxLT5lbnRhbmdsZShwb3J0Mik7Ci0gICAg
cG9ydDItPmVudGFuZ2xlKHBvcnQxKTsKKyAgICBtX2VudGFuZ2xlZENoYW5uZWwtPmNsb3NlKCk7
CiB9CiAKLXZvaWQgTWVzc2FnZVBvcnQ6OmVudGFuZ2xlKE1lc3NhZ2VQb3J0UHJveHkqIHJlbW90
ZSkKK3ZvaWQgTWVzc2FnZVBvcnQ6OmVudGFuZ2xlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsPiByZW1vdGUpCiB7Ci0gICAgLy8gVW5lbnRhbmdsZSBmcm9tIG91ciBjdXJyZW50IHBvcnQg
Zmlyc3QuCi0gICAgaWYgKG1fZW50YW5nbGVkUG9ydCkgewotICAgICAgICBBU1NFUlQobV9lbnRh
bmdsZWRQb3J0ICE9IHJlbW90ZSk7Ci0gICAgICAgIHVuZW50YW5nbGUoKTsKLSAgICB9Ci0gICAg
bV9lbnRhbmdsZWRQb3J0ID0gcmVtb3RlOwotfQorICAgIC8vIE9ubHkgaW52b2tlZCB0byBzZXQg
b3VyIGluaXRpYWwgZW50YW5nbGVtZW50LgorICAgIEFTU0VSVCghbV9lbnRhbmdsZWRDaGFubmVs
KTsKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIAotdm9pZCBNZXNzYWdl
UG9ydDo6dW5lbnRhbmdsZSgpCi17Ci0gICAgLy8gVW5lbnRhbmdsZSBvdXIgZW5kIGJlZm9yZSB1
bmVudGFuZ2xpbmcgdGhlIG90aGVyIGVuZC4KLSAgICBpZiAobV9lbnRhbmdsZWRQb3J0KSB7Ci0g
ICAgICAgIE1lc3NhZ2VQb3J0UHJveHkqIHJlbW90ZSA9IG1fZW50YW5nbGVkUG9ydDsKLSAgICAg
ICAgbV9lbnRhbmdsZWRQb3J0ID0gMDsKLSAgICAgICAgcmVtb3RlLT51bmVudGFuZ2xlKCk7Ci0g
ICAgfQorICAgIC8vIERvbid0IGVudGFuZ2xlIHRoZSBwb3J0cyBpZiB0aGUgY2hhbm5lbCBpcyBj
bG9zZWQuCisgICAgaWYgKHJlbW90ZS0+ZW50YW5nbGVJZk9wZW4odGhpcykpCisgICAgICAgIG1f
ZW50YW5nbGVkQ2hhbm5lbCA9IHJlbW90ZTsKIH0KIAogdm9pZCBNZXNzYWdlUG9ydDo6Y29udGV4
dERlc3Ryb3llZCgpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0K
LSAgICBpZiAobV9lbnRhbmdsZWRQb3J0KQotICAgICAgICB1bmVudGFuZ2xlKCk7Ci0KKyAgICAv
LyBNdXN0IGNsb3NlIHBvcnQgYmVmb3JlIGJsb3dpbmcgYXdheSB0aGUgY2FjaGVkIGNvbnRleHQs
IHRvIGVuc3VyZSB0aGF0IHdlIGdldCBubyBtb3JlIGNhbGxzIHRvIG1lc3NhZ2VBdmFpbGFibGUo
KS4KKyAgICBjbG9zZSgpOwogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7CiB9CiAK
LXZvaWQgTWVzc2FnZVBvcnQ6OmF0dGFjaFRvQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotewotICAgIEFTU0VSVCghbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKLSAgICBBU1NFUlQoIW1fcXVldWVJc09wZW4pOwotCi0gICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRNZXNzYWdlUG9ydCh0aGlzKTsKLSAgICAKLSAgICAvLyBG
SVhNRTogTmVlZCB0byBjYWxsIHByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpPwotfQot
CiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBNZXNzYWdlUG9ydDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKQEAg
LTI0MiwxNyArMTQwLDE5IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIE1lc3NhZ2VQb3J0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3BhdGNo
TWVzc2FnZXMoKQogewogICAgIC8vIE1lc3NhZ2VzIGZvciBjb250ZXh0cyB0aGF0IGFyZSBub3Qg
ZnVsbHkgYWN0aXZlIGdldCBkaXNwYXRjaGVkIHRvbywgYnV0IEpTQWJzdHJhY3RFdmVudExpc3Rl
bmVyOjpoYW5kbGVFdmVudCgpIGRvZXNuJ3QgY2FsbCBoYW5kbGVycyBmb3IgdGhlc2UuCi0gICAg
Ly8gRklYTUU6IFN1Y2ggbWVzc2FnZXMgc2hvdWxkIGJlIGRpc3BhdGNoZWQgaWYgdGhlIGRvY3Vt
ZW50IHJldHVybnMgZnJvbSBwYWdlIGNhY2hlLiBUaGV5IGFyZSBvbmx5IGFsbG93ZWQgdG8gYmUg
bG9zdCBpZiB0aGUgZG9jdW1lbnQgaXMgZGlzY2FyZGVkLgotICAgIEFTU0VSVChxdWV1ZUlzT3Bl
bigpKTsKLQotICAgIFJlZlB0cjxFdmVudERhdGE+IGV2ZW50RGF0YTsKLSAgICB3aGlsZSAobV9t
ZXNzYWdlUXVldWUudHJ5R2V0TWVzc2FnZShldmVudERhdGEpKSB7Ci0KLSAgICAgICAgQVNTRVJU
KCFldmVudERhdGEtPm1lc3NhZ2VQb3J0IHx8ICFldmVudERhdGEtPm1lc3NhZ2VQb3J0LT5tX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgICAgICBpZiAoZXZlbnREYXRhLT5tZXNzYWdlUG9y
dCkKLSAgICAgICAgICAgIGV2ZW50RGF0YS0+bWVzc2FnZVBvcnQtPmF0dGFjaFRvQ29udGV4dCht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotCi0gICAgICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0g
TWVzc2FnZUV2ZW50OjpjcmVhdGUoZXZlbnREYXRhLT5tZXNzYWdlLCAiIiwgIiIsIDAsIGV2ZW50
RGF0YS0+bWVzc2FnZVBvcnQpOworICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNwZWNpZmllcyB0aGF0
IGFueSBtZXNzYWdlcyBzZW50IHRvIGEgZG9jdW1lbnQgdGhhdCBpcyBub3QgZnVsbHkgYWN0aXZl
IHNob3VsZCBiZSBkcm9wcGVkLCBzbyB0aGlzIGJlaGF2aW9yIGlzIE9LLgorICAgIEFTU0VSVChz
dGFydGVkKCkpOworCisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBl
dmVudERhdGE7CisgICAgd2hpbGUgKG1fZW50YW5nbGVkQ2hhbm5lbCAmJiBtX2VudGFuZ2xlZENo
YW5uZWwtPnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKGV2ZW50RGF0YSkpIHsKKyAgICAgICAgUmVm
UHRyPE1lc3NhZ2VQb3J0PiBwb3J0OworICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
PiBjaGFubmVsID0gZXZlbnREYXRhLT5jaGFubmVsKCk7CisgICAgICAgIGlmIChjaGFubmVsKSB7
CisgICAgICAgICAgICAvLyBUaGUgcmVtb3RlIHNpZGUgc2VudCBvdmVyIGEgTWVzc2FnZVBvcnRD
aGFubmVsLCBzbyBjcmVhdGUgYSBNZXNzYWdlUG9ydCB0byB3cmFwIGl0LgorICAgICAgICAgICAg
cG9ydCA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Cisg
ICAgICAgICAgICBwb3J0LT5lbnRhbmdsZShjaGFubmVsLnJlbGVhc2UoKSk7CisgICAgICAgIH0K
KyAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShldmVudERh
dGEtPm1lc3NhZ2UoKSwgIiIsICIiLCAwLCBwb3J0LnJlbGVhc2UoKSk7CiAKICAgICAgICAgaWYg
KG1fb25NZXNzYWdlTGlzdGVuZXIpIHsKICAgICAgICAgICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMp
OwpAQCAtMjY2LDMxICsxNjYsNiBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2Vz
KCkKICAgICB9CiB9CiAKLXZvaWQgTWVzc2FnZVBvcnQ6OnF1ZXVlQ2xvc2VFdmVudCgpCi17Ci0g
ICAgQVNTRVJUKCFtX3BlbmRpbmdDbG9zZUV2ZW50KTsKLSAgICBtX3BlbmRpbmdDbG9zZUV2ZW50
ID0gdHJ1ZTsKLQotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soTWVzc2Fn
ZVBvcnRDbG9zZUV2ZW50VGFzazo6Y3JlYXRlKHRoaXMpKTsKLX0KLQotdm9pZCBNZXNzYWdlUG9y
dDo6ZGlzcGF0Y2hDbG9zZUV2ZW50KCkKLXsKLSAgICBBU1NFUlQobV9wZW5kaW5nQ2xvc2VFdmVu
dCk7Ci0gICAgbV9wZW5kaW5nQ2xvc2VFdmVudCA9IGZhbHNlOwotCi0gICAgUmVmUHRyPEV2ZW50
PiBldnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbG9zZUV2ZW50LCBmYWxzZSwgdHJ1
ZSk7Ci0gICAgaWYgKG1fb25DbG9zZUxpc3RlbmVyKSB7Ci0gICAgICAgIGV2dC0+c2V0VGFyZ2V0
KHRoaXMpOwotICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgICAgIG1f
b25DbG9zZUxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0K
LSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNl
KCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0KLQogdm9pZCBNZXNzYWdlUG9ydDo6YWRkRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyLCBib29sKQogewogICAgIEV2ZW50TGlzdGVuZXJzTWFw
OjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CkBAIC0z
NDIsOSArMjE3LDE3IEBAIGJvb2wgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiAhZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAordm9pZCBNZXNzYWdlUG9ydDo6c2V0T25tZXNzYWdlKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKK3sKKyAgICBtX29uTWVzc2Fn
ZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsKKyAgICBzdGFydCgpOworfQorCiBib29sIE1lc3Nh
Z2VQb3J0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKQogewotICAgIHJldHVybiBtX3BlbmRpbmdDbG9z
ZUV2ZW50IHx8IChtX3F1ZXVlSXNPcGVuICYmICFtX21lc3NhZ2VRdWV1ZS5pc0VtcHR5KCkpOwor
ICAgIC8vIFRoZSBzcGVjIHNheXMgdGhhdCBlbnRhbmdsZWQgbWVzc2FnZSBwb3J0cyBzaG91bGQg
YWx3YXlzIGJlIHRyZWF0ZWQgYXMgaWYgdGhleSBoYXZlIGEgc3Ryb25nIHJlZmVyZW5jZS4KKyAg
ICAvLyBXZSdsbCBhbHNvIHN0aXB1bGF0ZSB0aGF0IHRoZSBxdWV1ZSBuZWVkcyB0byBiZSBvcGVu
IChpZiB0aGUgYXBwIGRyb3BzIGl0cyByZWZlcmVuY2UgdG8gdGhlIHBvcnQgYmVmb3JlIHN0YXJ0
KCktaW5nIGl0LCB0aGVuIGl0J3Mgbm90IHJlYWxseSBlbnRhbmdsZWQgYXMgaXQncyB1bnJlYWNo
YWJsZSkuCisgICAgcmV0dXJuIG1fc3RhcnRlZCAmJiBtX2VudGFuZ2xlZENoYW5uZWwgJiYgbV9l
bnRhbmdsZWRDaGFubmVsLT5oYXNQZW5kaW5nQWN0aXZpdHkoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaCBiL1dlYkNv
cmUvZG9tL01lc3NhZ2VQb3J0LmgKaW5kZXggMDU0YWU0MS4uN2NkMWVhNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAorKysgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5o
CkBAIC0zMCwxMCArMzAsMTEgQEAKICNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCiAjaW5j
bHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVk
ZSAiTWVzc2FnZVBvcnRQcm94eS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgog
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMzUgKzQ2LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
ICAgIGNsYXNzIFN0cmluZzsKLSAgICBjbGFzcyBXb3JrZXJDb250ZXh0OwogCi0gICAgY2xhc3Mg
TWVzc2FnZVBvcnQgOiBwdWJsaWMgTWVzc2FnZVBvcnRQcm94eSwgcHVibGljIEV2ZW50VGFyZ2V0
IHsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0
PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE1lc3NhZ2VQb3J0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VQb3J0KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdl
UG9ydD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlUG9ydChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KSk7IH0KICAgICAgICAgfk1lc3NhZ2VQb3J0KCk7CiAKLSAgICAgICAgUGFzc1JlZlB0cjxN
ZXNzYWdlUG9ydD4gY2xvbmUoRXhjZXB0aW9uQ29kZSYpOyAvLyBSZXR1cm5zIGEgcG9ydCB0aGF0
IGlzbid0IGF0dGFjaGVkIHRvIGFueSBjb250ZXh0LgotCi0gICAgICAgIGJvb2wgYWN0aXZlKCkg
Y29uc3QgeyByZXR1cm4gbV9lbnRhbmdsZWRQb3J0OyB9CiAgICAgICAgIHZvaWQgcG9zdE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQg
cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlUG9ydCosIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICAgICAgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gc3RhcnRDb252ZXJzYXRp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAgICAg
ICAgIHZvaWQgc3RhcnQoKTsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogCi0gICAgICAgIC8vIElt
cGxlbWVudGF0aW9ucyBvZiBNZXNzYWdlUG9ydFByb3h5IEFQSXMKLSAgICAgICAgdmlydHVhbCB2
b2lkIGVudGFuZ2xlKE1lc3NhZ2VQb3J0UHJveHkqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVu
ZW50YW5nbGUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRlbGl2ZXJNZXNzYWdlKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4pOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcXVldWVDbG9zZUV2ZW50KCk7Ci0KLSAgICAgICAgYm9vbCBxdWV1ZUlzT3BlbigpIGNv
bnN0IHsgcmV0dXJuIG1fcXVldWVJc09wZW47IH0KKyAgICAgICAgdm9pZCBlbnRhbmdsZShQYXNz
T3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4pOworICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQ
b3J0Q2hhbm5lbD4gZGlzZW50YW5nbGUoRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIE1lc3Nh
Z2VQb3J0UHJveHkqIGVudGFuZ2xlZFBvcnQoKSB7IHJldHVybiBtX2VudGFuZ2xlZFBvcnQ7IH0K
LSAgICAgICAgc3RhdGljIHZvaWQgZW50YW5nbGUoTWVzc2FnZVBvcnRQcm94eSosIE1lc3NhZ2VQ
b3J0UHJveHkqKTsKKyAgICAgICAgdm9pZCBtZXNzYWdlQXZhaWxhYmxlKCk7CisgICAgICAgIGJv
b2wgc3RhcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRlZDsgfQogCiAgICAgICAgIHZvaWQg
Y29udGV4dERlc3Ryb3llZCgpOwotICAgICAgICB2b2lkIGF0dGFjaFRvQ29udGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CisKICAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBN
ZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9ydCgpIHsgcmV0dXJuIHRoaXM7IH0KQEAgLTg4LDUyICs3
OSwyOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsKICAgICAgICAgRXZl
bnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVy
czsgfQogCi0gICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVzc2FnZVBvcnRQcm94eT46OnJlZjsK
LSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxNZXNzYWdlUG9ydFByb3h5Pjo6ZGVyZWY7CisgICAg
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVzc2FnZVBvcnQ+OjpyZWY7CisgICAgICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8TWVzc2FnZVBvcnQ+OjpkZXJlZjsKIAogICAgICAgICBib29sIGhhc1BlbmRpbmdB
Y3Rpdml0eSgpOwogCi0gICAgICAgIC8vIEZJWE1FOiBQZXIgY3VycmVudCBzcGVjLCBzZXR0aW5n
IG9ubWVzc2FnZSBzaG91bGQgYXV0b21hZ2ljYWxseSBzdGFydCB0aGUgcG9ydCAodW5saWtlIGFk
ZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAuLi4pKS4KLSAgICAgICAgdm9pZCBzZXRPbm1lc3Nh
Z2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNzYWdl
TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CisgICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1lc3Nh
Z2UoKSBjb25zdCB7IHJldHVybiBtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CiAKLSAgICAg
ICAgdm9pZCBzZXRPbmNsb3NlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5l
cikgeyBtX29uQ2xvc2VMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICAgICAgRXZlbnRM
aXN0ZW5lciogb25jbG9zZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25DbG9zZUxpc3RlbmVyLmdldCgp
OyB9Ci0KICAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVBvcnRDbG9z
ZUV2ZW50VGFzazsKLQotICAgICAgICBNZXNzYWdlUG9ydChTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kik7CisgICAgICAgIE1lc3NhZ2VQb3J0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAKLSAgICAgICAgdm9p
ZCBkaXNwYXRjaENsb3NlRXZlbnQoKTsKKyAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bD4gbV9lbnRhbmdsZWRDaGFubmVsOwogCi0gICAgICAgIE1lc3NhZ2VQb3J0UHJveHkqIG1fZW50
YW5nbGVkUG9ydDsKLQotICAgICAgICAvLyBGSVhNRTogRXZlbnREYXRhIGlzIG5lY2Vzc2FyeSB0
byBwYXNzIG1lc3NhZ2VzIHRvIG90aGVyIHRocmVhZHMuIEluIHNpbmdsZSB0aHJlYWRlZCBjYXNl
LCB3ZSBjYW4ganVzdCBxdWV1ZSBhIGNyZWF0ZWQgZXZlbnQuCi0gICAgICAgIHN0cnVjdCBFdmVu
dERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudERhdGE+IHsKLSAgICAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEV2ZW50RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFz
c1JlZlB0cjxNZXNzYWdlUG9ydD4pOwotICAgICAgICAgICAgfkV2ZW50RGF0YSgpOwotCi0gICAg
ICAgICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICAgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4g
bWVzc2FnZVBvcnQ7Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIEV2ZW50RGF0YShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+KTsKLSAgICAgICAg
fTsKLSAgICAgICAgTWVzc2FnZVF1ZXVlPFJlZlB0cjxFdmVudERhdGE+ID4gbV9tZXNzYWdlUXVl
dWU7IC8vIEZJWE1FOiBObyBuZWVkIHRvIHVzZSBNZXNzYWdlUXVldWUgaW4gc2luZ2xlIHRocmVh
ZGVkIGNhc2UuCi0gICAgICAgIGJvb2wgbV9xdWV1ZUlzT3BlbjsKKyAgICAgICAgYm9vbCBtX3N0
YXJ0ZWQ7CiAKICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogCiAgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uTWVzc2FnZUxp
c3RlbmVyOwotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkNsb3NlTGlzdGVuZXI7
CiAKICAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKLQotICAgICAg
ICBib29sIG1fcGVuZGluZ0Nsb3NlRXZlbnQ7IC8vIFRoZSBwb3J0IGlzIEdDIHByb3RlY3RlZCB3
aGlsZSB3YWl0aW5nIGZvciBhIGNsb3NlIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuCiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnQuaWRsIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRsCmluZGV4IDAzYzZiYWIuLmU1
ZjlhZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbAorKysgYi9XZWJD
b3JlL2RvbS9NZXNzYWdlUG9ydC5pZGwKQEAgLTM0LDE2ICszNCwxMyBAQCBtb2R1bGUgZXZlbnRz
IHsKIC8vIFdlIG5lZWQgdG8gaGF2ZSBzb21ldGhpbmcgYXMgYW4gT2JqQyBiaW5kaW5nLCBiZWNh
dXNlIE1lc3NhZ2VQb3J0IGlzIHVzZWQgaW4gTWVzc2FnZUV2ZW50LCB3aGljaCBhbHJlYWR5IGhh
cyBvbmUsCiAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBleHBvc2UgdGhlIEFQSSB3
aGlsZSBpdCBpcyBpbiBmbHV4LgogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgJiYg
TEFOR1VBR0VfSkFWQVNDUklQVAotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBh
Y3RpdmU7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGlu
IFtPcHRpb25hbF0gTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQpCiAgICAgICAgICAgICByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKLSAgICAgICAgW0N1c3RvbV0gTWVzc2FnZVBvcnQgc3RhcnRDb252ZXJz
YXRpb24oaW4gRE9NU3RyaW5nIG1lc3NhZ2UpOwogICAgICAgICB2b2lkIHN0YXJ0KCk7CiAgICAg
ICAgIHZvaWQgY2xvc2UoKTsKIAogICAgICAgICAvLyBldmVudCBoYW5kbGVyIGF0dHJpYnV0ZXMK
ICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOwotICAgICAgICBhdHRy
aWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNsb3NlOwogCiAgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGlu
dGVyZmFjZQogICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3Ry
aW5nIHR5cGUsIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmNw
cCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNzY4ZDRmNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZG9t
L01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8
TWVzc2FnZVBvcnRDaGFubmVsPiBNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShQYXNzUmVmUHRy
PFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQoreworICAgIHJldHVybiBuZXcg
TWVzc2FnZVBvcnRDaGFubmVsKGNoYW5uZWwpOworfQorCitQYXNzT3duUHRyPE1lc3NhZ2VQb3J0
Q2hhbm5lbDo6RXZlbnREYXRhPiBNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNo
YW5uZWwpCit7CisgICAgcmV0dXJuIG5ldyBFdmVudERhdGEobWVzc2FnZSwgY2hhbm5lbCk7Cit9
CisKK01lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhOjpFdmVudERhdGEoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCkKKyAgICA6
IG1fbWVzc2FnZShtZXNzYWdlLmNvcHkoKSkKKyAgICAsIG1fY2hhbm5lbChjaGFubmVsKQorewor
fQorCitNZXNzYWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0Q2hhbm5lbChQYXNzUmVmUHRyPFBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQorICAgIDogbV9jaGFubmVsKGNoYW5u
ZWwpCit7Cit9CisKK01lc3NhZ2VQb3J0Q2hhbm5lbDo6fk1lc3NhZ2VQb3J0Q2hhbm5lbCgpCit7
CisgICAgLy8gTWFrZSBzdXJlIHdlIGNsb3NlIG91ciBwbGF0Zm9ybSBjaGFubmVsIHdoZW4gdGhl
IGJhc2UgaXMgZnJlZWQsIHRvIGtlZXAgdGhlIGNoYW5uZWwgb2JqZWN0cyBmcm9tIGxlYWtpbmcu
CisgICAgbV9jaGFubmVsLT5jbG9zZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydENoYW5uZWwuaCBiL1dlYkNvcmUvZG9t
L01lc3NhZ2VQb3J0Q2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmFiMGJmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydENoYW5u
ZWwuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZXNzYWdlUG9ydENoYW5uZWxfaAorI2RlZmlu
ZSBNZXNzYWdlUG9ydENoYW5uZWxfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKwor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNz
IE1lc3NhZ2VQb3J0OworICAgIGNsYXNzIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOworICAg
IGNsYXNzIFN0cmluZzsKKworICAgIC8vIE1lc3NhZ2VQb3J0Q2hhbm5lbCBpcyBhIHBsYXRmb3Jt
LWluZGVwZW5kZW50IGludGVyZmFjZSB0byB0aGUgcmVtb3RlIHNpZGUgb2YgYSBtZXNzYWdlIGNo
YW5uZWwuCisgICAgLy8gSXQgYWN0cyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBwbGF0Zm9ybS1k
ZXBlbmRlbnQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwgaW1wbGVtZW50YXRpb24gd2hpY2gg
ZW5zdXJlcyB0aGF0IHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgY2xvc2UoKSBtZXRob2QgaXMgaW52
b2tlZCBiZWZvcmUgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3MgTWVzc2FnZVBvcnRDaGFubmVsIDog
Tm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gQ3JlYXRlcyBhIG5ldyB3cmFw
cGVyIGZvciB0aGUgcGFzc2VkIGNoYW5uZWwuCisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbD4gY3JlYXRlKFBhc3NSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWw+KTsKKworICAgICAgICAvLyBFbnRhbmdsZXMgdGhlIGNoYW5uZWwgd2l0aCBhIHBvcnQg
KGNhbGxlZCB3aGVuIGEgcG9ydCBoYXMgYmVlbiBjbG9uZWQsIGFmdGVyIHRoZSBjbG9uZSBoYXMg
YmVlbiBtYXJzaGFsbGVkIHRvIGl0cyBuZXcgb3duaW5nIHRocmVhZCBhbmQgaXMgcmVhZHkgdG8g
cmVjZWl2ZSBtZXNzYWdlcykuCisgICAgICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGVudGFu
Z2xlbWVudCBmYWlsZWQgYmVjYXVzZSB0aGUgcG9ydCB3YXMgY2xvc2VkLgorICAgICAgICBib29s
IGVudGFuZ2xlSWZPcGVuKE1lc3NhZ2VQb3J0Kik7CisKKyAgICAgICAgLy8gRGlzZW50YW5nbGVz
IHRoZSBjaGFubmVsIGZyb20gYSBnaXZlbiBwb3J0IHNvIGl0IG5vIGxvbmdlciBmb3J3YXJkcyBt
ZXNzYWdlcyB0byB0aGUgcG9ydC4gQ2FsbGVkIHdoZW4gdGhlIHBvcnQgaXMgYmVpbmcgY2xvbmVk
IGFuZCBubyBuZXcgb3duaW5nIHRocmVhZCBoYXMgeWV0IGJlZW4gZXN0YWJsaXNoZWQuCisgICAg
ICAgIHZvaWQgZGlzZW50YW5nbGUoKTsKKworICAgICAgICAvLyBDbG9zZXMgdGhlIHBvcnQgKGVu
c3VyZXMgdGhhdCBubyBmdXJ0aGVyIG1lc3NhZ2VzIGNhbiBiZSBhZGRlZCB0byBlaXRoZXIgcXVl
dWUpLgorICAgICAgICB2b2lkIGNsb3NlKCk7CisKKyAgICAgICAgLy8gVXNlZCBieSBNZXNzYWdl
UG9ydC5wb3N0TWVzc2FnZSgpIHRvIHByZXZlbnQgY2FsbGVycyBmcm9tIHBhc3NpbmcgYSBwb3J0
J3Mgb3duIGVudGFuZ2xlZCBwb3J0LgorICAgICAgICBib29sIGlzQ29ubmVjdGVkVG8oTWVzc2Fn
ZVBvcnQqKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYW5uZWwgY3VycmVu
dGx5IGNvbnRhaW5zIG1lc3NhZ2VzIGZvciB0aGlzIHBvcnQsIG9yIG1heSByZWNlaXZlIG1lc3Nh
Z2VzIGluIHRoZSBmdXR1cmUgKGlzIG9wZW4pLgorICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rp
dml0eSgpOworCisgICAgICAgIGNsYXNzIEV2ZW50RGF0YSB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEV2ZW50RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPik7CisKKyAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSgpIHsgcmV0dXJuIG1fbWVzc2FnZTsgfQorICAgICAgICAgICAgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwoKSB7IHJldHVybiBtX2NoYW5uZWwu
cmVsZWFzZSgpOyB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEV2ZW50RGF0YShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPik7Cisg
ICAgICAgICAgICBTdHJpbmcgbV9tZXNzYWdlOworICAgICAgICAgICAgT3duUHRyPE1lc3NhZ2VQ
b3J0Q2hhbm5lbD4gbV9jaGFubmVsOworICAgICAgICB9OworCisgICAgICAgIC8vIFNlbmRzIGEg
bWVzc2FnZSBhbmQgb3B0aW9uYWwgY2xvbmVkIHBvcnQgdG8gdGhlIHJlbW90ZSBwb3J0LgorICAg
ICAgICB2b2lkIHBvc3RNZXNzYWdlVG9SZW1vdGUoUGFzc093blB0cjxFdmVudERhdGE+KTsKKwor
ICAgICAgICAvLyBFeHRyYWN0cyBhIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBxdWV1ZSBmb3Ig
dGhpcyBwb3J0LgorICAgICAgICBib29sIHRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKE93blB0cjxF
dmVudERhdGE+Jik7CisKKyAgICAgICAgfk1lc3NhZ2VQb3J0Q2hhbm5lbCgpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgTWVzc2FnZVBvcnRDaGFubmVsKFBhc3NSZWZQdHI8UGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWw+KTsKKyAgICAgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFu
bmVsPiBtX2NoYW5uZWw7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gTWVzc2FnZVBvcnRDaGFubmVsX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01lc3Nh
Z2VQb3J0UHJveHkuaCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0UHJveHkuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyNGYzZC4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2RvbS9N
ZXNzYWdlUG9ydFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKg0KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLSAq
DQotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0DQotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KLSAqIG1ldDoNCi0gKg0KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0DQotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLg0KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQ0KLSAqIGRpc3RyaWJ1dGlvbi4NCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KLSAqDQot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUw0KLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQNCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZDQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuDQotICovDQotDQotI2lmbmRlZiBNZXNzYWdlUG9ydFByb3h5X2gNCi0jZGVmaW5l
IE1lc3NhZ2VQb3J0UHJveHlfaA0KLQ0KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPg0KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPg0KLQ0KLW5hbWVzcGFjZSBXZWJDb3JlIHsNCi0NCi0g
ICAgY2xhc3MgTWVzc2FnZVBvcnQ7DQotICAgIGNsYXNzIFN0cmluZzsNCi0NCi0gICAgY2xhc3Mg
TWVzc2FnZVBvcnRQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0UHJveHk+IHsN
Ci0gICAgcHVibGljOg0KLSAgICAgICAgdmlydHVhbCB+TWVzc2FnZVBvcnRQcm94eSgpIHsgfQ0K
LQ0KLSAgICAgICAgdmlydHVhbCB2b2lkIGVudGFuZ2xlKE1lc3NhZ2VQb3J0UHJveHkqKSA9IDA7
DQotICAgICAgICB2aXJ0dWFsIHZvaWQgdW5lbnRhbmdsZSgpID0gMDsNCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBkZWxpdmVyTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8
TWVzc2FnZVBvcnQ+KSA9IDA7DQotICAgICAgICB2aXJ0dWFsIHZvaWQgcXVldWVDbG9zZUV2ZW50
KCkgPSAwOw0KLSAgICB9Ow0KLQ0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCi0NCi0jZW5kaWYg
Ly8gTWVzc2FnZVBvcnRQcm94eV9oDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAgYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNw
cAppbmRleCBjNTE4NzM0Li40NWQ0ZTIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmNwcApAQCAtODgsNyArODgsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRp
c3BhdGNoTWVzc2FnZVBvcnRFdmVudHMoKQogICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9IHBv
cnRzW2ldOwogICAgICAgICAvLyBUaGUgcG9ydCBtYXkgYmUgZGVzdHJveWVkLCBhbmQgYW5vdGhl
ciBvbmUgY3JlYXRlZCBhdCB0aGUgc2FtZSBhZGRyZXNzLCBidXQgdGhpcyBpcyBzYWZlLCBhcyB0
aGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuCiAgICAgICAgIC8vIGFzIGEgcmVzdWx0IGlzIHRoYXQg
ZGlzcGF0Y2hNZXNzYWdlcygpIHdpbGwgYmUgY2FsbGVkIG5lZWRsZXNzbHkuCi0gICAgICAgIGlm
IChtX21lc3NhZ2VQb3J0cy5jb250YWlucyhwb3J0KSAmJiBwb3J0LT5xdWV1ZUlzT3BlbigpKQor
ICAgICAgICBpZiAobV9tZXNzYWdlUG9ydHMuY29udGFpbnMocG9ydCkgJiYgcG9ydC0+c3RhcnRl
ZCgpKQogICAgICAgICAgICAgcG9ydC0+ZGlzcGF0Y2hNZXNzYWdlcygpOwogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5MWY4MgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3Bw
CkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsLmgiCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIE1lc3NhZ2VQb3J0Q2hhbm5lbCBpbXBsZW1lbnRhdGlvbnMg
LSBqdXN0IGRlbGVnYXRlIHRvIHRoZSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC4KK2Jvb2wg
TWVzc2FnZVBvcnRDaGFubmVsOjplbnRhbmdsZUlmT3BlbihNZXNzYWdlUG9ydCogcG9ydCkKK3sK
KyAgICByZXR1cm4gbV9jaGFubmVsLT5lbnRhbmdsZUlmT3Blbihwb3J0KTsKK30KKwordm9pZCBN
ZXNzYWdlUG9ydENoYW5uZWw6OmRpc2VudGFuZ2xlKCkKK3sKKyAgICBtX2NoYW5uZWwtPmRpc2Vu
dGFuZ2xlKCk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVt
b3RlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+IG1lc3NhZ2UpCit7
CisgICAgbV9jaGFubmVsLT5wb3N0TWVzc2FnZVRvUmVtb3RlKG1lc3NhZ2UpOworfQorCitib29s
IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6dHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUoT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiYgcmVzdWx0KQoreworICAgIHJldHVybiBtX2NoYW5u
ZWwtPnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKHJlc3VsdCk7Cit9CisKK3ZvaWQgTWVzc2FnZVBv
cnRDaGFubmVsOjpjbG9zZSgpCit7CisgICAgbV9jaGFubmVsLT5jbG9zZSgpOworfQorCitib29s
IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6aXNDb25uZWN0ZWRUbyhNZXNzYWdlUG9ydCogcG9ydCkKK3sK
KyAgICByZXR1cm4gbV9jaGFubmVsLT5pc0Nvbm5lY3RlZFRvKHBvcnQpOworfQorCitib29sIE1l
c3NhZ2VQb3J0Q2hhbm5lbDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkKK3sKKyAgICByZXR1cm4gbV9j
aGFubmVsLT5oYXNQZW5kaW5nQWN0aXZpdHkoKTsKK30KKworCitQYXNzUmVmUHRyPFBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsPiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKFBh
c3NSZWZQdHI8TWVzc2FnZVBvcnRRdWV1ZT4gaW5jb21pbmcsIFBhc3NSZWZQdHI8TWVzc2FnZVBv
cnRRdWV1ZT4gb3V0Z29pbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbChpbmNvbWluZywgb3V0Z29pbmcpKTsKK30KKworUGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWw6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsKFBhc3NSZWZQdHI8TWVz
c2FnZVBvcnRRdWV1ZT4gaW5jb21pbmcsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRRdWV1ZT4gb3V0
Z29pbmcpCisgICAgOiBtX2VudGFuZ2xlZENoYW5uZWwoMCkKKyAgICAsIG1faW5jb21pbmdRdWV1
ZShpbmNvbWluZykKKyAgICAsIG1fb3V0Z29pbmdRdWV1ZShvdXRnb2luZykKKyAgICAsIG1fcmVt
b3RlUG9ydCgwKQoreworfQorCitQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6flBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsKCkKK3sKK30KKwordm9pZCBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbDo6Y3JlYXRlQ2hhbm5lbChQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0MSwgUGFzc1Jl
ZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDIpCit7CisgICAgLy8gQ3JlYXRlIGluY29taW5nL291dGdv
aW5nIHF1ZXVlcy4KKyAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6Ok1lc3Nh
Z2VQb3J0UXVldWU+IHF1ZXVlMSA9IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpNZXNzYWdl
UG9ydFF1ZXVlOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWw6Ok1lc3NhZ2VQb3J0UXVldWU+IHF1ZXVlMiA9IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVs
OjpNZXNzYWdlUG9ydFF1ZXVlOjpjcmVhdGUoKTsKKworICAgIC8vIENyZWF0ZSBwcm94aWVzIGZv
ciBlYWNoIGVuZHBvaW50LgorICAgIFJlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4g
Y2hhbm5lbDEgPSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHF1ZXVlMSwgcXVl
dWUyKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwyID0g
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShxdWV1ZTIsIHF1ZXVlMSk7CisKKyAg
ICAvLyBFbnRhbmdsZSB0aGUgdHdvIGVuZHBvaW50cy4KKyAgICBjaGFubmVsMS0+c2V0RW50YW5n
bGVkQ2hhbm5lbChjaGFubmVsMik7CisgICAgY2hhbm5lbDItPnNldEVudGFuZ2xlZENoYW5uZWwo
Y2hhbm5lbDEpOworCisgICAgLy8gTm93IGVudGFuZ2xlIHRoZSBwcm94aWVzIHdpdGggdGhlIGFw
cHJvcHJpYXRlIGxvY2FsIHBvcnRzLgorICAgIHBvcnQxLT5lbnRhbmdsZShNZXNzYWdlUG9ydENo
YW5uZWw6OmNyZWF0ZShjaGFubmVsMikpOworICAgIHBvcnQyLT5lbnRhbmdsZShNZXNzYWdlUG9y
dENoYW5uZWw6OmNyZWF0ZShjaGFubmVsMSkpOworfQorCitib29sIFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsOjplbnRhbmdsZUlmT3BlbihNZXNzYWdlUG9ydCogcG9ydCkKK3sKKyAgICAvLyBX
ZSBjYW4ndCBjYWxsIG1lbWJlciBmdW5jdGlvbnMgb24gb3VyIHJlbW90ZSBwYWlyIHdoaWxlIGhv
bGRpbmcgb3VyIG11dGV4IG9yIHdlJ2xsIGRlYWRsb2NrLCBidXQgd2UgbmVlZCB0byBndWFyZCBh
Z2FpbnN0IHRoZSByZW1vdGUgcG9ydCBnZXR0aW5nIGNsb3NlZC9mcmVlZCwgc28gY3JlYXRlIGEg
c3RhbmRhbG9uZSByZWZlcmVuY2UuCisgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFu
bmVsPiByZW1vdGUgPSBlbnRhbmdsZWRDaGFubmVsKCk7CisgICAgaWYgKCFyZW1vdGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZW1vdGUtPnNldFJlbW90ZVBvcnQocG9ydCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmRpc2Vu
dGFuZ2xlKCkKK3sKKyAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IHJlbW90
ZSA9IGVudGFuZ2xlZENoYW5uZWwoKTsKKyAgICBpZiAocmVtb3RlKQorICAgICAgICByZW1vdGUt
PnNldFJlbW90ZVBvcnQoMCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
OnNldFJlbW90ZVBvcnQoTWVzc2FnZVBvcnQqIHBvcnQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
ayhtX211dGV4KTsKKyAgICAvLyBTaG91bGQgbmV2ZXIgc2V0IHBvcnQgaWYgaXQgaXMgYWxyZWFk
eSBzZXQuCisgICAgQVNTRVJUKCFwb3J0IHx8ICFtX3JlbW90ZVBvcnQpOworICAgIG1fcmVtb3Rl
UG9ydCA9IHBvcnQ7Cit9CisKK01lc3NhZ2VQb3J0KiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bDo6cmVtb3RlUG9ydCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBy
ZXR1cm4gbV9yZW1vdGVQb3J0OworfQorCitQYXNzUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsPiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6ZW50YW5nbGVkQ2hhbm5lbCgpCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9lbnRhbmdsZWRD
aGFubmVsOworfQorCit2b2lkIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpzZXRFbnRhbmds
ZWRDaGFubmVsKFBhc3NSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IHJlbW90ZSkK
K3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIC8vIFNob3VsZCBvbmx5IGJl
IHNldCBhcyBwYXJ0IG9mIGluaXRpYWwgY3JlYXRpb24vZW50YW5nbGVtZW50LgorICAgIGlmIChy
ZW1vdGUpCisgICAgICAgIEFTU0VSVCghbV9lbnRhbmdsZWRDaGFubmVsLmdldCgpKTsKKyAgICBt
X2VudGFuZ2xlZENoYW5uZWwgPSByZW1vdGU7Cit9CisKK3ZvaWQgUGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWw6OnBvc3RNZXNzYWdlVG9SZW1vdGUoUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWw6OkV2ZW50RGF0YT4gbWVzc2FnZSkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgp
OworICAgIGlmICghbV9vdXRnb2luZ1F1ZXVlKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCB3
YXNFbXB0eSA9IG1fb3V0Z29pbmdRdWV1ZS0+YXBwZW5kQW5kQ2hlY2tFbXB0eShtZXNzYWdlKTsK
KyAgICBpZiAod2FzRW1wdHkgJiYgbV9yZW1vdGVQb3J0KQorICAgICAgICBtX3JlbW90ZVBvcnQt
Pm1lc3NhZ2VBdmFpbGFibGUoKTsKK30KKworYm9vbCBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bDo6dHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUoT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZl
bnREYXRhPiYgcmVzdWx0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAg
cmV0dXJuIG1faW5jb21pbmdRdWV1ZS0+dHJ5R2V0TWVzc2FnZShyZXN1bHQpOworfQorCitib29s
IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjppc0Nvbm5lY3RlZFRvKE1lc3NhZ2VQb3J0KiBw
b3J0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgcmV0dXJuIG1fcmVt
b3RlUG9ydCA9PSBwb3J0OworfQorCisvLyBDbG9zZXMgdGhlIHBvcnQgc28gbm8gZnVydGhlciBt
ZXNzYWdlcyBjYW4gYmUgc2VudCBmcm9tIGVpdGhlciBlbmQuCit2b2lkIFBsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsOjpjbG9zZSgpCit7CisgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsPiByZW1vdGUgPSBlbnRhbmdsZWRDaGFubmVsKCk7CisgICAgaWYgKCFyZW1vdGUpCisg
ICAgICAgIHJldHVybjsKKyAgICBjbG9zZUludGVybmFsKCk7CisgICAgcmVtb3RlLT5jbG9zZUlu
dGVybmFsKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNsb3NlSW50
ZXJuYWwoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgLy8gRGlzZW50
YW5nbGUgb3Vyc2VsdmVzIGZyb20gdGhlIG90aGVyIGVuZC4gV2Ugc3RpbGwgbWFpbnRhaW4gYSBy
ZWZlcmVuY2UgdG8gb3VyIGluY29taW5nIHF1ZXVlLCBzaW5jZSBwcmV2aW91c2x5LWV4aXN0aW5n
IG1lc3NhZ2VzIHNob3VsZCBzdGlsbCBiZSBkZWxpdmVyZWQuCisgICAgbV9yZW1vdGVQb3J0ID0g
MDsKKyAgICBtX2VudGFuZ2xlZENoYW5uZWwgPSAwOworICAgIG1fb3V0Z29pbmdRdWV1ZSA9IDA7
Cit9CisKK2Jvb2wgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6Omhhc1BlbmRpbmdBY3Rpdml0
eSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9lbnRh
bmdsZWRDaGFubmVsIHx8ICFtX2luY29taW5nUXVldWUtPmlzRW1wdHkoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZGM3
YTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsX2gKKyNkZWZpbmUgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWxfaAorCisjaW5j
bHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCisKKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVl
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIE1lc3NhZ2VQb3J0OworCisg
ICAgLy8gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwgaXMgYSBwbGF0Zm9ybS1kZXBlbmRlbnQg
aW50ZXJmYWNlIHRvIHRoZSByZW1vdGUgc2lkZSBvZiBhIG1lc3NhZ2UgY2hhbm5lbC4KKyAgICAv
LyBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgbXVsdGlwbGUgdGhyZWFkcyBy
dW5uaW5nIHdpdGhpbiBhIHNpbmdsZSBwcm9jZXNzLiBJbXBsZW1lbnRhdGlvbnMgZm9yIG11bHRp
LXByb2Nlc3MgcGxhdGZvcm1zIHNob3VsZCBkZWZpbmUgdGhlc2UgcHVibGljIEFQSXMgaW4gdGhl
aXIgb3duIHBsYXRmb3JtLXNwZWNpZmljIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsIGZpbGUu
CisgICAgLy8gVGhlIGdvYWwgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0byBlbGltaW5hdGUg
Y29udGVudGlvbiBleGNlcHQgd2hlbiBjbG9uaW5nIG9yIGNsb3NpbmcgdGhlIHBvcnQsIHNvIGVh
Y2ggc2lkZSBvZiB0aGUgY2hhbm5lbCBoYXMgaXRzIG93biBzZXBhcmF0ZSBtdXRleC4KKyAgICBj
bGFzcyBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVk
PFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiB7CisgICAgcHVibGljOgorICAgICAgICAvLyBD
cmVhdGVzIGEgY2hhbm5lbCBlbnRhbmdsaW5nIHR3byBwb3J0cy4KKyAgICAgICAgc3RhdGljIHZv
aWQgY3JlYXRlQ2hhbm5lbChQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiwgUGFzc1JlZlB0cjxNZXNz
YWdlUG9ydD4pOworCisgICAgICAgIC8vIEVudGFuZ2xlcyB0aGUgY2hhbm5lbCB3aXRoIGEgcG9y
dCAoY2FsbGVkIHdoZW4gYSBwb3J0IGhhcyBiZWVuIGNsb25lZCwgYWZ0ZXIgdGhlIGNsb25lIGhh
cyBiZWVuIG1hcnNoYWxsZWQgdG8gaXRzIG5ldyBvd25pbmcgdGhyZWFkIGFuZCBpcyByZWFkeSB0
byByZWNlaXZlIG1lc3NhZ2VzKS4KKyAgICAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgZW50
YW5nbGVtZW50IGZhaWxlZCBiZWNhdXNlIHRoZSBwb3J0IHdhcyBjbG9zZWQuCisgICAgICAgIGJv
b2wgZW50YW5nbGVJZk9wZW4oTWVzc2FnZVBvcnQqKTsKKworICAgICAgICAvLyBEaXNlbnRhbmds
ZXMgdGhlIGNoYW5uZWwgZnJvbSBhIGdpdmVuIHBvcnQgc28gaXQgbm8gbG9uZ2VyIGZvcndhcmRz
IG1lc3NhZ2VzIHRvIHRoZSBwb3J0LiBDYWxsZWQgd2hlbiB0aGUgcG9ydCBpcyBiZWluZyBjbG9u
ZWQgYW5kIG5vIG5ldyBvd25pbmcgdGhyZWFkIGhhcyB5ZXQgYmVlbiBlc3RhYmxpc2hlZC4KKyAg
ICAgICAgdm9pZCBkaXNlbnRhbmdsZSgpOworCisgICAgICAgIC8vIFNlbmRzIGEgbWVzc2FnZSBh
bmQgb3B0aW9uYWwgY2xvbmVkIHBvcnQgdG8gdGhlIHJlbW90ZSBwb3J0LgorICAgICAgICB2b2lk
IHBvc3RNZXNzYWdlVG9SZW1vdGUoUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50
RGF0YT4pOworCisgICAgICAgIC8vIEV4dHJhY3RzIGEgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdl
IHF1ZXVlIGZvciB0aGlzIHBvcnQuCisgICAgICAgIGJvb2wgdHJ5R2V0TWVzc2FnZUZyb21SZW1v
dGUoT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiYpOworCisgICAgICAgIC8v
IENsb3NlcyB0aGUgcG9ydCAoZW5zdXJlcyB0aGF0IG5vIGZ1cnRoZXIgbWVzc2FnZXMgY2FuIGJl
IGFkZGVkIHRvIGVpdGhlciBxdWV1ZSkuCisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAg
ICAvLyBVc2VkIGJ5IE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCkgdG8gcHJldmVudCBjYWxsZXJz
IGZyb20gcGFzc2luZyBhIHBvcnQncyBvd24gZW50YW5nbGVkIHBvcnQuCisgICAgICAgIGJvb2wg
aXNDb25uZWN0ZWRUbyhNZXNzYWdlUG9ydCopOworCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgY2hhbm5lbCBjdXJyZW50bHkgY29udGFpbnMgbWVzc2FnZXMgZm9yIHRoaXMgcG9ydCwg
b3IgbWF5IHJlY2VpdmUgbWVzc2FnZXMgaW4gdGhlIGZ1dHVyZSAoaXMgb3BlbikuCisgICAgICAg
IGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCk7CisKKyAgICAgICAgLy8gV3JhcHBlciBmb3IgTWVz
c2FnZVF1ZXVlIHRoYXQgYWxsb3dzIHVzIHRvIGRvIHRocmVhZCBzYWZlIHNoYXJpbmcgYnkgdHdv
IHByb3hpZXMuCisgICAgICAgIGNsYXNzIE1lc3NhZ2VQb3J0UXVldWUgOiBwdWJsaWMgVGhyZWFk
U2FmZVNoYXJlZDxNZXNzYWdlUG9ydFF1ZXVlPiB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNZXNzYWdlUG9ydFF1ZXVlKCkpOyB9CisKKyAgICAgICAgICAgIGJvb2wg
dHJ5R2V0TWVzc2FnZShPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+JiBtZXNz
YWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6
RXZlbnREYXRhKiBob2xkZXI7CisgICAgICAgICAgICAgICAgYm9vbCBtZXNzYWdlQXZhaWxhYmxl
ID0gbV9xdWV1ZS50cnlHZXRNZXNzYWdlKGhvbGRlcik7CisgICAgICAgICAgICAgICAgaWYgKG1l
c3NhZ2VBdmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0KGhvbGRlcik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VBdmFpbGFibGU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJvb2wgYXBwZW5kQW5kQ2hlY2tFbXB0eShQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBtZXNzYWdlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX3F1ZXVlLmFwcGVuZEFuZENoZWNrRW1wdHkobWVzc2FnZS5yZWxl
YXNlKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIGlzRW1wdHkoKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3F1ZXVlLmlzRW1wdHkoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgfk1lc3NhZ2VQb3J0UXVldWUoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIE1hbnVhbGx5IGZyZWUgYW55IGl0ZW1zIGxlZnQgaW4g
dGhlIHF1ZXVlLCBzaW5jZSB3ZSBjYW4ndCB1c2UgT3duUHRyIGludGVybmFsbHkuCisgICAgICAg
ICAgICAgICAgTWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGEqIGRhdGE7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKG1fcXVldWUudHJ5R2V0TWVzc2FnZShkYXRhKSkKKyAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIGRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBNZXNzYWdlUG9ydFF1ZXVlKCkgeyB9CisKKyAgICAgICAgICAgIC8vIE93blB0ciBp
cyBOb25jb3B5YWJsZSwgc28gd2UgY2FuJ3QgdXNlIGl0IGFzIHRoZSB0ZW1wbGF0ZSB0eXBlIGlu
IGEgTWVzc2FnZVF1ZXVlLiBTbyB3ZSBqdXN0IHN0b3JlIGEgcG9pbnRlciB0byBFdmVudERhdGEg
YW5kIG1hbnVhbGx5IGZyZWUgaXQgaW4gdGhlIGRlc3RydWN0b3IuCisgICAgICAgICAgICAvLyBG
SVhNRTogVXNlIGEgbG9jay1mcmVlIHF1ZXVlIGltcGxlbWVudGF0aW9uIHRvIGNvbXBsZXRlbHkg
ZWxpbWluYXRlIGNvbnRlbnRpb24gd2hlbiBzZW5kaW5nL3JlY2VpdmluZyBtZXNzYWdlcy4KKyAg
ICAgICAgICAgIE1lc3NhZ2VRdWV1ZTxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YSo+IG1f
cXVldWU7CisgICAgICAgIH07CisKKyAgICAgICAgflBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVs
KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbD4gY3JlYXRlKFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRRdWV1ZT4gaW5j
b21pbmcsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnRRdWV1ZT4gb3V0Z29pbmcpOworICAgICAgICBQ
bGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbChQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IGlu
Y29taW5nLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IG91dGdvaW5nKTsKKworICAgICAg
ICBQYXNzUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBlbnRhbmdsZWRDaGFubmVs
KCk7CisgICAgICAgIHZvaWQgc2V0RW50YW5nbGVkQ2hhbm5lbChQYXNzUmVmUHRyPFBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsPik7CisKKyAgICAgICAgdm9pZCBzZXRSZW1vdGVQb3J0KE1lc3Nh
Z2VQb3J0Kik7CisgICAgICAgIE1lc3NhZ2VQb3J0KiByZW1vdGVQb3J0KCk7CisgICAgICAgIHZv
aWQgY2xvc2VJbnRlcm5hbCgpOworCisgICAgICAgIC8vIE11dGV4IHVzZWQgdG8gZW5zdXJlIGV4
Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIG9iamVjdCBpbnRlcm5hbHMuCisgICAgICAgIE11dGV4IG1f
bXV0ZXg7CisKKyAgICAgICAgLy8gUG9pbnRlciB0byBvdXIgZW50YW5nbGVkIHBhaXIgLSBjbGVh
cmVkIHdoZW4gY2xvc2UoKSBpcyBjYWxsZWQuCisgICAgICAgIFJlZlB0cjxQbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbD4gbV9lbnRhbmdsZWRDaGFubmVsOworCisgICAgICAgIC8vIFJlZmVyZW5j
ZSB0byB0aGUgbWVzc2FnZSBxdWV1ZSBmb3IgdGhlIChsb2NhbCkgZW50YW5nbGVkIHBvcnQuCisg
ICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydFF1ZXVlPiBtX2luY29taW5nUXVldWU7CisgICAgICAg
IFJlZlB0cjxNZXNzYWdlUG9ydFF1ZXVlPiBtX291dGdvaW5nUXVldWU7CisKKyAgICAgICAgLy8g
VGhlIHBvcnQgd2UgYXJlIGNvbm5lY3RlZCB0byAodGhlIHJlbW90ZSBwb3J0KSAtIHRoaXMgaXMg
dGhlIHBvcnQgdGhhdCBpcyBub3RpZmllZCB3aGVuIG5ldyBtZXNzYWdlcyBhcnJpdmUuCisgICAg
ICAgIE1lc3NhZ2VQb3J0KiBtX3JlbW90ZVBvcnQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWxfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAppbmRleCBiYzExOTJkLi45YzNiZmNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtODcsMTQgKzg3
LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUG9zdE1lc3NhZ2VUaW1lciA6IHB1
YmxpYyBUaW1lckJhc2UgewogcHVibGljOgotICAgIFBvc3RNZXNzYWdlVGltZXIoRE9NV2luZG93
KiB3aW5kb3csIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudCwgU2VjdXJpdHlPcmlnaW4q
IHRhcmdldE9yaWdpbikKKyAgICBQb3N0TWVzc2FnZVRpbWVyKERPTVdpbmRvdyogd2luZG93LCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlT3JpZ2luLCBQYXNzUmVm
UHRyPERPTVdpbmRvdz4gc291cmNlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hh
bm5lbCwgU2VjdXJpdHlPcmlnaW4qIHRhcmdldE9yaWdpbikKICAgICAgICAgOiBtX3dpbmRvdyh3
aW5kb3cpCi0gICAgICAgICwgbV9ldmVudChldmVudCkKKyAgICAgICAgLCBtX21lc3NhZ2UobWVz
c2FnZSkKKyAgICAgICAgLCBtX29yaWdpbihzb3VyY2VPcmlnaW4pCisgICAgICAgICwgbV9zb3Vy
Y2Uoc291cmNlKQorICAgICAgICAsIG1fY2hhbm5lbChjaGFubmVsKQogICAgICAgICAsIG1fdGFy
Z2V0T3JpZ2luKHRhcmdldE9yaWdpbikKICAgICB7CiAgICAgfQogCi0gICAgTWVzc2FnZUV2ZW50
KiBldmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnQuZ2V0KCk7IH0KKyAgICBQYXNzUmVmUHRy
PE1lc3NhZ2VFdmVudD4gZXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAg
ICB7CisgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQ7CisgICAgICAgIGlm
IChtX2NoYW5uZWwpIHsKKyAgICAgICAgICAgIG1lc3NhZ2VQb3J0ID0gTWVzc2FnZVBvcnQ6OmNy
ZWF0ZSgqY29udGV4dCk7CisgICAgICAgICAgICBtZXNzYWdlUG9ydC0+ZW50YW5nbGUobV9jaGFu
bmVsLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE1lc3NhZ2VFdmVudDo6
Y3JlYXRlKG1fbWVzc2FnZSwgbV9vcmlnaW4sICIiLCBtX3NvdXJjZSwgbWVzc2FnZVBvcnQucmVs
ZWFzZSgpKTsKKyAgICB9CiAgICAgU2VjdXJpdHlPcmlnaW4qIHRhcmdldE9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fdGFyZ2V0T3JpZ2luLmdldCgpOyB9CiAKIHByaXZhdGU6CkBAIC0xMDQsNyAr
MTE1LDEwIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV93aW5k
b3c7Ci0gICAgUmVmUHRyPE1lc3NhZ2VFdmVudD4gbV9ldmVudDsKKyAgICBTdHJpbmcgbV9tZXNz
YWdlOworICAgIFN0cmluZyBtX29yaWdpbjsKKyAgICBSZWZQdHI8RE9NV2luZG93PiBtX3NvdXJj
ZTsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBtX2NoYW5uZWw7CiAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX3RhcmdldE9yaWdpbjsKIH07CiAKQEAgLTU5MSw5ICs2MDUsOSBA
QCB2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNz
YWdlUG9ydCogbWVzc2FnZVBvcnQsIGNvbgogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBuZXdNZXNzYWdlUG9ydDsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsPiBjaGFubmVsOwogICAgIGlmIChtZXNzYWdlUG9ydCkKLSAgICAgICAgbmV3TWVzc2FnZVBv
cnQgPSBtZXNzYWdlUG9ydC0+Y2xvbmUoZWMpOworICAgICAgICBjaGFubmVsID0gbWVzc2FnZVBv
cnQtPmRpc2VudGFuZ2xlKGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NjA1LDcgKzYxOSw3IEBAIHZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCwgY29uCiAgICAgU3RyaW5nIHNvdXJj
ZU9yaWdpbiA9IHNvdXJjZURvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpOwog
CiAgICAgLy8gU2NoZWR1bGUgdGhlIG1lc3NhZ2UuCi0gICAgUG9zdE1lc3NhZ2VUaW1lciogdGlt
ZXIgPSBuZXcgUG9zdE1lc3NhZ2VUaW1lcih0aGlzLCBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNz
YWdlLCBzb3VyY2VPcmlnaW4sICIiLCBzb3VyY2UsIG5ld01lc3NhZ2VQb3J0KSwgdGFyZ2V0Lmdl
dCgpKTsKKyAgICBQb3N0TWVzc2FnZVRpbWVyKiB0aW1lciA9IG5ldyBQb3N0TWVzc2FnZVRpbWVy
KHRoaXMsIG1lc3NhZ2UsIHNvdXJjZU9yaWdpbiwgc291cmNlLCBjaGFubmVsLnJlbGVhc2UoKSwg
dGFyZ2V0LmdldCgpKTsKICAgICB0aW1lci0+c3RhcnRPbmVTaG90KDApOwogfQogCkBAIC02MjYs
MTMgKzY0MCw4IEBAIHZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZVRpbWVyRmlyZWQoUG9zdE1l
c3NhZ2VUaW1lciogdCkKICAgICAgICAgfQogICAgIH0KIAotICAgIE1lc3NhZ2VQb3J0KiBtZXNz
YWdlUG9ydCA9IHRpbWVyLT5ldmVudCgpLT5tZXNzYWdlUG9ydCgpOwotICAgIEFTU0VSVCghbWVz
c2FnZVBvcnQgfHwgIW1lc3NhZ2VQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAg
IGlmIChtZXNzYWdlUG9ydCkKLSAgICAgICAgbWVzc2FnZVBvcnQtPmF0dGFjaFRvQ29udGV4dChk
b2N1bWVudCgpKTsKLQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRpc3BhdGNoRXZl
bnQodGltZXItPmV2ZW50KCksIGVjKTsKKyAgICBkaXNwYXRjaEV2ZW50KHRpbWVyLT5ldmVudChk
b2N1bWVudCgpKSwgZWMpOwogfQogCiBET01TZWxlY3Rpb24qIERPTVdpbmRvdzo6Z2V0U2VsZWN0
aW9uKCkK
</data>
<flag name="review"
          id="16080"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>