<?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>20879</bug_id>
          
          <creation_ts>2008-09-16 07:56:09 -0700</creation_ts>
          <short_desc>Implement HTML5 channel messaging</short_desc>
          <delta_ts>2009-12-25 08:35:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          <blocked>32934</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>91356</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-16 07:56:09 -0700</bug_when>
    <thetext>MessageChannel and MessagePort APIs, that is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91358</commentid>
    <comment_count>1</comment_count>
      <attachid>23473</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-16 08:17:14 -0700</bug_when>
    <thetext>Created attachment 23473
proposed patch

This doesn&apos;t include non-Mac project file changes yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91640</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-09-18 09:11:33 -0700</bug_when>
    <thetext>&gt; return new (exec) JSMessageChannelConstructor(exec, impl()-&gt;frame()); // FIXME: is this the right browsing context for MessageChannel?

That looks right to me.

&gt; JSMessageChannelConstructor(ExecState* exec, Frame* browsingContext)

I&apos;m not sure we want to hold on to the browsingContext as a Frame.  I think we&apos;d be better holding on to the DOMWindow.  The difference is that Frame is reused after navigation but DOMWindow is not.  If we hold on to the context as a Frame, the objects will magically change origins after navigation.  It looks like you only ever user the browsingContext to get at the DOMWindow anyway, so this should be an easy change.

We should also add a LayoutTest for this case.  Looks like we don&apos;t test this case for regular postMessage, but we should.  :)

&gt; Frame* browsingContext = asJSDOMWindow(exec-&gt;dynamicGlobalObject())-&gt;impl()-&gt;frame(); // FIXME: is this the right browsing context?

We should use the lexicalGlobalObject.  We&apos;re in the process of cleaning this up in TOT, so it&apos;s a bit confusing at the moment, but lexical is almost always the right global object.

&gt; String sourceOrigin = m_ownerContext-&gt;document()-&gt;securityOrigin()-&gt;toString();

Don&apos;t we need to null check document()?  This might have changed, but I think you can have a Frame without a Document.

Also, maybe I missed it, but how to you keep the MessagePorts, etc, from holding on to pointers to Frames that have been deallocated?  Recall that a document can outlive the frame in which it was created.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91648</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-18 10:33:42 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; JSMessageChannelConstructor(ExecState* exec, Frame* browsingContext)
&gt; 
&gt; I&apos;m not sure we want to hold on to the browsingContext as a Frame.  I think
&gt; we&apos;d be better holding on to the DOMWindow.  The difference is that Frame is
&gt; reused after navigation but DOMWindow is not.  If we hold on to the context as
&gt; a Frame, the objects will magically change origins after navigation.  It looks
&gt; like you only ever user the browsingContext to get at the DOMWindow anyway, so
&gt; this should be an easy change.

A browsing context as defined in HTML5 is a Frame, and there will be another variant for worker threads. A worker thread has no DOMWindow, so I tried to stick closer to the spec here (I think that I have the navigation case handled).

&gt; We should also add a LayoutTest for this case.

Agreed, will do.

&gt; Don&apos;t we need to null check document()?  This might have changed, but I think
&gt; you can have a Frame without a Document.

I don&apos;t know how to tell for sure, but the word of mouth on IRC was that this can no longer happen.

&gt; Also, maybe I missed it, but how to you keep the MessagePorts, etc, from
&gt; holding on to pointers to Frames that have been deallocated?  Recall that a
&gt; document can outlive the frame in which it was created.

I didn&apos;t know this can happen. I think that making MessagePort::m_ownerContext a RefPtr should work - how can I test this condition?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91652</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-09-18 10:58:03 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; A browsing context as defined in HTML5 is a Frame, and there will be another
&gt; variant for worker threads. A worker thread has no DOMWindow, so I tried to
&gt; stick closer to the spec here (I think that I have the navigation case
&gt; handled).

The HTML 5 spec is confused on this point.  I had some correspondence with Ian, and I think his plan is to prevent a closure from running if it isn&apos;t associated with the active document in its frame.  We don&apos;t have this behavior yet, so we&apos;ll need to make sure we handle the post-navigation cases correctly.

Will worker threads have Frames?  Maybe the long term solution is to create a BrowsingContext class and have DOMWindow inherit from that?

&gt; &gt; We should also add a LayoutTest for this case.
&gt; 
&gt; Agreed, will do.

There are two cases here:

1) A parent frame grabs a closure from a child frame, navigates the child, waits for the navigation to finish, and then calls the closure (which uses/creates a channel).

2) A frame uses/creates a channel, synchronously navigates to a new security origin (see LayoutTests/http/tests/security/xss-DENIED-synchronous-form.html for an example of how to do this), and then uses/creates another channel.

In both cases, we should also test the situation in which the channel is created before the navigation and used after the navigation.

&gt; &gt; Also, maybe I missed it, but how to you keep the MessagePorts, etc, from
&gt; &gt; holding on to pointers to Frames that have been deallocated?  Recall that a
&gt; &gt; document can outlive the frame in which it was created.
&gt; 
&gt; I didn&apos;t know this can happen. I think that making MessagePort::m_ownerContext
&gt; a RefPtr should work - how can I test this condition?

You can get the Document to outlive the Frame by grabbing a JavaScript pointer to the Document and then removing the Frame from the DOM.  For example, something like this should work:

&lt;script&gt;
var doc;
window.onload = function () {
  doc = frames[0].document;
  var holder = document.getElementById(&apos;frameHolder&apos;);
  holder.removeChild(holder.firstChild);
}
&lt;/script&gt;
&lt;div id=&quot;frameHolder&quot;&gt;
&lt;iframe src=&quot;...&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;

If that doesn&apos;t work, you can try creating a popup with window.open(), grabbing a pointer to its document, and closing the window.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91659</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-18 12:35:00 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The HTML 5 spec is confused on this point.  I had some correspondence with Ian,
&gt; and I think his plan is to prevent a closure from running if it isn&apos;t
&gt; associated with the active document in its frame.  We don&apos;t have this behavior
&gt; yet, so we&apos;ll need to make sure we handle the post-navigation cases correctly.

Messages to MessagePorts that are not associated with documents that are not fully active shouldn&apos;t be dispatched with the current code, because MesagePortTimer only dispatches messages for the active document in the frame, and only if the frame has a page, see MessagePortTimer::fired().

&gt; Will worker threads have Frames?  Maybe the long term solution is to create a
&gt; BrowsingContext class and have DOMWindow inherit from that?

Worker threads won&apos;t have frames, so my plan was to create a BrowsingContext class and make Frame inherit from that. Memeber variable names in the patch are already chosen with this in mind (Frame* m_ownerContext) and such.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91664</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-09-18 13:33:34 -0700</bug_when>
    <thetext>&gt; Messages to MessagePorts that are not associated with documents that are not
&gt; fully active shouldn&apos;t be dispatched with the current code, because
&gt; MesagePortTimer only dispatches messages for the active document in the frame,
&gt; and only if the frame has a page, see MessagePortTimer::fired().

Ok.  The easiest thing is probably to leave it as a Frame for now.  If we can find test cases where it does the wrong thing, we can change it later.

&gt; Worker threads won&apos;t have frames, so my plan was to create a BrowsingContext
&gt; class and make Frame inherit from that. Memeber variable names in the patch are
&gt; already chosen with this in mind (Frame* m_ownerContext) and such.

That makes sense.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91781</commentid>
    <comment_count>7</comment_count>
      <attachid>23573</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-19 10:34:14 -0700</bug_when>
    <thetext>Created attachment 23573
updated patch

&gt; We should use the lexicalGlobalObject.

Fixed.

&gt; Also, maybe I missed it, but how to you keep the MessagePorts, etc, from
&gt; holding on to pointers to Frames that have been deallocated?

Fixed this (it did crash), and several more instances of hanging references. Added a test case.

(In reply to comment #4)
&gt; 1) A parent frame grabs a closure from a child frame, navigates the child,
&gt; waits for the navigation to finish, and then calls the closure (which
&gt; uses/creates a channel).

Currently, messages sent through the created port have the new origin. More precisely,

Subframe:
window.createClosure = function() {
    var MessageChannelConstructor = window.MessageChannel;
    return function() {
        var channel = new MessageChannelConstructor; // can&apos;t use window.MessageChannel
        channel.port1.postMessage(&quot;ping&quot;);
        return channel.port2;
    }
}

Main frame:
var closure = window.frames[0].createClosure();
... navigate subframe from 127.0.0.1 to localhost
var mainPort = closure();
mainPort.onmessage = function(evt) {
   alert(evt.origin); // http://localhost:8000
}
mainPort.start();

Is this correct behavior?

&gt; 2) A frame uses/creates a channel, synchronously navigates to a new security
&gt; origin (see LayoutTests/http/tests/security/xss-DENIED-synchronous-form.html
&gt; for an example of how to do this), and then uses/creates another channel.

I&apos;m not sure what this means - what kinds of issues I can expect if a new channel is created?

&gt; In both cases, we should also test the situation in which the channel is
&gt; created before the navigation and used after the navigation.

Noted, but haven&apos;t tried this yet, as I&apos;m also not sure about expected behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91784</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-09-19 11:13:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; 1) A parent frame grabs a closure from a child frame, navigates the child,
&gt; &gt; waits for the navigation to finish, and then calls the closure (which
&gt; &gt; uses/creates a channel).
&gt; 
&gt; Currently, messages sent through the created port have the new origin.
&gt; [snip]
&gt; Is this correct behavior?

This isn&apos;t the behavior we want because it lets content from one origin impersonate another origin by spoofing the &quot;origin&quot; property.  If we hold on to the DOMWindow instead of the Frame, the origin property shouldn&apos;t be spoofable.

&gt; &gt; 2) A frame uses/creates a channel, synchronously navigates to a new security
&gt; &gt; origin (see LayoutTests/http/tests/security/xss-DENIED-synchronous-form.html
&gt; &gt; for an example of how to do this), and then uses/creates another channel.
&gt; 
&gt; I&apos;m not sure what this means - what kinds of issues I can expect if a new
&gt; channel is created?

What this test is supposed to get at is whether the &quot;origin&quot; property is determined at the time the message/channel is created or at the time when the message/channel is used.  The description probably isn&apos;t that clear.  We&apos;ll probably have to use the channel (as well as create it) to see interesting behavior.

&gt; &gt; In both cases, we should also test the situation in which the channel is
&gt; &gt; created before the navigation and used after the navigation.
&gt; 
&gt; Noted, but haven&apos;t tried this yet, as I&apos;m also not sure about expected
&gt; behavior.

The behavior we&apos;re trying to avoid is letting an malicious web site send a message that identifies itself as originating from an honest web site.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91791</commentid>
    <comment_count>9</comment_count>
      <attachid>23573</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-19 11:38:18 -0700</bug_when>
    <thetext>Comment on attachment 23573
updated patch

Thanks, I think I finally understood the scenario.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91883</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-20 01:56:26 -0700</bug_when>
    <thetext>...not quite.

What I did understand was that code loaded from one origin was dispatching an event with another origin. However, it only happens when the other side tries really hard to achieve that - and I don&apos;t see how to send a spoofed message to 3rd party. What am I missing?

More importantly, Hixie has just pointed it out to me that MessagePort messages are supposed to have an empty origin:

&quot;Unless otherwise specified, when the user agent creates and dispatches a 
message event in the algorithms described in the following sections, ... 
the origin attribute must be the empty string ...&quot;
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92066</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-09-21 19:44:26 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; What I did understand was that code loaded from one origin was dispatching an
&gt; event with another origin. However, it only happens when the other side tries
&gt; really hard to achieve that - and I don&apos;t see how to send a spoofed message to
&gt; 3rd party. What am I missing?

I&apos;m confident that an attacker can make this happen reliably.  The point is you&apos;re grabbing the security context from an object that the attacker can make have whatever security context he likes.

&gt; More importantly, Hixie has just pointed it out to me that MessagePort messages
&gt; are supposed to have an empty origin:

Ah, ok.  Then maybe this doesn&apos;t matter.  What else is the Frame* used for?  Do we get in trouble if the pointer points to a Frame with an unexpected Document?

I guess I don&apos;t understand why we don&apos;t want to use DOMWindow (or a new superclass of DOMWindow) to hold onto the context.  It seems like this avoids the complexity of having to reason about what happens during navigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92068</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-09-21 19:56:41 -0700</bug_when>
    <thetext>For example, JSMessagePort::addEventListener looks exploitable.  This function lets the attacker compile his script in toJSDOMWindow(impl()-&gt;ownerContext()), which can be the DOMWindow of any SecurityOrigin the attacker chooses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92092</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-21 23:55:13 -0700</bug_when>
    <thetext>(In reply to comment #11)

&gt; What else is the Frame* used for?  Do
&gt; we get in trouble if the pointer points to a Frame with an unexpected Document?

The current spec doesn&apos;t mention a lot of uses for it - it is only used in a very roundabout way to check that messages can be delivered (the owner should be &quot;available&quot;), and whether to unentangle the ports when a document is discarded. Its use in JSMessagePort::addEventListener is implicit (all the spec says is that the object should implement EventTarget, not how it should be implemented).

&gt; I guess I don&apos;t understand why we don&apos;t want to use DOMWindow (or a new
&gt; superclass of DOMWindow) to hold onto the context.

As far as I&apos;m concerned, I was trying to keep code close to what the spec says to make everyone&apos;s life easier. You&apos;ve convinced me that this wasn&apos;t such a great idea in this case.

Holding a pointer to DOMWindow is basically the same as holding one to Document, correct? I think most existing code uses a Document pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92099</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-09-22 01:20:55 -0700</bug_when>
    <thetext>&gt; Holding a pointer to DOMWindow is basically the same as holding one to
&gt; Document, correct? I think most existing code uses a Document pointer

Yeah, I think that works out to be the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92146</commentid>
    <comment_count>15</comment_count>
      <attachid>23654</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-22 10:05:33 -0700</bug_when>
    <thetext>Created attachment 23654
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92495</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-09-24 02:11:15 -0700</bug_when>
    <thetext>This patch looks a lot better w.r.t. the issues above.  I don&apos;t have reviewer status, so someone else will have to give you the r+.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92582</commentid>
    <comment_count>17</comment_count>
      <attachid>23654</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-24 14:05:15 -0700</bug_when>
    <thetext>Comment on attachment 23654
updated patch

&gt;+/* Hash table for constructor */
&gt;+
&gt;+static const HashTableValue JSMessageChannelConstructorTableValues[1] =
&gt;+{
&gt;+    { 0, 0, 0, 0 }
&gt;+};
&gt;+
&gt;+static const HashTable JSMessageChannelConstructorTable = { 0, JSMessageChannelConstructorTableValues, 0 };
&gt;+
&gt;+const ClassInfo JSMessageChannelConstructor::s_info = { &quot;MessageChannelConstructor&quot;, 0, &amp;JSMessageChannelConstructorTable, 0 };

I don&apos;t think you need a table at all.

&gt;+        Document* m_document;

This should be private.

&gt;+void Document::dispatchMessagePortEvents()
&gt;+{
&gt;+    RefPtr&lt;Document&gt; protect(this);
&gt;+    HashSet&lt;MessagePort*&gt; ports = m_messagePorts; // Make a frozen copy.

Can you make the frozen copy by copying to a Vector?

&gt;+void Document::createdMessagePort(MessagePort* port)
&gt;+{

This should assert that the MessagePort is not null.

&gt;+void Document::destroyedMessagePort(MessagePort* port)
&gt;+{

As should this.

&gt;+        MessagePort* port1() { return m_port1.get(); }
&gt;+        MessagePort* port2() { return m_port2.get(); }

These should be const.

&gt;+class CloseMessagePortTimer : public TimerBase {
&gt;+public:
&gt;+    CloseMessagePortTimer(PassRefPtr&lt;MessagePort&gt; port)
&gt;+        : m_port(port)
&gt;+    {

This should assert that the port is not null.

&gt;+    virtual void fired()
&gt;+    {
&gt;+        ASSERT(!m_port-&gt;active());
&gt;+
&gt;+        // Closing may destroy the port, dispatch any remaining messages now.
&gt;+        if (m_port-&gt;queueIsOpen())
&gt;+            m_port-&gt;dispatchMessages();
&gt;+
&gt;+        RefPtr&lt;Event&gt; evt = Event::create(EventNames::closeEvent, false, true);
&gt;+        if (m_port-&gt;onCloseListener()) {
&gt;+            evt-&gt;setTarget(m_port.get());
&gt;+            evt-&gt;setCurrentTarget(m_port.get());
&gt;+            m_port-&gt;onCloseListener()-&gt;handleEvent(evt.get(), false);
&gt;+        }
&gt;+
&gt;+        ExceptionCode ec = 0;
&gt;+        m_port-&gt;dispatchEvent(evt.release(), ec, false);
&gt;+        ASSERT(!ec);
&gt;+
&gt;+        delete this;

I think this would be cleaner if the all this work was done in a member function of MessagePort, which this fired method calls.

&gt;+    m_entangledPort-&gt;m_messageQueue.append(MessageEvent::create(message, &quot;&quot;, &quot;&quot;, m_createdWithDocument-&gt;domWindow(), newMessagePort.get()));

Why is the origin the empty string?

&gt;+PassRefPtr&lt;MessagePort&gt; MessagePort::startConversation(Document* scriptContext, const String&amp; message)

Perhaps the variable should be named scriptContextDocument?

&gt;+    m_entangledPort-&gt;m_messageQueue.append(MessageEvent::create(message, &quot;&quot;, &quot;&quot;, m_createdWithDocument-&gt;domWindow(), port2.get()));

Why is the origin the empty string?

&gt;+    MessagePort* otherPort = m_entangledPort;

otherPort is not a great name for this.

&gt;+void MessagePort::dispatchMessages()
&gt;+{
&gt;+    // Messages for documents that are not fully active get dispatched too, but JSAbstractEventListener::handleEvent() doesn&apos;t call handlers for these.
&gt;+    ASSERT(queueIsOpen());

Is it possible for an event dispatch to cause a MessagePort to go away?  Should it protect itself against it here?

&gt;+        Document* createdWithDocument() { return m_createdWithDocument; }

This sounds like it would return a boolean.  Perhaps it should be called something like, documentCreatedWith, associatedDocument, maybe even just document().

r=me and Anders!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92694</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-25 03:22:52 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/36891&gt;, making all suggested changes, except as specifically mentioned below.

&gt; I think this would be cleaner if the all this work was done in a member
&gt; function of MessagePort, which this fired method calls.

Moved most (but not all) of it to a member function.

&gt; Why is the origin the empty string?

That&apos;s what HTML5 says, see comment 10. My understanding is that you don&apos;t need one, as you explicitly create a channel to a known party.

&gt; otherPort is not a great name for this.

I think it is the right name to use, given that it is used in HTML5 when describing the algorithm.

&gt; Is it possible for an event dispatch to cause a MessagePort to go away?

I don&apos;t think it is - prior dispatching the event to the first listener, its target is set to the port, and Event retains its targets.

&gt; &gt;+        Document* createdWithDocument() { return m_createdWithDocument; }
&gt; This sounds like it would return a boolean.  Perhaps it should be called
&gt; something like, documentCreatedWith, associatedDocument, maybe even just
&gt; document().

Then document() it is. If this becomes an issue when refactoring to support non-Document owners, we can rename it again.

Thank you for the review!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23473</attachid>
            <date>2008-09-16 08:17:14 -0700</date>
            <delta_ts>2008-09-19 10:34:14 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>MessageChannel.txt</filename>
            <type>text/plain</type>
            <size>91057</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjUwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE1IEBACisyMDA4LTA5LTE2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NzkKKyAgICAgICAg
SW1wbGVtZW50IEhUTUw1IGNoYW5uZWwgbWVzc2FnaW5nCisKKyAgICAgICAgVGVzdHM6IGZhc3Qv
ZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50
cy9tZXNzYWdlLXBvcnQuaHRtbAorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54
Y2NvbmZpZzoKKyAgICAgICAgUmVtb3ZlZCB1bnVzZWQgIEVOQUJMRV9DUk9TU19ET0NVTUVOVF9N
RVNTQUdJTkcgbWFjcm8uCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICBBZGRlZCBNZXNzYWdlQ2hhbm5lbCBhbmQgTWVzc2FnZVBvcnQuCisKKyAgICAgICAgKiBXZWJD
b3JlLnBybzogTWFkZSBNZXNzYWdlRXZlbnQgY29tcGlsYXRpb24gdW5jb25kaXRpb25hbCwgYXMg
aXQgY291bGQgbm90IHBvc3NpYmx5IGJlCisgICAgICAgIHR1cm1lZCBvZmYgYW55d2F5LiBBZGRl
ZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IEFkZGVkIG5ldyBmaWxlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6IChXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICBBZGRlZCBz
dXBvcnQgZm9yIHdpbmRvdy5NZXNzYWdlQ2hhbm5lbCBjb25zdHJ1Y3Rvci4KKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDogKFdlYkNvcmU6OkpTRE9NV2luZG93
Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NV2luZG93Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgICogcGFnZS9ET01XaW5k
b3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgIEFkZGVkIHN1cHBv
cnQgZm9yIHRocmVlLWFyZ3VtZW50IHBvc3RNZXNzYWdlICh0aGF0IHBvc3RzIGEgTWVzc2FnZVBv
cnQpLgorCisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50VGFyZ2V0Ojp0b01lc3NhZ2VQb3J0KToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHA6IChXZWJDb3Jl
Ojp0b0pTKTogQWRkZWQgTWVzc2FnZVBvcnQgYXMgeWV0IGFub3RoZXIKKyAgICAgICAgRXZlbnRU
YXJnZXQgdmFyaWFudC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5jcHA6IEFkZGVkIGEgY3VzdG9tIGNvbnN0cnVjdG9yLCBzbyB0aGF0IGl0IGNvdWxk
CisgICAgICAgIHRha2UgYSBicm93c2luZyBjb250ZXh0IChmcmFtZSkgcGFyYW1ldGVyLgorCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlQ2hhbm5lbDo6bWFyayk6IEpTTWVzc2FnZUNoYW5u
ZWwgdXNlcyBhIGN1c3RvbSBtYXJrIGZ1bmN0aW9uIHRvIG1hcmsKKyAgICAgICAgcG9ydDEgYW5k
IHBvcnQyIHRoYXQgaXQgb3ducy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnN0
YXJ0Q29udmVyc2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OmFkZEV2
ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0OjpkaXNwYXRjaEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnNldE9ubWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0Ojpvbm1lc3NhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNNZXNzYWdlUG9ydDo6c2V0T25jbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpKU01l
c3NhZ2VQb3J0OjpvbmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6Om1h
cmspOgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5jcHA6IEFkZGVkLgorICAgICAgICAqIGRv
bS9NZXNzYWdlUG9ydC5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuaWRsOiBB
ZGRlZC4KKyAgICAgICAgQWRkZWQgYSBNZXNzYWdlUG9ydCBpbXBsZW1lbnRhdGlvbi4gQ3VycmVu
dGx5LCBpdCBpcyBub3QgdGhyZWFkLXNhZmUgYXQgYWxsLCBhbmQgb25seSB3b3JrcworICAgICAg
ICB3aXRoIEZyYW1lcyBhcyBjb250ZXh0cywgYnV0IGluIHRoZSBmdXR1cmUsIGl0IHdpbGwgYmUg
dXNlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggd29ya2VyCisgICAgICAgIHRocmVhZHMuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmg6IEluY2x1ZGUgIkRPTU1lc3NhZ2VQ
b3J0SW50ZXJuYWwuaCIuIFRoZSBuZXcgQVBJcyBkbyBub3QKKyAgICAgICAgcmVhbGx5IGhhdmUg
T2JqLUMgYmluZGluZ3MsIGFzIHRoZXkgYXJlIGZhciBmcm9tIGJlaW5nIGZpbmFsLCBidXQgYSBN
ZXNzYWdlUG9ydCBzdHViIGlzCisgICAgICAgIG5lZWRlZCBmb3IgTWVzc2FnZUV2ZW50LgorCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IEluY2x1ZGUgUGxh
dGZvcm1TdHJpbmcuaCBmb3IgTWVzc2FnZVBvcnQgaGFwcGluZXNzLgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZWRNZXNzYWdlUG9ydCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZGVzdHJveWVkTWVzc2FnZVBvcnQpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICBEb2N1bWVudCBrZWVwcyB0cmFjayBvZiBhbGwgTWVzc2Fn
ZVBvcnQgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCB3aGVuIGl0IHdhcyBmdWxseSBhY3RpdmUK
KyAgICAgICAgaW4gaXRzIGNvbnRleHQuCisKKyAgICAgICAgKiBkb20vRXZlbnROYW1lcy5oOiBB
ZGRlZCBjbG9zZUV2ZW50LgorCisgICAgICAgICogZG9tL01lc3NhZ2VDaGFubmVsLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlQ2hhbm5lbDo6TWVzc2FnZUNoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUNoYW5uZWw6On5NZXNzYWdlQ2hhbm5lbCk6CisgICAg
ICAgICogZG9tL01lc3NhZ2VDaGFubmVsLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVz
c2FnZUNoYW5uZWw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlQ2hhbm5lbDo6
cG9ydDEpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUNoYW5uZWw6OnBvcnQyKToKKyAgICAg
ICAgKiBkb20vTWVzc2FnZUNoYW5uZWwuaWRsOiBBZGRlZC4KKyAgICAgICAgQWRkZGVkIEpTTWVz
c2FnZUNoYW5uZWwgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBkb20vTWVzc2FnZUV2ZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudCk6CisgICAgICAg
ICogZG9tL01lc3NhZ2VFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50OjptZXNzYWdlUG9ydCk6Cisg
ICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5pZGw6CisgICAgICAgIE1lc3NhZ2VFdmVudCBoYXMg
YSBNZXNzYWdlUG9ydCBtZW1iZXIgbm93LCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHBhc3MgcG9y
dHMgYWNyb3NzCisgICAgICAgIGRvY3VtZW50cy4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRUaW1lcjo6TWVzc2FnZVBvcnRUaW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFRpbWVyOjpmaXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6cHJvY2Vzc01lc3NhZ2VQb3J0TWVzc2FnZXNTb29uKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVkTWVzc2FnZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmRlc3Ryb3llZE1lc3NhZ2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUHJp
dmF0ZTo6RnJhbWVQcml2YXRlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICog
cGFnZS9GcmFtZVByaXZhdGUuaDoKKyAgICAgICAgV2hlbiBhIG1lc3NhZ2UgaXMgcG9zdGVkIHRv
IGEgTWVzc2FnZVBvcnQsIGl0IHdha2VzIHVwIEZyYW1lLCB3aGljaCBkaXNwYXRjaGVzIGFsbCBl
dmVudHMKKyAgICAgICAgZm9yIGl0cyBkb2N1bWVudCBmcm9tIGEgemVyby1kZWxheSB0aW1lci4K
KwogMjAwOC0wOS0xNiAgQXJpeWEgSGlkYXlhdCAgPGFyaXlhLmhpZGF5YXRAdHJvbGx0ZWNoLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbi4KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJl
dmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjAsNyArMTYwLDkgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgTG9jYXRpb24gXAog
ICAgIE1lZGlhRXJyb3IgXAogICAgIE1lZGlhTGlzdCBcCisgICAgTWVzc2FnZUNoYW5uZWwgXAog
ICAgIE1lc3NhZ2VFdmVudCBcCisgICAgTWVzc2FnZVBvcnQgXAogICAgIE1pbWVUeXBlIFwKICAg
ICBNaW1lVHlwZUFycmF5IFwKICAgICBNb3VzZUV2ZW50IFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMzYyOTIp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBA
IHdpbjMyLWcrKyB7CiB9CiAKICMgT3B0aW9uYWwgY29tcG9uZW50cyAobG9vayBmb3IgZGVmcyBp
biBjb25maWcuaCBhbmQgaW5jbHVkZWQgZmlsZXMhKQotIWNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9DUk9TU19ET0NVTUVOVF9NRVNTQUdJTkc9Lik6IERFRklORVMgKz0gRU5BQkxFX0NST1NTX0RP
Q1VNRU5UX01FU1NBR0lORz0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBU0hCT0FSRF9T
VVBQT1JUPS4pOiBERUZJTkVTICs9IEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wCiAhY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX0RBVEFCQVNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9EQVRBQkFT
RT0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0lDT05EQVRBQkFTRT0uKTogREVGSU5FUyAr
PSBFTkFCTEVfSUNPTkRBVEFCQVNFPTEKQEAgLTI0Myw2ICsyNDIsNyBAQCBJRExfQklORElOR1Mg
Kz0gXAogIyAgICBkb20vRXZlbnRUYXJnZXQuaWRsIFwKICAgICBkb20vS2V5Ym9hcmRFdmVudC5p
ZGwgXAogICAgIGRvbS9Nb3VzZUV2ZW50LmlkbCBcCisgICAgZG9tL01lc3NhZ2VFdmVudC5pZGwg
XAogICAgIGRvbS9NdXRhdGlvbkV2ZW50LmlkbCBcCiAgICAgZG9tL05hbWVkTm9kZU1hcC5pZGwg
XAogICAgIGRvbS9Ob2RlLmlkbCBcCkBAIC01MTgsNiArNTE4LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgZG9tL0V4Y2VwdGlvbkNvZGUuY3BwIFwKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAgXAog
ICAgIGRvbS9NYXBwZWRBdHRyaWJ1dGUuY3BwIFwKKyAgICBkb20vTWVzc2FnZUV2ZW50LmNwcCBc
CiAgICAgZG9tL01vdXNlRXZlbnQuY3BwIFwKICAgICBkb20vTW91c2VSZWxhdGVkRXZlbnQuY3Bw
IFwKICAgICBkb20vTXV0YXRpb25FdmVudC5jcHAgXApAQCAtMTA4MCwxNiArMTA4MSw2IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU4KIAogfQogCi1jb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfQ1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HPTEpIHsKLSAgICBGRUFUVVJF
X0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfQ1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HPTEK
LQotICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBkb20vTWVzc2FnZUV2ZW50LmNwcAotCi0gICAg
SURMX0JJTkRJTkdTICs9IFwKLSAgICAgICAgZG9tL01lc3NhZ2VFdmVudC5pZGwKLX0KLQogY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPTApIHsKICAgICBEQVNIQk9B
UkRTVVBQT1JUQ1NTUFJPUEVSVElFUyAtPSAkJFBXRC9jc3MvRGFzaGJvYXJkU3VwcG9ydENTU1By
b3BlcnR5TmFtZXMuaW4KIH0KSW5kZXg6IFdlYkNvcmUvQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54
Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NvbmZpZ3VyYXRpb25zL1dlYkNvcmUueGNj
b25maWcJKHJldmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9Db25maWd1cmF0aW9ucy9XZWJDb3Jl
LnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBAIFBST0RVQ1RfTkFNRSA9
IFdlYkNvcmU7CiBPVEhFUl9MREZMQUdTID0gLWwkKFNRTElURTNfTElCUkFSWSkgLWxvYmpjIC1z
dWJfbGlicmFyeSBsaWJvYmpjIC11bWJyZWxsYSBXZWJLaXQ7CiAKIC8vIFRoaXMgbmVlZHMgdG8g
YmUga2VwdCBzb3J0ZWQsIGFuZCBpbiBzeW5jIHdpdGggRkVBVFVSRV9ERUZJTkVTIGluIEphdmFT
Y3JpcHRDb3JlLnhjY29uZmlnLCBXZWJLaXQueGNjb25maWcgYW5kIHRoZSBkZWZhdWx0IHNldHRp
bmdzIG9mIGJ1aWxkLXdlYmtpdC4KLUZFQVRVUkVfREVGSU5FUyA9IEVOQUJMRV9DUk9TU19ET0NV
TUVOVF9NRVNTQUdJTkcgRU5BQkxFX0RBVEFCQVNFIEVOQUJMRV9ET01fU1RPUkFHRSBFTkFCTEVf
SUNPTkRBVEFCQVNFIEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMgRU5BQkxFX1NWRyBF
TkFCTEVfU1ZHX0FOSU1BVElPTiBFTkFCTEVfU1ZHX0FTX0lNQUdFIEVOQUJMRV9TVkdfRk9OVFMg
RU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCBFTkFCTEVfU1ZHX1VTRSBFTkFCTEVfVklERU8gRU5B
QkxFX1hQQVRIIEVOQUJMRV9YU0xUOworRkVBVFVSRV9ERUZJTkVTID0gRU5BQkxFX0RBVEFCQVNF
IEVOQUJMRV9ET01fU1RPUkFHRSBFTkFCTEVfSUNPTkRBVEFCQVNFIEVOQUJMRV9PRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMgRU5BQkxFX1NWRyBFTkFCTEVfU1ZHX0FOSU1BVElPTiBFTkFCTEVfU1ZH
X0FTX0lNQUdFIEVOQUJMRV9TVkdfRk9OVFMgRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCBFTkFC
TEVfU1ZHX1VTRSBFTkFCTEVfVklERU8gRU5BQkxFX1hQQVRIIEVOQUJMRV9YU0xUOwogCiBTUUxJ
VEUzX0xJQlJBUlkgPSAkKFNRTElURTNfTElCUkFSWV8kKE1BQ19PU19YX1ZFUlNJT05fTUFKT1Ip
KTsKIFNRTElURTNfTElCUkFSWV8gPSBXZWJDb3JlU1FMaXRlMzsKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00
MDMxLDYgKzQwMzEsMTAgQEAKIAkJREQ3NjNCQjIwOTkyQzJDOTAwNzQwQjhFIC8qIGxpYnhtbDIu
ZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
RDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLzsgfTsKIAkJREQ3Q0RG
MjUwQTIzQ0Y5ODAwMDY5OTI4IC8qIENTU1Vua25vd25SdWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNDRTBBMTk4OUNBMDA3RkI4QzUgLyog
Q1NTVW5rbm93blJ1bGUuaCAqLzsgfTsKIAkJRERFNjNFRDUwQjdENDVBODAwMjI2OTk4IC8qIERP
TVRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTMzQTE0NzUwQjdEMUJBRjAwQTUzRkZEIC8qIERPTVRleHRFdmVudC5oICovOyB9OworCQlF
MTA3NDAwRDBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDAwQjBFNzdCREMwMDAz
M0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgKi87IH07CisJCUUxMDc0MDBFMEU3N0JEQzAw
MDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDAwQzBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdl
Q2hhbm5lbC5oICovOyB9OworCQlFMTA3NDMyNDBFNzgzNTgzMDAzM0FGMjQgLyogSlNNZXNzYWdl
Q2hhbm5lbENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxMDc0MzIzMEU3ODM1ODMwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVs
Q29uc3RydWN0b3IuY3BwICovOyB9OworCQlFMTA3NDMyNzBFNzgzNUE1MDAzM0FGMjQgLyogSlNN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDMyNjBFNzgzNUE1MDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hh
bm5lbENvbnN0cnVjdG9yLmggKi87IH07CiAJCUUxMEI5MzdDMEI3M0MwMEEwMDNFRDg5MCAvKiBK
U0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTEwQjkzN0IwQjczQzAwQTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyLmggKi87IH07CiAJCUUxMEI5M0MzMEI3M0MyOTEwMDNFRDg5MCAvKiBKU0N1c3Rv
bVhQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTBCOTNDMjBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVz
b2x2ZXIuY3BwICovOyB9OwogCQlFMTBCOUI2QzBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZlWFBh
dGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTBCOUI2QTBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmgg
Ki87IH07CkBAIC00MDQzLDYgKzQwNDcsMTkgQEAKIAkJRTE3QTRBMUMwRDk3OTkxRDAwRkMxMEM2
IC8qIERPTVNWR0FsdEdseXBoRWxlbWVudEludGVybmFsLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUFBNkJBRTBEOTc0QTAw
MDAwNTQxQUUgLyogRE9NU1ZHQWx0R2x5cGhFbGVtZW50SW50ZXJuYWwuaCAqLzsgfTsKIAkJRTFB
MzAyQkMwREU4MzcwMzAwQzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMwMkJCMERFODM3MDMwMEM1MkYyQyAv
KiBTdHJpbmdCdWlsZGVyLmggKi87IH07CiAJCUUxQTMwMkMxMERFODM3NjkwMEM1MkYyQyAvKiBT
dHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQTMwMkMwMERFODM3NjkwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLzsg
fTsKKwkJRTFBNUY5OUIwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBNUY5
OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwICovOyB9Owor
CQlFMUFDQUY0QzBFNzkxQUFGMDA4N0QxMkIgLyogRE9NTWVzc2FnZVBvcnQubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFDQUY0QTBFNzkxQUFGMDA4
N0QxMkIgLyogRE9NTWVzc2FnZVBvcnQubW0gKi87IH07CisJCUUxQUNBRjREMEU3OTFBQUYwMDg3
RDEyQiAvKiBET01NZXNzYWdlUG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFBQ0FGNEIwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1lc3NhZ2VQb3J0
LmggKi87IH07CisJCUUxQURFQ0JGMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVDQkQwRTc2
QUNGMTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmggKi87IH07CisJCUUxQURFQ0MwMEU3NkFDRjEw
MDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMUFERUNCRTBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQu
Y3BwICovOyB9OworCQlFMUFERUNDNzBFNzZBRDFGMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaWRs
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFERUND
NjBFNzZBRDFGMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaWRsICovOyB9OworCQlFMUFERUNDRTBF
NzZBRDhCMDA0QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQURFQ0NDMEU3NkFEOEIwMDRBMUE1RSAvKiBNZXNz
YWdlQ2hhbm5lbC5oICovOyB9OworCQlFMUFERUNDRjBFNzZBRDhCMDA0QTFBNUUgLyogTWVzc2Fn
ZUNoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFBREVDQ0QwRTc2QUQ4QjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmNwcCAqLzsgfTsK
KwkJRTFBREVDRDEwRTc2QURBQjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmlkbCBpbiBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVDRDAwRTc2QURB
QjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmlkbCAqLzsgfTsKKwkJRTFBREVENDcwRTc2QjhE
RDAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVENDYwRTc2QjhERDAwNEExQTVFIC8qIEpT
TWVzc2FnZVBvcnRDdXN0b20uY3BwICovOyB9OworCQlFMUFERURENTBFNzZCRDYwMDA0QTFBNUUg
LyogRE9NTWVzc2FnZVBvcnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTFBREVERDQwRTc2QkQ2MDAwNEExQTVFIC8qIERPTU1lc3NhZ2VQ
b3J0SW50ZXJuYWwuaCAqLzsgfTsKKwkJRTFBREVEREEwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVz
c2FnZVBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQURFREQ4MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggKi87IH07CisJCUUx
QURFRERCMEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQURFREQ5MEU3NkJEOTMwMDRBMUE1
RSAvKiBKU01lc3NhZ2VQb3J0LmNwcCAqLzsgfTsKIAkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5
IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMUJFNTEyQjBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0
LmNwcCAqLzsgfTsKIAkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29y
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCRTUx
MkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oICovOyB9OwogCQlFMUU2RUVB
NDBCNjI4REE4MDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUU2RUVBMzBCNjI4REE4MDA1RjJG
NzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5jcHAgKi87IH07CkBAIC04NDkwLDYgKzg1MDcsMTAg
QEAKIAkJREQwNUZFMEIwQjhCQTNDNjAwOUFDREZFIC8qIFdlYkNvcmVPYmpDRXh0cmFzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlT2JqQ0V4dHJhcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERDA1RkUwQzBCOEJBM0M2MDA5QUNERkUgLyogV2Vi
Q29yZU9iakNFeHRyYXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5jb2RpbmcgPSAzMDsgcGF0aCA9
IFdlYkNvcmVPYmpDRXh0cmFzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURENzYz
QkIxMDk5MkMyQzkwMDc0MEI4RSAvKiBsaWJ4bWwyLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5h
bWUgPSBsaWJ4bWwyLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGlieG1sMi5keWxpYjsgc291cmNl
VHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJRTEwNzQwMEIwRTc3QkRDMDAwMzNBRjI0IC8qIEpT
TWVzc2FnZUNoYW5uZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNNZXNzYWdlQ2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMDc0
MDBDMEU3N0JEQzAwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVzc2FnZUNoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTEwNzQzMjMwRTc4MzU4MzAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01l
c3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMTA3NDMyNjBFNzgzNUE1MDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTBCOTM3QjBCNzNDMDBB
MDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTEwQjkzQzIwQjczQzI5MTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3Vz
dG9tWFBhdGhOU1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEw
QjlCNkEwQjc0NzU5OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg1MDAsNiArODUyMSwxOSBAQAogCQlFMTJFREJFOTBC
MzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRXZlbnRUYXJnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUEzMDJCQjBERTgzNzAzMDBDNTJGMkMgLyogU3RyaW5nQnVpbGRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxQTMwMkMwMERFODM3NjkwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ0J1aWxkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUE1Rjk5QTBFN0VBQTI1MDBBRjg1
RUEgLyogSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTFBQ0FGNEEwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1lc3NhZ2VQb3J0
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NTWVzc2FnZVBv
cnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQUNBRjRCMEU3OTFBQUYwMDg3
RDEyQiAvKiBET01NZXNzYWdlUG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBET01NZXNzYWdlUG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUFERUNC
RDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5n
ID0gNDsgcGF0aCA9IE1lc3NhZ2VQb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxQURFQ0JFMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXNzYWdlUG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUxQURFQ0M2MEU3NkFEMUYwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVzc2FnZVBvcnQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMUFERUNDQzBFNzZBRDhCMDA0QTFBNUUgLyogTWVzc2FnZUNoYW5u
ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZUNoYW5uZWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBREVDQ0QwRTc2QUQ4QjAwNEExQTVFIC8q
IE1lc3NhZ2VDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1lc3NhZ2VDaGFubmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBREVD
RDAwRTc2QURBQjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBNZXNzYWdlQ2hhbm5lbC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxQURFRDQ2MEU3NkI4REQwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2FnZVBvcnRDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUFERURENDBFNzZCRDYwMDA0QTFBNUUg
LyogRE9NTWVzc2FnZVBvcnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01NZXNzYWdlUG9ydEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUxQURFREQ4MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVzc2FnZVBvcnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTFBREVERDkwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdlUG9ydC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQkU1MTJCMENGNkM1MTIwMDJFQTk1
OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gWFNMVFVuaWNvZGVTb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFFNkVFQTMwQjYyOERBODAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MU2Vs
ZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDEyMSw2ICsx
MDE1NSw4IEBACiAJCQkJODVERjM0M0YwQUFGQzBFRDAwRTU5QUUzIC8qIERPTUtleWJvYXJkRXZl
bnRQcml2YXRlLmggKi8sCiAJCQkJNzU3OTNFRDAwRDBDRTg1QjAwN0ZDMEFDIC8qIERPTU1lc3Nh
Z2VFdmVudC5oICovLAogCQkJCTc1NzkzRUQxMEQwQ0U4NUIwMDdGQzBBQyAvKiBET01NZXNzYWdl
RXZlbnQubW0gKi8sCisJCQkJRTFBQ0FGNEEwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1lc3NhZ2VQ
b3J0Lm1tICovLAorCQkJCUUxQUNBRjRCMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9y
dC5oICovLAogCQkJCTg1N0UwQjIzMEFCMDQzNDYwMDM2RTQ0NyAvKiBET01Nb3VzZUV2ZW50Lmgg
Ki8sCiAJCQkJODU3RTBCMjQwQUIwNDM0NjAwMzZFNDQ3IC8qIERPTU1vdXNlRXZlbnQubW0gKi8s
CiAJCQkJODU3RTBCMkIwQUIwNDNGQzAwMzZFNDQ3IC8qIERPTU1vdXNlRXZlbnRQcml2YXRlLmgg
Ki8sCkBAIC0xMDQxMiw2ICsxMDQ0OCw3IEBACiAJCQkJODU5ODlEQzUwQUNDOEJCRDAwQTBCQzUx
IC8qIERPTUtleWJvYXJkRXZlbnRJbnRlcm5hbC5oICovLAogCQkJCTg1RTcxMTgyMEFDNUQ1MzUw
MDUzMjcwRiAvKiBET01NZWRpYUxpc3RJbnRlcm5hbC5oICovLAogCQkJCTc1NzkzRUQyMEQwQ0U4
NUIwMDdGQzBBQyAvKiBET01NZXNzYWdlRXZlbnRJbnRlcm5hbC5oICovLAorCQkJCUUxQURFREQ0
MEU3NkJENjAwMDRBMUE1RSAvKiBET01NZXNzYWdlUG9ydEludGVybmFsLmggKi8sCiAJCQkJODU5
ODlEQzYwQUNDOEJCRDAwQTBCQzUxIC8qIERPTU1vdXNlRXZlbnRJbnRlcm5hbC5oICovLAogCQkJ
CTg1OTg5REM3MEFDQzhCQkQwMEEwQkM1MSAvKiBET01NdXRhdGlvbkV2ZW50SW50ZXJuYWwuaCAq
LywKIAkJCQk4NUU3MTE4MzBBQzVENTM1MDA1MzI3MEYgLyogRE9NTmFtZWROb2RlTWFwSW50ZXJu
YWwuaCAqLywKQEAgLTExNTUxLDggKzExNTg4LDEyIEBACiAJCQkJQjI4QkMzMTkwRDEzNUU1NDAw
Q0RCQTI3IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oICovLAogCQkJCUE4NjYyOUNFMDlEQTJC
NDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3BwICovLAogCQkJCUE4NjYyOUNEMDlEQTJC
NDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuaCAqLywKKwkJCQlFMTA3NDAwQjBFNzdCREMw
MDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgKi8sCisJCQkJRTEwNzQwMEMwRTc3QkRD
MDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuaCAqLywKIAkJCQk3NTc5M0VDNjBEMENFNzJE
MDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuY3BwICovLAogCQkJCTc1NzkzRUM3MEQwQ0U3MkQw
MDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICovLAorCQkJCUUxQURFREQ4MEU3NkJEOTMwMDRB
MUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggKi8sCisJCQkJRTFBREVERDkwRTc2QkQ5MzAwNEExQTVF
IC8qIEpTTWVzc2FnZVBvcnQuY3BwICovLAogCQkJCUE4NjYyOUNDMDlEQTJCNDcwMDk2MzNBNSAv
KiBKU01vdXNlRXZlbnQuY3BwICovLAogCQkJCUE4NjYyOUNCMDlEQTJCNDcwMDk2MzNBNSAvKiBK
U01vdXNlRXZlbnQuaCAqLywKIAkJCQk2NURGMzFFNzA5RDFDQzYwMDAwQkUzMjUgLyogSlNNdXRh
dGlvbkV2ZW50LmNwcCAqLywKQEAgLTEyNDkzLDYgKzEyNTM0LDggQEAKIAkJCQlDMDkxNTg4NTBE
QjQyMDkyMDBFNTVBRjQgLyogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmggKi8sCiAJCQkJQzA5
MTU4ODYwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcCAq
LywKIAkJCQlDMDkxNTg4NzBEQjQyMDkyMDBFNTVBRjQgLyogSlNJbnNwZWN0b3JDYWxsYmFja1dy
YXBwZXIuaCAqLywKKwkJCQlFMTA3NDMyMzBFNzgzNTgzMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hh
bm5lbENvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQlFMTA3NDMyNjBFNzgzNUE1MDAzM0FGMjQgLyog
SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggKi8sCiAJCQkJQkNEOUMyNkMwQzE3QUE4MTAw
NUM5MEEyIC8qIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwICovLAogCQkJCUJDRDlDMjZEMEMx
N0FBODEwMDVDOTBBMiAvKiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uLmggKi8sCiAJCQkJQkNCNzcz
NUUwQzE3ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgKi8sCkBAIC0x
MjYxMiw2ICsxMjY1NSw4IEBACiAJCQkJQUI0Q0I0RUEwQjhCREEzRDAwOUY0MEIwIC8qIEpTSFRN
TFNlbGVjdEVsZW1lbnRDdXN0b20uaCAqLywKIAkJCQkxQzVGQUVFNjBEQ0ZEQTY4MDBENThGNzgg
LyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCAqLywKIAkJCQlCQ0UxQzQzRjBEOTgz
MEY0MDAzQjAyRjIgLyogSlNMb2NhdGlvbkN1c3RvbS5jcHAgKi8sCisJCQkJRTFBNUY5OUEwRTdF
QUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwICovLAorCQkJCUUxQURF
RDQ2MEU3NkI4REQwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcCAqLywKIAkJCQlB
OUM2RTY0NjBENzQ2NUNBMDA2NDQyRTkgLyogSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCAqLywK
IAkJCQlCQ0Q5QzI1RjBDMTdBQTY3MDA1QzkwQTIgLyogSlNOYW1lZE5vZGVNYXBDdXN0b20uY3Bw
ICovLAogCQkJCUE5QzZFNjQ4MEQ3NDY1RDgwMDY0NDJFOSAvKiBKU05hdmlnYXRvckN1c3RvbS5j
cHAgKi8sCkBAIC0xMzQyMCw5ICsxMzQ2NSwxNSBAQAogCQkJCUE4QzRBN0Y0MDlENTYzMjcwMDAz
QUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuY3BwICovLAogCQkJCUE4QzRBN0YzMDlENTYzMjcwMDAz
QUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuaCAqLywKIAkJCQlBOEM0QTg0QjA5RDU2NDlEMDAwM0FD
OEQgLyogTWFwcGVkQXR0cmlidXRlRW50cnkuaCAqLywKKwkJCQlFMUFERUNDRDBFNzZBRDhCMDA0
QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuY3BwICovLAorCQkJCUUxQURFQ0NDMEU3NkFEOEIwMDRB
MUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5oICovLAorCQkJCUUxQURFQ0QwMEU3NkFEQUIwMDRBMUE1
RSAvKiBNZXNzYWdlQ2hhbm5lbC5pZGwgKi8sCiAJCQkJNzU3OTNFODAwRDBDRTBCMzAwN0ZDMEFD
IC8qIE1lc3NhZ2VFdmVudC5jcHAgKi8sCiAJCQkJNzU3OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8q
IE1lc3NhZ2VFdmVudC5oICovLAogCQkJCTc1NzkzRTgyMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNz
YWdlRXZlbnQuaWRsICovLAorCQkJCUUxQURFQ0JFMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdl
UG9ydC5jcHAgKi8sCisJCQkJRTFBREVDQkQwRTc2QUNGMTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0
LmggKi8sCisJCQkJRTFBREVDQzYwRTc2QUQxRjAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmlkbCAq
LywKIAkJCQk4NTAzMUIyRjBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VFdmVudC5jcHAgKi8sCiAJ
CQkJODUwMzFCMzAwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlRXZlbnQuaCAqLywKIAkJCQkxNDFC
OTRFNTA5RUM0MjIzMDAwRTk0MTMgLyogTW91c2VFdmVudC5pZGwgKi8sCkBAIC0xNTU3MSw2ICsx
NTYyMiwxMyBAQAogCQkJCTMxNkZFMDgyMEU2Q0NDMjgwMEJGNjA4OCAvKiBET01XZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyODRBRERFMEU2RkVC
MzEwMDJFRUZCRCAvKiBVc2VyU3R5bGVTaGVldExvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ3QjRCRTgwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlFMUFERUNCRjBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaCBp
biBIZWFkZXJzICovLAorCQkJCUUxQURFQ0NFMEU3NkFEOEIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hh
bm5lbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFBREVERDUwRTc2QkQ2MDAwNEExQTVFIC8qIERP
TU1lc3NhZ2VQb3J0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQURFRERBMEU3NkJE
OTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTA3NDAw
RTBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRTEwNzQzMjcwRTc4MzVBNTAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFBQ0FGNEQwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1l
c3NhZ2VQb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE1Njg1LDYgKzE1NzQzLDggQEAKIAkJCQkx
QUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMg
Ki8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGlu
IFJlc291cmNlcyAqLywKIAkJCQlCQ0VGNDU0MDBFNjc2QUMxMDAxQzEyODcgLyogVGV4dE1ldHJp
Y3MuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQlFMUFERUNDNzBFNzZBRDFGMDA0QTFBNUUgLyog
TWVzc2FnZVBvcnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQlFMUFERUNEMTBFNzZBREFCMDA0
QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3Mzc0LDYg
KzE3NDM0LDE0IEBACiAJCQkJMzE2RkUwODEwRTZDQ0MyODAwQkY2MDg4IC8qIERPTVdlYktpdENT
U0tleWZyYW1lc1J1bGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Mjg0QURERDBFNkZFQjMxMDAy
RUVGQkQgLyogVXNlclN0eWxlU2hlZXRMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ3
QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUUxQURFQ0MwMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlFMUFERUNDRjBFNzZBRDhCMDA0QTFBNUUgLyogTWVzc2FnZUNo
YW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFBREVENDcwRTc2QjhERDAwNEExQTVFIC8q
IEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFBREVEREIwRTc2
QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTEw
NzQwMEQwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTEwNzQzMjQwRTc4MzU4MzAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUFDQUY0QzBFNzkxQUFGMDA4N0QxMkIg
LyogRE9NTWVzc2FnZVBvcnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMUE1Rjk5QjBFN0VBQTI1
MDBBRjg1RUEgLyogSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDM2Mjky
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSlNIVE1MQ29sbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTSW1h
Z2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTE4OCw2ICsxODksNyBAQCBjb25zdCBD
bGFzc0luZm8gSlNET01XaW5kb3dCYXNlOjpzX2luZm8gCiAjIC0tIENvbnN0cnVjdG9ycyAtLQog
ICBBdWRpbyAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpBdWRpbyAg
ICAgICAgICAgICAgRG9udERlbGV0ZQogICBJbWFnZSAgICAgICAgICAgICAgICAgV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpJbWFnZSAgICAgICAgICAgICAgRG9udERlbGV0ZQorICBNZXNzYWdl
Q2hhbm5lbCAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpNZXNzYWdlQ2hhbm5lbCAg
ICAgRG9udERlbGV0ZQogICBPcHRpb24gICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5k
b3dCYXNlOjpPcHRpb24gICAgICAgICAgICAgRG9udERlbGV0ZQogICBYTUxIdHRwUmVxdWVzdCAg
ICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpYTUxIdHRwUmVxdWVzdCAgICAgRG9udERl
bGV0ZQogICBYU0xUUHJvY2Vzc29yICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpY
U0xUUHJvY2Vzc29yICAgICAgRG9udERlbGV0ZQpAQCAtNDQ5LDYgKzQ1MSwxMCBAQCBKU1ZhbHVl
ICpKU0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVyCiAgICAgICAgIC8vIEZJWE1FOiB0aGlz
IHByb3BlcnR5IChhbmQgdGhlIGZldyBiZWxvdykgcHJvYmFibHkgc2hvdWxkbid0IGNyZWF0ZSBh
IG5ldyBvYmplY3QgZXZlcnkKICAgICAgICAgLy8gdGltZQogICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBKU0ltYWdlQ29uc3RydWN0b3IoZXhlYywgaW1wbCgpLT5mcmFtZSgpLT5kb2N1bWVudCgp
KTsKKyAgICBjYXNlIE1lc3NhZ2VDaGFubmVsOgorICAgICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zy
b20oZXhlYykpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0
dXJuIG5ldyAoZXhlYykgSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yKGV4ZWMsIGltcGwoKS0+
ZnJhbWUoKSk7IC8vIEZJWE1FOiBpcyB0aGlzIHRoZSByaWdodCBicm93c2luZyBjb250ZXh0IGZv
ciBNZXNzYWdlQ2hhbm5lbD8KICAgICBjYXNlIE9wdGlvbjoKICAgICAgICAgaWYgKCFhbGxvd3NB
Y2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDM2MjkyKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ0LDcgKzE0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIE9uV2ViS2l0
VHJhbnNpdGlvbkVuZCwKIAogICAgICAgICAgICAgLy8gQ29uc3RydWN0b3JzCi0gICAgICAgICAg
ICBBdWRpbywgSW1hZ2UsIE9wdGlvbiwgWE1MSHR0cFJlcXVlc3QsCisgICAgICAgICAgICBBdWRp
bywgSW1hZ2UsIE1lc3NhZ2VDaGFubmVsLCBPcHRpb24sIFhNTEh0dHBSZXF1ZXN0LAogICAgICAg
ICAgICAgWFNMVFByb2Nlc3NvcgogICAgICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMzYyOTIpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CiAjaW5jbHVkZSAiSlNET01XaW5kb3dTaGVsbC5oIgorI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQu
aCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPGtqcy9KU09iamVjdC5oPgpAQCAt
MTY0LDEyICsxNjYsMTQgQEAgSlNWYWx1ZSogSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNT
dAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKLSAgICBTdHJpbmcgdGFyZ2V0T3JpZ2luID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KGV4ZWMsIDEpKTsKKyAgICBNZXNzYWdlUG9y
dCogbWVzc2FnZVBvcnQgPSAoYXJncy5zaXplKCkgPT0gMikgPyAwIDogdG9NZXNzYWdlUG9ydChh
cmdzLmF0KGV4ZWMsIDEpKTsKKworICAgIFN0cmluZyB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoZXhlYywgKGFyZ3Muc2l6
ZSgpID09IDIpID8gMSA6IDIpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgd2luZG93LT5wb3N0TWVzc2FnZShtZXNzYWdlLCB0YXJnZXRPcmlnaW4sIHNvdXJjZSwgZWMp
OworICAgIHdpbmRvdy0+cG9zdE1lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZVBvcnQsIHRhcmdldE9y
aWdpbiwgc291cmNlLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0QmFzZS5jcHAJKHJldmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2lu
Y2x1ZGUgIkpTRXZlbnRUYXJnZXROb2RlLmgiCisjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgog
I2luY2x1ZGUgIkpTWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCIKICNpbmNsdWRlIDxranMvRXJyb3Iu
aD4KIApAQCAtMjgxLDkgKzI4MiwxMSBAQCBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywg
RXZlbnRUYXJnCiAgICAgICAgIC8vIERPTUFwcGxpY2F0aW9uQ2FjaGUgaXMgYWx3YXlzIGNyZWF0
ZWQgdmlhIEpTLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHVzZSBjYWNoZURPTU9iamVjdCgpIGhlcmUu
CiAgICAgICAgIHJldHVybiBTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KGNhY2hlKTsK
ICNlbmRpZgorCisgICAgaWYgKE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IHRhcmdldC0+dG9N
ZXNzYWdlUG9ydCgpKQorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBtZXNzYWdlUG9ydCk7CiAg
ICAgCi0gICAgLy8gVGhlcmUgYXJlIHR3byBraW5kcyBvZiBFdmVudFRhcmdldHM6IEV2ZW50VGFy
Z2V0Tm9kZSBhbmQgWE1MSHR0cFJlcXVlc3QuCi0gICAgLy8gSWYgU1ZHIHN1cHBvcnQgaXMgZW5h
YmxlZCwgdGhlcmUgaXMgYWxzbyBTVkdFbGVtZW50SW5zdGFuY2UuCisgICAgLy8gQWxsIGtpbmRz
IG9mIEV2ZW50VGFyZ2V0cyBhcmUgbGlzdGVkIGFib3ZlLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTTWVzc2Fn
ZUNoYW5uZWxDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbC5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VDaGFubmVsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KKwor
c3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3RvclRh
YmxlVmFsdWVzWzFdID0KK3sKKyAgICB7IDAsIDAsIDAsIDAgfQorfTsKKworc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3JUYWJsZSA9IHsgMCwgSlNNZXNz
YWdlQ2hhbm5lbENvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKKworY29uc3QgQ2xhc3NJbmZv
IEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3RvciIsIDAsICZKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3JUYWJsZSwgMCB9Owor
CitKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3I6OkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBicm93c2luZ0NvbnRleHQpCisgICAgOiBET01PYmpl
Y3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKKyAgICAs
IG1fYnJvd3NpbmdDb250ZXh0KGJyb3dzaW5nQ29udGV4dCkKK3sKKyAgICBwdXREaXJlY3QoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNNZXNzYWdlQ2hhbm5lbFByb3RvdHlwZTo6
c2VsZihleGVjKSwgTm9uZSk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNNZXNzYWdlQ2hhbm5lbENv
bnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEp
Cit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3Q7CisgICAg
cmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCitKU09iamVjdCogSlNNZXNzYWdlQ2hhbm5l
bENvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3Ry
dWN0b3IsIGNvbnN0IEFyZ0xpc3QmKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KHRvSlMoZXhlYywgTWVzc2FnZUNoYW5uZWw6OmNyZWF0ZShzdGF0aWNfY2FzdDxKU01lc3Nh
Z2VDaGFubmVsQ29uc3RydWN0b3IqPihjb25zdHJ1Y3RvciktPm1fYnJvd3NpbmdDb250ZXh0KSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl9oCisj
ZGVmaW5lIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRnJhbWU7CisKKyAg
ICBjbGFzcyBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICAgICAgc3RhdGljIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVt
ZW50c0hhc0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IGNvbnN0IEpTQzo6QXJnTGlzdCYpOworICAgICAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlw
ZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworCisgICAgICAgIEZyYW1l
KiBtX2Jyb3dzaW5nQ29udGV4dDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3JfaAoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU01lc3NhZ2VD
aGFubmVsLmgiCisKKyNpbmNsdWRlICJNZXNzYWdlQ2hhbm5lbC5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit2b2lkIEpTTWVzc2FnZUNoYW5u
ZWw6Om1hcmsoKQoreworICAgIERPTU9iamVjdDo6bWFyaygpOworCisgICAgaWYgKG1faW1wbC0+
cG9ydDEoKSkgeworICAgICAgICBpZiAoRE9NT2JqZWN0KiBwMSA9IFNjcmlwdEludGVycHJldGVy
OjpnZXRET01PYmplY3QobV9pbXBsLT5wb3J0MSgpKSkKKyAgICAgICAgICAgIGlmICghcDEtPm1h
cmtlZCgpKQorICAgICAgICAgICAgICAgIHAxLT5tYXJrKCk7CisgICAgfQorCisgICAgaWYgKG1f
aW1wbC0+cG9ydDIoKSkgeworICAgICAgICBpZiAoRE9NT2JqZWN0KiBwMiA9IFNjcmlwdEludGVy
cHJldGVyOjpnZXRET01PYmplY3QobV9pbXBsLT5wb3J0MigpKSkKKyAgICAgICAgICAgIGlmICgh
cDItPm1hcmtlZCgpKQorICAgICAgICAgICAgICAgIHAyLT5tYXJrKCk7CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVv
bC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCisKKyNpbmNsdWRlICJBdG9taWNTdHJp
bmcuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
SlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0V2ZW50LmgiCisjaW5jbHVkZSAiSlNF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorSlNWYWx1ZSogSlNNZXNzYWdl
UG9ydDo6c3RhcnRDb252ZXJzYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQoreworICAgIEZyYW1lKiBicm93c2luZ0NvbnRleHQgPSBhc0pTRE9NV2luZG93KGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZnJhbWUoKTsgLy8gRklYTUU6IGlzIHRo
aXMgdGhlIHJpZ2h0IGJyb3dzaW5nIGNvbnRleHQ/CisgICAgY29uc3QgVVN0cmluZyYgbWVzc2Fn
ZSA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOworCisgICAgcmV0dXJuIHRvSlMo
ZXhlYywgaW1wbCgpLT5zdGFydENvbnZlcnNhdGlvbihicm93c2luZ0NvbnRleHQsIG1lc3NhZ2Up
LmdldCgpKTsKK30KKworSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IHRvSlNET01XaW5kb3coaW1wbCgpLT5vd25lckNvbnRleHQoKSk7CisgICAgaWYg
KCF3aW5kb3cpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJlZlB0cjxKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSB3aW5kb3ctPmZpbmRPckNyZWF0ZUpT
VW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMSksIHRydWUpOwor
ICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGlt
cGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSwg
bGlzdGVuZXIucmVsZWFzZSgpLCBhcmdzLmF0KGV4ZWMsIDIpLT50b0Jvb2xlYW4oZXhlYykpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlKiBKU01lc3NhZ2VQb3J0Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K3sKKyAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhpbXBsKCktPm93bmVy
Q29udGV4dCgpKTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gd2luZG93LT5m
aW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgYXJncy5hdChleGVjLCAxKSwgdHJ1
ZSk7CisgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5n
KGV4ZWMpLCBsaXN0ZW5lciwgYXJncy5hdChleGVjLCAyKS0+dG9Cb29sZWFuKGV4ZWMpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKK30KKyAgICAKK0pTVmFsdWUqIEpTTWVzc2Fn
ZVBvcnQ6OmRpc3BhdGNoRXZlbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgCisgICAgYm9vbCByZXN1
bHQgPSBpbXBsKCktPmRpc3BhdGNoRXZlbnQodG9FdmVudChhcmdzLmF0KGV4ZWMsIDApKSwgZWMp
OworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihy
ZXN1bHQpOyAgICAKK30KKwordm9pZCBKU01lc3NhZ2VQb3J0OjpzZXRPbm1lc3NhZ2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBKU0RPTVdpbmRvdyogd2luZG93ID0g
dG9KU0RPTVdpbmRvdyhpbXBsKCktPm93bmVyQ29udGV4dCgpKTsKKyAgICBpZiAoIXdpbmRvdykK
KyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0T25NZXNzYWdlTGlzdGVuZXIod2luZG93
LT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwgdHJ1
ZSkpOworfQorCitKU1ZhbHVlKiBKU01lc3NhZ2VQb3J0Ojpvbm1lc3NhZ2UoRXhlY1N0YXRlKikg
Y29uc3QKK3sKKyAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
c3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihpbXBsKCktPm9uTWVzc2Fn
ZUxpc3RlbmVyKCkpKQorICAgICAgICBpZiAoSlNPYmplY3QqIGxpc3RlbmVyT2JqID0gbGlzdGVu
ZXItPmxpc3RlbmVyT2JqKCkpCisgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJPYmo7CisgICAg
cmV0dXJuIGpzTnVsbCgpOworfQorCit2b2lkIEpTTWVzc2FnZVBvcnQ6OnNldE9uY2xvc2UoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBKU0RPTVdpbmRvdyogd2luZG93
ID0gdG9KU0RPTVdpbmRvdyhpbXBsKCktPm93bmVyQ29udGV4dCgpKTsKKyAgICBpZiAoIXdpbmRv
dykKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0T25DbG9zZUxpc3RlbmVyKHdpbmRv
dy0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgdmFsdWUsIHRy
dWUpKTsKK30KKworSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6b25jbG9zZShFeGVjU3RhdGUqKSBj
b25zdAoreworICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBz
dGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KGltcGwoKS0+b25DbG9zZUxp
c3RlbmVyKCkpKQorICAgICAgICBpZiAoSlNPYmplY3QqIGxpc3RlbmVyT2JqID0gbGlzdGVuZXIt
Pmxpc3RlbmVyT2JqKCkpCisgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJPYmo7CisgICAgcmV0
dXJuIGpzTnVsbCgpOworfQorCit2b2lkIEpTTWVzc2FnZVBvcnQ6Om1hcmsoKQoreworICAgIERP
TU9iamVjdDo6bWFyaygpOworIAorICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KG1faW1w
bC0+b25NZXNzYWdlTGlzdGVuZXIoKSkpCisgICAgICAgIGxpc3RlbmVyLT5tYXJrKCk7CisKKyAg
ICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPm9uQ2xvc2VMaXN0ZW5lcigpKSkK
KyAgICAgICAgbGlzdGVuZXItPm1hcmsoKTsKKworICAgIGlmIChNZXNzYWdlUG9ydCogZW50YW5n
bGVkUG9ydCA9IG1faW1wbC0+ZW50YW5nbGVkUG9ydCgpKSB7CisgICAgICAgIGlmIChET01PYmpl
Y3QqIG9iaiA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QoZW50YW5nbGVkUG9ydCkp
CisgICAgICAgICAgICBpZiAoIW9iai0+bWFya2VkKCkpCisgICAgICAgICAgICAgICAgb2JqLT5t
YXJrKCk7CisgICAgfQorCisgICAgdHlwZWRlZiBNZXNzYWdlUG9ydDo6RXZlbnRMaXN0ZW5lcnNN
YXAgRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgdHlwZWRlZiBNZXNzYWdlUG9ydDo6TGlzdGVuZXJW
ZWN0b3IgTGlzdGVuZXJWZWN0b3I7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVu
ZXJzID0gbV9pbXBsLT5ldmVudExpc3RlbmVycygpOworICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNN
YXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVudExpc3RlbmVycy5iZWdpbigpOyBtYXBJdGVyICE9
IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21hcEl0ZXIpIHsKKyAgICAgICAgZm9yIChMaXN0ZW5l
clZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9IG1hcEl0ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJ
dGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQoKTsgKyt2ZWNJdGVyKSB7CisgICAgICAgICAgICBK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcio+KHZlY0l0ZXItPmdldCgpKTsKKyAgICAgICAgICAgIGxpc3Rl
bmVyLT5tYXJrKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgJKHJldmlzaW9uIDM2MjkyKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20pCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgKgpA
QCAtMTI5LDYgKzEyOSw3IEBACiAjaW1wb3J0ICJET01IVE1MVUxpc3RFbGVtZW50SW50ZXJuYWwu
aCIKICNpbXBvcnQgIkRPTUtleWJvYXJkRXZlbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NTWVk
aWFMaXN0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTU1lc3NhZ2VQb3J0SW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTU1vdXNlRXZlbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NTXV0YXRpb25FdmVu
dEludGVybmFsLmgiCiAjaW1wb3J0ICJET01OYW1lZE5vZGVNYXBJbnRlcm5hbC5oIgpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAz
NjI5MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IkNhbnZhc1N0eWxlLmgifSA9IDE7CiAgICAgfQogCi0gICAg
aWYgKCR0eXBlIGVxICJDYW52YXNHcmFkaWVudCIgb3IgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZl
ciIpIHsKKyAgICBpZiAoJHR5cGUgZXEgIkNhbnZhc0dyYWRpZW50IiBvciAkdHlwZSBlcSAiWFBh
dGhOU1Jlc29sdmVyIiBvciAkdHlwZSBlcSAiTWVzc2FnZVBvcnQiKSB7CiAgICAgICAgICRpbXBs
SW5jbHVkZXN7IlBsYXRmb3JtU3RyaW5nLmgifSA9IDE7CiAgICAgfQogCkluZGV4OiBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiTWVz
c2FnZVBvcnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKQEAgLTQ1
Miw2ICs0NTMsMTggQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgaWYgKG1fc3R5bGVTaGVl
dHMpCiAgICAgICAgIG1fc3R5bGVTaGVldHMtPmRvY3VtZW50RGVzdHJveWVkKCk7CiAKKyAgICBI
YXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIG1lc3NhZ2VQb3J0c0VuZCA9IG1fbWVzc2Fn
ZVBvcnRzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBp
dGVyID0gbV9tZXNzYWdlUG9ydHMuYmVnaW4oKTsgaXRlciAhPSBtX21lc3NhZ2VQb3J0cy5lbmQo
KTsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVCgoKml0ZXIpLT5jcmVhdGVkV2l0aERvY3VtZW50
KCkgPT0gdGhpcyk7CisgICAgICAgICgqaXRlciktPmNvbnRleHREZXN0cm95ZWQoKTsKKyAgICAg
ICAgaWYgKCgqaXRlciktPmVudGFuZ2xlZFBvcnQoKSkgeworICAgICAgICAgICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBzdXJ2aXZpbmdQb3J0ID0gKCppdGVyKS0+ZW50YW5nbGVkUG9ydCgpOworICAg
ICAgICAgICAgKCppdGVyKS0+dW5lbnRhbmdsZSgpOworICAgICAgICAgICAgaWYgKHN1cnZpdmlu
Z1BvcnQtPmNyZWF0ZWRXaXRoRG9jdW1lbnQoKSAhPSB0aGlzKSAvLyBPdGhlcndpc2UsIHN1cnZp
dmluZ1BvcnQgd29uJ3QgcmVhbGx5IHN1cnZpdmUuCisgICAgICAgICAgICAgICAgc3Vydml2aW5n
UG9ydC0+cXVldWVDbG9zZUV2ZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBtX2RvY3Vt
ZW50ID0gMDsKIH0KIApAQCAtNDMwNSw0ICs0MzE4LDI3IEBAIEhUTUxDYW52YXNFbGVtZW50KiBE
b2N1bWVudDo6Z2V0Q1NTQ2FudmEKICAgICByZXR1cm4gcmVzdWx0LmdldCgpOwogfQogCit2b2lk
IERvY3VtZW50OjpkaXNwYXRjaE1lc3NhZ2VQb3J0RXZlbnRzKCkKK3sKKyAgICBSZWZQdHI8RG9j
dW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+IHBvcnRzID0g
bV9tZXNzYWdlUG9ydHM7CisKKyAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIHBv
cnRzRW5kID0gcG9ydHMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0
ZXJhdG9yIHBvcnRzSXRlciA9IHBvcnRzLmJlZ2luKCk7IHBvcnRzSXRlciAhPSBwb3J0c0VuZDsg
Kytwb3J0c0l0ZXIpIHsKKyAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQgPSAqcG9ydHNJdGVyOwor
ICAgICAgICBpZiAocG9ydC0+cXVldWVJc09wZW4oKSkKKyAgICAgICAgICAgIHBvcnQtPmRpc3Bh
dGNoTWVzc2FnZXMoKTsKKyAgICB9Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmNyZWF0ZWRNZXNzYWdl
UG9ydChNZXNzYWdlUG9ydCogcG9ydCkKK3sKKyAgICBtX21lc3NhZ2VQb3J0cy5hZGQocG9ydCk7
Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmRlc3Ryb3llZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0KiBw
b3J0KQoreworICAgIG1fbWVzc2FnZVBvcnRzLnJlbW92ZShwb3J0KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEhUTUxNYXBFbGVtZW50OwogICAgIGNsYXNzIEludFBvaW50Owog
ICAgIGNsYXNzIEpTTm9kZTsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydDsKICAgICBjbGFzcyBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOwogICAgIGNsYXNzIE5vZGVGaWx0ZXI7CiAgICAgY2xh
c3MgTm9kZUl0ZXJhdG9yOwpAQCAtNzYxLDcgKzc2MiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gRXh0
ZW5zaW9uIGZvciBtYW5pcHVsYXRpbmcgY2FudmFzIGRyYXdpbmcgY29udGV4dHMgZm9yIHVzZSBp
biBDU1MKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGdldENTU0NhbnZhc0NvbnRleHQo
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCB3aWR0aCwgaW50IGhl
aWdodCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGdldENTU0NhbnZhc0VsZW1lbnQoY29uc3Qg
U3RyaW5nJiBuYW1lKTsKLSAgICAKKworICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlUG9ydEV2ZW50
cygpOworICAgIHZvaWQgY3JlYXRlZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0Kik7CisgICAgdm9p
ZCBkZXN0cm95ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCopOworCiBwcm90ZWN0ZWQ6CiAgICAg
RG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhUTUwpOwogCkBAIC05MTIsNiArOTE3LDggQEAgcHJp
dmF0ZToKIAogICAgIFN0cmluZyBtX2NvbnRlbnRMYW5ndWFnZTsKIAorICAgIEhhc2hTZXQ8TWVz
c2FnZVBvcnQqPiBtX21lc3NhZ2VQb3J0czsKKwogcHVibGljOgogICAgIGJvb2wgaW5QYWdlQ2Fj
aGUoKTsKICAgICB2b2lkIHNldEluUGFnZUNhY2hlKGJvb2wgZmxhZyk7CkluZGV4OiBXZWJDb3Jl
L2RvbS9FdmVudE5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnROYW1lcy5o
CShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7IG5hbWVzcGFjZSBFdmVu
dE5hbWVzCiAgICAgbWFjcm8oY2hhbmdlKSBcCiAgICAgbWFjcm8oY2hlY2tpbmcpIFwKICAgICBt
YWNybyhjbGljaykgXAorICAgIG1hY3JvKGNsb3NlKSBcCiAgICAgbWFjcm8oY29udGV4dG1lbnUp
IFwKICAgICBtYWNybyhjb3B5KSBcCiAgICAgbWFjcm8oY3V0KSBcCkluZGV4OiBXZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODYsNiArODYsMTEgQEAgU1ZHRWxlbWVudEluc3RhbmNlKiBFdmVudFRh
cmdldDo6dG9TVkdFbAogfQogI2VuZGlmCiAKK01lc3NhZ2VQb3J0KiBFdmVudFRhcmdldDo6dG9N
ZXNzYWdlUG9ydCgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRMaXN0ZW5lclR5cGVUb0RvY3VtZW50SWZOZWVkZWQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBl
IHR5cGUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudDo6TGlzdGVuZXJUeXBlPigwKTsKSW5kZXg6IFdl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuaAkocmV2aXNpb24gMzYyOTIpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBFdmVudDsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEV2ZW50VGFy
Z2V0Tm9kZTsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydDsKICAgICBjbGFzcyBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lcjsKICAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7CiAgICAgY2xhc3MgWE1M
SHR0cFJlcXVlc3Q7CkBAIC01Myw2ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgTWVzc2Fn
ZVBvcnQqIHRvTWVzc2FnZVBvcnQoKTsKICAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldE5vZGUq
IHRvTm9kZSgpOwogICAgICAgICB2aXJ0dWFsIFhNTEh0dHBSZXF1ZXN0KiB0b1hNTEh0dHBSZXF1
ZXN0KCk7CiAgICAgICAgIHZpcnR1YWwgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHRvWE1MSHR0cFJl
cXVlc3RVcGxvYWQoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lc3Nh
Z2VDaGFubmVsLmgiCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK01lc3NhZ2VDaGFubmVsOjpNZXNzYWdlQ2hhbm5lbChGcmFtZSogYnJvd3NpbmdD
b250ZXh0KQorICAgIDogbV9wb3J0MShNZXNzYWdlUG9ydDo6Y3JlYXRlKGJyb3dzaW5nQ29udGV4
dCkpCisgICAgLCBtX3BvcnQyKE1lc3NhZ2VQb3J0OjpjcmVhdGUoYnJvd3NpbmdDb250ZXh0KSkK
K3sKKyAgICBNZXNzYWdlUG9ydDo6ZW50YW5nbGUobV9wb3J0MS5nZXQoKSwgbV9wb3J0Mi5nZXQo
KSk7Cit9CisKK01lc3NhZ2VDaGFubmVsOjp+TWVzc2FnZUNoYW5uZWwoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2RvbS9NZXNz
YWdlQ2hhbm5lbC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZl
CgpJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZUNoYW5uZWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vTWVz
c2FnZUNoYW5uZWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLwor
CisjaWZuZGVmIE1lc3NhZ2VDaGFubmVsX2gKKyNkZWZpbmUgTWVzc2FnZUNoYW5uZWxfaAorCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgRnJhbWU7CisgICAgY2xhc3MgTWVzc2FnZVBvcnQ7CisKKyAgICBjbGFzcyBNZXNzYWdlQ2hh
bm5lbCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lc3NhZ2VDaGFubmVsPiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlQ2hhbm5lbD4gY3JlYXRlKEZyYW1lKiBi
cm93c2luZ0NvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlQ2hhbm5lbChicm93
c2luZ0NvbnRleHQpKTsgfQorICAgICAgICB+TWVzc2FnZUNoYW5uZWwoKTsKKworICAgICAgICBN
ZXNzYWdlUG9ydCogcG9ydDEoKSB7IHJldHVybiBtX3BvcnQxLmdldCgpOyB9CisgICAgICAgIE1l
c3NhZ2VQb3J0KiBwb3J0MigpIHsgcmV0dXJuIG1fcG9ydDIuZ2V0KCk7IH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIE1lc3NhZ2VDaGFubmVsKEZyYW1lKik7CisKKyAgICAgICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBtX3BvcnQxOworICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG1fcG9ydDI7
CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTWVzc2FnZUNo
YW5uZWxfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9kb20vTWVzc2FnZUNoYW5uZWwu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJD
b3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVz
c2FnZUNoYW5uZWwuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vTWVzc2FnZUNoYW5u
ZWwuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKK21vZHVs
ZSBldmVudHMgeworCisgICAgaW50ZXJmYWNlIFtDdXN0b21NYXJrRnVuY3Rpb25dIE1lc3NhZ2VD
aGFubmVsIHsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVzc2FnZVBvcnQgcG9ydDE7
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBNZXNzYWdlUG9ydCBwb3J0MjsKKworICAgIH07
CisKK30KSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkocmV2aXNpb24gMzYyOTIpCisrKyBXZWJDb3Jl
L2RvbS9NZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTMgQEAg
TWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoKQogewogfQogCi1NZXNzYWdlRXZlbnQ6Ok1lc3Nh
Z2VFdmVudChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBT
dHJpbmcmIGxhc3RFdmVudElkLCBQYXNzUmVmUHRyPERPTVdpbmRvdz4gc291cmNlKQorTWVzc2Fn
ZUV2ZW50OjpNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNv
dXJjZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQpCiAgICAgOiBFdmVudCht
ZXNzYWdlRXZlbnQsIGZhbHNlLCB0cnVlKQogICAgICwgbV9kYXRhKGRhdGEpCiAgICAgLCBtX29y
aWdpbihvcmlnaW4pCiAgICAgLCBtX2xhc3RFdmVudElkKGxhc3RFdmVudElkKQogICAgICwgbV9z
b3VyY2Uoc291cmNlKQorICAgICwgbV9tZXNzYWdlUG9ydChtZXNzYWdlUG9ydCkKIHsKIH0KIApA
QCAtNTIsNyArNTMsNyBAQCBNZXNzYWdlRXZlbnQ6On5NZXNzYWdlRXZlbnQoKQogewogfQogCi12
b2lkIE1lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYgZGF0YSwg
Y29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIERPTVdpbmRv
dyogc291cmNlKQordm9pZCBNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBT
dHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVu
dElkLCBET01XaW5kb3cqIHNvdXJjZSwgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0KQogewogICAg
IGlmIChkaXNwYXRjaGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYzLDYgKzY0LDcgQEAgdm9p
ZCBNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoY29ucwogICAgIG1fb3JpZ2luID0gb3Jp
Z2luOwogICAgIG1fbGFzdEV2ZW50SWQgPSBsYXN0RXZlbnRJZDsKICAgICBtX3NvdXJjZSA9IHNv
dXJjZTsKKyAgICBtX21lc3NhZ2VQb3J0ID0gbWVzc2FnZVBvcnQ7CiB9CiAKIGJvb2wgTWVzc2Fn
ZUV2ZW50Ojppc01lc3NhZ2VFdmVudCgpIGNvbnN0IApJbmRleDogV2ViQ29yZS9kb20vTWVzc2Fn
ZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHJldmlz
aW9uIDM2MjkyKQorKysgV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgTWVzc2FnZUV2ZW50X2gKIAogI2luY2x1ZGUgIkV2
ZW50LmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00MCwyOSArNDEsMzEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VFdmVudCk7CiAgICAgICAgIH0KLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwg
UGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TWVzc2FnZUV2ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNv
dXJjZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZUV2ZW50KGRhdGEsIG9yaWdpbiwg
bGFzdEV2ZW50SWQsIHNvdXJjZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
ZXNzYWdlRXZlbnQoZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBtZXNzYWdlUG9y
dCkpOwogICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgfk1lc3NhZ2VFdmVudCgpOwogCi0gICAg
ICAgIHZvaWQgaW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wg
Y2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIERPTVdpbmRvdyogc291cmNl
KTsKKyAgICAgICAgdm9pZCBpbml0TWVzc2FnZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU3RyaW5nJiBkYXRhLCBj
b25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgRE9NV2luZG93
KiBzb3VyY2UsIE1lc3NhZ2VQb3J0Kik7CiAgICAgICAgIAogICAgICAgICBjb25zdCBTdHJpbmcm
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBv
cmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogICAgICAgICBjb25zdCBTdHJpbmcm
IGxhc3RFdmVudElkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXZlbnRJZDsgfQogICAgICAgICBE
T01XaW5kb3cqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CisgICAg
ICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZVBv
cnQuZ2V0KCk7IH0KICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lc3NhZ2VFdmVu
dCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZTogICAgCiAgICAgICAgIE1lc3NhZ2VFdmVudCgpOwot
ICAgICAgICBNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNv
dXJjZSk7CisgICAgICAgIE1lc3NhZ2VFdmVudChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0
cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElkLCBQYXNzUmVmUHRyPERPTVdp
bmRvdz4gc291cmNlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBtZXNzYWdlUG9ydCk7CiAKICAg
ICAgICAgU3RyaW5nIG1fZGF0YTsKICAgICAgICAgU3RyaW5nIG1fb3JpZ2luOwogICAgICAgICBT
dHJpbmcgbV9sYXN0RXZlbnRJZDsKICAgICAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV9zb3VyY2U7
CisgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbV9tZXNzYWdlUG9ydDsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5pZGwJKHJldmlzaW9uIDM2
MjkyKQorKysgV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MzQsOCArMzQsOSBAQCBtb2R1bGUgZXZlbnRzIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBvcmlnaW47CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
bGFzdEV2ZW50SWQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01XaW5kb3cgc291cmNl
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQ7CiAg
ICAgICAgIAotICAgICAgICB2b2lkIGluaXRNZXNzYWdlRXZlbnQoaW4gRE9NU3RyaW5nIHR5cGVB
cmcsIGluIGJvb2xlYW4gY2FuQnViYmxlQXJnLCBpbiBib29sZWFuIGNhbmNlbGFibGVBcmcsIGlu
IERPTVN0cmluZyBkYXRhQXJnLCBpbiBET01TdHJpbmcgb3JpZ2luQXJnLCBpbiBET01TdHJpbmcg
bGFzdEV2ZW50SWRBcmcsIGluIERPTVdpbmRvdyBzb3VyY2VBcmcpOworICAgICAgICB2b2lkIGlu
aXRNZXNzYWdlRXZlbnQoaW4gRE9NU3RyaW5nIHR5cGVBcmcsIGluIGJvb2xlYW4gY2FuQnViYmxl
QXJnLCBpbiBib29sZWFuIGNhbmNlbGFibGVBcmcsIGluIERPTVN0cmluZyBkYXRhQXJnLCBpbiBE
T01TdHJpbmcgb3JpZ2luQXJnLCBpbiBET01TdHJpbmcgbGFzdEV2ZW50SWRBcmcsIGluIERPTVdp
bmRvdyBzb3VyY2VBcmcsIGluIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0KTsKIAogICAgIH07CiAK
SW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdl
UG9ydC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorCisjaW5jbHVkZSAi
QXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRXZlbnRF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENsb3NlTWVzc2FnZVBvcnRUaW1lciA6IHB1
YmxpYyBUaW1lckJhc2UgeworcHVibGljOgorICAgIENsb3NlTWVzc2FnZVBvcnRUaW1lcihQYXNz
UmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQorICAgICAgICA6IG1fcG9ydChwb3J0KQorICAgIHsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9wb3J0LT5hY3RpdmUoKSk7CisKKyAgICAgICAgLy8gQ2xvc2luZyBtYXkg
ZGVzdHJveSB0aGUgcG9ydCwgZGlzcGF0Y2ggYW55IHJlbWFpbmluZyBtZXNzYWdlcyBub3cuCisg
ICAgICAgIGlmIChtX3BvcnQtPnF1ZXVlSXNPcGVuKCkpCisgICAgICAgICAgICBtX3BvcnQtPmRp
c3BhdGNoTWVzc2FnZXMoKTsKKworICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IEV2ZW50Ojpj
cmVhdGUoRXZlbnROYW1lczo6Y2xvc2VFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBpZiAo
bV9wb3J0LT5vbkNsb3NlTGlzdGVuZXIoKSkgeworICAgICAgICAgICAgZXZ0LT5zZXRUYXJnZXQo
bV9wb3J0LmdldCgpKTsKKyAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChtX3BvcnQu
Z2V0KCkpOworICAgICAgICAgICAgbV9wb3J0LT5vbkNsb3NlTGlzdGVuZXIoKS0+aGFuZGxlRXZl
bnQoZXZ0LmdldCgpLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgbV9wb3J0LT5kaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVj
LCBmYWxzZSk7CisKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCisgICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBtX3BvcnQ7Cit9OworCitNZXNzYWdlUG9ydDo6TWVzc2FnZVBvcnQoRnJhbWUq
IGJyb3dzaW5nQ29udGV4dCkKKyAgICA6IG1fZW50YW5nbGVkUG9ydCgwKQorICAgICwgbV9xdWV1
ZUlzT3BlbihmYWxzZSkKKyAgICAsIG1fb3duZXJDb250ZXh0KGJyb3dzaW5nQ29udGV4dCkKKyAg
ICAsIG1fY3JlYXRlZFdpdGhEb2N1bWVudChicm93c2luZ0NvbnRleHQtPmRvY3VtZW50KCkpIC8v
IEN1cnJlbnRseSwgRnJhbWUgaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGtpbmQgb2YgY29udGV4dCwg
YnV0IHdvcmtlciB0aHJlYWRzIHdvbid0IGNvbnRhaW4gZG9jdW1lbnRzLgoreworICAgIG1fb3du
ZXJDb250ZXh0LT5jcmVhdGVkTWVzc2FnZVBvcnQodGhpcyk7Cit9CisKK01lc3NhZ2VQb3J0Ojp+
TWVzc2FnZVBvcnQoKQoreworICAgIGlmIChtX293bmVyQ29udGV4dCkKKyAgICAgICAgbV9vd25l
ckNvbnRleHQtPmRlc3Ryb3llZE1lc3NhZ2VQb3J0KHRoaXMpOworfQorCitQYXNzUmVmUHRyPE1l
c3NhZ2VQb3J0PiBNZXNzYWdlUG9ydDo6Y2xvbmUoRnJhbWUqIG5ld093bmVyLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCkgeworICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8
TWVzc2FnZVBvcnQ+IHJlbW90ZVBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7CisgICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBuZXdQb3J0ID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZShuZXdPd25lcik7CisKKyAg
ICAvLyBNb3ZlIGFsbCB0aGUgZXZlbnRzIGluIHRoZSBwb3J0IG1lc3NhZ2UgcXVldWUgb2Ygb3Jp
Z2luYWwgcG9ydCB0byB0aGUgcG9ydCBtZXNzYWdlIHF1ZXVlIG9mIG5ldyBwb3J0LCBpZiBhbnks
IGxlYXZpbmcgdGhlIG5ldyBwb3J0J3MgcG9ydCBtZXNzYWdlIHF1ZXVlIGluIGl0cyBpbml0aWFs
IGNsb3NlZCBzdGF0ZS4KKyAgICAvLyBJZiBldmVudHMgYXJlIHBvc3RlZCAoZS5nLiBmcm9tIGEg
d29ya2VyIHRocmVhZCkgd2hpbGUgdGhpcyBjb2RlIGlzIGV4ZWN1dGluZywgdGhlcmUgaXMgbm8g
Z3VhcmFudGVlIHdoZXRoZXIgdGhleSBlbmQgdXAgaW4gdGhlIG9yaWdpbmFsIG9yIG5ldyBwb3J0
J3MgbWVzc2FnZSBxdWV1ZS4KKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50OworICAgIHdoaWxlICht
X21lc3NhZ2VRdWV1ZS50cnlHZXRNZXNzYWdlKGV2ZW50KSkKKyAgICAgICAgbmV3UG9ydC0+bV9t
ZXNzYWdlUXVldWUuYXBwZW5kKGV2ZW50KTsKKworICAgIGVudGFuZ2xlKHJlbW90ZVBvcnQuZ2V0
KCksIG5ld1BvcnQuZ2V0KCkpOyAvLyBUaGUgcG9ydCBvYmplY3Qgd2lsbCBiZSB1bmVudGFuZ2xl
ZC4KKyAgICByZXR1cm4gbmV3UG9ydDsKK30KKwordm9pZCBNZXNzYWdlUG9ydDo6cG9zdE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBwb3N0
TWVzc2FnZShtZXNzYWdlLCAwLCBlYyk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RNZXNz
YWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIGRhdGFQb3J0LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU3RyaW5nIHNvdXJjZU9yaWdpbiA9IG1fb3duZXJDb250ZXh0LT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpOworICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4g
bmV3TWVzc2FnZVBvcnQ7CisgICAgaWYgKGRhdGFQb3J0KSB7CisgICAgICAgIGlmIChkYXRhUG9y
dCA9PSB0aGlzIHx8IGRhdGFQb3J0ID09IG1fZW50YW5nbGVkUG9ydCkgeworICAgICAgICAgICAg
ZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgbmV3TWVzc2FnZVBvcnQgPSBkYXRhUG9ydC0+Y2xvbmUobV9lbnRhbmdsZWRQb3J0
LT5tX293bmVyQ29udGV4dCwgZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9lbnRhbmdsZWRQb3J0LT5tX21lc3NhZ2VRdWV1ZS5hcHBlbmQo
TWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgc291cmNlT3JpZ2luLCAiIiwgbV9vd25lckNv
bnRleHQtPmRvbVdpbmRvdygpLCBuZXdNZXNzYWdlUG9ydC5nZXQoKSkpOworICAgIGlmIChtX2Vu
dGFuZ2xlZFBvcnQtPm1fcXVldWVJc09wZW4pCisgICAgICAgIG1fZW50YW5nbGVkUG9ydC0+bV9v
d25lckNvbnRleHQtPnByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpOworfQorCitQYXNz
UmVmUHRyPE1lc3NhZ2VQb3J0PiBNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJzYXRpb24oRnJhbWUq
IHNjcmlwdENvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8TWVz
c2FnZVBvcnQ+IHBvcnQxID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZShzY3JpcHRDb250ZXh0KTsKKyAg
ICBpZiAoIW1fZW50YW5nbGVkUG9ydCkKKyAgICAgICAgcmV0dXJuIHBvcnQxOworICAgIFJlZlB0
cjxNZXNzYWdlUG9ydD4gcG9ydDIgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKG1fZW50YW5nbGVkUG9y
dC0+bV9vd25lckNvbnRleHQpOworCisgICAgZW50YW5nbGUocG9ydDEuZ2V0KCksIHBvcnQyLmdl
dCgpKTsKKworICAgIFN0cmluZyBzb3VyY2VPcmlnaW4gPSBzY3JpcHRDb250ZXh0LT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpOworICAgIG1fZW50YW5nbGVkUG9ydC0+
bV9tZXNzYWdlUXVldWUuYXBwZW5kKE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJj
ZU9yaWdpbiwgIiIsIG1fb3duZXJDb250ZXh0LT5kb21XaW5kb3coKSwgcG9ydDIuZ2V0KCkpKTsK
KyAgICBpZiAobV9lbnRhbmdsZWRQb3J0LT5tX3F1ZXVlSXNPcGVuKQorICAgICAgICBtX2VudGFu
Z2xlZFBvcnQtPm1fb3duZXJDb250ZXh0LT5wcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24o
KTsKKyAgICByZXR1cm4gcG9ydDE7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnQ6OnN0YXJ0KCkKK3sK
KyAgICBpZiAobV9xdWV1ZUlzT3BlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9xdWV1ZUlz
T3BlbiA9IHRydWU7CisgICAgbV9vd25lckNvbnRleHQtPnByb2Nlc3NNZXNzYWdlUG9ydE1lc3Nh
Z2VzU29vbigpOworfQorCit2b2lkIE1lc3NhZ2VQb3J0OjpjbG9zZSgpCit7CisgICAgaWYgKCFt
X2VudGFuZ2xlZFBvcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE1lc3NhZ2VQb3J0KiBvdGhl
clBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7CisgICAgdW5lbnRhbmdsZSgpOworCisgICAgcXVldWVD
bG9zZUV2ZW50KCk7CisgICAgb3RoZXJQb3J0LT5xdWV1ZUNsb3NlRXZlbnQoKTsKK30KKwordm9p
ZCBNZXNzYWdlUG9ydDo6ZW50YW5nbGUoTWVzc2FnZVBvcnQqIHBvcnQxLCBNZXNzYWdlUG9ydCog
cG9ydDIpCit7CisgICAgaWYgKHBvcnQxLT5tX2VudGFuZ2xlZFBvcnQpIHsKKyAgICAgICAgQVNT
RVJUKHBvcnQxLT5tX2VudGFuZ2xlZFBvcnQgIT0gcG9ydDIpOworICAgICAgICBwb3J0MS0+dW5l
bnRhbmdsZSgpOworICAgIH0KKworICAgIGlmIChwb3J0Mi0+bV9lbnRhbmdsZWRQb3J0KSB7Cisg
ICAgICAgIEFTU0VSVChwb3J0Mi0+bV9lbnRhbmdsZWRQb3J0ICE9IHBvcnQxKTsKKyAgICAgICAg
cG9ydDItPnVuZW50YW5nbGUoKTsKKyAgICB9CisKKyAgICBwb3J0MS0+bV9lbnRhbmdsZWRQb3J0
ID0gcG9ydDI7CisgICAgcG9ydDItPm1fZW50YW5nbGVkUG9ydCA9IHBvcnQxOworfQorCit2b2lk
IE1lc3NhZ2VQb3J0Ojp1bmVudGFuZ2xlKCkKK3sKKyAgICBBU1NFUlQodGhpcyA9PSBtX2VudGFu
Z2xlZFBvcnQtPm1fZW50YW5nbGVkUG9ydCk7CisKKyAgICBtX2VudGFuZ2xlZFBvcnQtPm1fZW50
YW5nbGVkUG9ydCA9IDA7CisgICAgbV9lbnRhbmdsZWRQb3J0ID0gMDsKK30KKwordm9pZCBNZXNz
YWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcygpCit7CisgICAgQVNTRVJUKHF1ZXVlSXNPcGVuKCkp
OworCisgICAgUmVmUHRyPEV2ZW50PiBldnQ7CisgICAgd2hpbGUgKG1fbWVzc2FnZVF1ZXVlLnRy
eUdldE1lc3NhZ2UoZXZ0KSkgeworCisgICAgICAgIEFTU0VSVChldnQtPnR5cGUoKSA9PSBFdmVu
dE5hbWVzOjptZXNzYWdlRXZlbnQpOworCisgICAgICAgIGlmIChtX29uTWVzc2FnZUxpc3RlbmVy
KSB7CisgICAgICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICAgICAgICAgIGV2dC0+
c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgICAgIG1fb25NZXNzYWdlTGlzdGVuZXIt
PmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZ0LnJlbGVhc2UoKSwg
ZWMsIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgfQorfQorCit2b2lkIE1lc3Nh
Z2VQb3J0OjpxdWV1ZUNsb3NlRXZlbnQoKQoreworICAgIENsb3NlTWVzc2FnZVBvcnRUaW1lciog
dGltZXIgPSBuZXcgQ2xvc2VNZXNzYWdlUG9ydFRpbWVyKHRoaXMpOworICAgIHRpbWVyLT5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lciwgYm9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUuaW1wbCgpKTsKKyAgICBpZiAoaXRl
ciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9yIGxp
c3RlbmVyczsKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKKyAgICAg
ICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLmltcGwoKSwgbGlzdGVuZXJzKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vj
b25kOworICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIg
PSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKyts
aXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlz
dGVuZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBtX2V2ZW50TGlz
dGVuZXJzLmFkZChldmVudFR5cGUuaW1wbCgpLCBsaXN0ZW5lcnMpOworICAgIH0gICAgCit9CisK
K3ZvaWQgTWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0
ZW5lcnMuZmluZChldmVudFR5cGUuaW1wbCgpKTsKKyAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlz
dGVuZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTGlzdGVuZXJWZWN0b3Im
IGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25z
dF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVy
ICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgaWYgKCpsaXN0
ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikgeworICAgICAgICAgICAgbGlzdGVuZXJzLnJlbW92
ZShsaXN0ZW5lckl0ZXIgLSBsaXN0ZW5lcnMuYmVnaW4oKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBib29sIHRlbXBFdmVu
dCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBF
dmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnNDb3B5ID0g
bV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKS5pbXBsKCkpOworICAgIGZvciAoTGlz
dGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVyc0NvcHku
YmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJ
dGVyKSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CisgICAgICAgIGV2ZW50LT5z
ZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAgICBsaXN0ZW5lckl0ZXItPmdldCgpLT5oYW5k
bGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gIWV2
ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNz
YWdlUG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIE1lc3NhZ2VQb3J0X2gKKyNkZWZpbmUg
TWVzc2FnZVBvcnRfaAorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9N
ZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQXRvbWljU3RyaW5n
SW1wbDsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBFdmVudDsKKyAgICBjbGFzcyBG
cmFtZTsKKyAgICBjbGFzcyBTdHJpbmc7CisKKyAgICBjbGFzcyBNZXNzYWdlUG9ydCA6IHB1Ymxp
YyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBjcmVhdGUoRnJhbWUq
IGJyb3dzaW5nQ29udGV4dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VQb3J0KGJyb3dz
aW5nQ29udGV4dCkpOyB9CisgICAgICAgIH5NZXNzYWdlUG9ydCgpOworCisgICAgICAgIFBhc3NS
ZWZQdHI8TWVzc2FnZVBvcnQ+IGNsb25lKEZyYW1lKiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAg
ICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRhbmdsZWRQb3J0OyB9CisgICAg
ICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNz
YWdlUG9ydCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxNZXNzYWdlUG9y
dD4gc3RhcnRDb252ZXJzYXRpb24oRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAg
ICAgICB2b2lkIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICBib29s
IHF1ZXVlSXNPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZUlzT3BlbjsgfQorCisgICAgICAg
IE1lc3NhZ2VQb3J0KiBlbnRhbmdsZWRQb3J0KCkgeyByZXR1cm4gbV9lbnRhbmdsZWRQb3J0OyB9
CisgICAgICAgIHN0YXRpYyB2b2lkIGVudGFuZ2xlKE1lc3NhZ2VQb3J0KiwgTWVzc2FnZVBvcnQq
KTsKKyAgICAgICAgdm9pZCB1bmVudGFuZ2xlKCk7CisKKyAgICAgICAgRnJhbWUqIG93bmVyQ29u
dGV4dCgpIHsgcmV0dXJuIG1fb3duZXJDb250ZXh0OyB9CisgICAgICAgIERvY3VtZW50KiBjcmVh
dGVkV2l0aERvY3VtZW50KCkgeyByZXR1cm4gbV9jcmVhdGVkV2l0aERvY3VtZW50OyB9CisgICAg
ICAgIHZvaWQgY29udGV4dERlc3Ryb3llZCgpIHsgbV9vd25lckNvbnRleHQgPSAwOyB9CisgICAg
ICAgIHZpcnR1YWwgTWVzc2FnZVBvcnQqIHRvTWVzc2FnZVBvcnQoKSB7IHJldHVybiB0aGlzOyB9
CisKKyAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VzKCk7CisgICAgICAgIHZvaWQgcXVldWVD
bG9zZUV2ZW50KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJv
b2wgdXNlQ2FwdHVyZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VD
YXB0dXJlKTsKKyAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4sIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCA9IGZhbHNlKTsKKworICAgICAg
ICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsK
KyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBMaXN0ZW5lclZlY3Rv
cj4gRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExp
c3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KKworICAgICAgICB1c2luZyBS
ZWZDb3VudGVkPE1lc3NhZ2VQb3J0Pjo6cmVmOworICAgICAgICB1c2luZyBSZWZDb3VudGVkPE1l
c3NhZ2VQb3J0Pjo6ZGVyZWY7CisKKyAgICAgICAgdm9pZCBzZXRPbk1lc3NhZ2VMaXN0ZW5lcihQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbk1lc3NhZ2VMaXN0
ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25NZXNzYWdl
TGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CisK
KyAgICAgICAgdm9pZCBzZXRPbkNsb3NlTGlzdGVuZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyKSB7IG1fb25DbG9zZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQor
ICAgICAgICBFdmVudExpc3RlbmVyKiBvbkNsb3NlTGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBt
X29uQ2xvc2VMaXN0ZW5lci5nZXQoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWVzc2Fn
ZVBvcnQoRnJhbWUqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7
IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJl
ZigpOyB9CisKKyAgICAgICAgTWVzc2FnZVBvcnQqIG1fZW50YW5nbGVkUG9ydDsKKyAgICAgICAg
TWVzc2FnZVF1ZXVlPFJlZlB0cjxFdmVudD4gPiBtX21lc3NhZ2VRdWV1ZTsKKyAgICAgICAgYm9v
bCBtX3F1ZXVlSXNPcGVuOworCisgICAgICAgIEZyYW1lKiBtX293bmVyQ29udGV4dDsKKyAgICAg
ICAgRG9jdW1lbnQqIG1fY3JlYXRlZFdpdGhEb2N1bWVudDsgLy8gV2lsbCBiZSAwIGlmIHRoZSBj
b250ZXh0IGRvZXMgbm90IGNvbnRhaW4gYSBkb2N1bWVudCAoZS5nLiBpZiBpdCdzIGEgd29ya2Vy
IHRocmVhZCkuCisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25NZXNzYWdlTGlz
dGVuZXI7CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2xvc2VMaXN0ZW5lcjsK
KworICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOworICAgIH07CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1lc3NhZ2VQb3J0X2gKClByb3Bl
cnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICoKKyAqLworCittb2R1bGUgZXZlbnRzIHsKKworICAgIGludGVyZmFj
ZSBbQ3VzdG9tTWFya0Z1bmN0aW9uXSBNZXNzYWdlUG9ydCB7CisvLyBXZSBuZWVkIHRvIGhhdmUg
c29tZXRoaW5nIGFzIGFuIE9iakMgYmluZGluZywgYmVjYXVzZSBNZXNzYWdlUG9ydCBpcyB1c2Vk
IGluIE1lc3NhZ2VFdmVudCwgd2hpY2ggYWxyZWFkeSBoYXMgb25lLAorLy8gYnV0IHdlIGRvbid0
IHdhbnQgdG8gYWN0dWFsbHkgZXhwb3NlIHRoZSBBUEkgd2hpbGUgaXQgaXMgaW4gZmx1eC4KKyNp
ZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBib29sZWFuIGFjdGl2ZTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJpbmcg
bWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9ydCkKKyAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSBNZXNzYWdlUG9ydCBz
dGFydENvbnZlcnNhdGlvbihpbiBET01TdHJpbmcgbWVzc2FnZSk7CisgICAgICAgIHZvaWQgc3Rh
cnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIg
YXR0cmlidXRlcworICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbV0gRXZlbnRMaXN0ZW5lciBvbm1l
c3NhZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tXSBFdmVudExpc3RlbmVyIG9uY2xvc2U7
CisKKyAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAgIFtDdXN0b21dIHZv
aWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7
CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcg
dHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVu
dExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIFtDdXN0b21dIGJvb2xlYW4g
ZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisgICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNl
cHRpb24pOworI2VuZGlmCisgICAgfTsKKworfQpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9u
IDM2MjkyKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0Nyw3ICszNDcsNyBAQCBTdG9yYWdlKiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZSgpIGNvbnN0
CiB9CiAjZW5kaWYKIAotdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBF
eGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCwgY29uc3QgU3RyaW5nJiB0YXJn
ZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTM2Myw2ICszNjMsMTIgQEAgdm9pZCBE
T01XaW5kb3c6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZwogICAgICAgICB9CiAgICAgfQogCisg
ICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBuZXdNZXNzYWdlUG9ydDsKKyAgICBpZiAobWVzc2FnZVBv
cnQpCisgICAgICAgIG5ld01lc3NhZ2VQb3J0ID0gbWVzc2FnZVBvcnQtPmNsb25lKGZyYW1lKCks
IGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIENhcHR1cmUgdGhl
IHNvdXJjZSBvZiB0aGUgbWVzc2FnZS4gIFdlIG5lZWQgdG8gZG8gdGhpcyBzeW5jaHJvbm91c2x5
CiAgICAgLy8gaW4gb3JkZXIgdG8gY2FwdHVyZSB0aGUgc291cmNlIG9mIHRoZSBtZXNzYWdlIGNv
cnJlY3RseS4KICAgICBEb2N1bWVudCogc291cmNlRG9jdW1lbnQgPSBzb3VyY2UtPmRvY3VtZW50
KCk7CkBAIC0zNzEsNyArMzc3LDcgQEAgdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlKGNvbnN0
IFN0cmluZwogICAgIFN0cmluZyBzb3VyY2VPcmlnaW4gPSBzb3VyY2VEb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKIAogICAgIC8vIFNjaGVkdWxlIHRoZSBtZXNzYWdlLgot
ICAgIFBvc3RNZXNzYWdlVGltZXIqIHRpbWVyID0gbmV3IFBvc3RNZXNzYWdlVGltZXIodGhpcywg
TWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgc291cmNlT3JpZ2luLCAiIiwgc291cmNlKSwg
dGFyZ2V0LmdldCgpKTsKKyAgICBQb3N0TWVzc2FnZVRpbWVyKiB0aW1lciA9IG5ldyBQb3N0TWVz
c2FnZVRpbWVyKHRoaXMsIE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJjZU9yaWdp
biwgIiIsIHNvdXJjZSwgbmV3TWVzc2FnZVBvcnQpLCB0YXJnZXQuZ2V0KCkpOwogICAgIHRpbWVy
LT5zdGFydE9uZVNob3QoMCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDM2MjkyKQor
KysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBIaXN0
b3J5OwogICAgIGNsYXNzIExvY2F0aW9uOworICAgIGNsYXNzIE1lc3NhZ2VQb3J0OwogICAgIGNs
YXNzIE5hdmlnYXRvcjsKICAgICBjbGFzcyBQb3N0TWVzc2FnZVRpbWVyOwogICAgIGNsYXNzIFNj
cmVlbjsKQEAgLTE3NSw3ICsxNzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERP
TUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uQ2FjaGUoKSBjb25zdDsKICNlbmRpZgogCi0g
ICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0
KiwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdl
VGltZXIqKTsKIAogICAgICAgICB2b2lkIHNjcm9sbEJ5KGludCB4LCBpbnQgeSkgY29uc3Q7Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMzYyOTIpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIG1vZHVsZSB3aW5kb3cg
ewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBDb25zb2xlIGNvbnNv
bGU7CiAKICAgICAgICAgLy8gY3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5nCi0gICAgICAgIFtEb05v
dENoZWNrRG9tYWluU2VjdXJpdHksIEN1c3RvbV0gdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJp
bmcgbWVzc2FnZSwgaW4gRE9NU3RyaW5nIHRhcmdldE9yaWdpbikKKyAgICAgICAgW0RvTm90Q2hl
Y2tEb21haW5TZWN1cml0eSwgQ3VzdG9tXSB2b2lkIHBvc3RNZXNzYWdlKGluIERPTVN0cmluZyBt
ZXNzYWdlLCBpbiBbT3B0aW9uYWxdIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0LCBpbiBET01TdHJp
bmcgdGFyZ2V0T3JpZ2luKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICNp
ZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDM2Mjky
KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcs
NyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRl
ICJNZWRpYUZlYXR1cmVOYW1lcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVk
ZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgi
CkBAIC0xMDEsNiArMTAyLDI5IEBAIGRvdWJsZSBGcmFtZTo6c19jdXJyZW50UGFpbnRUaW1lU3Rh
bXAgPSAKIHN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciBmcmFtZUNvdW50ZXIoIkZy
YW1lIik7CiAjZW5kaWYKIAorY2xhc3MgTWVzc2FnZVBvcnRUaW1lciA6IHB1YmxpYyBUaW1lckJh
c2UgeworcHVibGljOgorICAgIE1lc3NhZ2VQb3J0VGltZXIoUGFzc1JlZlB0cjxGcmFtZT4gZnJh
bWUpCisgICAgICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpCisgICAgeworICAgICAgICAvLyBEb24ndCBkaXNwYXRj
aCBldmVudHMgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCBmdWxseSBhY3RpdmUuCisgICAgICAgIGlm
ICghbV9mcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMoKTsKKyAgICAgICAgbV9m
cmFtZS0+ZC0+bV9maXJlZE1lc3NhZ2VQb3J0VGltZXIgPSBmYWxzZTsKKyAgICAgICAgZGVsZXRl
IHRoaXM7CisgICAgfQorCisgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOworfTsKKworCiBzdGF0
aWMgaW5saW5lIEZyYW1lKiBwYXJlbnRGcm9tT3duZXJFbGVtZW50KEhUTUxGcmFtZU93bmVyRWxl
bWVudCogb3duZXJFbGVtZW50KQogewogICAgIGlmICghb3duZXJFbGVtZW50KQpAQCAtMTg1Nyw3
ICsxODgxLDMzIEBAIERvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEkKICAg
ICAgICAgcmVzdWx0ID0gZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHB0LCBm
YWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdC5pbm5lck5vZGUoKSA/IHJlc3VsdC5pbm5lck5vZGUo
KS0+ZG9jdW1lbnQoKSA6IDA7CiB9CisKK3ZvaWQgRnJhbWU6OnByb2Nlc3NNZXNzYWdlUG9ydE1l
c3NhZ2VzU29vbigpCit7CisgICAgLy8gV2hlbiB0aGUgdGltZXIgZmlyZXMsIHRoZSBkb2N1bWVu
dCBtYXkgbm90IGJlIGFjdGl2ZSBhbHJlYWR5LCBpbiB3aGljaCBjYXNlIHRoZSBwZW5kaW5nIG1l
c3NhZ2VzIHJlbWFpbgorICAgIC8vIHVucHJvY2Vzc2VkLiBUaGUgYXNzdW1wdGlvbiBoZXJlIGlz
IHRoYXQgYSBkb2N1bWVudCBjYW4gbm90IG1vdmUgYmV0d2VlbiBmcmFtZXMgLSBpZiB0aGV5IGNv
dWxkLCB3YWtpbmcgdXAKKyAgICAvLyBhIHNpbmdsZSBmcmFtZSB3b3VsZCBoYXZlIGJlZW4gaW5z
dWZmaWNpZW50LgorICAgIGlmIChkLT5tX2ZpcmVkTWVzc2FnZVBvcnRUaW1lcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgTWVzc2FnZVBvcnRUaW1lciogdGltZXIgPSBuZXcgTWVzc2FnZVBvcnRU
aW1lcih0aGlzKTsKKyAgICB0aW1lci0+c3RhcnRPbmVTaG90KDApOworCisgICAgZC0+bV9maXJl
ZE1lc3NhZ2VQb3J0VGltZXIgPSB0cnVlOworfQogICAgIAordm9pZCBGcmFtZTo6Y3JlYXRlZE1l
c3NhZ2VQb3J0KE1lc3NhZ2VQb3J0KiBwb3J0KQoreworICAgIGlmIChEb2N1bWVudCogZG9jdW1l
bnQgPSBwb3J0LT5jcmVhdGVkV2l0aERvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50LT5jcmVh
dGVkTWVzc2FnZVBvcnQocG9ydCk7Cit9CisKK3ZvaWQgRnJhbWU6OmRlc3Ryb3llZE1lc3NhZ2VQ
b3J0KE1lc3NhZ2VQb3J0KiBwb3J0KQoreworICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBw
b3J0LT5jcmVhdGVkV2l0aERvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50LT5kZXN0cm95ZWRN
ZXNzYWdlUG9ydChwb3J0KTsKK30KKwogRnJhbWVQcml2YXRlOjpGcmFtZVByaXZhdGUoUGFnZSog
cGFnZSwgRnJhbWUqIHBhcmVudCwgRnJhbWUqIHRoaXNGcmFtZSwgSFRNTEZyYW1lT3duZXJFbGVt
ZW50KiBvd25lckVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZUxvYWRl
ckNsaWVudCogZnJhbWVMb2FkZXJDbGllbnQpCiAgICAgOiBtX3BhZ2UocGFnZSkKQEAgLTE4ODMs
NiArMTkzMyw3IEBAIEZyYW1lUHJpdmF0ZTo6RnJhbWVQcml2YXRlKFBhZ2UqIHBhZ2UsIEYKICAg
ICAsIG1fbmVlZHNSZWFwcGx5U3R5bGVzKGZhbHNlKQogICAgICwgbV9pc0Rpc2Nvbm5lY3RlZChm
YWxzZSkKICAgICAsIG1fZXhjbHVkZUZyb21UZXh0U2VhcmNoKGZhbHNlKQorICAgICwgbV9maXJl
ZE1lc3NhZ2VQb3J0VGltZXIoZmFsc2UpCiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVU
CiAgICAgLCBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyKDApCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lv
biAzNjI5MikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2
ICs1Myw3IEBAIGNsYXNzIEZyYW1lUHJpdmF0ZTsKIGNsYXNzIEZyYW1lVHJlZTsKIGNsYXNzIEhU
TUxGcmFtZU93bmVyRWxlbWVudDsKIGNsYXNzIEhUTUxUYWJsZUNlbGxFbGVtZW50OworY2xhc3Mg
TWVzc2FnZVBvcnQ7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwogY2xhc3MgUmVndWxhckV4cHJl
c3Npb247CiBjbGFzcyBSZW5kZXJQYXJ0OwpAQCAtMTAxLDEyICsxMDIsMjAgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0RXhjbHVkZUZyb21UZXh0U2VhcmNoKGJvb2wpOwogCiAgICAgZnJpZW5kIGNs
YXNzIEZyYW1lUHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVBvcnRUaW1lcjsKIAog
cHJpdmF0ZToKICAgICBGcmFtZShQYWdlKiwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgRnJhbWVM
b2FkZXJDbGllbnQqKTsKIAogICAgIEZyYW1lUHJpdmF0ZSogZDsKLSAgICAKKworLy8gPT09IFRo
aXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgQnJvd3NpbmdDb250ZXh0IGludGVyZmFjZSwgd2l0
aCBpbXBsZW1lbnRhdGlvbnMgaW4gRnJhbWUgYW5kIGluIFdvcmtlclRocmVhZC4KK3B1YmxpYzoK
KyAgICB2b2lkIHByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpOworCisgICAgdm9pZCBj
cmVhdGVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqKTsKKyAgICB2b2lkIGRlc3Ryb3llZE1lc3Nh
Z2VQb3J0KE1lc3NhZ2VQb3J0Kik7CisKIC8vID09PSB1bmRlY2lkZWQsIHdvdWxkIGxpa2UgdG8g
Y29uc2lkZXIgbW92aW5nIHRvIGFub3RoZXIgY2xhc3MKIAogcHVibGljOgpJbmRleDogV2ViQ29y
ZS9wYWdlL0ZyYW1lUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVBy
aXZhdGUuaAkocmV2aXNpb24gMzYyOTIpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBib29sIG1faXNEaXNjb25uZWN0ZWQ7CiAgICAgICAgIGJvb2wgbV9leGNsdWRlRnJvbVRl
eHRTZWFyY2g7CiAKKyAgICAgICAgYm9vbCBtX2ZpcmVkTWVzc2FnZVBvcnRUaW1lcjsKKwogI2lm
IEZSQU1FX0xPQURTX1VTRVJfU1RZTEVTSEVFVAogICAgICAgICBVc2VyU3R5bGVTaGVldExvYWRl
ciogbV91c2VyU3R5bGVTaGVldExvYWRlcjsKICNlbmRpZgpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzY1
MDMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAwOC0wOS0xNiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc5CisgICAgICAgIEltcGxlbWVudCBI
VE1MNSBjaGFubmVsIG1lc3NhZ2luZworCisgICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1j
aGFubmVsLWdjLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVz
c2FnZS1jaGFubmVsLWdjLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3Nh
Z2UtcG9ydC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3Nh
Z2UtcG9ydC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9yZXNvdXJjZXMvbWVz
c2FnZS1wb3J0LWlmcmFtZS5odG1sOiBBZGRlZC4KKwogMjAwOC0wOS0xNSAgUm9iIEJ1aXMgIDxi
dWlzQGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYy4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hh
bm5lbC1nYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorVGVzdCBz
b21lIGNhc2VzIG9mIE1lc3NhZ2VQb3J0IGdhcmJhZ2UgY29sbGVjdGlvbi4KKworU2hvdWxkIGJl
ICdiYXInOiBiYXIKK29ubWVzc2FnZQorbWVzc2FnZSBsaXN0ZW5lcgorb25jbG9zZQorY2xvc2Ug
bGlzdGVuZXIKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1l
LXR5cGUKICAgKyB0ZXh0L3BsYWluCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5l
bC1nYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACis8Ym9keT4KKzxwPlRlc3Qg
c29tZSBjYXNlcyBvZiBNZXNzYWdlUG9ydCBnYXJiYWdlIGNvbGxlY3Rpb24uPC9wPgorPHByZSBp
ZD1sb2c+PC9wcmU+Cis8c2NyaXB0PgorZnVuY3Rpb24gZ2MoKQoreworICAgIGlmICh3aW5kb3cu
R0NDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeyAvLyA+IGZvcmNlIGdhcmJhZ2Ug
Y29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlvbnMgYmVmb3JlIGEgY29s
bGVjdCkKKyAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCJhYmMiKTsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ci
KS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBjaGFu
bmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsOworY2hhbm5lbC5wb3J0MS5mb28gPSAiYmFyIjsKKwor
Z2MoKTsKK2xvZygiU2hvdWxkIGJlICdiYXInOiAiICsgY2hhbm5lbC5wb3J0MS5mb28pOworCitj
aGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeyBsb2coIm9ubWVzc2FnZSIpOyB9
CitjaGFubmVsLnBvcnQxLm9uY2xvc2UgPSBmdW5jdGlvbigpIHsgbG9nKCJvbmNsb3NlIik7IHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKSB9LCAwKSB9CitjaGFubmVsLnBvcnQxLmFk
ZEV2ZW50TGlzdGVuZXIoImNsb3NlIiwgZnVuY3Rpb24oKSB7IGxvZygiY2xvc2UgbGlzdGVuZXIi
KTsgfSwgZmFsc2UpOworY2hhbm5lbC5wb3J0MS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwg
ZnVuY3Rpb24oKSB7IGxvZygibWVzc2FnZSBsaXN0ZW5lciIpOyB9LCBmYWxzZSk7CisKK2djKCk7
CitjaGFubmVsLnBvcnQxLnN0YXJ0KCk7CitjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKCJtc2ci
KTsKKworZ2MoKTsKK2NoYW5uZWwucG9ydDEuY2xvc2UoKTsKK2NoYW5uZWwucG9ydDIuY2xvc2Uo
KTsKKworZ2MoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpO
YW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbWVzc2FnZS1wb3J0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUZXN0IGNyb3NzLWZyYW1lIE1lc3NhZ2VQb3J0IGNv
bW11bmljYXRpb24uCisKK1NpbXBsZSBleGNoYW5nZTogU1VDQ0VTUworUG9zdGVkIHBvcnQ6IFNV
Q0NFU1MKK0NvbnZlcnNhdGlvbjogU1VDQ0VTUworQSBwb3J0IGlzIGFjdGl2ZTogU1VDQ0VTUwor
QSBjbG9zZWQgcG9ydCBpcyBpbmFjdGl2ZTogU1VDQ0VTUworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZXhwZWN0ZWQudHh0Cl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1z
dHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2Ut
cG9ydC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2Ut
cG9ydC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2Fn
ZS1wb3J0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKzxib2R5PgorPHA+VGVz
dCBjcm9zcy1mcmFtZSBNZXNzYWdlUG9ydCBjb21tdW5pY2F0aW9uLjwvcD4KKzxwcmUgaWQ9bG9n
PjwvcHJlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGdjKCkKK3sKKyAgICBpZiAod2luZG93LkdDQ29u
dHJvbGxlcikKKyAgICAgICAgcmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsgLy8gPiBmb3JjZSBnYXJiYWdlIGNvbGxl
Y3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlLIGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3Qp
CisgICAgICAgIHZhciBzID0gbmV3IFN0cmluZygiYWJjIik7CisgICAgfQorfQorCitmdW5jdGlv
biBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuaW5u
ZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbWFpblBvcnQ7
CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFu
bmVsOworICAgIHdpbmRvdy5mcmFtZXNbMF0ucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwucG9y
dDIsICIqIik7CisgICAgbWFpblBvcnQgPSBjaGFubmVsLnBvcnQxOworICAgIG1haW5Qb3J0LnBv
c3RNZXNzYWdlKCJwaW5nIik7CisgICAgbWFpblBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0
KSB7CisgICAgICAgIGlmIChldnQuZGF0YSA9PSAicG9uZyIpCisgICAgICAgICAgICBsb2coIlNp
bXBsZSBleGNoYW5nZTogU1VDQ0VTUyIpOworICAgIH07CisgICAgbWFpblBvcnQuc3RhcnQoKTsK
KyAgICBzZXRUaW1lb3V0KHRlc3QyLCA1MCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QyKCkKK3sKKyAg
ICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICBtYWluUG9ydC5wb3N0TWVz
c2FnZSgibmV3UG9ydCIsIGNoYW5uZWwucG9ydDIpOworICAgIGNoYW5uZWwucG9ydDEub25tZXNz
YWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGlmIChldnQuZGF0YSA9PSAieW8iKQorICAg
ICAgICAgICAgbG9nKCJQb3N0ZWQgcG9ydDogU1VDQ0VTUyIpOworICAgIH07CisgICAgY2hhbm5l
bC5wb3J0MS5zdGFydCgpOworICAgIHNldFRpbWVvdXQodGVzdDMsIDUwKTsKK30KKworZnVuY3Rp
b24gdGVzdDMoKQoreworICAgIHZhciBwb3J0ID0gbWFpblBvcnQuc3RhcnRDb252ZXJzYXRpb24o
Im5ld0NvbnZlcnNhdGlvbiIpOworICAgIHBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7
CisgICAgICAgIGlmIChldnQuZGF0YSA9PSAiaGV5IikKKyAgICAgICAgICAgIGxvZygiQ29udmVy
c2F0aW9uOiBTVUNDRVNTIik7CisgICAgfTsKKyAgICBwb3J0LnN0YXJ0KCk7CisgICAgc2V0VGlt
ZW91dCh0ZXN0NCwgNTApOworfQorCitmdW5jdGlvbiB0ZXN0NCgpCit7CisgICAgbG9nKCJBIHBv
cnQgaXMgYWN0aXZlOiAiICsgKG1haW5Qb3J0LmFjdGl2ZSA/ICJTVUNDRVNTIiA6ICJGQUlMIikp
OworCisgICAgbWFpblBvcnQuY2xvc2UoKTsKKworICAgIGxvZygiQSBjbG9zZWQgcG9ydCBpcyBp
bmFjdGl2ZTogIiArIChtYWluUG9ydC5hY3RpdmUgPyAiRkFJTCIgOiAiU1VDQ0VTUyIpKTsKKwor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIHNyYz0icmVz
b3VyY2VzL21lc3NhZ2UtcG9ydC1pZnJhbWUuaHRtbCIgb25sb2FkPSJ0ZXN0KCkiPjwvaWZyYW1l
PgorPC9ib2R5PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bWVzc2FnZS1wb3J0Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4
dC9odG1sCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL21lc3NhZ2Ut
cG9ydC1pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9y
ZXNvdXJjZXMvbWVzc2FnZS1wb3J0LWlmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL21lc3NhZ2UtcG9ydC1pZnJhbWUuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPHNjcmlwdD4KK3ZhciBwb3J0OworZnVuY3Rpb24g
b25NZXNzYWdlKGV2dCkgeworICAgIGlmIChldnQuZGF0YSA9PSAicGluZyIpCisgICAgICAgIHBv
cnQucG9zdE1lc3NhZ2UoInBvbmciKTsKKyAgICBlbHNlIGlmIChldnQuZGF0YSA9PSAibmV3UG9y
dCIpCisgICAgICAgIGV2dC5tZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgieW8iKTsKKyAgICBlbHNl
IGlmIChldnQuZGF0YSA9PSAibmV3Q29udmVyc2F0aW9uIikKKyAgICAgICAgZXZ0Lm1lc3NhZ2VQ
b3J0LnBvc3RNZXNzYWdlKCJoZXkiKTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1l
c3NhZ2UiLCBmdW5jdGlvbihldnQpIHsKKyAgICBwb3J0ID0gZXZ0Lm1lc3NhZ2VQb3J0OworICAg
IHBvcnQub25tZXNzYWdlID0gb25NZXNzYWdlOworICAgIHBvcnQuc3RhcnQoKTsKK30sIGZhbHNl
KTsKKzwvc2NyaXB0PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvcmVzb3VyY2VzL21lc3NhZ2UtcG9ydC1pZnJhbWUuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23573</attachid>
            <date>2008-09-19 10:34:14 -0700</date>
            <delta_ts>2008-09-22 10:05:33 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>MessageChannel.txt</filename>
            <type>text/plain</type>
            <size>94306</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjU0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE1IEBACisyMDA4LTA5LTE2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NzkKKyAgICAgICAg
SW1wbGVtZW50IEhUTUw1IGNoYW5uZWwgbWVzc2FnaW5nCisKKyAgICAgICAgVGVzdHM6IGZhc3Qv
ZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50
cy9tZXNzYWdlLXBvcnQuaHRtbAorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54
Y2NvbmZpZzoKKyAgICAgICAgUmVtb3ZlZCB1bnVzZWQgIEVOQUJMRV9DUk9TU19ET0NVTUVOVF9N
RVNTQUdJTkcgbWFjcm8uCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICBBZGRlZCBNZXNzYWdlQ2hhbm5lbCBhbmQgTWVzc2FnZVBvcnQuCisKKyAgICAgICAgKiBXZWJD
b3JlLnBybzogTWFkZSBNZXNzYWdlRXZlbnQgY29tcGlsYXRpb24gdW5jb25kaXRpb25hbCwgYXMg
aXQgY291bGQgbm90IHBvc3NpYmx5IGJlCisgICAgICAgIHR1cm1lZCBvZmYgYW55d2F5LiBBZGRl
ZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IEFkZGVkIG5ldyBmaWxlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6IChXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICBBZGRlZCBz
dXBvcnQgZm9yIHdpbmRvdy5NZXNzYWdlQ2hhbm5lbCBjb25zdHJ1Y3Rvci4KKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDogKFdlYkNvcmU6OkpTRE9NV2luZG93
Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NV2luZG93Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgICogcGFnZS9ET01XaW5k
b3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgIEFkZGVkIHN1cHBv
cnQgZm9yIHRocmVlLWFyZ3VtZW50IHBvc3RNZXNzYWdlICh0aGF0IHBvc3RzIGEgTWVzc2FnZVBv
cnQpLgorCisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50VGFyZ2V0Ojp0b01lc3NhZ2VQb3J0KToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHA6IChXZWJDb3Jl
Ojp0b0pTKTogQWRkZWQgTWVzc2FnZVBvcnQgYXMgeWV0IGFub3RoZXIKKyAgICAgICAgRXZlbnRU
YXJnZXQgdmFyaWFudC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5jcHA6IEFkZGVkIGEgY3VzdG9tIGNvbnN0cnVjdG9yLCBzbyB0aGF0IGl0IGNvdWxk
CisgICAgICAgIHRha2UgYSBicm93c2luZyBjb250ZXh0IChmcmFtZSkgcGFyYW1ldGVyLgorCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlQ2hhbm5lbDo6bWFyayk6IEpTTWVzc2FnZUNoYW5u
ZWwgdXNlcyBhIGN1c3RvbSBtYXJrIGZ1bmN0aW9uIHRvIG1hcmsKKyAgICAgICAgcG9ydDEgYW5k
IHBvcnQyIHRoYXQgaXQgb3ducy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnN0
YXJ0Q29udmVyc2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OmFkZEV2
ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0OjpkaXNwYXRjaEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnNldE9ubWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0Ojpvbm1lc3NhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNNZXNzYWdlUG9ydDo6c2V0T25jbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpKU01l
c3NhZ2VQb3J0OjpvbmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6Om1h
cmspOgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5jcHA6IEFkZGVkLgorICAgICAgICAqIGRv
bS9NZXNzYWdlUG9ydC5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuaWRsOiBB
ZGRlZC4KKyAgICAgICAgQWRkZWQgYSBNZXNzYWdlUG9ydCBpbXBsZW1lbnRhdGlvbi4gQ3VycmVu
dGx5LCBpdCBpcyBub3QgdGhyZWFkLXNhZmUgYXQgYWxsLCBhbmQgb25seSB3b3JrcworICAgICAg
ICB3aXRoIEZyYW1lcyBhcyBjb250ZXh0cywgYnV0IGluIHRoZSBmdXR1cmUsIGl0IHdpbGwgYmUg
dXNlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggd29ya2VyCisgICAgICAgIHRocmVhZHMuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmg6IEluY2x1ZGUgIkRPTU1lc3NhZ2VQ
b3J0SW50ZXJuYWwuaCIuIFRoZSBuZXcgQVBJcyBkbyBub3QKKyAgICAgICAgcmVhbGx5IGhhdmUg
T2JqLUMgYmluZGluZ3MsIGFzIHRoZXkgYXJlIGZhciBmcm9tIGJlaW5nIGZpbmFsLCBidXQgYSBN
ZXNzYWdlUG9ydCBzdHViIGlzCisgICAgICAgIG5lZWRlZCBmb3IgTWVzc2FnZUV2ZW50LgorCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IEluY2x1ZGUgUGxh
dGZvcm1TdHJpbmcuaCBmb3IgTWVzc2FnZVBvcnQgaGFwcGluZXNzLgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZWRNZXNzYWdlUG9ydCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZGVzdHJveWVkTWVzc2FnZVBvcnQpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICBEb2N1bWVudCBrZWVwcyB0cmFjayBvZiBhbGwgTWVzc2Fn
ZVBvcnQgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCB3aGVuIGl0IHdhcyBmdWxseSBhY3RpdmUK
KyAgICAgICAgaW4gaXRzIGNvbnRleHQuCisKKyAgICAgICAgKiBkb20vRXZlbnROYW1lcy5oOiBB
ZGRlZCBjbG9zZUV2ZW50LgorCisgICAgICAgICogZG9tL01lc3NhZ2VDaGFubmVsLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlQ2hhbm5lbDo6TWVzc2FnZUNoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUNoYW5uZWw6On5NZXNzYWdlQ2hhbm5lbCk6CisgICAg
ICAgICogZG9tL01lc3NhZ2VDaGFubmVsLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVz
c2FnZUNoYW5uZWw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlQ2hhbm5lbDo6
cG9ydDEpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUNoYW5uZWw6OnBvcnQyKToKKyAgICAg
ICAgKiBkb20vTWVzc2FnZUNoYW5uZWwuaWRsOiBBZGRlZC4KKyAgICAgICAgQWRkZGVkIEpTTWVz
c2FnZUNoYW5uZWwgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBkb20vTWVzc2FnZUV2ZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudCk6CisgICAgICAg
ICogZG9tL01lc3NhZ2VFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50OjptZXNzYWdlUG9ydCk6Cisg
ICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5pZGw6CisgICAgICAgIE1lc3NhZ2VFdmVudCBoYXMg
YSBNZXNzYWdlUG9ydCBtZW1iZXIgbm93LCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHBhc3MgcG9y
dHMgYWNyb3NzCisgICAgICAgIGRvY3VtZW50cy4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRUaW1lcjo6TWVzc2FnZVBvcnRUaW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFRpbWVyOjpmaXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6cHJvY2Vzc01lc3NhZ2VQb3J0TWVzc2FnZXNTb29uKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVkTWVzc2FnZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmRlc3Ryb3llZE1lc3NhZ2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUHJp
dmF0ZTo6RnJhbWVQcml2YXRlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICog
cGFnZS9GcmFtZVByaXZhdGUuaDoKKyAgICAgICAgV2hlbiBhIG1lc3NhZ2UgaXMgcG9zdGVkIHRv
IGEgTWVzc2FnZVBvcnQsIGl0IHdha2VzIHVwIEZyYW1lLCB3aGljaCBkaXNwYXRjaGVzIGFsbCBl
dmVudHMKKyAgICAgICAgZm9yIGl0cyBkb2N1bWVudCBmcm9tIGEgemVyby1kZWxheSB0aW1lci4K
KwogMjAwOC0wOS0xNyAgVG9yIEFybmUgVmVzdGLDuCAgPHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+
CiAKICAgICAgICAgRml4IHRoZSBRdFdlYktpdC9NYWMgYnVpbGQKSW5kZXg6IFdlYkNvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UJKHJldmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDkgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgTG9jYXRp
b24gXAogICAgIE1lZGlhRXJyb3IgXAogICAgIE1lZGlhTGlzdCBcCisgICAgTWVzc2FnZUNoYW5u
ZWwgXAogICAgIE1lc3NhZ2VFdmVudCBcCisgICAgTWVzc2FnZVBvcnQgXAogICAgIE1pbWVUeXBl
IFwKICAgICBNaW1lVHlwZUFycmF5IFwKICAgICBNb3VzZUV2ZW50IFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24g
MzYyOTIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw2IEBAIHdpbjMyLWcrKyB7CiB9CiAKICMgT3B0aW9uYWwgY29tcG9uZW50cyAobG9vayBmb3Ig
ZGVmcyBpbiBjb25maWcuaCBhbmQgaW5jbHVkZWQgZmlsZXMhKQotIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9DUk9TU19ET0NVTUVOVF9NRVNTQUdJTkc9Lik6IERFRklORVMgKz0gRU5BQkxFX0NS
T1NTX0RPQ1VNRU5UX01FU1NBR0lORz0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBU0hC
T0FSRF9TVVBQT1JUPS4pOiBERUZJTkVTICs9IEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wCiAh
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBVEFCQVNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9E
QVRBQkFTRT0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0lDT05EQVRBQkFTRT0uKTogREVG
SU5FUyArPSBFTkFCTEVfSUNPTkRBVEFCQVNFPTEKQEAgLTI0Myw2ICsyNDIsNyBAQCBJRExfQklO
RElOR1MgKz0gXAogIyAgICBkb20vRXZlbnRUYXJnZXQuaWRsIFwKICAgICBkb20vS2V5Ym9hcmRF
dmVudC5pZGwgXAogICAgIGRvbS9Nb3VzZUV2ZW50LmlkbCBcCisgICAgZG9tL01lc3NhZ2VFdmVu
dC5pZGwgXAogICAgIGRvbS9NdXRhdGlvbkV2ZW50LmlkbCBcCiAgICAgZG9tL05hbWVkTm9kZU1h
cC5pZGwgXAogICAgIGRvbS9Ob2RlLmlkbCBcCkBAIC01MTgsNiArNTE4LDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGUuY3BwIFwKICAgICBkb20vS2V5Ym9hcmRFdmVudC5j
cHAgXAogICAgIGRvbS9NYXBwZWRBdHRyaWJ1dGUuY3BwIFwKKyAgICBkb20vTWVzc2FnZUV2ZW50
LmNwcCBcCiAgICAgZG9tL01vdXNlRXZlbnQuY3BwIFwKICAgICBkb20vTW91c2VSZWxhdGVkRXZl
bnQuY3BwIFwKICAgICBkb20vTXV0YXRpb25FdmVudC5jcHAgXApAQCAtMTA4MCwxNiArMTA4MSw2
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU4KIAogfQogCi1jb250
YWlucyhERUZJTkVTLCBFTkFCTEVfQ1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HPTEpIHsKLSAgICBG
RUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfQ1JPU1NfRE9DVU1FTlRfTUVTU0FH
SU5HPTEKLQotICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBkb20vTWVzc2FnZUV2ZW50LmNwcAot
Ci0gICAgSURMX0JJTkRJTkdTICs9IFwKLSAgICAgICAgZG9tL01lc3NhZ2VFdmVudC5pZGwKLX0K
LQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPTApIHsKICAgICBE
QVNIQk9BUkRTVVBQT1JUQ1NTUFJPUEVSVElFUyAtPSAkJFBXRC9jc3MvRGFzaGJvYXJkU3VwcG9y
dENTU1Byb3BlcnR5TmFtZXMuaW4KIH0KSW5kZXg6IFdlYkNvcmUvQ29uZmlndXJhdGlvbnMvV2Vi
Q29yZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NvbmZpZ3VyYXRpb25zL1dlYkNv
cmUueGNjb25maWcJKHJldmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9Db25maWd1cmF0aW9ucy9X
ZWJDb3JlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBAIFBST0RVQ1Rf
TkFNRSA9IFdlYkNvcmU7CiBPVEhFUl9MREZMQUdTID0gLWwkKFNRTElURTNfTElCUkFSWSkgLWxv
YmpjIC1zdWJfbGlicmFyeSBsaWJvYmpjIC11bWJyZWxsYSBXZWJLaXQ7CiAKIC8vIFRoaXMgbmVl
ZHMgdG8gYmUga2VwdCBzb3J0ZWQsIGFuZCBpbiBzeW5jIHdpdGggRkVBVFVSRV9ERUZJTkVTIGlu
IEphdmFTY3JpcHRDb3JlLnhjY29uZmlnLCBXZWJLaXQueGNjb25maWcgYW5kIHRoZSBkZWZhdWx0
IHNldHRpbmdzIG9mIGJ1aWxkLXdlYmtpdC4KLUZFQVRVUkVfREVGSU5FUyA9IEVOQUJMRV9DUk9T
U19ET0NVTUVOVF9NRVNTQUdJTkcgRU5BQkxFX0RBVEFCQVNFIEVOQUJMRV9ET01fU1RPUkFHRSBF
TkFCTEVfSUNPTkRBVEFCQVNFIEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMgRU5BQkxF
X1NWRyBFTkFCTEVfU1ZHX0FOSU1BVElPTiBFTkFCTEVfU1ZHX0FTX0lNQUdFIEVOQUJMRV9TVkdf
Rk9OVFMgRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCBFTkFCTEVfU1ZHX1VTRSBFTkFCTEVfVklE
RU8gRU5BQkxFX1hQQVRIIEVOQUJMRV9YU0xUOworRkVBVFVSRV9ERUZJTkVTID0gRU5BQkxFX0RB
VEFCQVNFIEVOQUJMRV9ET01fU1RPUkFHRSBFTkFCTEVfSUNPTkRBVEFCQVNFIEVOQUJMRV9PRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMgRU5BQkxFX1NWRyBFTkFCTEVfU1ZHX0FOSU1BVElPTiBFTkFC
TEVfU1ZHX0FTX0lNQUdFIEVOQUJMRV9TVkdfRk9OVFMgRU5BQkxFX1NWR19GT1JFSUdOX09CSkVD
VCBFTkFCTEVfU1ZHX1VTRSBFTkFCTEVfVklERU8gRU5BQkxFX1hQQVRIIEVOQUJMRV9YU0xUOwog
CiBTUUxJVEUzX0xJQlJBUlkgPSAkKFNRTElURTNfTElCUkFSWV8kKE1BQ19PU19YX1ZFUlNJT05f
TUFKT1IpKTsKIFNRTElURTNfTElCUkFSWV8gPSBXZWJDb3JlU1FMaXRlMzsKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNjI5MikKKysr
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00MDMxLDYgKzQwMzEsMTAgQEAKIAkJREQ3NjNCQjIwOTkyQzJDOTAwNzQwQjhFIC8qIGxp
YnhtbDIuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBERDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLzsgfTsKIAkJ
REQ3Q0RGMjUwQTIzQ0Y5ODAwMDY5OTI4IC8qIENTU1Vua25vd25SdWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNDRTBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTVW5rbm93blJ1bGUuaCAqLzsgfTsKIAkJRERFNjNFRDUwQjdENDVBODAwMjI2OTk4
IC8qIERPTVRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTMzQTE0NzUwQjdEMUJBRjAwQTUzRkZEIC8qIERPTVRleHRFdmVudC5oICovOyB9
OworCQlFMTA3NDAwRDBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDAwQjBFNzdC
REMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgKi87IH07CisJCUUxMDc0MDBFMEU3
N0JEQzAwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDAwQzBFNzdCREMwMDAzM0FGMjQgLyogSlNN
ZXNzYWdlQ2hhbm5lbC5oICovOyB9OworCQlFMTA3NDMyNDBFNzgzNTgzMDAzM0FGMjQgLyogSlNN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxMDc0MzIzMEU3ODM1ODMwMDMzQUYyNCAvKiBKU01lc3NhZ2VD
aGFubmVsQ29uc3RydWN0b3IuY3BwICovOyB9OworCQlFMTA3NDMyNzBFNzgzNUE1MDAzM0FGMjQg
LyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDMyNjBFNzgzNUE1MDAzM0FGMjQgLyogSlNNZXNz
YWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggKi87IH07CiAJCUUxMEI5MzdDMEI3M0MwMEEwMDNFRDg5
MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwQjkzN0IwQjczQzAwQTAwM0VEODkwIC8qIEpTQ3VzdG9t
WFBhdGhOU1Jlc29sdmVyLmggKi87IH07CiAJCUUxMEI5M0MzMEI3M0MyOTEwMDNFRDg5MCAvKiBK
U0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTBCOTNDMjBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwICovOyB9OwogCQlFMTBCOUI2QzBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0
aXZlWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTBCOUI2QTBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZlWFBhdGhOU1Jlc29s
dmVyLmggKi87IH07CkBAIC00MDQzLDYgKzQwNDcsMTkgQEAKIAkJRTE3QTRBMUMwRDk3OTkxRDAw
RkMxMEM2IC8qIERPTVNWR0FsdEdseXBoRWxlbWVudEludGVybmFsLmggaW4gQ29weSBHZW5lcmF0
ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUFBNkJBRTBE
OTc0QTAwMDAwNTQxQUUgLyogRE9NU1ZHQWx0R2x5cGhFbGVtZW50SW50ZXJuYWwuaCAqLzsgfTsK
IAkJRTFBMzAyQkMwREU4MzcwMzAwQzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMwMkJCMERFODM3MDMwMEM1
MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmggKi87IH07CiAJCUUxQTMwMkMxMERFODM3NjkwMEM1MkYy
QyAvKiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxQTMwMkMwMERFODM3NjkwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJRTFBNUY5OUIwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwICov
OyB9OworCQlFMUFDQUY0QzBFNzkxQUFGMDA4N0QxMkIgLyogRE9NTWVzc2FnZVBvcnQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFDQUY0QTBFNzkx
QUFGMDA4N0QxMkIgLyogRE9NTWVzc2FnZVBvcnQubW0gKi87IH07CisJCUUxQUNBRjREMEU3OTFB
QUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBQ0FGNEIwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1lc3Nh
Z2VQb3J0LmggKi87IH07CisJCUUxQURFQ0JGMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9y
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVD
QkQwRTc2QUNGMTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmggKi87IH07CisJCUUxQURFQ0MwMEU3
NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFERUNCRTBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2Fn
ZVBvcnQuY3BwICovOyB9OworCQlFMUFERUNDNzBFNzZBRDFGMDA0QTFBNUUgLyogTWVzc2FnZVBv
cnQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MUFERUNDNjBFNzZBRDFGMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaWRsICovOyB9OworCQlFMUFE
RUNDRTBFNzZBRDhCMDA0QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQURFQ0NDMEU3NkFEOEIwMDRBMUE1RSAv
KiBNZXNzYWdlQ2hhbm5lbC5oICovOyB9OworCQlFMUFERUNDRjBFNzZBRDhCMDA0QTFBNUUgLyog
TWVzc2FnZUNoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFBREVDQ0QwRTc2QUQ4QjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmNwcCAq
LzsgfTsKKwkJRTFBREVDRDEwRTc2QURBQjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmlkbCBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVDRDAw
RTc2QURBQjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmlkbCAqLzsgfTsKKwkJRTFBREVENDcw
RTc2QjhERDAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVENDYwRTc2QjhERDAwNEExQTVF
IC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwICovOyB9OworCQlFMUFERURENTBFNzZCRDYwMDA0
QTFBNUUgLyogRE9NTWVzc2FnZVBvcnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVERDQwRTc2QkQ2MDAwNEExQTVFIC8qIERPTU1l
c3NhZ2VQb3J0SW50ZXJuYWwuaCAqLzsgfTsKKwkJRTFBREVEREEwRTc2QkQ5MzAwNEExQTVFIC8q
IEpTTWVzc2FnZVBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQURFREQ4MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggKi87IH07
CisJCUUxQURFRERCMEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQURFREQ5MEU3NkJEOTMw
MDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmNwcCAqLzsgfTsKIAkJRTFCRTUxMkQwQ0Y2QzUxMjAw
MkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEyQjBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNv
ZGVTb3J0LmNwcCAqLzsgfTsKIAkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oICovOyB9OwogCQlF
MUU2RUVBNDBCNjI4REE4MDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUU2RUVBMzBCNjI4REE4
MDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5jcHAgKi87IH07CkBAIC04NDkwLDYgKzg1
MDcsMTAgQEAKIAkJREQwNUZFMEIwQjhCQTNDNjAwOUFDREZFIC8qIFdlYkNvcmVPYmpDRXh0cmFz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlT2JqQ0V4dHJhcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERDA1RkUwQzBCOEJBM0M2MDA5QUNERkUg
LyogV2ViQ29yZU9iakNFeHRyYXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5jb2RpbmcgPSAzMDsg
cGF0aCA9IFdlYkNvcmVPYmpDRXh0cmFzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CURENzYzQkIxMDk5MkMyQzkwMDc0MEI4RSAvKiBsaWJ4bWwyLmR5bGliICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxp
YiI7IG5hbWUgPSBsaWJ4bWwyLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGlieG1sMi5keWxpYjsg
c291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJRTEwNzQwMEIwRTc3QkRDMDAwMzNBRjI0
IC8qIEpTTWVzc2FnZUNoYW5uZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZXNzYWdlQ2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxMDc0MDBDMEU3N0JEQzAwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVzc2FnZUNoYW5uZWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTEwNzQzMjMwRTc4MzU4MzAwMzNBRjI0IC8qIEpTTWVzc2FnZUNo
YW5uZWxDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMTA3NDMyNjBFNzgzNUE1MDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0
cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVzc2FnZUNoYW5u
ZWxDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTBCOTM3QjBC
NzNDMDBBMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwQjkzQzIwQjczQzI5MTAwM0VEODkwIC8qIEpTQ3VzdG9t
WFBhdGhOU1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTEwQjlCNkEwQjc0NzU5OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNvbHZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg1MDAsNiArODUyMSwxOSBAQAogCQlFMTJF
REJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRUYXJnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMUEzMDJCQjBERTgzNzAzMDBDNTJGMkMgLyogU3RyaW5nQnVpbGRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdCdWlsZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQTMwMkMwMERFODM3NjkwMEM1MkYyQyAvKiBTdHJpbmdC
dWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ0J1
aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUE1Rjk5QTBFN0VBQTI1
MDBBRjg1RUEgLyogSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBQ0FGNEEwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1lc3Nh
Z2VQb3J0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NTWVz
c2FnZVBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQUNBRjRCMEU3OTFB
QUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBET01NZXNzYWdlUG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MUFERUNCRDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVu
Y29kaW5nID0gNDsgcGF0aCA9IE1lc3NhZ2VQb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUxQURFQ0JFMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXNzYWdlUG9ydC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQURFQ0M2MEU3NkFEMUYwMDRBMUE1RSAvKiBNZXNzYWdl
UG9ydC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVzc2FnZVBvcnQuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFMUFERUNDQzBFNzZBRDhCMDA0QTFBNUUgLyogTWVzc2Fn
ZUNoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZUNoYW5u
ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBREVDQ0QwRTc2QUQ4QjAwNEEx
QTVFIC8qIE1lc3NhZ2VDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1lc3NhZ2VDaGFubmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTFBREVDRDAwRTc2QURBQjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBNZXNzYWdlQ2hhbm5lbC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUxQURFRDQ2MEU3NkI4REQwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0Q3VzdG9tLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2FnZVBvcnRDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUFERURENDBFNzZCRDYwMDA0
QTFBNUUgLyogRE9NTWVzc2FnZVBvcnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01NZXNzYWdlUG9ydEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxQURFREQ4MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVzc2FnZVBvcnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBREVERDkwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2Fn
ZVBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdl
UG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQkU1MTJCMENGNkM1MTIw
MDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gWFNMVFVuaWNvZGVTb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFNkVFQTMwQjYyOERBODAwNUYyRjcwIC8qIEpTSFRNTFNl
bGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MU2VsZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDEy
MSw2ICsxMDE1NSw4IEBACiAJCQkJODVERjM0M0YwQUFGQzBFRDAwRTU5QUUzIC8qIERPTUtleWJv
YXJkRXZlbnRQcml2YXRlLmggKi8sCiAJCQkJNzU3OTNFRDAwRDBDRTg1QjAwN0ZDMEFDIC8qIERP
TU1lc3NhZ2VFdmVudC5oICovLAogCQkJCTc1NzkzRUQxMEQwQ0U4NUIwMDdGQzBBQyAvKiBET01N
ZXNzYWdlRXZlbnQubW0gKi8sCisJCQkJRTFBQ0FGNEEwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1l
c3NhZ2VQb3J0Lm1tICovLAorCQkJCUUxQUNBRjRCMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNz
YWdlUG9ydC5oICovLAogCQkJCTg1N0UwQjIzMEFCMDQzNDYwMDM2RTQ0NyAvKiBET01Nb3VzZUV2
ZW50LmggKi8sCiAJCQkJODU3RTBCMjQwQUIwNDM0NjAwMzZFNDQ3IC8qIERPTU1vdXNlRXZlbnQu
bW0gKi8sCiAJCQkJODU3RTBCMkIwQUIwNDNGQzAwMzZFNDQ3IC8qIERPTU1vdXNlRXZlbnRQcml2
YXRlLmggKi8sCkBAIC0xMDQxMiw2ICsxMDQ0OCw3IEBACiAJCQkJODU5ODlEQzUwQUNDOEJCRDAw
QTBCQzUxIC8qIERPTUtleWJvYXJkRXZlbnRJbnRlcm5hbC5oICovLAogCQkJCTg1RTcxMTgyMEFD
NUQ1MzUwMDUzMjcwRiAvKiBET01NZWRpYUxpc3RJbnRlcm5hbC5oICovLAogCQkJCTc1NzkzRUQy
MEQwQ0U4NUIwMDdGQzBBQyAvKiBET01NZXNzYWdlRXZlbnRJbnRlcm5hbC5oICovLAorCQkJCUUx
QURFREQ0MEU3NkJENjAwMDRBMUE1RSAvKiBET01NZXNzYWdlUG9ydEludGVybmFsLmggKi8sCiAJ
CQkJODU5ODlEQzYwQUNDOEJCRDAwQTBCQzUxIC8qIERPTU1vdXNlRXZlbnRJbnRlcm5hbC5oICov
LAogCQkJCTg1OTg5REM3MEFDQzhCQkQwMEEwQkM1MSAvKiBET01NdXRhdGlvbkV2ZW50SW50ZXJu
YWwuaCAqLywKIAkJCQk4NUU3MTE4MzBBQzVENTM1MDA1MzI3MEYgLyogRE9NTmFtZWROb2RlTWFw
SW50ZXJuYWwuaCAqLywKQEAgLTExNTUxLDggKzExNTg4LDEyIEBACiAJCQkJQjI4QkMzMTkwRDEz
NUU1NDAwQ0RCQTI3IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oICovLAogCQkJCUE4NjYyOUNF
MDlEQTJCNDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3BwICovLAogCQkJCUE4NjYyOUNE
MDlEQTJCNDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuaCAqLywKKwkJCQlFMTA3NDAwQjBF
NzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgKi8sCisJCQkJRTEwNzQwMEMw
RTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuaCAqLywKIAkJCQk3NTc5M0VDNjBE
MENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuY3BwICovLAogCQkJCTc1NzkzRUM3MEQw
Q0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICovLAorCQkJCUUxQURFREQ4MEU3NkJE
OTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggKi8sCisJCQkJRTFBREVERDkwRTc2QkQ5MzAw
NEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuY3BwICovLAogCQkJCUE4NjYyOUNDMDlEQTJCNDcwMDk2
MzNBNSAvKiBKU01vdXNlRXZlbnQuY3BwICovLAogCQkJCUE4NjYyOUNCMDlEQTJCNDcwMDk2MzNB
NSAvKiBKU01vdXNlRXZlbnQuaCAqLywKIAkJCQk2NURGMzFFNzA5RDFDQzYwMDAwQkUzMjUgLyog
SlNNdXRhdGlvbkV2ZW50LmNwcCAqLywKQEAgLTEyNDkzLDYgKzEyNTM0LDggQEAKIAkJCQlDMDkx
NTg4NTBEQjQyMDkyMDBFNTVBRjQgLyogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmggKi8sCiAJ
CQkJQzA5MTU4ODYwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVy
LmNwcCAqLywKIAkJCQlDMDkxNTg4NzBEQjQyMDkyMDBFNTVBRjQgLyogSlNJbnNwZWN0b3JDYWxs
YmFja1dyYXBwZXIuaCAqLywKKwkJCQlFMTA3NDMyMzBFNzgzNTgzMDAzM0FGMjQgLyogSlNNZXNz
YWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQlFMTA3NDMyNjBFNzgzNUE1MDAzM0FG
MjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggKi8sCiAJCQkJQkNEOUMyNkMwQzE3
QUE4MTAwNUM5MEEyIC8qIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwICovLAogCQkJCUJDRDlD
MjZEMEMxN0FBODEwMDVDOTBBMiAvKiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uLmggKi8sCiAJCQkJ
QkNCNzczNUUwQzE3ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgKi8s
CkBAIC0xMjYxMiw2ICsxMjY1NSw4IEBACiAJCQkJQUI0Q0I0RUEwQjhCREEzRDAwOUY0MEIwIC8q
IEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaCAqLywKIAkJCQkxQzVGQUVFNjBEQ0ZEQTY4MDBE
NThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCAqLywKIAkJCQlCQ0UxQzQz
RjBEOTgzMEY0MDAzQjAyRjIgLyogSlNMb2NhdGlvbkN1c3RvbS5jcHAgKi8sCisJCQkJRTFBNUY5
OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwICovLAorCQkJ
CUUxQURFRDQ2MEU3NkI4REQwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcCAqLywK
IAkJCQlBOUM2RTY0NjBENzQ2NUNBMDA2NDQyRTkgLyogSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNw
cCAqLywKIAkJCQlCQ0Q5QzI1RjBDMTdBQTY3MDA1QzkwQTIgLyogSlNOYW1lZE5vZGVNYXBDdXN0
b20uY3BwICovLAogCQkJCUE5QzZFNjQ4MEQ3NDY1RDgwMDY0NDJFOSAvKiBKU05hdmlnYXRvckN1
c3RvbS5jcHAgKi8sCkBAIC0xMzQyMCw5ICsxMzQ2NSwxNSBAQAogCQkJCUE4QzRBN0Y0MDlENTYz
MjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuY3BwICovLAogCQkJCUE4QzRBN0YzMDlENTYz
MjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuaCAqLywKIAkJCQlBOEM0QTg0QjA5RDU2NDlE
MDAwM0FDOEQgLyogTWFwcGVkQXR0cmlidXRlRW50cnkuaCAqLywKKwkJCQlFMUFERUNDRDBFNzZB
RDhCMDA0QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuY3BwICovLAorCQkJCUUxQURFQ0NDMEU3NkFE
OEIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5oICovLAorCQkJCUUxQURFQ0QwMEU3NkFEQUIw
MDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5pZGwgKi8sCiAJCQkJNzU3OTNFODAwRDBDRTBCMzAw
N0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5jcHAgKi8sCiAJCQkJNzU3OTNFODEwRDBDRTBCMzAwN0ZD
MEFDIC8qIE1lc3NhZ2VFdmVudC5oICovLAogCQkJCTc1NzkzRTgyMEQwQ0UwQjMwMDdGQzBBQyAv
KiBNZXNzYWdlRXZlbnQuaWRsICovLAorCQkJCUUxQURFQ0JFMEU3NkFDRjEwMDRBMUE1RSAvKiBN
ZXNzYWdlUG9ydC5jcHAgKi8sCisJCQkJRTFBREVDQkQwRTc2QUNGMTAwNEExQTVFIC8qIE1lc3Nh
Z2VQb3J0LmggKi8sCisJCQkJRTFBREVDQzYwRTc2QUQxRjAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0
LmlkbCAqLywKIAkJCQk4NTAzMUIyRjBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VFdmVudC5jcHAg
Ki8sCiAJCQkJODUwMzFCMzAwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlRXZlbnQuaCAqLywKIAkJ
CQkxNDFCOTRFNTA5RUM0MjIzMDAwRTk0MTMgLyogTW91c2VFdmVudC5pZGwgKi8sCkBAIC0xNTU3
MSw2ICsxNTYyMiwxMyBAQAogCQkJCTMxNkZFMDgyMEU2Q0NDMjgwMEJGNjA4OCAvKiBET01XZWJL
aXRDU1NLZXlmcmFtZXNSdWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyODRBRERF
MEU2RkVCMzEwMDJFRUZCRCAvKiBVc2VyU3R5bGVTaGVldExvYWRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ3QjRCRTgwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFMUFERUNCRjBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBv
cnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQURFQ0NFMEU3NkFEOEIwMDRBMUE1RSAvKiBNZXNz
YWdlQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFBREVERDUwRTc2QkQ2MDAwNEExQTVF
IC8qIERPTU1lc3NhZ2VQb3J0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQURFRERB
MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQlF
MTA3NDAwRTBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTEwNzQzMjcwRTc4MzVBNTAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFBQ0FGNEQwRTc5MUFBRjAwODdEMTJCIC8q
IERPTU1lc3NhZ2VQb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE1Njg1LDYgKzE1NzQzLDggQEAK
IAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNv
dXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3Iu
cG5nIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0VGNDU0MDBFNjc2QUMxMDAxQzEyODcgLyogVGV4
dE1ldHJpY3MuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQlFMUFERUNDNzBFNzZBRDFGMDA0QTFB
NUUgLyogTWVzc2FnZVBvcnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQlFMUFERUNEMTBFNzZB
REFCMDA0QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3
Mzc0LDYgKzE3NDM0LDE0IEBACiAJCQkJMzE2RkUwODEwRTZDQ0MyODAwQkY2MDg4IC8qIERPTVdl
YktpdENTU0tleWZyYW1lc1J1bGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Mjg0QURERDBFNkZF
QjMxMDAyRUVGQkQgLyogVXNlclN0eWxlU2hlZXRMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUUxQURFQ0MwMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9y
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUFERUNDRjBFNzZBRDhCMDA0QTFBNUUgLyogTWVz
c2FnZUNoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFBREVENDcwRTc2QjhERDAwNEEx
QTVFIC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFBREVE
REIwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRTEwNzQwMEQwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRTEwNzQzMjQwRTc4MzU4MzAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5u
ZWxDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUFDQUY0QzBFNzkxQUFGMDA4
N0QxMkIgLyogRE9NTWVzc2FnZVBvcnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMUE1Rjk5QjBF
N0VBQTI1MDBBRjg1RUEgLyogSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9u
IDM2MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSlNIVE1MQ29sbGVjdGlvbi5o
IgogI2luY2x1ZGUgIkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkpTSW1hZ2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTWE1MSHR0cFJlcXVlc3RD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTE4OCw2ICsxODksNyBAQCBj
b25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dCYXNlOjpzX2luZm8gCiAjIC0tIENvbnN0cnVjdG9y
cyAtLQogICBBdWRpbyAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpB
dWRpbyAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBJbWFnZSAgICAgICAgICAgICAgICAgV2Vi
Q29yZTo6SlNET01XaW5kb3dCYXNlOjpJbWFnZSAgICAgICAgICAgICAgRG9udERlbGV0ZQorICBN
ZXNzYWdlQ2hhbm5lbCAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpNZXNzYWdlQ2hh
bm5lbCAgICAgRG9udERlbGV0ZQogICBPcHRpb24gICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjpPcHRpb24gICAgICAgICAgICAgRG9udERlbGV0ZQogICBYTUxIdHRwUmVx
dWVzdCAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpYTUxIdHRwUmVxdWVzdCAgICAg
RG9udERlbGV0ZQogICBYU0xUUHJvY2Vzc29yICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpYU0xUUHJvY2Vzc29yICAgICAgRG9udERlbGV0ZQpAQCAtNDQ5LDYgKzQ1MSwxMCBAQCBK
U1ZhbHVlICpKU0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVyCiAgICAgICAgIC8vIEZJWE1F
OiB0aGlzIHByb3BlcnR5IChhbmQgdGhlIGZldyBiZWxvdykgcHJvYmFibHkgc2hvdWxkbid0IGNy
ZWF0ZSBhIG5ldyBvYmplY3QgZXZlcnkKICAgICAgICAgLy8gdGltZQogICAgICAgICByZXR1cm4g
bmV3IChleGVjKSBKU0ltYWdlQ29uc3RydWN0b3IoZXhlYywgaW1wbCgpLT5mcmFtZSgpLT5kb2N1
bWVudCgpKTsKKyAgICBjYXNlIE1lc3NhZ2VDaGFubmVsOgorICAgICAgICBpZiAoIWFsbG93c0Fj
Y2Vzc0Zyb20oZXhlYykpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyAoZXhlYykgSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yKGV4ZWMsIGlt
cGwoKS0+ZnJhbWUoKSk7CiAgICAgY2FzZSBPcHRpb246CiAgICAgICAgIGlmICghYWxsb3dzQWNj
ZXNzRnJvbShleGVjKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzNjI5MikKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
NCw3ICsxNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBPbldlYktpdFRy
YW5zaXRpb25FbmQsCiAKICAgICAgICAgICAgIC8vIENvbnN0cnVjdG9ycwotICAgICAgICAgICAg
QXVkaW8sIEltYWdlLCBPcHRpb24sIFhNTEh0dHBSZXF1ZXN0LAorICAgICAgICAgICAgQXVkaW8s
IEltYWdlLCBNZXNzYWdlQ2hhbm5lbCwgT3B0aW9uLCBYTUxIdHRwUmVxdWVzdCwKICAgICAgICAg
ICAgIFhTTFRQcm9jZXNzb3IKICAgICAgICAgfTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgog
I2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKKyNpbmNsdWRlICJKU01lc3NhZ2VQb3J0Lmgi
CisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxranMvSlNPYmplY3QuaD4KQEAgLTE2
NCwxMiArMTY2LDE0IEBAIEpTVmFsdWUqIEpTRE9NV2luZG93Ojpwb3N0TWVzc2FnZShFeGVjU3QK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdChleGVjLCAxKSk7CisgICAgTWVzc2FnZVBvcnQq
IG1lc3NhZ2VQb3J0ID0gKGFyZ3Muc2l6ZSgpID09IDIpID8gMCA6IHRvTWVzc2FnZVBvcnQoYXJn
cy5hdChleGVjLCAxKSk7CisKKyAgICBTdHJpbmcgdGFyZ2V0T3JpZ2luID0gdmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KGV4ZWMsIChhcmdzLnNpemUo
KSA9PSAyKSA/IDEgOiAyKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IHdpbmRvdy0+cG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luLCBzb3VyY2UsIGVjKTsK
KyAgICB3aW5kb3ctPnBvc3RNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VQb3J0LCB0YXJnZXRPcmln
aW4sIHNvdXJjZSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldEJhc2UuY3BwCShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudFRhcmdldEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNs
dWRlICJKU0V2ZW50VGFyZ2V0Tm9kZS5oIgorI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNp
bmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCiAjaW5jbHVkZSA8a2pzL0Vycm9yLmg+
CiAKQEAgLTI4MSw5ICsyODIsMTEgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEV2
ZW50VGFyZwogICAgICAgICAvLyBET01BcHBsaWNhdGlvbkNhY2hlIGlzIGFsd2F5cyBjcmVhdGVk
IHZpYSBKUywgc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgY2FjaGVET01PYmplY3QoKSBoZXJlLgog
ICAgICAgICByZXR1cm4gU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdChjYWNoZSk7CiAj
ZW5kaWYKKworICAgIGlmIChNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSB0YXJnZXQtPnRvTWVz
c2FnZVBvcnQoKSkKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgbWVzc2FnZVBvcnQpOwogICAg
IAotICAgIC8vIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgRXZlbnRUYXJnZXRzOiBFdmVudFRhcmdl
dE5vZGUgYW5kIFhNTEh0dHBSZXF1ZXN0LgotICAgIC8vIElmIFNWRyBzdXBwb3J0IGlzIGVuYWJs
ZWQsIHRoZXJlIGlzIGFsc28gU1ZHRWxlbWVudEluc3RhbmNlLgorICAgIC8vIEFsbCBraW5kcyBv
ZiBFdmVudFRhcmdldHMgYXJlIGxpc3RlZCBhYm92ZS4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU01lc3NhZ2VD
aGFubmVsQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWwuaCIKKyNp
bmNsdWRlICJNZXNzYWdlQ2hhbm5lbC5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCisKK3N0
YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3JUYWJs
ZVZhbHVlc1sxXSA9Cit7CisgICAgeyAwLCAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBI
YXNoVGFibGUgSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yVGFibGUgPSB7IDAsIEpTTWVzc2Fn
ZUNoYW5uZWxDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07CisKK2NvbnN0IENsYXNzSW5mbyBK
U01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIk1lc3NhZ2VDaGFubmVsQ29u
c3RydWN0b3IiLCAwLCAmSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yVGFibGUsIDAgfTsKKwor
SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yOjpKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBGcmFtZSogYnJvd3NpbmdDb250ZXh0KQorICAgIDogRE9NT2JqZWN0
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpCisgICAgLCBt
X2Jyb3dzaW5nQ29udGV4dChicm93c2luZ0NvbnRleHQpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTTWVzc2FnZUNoYW5uZWxQcm90b3R5cGU6OnNl
bGYoZXhlYyksIE5vbmUpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQor
eworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0OworICAgIHJl
dHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKworSlNPYmplY3QqIEpTTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVj
dG9yLCBjb25zdCBBcmdMaXN0JikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
Pih0b0pTKGV4ZWMsIE1lc3NhZ2VDaGFubmVsOjpjcmVhdGUoc3RhdGljX2Nhc3Q8SlNNZXNzYWdl
Q2hhbm5lbENvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpLT5tX2Jyb3dzaW5nQ29udGV4dCkpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3JfaAorI2Rl
ZmluZSBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZyYW1lOworCisgICAg
Y2xhc3MgSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7Cisg
ICAgcHVibGljOgorICAgICAgICBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBGcmFtZSopOworICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICAgICAgdmlydHVhbCBib29sIGltcGxlbWVu
dHNIYXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBj
b25zdCBKU0M6OkFyZ0xpc3QmKTsKKyAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUg
Z2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKKworICAgICAgICBGcmFtZSog
bV9icm93c2luZ0NvbnRleHQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yX2gKClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNNZXNzYWdlQ2hh
bm5lbC5oIgorCisjaW5jbHVkZSAiTWVzc2FnZUNoYW5uZWwuaCIKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAordm9pZCBKU01lc3NhZ2VDaGFubmVs
OjptYXJrKCkKK3sKKyAgICBET01PYmplY3Q6Om1hcmsoKTsKKworICAgIGlmIChtX2ltcGwtPnBv
cnQxKCkpIHsKKyAgICAgICAgaWYgKERPTU9iamVjdCogcDEgPSBTY3JpcHRJbnRlcnByZXRlcjo6
Z2V0RE9NT2JqZWN0KG1faW1wbC0+cG9ydDEoKSkpCisgICAgICAgICAgICBpZiAoIXAxLT5tYXJr
ZWQoKSkKKyAgICAgICAgICAgICAgICBwMS0+bWFyaygpOworICAgIH0KKworICAgIGlmIChtX2lt
cGwtPnBvcnQyKCkpIHsKKyAgICAgICAgaWYgKERPTU9iamVjdCogcDIgPSBTY3JpcHRJbnRlcnBy
ZXRlcjo6Z2V0RE9NT2JqZWN0KG1faW1wbC0+cG9ydDIoKSkpCisgICAgICAgICAgICBpZiAoIXAy
LT5tYXJrZWQoKSkKKyAgICAgICAgICAgICAgICBwMi0+bWFyaygpOworICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wt
c3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5n
LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpT
RE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNFdmVudC5oIgorI2luY2x1ZGUgIkpTRXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK0pTVmFsdWUqIEpTTWVzc2FnZVBv
cnQ6OnN0YXJ0Q29udmVyc2F0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3sKKyAgICBGcmFtZSogYnJvd3NpbmdDb250ZXh0ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7CisgICAgY29uc3QgVVN0cmlu
ZyYgbWVzc2FnZSA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOworCisgICAgcmV0
dXJuIHRvSlMoZXhlYywgaW1wbCgpLT5zdGFydENvbnZlcnNhdGlvbihicm93c2luZ0NvbnRleHQs
IG1lc3NhZ2UpLmdldCgpKTsKK30KKworSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6YWRkRXZlbnRM
aXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNE
T01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coaW1wbCgpLT5vd25lckNvbnRleHQoKSk7
CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJl
ZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSB3aW5kb3ctPmZpbmRP
ckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMSks
IHRydWUpOworICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmlu
ZyhleGVjKSwgbGlzdGVuZXIucmVsZWFzZSgpLCBhcmdzLmF0KGV4ZWMsIDIpLT50b0Jvb2xlYW4o
ZXhlYykpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlKiBKU01lc3Nh
Z2VQb3J0OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK3sKKyAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhpbXBs
KCktPm93bmVyQ29udGV4dCgpKTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
d2luZG93LT5maW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgYXJncy5hdChleGVj
LCAxKSwgdHJ1ZSk7CisgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoZXhlYywgMCkt
PnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lciwgYXJncy5hdChleGVjLCAyKS0+dG9Cb29sZWFuKGV4
ZWMpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKK30KKyAgICAKK0pTVmFsdWUq
IEpTTWVzc2FnZVBvcnQ6OmRpc3BhdGNoRXZlbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgCisgICAg
Ym9vbCByZXN1bHQgPSBpbXBsKCktPmRpc3BhdGNoRXZlbnQodG9FdmVudChhcmdzLmF0KGV4ZWMs
IDApKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIGpz
Qm9vbGVhbihyZXN1bHQpOyAgICAKK30KKwordm9pZCBKU01lc3NhZ2VQb3J0OjpzZXRPbm1lc3Nh
Z2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBKU0RPTVdpbmRvdyog
d2luZG93ID0gdG9KU0RPTVdpbmRvdyhpbXBsKCktPm93bmVyQ29udGV4dCgpKTsKKyAgICBpZiAo
IXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0T25NZXNzYWdlTGlzdGVu
ZXIod2luZG93LT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2
YWx1ZSwgdHJ1ZSkpOworfQorCitKU1ZhbHVlKiBKU01lc3NhZ2VQb3J0Ojpvbm1lc3NhZ2UoRXhl
Y1N0YXRlKikgY29uc3QKK3sKKyAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxp
c3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihpbXBsKCkt
Pm9uTWVzc2FnZUxpc3RlbmVyKCkpKQorICAgICAgICBpZiAoSlNPYmplY3QqIGxpc3RlbmVyT2Jq
ID0gbGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpCisgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJP
Ymo7CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCit2b2lkIEpTTWVzc2FnZVBvcnQ6OnNldE9u
Y2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBKU0RPTVdpbmRv
dyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhpbXBsKCktPm93bmVyQ29udGV4dCgpKTsKKyAgICBp
ZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0T25DbG9zZUxpc3Rl
bmVyKHdpbmRvdy0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywg
dmFsdWUsIHRydWUpKTsKK30KKworSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6b25jbG9zZShFeGVj
U3RhdGUqKSBjb25zdAoreworICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KGltcGwoKS0+
b25DbG9zZUxpc3RlbmVyKCkpKQorICAgICAgICBpZiAoSlNPYmplY3QqIGxpc3RlbmVyT2JqID0g
bGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpCisgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJPYmo7
CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCit2b2lkIEpTTWVzc2FnZVBvcnQ6Om1hcmsoKQor
eworICAgIERPTU9iamVjdDo6bWFyaygpOworIAorICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cio+KG1faW1wbC0+b25NZXNzYWdlTGlzdGVuZXIoKSkpCisgICAgICAgIGxpc3RlbmVyLT5tYXJr
KCk7CisKKyAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3Rh
dGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPm9uQ2xvc2VMaXN0
ZW5lcigpKSkKKyAgICAgICAgbGlzdGVuZXItPm1hcmsoKTsKKworICAgIGlmIChNZXNzYWdlUG9y
dCogZW50YW5nbGVkUG9ydCA9IG1faW1wbC0+ZW50YW5nbGVkUG9ydCgpKSB7CisgICAgICAgIGlm
IChET01PYmplY3QqIG9iaiA9IFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QoZW50YW5n
bGVkUG9ydCkpCisgICAgICAgICAgICBpZiAoIW9iai0+bWFya2VkKCkpCisgICAgICAgICAgICAg
ICAgb2JqLT5tYXJrKCk7CisgICAgfQorCisgICAgdHlwZWRlZiBNZXNzYWdlUG9ydDo6RXZlbnRM
aXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgdHlwZWRlZiBNZXNzYWdlUG9ydDo6
TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2
ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVudExpc3RlbmVycygpOworICAgIGZvciAoRXZlbnRM
aXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVudExpc3RlbmVycy5iZWdpbigpOyBt
YXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21hcEl0ZXIpIHsKKyAgICAgICAgZm9y
IChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9IG1hcEl0ZXItPnNlY29uZC5iZWdp
bigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQoKTsgKyt2ZWNJdGVyKSB7CisgICAg
ICAgICAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2Fz
dDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KHZlY0l0ZXItPmdldCgpKTsKKyAgICAgICAg
ICAgIGxpc3RlbmVyLT5tYXJrKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlUG9ydEN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgJKHJldmlzaW9uIDM2
MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20p
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5j
b20pCiAgKgpAQCAtMTI5LDYgKzEyOSw3IEBACiAjaW1wb3J0ICJET01IVE1MVUxpc3RFbGVtZW50
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUtleWJvYXJkRXZlbnRJbnRlcm5hbC5oIgogI2ltcG9y
dCAiRE9NTWVkaWFMaXN0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTU1lc3NhZ2VQb3J0SW50ZXJu
YWwuaCIKICNpbXBvcnQgIkRPTU1vdXNlRXZlbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NTXV0
YXRpb25FdmVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01OYW1lZE5vZGVNYXBJbnRlcm5hbC5o
IgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCBzdWIgQWRkSW5jbHVkZXNG
b3JUeXBlCiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkNhbnZhc1N0eWxlLmgifSA9IDE7CiAgICAg
fQogCi0gICAgaWYgKCR0eXBlIGVxICJDYW52YXNHcmFkaWVudCIgb3IgJHR5cGUgZXEgIlhQYXRo
TlNSZXNvbHZlciIpIHsKKyAgICBpZiAoJHR5cGUgZXEgIkNhbnZhc0dyYWRpZW50IiBvciAkdHlw
ZSBlcSAiWFBhdGhOU1Jlc29sdmVyIiBvciAkdHlwZSBlcSAiTWVzc2FnZVBvcnQiKSB7CiAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IlBsYXRmb3JtU3RyaW5nLmgifSA9IDE7CiAgICAgfQogCkluZGV4
OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5j
bHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAi
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQu
aCIKQEAgLTQ1Miw2ICs0NTMsMTggQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgaWYgKG1f
c3R5bGVTaGVldHMpCiAgICAgICAgIG1fc3R5bGVTaGVldHMtPmRvY3VtZW50RGVzdHJveWVkKCk7
CiAKKyAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIG1lc3NhZ2VQb3J0c0VuZCA9
IG1fbWVzc2FnZVBvcnRzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxNZXNzYWdlUG9ydCo+Ojpp
dGVyYXRvciBpdGVyID0gbV9tZXNzYWdlUG9ydHMuYmVnaW4oKTsgaXRlciAhPSBtX21lc3NhZ2VQ
b3J0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVCgoKml0ZXIpLT5jcmVhdGVkV2l0
aERvY3VtZW50KCkgPT0gdGhpcyk7CisgICAgICAgICgqaXRlciktPmNvbnRleHREZXN0cm95ZWQo
KTsKKyAgICAgICAgaWYgKCgqaXRlciktPmVudGFuZ2xlZFBvcnQoKSkgeworICAgICAgICAgICAg
UmVmUHRyPE1lc3NhZ2VQb3J0PiBzdXJ2aXZpbmdQb3J0ID0gKCppdGVyKS0+ZW50YW5nbGVkUG9y
dCgpOworICAgICAgICAgICAgKCppdGVyKS0+dW5lbnRhbmdsZSgpOworICAgICAgICAgICAgaWYg
KHN1cnZpdmluZ1BvcnQtPmNyZWF0ZWRXaXRoRG9jdW1lbnQoKSAhPSB0aGlzKSAvLyBPdGhlcndp
c2UsIHN1cnZpdmluZ1BvcnQgd29uJ3QgcmVhbGx5IHN1cnZpdmUuCisgICAgICAgICAgICAgICAg
c3Vydml2aW5nUG9ydC0+cXVldWVDbG9zZUV2ZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBtX2RvY3VtZW50ID0gMDsKIH0KIApAQCAtMTMwNiw2ICsxMzE5LDEyIEBAIHZvaWQgRG9jdW1l
bnQ6OmRldGFjaCgpCiB2b2lkIERvY3VtZW50OjpjbGVhckZyYW1lUG9pbnRlcigpCiB7CiAgICAg
bV9mcmFtZSA9IDA7CisKKyAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIG1lc3Nh
Z2VQb3J0c0VuZCA9IG1fbWVzc2FnZVBvcnRzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxNZXNz
YWdlUG9ydCo+OjppdGVyYXRvciBpdGVyID0gbV9tZXNzYWdlUG9ydHMuYmVnaW4oKTsgaXRlciAh
PSBtX21lc3NhZ2VQb3J0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVCgoKml0ZXIp
LT5jcmVhdGVkV2l0aERvY3VtZW50KCkgPT0gdGhpcyk7CisgICAgICAgICgqaXRlciktPmNvbnRl
eHREZXN0cm95ZWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUFsbEV2ZW50
TGlzdGVuZXJzRnJvbUFsbE5vZGVzKCkKQEAgLTQzMDUsNCArNDMyNCwyNyBAQCBIVE1MQ2FudmFz
RWxlbWVudCogRG9jdW1lbnQ6OmdldENTU0NhbnZhCiAgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsK
IH0KIAordm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hNZXNzYWdlUG9ydEV2ZW50cygpCit7CisgICAg
UmVmUHRyPERvY3VtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQq
PiBwb3J0cyA9IG1fbWVzc2FnZVBvcnRzOyAvLyBNYWtlIGEgZnJvemVuIGNvcHkuCisKKyAgICBI
YXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIHBvcnRzRW5kID0gcG9ydHMuZW5kKCk7Cisg
ICAgZm9yIChIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJhdG9yIHBvcnRzSXRlciA9IHBvcnRz
LmJlZ2luKCk7IHBvcnRzSXRlciAhPSBwb3J0c0VuZDsgKytwb3J0c0l0ZXIpIHsKKyAgICAgICAg
TWVzc2FnZVBvcnQqIHBvcnQgPSAqcG9ydHNJdGVyOworICAgICAgICBpZiAobV9tZXNzYWdlUG9y
dHMuY29udGFpbnMocG9ydCkgJiYgcG9ydC0+cXVldWVJc09wZW4oKSkKKyAgICAgICAgICAgIHBv
cnQtPmRpc3BhdGNoTWVzc2FnZXMoKTsKKyAgICB9Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmNyZWF0
ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCogcG9ydCkKK3sKKyAgICBtX21lc3NhZ2VQb3J0cy5h
ZGQocG9ydCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmRlc3Ryb3llZE1lc3NhZ2VQb3J0KE1lc3Nh
Z2VQb3J0KiBwb3J0KQoreworICAgIG1fbWVzc2FnZVBvcnRzLnJlbW92ZShwb3J0KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzNjI5MikKKysrIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEhUTUxNYXBFbGVtZW50OwogICAgIGNsYXNzIElu
dFBvaW50OwogICAgIGNsYXNzIEpTTm9kZTsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydDsKICAgICBj
bGFzcyBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOwogICAgIGNsYXNzIE5vZGVGaWx0ZXI7
CiAgICAgY2xhc3MgTm9kZUl0ZXJhdG9yOwpAQCAtNzYxLDcgKzc2MiwxMSBAQCBwdWJsaWM6CiAg
ICAgLy8gRXh0ZW5zaW9uIGZvciBtYW5pcHVsYXRpbmcgY2FudmFzIGRyYXdpbmcgY29udGV4dHMg
Zm9yIHVzZSBpbiBDU1MKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGdldENTU0NhbnZh
c0NvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCB3aWR0
aCwgaW50IGhlaWdodCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGdldENTU0NhbnZhc0VsZW1l
bnQoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICAKKworICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdl
UG9ydEV2ZW50cygpOworICAgIHZvaWQgY3JlYXRlZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0Kik7
CisgICAgdm9pZCBkZXN0cm95ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCopOworCiBwcm90ZWN0
ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhUTUwpOwogCkBAIC05MTIsNiArOTE3
LDggQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX2NvbnRlbnRMYW5ndWFnZTsKIAorICAgIEhh
c2hTZXQ8TWVzc2FnZVBvcnQqPiBtX21lc3NhZ2VQb3J0czsKKwogcHVibGljOgogICAgIGJvb2wg
aW5QYWdlQ2FjaGUoKTsKICAgICB2b2lkIHNldEluUGFnZUNhY2hlKGJvb2wgZmxhZyk7CkluZGV4
OiBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZl
bnROYW1lcy5oCShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7IG5hbWVz
cGFjZSBFdmVudE5hbWVzCiAgICAgbWFjcm8oY2hhbmdlKSBcCiAgICAgbWFjcm8oY2hlY2tpbmcp
IFwKICAgICBtYWNybyhjbGljaykgXAorICAgIG1hY3JvKGNsb3NlKSBcCiAgICAgbWFjcm8oY29u
dGV4dG1lbnUpIFwKICAgICBtYWNybyhjb3B5KSBcCiAgICAgbWFjcm8oY3V0KSBcCkluZGV4OiBX
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuY3BwCShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsMTEgQEAgU1ZHRWxlbWVudEluc3RhbmNl
KiBFdmVudFRhcmdldDo6dG9TVkdFbAogfQogI2VuZGlmCiAKK01lc3NhZ2VQb3J0KiBFdmVudFRh
cmdldDo6dG9NZXNzYWdlUG9ydCgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRMaXN0ZW5lclR5cGVUb0RvY3VtZW50SWZOZWVkZWQoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBEb2N1bWVudDo6TGlz
dGVuZXJUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudDo6TGlzdGVuZXJUeXBlPigwKTsK
SW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMzYyOTIpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRh
cmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNz
IEV2ZW50VGFyZ2V0Tm9kZTsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydDsKICAgICBjbGFzcyBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7CiAgICAg
Y2xhc3MgWE1MSHR0cFJlcXVlc3Q7CkBAIC01Myw2ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1
YWwgTWVzc2FnZVBvcnQqIHRvTWVzc2FnZVBvcnQoKTsKICAgICAgICAgdmlydHVhbCBFdmVudFRh
cmdldE5vZGUqIHRvTm9kZSgpOwogICAgICAgICB2aXJ0dWFsIFhNTEh0dHBSZXF1ZXN0KiB0b1hN
TEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgIHZpcnR1YWwgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHRv
WE1MSHR0cFJlcXVlc3RVcGxvYWQoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VDaGFubmVsLmgiCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK01lc3NhZ2VDaGFubmVsOjpNZXNzYWdlQ2hhbm5lbChGcmFtZSog
YnJvd3NpbmdDb250ZXh0KQorICAgIDogbV9wb3J0MShNZXNzYWdlUG9ydDo6Y3JlYXRlKGJyb3dz
aW5nQ29udGV4dCkpCisgICAgLCBtX3BvcnQyKE1lc3NhZ2VQb3J0OjpjcmVhdGUoYnJvd3NpbmdD
b250ZXh0KSkKK3sKKyAgICBNZXNzYWdlUG9ydDo6ZW50YW5nbGUobV9wb3J0MS5nZXQoKSwgbV9w
b3J0Mi5nZXQoKSk7Cit9CisKK01lc3NhZ2VDaGFubmVsOjp+TWVzc2FnZUNoYW5uZWwoKQorewor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3Jl
L2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAg
ICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZUNoYW5uZWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9kb20vTWVzc2FnZUNoYW5uZWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICoKKyAqLworCisjaWZuZGVmIE1lc3NhZ2VDaGFubmVsX2gKKyNkZWZpbmUgTWVzc2FnZUNoYW5u
ZWxfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgTWVzc2FnZVBvcnQ7CisKKyAgICBjbGFzcyBN
ZXNzYWdlQ2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lc3NhZ2VDaGFubmVsPiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlQ2hhbm5lbD4gY3JlYXRl
KEZyYW1lKiBicm93c2luZ0NvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlQ2hh
bm5lbChicm93c2luZ0NvbnRleHQpKTsgfQorICAgICAgICB+TWVzc2FnZUNoYW5uZWwoKTsKKwor
ICAgICAgICBNZXNzYWdlUG9ydCogcG9ydDEoKSB7IHJldHVybiBtX3BvcnQxLmdldCgpOyB9Cisg
ICAgICAgIE1lc3NhZ2VQb3J0KiBwb3J0MigpIHsgcmV0dXJuIG1fcG9ydDIuZ2V0KCk7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIE1lc3NhZ2VDaGFubmVsKEZyYW1lKik7CisKKyAgICAgICAg
UmVmUHRyPE1lc3NhZ2VQb3J0PiBtX3BvcnQxOworICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+
IG1fcG9ydDI7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
TWVzc2FnZUNoYW5uZWxfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9kb20vTWVzc2Fn
ZUNoYW5uZWwuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vTWVzc2FnZUNoYW5uZWwuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vTWVz
c2FnZUNoYW5uZWwuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICov
CisKK21vZHVsZSBldmVudHMgeworCisgICAgaW50ZXJmYWNlIFtDdXN0b21NYXJrRnVuY3Rpb25d
IE1lc3NhZ2VDaGFubmVsIHsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVzc2FnZVBv
cnQgcG9ydDE7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBNZXNzYWdlUG9ydCBwb3J0MjsK
KworICAgIH07CisKK30KSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAkocmV2aXNpb24gMzYyOTIpCisr
KyBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiAr
MzksMTMgQEAgTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoKQogewogfQogCi1NZXNzYWdlRXZl
bnQ6Ok1lc3NhZ2VFdmVudChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElkLCBQYXNzUmVmUHRyPERPTVdpbmRvdz4gc291cmNl
KQorTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBT
dHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01X
aW5kb3c+IHNvdXJjZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQpCiAgICAg
OiBFdmVudChtZXNzYWdlRXZlbnQsIGZhbHNlLCB0cnVlKQogICAgICwgbV9kYXRhKGRhdGEpCiAg
ICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgLCBtX2xhc3RFdmVudElkKGxhc3RFdmVudElkKQog
ICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV9tZXNzYWdlUG9ydChtZXNzYWdlUG9ydCkK
IHsKIH0KIApAQCAtNTIsNyArNTMsNyBAQCBNZXNzYWdlRXZlbnQ6On5NZXNzYWdlRXZlbnQoKQog
ewogfQogCi12b2lkIE1lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQs
IERPTVdpbmRvdyogc291cmNlKQordm9pZCBNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxl
LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcm
IGxhc3RFdmVudElkLCBET01XaW5kb3cqIHNvdXJjZSwgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0
KQogewogICAgIGlmIChkaXNwYXRjaGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYzLDYgKzY0
LDcgQEAgdm9pZCBNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoY29ucwogICAgIG1fb3Jp
Z2luID0gb3JpZ2luOwogICAgIG1fbGFzdEV2ZW50SWQgPSBsYXN0RXZlbnRJZDsKICAgICBtX3Nv
dXJjZSA9IHNvdXJjZTsKKyAgICBtX21lc3NhZ2VQb3J0ID0gbWVzc2FnZVBvcnQ7CiB9CiAKIGJv
b2wgTWVzc2FnZUV2ZW50Ojppc01lc3NhZ2VFdmVudCgpIGNvbnN0IApJbmRleDogV2ViQ29yZS9k
b20vTWVzc2FnZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50
LmgJKHJldmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgTWVzc2FnZUV2ZW50X2gKIAogI2lu
Y2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00MCwyOSArNDEsMzEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VFdmVudCk7CiAgICAg
ICAgIH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0
RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSkKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBT
dHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01X
aW5kb3c+IHNvdXJjZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZUV2ZW50KGRhdGEs
IG9yaWdpbiwgbGFzdEV2ZW50SWQsIHNvdXJjZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNZXNzYWdlRXZlbnQoZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBt
ZXNzYWdlUG9ydCkpOwogICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgfk1lc3NhZ2VFdmVudCgp
OwogCi0gICAgICAgIHZvaWQgaW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYgZGF0YSwg
Y29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIERPTVdpbmRv
dyogc291cmNlKTsKKyAgICAgICAgdm9pZCBpbml0TWVzc2FnZUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU3RyaW5n
JiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwg
RE9NV2luZG93KiBzb3VyY2UsIE1lc3NhZ2VQb3J0Kik7CiAgICAgICAgIAogICAgICAgICBjb25z
dCBTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KICAgICAgICAgY29uc3Qg
U3RyaW5nJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogICAgICAgICBjb25z
dCBTdHJpbmcmIGxhc3RFdmVudElkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXZlbnRJZDsgfQog
ICAgICAgICBET01XaW5kb3cqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgp
OyB9CisgICAgICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWVzc2FnZVBvcnQuZ2V0KCk7IH0KICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc01l
c3NhZ2VFdmVudCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZTogICAgCiAgICAgICAgIE1lc3NhZ2VF
dmVudCgpOwotICAgICAgICBNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBT
dHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01X
aW5kb3c+IHNvdXJjZSk7CisgICAgICAgIE1lc3NhZ2VFdmVudChjb25zdCBTdHJpbmcmIGRhdGEs
IGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElkLCBQYXNzUmVm
UHRyPERPTVdpbmRvdz4gc291cmNlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBtZXNzYWdlUG9y
dCk7CiAKICAgICAgICAgU3RyaW5nIG1fZGF0YTsKICAgICAgICAgU3RyaW5nIG1fb3JpZ2luOwog
ICAgICAgICBTdHJpbmcgbV9sYXN0RXZlbnRJZDsKICAgICAgICAgUmVmUHRyPERPTVdpbmRvdz4g
bV9zb3VyY2U7CisgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbV9tZXNzYWdlUG9ydDsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdl
RXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5pZGwJKHJl
dmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMzQsOCArMzQsOSBAQCBtb2R1bGUgZXZlbnRzIHsKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBvcmlnaW47CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgbGFzdEV2ZW50SWQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01XaW5k
b3cgc291cmNlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVzc2FnZVBvcnQgbWVzc2Fn
ZVBvcnQ7CiAgICAgICAgIAotICAgICAgICB2b2lkIGluaXRNZXNzYWdlRXZlbnQoaW4gRE9NU3Ry
aW5nIHR5cGVBcmcsIGluIGJvb2xlYW4gY2FuQnViYmxlQXJnLCBpbiBib29sZWFuIGNhbmNlbGFi
bGVBcmcsIGluIERPTVN0cmluZyBkYXRhQXJnLCBpbiBET01TdHJpbmcgb3JpZ2luQXJnLCBpbiBE
T01TdHJpbmcgbGFzdEV2ZW50SWRBcmcsIGluIERPTVdpbmRvdyBzb3VyY2VBcmcpOworICAgICAg
ICB2b2lkIGluaXRNZXNzYWdlRXZlbnQoaW4gRE9NU3RyaW5nIHR5cGVBcmcsIGluIGJvb2xlYW4g
Y2FuQnViYmxlQXJnLCBpbiBib29sZWFuIGNhbmNlbGFibGVBcmcsIGluIERPTVN0cmluZyBkYXRh
QXJnLCBpbiBET01TdHJpbmcgb3JpZ2luQXJnLCBpbiBET01TdHJpbmcgbGFzdEV2ZW50SWRBcmcs
IGluIERPTVdpbmRvdyBzb3VyY2VBcmcsIGluIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0KTsKIAog
ICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorCisj
aW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENsb3NlTWVzc2FnZVBvcnRU
aW1lciA6IHB1YmxpYyBUaW1lckJhc2UgeworcHVibGljOgorICAgIENsb3NlTWVzc2FnZVBvcnRU
aW1lcihQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQorICAgICAgICA6IG1fcG9ydChwb3J0
KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9wb3J0LT5hY3RpdmUoKSk7CisKKyAgICAgICAgLy8gQ2xv
c2luZyBtYXkgZGVzdHJveSB0aGUgcG9ydCwgZGlzcGF0Y2ggYW55IHJlbWFpbmluZyBtZXNzYWdl
cyBub3cuCisgICAgICAgIGlmIChtX3BvcnQtPnF1ZXVlSXNPcGVuKCkpCisgICAgICAgICAgICBt
X3BvcnQtPmRpc3BhdGNoTWVzc2FnZXMoKTsKKworICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9
IEV2ZW50OjpjcmVhdGUoRXZlbnROYW1lczo6Y2xvc2VFdmVudCwgZmFsc2UsIHRydWUpOworICAg
ICAgICBpZiAobV9wb3J0LT5vbkNsb3NlTGlzdGVuZXIoKSkgeworICAgICAgICAgICAgZXZ0LT5z
ZXRUYXJnZXQobV9wb3J0LmdldCgpKTsKKyAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdl
dChtX3BvcnQuZ2V0KCkpOworICAgICAgICAgICAgbV9wb3J0LT5vbkNsb3NlTGlzdGVuZXIoKS0+
aGFuZGxlRXZlbnQoZXZ0LmdldCgpLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgbV9wb3J0LT5kaXNwYXRjaEV2ZW50KGV2dC5yZWxl
YXNlKCksIGVjLCBmYWxzZSk7CisKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCisgICAg
UmVmUHRyPE1lc3NhZ2VQb3J0PiBtX3BvcnQ7Cit9OworCitNZXNzYWdlUG9ydDo6TWVzc2FnZVBv
cnQoRnJhbWUqIGJyb3dzaW5nQ29udGV4dCkKKyAgICA6IG1fZW50YW5nbGVkUG9ydCgwKQorICAg
ICwgbV9xdWV1ZUlzT3BlbihmYWxzZSkKKyAgICAsIG1fb3duZXJDb250ZXh0KGJyb3dzaW5nQ29u
dGV4dCkKKyAgICAsIG1fY3JlYXRlZFdpdGhEb2N1bWVudChicm93c2luZ0NvbnRleHQtPmRvY3Vt
ZW50KCkpIC8vIEN1cnJlbnRseSwgRnJhbWUgaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGtpbmQgb2Yg
Y29udGV4dCwgYnV0IHdvcmtlciB0aHJlYWRzIHdvbid0IGNvbnRhaW4gZG9jdW1lbnRzLgorewor
ICAgIG1fb3duZXJDb250ZXh0LT5jcmVhdGVkTWVzc2FnZVBvcnQodGhpcyk7Cit9CisKK01lc3Nh
Z2VQb3J0Ojp+TWVzc2FnZVBvcnQoKQoreworICAgIGlmIChtX2VudGFuZ2xlZFBvcnQpCisgICAg
ICAgIHVuZW50YW5nbGUoKTsKKworICAgIGlmIChtX293bmVyQ29udGV4dCkKKyAgICAgICAgbV9v
d25lckNvbnRleHQtPmRlc3Ryb3llZE1lc3NhZ2VQb3J0KHRoaXMpOworfQorCitQYXNzUmVmUHRy
PE1lc3NhZ2VQb3J0PiBNZXNzYWdlUG9ydDo6Y2xvbmUoRnJhbWUqIG5ld093bmVyLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCkgeworICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQ
dHI8TWVzc2FnZVBvcnQ+IHJlbW90ZVBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7CisgICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBuZXdQb3J0ID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZShuZXdPd25lcik7CisK
KyAgICAvLyBNb3ZlIGFsbCB0aGUgZXZlbnRzIGluIHRoZSBwb3J0IG1lc3NhZ2UgcXVldWUgb2Yg
b3JpZ2luYWwgcG9ydCB0byB0aGUgcG9ydCBtZXNzYWdlIHF1ZXVlIG9mIG5ldyBwb3J0LCBpZiBh
bnksIGxlYXZpbmcgdGhlIG5ldyBwb3J0J3MgcG9ydCBtZXNzYWdlIHF1ZXVlIGluIGl0cyBpbml0
aWFsIGNsb3NlZCBzdGF0ZS4KKyAgICAvLyBJZiBldmVudHMgYXJlIHBvc3RlZCAoZS5nLiBmcm9t
IGEgd29ya2VyIHRocmVhZCkgd2hpbGUgdGhpcyBjb2RlIGlzIGV4ZWN1dGluZywgdGhlcmUgaXMg
bm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhleSBlbmQgdXAgaW4gdGhlIG9yaWdpbmFsIG9yIG5ldyBw
b3J0J3MgbWVzc2FnZSBxdWV1ZS4KKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50OworICAgIHdoaWxl
IChtX21lc3NhZ2VRdWV1ZS50cnlHZXRNZXNzYWdlKGV2ZW50KSkKKyAgICAgICAgbmV3UG9ydC0+
bV9tZXNzYWdlUXVldWUuYXBwZW5kKGV2ZW50KTsKKworICAgIGVudGFuZ2xlKHJlbW90ZVBvcnQu
Z2V0KCksIG5ld1BvcnQuZ2V0KCkpOyAvLyBUaGUgcG9ydCBvYmplY3Qgd2lsbCBiZSB1bmVudGFu
Z2xlZC4KKyAgICByZXR1cm4gbmV3UG9ydDsKK30KKwordm9pZCBNZXNzYWdlUG9ydDo6cG9zdE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBw
b3N0TWVzc2FnZShtZXNzYWdlLCAwLCBlYyk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIGRhdGFQb3J0LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCB8fCAhbV9vd25lckNv
bnRleHQgfHwgIW1fZW50YW5nbGVkUG9ydC0+bV9vd25lckNvbnRleHQpCisgICAgICAgIHJldHVy
bjsKKworICAgIFN0cmluZyBzb3VyY2VPcmlnaW4gPSBtX293bmVyQ29udGV4dC0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKKyAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+
IG5ld01lc3NhZ2VQb3J0OworICAgIGlmIChkYXRhUG9ydCkgeworICAgICAgICBpZiAoZGF0YVBv
cnQgPT0gdGhpcyB8fCBkYXRhUG9ydCA9PSBtX2VudGFuZ2xlZFBvcnQpIHsKKyAgICAgICAgICAg
IGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIG5ld01lc3NhZ2VQb3J0ID0gZGF0YVBvcnQtPmNsb25lKG1fZW50YW5nbGVkUG9y
dC0+bV9vd25lckNvbnRleHQsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fZW50YW5nbGVkUG9ydC0+bV9tZXNzYWdlUXVldWUuYXBwZW5k
KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJjZU9yaWdpbiwgIiIsIG1fb3duZXJD
b250ZXh0LT5kb21XaW5kb3coKSwgbmV3TWVzc2FnZVBvcnQuZ2V0KCkpKTsKKyAgICBpZiAobV9l
bnRhbmdsZWRQb3J0LT5tX3F1ZXVlSXNPcGVuKQorICAgICAgICBtX2VudGFuZ2xlZFBvcnQtPm1f
b3duZXJDb250ZXh0LT5wcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKTsKK30KKworUGFz
c1JlZlB0cjxNZXNzYWdlUG9ydD4gTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKEZyYW1l
KiBzY3JpcHRDb250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBwb3J0MSA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoc2NyaXB0Q29udGV4dCk7Cisg
ICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQgfHwgIW1fb3duZXJDb250ZXh0IHx8ICFtX2VudGFuZ2xl
ZFBvcnQtPm1fb3duZXJDb250ZXh0KQorICAgICAgICByZXR1cm4gcG9ydDE7CisgICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBwb3J0MiA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUobV9lbnRhbmdsZWRQb3J0
LT5tX293bmVyQ29udGV4dCk7CisKKyAgICBlbnRhbmdsZShwb3J0MS5nZXQoKSwgcG9ydDIuZ2V0
KCkpOworCisgICAgU3RyaW5nIHNvdXJjZU9yaWdpbiA9IHNjcmlwdENvbnRleHQtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7CisgICAgbV9lbnRhbmdsZWRQb3J0LT5t
X21lc3NhZ2VRdWV1ZS5hcHBlbmQoTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgc291cmNl
T3JpZ2luLCAiIiwgbV9vd25lckNvbnRleHQtPmRvbVdpbmRvdygpLCBwb3J0Mi5nZXQoKSkpOwor
ICAgIGlmIChtX2VudGFuZ2xlZFBvcnQtPm1fcXVldWVJc09wZW4pCisgICAgICAgIG1fZW50YW5n
bGVkUG9ydC0+bV9vd25lckNvbnRleHQtPnByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigp
OworICAgIHJldHVybiBwb3J0MTsKK30KKwordm9pZCBNZXNzYWdlUG9ydDo6c3RhcnQoKQorewor
ICAgIGlmIChtX3F1ZXVlSXNPcGVuIHx8ICFtX293bmVyQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9xdWV1ZUlzT3BlbiA9IHRydWU7CisgICAgbV9vd25lckNvbnRleHQtPnByb2Nl
c3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpOworfQorCit2b2lkIE1lc3NhZ2VQb3J0OjpjbG9z
ZSgpCit7CisgICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQpCisgICAgICAgIHJldHVybjsKKworICAg
IE1lc3NhZ2VQb3J0KiBvdGhlclBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7CisgICAgdW5lbnRhbmds
ZSgpOworCisgICAgcXVldWVDbG9zZUV2ZW50KCk7CisgICAgb3RoZXJQb3J0LT5xdWV1ZUNsb3Nl
RXZlbnQoKTsKK30KKwordm9pZCBNZXNzYWdlUG9ydDo6ZW50YW5nbGUoTWVzc2FnZVBvcnQqIHBv
cnQxLCBNZXNzYWdlUG9ydCogcG9ydDIpCit7CisgICAgaWYgKHBvcnQxLT5tX2VudGFuZ2xlZFBv
cnQpIHsKKyAgICAgICAgQVNTRVJUKHBvcnQxLT5tX2VudGFuZ2xlZFBvcnQgIT0gcG9ydDIpOwor
ICAgICAgICBwb3J0MS0+dW5lbnRhbmdsZSgpOworICAgIH0KKworICAgIGlmIChwb3J0Mi0+bV9l
bnRhbmdsZWRQb3J0KSB7CisgICAgICAgIEFTU0VSVChwb3J0Mi0+bV9lbnRhbmdsZWRQb3J0ICE9
IHBvcnQxKTsKKyAgICAgICAgcG9ydDItPnVuZW50YW5nbGUoKTsKKyAgICB9CisKKyAgICBwb3J0
MS0+bV9lbnRhbmdsZWRQb3J0ID0gcG9ydDI7CisgICAgcG9ydDItPm1fZW50YW5nbGVkUG9ydCA9
IHBvcnQxOworfQorCit2b2lkIE1lc3NhZ2VQb3J0Ojp1bmVudGFuZ2xlKCkKK3sKKyAgICBBU1NF
UlQodGhpcyA9PSBtX2VudGFuZ2xlZFBvcnQtPm1fZW50YW5nbGVkUG9ydCk7CisKKyAgICBtX2Vu
dGFuZ2xlZFBvcnQtPm1fZW50YW5nbGVkUG9ydCA9IDA7CisgICAgbV9lbnRhbmdsZWRQb3J0ID0g
MDsKK30KKwordm9pZCBNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcygpCit7CisgICAgQVNT
RVJUKHF1ZXVlSXNPcGVuKCkpOworCisgICAgUmVmUHRyPEV2ZW50PiBldnQ7CisgICAgd2hpbGUg
KG1fbWVzc2FnZVF1ZXVlLnRyeUdldE1lc3NhZ2UoZXZ0KSkgeworCisgICAgICAgIEFTU0VSVChl
dnQtPnR5cGUoKSA9PSBFdmVudE5hbWVzOjptZXNzYWdlRXZlbnQpOworCisgICAgICAgIGlmICht
X29uTWVzc2FnZUxpc3RlbmVyKSB7CisgICAgICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsK
KyAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgICAgIG1f
b25NZXNzYWdlTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwgZmFsc2UpOworICAgICAg
ICB9CisKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGRpc3BhdGNoRXZl
bnQoZXZ0LnJlbGVhc2UoKSwgZWMsIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAg
fQorfQorCit2b2lkIE1lc3NhZ2VQb3J0OjpxdWV1ZUNsb3NlRXZlbnQoKQoreworICAgIENsb3Nl
TWVzc2FnZVBvcnRUaW1lciogdGltZXIgPSBuZXcgQ2xvc2VNZXNzYWdlUG9ydFRpbWVyKHRoaXMp
OworICAgIHRpbWVyLT5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnQ6OmFk
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVy
c01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUuaW1w
bCgpKTsKKyAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7CisgICAgICAg
IExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyczsKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVu
dExpc3RlbmVyKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLmltcGwo
KSwgbGlzdGVuZXJzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlz
dGVuZXJzID0gaXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVy
YXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxp
c3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgICAgIGlmICgqbGlzdGVu
ZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwor
ICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUuaW1wbCgpLCBsaXN0ZW5lcnMp
OworICAgIH0gICAgCit9CisKK3ZvaWQgTWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVu
ZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUuaW1wbCgpKTsKKyAgICBpZiAo
aXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKKyAgICBmb3IgKExp
c3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVn
aW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsK
KyAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikgeworICAgICAgICAg
ICAgbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lckl0ZXIgLSBsaXN0ZW5lcnMuYmVnaW4oKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgTWVzc2FnZVBv
cnQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjLCBib29sIHRlbXBFdmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9F
UlI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBMaXN0ZW5lclZlY3Rv
ciBsaXN0ZW5lcnNDb3B5ID0gbV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKS5pbXBs
KCkpOworICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRl
ciA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVyc0NvcHku
ZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7
CisgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAgICBsaXN0ZW5l
ckl0ZXItPmdldCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL01lc3NhZ2VQ
b3J0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01l
c3NhZ2VQb3J0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIE1lc3Nh
Z2VQb3J0X2gKKyNkZWZpbmUgTWVzc2FnZVBvcnRfaAorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgQXRvbWljU3RyaW5nSW1wbDsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBF
dmVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBTdHJpbmc7CisKKyAgICBjbGFzcyBN
ZXNzYWdlUG9ydCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0PiwgcHVibGljIEV2ZW50
VGFyZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VQ
b3J0PiBjcmVhdGUoRnJhbWUqIGJyb3dzaW5nQ29udGV4dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IE1lc3NhZ2VQb3J0KGJyb3dzaW5nQ29udGV4dCkpOyB9CisgICAgICAgIH5NZXNzYWdlUG9ydCgp
OworCisgICAgICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IGNsb25lKEZyYW1lKiwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRh
bmdsZWRQb3J0OyB9CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBNZXNzYWdlUG9ydCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFz
c1JlZlB0cjxNZXNzYWdlUG9ydD4gc3RhcnRDb252ZXJzYXRpb24oRnJhbWUqLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpOworICAgICAgICB2b2lkIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgY2xvc2Uo
KTsKKworICAgICAgICBib29sIHF1ZXVlSXNPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZUlz
T3BlbjsgfQorCisgICAgICAgIE1lc3NhZ2VQb3J0KiBlbnRhbmdsZWRQb3J0KCkgeyByZXR1cm4g
bV9lbnRhbmdsZWRQb3J0OyB9CisgICAgICAgIHN0YXRpYyB2b2lkIGVudGFuZ2xlKE1lc3NhZ2VQ
b3J0KiwgTWVzc2FnZVBvcnQqKTsKKyAgICAgICAgdm9pZCB1bmVudGFuZ2xlKCk7CisKKyAgICAg
ICAgRnJhbWUqIG93bmVyQ29udGV4dCgpIHsgcmV0dXJuIG1fb3duZXJDb250ZXh0OyB9CisgICAg
ICAgIERvY3VtZW50KiBjcmVhdGVkV2l0aERvY3VtZW50KCkgeyByZXR1cm4gbV9jcmVhdGVkV2l0
aERvY3VtZW50OyB9CisgICAgICAgIHZvaWQgY29udGV4dERlc3Ryb3llZCgpIHsgbV9vd25lckNv
bnRleHQgPSAwOyB9CisgICAgICAgIHZpcnR1YWwgTWVzc2FnZVBvcnQqIHRvTWVzc2FnZVBvcnQo
KSB7IHJldHVybiB0aGlzOyB9CisKKyAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VzKCk7Cisg
ICAgICAgIHZvaWQgcXVldWVDbG9zZUV2ZW50KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFk
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCA9
IGZhbHNlKTsKKworICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
PiBMaXN0ZW5lclZlY3RvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgICAgIEV2ZW50TGlz
dGVuZXJzTWFwJiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0K
KworICAgICAgICB1c2luZyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0Pjo6cmVmOworICAgICAgICB1
c2luZyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0Pjo6ZGVyZWY7CisKKyAgICAgICAgdm9pZCBzZXRP
bk1lc3NhZ2VMaXN0ZW5lcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
IHsgbV9vbk1lc3NhZ2VMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICAgICAgRXZlbnRM
aXN0ZW5lciogb25NZXNzYWdlTGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBtX29uTWVzc2FnZUxp
c3RlbmVyLmdldCgpOyB9CisKKyAgICAgICAgdm9pZCBzZXRPbkNsb3NlTGlzdGVuZXIoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25DbG9zZUxpc3RlbmVyID0g
ZXZlbnRMaXN0ZW5lcjsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbkNsb3NlTGlzdGVuZXIo
KSBjb25zdCB7IHJldHVybiBtX29uQ2xvc2VMaXN0ZW5lci5nZXQoKTsgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgTWVzc2FnZVBvcnQoRnJhbWUqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2
ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisKKyAgICAgICAgTWVzc2FnZVBvcnQqIG1fZW50YW5n
bGVkUG9ydDsKKyAgICAgICAgTWVzc2FnZVF1ZXVlPFJlZlB0cjxFdmVudD4gPiBtX21lc3NhZ2VR
dWV1ZTsKKyAgICAgICAgYm9vbCBtX3F1ZXVlSXNPcGVuOworCisgICAgICAgIEZyYW1lKiBtX293
bmVyQ29udGV4dDsKKyAgICAgICAgRG9jdW1lbnQqIG1fY3JlYXRlZFdpdGhEb2N1bWVudDsgLy8g
V2lsbCBiZSAwIGlmIHRoZSBjb250ZXh0IGRvZXMgbm90IGNvbnRhaW4gYSBkb2N1bWVudCAoZS5n
LiBpZiBpdCdzIGEgd29ya2VyIHRocmVhZCkuCisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IG1fb25NZXNzYWdlTGlzdGVuZXI7CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBt
X29uQ2xvc2VMaXN0ZW5lcjsKKworICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlz
dGVuZXJzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1l
c3NhZ2VQb3J0X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2Vi
Q29yZS9kb20vTWVzc2FnZVBvcnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3Nh
Z2VQb3J0LmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCittb2R1bGUgZXZlbnRz
IHsKKworICAgIGludGVyZmFjZSBbQ3VzdG9tTWFya0Z1bmN0aW9uXSBNZXNzYWdlUG9ydCB7Cisv
LyBXZSBuZWVkIHRvIGhhdmUgc29tZXRoaW5nIGFzIGFuIE9iakMgYmluZGluZywgYmVjYXVzZSBN
ZXNzYWdlUG9ydCBpcyB1c2VkIGluIE1lc3NhZ2VFdmVudCwgd2hpY2ggYWxyZWFkeSBoYXMgb25l
LAorLy8gYnV0IHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgZXhwb3NlIHRoZSBBUEkgd2hpbGUg
aXQgaXMgaW4gZmx1eC4KKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGFjdGl2ZTsKKyAgICAgICAgdm9pZCBwb3N0TWVz
c2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNz
YWdlUG9ydCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3Vz
dG9tXSBNZXNzYWdlUG9ydCBzdGFydENvbnZlcnNhdGlvbihpbiBET01TdHJpbmcgbWVzc2FnZSk7
CisgICAgICAgIHZvaWQgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgICAg
IC8vIGV2ZW50IGhhbmRsZXIgYXR0cmlidXRlcworICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbV0g
RXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tXSBFdmVu
dExpc3RlbmVyIG9uY2xvc2U7CisKKyAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCisg
ICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVy
IGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJv
b2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0
ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAg
IFtDdXN0b21dIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisgICAgICAgICAg
ICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworI2VuZGlmCisgICAgfTsKKworfQpJbmRleDogV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAJKHJldmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCBTdG9yYWdlKiBET01XaW5kb3c6Omxv
Y2FsU3RvcmFnZSgpIGNvbnN0CiB9CiAjZW5kaWYKIAotdm9pZCBET01XaW5kb3c6OnBvc3RNZXNz
YWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERP
TVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgRE9NV2luZG93Ojpwb3N0
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCwg
Y29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTM2Myw2
ICszNjMsMTIgQEAgdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZwogICAg
ICAgICB9CiAgICAgfQogCisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBuZXdNZXNzYWdlUG9ydDsK
KyAgICBpZiAobWVzc2FnZVBvcnQpCisgICAgICAgIG5ld01lc3NhZ2VQb3J0ID0gbWVzc2FnZVBv
cnQtPmNsb25lKGZyYW1lKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKwog
ICAgIC8vIENhcHR1cmUgdGhlIHNvdXJjZSBvZiB0aGUgbWVzc2FnZS4gIFdlIG5lZWQgdG8gZG8g
dGhpcyBzeW5jaHJvbm91c2x5CiAgICAgLy8gaW4gb3JkZXIgdG8gY2FwdHVyZSB0aGUgc291cmNl
IG9mIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KICAgICBEb2N1bWVudCogc291cmNlRG9jdW1lbnQg
PSBzb3VyY2UtPmRvY3VtZW50KCk7CkBAIC0zNzEsNyArMzc3LDcgQEAgdm9pZCBET01XaW5kb3c6
OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZwogICAgIFN0cmluZyBzb3VyY2VPcmlnaW4gPSBzb3Vy
Y2VEb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKIAogICAgIC8vIFNjaGVk
dWxlIHRoZSBtZXNzYWdlLgotICAgIFBvc3RNZXNzYWdlVGltZXIqIHRpbWVyID0gbmV3IFBvc3RN
ZXNzYWdlVGltZXIodGhpcywgTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgc291cmNlT3Jp
Z2luLCAiIiwgc291cmNlKSwgdGFyZ2V0LmdldCgpKTsKKyAgICBQb3N0TWVzc2FnZVRpbWVyKiB0
aW1lciA9IG5ldyBQb3N0TWVzc2FnZVRpbWVyKHRoaXMsIE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1l
c3NhZ2UsIHNvdXJjZU9yaWdpbiwgIiIsIHNvdXJjZSwgbmV3TWVzc2FnZVBvcnQpLCB0YXJnZXQu
Z2V0KCkpOwogICAgIHRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
cGFnZS9ET01XaW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJ
KHJldmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFt
ZTsKICAgICBjbGFzcyBIaXN0b3J5OwogICAgIGNsYXNzIExvY2F0aW9uOworICAgIGNsYXNzIE1l
c3NhZ2VQb3J0OwogICAgIGNsYXNzIE5hdmlnYXRvcjsKICAgICBjbGFzcyBQb3N0TWVzc2FnZVRp
bWVyOwogICAgIGNsYXNzIFNjcmVlbjsKQEAgLTE3NSw3ICsxNzYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uQ2FjaGUoKSBj
b25zdDsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIE1lc3NhZ2VQb3J0KiwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRv
dyogc291cmNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VUaW1l
ckZpcmVkKFBvc3RNZXNzYWdlVGltZXIqKTsKIAogICAgICAgICB2b2lkIHNjcm9sbEJ5KGludCB4
LCBpbnQgeSkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMzYyOTIpCisrKyBX
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3
IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2Vh
YmxlXSBDb25zb2xlIGNvbnNvbGU7CiAKICAgICAgICAgLy8gY3Jvc3MtZG9jdW1lbnQgbWVzc2Fn
aW5nCi0gICAgICAgIFtEb05vdENoZWNrRG9tYWluU2VjdXJpdHksIEN1c3RvbV0gdm9pZCBwb3N0
TWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gRE9NU3RyaW5nIHRhcmdldE9yaWdpbikK
KyAgICAgICAgW0RvTm90Q2hlY2tEb21haW5TZWN1cml0eSwgQ3VzdG9tXSB2b2lkIHBvc3RNZXNz
YWdlKGluIERPTVN0cmluZyBtZXNzYWdlLCBpbiBbT3B0aW9uYWxdIE1lc3NhZ2VQb3J0IG1lc3Nh
Z2VQb3J0LCBpbiBET01TdHJpbmcgdGFyZ2V0T3JpZ2luKQogICAgICAgICAgICAgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CiAKICNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5j
cHAJKHJldmlzaW9uIDM2MjkyKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJt
YXJrdXAuaCIKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgorI2luY2x1ZGUgIk1lc3Nh
Z2VQb3J0LmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCkBAIC0xMDEsNiArMTAyLDI5IEBAIGRvdWJsZSBGcmFtZTo6c19j
dXJyZW50UGFpbnRUaW1lU3RhbXAgPSAKIHN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRl
ciBmcmFtZUNvdW50ZXIoIkZyYW1lIik7CiAjZW5kaWYKIAorY2xhc3MgTWVzc2FnZVBvcnRUaW1l
ciA6IHB1YmxpYyBUaW1lckJhc2UgeworcHVibGljOgorICAgIE1lc3NhZ2VQb3J0VGltZXIoUGFz
c1JlZlB0cjxGcmFtZT4gZnJhbWUpCisgICAgICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICB7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpCisgICAgeworICAgICAg
ICAvLyBEb24ndCBkaXNwYXRjaCBldmVudHMgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCBmdWxseSBh
Y3RpdmUuCisgICAgICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVu
dHMoKTsKKyAgICAgICAgbV9mcmFtZS0+ZC0+bV9maXJlZE1lc3NhZ2VQb3J0VGltZXIgPSBmYWxz
ZTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCisgICAgUmVmUHRyPEZyYW1lPiBtX2Zy
YW1lOworfTsKKworCiBzdGF0aWMgaW5saW5lIEZyYW1lKiBwYXJlbnRGcm9tT3duZXJFbGVtZW50
KEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50KQogewogICAgIGlmICghb3duZXJF
bGVtZW50KQpAQCAtMTg1Nyw3ICsxODgxLDMzIEBAIERvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRB
dFBvaW50KGNvbnN0IEkKICAgICAgICAgcmVzdWx0ID0gZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RS
ZXN1bHRBdFBvaW50KHB0LCBmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdC5pbm5lck5vZGUoKSA/
IHJlc3VsdC5pbm5lck5vZGUoKS0+ZG9jdW1lbnQoKSA6IDA7CiB9CisKK3ZvaWQgRnJhbWU6OnBy
b2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpCit7CisgICAgLy8gV2hlbiB0aGUgdGltZXIg
ZmlyZXMsIHRoZSBkb2N1bWVudCBtYXkgbm90IGJlIGFjdGl2ZSBhbHJlYWR5LCBpbiB3aGljaCBj
YXNlIHRoZSBwZW5kaW5nIG1lc3NhZ2VzIHJlbWFpbgorICAgIC8vIHVucHJvY2Vzc2VkLiBUaGUg
YXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgYSBkb2N1bWVudCBjYW4gbm90IG1vdmUgYmV0d2VlbiBm
cmFtZXMgLSBpZiB0aGV5IGNvdWxkLCB3YWtpbmcgdXAKKyAgICAvLyBhIHNpbmdsZSBmcmFtZSB3
b3VsZCBoYXZlIGJlZW4gaW5zdWZmaWNpZW50LgorICAgIGlmIChkLT5tX2ZpcmVkTWVzc2FnZVBv
cnRUaW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTWVzc2FnZVBvcnRUaW1lciogdGltZXIg
PSBuZXcgTWVzc2FnZVBvcnRUaW1lcih0aGlzKTsKKyAgICB0aW1lci0+c3RhcnRPbmVTaG90KDAp
OworCisgICAgZC0+bV9maXJlZE1lc3NhZ2VQb3J0VGltZXIgPSB0cnVlOworfQogICAgIAordm9p
ZCBGcmFtZTo6Y3JlYXRlZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0KiBwb3J0KQoreworICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSBwb3J0LT5jcmVhdGVkV2l0aERvY3VtZW50KCkpCisgICAg
ICAgIGRvY3VtZW50LT5jcmVhdGVkTWVzc2FnZVBvcnQocG9ydCk7Cit9CisKK3ZvaWQgRnJhbWU6
OmRlc3Ryb3llZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0KiBwb3J0KQoreworICAgIGlmIChEb2N1
bWVudCogZG9jdW1lbnQgPSBwb3J0LT5jcmVhdGVkV2l0aERvY3VtZW50KCkpCisgICAgICAgIGRv
Y3VtZW50LT5kZXN0cm95ZWRNZXNzYWdlUG9ydChwb3J0KTsKK30KKwogRnJhbWVQcml2YXRlOjpG
cmFtZVByaXZhdGUoUGFnZSogcGFnZSwgRnJhbWUqIHBhcmVudCwgRnJhbWUqIHRoaXNGcmFtZSwg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGcmFtZUxvYWRlckNsaWVudCogZnJhbWVMb2FkZXJDbGllbnQpCiAgICAgOiBtX3Bh
Z2UocGFnZSkKQEAgLTE4ODMsNiArMTkzMyw3IEBAIEZyYW1lUHJpdmF0ZTo6RnJhbWVQcml2YXRl
KFBhZ2UqIHBhZ2UsIEYKICAgICAsIG1fbmVlZHNSZWFwcGx5U3R5bGVzKGZhbHNlKQogICAgICwg
bV9pc0Rpc2Nvbm5lY3RlZChmYWxzZSkKICAgICAsIG1fZXhjbHVkZUZyb21UZXh0U2VhcmNoKGZh
bHNlKQorICAgICwgbV9maXJlZE1lc3NhZ2VQb3J0VGltZXIoZmFsc2UpCiAjaWYgRlJBTUVfTE9B
RFNfVVNFUl9TVFlMRVNIRUVUCiAgICAgLCBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyKDApCiAjZW5k
aWYKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9GcmFtZS5oCShyZXZpc2lvbiAzNjI5MikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIGNsYXNzIEZyYW1lUHJpdmF0ZTsKIGNsYXNzIEZy
YW1lVHJlZTsKIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKIGNsYXNzIEhUTUxUYWJsZUNl
bGxFbGVtZW50OworY2xhc3MgTWVzc2FnZVBvcnQ7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwog
Y2xhc3MgUmVndWxhckV4cHJlc3Npb247CiBjbGFzcyBSZW5kZXJQYXJ0OwpAQCAtMTAxLDEyICsx
MDIsMjAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RXhjbHVkZUZyb21UZXh0U2VhcmNoKGJvb2wp
OwogCiAgICAgZnJpZW5kIGNsYXNzIEZyYW1lUHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3MgTWVz
c2FnZVBvcnRUaW1lcjsKIAogcHJpdmF0ZToKICAgICBGcmFtZShQYWdlKiwgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiwgRnJhbWVMb2FkZXJDbGllbnQqKTsKIAogICAgIEZyYW1lUHJpdmF0ZSogZDsK
LSAgICAKKworLy8gPT09IFRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgQnJvd3NpbmdDb250
ZXh0IGludGVyZmFjZSwgd2l0aCBpbXBsZW1lbnRhdGlvbnMgaW4gRnJhbWUgYW5kIGluIFdvcmtl
clRocmVhZC4KK3B1YmxpYzoKKyAgICB2b2lkIHByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29v
bigpOworCisgICAgdm9pZCBjcmVhdGVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqKTsKKyAgICB2
b2lkIGRlc3Ryb3llZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0Kik7CisKIC8vID09PSB1bmRlY2lk
ZWQsIHdvdWxkIGxpa2UgdG8gY29uc2lkZXIgbW92aW5nIHRvIGFub3RoZXIgY2xhc3MKIAogcHVi
bGljOgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaAkocmV2aXNpb24gMzYyOTIpCisrKyBXZWJDb3JlL3Bh
Z2UvRnJhbWVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faXNEaXNjb25uZWN0ZWQ7CiAgICAgICAgIGJv
b2wgbV9leGNsdWRlRnJvbVRleHRTZWFyY2g7CiAKKyAgICAgICAgYm9vbCBtX2ZpcmVkTWVzc2Fn
ZVBvcnRUaW1lcjsKKwogI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZTEVTSEVFVAogICAgICAgICBV
c2VyU3R5bGVTaGVldExvYWRlciogbV91c2VyU3R5bGVTaGVldExvYWRlcjsKICNlbmRpZgpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMzY1MDMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOC0wOS0xNiAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc5Cisg
ICAgICAgIEltcGxlbWVudCBIVE1MNSBjaGFubmVsIG1lc3NhZ2luZworCisgICAgICAgICogZmFz
dC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1kZWxldGVkLWZyYW1lLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1kZWxldGVkLWZyYW1lLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291cmNlcy9tZXNzYWdlLXBvcnQtaWZyYW1lLmh0
bWw6IEFkZGVkLgorCiAyMDA4LTA5LTE1ICBSb2IgQnVpcyAgPGJ1aXNAa2RlLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBFcmljLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVz
c2FnZS1jaGFubmVsLWdjLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUZXN0IHNvbWUgY2FzZXMgb2YgTWVzc2Fn
ZVBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uLgorCitTaG91bGQgYmUgJ2Jhcic6IGJhcgorb25tZXNz
YWdlCittZXNzYWdlIGxpc3RlbmVyCitvbmNsb3NlCitjbG9zZSBsaXN0ZW5lcgorCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2Mt
ZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxh
aW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDYgQEAKKzxib2R5PgorPHA+VGVzdCBzb21lIGNhc2VzIG9mIE1lc3Nh
Z2VQb3J0IGdhcmJhZ2UgY29sbGVjdGlvbi48L3A+Cis8cHJlIGlkPWxvZz48L3ByZT4KKzxzY3Jp
cHQ+CitmdW5jdGlvbiBnYygpCit7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAg
ICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgaSsrKSB7IC8vID4gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIChGRiByZXF1
aXJlcyBhYm91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBjb2xsZWN0KQorICAgICAgICB2YXIg
cyA9IG5ldyBTdHJpbmcoImFiYyIpOworICAgIH0KK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2Up
Cit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVySFRNTCArPSBtZXNz
YWdlICsgIjxicj4iOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNo
YW5uZWw7CitjaGFubmVsLnBvcnQxLmZvbyA9ICJiYXIiOworCitnYygpOworbG9nKCJTaG91bGQg
YmUgJ2Jhcic6ICIgKyBjaGFubmVsLnBvcnQxLmZvbyk7CisKK2NoYW5uZWwucG9ydDEub25tZXNz
YWdlID0gZnVuY3Rpb24oKSB7IGxvZygib25tZXNzYWdlIik7IH0KK2NoYW5uZWwucG9ydDEub25j
bG9zZSA9IGZ1bmN0aW9uKCkgeyBsb2coIm9uY2xvc2UiKTsgc2V0VGltZW91dChmdW5jdGlvbigp
IHsgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpIH0sIDApIH0KK2NoYW5uZWwucG9ydDEuYWRkRXZlbnRMaXN0ZW5lcigiY2xv
c2UiLCBmdW5jdGlvbigpIHsgbG9nKCJjbG9zZSBsaXN0ZW5lciIpOyB9LCBmYWxzZSk7CitjaGFu
bmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbigpIHsgbG9nKCJt
ZXNzYWdlIGxpc3RlbmVyIik7IH0sIGZhbHNlKTsKKworZ2MoKTsKK2NoYW5uZWwucG9ydDEuc3Rh
cnQoKTsKK2NoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoIm1zZyIpOworCitnYygpOworY2hhbm5l
bC5wb3J0MS5jbG9zZSgpOworY2hhbm5lbC5wb3J0Mi5jbG9zZSgpOworCitnYygpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9tZXNzYWdlLWNoYW5uZWwtZ2MuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUK
ICAgKyB0ZXh0L2h0bWwKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBv
cnQtZGVsZXRlZC1mcmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWRlbGV0ZWQtZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWRlbGV0ZWQt
ZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1Rlc3QgdGhh
dCBkZXN0cm95aW5nIGEgZnJhbWUgZG9lc24ndCBjYXVzZSBhIGNyYXNoIHdoZW4gcG9zdGluZyBh
IG1lc3NhZ2UgdG8gYSBNZXNzYWdlUG9ydCBpdCBvd25lZC4KKworRGlkbid0IGNyYXNoOiBTVUND
RVNTCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3Nh
Z2UtcG9ydC1kZWxldGVkLWZyYW1lLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpt
aW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUK
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZGVsZXRlZC1mcmFt
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9y
dC1kZWxldGVkLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tZXNzYWdlLXBvcnQtZGVsZXRlZC1mcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDcxIEBACis8Ym9keT4KKzxwPlRlc3QgdGhhdCBkZXN0cm95aW5nIGEgZnJhbWUgZG9lc24n
dCBjYXVzZSBhIGNyYXNoIHdoZW4gcG9zdGluZyBhIG1lc3NhZ2UgdG8gYSBNZXNzYWdlUG9ydCBp
dCBvd25lZC48L3A+Cis8cHJlIGlkPWxvZz48L3ByZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBnYygp
Cit7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBHQ0NvbnRy
b2xsZXIuY29sbGVjdCgpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7
IC8vID4gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIChGRiByZXF1aXJlcyBhYm91dCA5SyBhbGxv
Y2F0aW9ucyBiZWZvcmUgYSBjb2xsZWN0KQorICAgICAgICB2YXIgcyA9IG5ldyBTdHJpbmcoImFi
YyIpOworICAgIH0KK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOworfQor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKK30KKwordmFyIG1haW5Qb3J0OwordmFyIGZyYW1lRG9jOworCitmdW5jdGlvbiB0ZXN0
KCkKK3sKKyAgICBmcmFtZURvYyA9IHdpbmRvdy5mcmFtZXNbMF0uZG9jdW1lbnQ7CisgICAgdmFy
IGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CisgICAgd2luZG93LmZyYW1lc1swXS5wb3N0
TWVzc2FnZSgibXNnIiwgY2hhbm5lbC5wb3J0MiwgIioiKTsKKyAgICBtYWluUG9ydCA9IGNoYW5u
ZWwucG9ydDE7CisgICAgbWFpblBvcnQuc3RhcnQoKTsKKworICAgIG1haW5Qb3J0LnBvc3RNZXNz
YWdlKCJwaW5nIik7CisgICAgbWFpblBvcnQub25tZXNzYWdlID0gdGVzdDI7Cit9CisKK2Z1bmN0
aW9uIHRlc3QyKCkKK3sKKyAgICB2YXIgZnJhbWVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoImlmcmFtZSIpWzBdOworICAgIGZyYW1lRWxlbWVudC5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKGZyYW1lRWxlbWVudCk7CisgICAgZnJhbWVFbGVtZW50ID0gbnVsbDsKKworICAg
IGdjKCk7CisgICAgc2V0VGltZW91dCh0ZXN0MywgMTApOworfQorCitmdW5jdGlvbiB0ZXN0Mygp
Cit7CisgICAgZ2MoKTsKKyAgICBtYWluUG9ydC5wb3N0TWVzc2FnZSgicGluZyIpOworICAgIG1h
aW5Qb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBpZiAoZXZ0LmRhdGEg
PT0gInBvbmciKQorICAgICAgICAgICAgbG9nKCJVbmV4cGVjdGVkIHJlc3BvbnNlOiBGQUlMIik7
CisgICAgfTsKKyAgICBzZXRUaW1lb3V0KHRlc3Q0LCAxMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q0
KCkKK3sKKyAgICBsb2coIkRpZG4ndCBjcmFzaDogU1VDQ0VTUyIpOworCisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvbWVzc2Fn
ZS1wb3J0LWlmcmFtZS5odG1sIiBvbmxvYWQ9InRlc3QoKSI+PC9pZnJhbWU+Cis8L2JvZHk+CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQt
ZGVsZXRlZC1mcmFtZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRl
eHQvaHRtbAoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1w
b3J0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L21lc3NhZ2UtcG9ydC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAor
VGVzdCBjcm9zcy1mcmFtZSBNZXNzYWdlUG9ydCBjb21tdW5pY2F0aW9uLgorCitTaW1wbGUgZXhj
aGFuZ2U6IFNVQ0NFU1MKK1Bvc3RlZCBwb3J0OiBTVUNDRVNTCitDb252ZXJzYXRpb246IFNVQ0NF
U1MKK0EgcG9ydCBpcyBhY3RpdmU6IFNVQ0NFU1MKK0EgY2xvc2VkIHBvcnQgaXMgaW5hY3RpdmU6
IFNVQ0NFU1MKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bWVzc2FnZS1wb3J0LWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUK
ICAgKyB0ZXh0L3BsYWluCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDY4IEBACis8Ym9keT4KKzxwPlRlc3QgY3Jvc3MtZnJhbWUgTWVzc2FnZVBvcnQg
Y29tbXVuaWNhdGlvbi48L3A+Cis8cHJlIGlkPWxvZz48L3ByZT4KKzxzY3JpcHQ+CitmdW5jdGlv
biBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuaW5u
ZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbWFpblBvcnQ7
CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFu
bmVsOworICAgIHdpbmRvdy5mcmFtZXNbMF0ucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwucG9y
dDIsICIqIik7CisgICAgbWFpblBvcnQgPSBjaGFubmVsLnBvcnQxOworICAgIG1haW5Qb3J0LnBv
c3RNZXNzYWdlKCJwaW5nIik7CisgICAgbWFpblBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0
KSB7CisgICAgICAgIGlmIChldnQuZGF0YSA9PSAicG9uZyIpCisgICAgICAgICAgICBsb2coIlNp
bXBsZSBleGNoYW5nZTogU1VDQ0VTUyIpOworICAgIH07CisgICAgbWFpblBvcnQuc3RhcnQoKTsK
KyAgICBzZXRUaW1lb3V0KHRlc3QyLCA1MCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QyKCkKK3sKKyAg
ICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICBtYWluUG9ydC5wb3N0TWVz
c2FnZSgibmV3UG9ydCIsIGNoYW5uZWwucG9ydDIpOworICAgIGNoYW5uZWwucG9ydDEub25tZXNz
YWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGlmIChldnQuZGF0YSA9PSAieW8iKQorICAg
ICAgICAgICAgbG9nKCJQb3N0ZWQgcG9ydDogU1VDQ0VTUyIpOworICAgIH07CisgICAgY2hhbm5l
bC5wb3J0MS5zdGFydCgpOworICAgIHNldFRpbWVvdXQodGVzdDMsIDUwKTsKK30KKworZnVuY3Rp
b24gdGVzdDMoKQoreworICAgIHZhciBwb3J0ID0gbWFpblBvcnQuc3RhcnRDb252ZXJzYXRpb24o
Im5ld0NvbnZlcnNhdGlvbiIpOworICAgIHBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7
CisgICAgICAgIGlmIChldnQuZGF0YSA9PSAiaGV5IikKKyAgICAgICAgICAgIGxvZygiQ29udmVy
c2F0aW9uOiBTVUNDRVNTIik7CisgICAgfTsKKyAgICBwb3J0LnN0YXJ0KCk7CisgICAgc2V0VGlt
ZW91dCh0ZXN0NCwgNTApOworfQorCitmdW5jdGlvbiB0ZXN0NCgpCit7CisgICAgbG9nKCJBIHBv
cnQgaXMgYWN0aXZlOiAiICsgKG1haW5Qb3J0LmFjdGl2ZSA/ICJTVUNDRVNTIiA6ICJGQUlMIikp
OworCisgICAgbWFpblBvcnQuY2xvc2UoKTsKKworICAgIGxvZygiQSBjbG9zZWQgcG9ydCBpcyBp
bmFjdGl2ZTogIiArIChtYWluUG9ydC5hY3RpdmUgPyAiRkFJTCIgOiAiU1VDQ0VTUyIpKTsKKwor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIHNyYz0icmVz
b3VyY2VzL21lc3NhZ2UtcG9ydC1pZnJhbWUuaHRtbCIgb25sb2FkPSJ0ZXN0KCkiPjwvaWZyYW1l
PgorPC9ib2R5PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bWVzc2FnZS1wb3J0Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4
dC9odG1sCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL21lc3NhZ2Ut
cG9ydC1pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9y
ZXNvdXJjZXMvbWVzc2FnZS1wb3J0LWlmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL21lc3NhZ2UtcG9ydC1pZnJhbWUuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPHNjcmlwdD4KK3ZhciBwb3J0OworZnVuY3Rpb24g
b25NZXNzYWdlKGV2dCkgeworICAgIGlmIChldnQuZGF0YSA9PSAicGluZyIpCisgICAgICAgIHBv
cnQucG9zdE1lc3NhZ2UoInBvbmciKTsKKyAgICBlbHNlIGlmIChldnQuZGF0YSA9PSAibmV3UG9y
dCIpCisgICAgICAgIGV2dC5tZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgieW8iKTsKKyAgICBlbHNl
IGlmIChldnQuZGF0YSA9PSAibmV3Q29udmVyc2F0aW9uIikKKyAgICAgICAgZXZ0Lm1lc3NhZ2VQ
b3J0LnBvc3RNZXNzYWdlKCJoZXkiKTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1l
c3NhZ2UiLCBmdW5jdGlvbihldnQpIHsKKyAgICBwb3J0ID0gZXZ0Lm1lc3NhZ2VQb3J0OworICAg
IHBvcnQub25tZXNzYWdlID0gb25NZXNzYWdlOworICAgIHBvcnQuc3RhcnQoKTsKK30sIGZhbHNl
KTsKKzwvc2NyaXB0PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvcmVzb3VyY2VzL21lc3NhZ2UtcG9ydC1pZnJhbWUuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23654</attachid>
            <date>2008-09-22 10:05:33 -0700</date>
            <delta_ts>2008-09-24 14:05:15 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>MessageChannel.txt</filename>
            <type>text/plain</type>
            <size>102509</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjc1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA2IEBACisyMDA4LTA5LTE2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NzkKKyAgICAgICAg
SW1wbGVtZW50IEhUTUw1IGNoYW5uZWwgbWVzc2FnaW5nCisKKyAgICAgICAgVGVzdHM6IGZhc3Qv
ZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50
cy9tZXNzYWdlLXBvcnQuaHRtbAorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54
Y2NvbmZpZzoKKyAgICAgICAgUmVtb3ZlZCB1bnVzZWQgIEVOQUJMRV9DUk9TU19ET0NVTUVOVF9N
RVNTQUdJTkcgbWFjcm8uCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICBBZGRlZCBNZXNzYWdlQ2hhbm5lbCBhbmQgTWVzc2FnZVBvcnQuCisKKyAgICAgICAgKiBXZWJD
b3JlLnBybzogTWFkZSBNZXNzYWdlRXZlbnQgY29tcGlsYXRpb24gdW5jb25kaXRpb25hbCwgYXMg
aXQgY291bGQgbm90IHBvc3NpYmx5IGJlCisgICAgICAgIHR1cm1lZCBvZmYgYW55d2F5LiBBZGRl
ZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IEFkZGVkIG5ldyBmaWxlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6IChXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICBBZGRlZCBz
dXBvcnQgZm9yIHdpbmRvdy5NZXNzYWdlQ2hhbm5lbCBjb25zdHJ1Y3Rvci4KKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDogKFdlYkNvcmU6OkpTRE9NV2luZG93
Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NV2luZG93Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgICogcGFnZS9ET01XaW5k
b3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgIEFkZGVkIHN1cHBv
cnQgZm9yIHRocmVlLWFyZ3VtZW50IHBvc3RNZXNzYWdlICh0aGF0IHBvc3RzIGEgTWVzc2FnZVBv
cnQpLgorCisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50VGFyZ2V0Ojp0b01lc3NhZ2VQb3J0KToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHA6IChXZWJDb3Jl
Ojp0b0pTKTogQWRkZWQgTWVzc2FnZVBvcnQgYXMgeWV0IGFub3RoZXIKKyAgICAgICAgRXZlbnRU
YXJnZXQgdmFyaWFudC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5jcHA6IEFkZGVkIGEgY3VzdG9tIGNvbnN0cnVjdG9yLCBzbyB0aGF0IGl0IGNvdWxk
CisgICAgICAgIHRha2UgYSBicm93c2luZyBjb250ZXh0IChkb2N1bWVudCkgcGFyYW1ldGVyLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlQ2hhbm5lbDo6bWFyayk6IEpTTWVzc2FnZUNo
YW5uZWwgdXNlcyBhIGN1c3RvbSBtYXJrIGZ1bmN0aW9uIHRvIG1hcmsKKyAgICAgICAgcG9ydDEg
YW5kIHBvcnQyIHRoYXQgaXQgb3ducy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2Fn
ZVBvcnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6
OnN0YXJ0Q29udmVyc2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OmFk
ZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0OjpkaXNwYXRj
aEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnNldE9ubWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0Ojpvbm1lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6c2V0T25jbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U01lc3NhZ2VQb3J0OjpvbmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6
Om1hcmspOgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5jcHA6IEFkZGVkLgorICAgICAgICAq
IGRvbS9NZXNzYWdlUG9ydC5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuaWRs
OiBBZGRlZC4KKyAgICAgICAgQWRkZWQgYSBNZXNzYWdlUG9ydCBpbXBsZW1lbnRhdGlvbi4gQ3Vy
cmVudGx5LCBpdCBpcyBub3QgdGhyZWFkLXNhZmUgYXQgYWxsLCBhbmQgb25seSB3b3JrcworICAg
ICAgICB3aXRoIERvY3VtZW50cyBhcyBjb250ZXh0cywgYnV0IGluIHRoZSBmdXR1cmUsIGl0IHdp
bGwgYmUgdXNlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggd29ya2VyCisgICAgICAgIHRocmVhZHMu
CisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmg6IEluY2x1ZGUgIkRPTU1l
c3NhZ2VQb3J0SW50ZXJuYWwuaCIuIFRoZSBuZXcgQVBJcyBkbyBub3QKKyAgICAgICAgcmVhbGx5
IGhhdmUgT2JqLUMgYmluZGluZ3MsIGFzIHRoZXkgYXJlIGZhciBmcm9tIGJlaW5nIGZpbmFsLCBi
dXQgYSBNZXNzYWdlUG9ydCBzdHViIGlzCisgICAgICAgIG5lZWRlZCBmb3IgTWVzc2FnZUV2ZW50
LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IEluY2x1
ZGUgUGxhdGZvcm1TdHJpbmcuaCBmb3IgTWVzc2FnZVBvcnQgaGFwcGluZXNzLgorCisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0VGltZXI6
Ok1lc3NhZ2VQb3J0VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRUaW1lcjo6
ZmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnByb2Nlc3NNZXNzYWdlUG9ydE1l
c3NhZ2VzU29vbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaXNwYXRjaE1lc3NhZ2VQb3J0RXZlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVkTWVzc2FnZVBvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmRlc3Ryb3llZE1lc3NhZ2VQb3J0KToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuaDoKKyAgICAgICAgRG9jdW1lbnQga2VlcHMgdHJhY2sgb2YgYWxsIE1lc3NhZ2VQ
b3J0IG9iamVjdHMgdGhhdCB3ZXJlIGNyZWF0ZWQgd2hlbiBpdCB3YXMgZnVsbHkgYWN0aXZlCisg
ICAgICAgIGluIGl0cyBjb250ZXh0LgorCisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDogQWRk
ZWQgY2xvc2VFdmVudC4KKworICAgICAgICAqIGRvbS9NZXNzYWdlQ2hhbm5lbC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUNoYW5uZWw6Ok1lc3NhZ2VDaGFubmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VDaGFubmVsOjp+TWVzc2FnZUNoYW5uZWwpOgorICAgICAg
ICAqIGRvbS9NZXNzYWdlQ2hhbm5lbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3Nh
Z2VDaGFubmVsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUNoYW5uZWw6OnBv
cnQxKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VDaGFubmVsOjpwb3J0Mik6CisgICAgICAg
ICogZG9tL01lc3NhZ2VDaGFubmVsLmlkbDogQWRkZWQuCisgICAgICAgIEFkZGRlZCBKU01lc3Nh
Z2VDaGFubmVsIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQpOgorICAgICAgICAq
IGRvbS9NZXNzYWdlRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6bWVzc2FnZVBvcnQpOgorICAg
ICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaWRsOgorICAgICAgICBNZXNzYWdlRXZlbnQgaGFzIGEg
TWVzc2FnZVBvcnQgbWVtYmVyIG5vdywgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBwYXNzIHBvcnRz
IGFjcm9zcworICAgICAgICBkb2N1bWVudHMuCisKIDIwMDgtMDktMjEgIERhdmlkIEh5YXR0ICA8
aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBGcmFtZVZpZXcncyByZXBhaW50UmVj
dGFuZ2xlIG1ldGhvZCB0byByZXBhaW50Q29udGVudFJlY3RhbmdsZS4gIE1ha2UKSW5kZXg6IFdl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UJKHJldmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9EZXJpdmVkU291cmNlcy5t
YWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDkgQEAgRE9NX0NMQVNTRVMgPSBcCiAg
ICAgTG9jYXRpb24gXAogICAgIE1lZGlhRXJyb3IgXAogICAgIE1lZGlhTGlzdCBcCisgICAgTWVz
c2FnZUNoYW5uZWwgXAogICAgIE1lc3NhZ2VFdmVudCBcCisgICAgTWVzc2FnZVBvcnQgXAogICAg
IE1pbWVUeXBlIFwKICAgICBNaW1lVHlwZUFycmF5IFwKICAgICBNb3VzZUV2ZW50IFwKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwko
cmV2aXNpb24gMzY3NTgpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw3ICs1OCw2IEBAIHdpbjMyLWcrKyB7CiB9CiAKICMgT3B0aW9uYWwgY29tcG9uZW50cyAo
bG9vayBmb3IgZGVmcyBpbiBjb25maWcuaCBhbmQgaW5jbHVkZWQgZmlsZXMhKQotIWNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9DUk9TU19ET0NVTUVOVF9NRVNTQUdJTkc9Lik6IERFRklORVMgKz0g
RU5BQkxFX0NST1NTX0RPQ1VNRU5UX01FU1NBR0lORz0xCiAhY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX0RBU0hCT0FSRF9TVVBQT1JUPS4pOiBERUZJTkVTICs9IEVOQUJMRV9EQVNIQk9BUkRfU1VQ
UE9SVD0wCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBVEFCQVNFPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9EQVRBQkFTRT0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0lDT05EQVRBQkFT
RT0uKTogREVGSU5FUyArPSBFTkFCTEVfSUNPTkRBVEFCQVNFPTEKQEAgLTI0OSw2ICsyNDgsNyBA
QCBJRExfQklORElOR1MgKz0gXAogIyAgICBkb20vRXZlbnRUYXJnZXQuaWRsIFwKICAgICBkb20v
S2V5Ym9hcmRFdmVudC5pZGwgXAogICAgIGRvbS9Nb3VzZUV2ZW50LmlkbCBcCisgICAgZG9tL01l
c3NhZ2VFdmVudC5pZGwgXAogICAgIGRvbS9NdXRhdGlvbkV2ZW50LmlkbCBcCiAgICAgZG9tL05h
bWVkTm9kZU1hcC5pZGwgXAogICAgIGRvbS9Ob2RlLmlkbCBcCkBAIC01MjUsNiArNTI1LDcgQEAg
U09VUkNFUyArPSBcCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGUuY3BwIFwKICAgICBkb20vS2V5Ym9h
cmRFdmVudC5jcHAgXAogICAgIGRvbS9NYXBwZWRBdHRyaWJ1dGUuY3BwIFwKKyAgICBkb20vTWVz
c2FnZUV2ZW50LmNwcCBcCiAgICAgZG9tL01vdXNlRXZlbnQuY3BwIFwKICAgICBkb20vTW91c2VS
ZWxhdGVkRXZlbnQuY3BwIFwKICAgICBkb20vTXV0YXRpb25FdmVudC5jcHAgXApAQCAtMTEyMiwx
NiArMTEyMyw2IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU4KIAog
fQogCi1jb250YWlucyhERUZJTkVTLCBFTkFCTEVfQ1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HPTEp
IHsKLSAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfQ1JPU1NfRE9DVU1F
TlRfTUVTU0FHSU5HPTEKLQotICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBkb20vTWVzc2FnZUV2
ZW50LmNwcAotCi0gICAgSURMX0JJTkRJTkdTICs9IFwKLSAgICAgICAgZG9tL01lc3NhZ2VFdmVu
dC5pZGwKLX0KLQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPTAp
IHsKICAgICBEQVNIQk9BUkRTVVBQT1JUQ1NTUFJPUEVSVElFUyAtPSAkJFBXRC9jc3MvRGFzaGJv
YXJkU3VwcG9ydENTU1Byb3BlcnR5TmFtZXMuaW4KIH0KSW5kZXg6IFdlYkNvcmUvQ29uZmlndXJh
dGlvbnMvV2ViQ29yZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NvbmZpZ3VyYXRp
b25zL1dlYkNvcmUueGNjb25maWcJKHJldmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9Db25maWd1
cmF0aW9ucy9XZWJDb3JlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBA
IFBST0RVQ1RfTkFNRSA9IFdlYkNvcmU7CiBPVEhFUl9MREZMQUdTID0gLWwkKFNRTElURTNfTElC
UkFSWSkgLWxvYmpjIC1zdWJfbGlicmFyeSBsaWJvYmpjIC11bWJyZWxsYSBXZWJLaXQ7CiAKIC8v
IFRoaXMgbmVlZHMgdG8gYmUga2VwdCBzb3J0ZWQsIGFuZCBpbiBzeW5jIHdpdGggRkVBVFVSRV9E
RUZJTkVTIGluIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnLCBXZWJLaXQueGNjb25maWcgYW5kIHRo
ZSBkZWZhdWx0IHNldHRpbmdzIG9mIGJ1aWxkLXdlYmtpdC4KLUZFQVRVUkVfREVGSU5FUyA9IEVO
QUJMRV9DUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcgRU5BQkxFX0RBVEFCQVNFIEVOQUJMRV9ET01f
U1RPUkFHRSBFTkFCTEVfSUNPTkRBVEFCQVNFIEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMgRU5BQkxFX1NWRyBFTkFCTEVfU1ZHX0FOSU1BVElPTiBFTkFCTEVfU1ZHX0FTX0lNQUdFIEVO
QUJMRV9TVkdfRk9OVFMgRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCBFTkFCTEVfU1ZHX1VTRSBF
TkFCTEVfVklERU8gRU5BQkxFX1hQQVRIIEVOQUJMRV9YU0xUOworRkVBVFVSRV9ERUZJTkVTID0g
RU5BQkxFX0RBVEFCQVNFIEVOQUJMRV9ET01fU1RPUkFHRSBFTkFCTEVfSUNPTkRBVEFCQVNFIEVO
QUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMgRU5BQkxFX1NWRyBFTkFCTEVfU1ZHX0FOSU1B
VElPTiBFTkFCTEVfU1ZHX0FTX0lNQUdFIEVOQUJMRV9TVkdfRk9OVFMgRU5BQkxFX1NWR19GT1JF
SUdOX09CSkVDVCBFTkFCTEVfU1ZHX1VTRSBFTkFCTEVfVklERU8gRU5BQkxFX1hQQVRIIEVOQUJM
RV9YU0xUOwogCiBTUUxJVEUzX0xJQlJBUlkgPSAkKFNRTElURTNfTElCUkFSWV8kKE1BQ19PU19Y
X1ZFUlNJT05fTUFKT1IpKTsKIFNRTElURTNfTElCUkFSWV8gPSBXZWJDb3JlU1FMaXRlMzsKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAz
Njc1OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTA4LDYgKzQxMDgsMTAgQEAKIAkJREQ3NjNCQjIwOTkyQzJDOTAwNzQw
QjhFIC8qIGxpYnhtbDIuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBERDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAq
LzsgfTsKIAkJREQ3Q0RGMjUwQTIzQ0Y5ODAwMDY5OTI4IC8qIENTU1Vua25vd25SdWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNDRTBBMTk4
OUNBMDA3RkI4QzUgLyogQ1NTVW5rbm93blJ1bGUuaCAqLzsgfTsKIAkJRERFNjNFRDUwQjdENDVB
ODAwMjI2OTk4IC8qIERPTVRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMzQTE0NzUwQjdEMUJBRjAwQTUzRkZEIC8qIERPTVRleHRFdmVu
dC5oICovOyB9OworCQlFMTA3NDAwRDBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5l
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3
NDAwQjBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgKi87IH07CisJCUUx
MDc0MDBFMEU3N0JEQzAwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDAwQzBFNzdCREMwMDAzM0FG
MjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oICovOyB9OworCQlFMTA3NDMyNDBFNzgzNTgzMDAzM0FG
MjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMDc0MzIzMEU3ODM1ODMwMDMzQUYyNCAvKiBK
U01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwICovOyB9OworCQlFMTA3NDMyNzBFNzgzNUE1
MDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDMyNjBFNzgzNUE1MDAzM0FGMjQg
LyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggKi87IH07CiAJCUUxMEI5MzdDMEI3M0Mw
MEEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwQjkzN0IwQjczQzAwQTAwM0VEODkwIC8q
IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggKi87IH07CiAJCUUxMEI5M0MzMEI3M0MyOTEwMDNF
RDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTBCOTNDMjBCNzNDMjkxMDAzRUQ4OTAgLyogSlND
dXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwICovOyB9OwogCQlFMTBCOUI2QzBCNzQ3NTk5MDAzRUQ4
OTAgLyogTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTBCOUI2QTBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZlWFBh
dGhOU1Jlc29sdmVyLmggKi87IH07CkBAIC00MTIwLDYgKzQxMjQsMTkgQEAKIAkJRTE3QTRBMUMw
RDk3OTkxRDAwRkMxMEM2IC8qIERPTVNWR0FsdEdseXBoRWxlbWVudEludGVybmFsLmggaW4gQ29w
eSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NUFBNkJBRTBEOTc0QTAwMDAwNTQxQUUgLyogRE9NU1ZHQWx0R2x5cGhFbGVtZW50SW50ZXJuYWwu
aCAqLzsgfTsKIAkJRTFBMzAyQkMwREU4MzcwMzAwQzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMwMkJCMERF
ODM3MDMwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmggKi87IH07CiAJCUUxQTMwMkMxMERFODM3
NjkwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMwMkMwMERFODM3NjkwMEM1MkYyQyAvKiBTdHJpbmdC
dWlsZGVyLmNwcCAqLzsgfTsKKwkJRTFBNUY5OUIwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2Fn
ZUNoYW5uZWxDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxDdXN0
b20uY3BwICovOyB9OworCQlFMUFDQUY0QzBFNzkxQUFGMDA4N0QxMkIgLyogRE9NTWVzc2FnZVBv
cnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFD
QUY0QTBFNzkxQUFGMDA4N0QxMkIgLyogRE9NTWVzc2FnZVBvcnQubW0gKi87IH07CisJCUUxQUNB
RjREMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBQ0FGNEIwRTc5MUFBRjAwODdEMTJCIC8q
IERPTU1lc3NhZ2VQb3J0LmggKi87IH07CisJCUUxQURFQ0JGMEU3NkFDRjEwMDRBMUE1RSAvKiBN
ZXNzYWdlUG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFBREVDQkQwRTc2QUNGMTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmggKi87IH07CisJCUUx
QURFQ0MwMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFERUNCRTBFNzZBQ0YxMDA0QTFBNUUg
LyogTWVzc2FnZVBvcnQuY3BwICovOyB9OworCQlFMUFERUNDNzBFNzZBRDFGMDA0QTFBNUUgLyog
TWVzc2FnZVBvcnQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUFERUNDNjBFNzZBRDFGMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaWRsICovOyB9
OworCQlFMUFERUNDRTBFNzZBRDhCMDA0QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQURFQ0NDMEU3NkFEOEIw
MDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5oICovOyB9OworCQlFMUFERUNDRjBFNzZBRDhCMDA0
QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTFBREVDQ0QwRTc2QUQ4QjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFu
bmVsLmNwcCAqLzsgfTsKKwkJRTFBREVDRDEwRTc2QURBQjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFu
bmVsLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFBREVDRDAwRTc2QURBQjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmlkbCAqLzsgfTsKKwkJ
RTFBREVENDcwRTc2QjhERDAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVENDYwRTc2QjhE
RDAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwICovOyB9OworCQlFMUFERURENTBF
NzZCRDYwMDA0QTFBNUUgLyogRE9NTWVzc2FnZVBvcnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVERDQwRTc2QkQ2MDAwNEExQTVF
IC8qIERPTU1lc3NhZ2VQb3J0SW50ZXJuYWwuaCAqLzsgfTsKKwkJRTFBREVEREEwRTc2QkQ5MzAw
NEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxQURFREQ4MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0
LmggKi87IH07CisJCUUxQURFRERCMEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQURFREQ5
MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmNwcCAqLzsgfTsKIAkJRTFCRTUxMkQw
Q0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEyQjBDRjZDNTEyMDAyRUE5NTkgLyog
WFNMVFVuaWNvZGVTb3J0LmNwcCAqLzsgfTsKIAkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8q
IFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oICov
OyB9OwogCQlFMUU2RUVBNDBCNjI4REE4MDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUU2RUVB
MzBCNjI4REE4MDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5jcHAgKi87IH07CkBAIC04
NjQ0LDYgKzg2NjEsMTAgQEAKIAkJREQwNUZFMEIwQjhCQTNDNjAwOUFDREZFIC8qIFdlYkNvcmVP
YmpDRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlT2Jq
Q0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERDA1RkUwQzBCOEJBM0M2
MDA5QUNERkUgLyogV2ViQ29yZU9iakNFeHRyYXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgcGF0aCA9IFdlYkNvcmVPYmpDRXh0cmFzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCURENzYzQkIxMDk5MkMyQzkwMDc0MEI4RSAvKiBsaWJ4bWwyLmR5bGliICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1h
Y2gtby5keWxpYiI7IG5hbWUgPSBsaWJ4bWwyLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGlieG1s
Mi5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJRTEwNzQwMEIwRTc3QkRD
MDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNNZXNzYWdlQ2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxMDc0MDBDMEU3N0JEQzAwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVzc2FnZUNoYW5uZWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEwNzQzMjMwRTc4MzU4MzAwMzNBRjI0IC8qIEpT
TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMTA3NDMyNjBFNzgzNUE1MDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hh
bm5lbENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVz
c2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTBCOTM3QjBCNzNDMDBBMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwQjkzQzIwQjczQzI5MTAwM0VEODkwIC8q
IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTEwQjlCNkEwQjc0NzU5OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNv
bHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVYUGF0aE5TUmVz
b2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2NTQsNiArODY3NSwxOSBA
QAogCQlFMTJFREJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRUYXJnZXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMUEzMDJCQjBERTgzNzAzMDBDNTJGMkMgLyogU3RyaW5nQnVp
bGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdCdWlsZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQTMwMkMwMERFODM3NjkwMEM1MkYyQyAv
KiBTdHJpbmdCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cmluZ0J1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUE1Rjk5
QTBFN0VBQTI1MDBBRjg1RUEgLyogSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBQ0FGNEEwRTc5MUFBRjAwODdEMTJCIC8q
IERPTU1lc3NhZ2VQb3J0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gRE9NTWVzc2FnZVBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQUNB
RjRCMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9ydC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBET01NZXNzYWdlUG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMUFERUNCRDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
aDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IE1lc3NhZ2VQb3J0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUxQURFQ0JFMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXNzYWdlUG9ydC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQURFQ0M2MEU3NkFEMUYwMDRBMUE1RSAv
KiBNZXNzYWdlUG9ydC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVzc2FnZVBvcnQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUFERUNDQzBFNzZBRDhCMDA0QTFBNUUg
LyogTWVzc2FnZUNoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVz
c2FnZUNoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBREVDQ0QwRTc2
QUQ4QjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1lc3NhZ2VDaGFubmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTFBREVDRDAwRTc2QURBQjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZXNzYWdlQ2hhbm5lbC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUxQURFRDQ2MEU3NkI4REQwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2Fn
ZVBvcnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUFERURENDBF
NzZCRDYwMDA0QTFBNUUgLyogRE9NTWVzc2FnZVBvcnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBET01NZXNzYWdlUG9ydEludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUxQURFREQ4MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQ
b3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVzc2FnZVBvcnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBREVERDkwRTc2QkQ5MzAwNEExQTVFIC8q
IEpTTWVzc2FnZVBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNNZXNzYWdlUG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQkU1MTJC
MENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gWFNMVFVuaWNvZGVTb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29y
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFNkVFQTMwQjYyOERBODAwNUYyRjcwIC8q
IEpTSFRNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNIVE1MU2VsZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMDI4MSw2ICsxMDMxNSw4IEBACiAJCQkJODVERjM0M0YwQUFGQzBFRDAwRTU5QUUzIC8q
IERPTUtleWJvYXJkRXZlbnRQcml2YXRlLmggKi8sCiAJCQkJNzU3OTNFRDAwRDBDRTg1QjAwN0ZD
MEFDIC8qIERPTU1lc3NhZ2VFdmVudC5oICovLAogCQkJCTc1NzkzRUQxMEQwQ0U4NUIwMDdGQzBB
QyAvKiBET01NZXNzYWdlRXZlbnQubW0gKi8sCisJCQkJRTFBQ0FGNEEwRTc5MUFBRjAwODdEMTJC
IC8qIERPTU1lc3NhZ2VQb3J0Lm1tICovLAorCQkJCUUxQUNBRjRCMEU3OTFBQUYwMDg3RDEyQiAv
KiBET01NZXNzYWdlUG9ydC5oICovLAogCQkJCTg1N0UwQjIzMEFCMDQzNDYwMDM2RTQ0NyAvKiBE
T01Nb3VzZUV2ZW50LmggKi8sCiAJCQkJODU3RTBCMjQwQUIwNDM0NjAwMzZFNDQ3IC8qIERPTU1v
dXNlRXZlbnQubW0gKi8sCiAJCQkJODU3RTBCMkIwQUIwNDNGQzAwMzZFNDQ3IC8qIERPTU1vdXNl
RXZlbnRQcml2YXRlLmggKi8sCkBAIC0xMDU3Miw2ICsxMDYwOCw3IEBACiAJCQkJODU5ODlEQzUw
QUNDOEJCRDAwQTBCQzUxIC8qIERPTUtleWJvYXJkRXZlbnRJbnRlcm5hbC5oICovLAogCQkJCTg1
RTcxMTgyMEFDNUQ1MzUwMDUzMjcwRiAvKiBET01NZWRpYUxpc3RJbnRlcm5hbC5oICovLAogCQkJ
CTc1NzkzRUQyMEQwQ0U4NUIwMDdGQzBBQyAvKiBET01NZXNzYWdlRXZlbnRJbnRlcm5hbC5oICov
LAorCQkJCUUxQURFREQ0MEU3NkJENjAwMDRBMUE1RSAvKiBET01NZXNzYWdlUG9ydEludGVybmFs
LmggKi8sCiAJCQkJODU5ODlEQzYwQUNDOEJCRDAwQTBCQzUxIC8qIERPTU1vdXNlRXZlbnRJbnRl
cm5hbC5oICovLAogCQkJCTg1OTg5REM3MEFDQzhCQkQwMEEwQkM1MSAvKiBET01NdXRhdGlvbkV2
ZW50SW50ZXJuYWwuaCAqLywKIAkJCQk4NUU3MTE4MzBBQzVENTM1MDA1MzI3MEYgLyogRE9NTmFt
ZWROb2RlTWFwSW50ZXJuYWwuaCAqLywKQEAgLTExNzExLDggKzExNzQ4LDEyIEBACiAJCQkJQjI4
QkMzMTkwRDEzNUU1NDAwQ0RCQTI3IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oICovLAogCQkJ
CUE4NjYyOUNFMDlEQTJCNDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3BwICovLAogCQkJ
CUE4NjYyOUNEMDlEQTJCNDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuaCAqLywKKwkJCQlF
MTA3NDAwQjBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgKi8sCisJCQkJ
RTEwNzQwMEMwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuaCAqLywKIAkJCQk3
NTc5M0VDNjBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuY3BwICovLAogCQkJCTc1
NzkzRUM3MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICovLAorCQkJCUUxQURF
REQ4MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggKi8sCisJCQkJRTFBREVERDkw
RTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuY3BwICovLAogCQkJCUE4NjYyOUNDMDlE
QTJCNDcwMDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuY3BwICovLAogCQkJCUE4NjYyOUNCMDlEQTJC
NDcwMDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuaCAqLywKIAkJCQk2NURGMzFFNzA5RDFDQzYwMDAw
QkUzMjUgLyogSlNNdXRhdGlvbkV2ZW50LmNwcCAqLywKQEAgLTEyNjYyLDYgKzEyNzAzLDggQEAK
IAkJCQlDMDkxNTg4NTBEQjQyMDkyMDBFNTVBRjQgLyogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
LmggKi8sCiAJCQkJQzA5MTU4ODYwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdG9yQ2FsbGJh
Y2tXcmFwcGVyLmNwcCAqLywKIAkJCQlDMDkxNTg4NzBEQjQyMDkyMDBFNTVBRjQgLyogSlNJbnNw
ZWN0b3JDYWxsYmFja1dyYXBwZXIuaCAqLywKKwkJCQlFMTA3NDMyMzBFNzgzNTgzMDAzM0FGMjQg
LyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQlFMTA3NDMyNjBFNzgz
NUE1MDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggKi8sCiAJCQkJQkNE
OUMyNkMwQzE3QUE4MTAwNUM5MEEyIC8qIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwICovLAog
CQkJCUJDRDlDMjZEMEMxN0FBODEwMDVDOTBBMiAvKiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgg
Ki8sCiAJCQkJQkNCNzczNUUwQzE3ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckNvbmRpdGlv
bi5jcHAgKi8sCkBAIC0xMjc3OSw2ICsxMjgyMiw4IEBACiAJCQkJQUI0Q0I0RUEwQjhCREEzRDAw
OUY0MEIwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaCAqLywKIAkJCQkxQzVGQUVFNjBE
Q0ZEQTY4MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCAqLywKIAkJ
CQlCQ0UxQzQzRjBEOTgzMEY0MDAzQjAyRjIgLyogSlNMb2NhdGlvbkN1c3RvbS5jcHAgKi8sCisJ
CQkJRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3Bw
ICovLAorCQkJCUUxQURFRDQ2MEU3NkI4REQwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0Q3VzdG9t
LmNwcCAqLywKIAkJCQlBOUM2RTY0NjBENzQ2NUNBMDA2NDQyRTkgLyogSlNNaW1lVHlwZUFycmF5
Q3VzdG9tLmNwcCAqLywKIAkJCQlCQ0Q5QzI1RjBDMTdBQTY3MDA1QzkwQTIgLyogSlNOYW1lZE5v
ZGVNYXBDdXN0b20uY3BwICovLAogCQkJCUE5QzZFNjQ4MEQ3NDY1RDgwMDY0NDJFOSAvKiBKU05h
dmlnYXRvckN1c3RvbS5jcHAgKi8sCkBAIC0xMzY1OSw5ICsxMzcwNCwxNSBAQAogCQkJCUE4QzRB
N0Y0MDlENTYzMjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuY3BwICovLAogCQkJCUE4QzRB
N0YzMDlENTYzMjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuaCAqLywKIAkJCQlBOEM0QTg0
QjA5RDU2NDlEMDAwM0FDOEQgLyogTWFwcGVkQXR0cmlidXRlRW50cnkuaCAqLywKKwkJCQlFMUFE
RUNDRDBFNzZBRDhCMDA0QTFBNUUgLyogTWVzc2FnZUNoYW5uZWwuY3BwICovLAorCQkJCUUxQURF
Q0NDMEU3NkFEOEIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5oICovLAorCQkJCUUxQURFQ0Qw
MEU3NkFEQUIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5pZGwgKi8sCiAJCQkJNzU3OTNFODAw
RDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5jcHAgKi8sCiAJCQkJNzU3OTNFODEwRDBD
RTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oICovLAogCQkJCTc1NzkzRTgyMEQwQ0UwQjMw
MDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaWRsICovLAorCQkJCUUxQURFQ0JFMEU3NkFDRjEwMDRB
MUE1RSAvKiBNZXNzYWdlUG9ydC5jcHAgKi8sCisJCQkJRTFBREVDQkQwRTc2QUNGMTAwNEExQTVF
IC8qIE1lc3NhZ2VQb3J0LmggKi8sCisJCQkJRTFBREVDQzYwRTc2QUQxRjAwNEExQTVFIC8qIE1l
c3NhZ2VQb3J0LmlkbCAqLywKIAkJCQk4NTAzMUIyRjBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VF
dmVudC5jcHAgKi8sCiAJCQkJODUwMzFCMzAwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlRXZlbnQu
aCAqLywKIAkJCQkxNDFCOTRFNTA5RUM0MjIzMDAwRTk0MTMgLyogTW91c2VFdmVudC5pZGwgKi8s
CkBAIC0xNTgwNCw2ICsxNTg1NSwxMyBAQAogCQkJCTMxNkZFMDgyMEU2Q0NDMjgwMEJGNjA4OCAv
KiBET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcyODRBRERFMEU2RkVCMzEwMDJFRUZCRCAvKiBVc2VyU3R5bGVTaGVldExvYWRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ3QjRCRTgwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNl
SGFuZGxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUFERUNCRjBFNzZBQ0YxMDA0QTFBNUUgLyog
TWVzc2FnZVBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQURFQ0NFMEU3NkFEOEIwMDRBMUE1
RSAvKiBNZXNzYWdlQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFBREVERDUwRTc2QkQ2
MDAwNEExQTVFIC8qIERPTU1lc3NhZ2VQb3J0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUUxQURFRERBMEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggaW4gSGVhZGVycyAq
LywKKwkJCQlFMTA3NDAwRTBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTEwNzQzMjcwRTc4MzVBNTAwMzNBRjI0IC8qIEpTTWVzc2FnZUNo
YW5uZWxDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFBQ0FGNEQwRTc5MUFBRjAw
ODdEMTJCIC8qIERPTU1lc3NhZ2VQb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2M0Q3QjMyRDBF
NzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
MzQ1OUM2NTBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI5RkZCQjgzMEU3QzVBM0QwMDQwNzczMCAvKiBBY2Nlc3NpYmlsaXR5TGlzdC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xNTk3MCw2ICsxNjAyOCw4IEBACiAJCQkJMUFCMUFFN0EwQzA1MUZE
RTAwMTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTFBQjFB
RTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8s
CiAJCQkJQkNFRjQ1NDAwRTY3NkFDMTAwMUMxMjg3IC8qIFRleHRNZXRyaWNzLmlkbCBpbiBSZXNv
dXJjZXMgKi8sCisJCQkJRTFBREVDQzcwRTc2QUQxRjAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0Lmlk
bCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJRTFBREVDRDEwRTc2QURBQjAwNEExQTVFIC8qIE1lc3Nh
Z2VDaGFubmVsLmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzY1NSw2ICsxNzcxNSwxNCBAQAog
CQkJCTMxNkZFMDgxMEU2Q0NDMjgwMEJGNjA4OCAvKiBET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNzI4NEFEREQwRTZGRUIzMTAwMkVFRkJEIC8qIFVzZXJT
dHlsZVNoZWV0TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0N0I0QkU5MEU3MTI0MTYw
MDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlF
MUFERUNDMDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRTFBREVDQ0YwRTc2QUQ4QjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUUxQURFRDQ3MEU3NkI4REQwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQURFRERCMEU3NkJEOTMwMDRBMUE1RSAv
KiBKU01lc3NhZ2VQb3J0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxMDc0MDBEMEU3N0JEQzAw
MDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxMDc0
MzI0MEU3ODM1ODMwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRTFBQ0FGNEMwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1lc3NhZ2VQ
b3J0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTFBNUY5OUIwRTdFQUEyNTAwQUY4NUVBIC8qIEpT
TWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjM0NTlDNjYwRTc5
Q0QzMzAwOEFERkFGIC8qIENTU050aFNlbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5
RkZCQjgyMEU3QzVBM0QwMDQwNzczMCAvKiBBY2Nlc3NpYmlsaXR5TGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1NEM1MEY3QjBFODAxREYzMDA5ODMyQTAgLyogWE1MVG9rZW5pemVyTGlieG1s
Mi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHAJKHJldmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAi
SlNIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkpTSW1hZ2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTTWVz
c2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUg
IkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAg
LTE4OCw2ICsxODksNyBAQCBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dCYXNlOjpzX2luZm8g
CiAjIC0tIENvbnN0cnVjdG9ycyAtLQogICBBdWRpbyAgICAgICAgICAgICAgICAgV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpBdWRpbyAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBJbWFnZSAg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpJbWFnZSAgICAgICAgICAg
ICAgRG9udERlbGV0ZQorICBNZXNzYWdlQ2hhbm5lbCAgICAgICAgV2ViQ29yZTo6SlNET01XaW5k
b3dCYXNlOjpNZXNzYWdlQ2hhbm5lbCAgICAgRG9udERlbGV0ZQogICBPcHRpb24gICAgICAgICAg
ICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpPcHRpb24gICAgICAgICAgICAgRG9udERl
bGV0ZQogICBYTUxIdHRwUmVxdWVzdCAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpY
TUxIdHRwUmVxdWVzdCAgICAgRG9udERlbGV0ZQogICBYU0xUUHJvY2Vzc29yICAgICAgICAgV2Vi
Q29yZTo6SlNET01XaW5kb3dCYXNlOjpYU0xUUHJvY2Vzc29yICAgICAgRG9udERlbGV0ZQpAQCAt
NDUwLDYgKzQ1MiwxMCBAQCBKU1ZhbHVlICpKU0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVy
CiAgICAgICAgIC8vIEZJWE1FOiB0aGlzIHByb3BlcnR5IChhbmQgdGhlIGZldyBiZWxvdykgcHJv
YmFibHkgc2hvdWxkbid0IGNyZWF0ZSBhIG5ldyBvYmplY3QgZXZlcnkKICAgICAgICAgLy8gdGlt
ZQogICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0ltYWdlQ29uc3RydWN0b3IoZXhlYywgaW1w
bCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICBjYXNlIE1lc3NhZ2VDaGFubmVsOgorICAg
ICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNNZXNzYWdlQ2hhbm5lbENv
bnN0cnVjdG9yKGV4ZWMsIGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAgICAgY2FzZSBP
cHRpb246CiAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5oCShyZXZpc2lvbiAzNjc1OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICBPbldlYktpdFRyYW5zaXRpb25FbmQsCiAKICAgICAgICAgICAg
IC8vIENvbnN0cnVjdG9ycwotICAgICAgICAgICAgQXVkaW8sIEltYWdlLCBPcHRpb24sIFhNTEh0
dHBSZXF1ZXN0LCBYU0xUUHJvY2Vzc29yCisgICAgICAgICAgICBBdWRpbywgSW1hZ2UsIE1lc3Nh
Z2VDaGFubmVsLCBPcHRpb24sIFhNTEh0dHBSZXF1ZXN0LCBYU0xUUHJvY2Vzc29yCiAgICAgICAg
IH07CiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHAJKHJldmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkpT
RE9NV2luZG93U2hlbGwuaCIKKyNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAi
TWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNjcmlwdENv
bnRyb2xsZXIuaCIKICNpbmNsdWRlIDxranMvSlNPYmplY3QuaD4KQEAgLTE3NSwxMiArMTc3LDE0
IEBAIEpTVmFsdWUqIEpTRE9NV2luZG93Ojpwb3N0TWVzc2FnZShFeGVjU3QKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAg
U3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soZXhlYywgYXJncy5hdChleGVjLCAxKSk7CisgICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0
ID0gKGFyZ3Muc2l6ZSgpID09IDIpID8gMCA6IHRvTWVzc2FnZVBvcnQoYXJncy5hdChleGVjLCAx
KSk7CisKKyAgICBTdHJpbmcgdGFyZ2V0T3JpZ2luID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KGV4ZWMsIChhcmdzLnNpemUoKSA9PSAyKSA/IDEg
OiAyKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHdpbmRvdy0+cG9z
dE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luLCBzb3VyY2UsIGVjKTsKKyAgICB3aW5kb3ct
PnBvc3RNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VQb3J0LCB0YXJnZXRPcmlnaW4sIHNvdXJjZSwg
ZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuY3Bw
CShyZXZpc2lvbiAzNjc1OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNET01X
aW5kb3cuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU0V2ZW50
VGFyZ2V0Tm9kZS5oIgorI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJKU1hN
TEh0dHBSZXF1ZXN0VXBsb2FkLmgiCiAjaW5jbHVkZSA8a2pzL0Vycm9yLmg+CiAKQEAgLTI4NCw5
ICsyODUsMTEgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50VGFyZwogICAg
ICAgICAvLyBET01BcHBsaWNhdGlvbkNhY2hlIGlzIGFsd2F5cyBjcmVhdGVkIHZpYSBKUywgc28g
d2UgZG9uJ3QgbmVlZCB0byB1c2UgY2FjaGVET01PYmplY3QoKSBoZXJlLgogICAgICAgICByZXR1
cm4gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihjYWNoZSk7CiAjZW5kaWYKKworICAgIGlmIChN
ZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSB0YXJnZXQtPnRvTWVzc2FnZVBvcnQoKSkKKyAgICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgbWVzc2FnZVBvcnQpOwogICAgIAotICAgIC8vIFRoZXJlIGFy
ZSB0d28ga2luZHMgb2YgRXZlbnRUYXJnZXRzOiBFdmVudFRhcmdldE5vZGUgYW5kIFhNTEh0dHBS
ZXF1ZXN0LgotICAgIC8vIElmIFNWRyBzdXBwb3J0IGlzIGVuYWJsZWQsIHRoZXJlIGlzIGFsc28g
U1ZHRWxlbWVudEluc3RhbmNlLgorICAgIC8vIEFsbCBraW5kcyBvZiBFdmVudFRhcmdldHMgYXJl
IGxpc3RlZCBhYm92ZS4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4ganNO
dWxsKCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VD
aGFubmVsQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3Iu
aCIKKworI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWwuaCIKKyNpbmNsdWRlICJNZXNzYWdlQ2hh
bm5lbC5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3JUYWJsZVZhbHVlc1sxXSA9Cit7Cisg
ICAgeyAwLCAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNNZXNzYWdl
Q2hhbm5lbENvbnN0cnVjdG9yVGFibGUgPSB7IDAsIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
clRhYmxlVmFsdWVzLCAwIH07CisKK2NvbnN0IENsYXNzSW5mbyBKU01lc3NhZ2VDaGFubmVsQ29u
c3RydWN0b3I6OnNfaW5mbyA9IHsgIk1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IiLCAwLCAmSlNN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yVGFibGUsIDAgfTsKKworSlNNZXNzYWdlQ2hhbm5lbENv
bnN0cnVjdG9yOjpKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBE
b2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBET01PYmplY3QoSlNNZXNzYWdlQ2hhbm5lbENvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9i
amVjdFByb3RvdHlwZSgpKSkKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7CisgICAgcHV0
RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTTWVzc2FnZUNoYW5uZWxQ
cm90b3R5cGU6OnNlbGYoZXhlYyksIE5vbmUpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTTWVzc2Fn
ZUNoYW5uZWxDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25z
dHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3Ry
dWN0OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKworSlNPYmplY3QqIEpTTWVz
c2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPih0b0pTKGV4ZWMsIE1lc3NhZ2VDaGFubmVsOjpjcmVhdGUoc3RhdGljX2Nh
c3Q8SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpLT5tX2RvY3VtZW50
KSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl9o
CisjZGVmaW5lIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRnJhbWU7CisK
KyAgICBjbGFzcyBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIERvY3VtZW50Kik7CisgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFz
c0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgICAgICB2aXJ0dWFsIGJvb2wg
aW1wbGVtZW50c0hhc0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOworICAgICAgICB2aXJ0dWFsIEpTQzo6Q29uc3Ry
dWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworCisgICAgICAg
IERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl9oCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTTWVzc2Fn
ZUNoYW5uZWwuaCIKKworI2luY2x1ZGUgIk1lc3NhZ2VDaGFubmVsLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgSlNNZXNzYWdlQ2hh
bm5lbDo6bWFyaygpCit7CisgICAgRE9NT2JqZWN0OjptYXJrKCk7CisKKyAgICBpZiAoTWVzc2Fn
ZVBvcnQqIHBvcnQgPSBtX2ltcGwtPnBvcnQxKCkpIHsKKyAgICAgICAgRE9NT2JqZWN0KiB3cmFw
cGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihwb3J0KTsKKyAgICAgICAgaWYgKHdyYXBw
ZXIgJiYgIXdyYXBwZXItPm1hcmtlZCgpKQorICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOwor
ICAgIH0KKworICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IG1faW1wbC0+cG9ydDIoKSkgewor
ICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKHBv
cnQpOworICAgICAgICBpZiAod3JhcHBlciAmJiAhd3JhcHBlci0+bWFya2VkKCkpCisgICAgICAg
ICAgICB3cmFwcGVyLT5tYXJrKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5u
ZWxDdXN0b20uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU01l
c3NhZ2VQb3J0LmgiCisKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJFdmVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIK
KyNpbmNsdWRlICJKU0V2ZW50LmgiCisjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVBvcnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAorSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJzYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIERPTVdpbmRv
dyogd2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5p
bXBsKCk7CisgICAgY29uc3QgVVN0cmluZyYgbWVzc2FnZSA9IGFyZ3MuYXQoZXhlYywgMCktPnRv
U3RyaW5nKGV4ZWMpOworCisgICAgcmV0dXJuIHRvSlMoZXhlYywgaW1wbCgpLT5zdGFydENvbnZl
cnNhdGlvbih3aW5kb3ctPmRvY3VtZW50KCksIG1lc3NhZ2UpLmdldCgpKTsKK30KKworSlNWYWx1
ZSogSlNNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaW1wbCgpLT5jcmVh
dGVkV2l0aERvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZG9j
dW1lbnQtPmZyYW1lKCkpOworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICBSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gd2luZG93LT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCBh
cmdzLmF0KGV4ZWMsIDEpLCB0cnVlKTsKKyAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdChl
eGVjLCAwKS0+dG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLnJlbGVhc2UoKSwgYXJncy5hdChleGVj
LCAyKS0+dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwor
SlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaW1w
bCgpLT5jcmVhdGVkV2l0aERvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01X
aW5kb3coZG9jdW1lbnQtPmZyYW1lKCkpOworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVu
ZXIgPSB3aW5kb3ctPmZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCBhcmdzLmF0
KGV4ZWMsIDEpLCB0cnVlKTsKKyAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdChleGVj
LCAwKS0+dG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLCBhcmdzLmF0KGV4ZWMsIDIpLT50b0Jvb2xl
YW4oZXhlYykpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIAorfQorICAgIAorSlNW
YWx1ZSogSlNNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hFdmVudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAK
KyAgICBib29sIHJlc3VsdCA9IGltcGwoKS0+ZGlzcGF0Y2hFdmVudCh0b0V2ZW50KGFyZ3MuYXQo
ZXhlYywgMCkpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1
cm4ganNCb29sZWFuKHJlc3VsdCk7ICAgIAorfQorCit2b2lkIEpTTWVzc2FnZVBvcnQ6OnNldE9u
bWVzc2FnZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGltcGwoKS0+Y3JlYXRlZFdpdGhEb2N1bWVudCgpOworICAgIGlmICghZG9j
dW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RP
TVdpbmRvdyhkb2N1bWVudC0+ZnJhbWUoKSk7CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbXBsKCktPnNldE9uTWVzc2FnZUxpc3RlbmVyKHdpbmRvdy0+ZmluZE9yQ3Jl
YXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgdmFsdWUsIHRydWUpKTsKK30KKwor
SlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6b25tZXNzYWdlKEV4ZWNTdGF0ZSopIGNvbnN0Cit7Cisg
ICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0
PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4oaW1wbCgpLT5vbk1lc3NhZ2VMaXN0ZW5lcigp
KSkKKyAgICAgICAgaWYgKEpTT2JqZWN0KiBsaXN0ZW5lck9iaiA9IGxpc3RlbmVyLT5saXN0ZW5l
ck9iaigpKQorICAgICAgICAgICAgcmV0dXJuIGxpc3RlbmVyT2JqOworICAgIHJldHVybiBqc051
bGwoKTsKK30KKwordm9pZCBKU01lc3NhZ2VQb3J0OjpzZXRPbmNsb3NlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaW1wbCgpLT5j
cmVhdGVkV2l0aERvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
OworICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGRvY3VtZW50LT5mcmFt
ZSgpKTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0
T25DbG9zZUxpc3RlbmVyKHdpbmRvdy0+ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIoZXhlYywgdmFsdWUsIHRydWUpKTsKK30KKworSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6
b25jbG9zZShFeGVjU3RhdGUqKSBjb25zdAoreworICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cio+KGltcGwoKS0+b25DbG9zZUxpc3RlbmVyKCkpKQorICAgICAgICBpZiAoSlNPYmplY3QqIGxp
c3RlbmVyT2JqID0gbGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpCisgICAgICAgICAgICByZXR1cm4g
bGlzdGVuZXJPYmo7CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCit2b2lkIEpTTWVzc2FnZVBv
cnQ6Om1hcmsoKQoreworICAgIERPTU9iamVjdDo6bWFyaygpOworIAorICAgIGlmIChKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcio+KG1faW1wbC0+b25NZXNzYWdlTGlzdGVuZXIoKSkpCisgICAgICAgIGxp
c3RlbmVyLT5tYXJrKCk7CisKKyAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxp
c3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwt
Pm9uQ2xvc2VMaXN0ZW5lcigpKSkKKyAgICAgICAgbGlzdGVuZXItPm1hcmsoKTsKKworICAgIGlm
IChNZXNzYWdlUG9ydCogZW50YW5nbGVkUG9ydCA9IG1faW1wbC0+ZW50YW5nbGVkUG9ydCgpKSB7
CisgICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIo
ZW50YW5nbGVkUG9ydCk7CisgICAgICAgIGlmICh3cmFwcGVyICYmICF3cmFwcGVyLT5tYXJrZWQo
KSkKKyAgICAgICAgICAgIHdyYXBwZXItPm1hcmsoKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIE1l
c3NhZ2VQb3J0OjpFdmVudExpc3RlbmVyc01hcCBFdmVudExpc3RlbmVyc01hcDsKKyAgICB0eXBl
ZGVmIE1lc3NhZ2VQb3J0OjpMaXN0ZW5lclZlY3RvciBMaXN0ZW5lclZlY3RvcjsKKyAgICBFdmVu
dExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMgPSBtX2ltcGwtPmV2ZW50TGlzdGVuZXJzKCk7
CisgICAgZm9yIChFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgbWFwSXRlciA9IGV2ZW50TGlz
dGVuZXJzLmJlZ2luKCk7IG1hcEl0ZXIgIT0gZXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsrbWFwSXRl
cikgeworICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciB2ZWNJdGVyID0gbWFw
SXRlci0+c2Vjb25kLmJlZ2luKCk7IHZlY0l0ZXIgIT0gbWFwSXRlci0+c2Vjb25kLmVuZCgpOyAr
K3ZlY0l0ZXIpIHsKKyAgICAgICAgICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0
ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4odmVjSXRlci0+
Z2V0KCkpOworICAgICAgICAgICAgbGlzdGVuZXItPm1hcmsoKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJu
YWwuaAkocmV2aXNpb24gMzY3NTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJu
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBKYW1lcyBHLiBTcGV0
aCAoc3BldGhAZW5kLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChz
YW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqCkBAIC0xMjksNiArMTI5LDcgQEAKICNpbXBvcnQgIkRP
TUhUTUxVTGlzdEVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NS2V5Ym9hcmRFdmVudElu
dGVybmFsLmgiCiAjaW1wb3J0ICJET01NZWRpYUxpc3RJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9N
TWVzc2FnZVBvcnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NTW91c2VFdmVudEludGVybmFsLmgi
CiAjaW1wb3J0ICJET01NdXRhdGlvbkV2ZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU5hbWVk
Tm9kZU1hcEludGVybmFsLmgiCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBA
IHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICAgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzU3R5
bGUuaCJ9ID0gMTsKICAgICB9CiAKLSAgICBpZiAoJHR5cGUgZXEgIkNhbnZhc0dyYWRpZW50IiBv
ciAkdHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVyIikgeworICAgIGlmICgkdHlwZSBlcSAiQ2FudmFz
R3JhZGllbnQiIG9yICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yICR0eXBlIGVxICJNZXNz
YWdlUG9ydCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJpbmcuaCJ9ID0g
MTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw3IEBACiAjaW5jbHVk
ZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZXNz
YWdlRXZlbnQuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIk1vdXNlRXZl
bnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCiAjaW5jbHVk
ZSAiTXV0YXRpb25FdmVudC5oIgpAQCAtMjYxLDYgKzI2MiwyMyBAQCBzdGF0aWMgYm9vbCBhY2Nl
cHRzRWRpdGluZ0ZvY3VzKE5vZGUgKm5vCiAKIHN0YXRpYyBIYXNoU2V0PERvY3VtZW50Kj4qIGNo
YW5nZWREb2N1bWVudHMgPSAwOwogCitjbGFzcyBNZXNzYWdlUG9ydFRpbWVyIDogcHVibGljIFRp
bWVyQmFzZSB7CitwdWJsaWM6CisgICAgTWVzc2FnZVBvcnRUaW1lcihQYXNzUmVmUHRyPERvY3Vt
ZW50PiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgIHsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCkKKyAgICB7CisgICAgICAg
IG1fZG9jdW1lbnQtPmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMoKTsKKyAgICAgICAgZGVsZXRl
IHRoaXM7CisgICAgfQorCisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworfTsKKwog
RG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpc1hIVE1MKQogICAgIDogQ29u
dGFpbmVyTm9kZSgwKQogICAgICwgbV9kb210cmVlX3ZlcnNpb24oMCkKQEAgLTI3NCw2ICsyOTIs
NyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBib29sIGlzCiAjZW5kaWYKICAg
ICAsIG1feG1sVmVyc2lvbigiMS4wIikKICAgICAsIG1feG1sU3RhbmRhbG9uZShmYWxzZSkKKyAg
ICAsIG1fZmlyZWRNZXNzYWdlUG9ydFRpbWVyKGZhbHNlKQogI2lmIEVOQUJMRShYQkwpCiAgICAg
LCBtX2JpbmRpbmdNYW5hZ2VyKG5ldyBYQkxCaW5kaW5nTWFuYWdlcih0aGlzKSkKICNlbmRpZgpA
QCAtNDQ4LDYgKzQ2NywxOCBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKICAgICBpZiAobV9zdHls
ZVNoZWV0cykKICAgICAgICAgbV9zdHlsZVNoZWV0cy0+ZG9jdW1lbnREZXN0cm95ZWQoKTsKIAor
ICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQqPjo6aXRlcmF0b3IgbWVzc2FnZVBvcnRzRW5kID0gbV9t
ZXNzYWdlUG9ydHMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46Oml0ZXJh
dG9yIGl0ZXIgPSBtX21lc3NhZ2VQb3J0cy5iZWdpbigpOyBpdGVyICE9IG1fbWVzc2FnZVBvcnRz
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgQVNTRVJUKCgqaXRlciktPmNyZWF0ZWRXaXRoRG9j
dW1lbnQoKSA9PSB0aGlzKTsKKyAgICAgICAgKCppdGVyKS0+Y29udGV4dERlc3Ryb3llZCgpOwor
ICAgICAgICBpZiAoKCppdGVyKS0+ZW50YW5nbGVkUG9ydCgpKSB7CisgICAgICAgICAgICBSZWZQ
dHI8TWVzc2FnZVBvcnQ+IHN1cnZpdmluZ1BvcnQgPSAoKml0ZXIpLT5lbnRhbmdsZWRQb3J0KCk7
CisgICAgICAgICAgICAoKml0ZXIpLT51bmVudGFuZ2xlKCk7CisgICAgICAgICAgICBpZiAoc3Vy
dml2aW5nUG9ydC0+Y3JlYXRlZFdpdGhEb2N1bWVudCgpICE9IHRoaXMpIC8vIE90aGVyd2lzZSwg
c3Vydml2aW5nUG9ydCB3b24ndCByZWFsbHkgc3Vydml2ZS4KKyAgICAgICAgICAgICAgICBzdXJ2
aXZpbmdQb3J0LT5xdWV1ZUNsb3NlRXZlbnQoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIG1f
ZG9jdW1lbnQgPSAwOwogfQogCkBAIC00MzEyLDYgKzQzNDMsNDIgQEAgSFRNTENhbnZhc0VsZW1l
bnQqIERvY3VtZW50OjpnZXRDU1NDYW52YQogICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAK
K3ZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpCit7CisgICAg
aWYgKG1fZmlyZWRNZXNzYWdlUG9ydFRpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBNZXNz
YWdlUG9ydFRpbWVyKiB0aW1lciA9IG5ldyBNZXNzYWdlUG9ydFRpbWVyKHRoaXMpOworICAgIHRp
bWVyLT5zdGFydE9uZVNob3QoMCk7CisKKyAgICBtX2ZpcmVkTWVzc2FnZVBvcnRUaW1lciA9IHRy
dWU7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMoKQorewor
ICAgIFJlZlB0cjxEb2N1bWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBIYXNoU2V0PE1lc3NhZ2VQ
b3J0Kj4gcG9ydHMgPSBtX21lc3NhZ2VQb3J0czsgLy8gTWFrZSBhIGZyb3plbiBjb3B5LgorCisg
ICAgbV9maXJlZE1lc3NhZ2VQb3J0VGltZXIgPSBmYWxzZTsKKworICAgIEhhc2hTZXQ8TWVzc2Fn
ZVBvcnQqPjo6aXRlcmF0b3IgcG9ydHNFbmQgPSBwb3J0cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hT
ZXQ8TWVzc2FnZVBvcnQqPjo6aXRlcmF0b3IgcG9ydHNJdGVyID0gcG9ydHMuYmVnaW4oKTsgcG9y
dHNJdGVyICE9IHBvcnRzRW5kOyArK3BvcnRzSXRlcikgeworICAgICAgICBNZXNzYWdlUG9ydCog
cG9ydCA9ICpwb3J0c0l0ZXI7CisgICAgICAgIGlmIChtX21lc3NhZ2VQb3J0cy5jb250YWlucyhw
b3J0KSAmJiBwb3J0LT5xdWV1ZUlzT3BlbigpKQorICAgICAgICAgICAgcG9ydC0+ZGlzcGF0Y2hN
ZXNzYWdlcygpOworICAgIH0KK30KKwordm9pZCBEb2N1bWVudDo6Y3JlYXRlZE1lc3NhZ2VQb3J0
KE1lc3NhZ2VQb3J0KiBwb3J0KQoreworICAgIG1fbWVzc2FnZVBvcnRzLmFkZChwb3J0KTsKK30K
Kwordm9pZCBEb2N1bWVudDo6ZGVzdHJveWVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqIHBvcnQp
Cit7CisgICAgbV9tZXNzYWdlUG9ydHMucmVtb3ZlKHBvcnQpOworfQorCiB2b2lkIERvY3VtZW50
Ojppbml0RE5TUHJlZmV0Y2goKQogewogICAgIG1faGF2ZUV4cGxpY2l0bHlEaXNhYmxlZEROU1By
ZWZldGNoID0gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgSW1hZ2VMb2FkZXI7CiAgICAgY2xhc3MgSW50UG9pbnQ7CiAg
ICAgY2xhc3MgSlNOb2RlOworICAgIGNsYXNzIE1lc3NhZ2VQb3J0OwogICAgIGNsYXNzIE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHM7CiAgICAgY2xhc3MgTm9kZUZpbHRlcjsKICAgICBjbGFz
cyBOb2RlSXRlcmF0b3I7CkBAIC03NjEsNyArNzYyLDEyIEBAIHB1YmxpYzoKICAgICAvLyBFeHRl
bnNpb24gZm9yIG1hbmlwdWxhdGluZyBjYW52YXMgZHJhd2luZyBjb250ZXh0cyBmb3IgdXNlIGlu
IENTUwogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogZ2V0Q1NTQ2FudmFzQ29udGV4dChj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogZ2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBT
dHJpbmcmIG5hbWUpOwotICAgIAorCisgICAgdm9pZCBwcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdl
c1Nvb24oKTsKKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMoKTsKKyAgICB2b2lk
IGNyZWF0ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCopOworICAgIHZvaWQgZGVzdHJveWVkTWVz
c2FnZVBvcnQoTWVzc2FnZVBvcnQqKTsKKwogICAgIGJvb2wgaXNETlNQcmVmZXRjaEVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkOyB9CiAgICAgdm9pZCBpbml0
RE5TUHJlZmV0Y2goKTsKICAgICB2b2lkIHBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGNv
bnN0IFN0cmluZyYpOwpAQCAtOTE5LDYgKzkyNSw5IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcg
bV9jb250ZW50TGFuZ3VhZ2U7CiAKKyAgICBib29sIG1fZmlyZWRNZXNzYWdlUG9ydFRpbWVyOwor
ICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQqPiBtX21lc3NhZ2VQb3J0czsKKwogcHVibGljOgogICAg
IGJvb2wgaW5QYWdlQ2FjaGUoKTsKICAgICB2b2lkIHNldEluUGFnZUNhY2hlKGJvb2wgZmxhZyk7
CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRXZlbnROYW1lcy5oCShyZXZpc2lvbiAzNjc1OCkKKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFt
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
IG5hbWVzcGFjZSBFdmVudE5hbWVzCiAgICAgbWFjcm8oY2hhbmdlKSBcCiAgICAgbWFjcm8oY2hl
Y2tpbmcpIFwKICAgICBtYWNybyhjbGljaykgXAorICAgIG1hY3JvKGNsb3NlKSBcCiAgICAgbWFj
cm8oY29udGV4dG1lbnUpIFwKICAgICBtYWNybyhjb3B5KSBcCiAgICAgbWFjcm8oY3V0KSBcCklu
ZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAzNjc1OCkKKysrIFdlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsMTEgQEAgU1ZHRWxlbWVudElu
c3RhbmNlKiBFdmVudFRhcmdldDo6dG9TVkdFbAogfQogI2VuZGlmCiAKK01lc3NhZ2VQb3J0KiBF
dmVudFRhcmdldDo6dG9NZXNzYWdlUG9ydCgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRp
YyBpbmxpbmUgdm9pZCBhZGRMaXN0ZW5lclR5cGVUb0RvY3VtZW50SWZOZWVkZWQoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBEb2N1bWVu
dDo6TGlzdGVuZXJUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudDo6TGlzdGVuZXJUeXBl
PigwKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMzY3NTgpCisrKyBXZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAg
IGNsYXNzIEV2ZW50VGFyZ2V0Tm9kZTsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydDsKICAgICBjbGFz
cyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7
CiAgICAgY2xhc3MgWE1MSHR0cFJlcXVlc3Q7CkBAIC01Myw2ICs1NCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIGNsYXNzIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgTWVzc2FnZVBvcnQqIHRvTWVzc2FnZVBvcnQoKTsKICAgICAgICAgdmlydHVhbCBF
dmVudFRhcmdldE5vZGUqIHRvTm9kZSgpOwogICAgICAgICB2aXJ0dWFsIFhNTEh0dHBSZXF1ZXN0
KiB0b1hNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgIHZpcnR1YWwgWE1MSHR0cFJlcXVlc3RVcGxv
YWQqIHRvWE1MSHR0cFJlcXVlc3RVcGxvYWQoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VD
aGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VDaGFubmVsLmgiCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK01lc3NhZ2VDaGFubmVsOjpNZXNzYWdlQ2hhbm5lbChE
b2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBtX3BvcnQxKE1lc3NhZ2VQb3J0OjpjcmVhdGUoZG9j
dW1lbnQpKQorICAgICwgbV9wb3J0MihNZXNzYWdlUG9ydDo6Y3JlYXRlKGRvY3VtZW50KSkKK3sK
KyAgICBNZXNzYWdlUG9ydDo6ZW50YW5nbGUobV9wb3J0MS5nZXQoKSwgbV9wb3J0Mi5nZXQoKSk7
Cit9CisKK01lc3NhZ2VDaGFubmVsOjp+TWVzc2FnZUNoYW5uZWwoKQoreworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2RvbS9NZXNzYWdl
Q2hhbm5lbC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJ
bmRleDogV2ViQ29yZS9kb20vTWVzc2FnZUNoYW5uZWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9NZXNzYWdlQ2hhbm5lbC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vTWVzc2Fn
ZUNoYW5uZWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisj
aWZuZGVmIE1lc3NhZ2VDaGFubmVsX2gKKyNkZWZpbmUgTWVzc2FnZUNoYW5uZWxfaAorCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3Mg
RG9jdW1lbnQ7CisgICAgY2xhc3MgTWVzc2FnZVBvcnQ7CisKKyAgICBjbGFzcyBNZXNzYWdlQ2hh
bm5lbCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lc3NhZ2VDaGFubmVsPiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlQ2hhbm5lbD4gY3JlYXRlKERvY3VtZW50
KiBkb2N1bWVudCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VDaGFubmVsKGRvY3VtZW50
KSk7IH0KKyAgICAgICAgfk1lc3NhZ2VDaGFubmVsKCk7CisKKyAgICAgICAgTWVzc2FnZVBvcnQq
IHBvcnQxKCkgeyByZXR1cm4gbV9wb3J0MS5nZXQoKTsgfQorICAgICAgICBNZXNzYWdlUG9ydCog
cG9ydDIoKSB7IHJldHVybiBtX3BvcnQyLmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBNZXNzYWdlQ2hhbm5lbChEb2N1bWVudCopOworCisgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9y
dD4gbV9wb3J0MTsKKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBtX3BvcnQyOworICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1lc3NhZ2VDaGFubmVsX2gK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVsLmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20v
TWVzc2FnZUNoYW5uZWwuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VDaGFu
bmVsLmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVsLmlkbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCittb2R1bGUgZXZlbnRz
IHsKKworICAgIGludGVyZmFjZSBbQ3VzdG9tTWFya0Z1bmN0aW9uXSBNZXNzYWdlQ2hhbm5lbCB7
CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE1lc3NhZ2VQb3J0IHBvcnQxOworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgTWVzc2FnZVBvcnQgcG9ydDI7CisKKyAgICB9OworCit9Cklu
ZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL01lc3NhZ2VFdmVudC5jcHAJKHJldmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9kb20vTWVz
c2FnZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEzIEBAIE1lc3NhZ2VF
dmVudDo6TWVzc2FnZUV2ZW50KCkKIHsKIH0KIAotTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQo
Y29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBs
YXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSkKK01lc3NhZ2VFdmVudDo6
TWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIFBhc3NSZWZQdHI8RE9NV2luZG93PiBzb3VyY2UsIFBh
c3NSZWZQdHI8TWVzc2FnZVBvcnQ+IG1lc3NhZ2VQb3J0KQogICAgIDogRXZlbnQobWVzc2FnZUV2
ZW50LCBmYWxzZSwgdHJ1ZSkKICAgICAsIG1fZGF0YShkYXRhKQogICAgICwgbV9vcmlnaW4ob3Jp
Z2luKQogICAgICwgbV9sYXN0RXZlbnRJZChsYXN0RXZlbnRJZCkKICAgICAsIG1fc291cmNlKHNv
dXJjZSkKKyAgICAsIG1fbWVzc2FnZVBvcnQobWVzc2FnZVBvcnQpCiB7CiB9CiAKQEAgLTUyLDcg
KzUzLDcgQEAgTWVzc2FnZUV2ZW50Ojp+TWVzc2FnZUV2ZW50KCkKIHsKIH0KIAotdm9pZCBNZXNz
YWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29s
IGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0
cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElkLCBET01XaW5kb3cqIHNvdXJj
ZSkKK3ZvaWQgTWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU3RyaW5nJiBk
YXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgRE9N
V2luZG93KiBzb3VyY2UsIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCkKIHsKICAgICBpZiAoZGlz
cGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02Myw2ICs2NCw3IEBAIHZvaWQgTWVzc2Fn
ZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KGNvbnMKICAgICBtX29yaWdpbiA9IG9yaWdpbjsKICAg
ICBtX2xhc3RFdmVudElkID0gbGFzdEV2ZW50SWQ7CiAgICAgbV9zb3VyY2UgPSBzb3VyY2U7Cisg
ICAgbV9tZXNzYWdlUG9ydCA9IG1lc3NhZ2VQb3J0OwogfQogCiBib29sIE1lc3NhZ2VFdmVudDo6
aXNNZXNzYWdlRXZlbnQoKSBjb25zdCAKSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCShyZXZpc2lvbiAzNjc1
OCkKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjZGVmaW5lIE1lc3NhZ2VFdmVudF9oCiAKICNpbmNsdWRlICJFdmVudC5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAs
MjkgKzQxLDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlRXZlbnQpOwogICAgICAgICB9Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YSwg
Y29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIFBhc3NSZWZQ
dHI8RE9NV2luZG93PiBzb3VyY2UpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VF
dmVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIFBhc3NSZWZQdHI8RE9NV2luZG93PiBzb3VyY2UsIFBh
c3NSZWZQdHI8TWVzc2FnZVBvcnQ+IG1lc3NhZ2VQb3J0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VFdmVudChkYXRhLCBvcmlnaW4sIGxhc3RFdmVu
dElkLCBzb3VyY2UpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZUV2
ZW50KGRhdGEsIG9yaWdpbiwgbGFzdEV2ZW50SWQsIHNvdXJjZSwgbWVzc2FnZVBvcnQpKTsKICAg
ICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5NZXNzYWdlRXZlbnQoKTsKIAotICAgICAgICB2b2lk
IGluaXRNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJs
ZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElkLCBET01XaW5kb3cqIHNvdXJjZSk7CisgICAg
ICAgIHZvaWQgaW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wg
Y2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIERPTVdpbmRvdyogc291cmNl
LCBNZXNzYWdlUG9ydCopOwogICAgICAgICAKICAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBsYXN0RXZl
bnRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEV2ZW50SWQ7IH0KICAgICAgICAgRE9NV2luZG93
KiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQorICAgICAgICBNZXNz
YWdlUG9ydCogbWVzc2FnZVBvcnQoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2VQb3J0LmdldCgp
OyB9CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNZXNzYWdlRXZlbnQoKSBjb25z
dDsKIAogICAgIHByaXZhdGU6ICAgIAogICAgICAgICBNZXNzYWdlRXZlbnQoKTsKLSAgICAgICAg
TWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIFBhc3NSZWZQdHI8RE9NV2luZG93PiBzb3VyY2UpOwor
ICAgICAgICBNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNv
dXJjZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQpOwogCiAgICAgICAgIFN0
cmluZyBtX2RhdGE7CiAgICAgICAgIFN0cmluZyBtX29yaWdpbjsKICAgICAgICAgU3RyaW5nIG1f
bGFzdEV2ZW50SWQ7CiAgICAgICAgIFJlZlB0cjxET01XaW5kb3c+IG1fc291cmNlOworICAgICAg
ICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG1fbWVzc2FnZVBvcnQ7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaWRsCShyZXZpc2lvbiAzNjc1OCkKKysr
IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0
LDkgQEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgb3JpZ2luOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhc3RFdmVu
dElkOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NV2luZG93IHNvdXJjZTsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0OwogICAgICAgICAK
LSAgICAgICAgdm9pZCBpbml0TWVzc2FnZUV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCBpbiBi
b29sZWFuIGNhbkJ1YmJsZUFyZywgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCBpbiBET01TdHJp
bmcgZGF0YUFyZywgaW4gRE9NU3RyaW5nIG9yaWdpbkFyZywgaW4gRE9NU3RyaW5nIGxhc3RFdmVu
dElkQXJnLCBpbiBET01XaW5kb3cgc291cmNlQXJnKTsKKyAgICAgICAgdm9pZCBpbml0TWVzc2Fn
ZUV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgaW4g
Ym9vbGVhbiBjYW5jZWxhYmxlQXJnLCBpbiBET01TdHJpbmcgZGF0YUFyZywgaW4gRE9NU3RyaW5n
IG9yaWdpbkFyZywgaW4gRE9NU3RyaW5nIGxhc3RFdmVudElkQXJnLCBpbiBET01XaW5kb3cgc291
cmNlQXJnLCBpbiBNZXNzYWdlUG9ydCBtZXNzYWdlUG9ydCk7CiAKICAgICB9OwogCkluZGV4OiBX
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVz
c2FnZVBvcnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0
cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisj
aW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5j
bHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENsb3NlTWVzc2Fn
ZVBvcnRUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgeworcHVibGljOgorICAgIENsb3NlTWVzc2Fn
ZVBvcnRUaW1lcihQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQorICAgICAgICA6IG1fcG9y
dChwb3J0KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVk
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9wb3J0LT5hY3RpdmUoKSk7CisKKyAgICAgICAg
Ly8gQ2xvc2luZyBtYXkgZGVzdHJveSB0aGUgcG9ydCwgZGlzcGF0Y2ggYW55IHJlbWFpbmluZyBt
ZXNzYWdlcyBub3cuCisgICAgICAgIGlmIChtX3BvcnQtPnF1ZXVlSXNPcGVuKCkpCisgICAgICAg
ICAgICBtX3BvcnQtPmRpc3BhdGNoTWVzc2FnZXMoKTsKKworICAgICAgICBSZWZQdHI8RXZlbnQ+
IGV2dCA9IEV2ZW50OjpjcmVhdGUoRXZlbnROYW1lczo6Y2xvc2VFdmVudCwgZmFsc2UsIHRydWUp
OworICAgICAgICBpZiAobV9wb3J0LT5vbkNsb3NlTGlzdGVuZXIoKSkgeworICAgICAgICAgICAg
ZXZ0LT5zZXRUYXJnZXQobV9wb3J0LmdldCgpKTsKKyAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVu
dFRhcmdldChtX3BvcnQuZ2V0KCkpOworICAgICAgICAgICAgbV9wb3J0LT5vbkNsb3NlTGlzdGVu
ZXIoKS0+aGFuZGxlRXZlbnQoZXZ0LmdldCgpLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgbV9wb3J0LT5kaXNwYXRjaEV2ZW50KGV2
dC5yZWxlYXNlKCksIGVjLCBmYWxzZSk7CisgICAgICAgIEFTU0VSVCghZWMpOworCisgICAgICAg
IGRlbGV0ZSB0aGlzOworICAgIH0KKworICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbV9wb3J0Owor
fTsKKworTWVzc2FnZVBvcnQ6Ok1lc3NhZ2VQb3J0KERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6
IG1fZW50YW5nbGVkUG9ydCgwKQorICAgICwgbV9xdWV1ZUlzT3BlbihmYWxzZSkKKyAgICAsIG1f
Y3JlYXRlZFdpdGhEb2N1bWVudChkb2N1bWVudCkKK3sKKyAgICBkb2N1bWVudC0+Y3JlYXRlZE1l
c3NhZ2VQb3J0KHRoaXMpOworfQorCitNZXNzYWdlUG9ydDo6fk1lc3NhZ2VQb3J0KCkKK3sKKyAg
ICBpZiAobV9lbnRhbmdsZWRQb3J0KQorICAgICAgICB1bmVudGFuZ2xlKCk7CisKKyAgICBpZiAo
bV9jcmVhdGVkV2l0aERvY3VtZW50KQorICAgICAgICBtX2NyZWF0ZWRXaXRoRG9jdW1lbnQtPmRl
c3Ryb3llZE1lc3NhZ2VQb3J0KHRoaXMpOworfQorCitQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBN
ZXNzYWdlUG9ydDo6Y2xvbmUoRG9jdW1lbnQqIG5ld093bmVyLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8TWVzc2FnZVBv
cnQ+IHJlbW90ZVBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7CisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0
PiBuZXdQb3J0ID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZShuZXdPd25lcik7CisKKyAgICAvLyBNb3Zl
IGFsbCB0aGUgZXZlbnRzIGluIHRoZSBwb3J0IG1lc3NhZ2UgcXVldWUgb2Ygb3JpZ2luYWwgcG9y
dCB0byB0aGUgcG9ydCBtZXNzYWdlIHF1ZXVlIG9mIG5ldyBwb3J0LCBpZiBhbnksIGxlYXZpbmcg
dGhlIG5ldyBwb3J0J3MgcG9ydCBtZXNzYWdlIHF1ZXVlIGluIGl0cyBpbml0aWFsIGNsb3NlZCBz
dGF0ZS4KKyAgICAvLyBJZiBldmVudHMgYXJlIHBvc3RlZCAoZS5nLiBmcm9tIGEgd29ya2VyIHRo
cmVhZCkgd2hpbGUgdGhpcyBjb2RlIGlzIGV4ZWN1dGluZywgdGhlcmUgaXMgbm8gZ3VhcmFudGVl
IHdoZXRoZXIgdGhleSBlbmQgdXAgaW4gdGhlIG9yaWdpbmFsIG9yIG5ldyBwb3J0J3MgbWVzc2Fn
ZSBxdWV1ZS4KKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50OworICAgIHdoaWxlIChtX21lc3NhZ2VR
dWV1ZS50cnlHZXRNZXNzYWdlKGV2ZW50KSkKKyAgICAgICAgbmV3UG9ydC0+bV9tZXNzYWdlUXVl
dWUuYXBwZW5kKGV2ZW50KTsKKworICAgIGVudGFuZ2xlKHJlbW90ZVBvcnQuZ2V0KCksIG5ld1Bv
cnQuZ2V0KCkpOyAvLyBUaGUgcG9ydCBvYmplY3Qgd2lsbCBiZSB1bmVudGFuZ2xlZC4KKyAgICBy
ZXR1cm4gbmV3UG9ydDsKK30KKwordm9pZCBNZXNzYWdlUG9ydDo6cG9zdE1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBwb3N0TWVzc2FnZSht
ZXNzYWdlLCAwLCBlYyk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIGRhdGFQb3J0LCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCB8fCAhbV9jcmVhdGVkV2l0aERvY3VtZW50
IHx8ICFtX2VudGFuZ2xlZFBvcnQtPm1fY3JlYXRlZFdpdGhEb2N1bWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBuZXdNZXNzYWdlUG9ydDsKKyAgICBpZiAo
ZGF0YVBvcnQpIHsKKyAgICAgICAgaWYgKGRhdGFQb3J0ID09IHRoaXMgfHwgZGF0YVBvcnQgPT0g
bV9lbnRhbmdsZWRQb3J0KSB7CisgICAgICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBuZXdNZXNzYWdlUG9ydCA9
IGRhdGFQb3J0LT5jbG9uZShtX2VudGFuZ2xlZFBvcnQtPm1fY3JlYXRlZFdpdGhEb2N1bWVudCwg
ZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9lbnRhbmdsZWRQb3J0LT5tX21lc3NhZ2VRdWV1ZS5hcHBlbmQoTWVzc2FnZUV2ZW50OjpjcmVh
dGUobWVzc2FnZSwgIiIsICIiLCBtX2NyZWF0ZWRXaXRoRG9jdW1lbnQtPmRvbVdpbmRvdygpLCBu
ZXdNZXNzYWdlUG9ydC5nZXQoKSkpOworICAgIGlmIChtX2VudGFuZ2xlZFBvcnQtPm1fcXVldWVJ
c09wZW4pCisgICAgICAgIG1fZW50YW5nbGVkUG9ydC0+bV9jcmVhdGVkV2l0aERvY3VtZW50LT5w
cm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKTsKK30KKworUGFzc1JlZlB0cjxNZXNzYWdl
UG9ydD4gTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKERvY3VtZW50KiBzY3JpcHRDb250
ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBw
b3J0MSA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoc2NyaXB0Q29udGV4dCk7CisgICAgaWYgKCFtX2Vu
dGFuZ2xlZFBvcnQgfHwgIW1fY3JlYXRlZFdpdGhEb2N1bWVudCB8fCAhbV9lbnRhbmdsZWRQb3J0
LT5tX2NyZWF0ZWRXaXRoRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBwb3J0MTsKKyAgICBSZWZQ
dHI8TWVzc2FnZVBvcnQ+IHBvcnQyID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZShtX2VudGFuZ2xlZFBv
cnQtPm1fY3JlYXRlZFdpdGhEb2N1bWVudCk7CisKKyAgICBlbnRhbmdsZShwb3J0MS5nZXQoKSwg
cG9ydDIuZ2V0KCkpOworCisgICAgbV9lbnRhbmdsZWRQb3J0LT5tX21lc3NhZ2VRdWV1ZS5hcHBl
bmQoTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCBtX2NyZWF0ZWRXaXRoRG9j
dW1lbnQtPmRvbVdpbmRvdygpLCBwb3J0Mi5nZXQoKSkpOworICAgIGlmIChtX2VudGFuZ2xlZFBv
cnQtPm1fcXVldWVJc09wZW4pCisgICAgICAgIG1fZW50YW5nbGVkUG9ydC0+bV9jcmVhdGVkV2l0
aERvY3VtZW50LT5wcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKTsKKyAgICByZXR1cm4g
cG9ydDE7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnQ6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV9xdWV1
ZUlzT3BlbiB8fCAhbV9jcmVhdGVkV2l0aERvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3F1ZXVlSXNPcGVuID0gdHJ1ZTsKKyAgICBtX2NyZWF0ZWRXaXRoRG9jdW1lbnQtPnByb2Nl
c3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpOworfQorCit2b2lkIE1lc3NhZ2VQb3J0OjpjbG9z
ZSgpCit7CisgICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQpCisgICAgICAgIHJldHVybjsKKworICAg
IE1lc3NhZ2VQb3J0KiBvdGhlclBvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7CisgICAgdW5lbnRhbmds
ZSgpOworCisgICAgcXVldWVDbG9zZUV2ZW50KCk7CisgICAgb3RoZXJQb3J0LT5xdWV1ZUNsb3Nl
RXZlbnQoKTsKK30KKwordm9pZCBNZXNzYWdlUG9ydDo6ZW50YW5nbGUoTWVzc2FnZVBvcnQqIHBv
cnQxLCBNZXNzYWdlUG9ydCogcG9ydDIpCit7CisgICAgaWYgKHBvcnQxLT5tX2VudGFuZ2xlZFBv
cnQpIHsKKyAgICAgICAgQVNTRVJUKHBvcnQxLT5tX2VudGFuZ2xlZFBvcnQgIT0gcG9ydDIpOwor
ICAgICAgICBwb3J0MS0+dW5lbnRhbmdsZSgpOworICAgIH0KKworICAgIGlmIChwb3J0Mi0+bV9l
bnRhbmdsZWRQb3J0KSB7CisgICAgICAgIEFTU0VSVChwb3J0Mi0+bV9lbnRhbmdsZWRQb3J0ICE9
IHBvcnQxKTsKKyAgICAgICAgcG9ydDItPnVuZW50YW5nbGUoKTsKKyAgICB9CisKKyAgICBwb3J0
MS0+bV9lbnRhbmdsZWRQb3J0ID0gcG9ydDI7CisgICAgcG9ydDItPm1fZW50YW5nbGVkUG9ydCA9
IHBvcnQxOworfQorCit2b2lkIE1lc3NhZ2VQb3J0Ojp1bmVudGFuZ2xlKCkKK3sKKyAgICBBU1NF
UlQodGhpcyA9PSBtX2VudGFuZ2xlZFBvcnQtPm1fZW50YW5nbGVkUG9ydCk7CisKKyAgICBtX2Vu
dGFuZ2xlZFBvcnQtPm1fZW50YW5nbGVkUG9ydCA9IDA7CisgICAgbV9lbnRhbmdsZWRQb3J0ID0g
MDsKK30KKwordm9pZCBNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcygpCit7CisgICAgLy8g
TWVzc2FnZXMgZm9yIGRvY3VtZW50cyB0aGF0IGFyZSBub3QgZnVsbHkgYWN0aXZlIGdldCBkaXNw
YXRjaGVkIHRvbywgYnV0IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCgpIGRv
ZXNuJ3QgY2FsbCBoYW5kbGVycyBmb3IgdGhlc2UuCisgICAgQVNTRVJUKHF1ZXVlSXNPcGVuKCkp
OworCisgICAgUmVmUHRyPEV2ZW50PiBldnQ7CisgICAgd2hpbGUgKG1fbWVzc2FnZVF1ZXVlLnRy
eUdldE1lc3NhZ2UoZXZ0KSkgeworCisgICAgICAgIEFTU0VSVChldnQtPnR5cGUoKSA9PSBFdmVu
dE5hbWVzOjptZXNzYWdlRXZlbnQpOworCisgICAgICAgIGlmIChtX29uTWVzc2FnZUxpc3RlbmVy
KSB7CisgICAgICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICAgICAgICAgIGV2dC0+
c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgICAgIG1fb25NZXNzYWdlTGlzdGVuZXIt
PmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZ0LnJlbGVhc2UoKSwg
ZWMsIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgfQorfQorCit2b2lkIE1lc3Nh
Z2VQb3J0OjpxdWV1ZUNsb3NlRXZlbnQoKQoreworICAgIENsb3NlTWVzc2FnZVBvcnRUaW1lciog
dGltZXIgPSBuZXcgQ2xvc2VNZXNzYWdlUG9ydFRpbWVyKHRoaXMpOworICAgIHRpbWVyLT5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lciwgYm9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUuaW1wbCgpKTsKKyAgICBpZiAoaXRl
ciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9yIGxp
c3RlbmVyczsKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKKyAgICAg
ICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLmltcGwoKSwgbGlzdGVuZXJzKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vj
b25kOworICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIg
PSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKyts
aXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlz
dGVuZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBtX2V2ZW50TGlz
dGVuZXJzLmFkZChldmVudFR5cGUuaW1wbCgpLCBsaXN0ZW5lcnMpOworICAgIH0gICAgCit9CisK
K3ZvaWQgTWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0
ZW5lcnMuZmluZChldmVudFR5cGUuaW1wbCgpKTsKKyAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlz
dGVuZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTGlzdGVuZXJWZWN0b3Im
IGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25z
dF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVy
ICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgaWYgKCpsaXN0
ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikgeworICAgICAgICAgICAgbGlzdGVuZXJzLnJlbW92
ZShsaXN0ZW5lckl0ZXIgLSBsaXN0ZW5lcnMuYmVnaW4oKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBib29sIHRlbXBFdmVu
dCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBF
dmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnNDb3B5ID0g
bV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKS5pbXBsKCkpOworICAgIGZvciAoTGlz
dGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVyc0NvcHku
YmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJ
dGVyKSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CisgICAgICAgIGV2ZW50LT5z
ZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAgICBsaXN0ZW5lckl0ZXItPmdldCgpLT5oYW5k
bGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gIWV2
ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNz
YWdlUG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIE1lc3NhZ2VQb3J0X2gKKyNkZWZpbmUg
TWVzc2FnZVBvcnRfaAorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9N
ZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQXRvbWljU3RyaW5n
SW1wbDsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBFdmVudDsKKyAgICBjbGFzcyBT
dHJpbmc7CisKKyAgICBjbGFzcyBNZXNzYWdlUG9ydCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lc3Nh
Z2VQb3J0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVBvcnQoZG9jdW1lbnQpKTsgfQorICAgICAgICB+TWVz
c2FnZVBvcnQoKTsKKworICAgICAgICBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBjbG9uZShEb2N1
bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgICAgICBib29sIGFjdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZW50YW5nbGVkUG9ydDsgfQorICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHBvc3RNZXNz
YWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqLCBFeGNlcHRpb25Db2RlJik7
CisgICAgICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHN0YXJ0Q29udmVyc2F0aW9uKERvY3Vt
ZW50KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAg
ICAgICB2b2lkIGNsb3NlKCk7CisKKyAgICAgICAgYm9vbCBxdWV1ZUlzT3BlbigpIGNvbnN0IHsg
cmV0dXJuIG1fcXVldWVJc09wZW47IH0KKworICAgICAgICBNZXNzYWdlUG9ydCogZW50YW5nbGVk
UG9ydCgpIHsgcmV0dXJuIG1fZW50YW5nbGVkUG9ydDsgfQorICAgICAgICBzdGF0aWMgdm9pZCBl
bnRhbmdsZShNZXNzYWdlUG9ydCosIE1lc3NhZ2VQb3J0Kik7CisgICAgICAgIHZvaWQgdW5lbnRh
bmdsZSgpOworCisgICAgICAgIHZvaWQgY29udGV4dERlc3Ryb3llZCgpIHsgbV9jcmVhdGVkV2l0
aERvY3VtZW50ID0gMDsgfSAKKyAgICAgICAgRG9jdW1lbnQqIGNyZWF0ZWRXaXRoRG9jdW1lbnQo
KSB7IHJldHVybiBtX2NyZWF0ZWRXaXRoRG9jdW1lbnQ7IH0KKyAgICAgICAgdmlydHVhbCBNZXNz
YWdlUG9ydCogdG9NZXNzYWdlUG9ydCgpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgICAgICB2b2lk
IGRpc3BhdGNoTWVzc2FnZXMoKTsKKyAgICAgICAgdm9pZCBxdWV1ZUNsb3NlRXZlbnQoKTsKKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9u
Q29kZSYsIGJvb2wgdGVtcEV2ZW50ID0gZmFsc2UpOworCisgICAgICAgIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxFdmVudExpc3RlbmVyPiA+IExpc3RlbmVyVmVjdG9yOworICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3RlbmVy
c01hcDsKKyAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1
cm4gbV9ldmVudExpc3RlbmVyczsgfQorCisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVzc2Fn
ZVBvcnQ+OjpyZWY7CisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVzc2FnZVBvcnQ+OjpkZXJl
ZjsKKworICAgICAgICB2b2lkIHNldE9uTWVzc2FnZUxpc3RlbmVyKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uTWVzc2FnZUxpc3RlbmVyID0gZXZlbnRMaXN0
ZW5lcjsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbk1lc3NhZ2VMaXN0ZW5lcigpIGNvbnN0
IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KKworICAgICAgICB2b2lkIHNl
dE9uQ2xvc2VMaXN0ZW5lcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
IHsgbV9vbkNsb3NlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CisgICAgICAgIEV2ZW50TGlz
dGVuZXIqIG9uQ2xvc2VMaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fb25DbG9zZUxpc3RlbmVy
LmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBNZXNzYWdlUG9ydChEb2N1bWVudCop
OworCisgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKworICAg
ICAgICBNZXNzYWdlUG9ydCogbV9lbnRhbmdsZWRQb3J0OworICAgICAgICBNZXNzYWdlUXVldWU8
UmVmUHRyPEV2ZW50PiA+IG1fbWVzc2FnZVF1ZXVlOworICAgICAgICBib29sIG1fcXVldWVJc09w
ZW47CisKKyAgICAgICAgRG9jdW1lbnQqIG1fY3JlYXRlZFdpdGhEb2N1bWVudDsgLy8gV2lsbCBi
ZSAwIGlmIHRoZSBjb250ZXh0IGRvZXMgbm90IGNvbnRhaW4gYSBkb2N1bWVudCAoZS5nLiBpZiBp
dCdzIGEgd29ya2VyIHRocmVhZCkuCisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1f
b25NZXNzYWdlTGlzdGVuZXI7CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2xv
c2VMaXN0ZW5lcjsKKworICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJz
OworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1lc3NhZ2VQ
b3J0X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9k
b20vTWVzc2FnZVBvcnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
LmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCittb2R1bGUgZXZlbnRzIHsKKwor
ICAgIGludGVyZmFjZSBbQ3VzdG9tTWFya0Z1bmN0aW9uXSBNZXNzYWdlUG9ydCB7CisvLyBXZSBu
ZWVkIHRvIGhhdmUgc29tZXRoaW5nIGFzIGFuIE9iakMgYmluZGluZywgYmVjYXVzZSBNZXNzYWdl
UG9ydCBpcyB1c2VkIGluIE1lc3NhZ2VFdmVudCwgd2hpY2ggYWxyZWFkeSBoYXMgb25lLAorLy8g
YnV0IHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgZXhwb3NlIHRoZSBBUEkgd2hpbGUgaXQgaXMg
aW4gZmx1eC4KKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBib29sZWFuIGFjdGl2ZTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShp
biBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9y
dCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSBN
ZXNzYWdlUG9ydCBzdGFydENvbnZlcnNhdGlvbihpbiBET01TdHJpbmcgbWVzc2FnZSk7CisgICAg
ICAgIHZvaWQgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgICAgIC8vIGV2
ZW50IGhhbmRsZXIgYXR0cmlidXRlcworICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbV0gRXZlbnRM
aXN0ZW5lciBvbm1lc3NhZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tXSBFdmVudExpc3Rl
bmVyIG9uY2xvc2U7CisKKyAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAg
IFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3Rl
bmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4g
dXNlQ2FwdHVyZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihp
biBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIFtDdXN0
b21dIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisgICAgICAgICAgICByYWlz
ZXMoRXZlbnRFeGNlcHRpb24pOworI2VuZGlmCisgICAgfTsKKworfQpJbmRleDogV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAJKHJldmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCBTdG9yYWdlKiBET01XaW5kb3c6OmxvY2FsU3Rv
cmFnZSgpIGNvbnN0CiB9CiAjZW5kaWYKIAotdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRv
dyogc291cmNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCwgY29uc3Qg
U3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTM2Myw2ICszNjMs
MTIgQEAgdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZwogICAgICAgICB9
CiAgICAgfQogCisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBuZXdNZXNzYWdlUG9ydDsKKyAgICBp
ZiAobWVzc2FnZVBvcnQpCisgICAgICAgIG5ld01lc3NhZ2VQb3J0ID0gbWVzc2FnZVBvcnQtPmNs
b25lKGRvY3VtZW50KCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKwogICAg
IC8vIENhcHR1cmUgdGhlIHNvdXJjZSBvZiB0aGUgbWVzc2FnZS4gIFdlIG5lZWQgdG8gZG8gdGhp
cyBzeW5jaHJvbm91c2x5CiAgICAgLy8gaW4gb3JkZXIgdG8gY2FwdHVyZSB0aGUgc291cmNlIG9m
IHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KICAgICBEb2N1bWVudCogc291cmNlRG9jdW1lbnQgPSBz
b3VyY2UtPmRvY3VtZW50KCk7CkBAIC0zNzEsNyArMzc3LDcgQEAgdm9pZCBET01XaW5kb3c6OnBv
c3RNZXNzYWdlKGNvbnN0IFN0cmluZwogICAgIFN0cmluZyBzb3VyY2VPcmlnaW4gPSBzb3VyY2VE
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKIAogICAgIC8vIFNjaGVkdWxl
IHRoZSBtZXNzYWdlLgotICAgIFBvc3RNZXNzYWdlVGltZXIqIHRpbWVyID0gbmV3IFBvc3RNZXNz
YWdlVGltZXIodGhpcywgTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgc291cmNlT3JpZ2lu
LCAiIiwgc291cmNlKSwgdGFyZ2V0LmdldCgpKTsKKyAgICBQb3N0TWVzc2FnZVRpbWVyKiB0aW1l
ciA9IG5ldyBQb3N0TWVzc2FnZVRpbWVyKHRoaXMsIE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3Nh
Z2UsIHNvdXJjZU9yaWdpbiwgIiIsIHNvdXJjZSwgbmV3TWVzc2FnZVBvcnQpLCB0YXJnZXQuZ2V0
KCkpOwogICAgIHRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHJl
dmlzaW9uIDM2NzU4KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsK
ICAgICBjbGFzcyBIaXN0b3J5OwogICAgIGNsYXNzIExvY2F0aW9uOworICAgIGNsYXNzIE1lc3Nh
Z2VQb3J0OwogICAgIGNsYXNzIE5hdmlnYXRvcjsKICAgICBjbGFzcyBQb3N0TWVzc2FnZVRpbWVy
OwogICAgIGNsYXNzIFNjcmVlbjsKQEAgLTE3NSw3ICsxNzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uQ2FjaGUoKSBjb25z
dDsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIE1lc3NhZ2VQb3J0KiwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyog
c291cmNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VUaW1lckZp
cmVkKFBvc3RNZXNzYWdlVGltZXIqKTsKIAogICAgICAgICB2b2lkIHNjcm9sbEJ5KGludCB4LCBp
bnQgeSkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMzY3NTgpCisrKyBXZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBA
IG1vZHVsZSB3aW5kb3cgewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxl
XSBDb25zb2xlIGNvbnNvbGU7CiAKICAgICAgICAgLy8gY3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5n
Ci0gICAgICAgIFtEb05vdENoZWNrRG9tYWluU2VjdXJpdHksIEN1c3RvbV0gdm9pZCBwb3N0TWVz
c2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gRE9NU3RyaW5nIHRhcmdldE9yaWdpbikKKyAg
ICAgICAgW0RvTm90Q2hlY2tEb21haW5TZWN1cml0eSwgQ3VzdG9tXSB2b2lkIHBvc3RNZXNzYWdl
KGluIERPTVN0cmluZyBtZXNzYWdlLCBpbiBbT3B0aW9uYWxdIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQ
b3J0LCBpbiBET01TdHJpbmcgdGFyZ2V0T3JpZ2luKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CiAKICNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAzNjc2OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI5IEBACisyMDA4LTA5LTIyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NzkKKyAgICAgICAg
SW1wbGVtZW50IEhUTUw1IGNoYW5uZWwgbWVzc2FnaW5nCisKKyAgICAgICAgKiBmYXN0L2RvbS9X
aW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZXZl
bnRzL21lc3NhZ2UtY2hhbm5lbC1nYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2V2ZW50cy9tZXNzYWdlLXBvcnQtZGVsZXRlZC1kb2N1bWVudC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1kZWxldGVkLWRvY3VtZW50Lmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1kZWxldGVkLWZy
YW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVzc2FnZS1w
b3J0LWRlbGV0ZWQtZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbWVz
c2FnZS1wb3J0LWluYWN0aXZlLWRvY3VtZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWluYWN0aXZlLWRvY3VtZW50Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9yZXNvdXJjZXMvbWVzc2FnZS1wb3J0LWlmcmFtZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L01lc3NhZ2VQb3J0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L01lc3NhZ2VQb3J0L2V2ZW50LWxpc3RlbmVyLWNv
bnRleHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L01lc3NhZ2VQb3J0L2V2ZW50LWxpc3RlbmVyLWNvbnRleHQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9zZWN1cml0eS9NZXNzYWdlUG9ydC9yZXNvdXJjZXM6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvTWVzc2FnZVBvcnQvcmVzb3VyY2VzL2F0dGFja2Vy
LWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvTWVzc2Fn
ZVBvcnQvcmVzb3VyY2VzL2Jhbmtpbmctc2l0ZS5odG1sOiBBZGRlZC4KKwogMjAwOC0wOS0yMSAg
R2Fib3IgTG9raSAgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGFu
ZCB0d2Vha2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUZXN0IHNvbWUgY2FzZXMgb2YgTWVz
c2FnZVBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uLgorCitTaG91bGQgYmUgJ2Jhcic6IGJhcgorb25t
ZXNzYWdlCittZXNzYWdlIGxpc3RlbmVyCitvbmNsb3NlCitjbG9zZSBsaXN0ZW5lcgorCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwt
Z2MtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQv
cGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKzxib2R5PgorPHA+VGVzdCBzb21lIGNhc2VzIG9mIE1l
c3NhZ2VQb3J0IGdhcmJhZ2UgY29sbGVjdGlvbi48L3A+Cis8cHJlIGlkPWxvZz48L3ByZT4KKzxz
Y3JpcHQ+CitmdW5jdGlvbiBnYygpCit7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisg
ICAgICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgaSsrKSB7IC8vID4gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIChGRiBy
ZXF1aXJlcyBhYm91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBjb2xsZWN0KQorICAgICAgICB2
YXIgcyA9IG5ldyBTdHJpbmcoImFiYyIpOworICAgIH0KK30KKworZnVuY3Rpb24gbG9nKG1lc3Nh
Z2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVySFRNTCArPSBt
ZXNzYWdlICsgIjxicj4iOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGNoYW5uZWwgPSBuZXcgTWVzc2Fn
ZUNoYW5uZWw7CitjaGFubmVsLnBvcnQxLmZvbyA9ICJiYXIiOworCitnYygpOworbG9nKCJTaG91
bGQgYmUgJ2Jhcic6ICIgKyBjaGFubmVsLnBvcnQxLmZvbyk7CisKK2NoYW5uZWwucG9ydDEub25t
ZXNzYWdlID0gZnVuY3Rpb24oKSB7IGxvZygib25tZXNzYWdlIik7IH0KK2NoYW5uZWwucG9ydDEu
b25jbG9zZSA9IGZ1bmN0aW9uKCkgeyBsb2coIm9uY2xvc2UiKTsgc2V0VGltZW91dChmdW5jdGlv
bigpIHsgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpIH0sIDApIH0KK2NoYW5uZWwucG9ydDEuYWRkRXZlbnRMaXN0ZW5lcigi
Y2xvc2UiLCBmdW5jdGlvbigpIHsgbG9nKCJjbG9zZSBsaXN0ZW5lciIpOyB9LCBmYWxzZSk7Citj
aGFubmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbigpIHsgbG9n
KCJtZXNzYWdlIGxpc3RlbmVyIik7IH0sIGZhbHNlKTsKKworZ2MoKTsKK2NoYW5uZWwucG9ydDEu
c3RhcnQoKTsKK2NoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoIm1zZyIpOworCitnYygpOworY2hh
bm5lbC5wb3J0MS5jbG9zZSgpOworY2hhbm5lbC5wb3J0Mi5jbG9zZSgpOworCitnYygpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5
cGUKICAgKyB0ZXh0L2h0bWwKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdl
LXBvcnQtZGVsZXRlZC1kb2N1bWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWRlbGV0ZWQtZG9jdW1lbnQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0
LWRlbGV0ZWQtZG9jdW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg
QEAKK1Rlc3QgdGhhdCBkZXN0cm95aW5nIGEgZG9jdW1lbnQgZG9lc24ndCBjYXVzZSBhIGNyYXNo
IHdoZW4gcG9zdGluZyBhIG1lc3NhZ2UgdG8gYSBNZXNzYWdlUG9ydCBpdCBvd25lZC4KKworRGlk
bid0IGNyYXNoOiBTVUNDRVNTCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1kZWxldGVkLWRvY3VtZW50LWV4cGVjdGVkLnR4dApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCk5hbWU6IHN2bjplb2wt
c3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdl
LXBvcnQtZGVsZXRlZC1kb2N1bWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1kZWxldGVkLWRvY3VtZW50Lmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZGVsZXRlZC1kb2N1bWVu
dC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACis8Ym9keT4KKzxwPlRlc3QgdGhh
dCBkZXN0cm95aW5nIGEgZG9jdW1lbnQgZG9lc24ndCBjYXVzZSBhIGNyYXNoIHdoZW4gcG9zdGlu
ZyBhIG1lc3NhZ2UgdG8gYSBNZXNzYWdlUG9ydCBpdCBvd25lZC48L3A+Cis8cHJlIGlkPWxvZz48
L3ByZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBnYygpCit7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRy
b2xsZXIpCisgICAgICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7IC8vID4gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0
aW9uIChGRiByZXF1aXJlcyBhYm91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBjb2xsZWN0KQor
ICAgICAgICB2YXIgcyA9IG5ldyBTdHJpbmcoImFiYyIpOworICAgIH0KK30KKworZnVuY3Rpb24g
bG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVy
SFRNTCArPSBtZXNzYWdlICsgIjxicj4iOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIG1haW5Qb3J0Owor
CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5l
bDsKKyAgICB3aW5kb3cuZnJhbWVzWzBdLnBvc3RNZXNzYWdlKCJtc2ciLCBjaGFubmVsLnBvcnQy
LCAiKiIpOworICAgIG1haW5Qb3J0ID0gY2hhbm5lbC5wb3J0MTsKKyAgICBtYWluUG9ydC5zdGFy
dCgpOworCisgICAgbWFpblBvcnQucG9zdE1lc3NhZ2UoInBpbmciKTsKKyAgICBtYWluUG9ydC5v
bm1lc3NhZ2UgPSB0ZXN0MjsKK30KKworZnVuY3Rpb24gdGVzdDIoKQoreworICAgIHZhciBmcmFt
ZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIilbMF07Cisg
ICAgZnJhbWVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZnJhbWVFbGVtZW50KTsKKyAg
ICBmcmFtZUVsZW1lbnQgPSBudWxsOworCisgICAgZ2MoKTsKKyAgICBzZXRUaW1lb3V0KHRlc3Qz
LCAxMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkKK3sKKyAgICBnYygpOworICAgIG1haW5Qb3J0
LnBvc3RNZXNzYWdlKCJwaW5nIik7CisgICAgbWFpblBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24o
ZXZ0KSB7CisgICAgICAgIGlmIChldnQuZGF0YSA9PSAicG9uZyIpCisgICAgICAgICAgICBsb2co
IlVuZXhwZWN0ZWQgcmVzcG9uc2U6IEZBSUwiKTsKKyAgICB9OworICAgIHNldFRpbWVvdXQodGVz
dDQsIDEwKTsKK30KKworZnVuY3Rpb24gdGVzdDQoKQoreworICAgIG1haW5Qb3J0LmNsb3NlKCk7
CisKKyAgICBsb2coIkRpZG4ndCBjcmFzaDogU1VDQ0VTUyIpOworCisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvbWVzc2FnZS1w
b3J0LWlmcmFtZS5odG1sIiBvbmxvYWQ9InRlc3QoKSI+PC9pZnJhbWU+Cis8L2JvZHk+CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZGVs
ZXRlZC1kb2N1bWVudC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRl
eHQvaHRtbAoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1kZWxl
dGVkLWZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tZXNzYWdlLXBvcnQtZGVsZXRlZC1mcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZGVsZXRlZC1mcmFtZS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGVzdCB0aGF0IGRlc3Ry
b3lpbmcgYSBmcmFtZSBkb2Vzbid0IGNhdXNlIGEgY3Jhc2ggd2hlbiBwb3N0aW5nIGEgbWVzc2Fn
ZSB0byBhIE1lc3NhZ2VQb3J0IGl0IG93bmVkLgorCitEaWRuJ3QgY3Jhc2g6IFNVQ0NFU1MKKwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0
LWRlbGV0ZWQtZnJhbWUtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlw
ZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1kZWxldGVkLWZyYW1lLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWRlbGV0
ZWQtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21l
c3NhZ2UtcG9ydC1kZWxldGVkLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEg
QEAKKzxib2R5PgorPHA+VGVzdCB0aGF0IGRlc3Ryb3lpbmcgYSBmcmFtZSBkb2Vzbid0IGNhdXNl
IGEgY3Jhc2ggd2hlbiBwb3N0aW5nIGEgbWVzc2FnZSB0byBhIE1lc3NhZ2VQb3J0IGl0IG93bmVk
LjwvcD4KKzxwcmUgaWQ9bG9nPjwvcHJlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGdjKCkKK3sKKyAg
ICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIEdDQ29udHJvbGxlci5j
b2xsZWN0KCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsgLy8gPiBm
b3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlLIGFsbG9jYXRpb25z
IGJlZm9yZSBhIGNvbGxlY3QpCisgICAgICAgIHZhciBzID0gbmV3IFN0cmluZygiYWJjIik7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibG9nIikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
fQorCit2YXIgbWFpblBvcnQ7Cit2YXIgZnJhbWVEb2M7CisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIGZyYW1lRG9jID0gd2luZG93LmZyYW1lc1swXS5kb2N1bWVudDsKKyAgICB2YXIgY2hhbm5l
bCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICB3aW5kb3cuZnJhbWVzWzBdLnBvc3RNZXNzYWdl
KCJtc2ciLCBjaGFubmVsLnBvcnQyLCAiKiIpOworICAgIG1haW5Qb3J0ID0gY2hhbm5lbC5wb3J0
MTsKKyAgICBtYWluUG9ydC5zdGFydCgpOworCisgICAgbWFpblBvcnQucG9zdE1lc3NhZ2UoInBp
bmciKTsKKyAgICBtYWluUG9ydC5vbm1lc3NhZ2UgPSB0ZXN0MjsKK30KKworZnVuY3Rpb24gdGVz
dDIoKQoreworICAgIHZhciBmcmFtZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgiaWZyYW1lIilbMF07CisgICAgZnJhbWVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQoZnJhbWVFbGVtZW50KTsKKyAgICBmcmFtZUVsZW1lbnQgPSBudWxsOworCisgICAgZ2MoKTsK
KyAgICBzZXRUaW1lb3V0KHRlc3QzLCAxMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkKK3sKKyAg
ICBnYygpOworICAgIG1haW5Qb3J0LnBvc3RNZXNzYWdlKCJwaW5nIik7CisgICAgbWFpblBvcnQu
b25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGlmIChldnQuZGF0YSA9PSAicG9u
ZyIpCisgICAgICAgICAgICBsb2coIlVuZXhwZWN0ZWQgcmVzcG9uc2U6IEZBSUwiKTsKKyAgICB9
OworICAgIHNldFRpbWVvdXQodGVzdDQsIDEwKTsKK30KKworZnVuY3Rpb24gdGVzdDQoKQorewor
ICAgIGxvZygiRGlkbid0IGNyYXNoOiBTVUNDRVNTIik7CisKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7Cit9CisKKzwvc2NyaXB0PgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9tZXNzYWdlLXBvcnQt
aWZyYW1lLmh0bWwiIG9ubG9hZD0idGVzdCgpIj48L2lmcmFtZT4KKzwvYm9keT4KClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1kZWxldGVk
LWZyYW1lLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1s
CgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2Fn
ZS1wb3J0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUZXN0IGNy
b3NzLWZyYW1lIE1lc3NhZ2VQb3J0IGNvbW11bmljYXRpb24uCisKK1NpbXBsZSBleGNoYW5nZTog
U1VDQ0VTUworUG9zdGVkIHBvcnQ6IFNVQ0NFU1MKK0NvbnZlcnNhdGlvbjogU1VDQ0VTUworQSBw
b3J0IGlzIGFjdGl2ZTogU1VDQ0VTUworQSBjbG9zZWQgcG9ydCBpcyBpbmFjdGl2ZTogU1VDQ0VT
UworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdl
LXBvcnQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRl
eHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1pbmFjdGl2ZS1kb2N1bWVudC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWlu
YWN0aXZlLWRvY3VtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1pbmFjdGl2ZS1kb2N1bWVudC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGVzdCB0aGF0IG1lc3NhZ2luZyBhbiBpbmFj
dGl2ZSBmcmFtZWxlc3MgZG9jdW1lbnQgd29ya3MgYXMgZXhwZWN0ZWQuCisKK0RpZG4ndCBjcmFz
aCwgZnJlZXplIG9yIHJlc3BvbmQ6IFNVQ0NFU1MKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LWluYWN0aXZlLWRvY3VtZW50LWV4cGVj
dGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCk5h
bWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tZXNzYWdlLXBvcnQtaW5hY3RpdmUtZG9jdW1lbnQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtaW5hY3RpdmUtZG9jdW1lbnQuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1p
bmFjdGl2ZS1kb2N1bWVudC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8Ym9k
eT4KKzxwPlRlc3QgdGhhdCBtZXNzYWdpbmcgYW4gaW5hY3RpdmUgZnJhbWVsZXNzIGRvY3VtZW50
IHdvcmtzIGFzIGV4cGVjdGVkLjwvcD4KKzxwcmUgaWQ9bG9nPjwvcHJlPgorPHNjcmlwdD4KK2Z1
bmN0aW9uIGdjKCkKK3sKKyAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICAgICAgcmV0
dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyBpKyspIHsgLy8gPiBmb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFi
b3V0IDlLIGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3QpCisgICAgICAgIHZhciBzID0gbmV3
IFN0cmluZygiYWJjIik7CisgICAgfQorfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAi
PGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgZG9jdW1lbnQ7Cit2YXIgbWFpblBvcnQ7CisKK2Z1
bmN0aW9uIHRlc3QoKQoreworICAgIGRvY3VtZW50ID0gd2luZG93LmZyYW1lc1swXS5kb2N1bWVu
dDsKKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICB3aW5kb3cuZnJh
bWVzWzBdLnBvc3RNZXNzYWdlKCJtc2ciLCBjaGFubmVsLnBvcnQyLCAiKiIpOworICAgIG1haW5Q
b3J0ID0gY2hhbm5lbC5wb3J0MTsKKyAgICBtYWluUG9ydC5zdGFydCgpOworCisgICAgbWFpblBv
cnQucG9zdE1lc3NhZ2UoInBpbmciKTsKKyAgICBtYWluUG9ydC5vbm1lc3NhZ2UgPSB0ZXN0MjsK
K30KKworZnVuY3Rpb24gdGVzdDIoKQoreworICAgIHZhciBmcmFtZUVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIilbMF07CisgICAgZnJhbWVFbGVtZW50LnNy
YyA9ICJyZXNvdXJjZXMvd2luZG93LW9wZW5lZC5odG1sIjsKKyAgICBmcmFtZUVsZW1lbnQub25s
b2FkID0gdGVzdDM7CisgICAgZ2MoKTsKK30KKworZnVuY3Rpb24gdGVzdDMoKQoreworICAgIGdj
KCk7CisgICAgbWFpblBvcnQucG9zdE1lc3NhZ2UoImFsZXJ0IEZBSUw6IHRoZSBkb2N1bWVudCBp
cyBpbmFjdGl2ZS4iKTsKKyAgICBtYWluUG9ydC5wb3N0TWVzc2FnZSgiZnJlZXplIik7CisgICAg
bWFpblBvcnQucG9zdE1lc3NhZ2UoInBpbmciKTsKKyAgICBtYWluUG9ydC5vbm1lc3NhZ2UgPSBm
dW5jdGlvbihldnQpIHsKKyAgICAgICAgbG9nKCJVbmV4cGVjdGVkIHJlc3BvbnNlOiBGQUlMIik7
CisgICAgfTsKKyAgICBzZXRUaW1lb3V0KHRlc3Q0LCAxMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3Q0
KCkKK3sKKyAgICBtYWluUG9ydC5jbG9zZSgpOworCisgICAgbG9nKCJEaWRuJ3QgY3Jhc2gsIGZy
ZWV6ZSBvciByZXNwb25kOiBTVUNDRVNTIik7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKKzwvc2NyaXB0PgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9tZXNzYWdlLXBvcnQtaWZyYW1l
Lmh0bWwiIG9ubG9hZD0idGVzdCgpIiB3aWR0aD0wIGhlaWdodD0wIGZyYW1lYm9yZGVyPTA+PC9p
ZnJhbWU+Cis8L2JvZHk+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tZXNzYWdlLXBvcnQtaW5hY3RpdmUtZG9jdW1lbnQuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6
IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tZXNzYWdlLXBvcnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tZXNzYWdlLXBvcnQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL21lc3NhZ2UtcG9ydC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACis8
Ym9keT4KKzxwPlRlc3QgY3Jvc3MtZnJhbWUgTWVzc2FnZVBvcnQgY29tbXVuaWNhdGlvbi48L3A+
Cis8cHJlIGlkPWxvZz48L3ByZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuaW5uZXJIVE1MICs9IG1lc3NhZ2Ug
KyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgbWFpblBvcnQ7CisKK2Z1bmN0aW9uIHRlc3Qo
KQoreworICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsOworICAgIHdpbmRvdy5m
cmFtZXNbMF0ucG9zdE1lc3NhZ2UoIm1zZyIsIGNoYW5uZWwucG9ydDIsICIqIik7CisgICAgbWFp
blBvcnQgPSBjaGFubmVsLnBvcnQxOworICAgIG1haW5Qb3J0LnBvc3RNZXNzYWdlKCJwaW5nIik7
CisgICAgbWFpblBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGlmIChl
dnQuZGF0YSA9PSAicG9uZyIgJiYgZXZ0Lm9yaWdpbiA9PSAiIikKKyAgICAgICAgICAgIGxvZygi
U2ltcGxlIGV4Y2hhbmdlOiBTVUNDRVNTIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxv
ZygiU2ltcGxlIGV4Y2hhbmdlOiBGQUlMLiBHb3QgbWVzc2FnZSAnIiArIGV2dC5kYXRhICsgIicg
ZnJvbSAnIiArIGV2dC5vcmlnaW4gKyAiJy4iKTsKKyAgICB9OworICAgIG1haW5Qb3J0LnN0YXJ0
KCk7CisgICAgc2V0VGltZW91dCh0ZXN0MiwgNTApOworfQorCitmdW5jdGlvbiB0ZXN0MigpCit7
CisgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7CisgICAgbWFpblBvcnQucG9z
dE1lc3NhZ2UoIm5ld1BvcnQiLCBjaGFubmVsLnBvcnQyKTsKKyAgICBjaGFubmVsLnBvcnQxLm9u
bWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gInlvIiAm
JiBldnQub3JpZ2luID09ICIiKQorICAgICAgICAgICAgbG9nKCJQb3N0ZWQgcG9ydDogU1VDQ0VT
UyIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIlBvc3RlZCBwb3J0OiBGQUlMLiBH
b3QgbWVzc2FnZSAnIiArIGV2dC5kYXRhICsgIicgZnJvbSAnIiArIGV2dC5vcmlnaW4gKyAiJy4i
KTsKKyAgICB9OworICAgIGNoYW5uZWwucG9ydDEuc3RhcnQoKTsKKyAgICBzZXRUaW1lb3V0KHRl
c3QzLCA1MCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkKK3sKKyAgICB2YXIgcG9ydCA9IG1haW5Q
b3J0LnN0YXJ0Q29udmVyc2F0aW9uKCJuZXdDb252ZXJzYXRpb24iKTsKKyAgICBwb3J0Lm9ubWVz
c2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gImhleSIgJiYg
ZXZ0Lm9yaWdpbiA9PSAiIikKKyAgICAgICAgICAgIGxvZygiQ29udmVyc2F0aW9uOiBTVUNDRVNT
Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiQ29udmVyc2F0aW9uOiBGQUlMLiBH
b3QgbWVzc2FnZSAnIiArIGV2dC5kYXRhICsgIicgZnJvbSAnIiArIGV2dC5vcmlnaW4gKyAiJy4i
KTsKKyAgICB9OworICAgIHBvcnQuc3RhcnQoKTsKKyAgICBzZXRUaW1lb3V0KHRlc3Q0LCA1MCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkKK3sKKyAgICBsb2coIkEgcG9ydCBpcyBhY3RpdmU6ICIg
KyAobWFpblBvcnQuYWN0aXZlID8gIlNVQ0NFU1MiIDogIkZBSUwiKSk7CisKKyAgICBtYWluUG9y
dC5jbG9zZSgpOworCisgICAgbG9nKCJBIGNsb3NlZCBwb3J0IGlzIGluYWN0aXZlOiAiICsgKG1h
aW5Qb3J0LmFjdGl2ZSA/ICJGQUlMIiA6ICJTVUNDRVNTIikpOworCisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvbWVzc2FnZS1w
b3J0LWlmcmFtZS5odG1sIiBvbmxvYWQ9InRlc3QoKSI+PC9pZnJhbWU+Cis8L2JvZHk+CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQuaHRt
bApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvbWVzc2FnZS1wb3J0LWlmcmFtZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9tZXNzYWdl
LXBvcnQtaWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9yZXNvdXJjZXMvbWVzc2FnZS1wb3J0LWlmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI0IEBACis8c2NyaXB0PgordmFyIHBvcnQ7CitmdW5jdGlvbiBvbk1lc3NhZ2UoZXZ0KSB7
CisgICAgaWYgKGV2dC5kYXRhID09ICJwaW5nIikKKyAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgi
cG9uZyIpOworICAgIGVsc2UgaWYgKGV2dC5kYXRhID09ICJuZXdQb3J0IikKKyAgICAgICAgZXZ0
Lm1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCJ5byIpOworICAgIGVsc2UgaWYgKGV2dC5kYXRhID09
ICJuZXdDb252ZXJzYXRpb24iKQorICAgICAgICBpZiAoZXZ0Lm9yaWdpbiA9PSAiIikKKyAgICAg
ICAgICAgIGV2dC5tZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgiaGV5Iik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFsZXJ0KCJJbmNvcnJlY3Qgc2VjdXJpdHkgb3JpZ2luIGluIGNvbnZlcnNh
dGlvbjogJyIgKyBldnQub3JpZ2luICsgIicuIik7CisgICAgZWxzZSBpZiAoL2FsZXJ0LisvLnRl
c3QoZXZ0LmRhdGEpKQorICAgICAgICBhbGVydChldnQuZGF0YS5zdWJzdHIoNikpOworICAgIGVs
c2UgaWYgKGV2dC5kYXRhID09ICJmcmVlemUiKQorICAgICAgICB3aGlsZSAoMSkge30KK30KKwor
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihldnQpIHsKKyAgICBw
b3J0ID0gZXZ0Lm1lc3NhZ2VQb3J0OworICAgIHBvcnQub25tZXNzYWdlID0gb25NZXNzYWdlOwor
ICAgIHBvcnQuc3RhcnQoKTsKK30sIGZhbHNlKTsKKzwvc2NyaXB0PgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL21lc3NhZ2UtcG9ydC1pZnJh
bWUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L01lc3NhZ2VQb3J0L2V2ZW50LWxp
c3RlbmVyLWNvbnRleHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvTWVzc2FnZVBvcnQvZXZlbnQtbGlzdGVuZXItY29udGV4dC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L01lc3NhZ2VQb3J0L2V2ZW50LWxpc3RlbmVyLWNvbnRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQgQEAKK1Rlc3QgdGhhdCBKUyBjb2RlIGNhbm5vdCBiZSBwbGFudGVk
IGludG8gYW4gdW5zdXNwZWN0aW5nIHN1YmZyYW1lIHZpYSBNZXNzYWdlUG9ydCBhbmQgbmF2aWdh
dGlvbi4KKworUEFTUworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L01lc3NhZ2VQb3J0L2V2ZW50LWxpc3RlbmVyLWNvbnRleHQtZXhwZWN0ZWQu
dHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KTmFtZTog
c3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvTWVzc2FnZVBvcnQvZXZlbnQtbGlzdGVuZXItY29udGV4dC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvTWVzc2FnZVBvcnQvZXZlbnQt
bGlzdGVuZXItY29udGV4dC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9NZXNzYWdlUG9ydC9ldmVudC1saXN0ZW5lci1jb250ZXh0Lmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKzxib2R5PgorPHA+VGVzdCB0aGF0IEpTIGNvZGUg
Y2Fubm90IGJlIHBsYW50ZWQgaW50byBhbiB1bnN1c3BlY3Rpbmcgc3ViZnJhbWUgdmlhIE1lc3Nh
Z2VQb3J0IGFuZCBuYXZpZ2F0aW9uLjwvcD4KKzxwcmUgaWQ9bG9nPjwvcHJlPgorPHNjcmlwdD4K
K2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
b2ciKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBj
bG9zdXJlOwordmFyIG1haW5Qb3J0OwordmFyIGZhaWxlZDsKKworZnVuY3Rpb24gdGVzdCgpCit7
CisgICAgZmFpbGVkID0gZmFsc2U7CisgICAgY2xvc3VyZSA9IHdpbmRvdy5mcmFtZXNbMF0uY3Jl
YXRlQ2xvc3VyZSgpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpZnJhbWUi
KVswXS5vbmxvYWQgPSB0ZXN0MjsKKyAgICB3aW5kb3cuZnJhbWVzWzBdLmxvY2F0aW9uID0gInJl
c291cmNlcy9iYW5raW5nLXNpdGUuaHRtbCI7Cit9CisKK2Z1bmN0aW9uIHRlc3QyKCkKK3sKKyAg
ICBtYWluUG9ydCA9IGNsb3N1cmUoKTsKKyAgICBtYWluUG9ydC5wb3N0TWVzc2FnZSgicGluZyIp
OworICAgIG1haW5Qb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeyBpZiAoL3NlbnNpdGl2
ZS8udGVzdChldnQuZGF0YSkpIGZhaWxlZCA9IHRydWU7IH0KKyAgICBtYWluUG9ydC5zdGFydCgp
OworICAgIHNldFRpbWVvdXQodGVzdDMsIDEwMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkKK3sK
KyAgICBsb2coZmFpbGVkID8gIkZBSUwiIDogIlBBU1MiKTsKKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30KKworPC9zY3JpcHQ+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2F0dGFja2VyLWZy
YW1lLmh0bWwiIG9ubG9hZD0idGVzdCgpIj48L2lmcmFtZT4KKzwvYm9keT4KClByb3BlcnR5IGNo
YW5nZXMgb246IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvTWVzc2FnZVBvcnQvZXZl
bnQtbGlzdGVuZXItY29udGV4dC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQog
ICArIHRleHQvaHRtbAoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvTWVz
c2FnZVBvcnQvcmVzb3VyY2VzL2F0dGFja2VyLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9NZXNzYWdlUG9ydC9yZXNvdXJjZXMvYXR0YWNr
ZXItZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkvTWVzc2FnZVBvcnQvcmVzb3VyY2VzL2F0dGFja2VyLWZyYW1lLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTUgQEAKKzxzY3JpcHQ+CisKK3dpbmRvdy5jcmVhdGVDbG9zdXJlID0g
ZnVuY3Rpb24oKSB7CisgICAgdmFyIE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IgPSB3aW5kb3cu
TWVzc2FnZUNoYW5uZWw7CisgICAgdmFyIGNoYW5uZWw7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkg
eworICAgICAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3I7CisgICAg
ICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7IGNoYW5uZWwucG9ydDEu
cG9zdE1lc3NhZ2UoZG9jdW1lbnQuYm9keS5pbm5lckhUTUwpIH0KKyAgICAgICAgY2hhbm5lbC5w
b3J0MS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24oKSB7IGNoYW5uZWwucG9y
dDEucG9zdE1lc3NhZ2UoZG9jdW1lbnQuYm9keS5pbm5lckhUTUwpIH0sIGZhbHNlKTsKKyAgICAg
ICAgY2hhbm5lbC5wb3J0MS5zdGFydCgpOworICAgICAgICByZXR1cm4gY2hhbm5lbC5wb3J0MjsK
KyAgICB9Cit9Cis8L3NjcmlwdD4KKzxwPkF0dGFja2VyIGlmcmFtZS48L3A+CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L01lc3NhZ2VQb3J0L3Jl
c291cmNlcy9hdHRhY2tlci1mcmFtZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlw
ZQogICArIHRleHQvaHRtbAoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
TWVzc2FnZVBvcnQvcmVzb3VyY2VzL2Jhbmtpbmctc2l0ZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvTWVzc2FnZVBvcnQvcmVzb3VyY2VzL2Jhbmtp
bmctc2l0ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9NZXNzYWdlUG9ydC9yZXNvdXJjZXMvYmFua2luZy1zaXRlLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEgQEAKKzxwPkhpZ2hseSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uPC9wPgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9NZXNzYWdl
UG9ydC9yZXNvdXJjZXMvYmFua2luZy1zaXRlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWlt
ZS10eXBlCiAgICsgdGV4dC9odG1sCgo=
</data>
<flag name="review"
          id="10605"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>