<?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>95735</bug_id>
          
          <creation_ts>2012-09-04 05:01:34 -0700</creation_ts>
          <short_desc>Removed V8IsolatedContext</short_desc>
          <delta_ts>2012-09-11 02:34:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>93646</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Dan Carney">dcarney</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>710990</commentid>
    <comment_count>0</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-04 05:01:34 -0700</bug_when>
    <thetext>Removed V8IsolatedContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710995</commentid>
    <comment_count>1</comment_count>
      <attachid>162013</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-04 05:06:20 -0700</bug_when>
    <thetext>Created attachment 162013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711272</commentid>
    <comment_count>2</comment_count>
      <attachid>162013</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-04 11:26:01 -0700</bug_when>
    <thetext>Comment on attachment 162013
Patch

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

This is a big step forward.  Below are a bunch of minor comments.  The only one that&apos;s really important is the question about line 58 of WorldContextHandle.cpp.  I&apos;d like to see another iteration of this patch, if that ok with you.

&gt; Source/WebCore/bindings/v8/DOMWrapperWorld.cpp:98
&gt; +    if (worldId == mainWorldId) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return mainThreadNormalWorld();
&gt; +    }

Why not leave this as an ASSERT?

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:329
&gt; +    if (UNLIKELY(worldId == DOMWrapperWorld::mainWorldId)) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return m_windowShell;
&gt; +    }

Why not just ASSERT this?

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:352
&gt; +    if (UNLIKELY(!world)) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return 0;
&gt; +    }

This should just be an ASSERT.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:376
&gt; +    // Except in the test runner, worldID should be non 0 as it conflicts with the mainWorldId.
&gt; +    if (UNLIKELY(!worldID))
&gt; +        worldID = DOMWrapperWorld::uninitializedWorldId;

Should we change the test runner so that the testing environment is more like the production environment?

&gt; Source/WebCore/bindings/v8/ScriptController.h:200
&gt; +    typedef HashMap&lt;int, RefPtr&lt;V8DOMWindowShell&gt; &gt; IsolatedWorldMap;
&gt; +    typedef HashMap&lt;int, RefPtr&lt;SecurityOrigin&gt; &gt; IsolatedWorldSecurityOriginMap;

I wonder if we should move the SecurityOrigin pointer into V8DOMWindowShell.  We can do that in a separate patch though.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:234
&gt; +    if (UNLIKELY(m_context.get().IsWeak())) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return;
&gt; +    }

ASSERT

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:253
&gt; +            if (m_world-&gt;isMainWorld()) {

Do we ever call this function with weak and !m_world-&gt;isMainWorld() ?

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:525
&gt; +    if (!m_world-&gt;isMainWorld()) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return;
&gt; +    }

ASSERT

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:560
&gt; +    if (!m_world-&gt;isMainWorld()) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return;
&gt; +    }

ASSERT

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:564
&gt; +    // FIXME: This shouldn&apos;t be possible anymore.
&gt; +    if (!m_frame-&gt;document())
&gt; +        return;

Is this a bad merge?  I thought I deleted this code from trunk.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:594
&gt; +    if (!m_world-&gt;isMainWorld()) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return;
&gt; +    }

ASSERT

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:612
&gt; +    if (!m_world-&gt;isMainWorld()) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return;
&gt; +    }

ASSERT

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:633
&gt; +    if (!m_world-&gt;isMainWorld()) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return;
&gt; +    }

ASSERT

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:646
&gt; +    if (m_world-&gt;isMainWorld()) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return;
&gt; +    }

ASSERT

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:651
&gt; +        InspectorInstrumentation::didCreateIsolatedContext(m_frame, scriptState, securityOrigin.get());

Why does setIsolatedWorldSecurityOrigin call didCreateIsolatedContext ?  I would assume that would be the responsibility of the create function, not of a function that just sets the security origin.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:132
&gt; +    v8::Persistent&lt;v8::Context&gt; createNewContext(v8::Handle&lt;v8::Object&gt; global);

createNewContext -&gt; createContext

Why does this function return a v8::Persistent&lt;v8::Context&gt; ?  It seems like the result could just be stored in m_context.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:133
&gt; +    bool installDOMWindow(v8::Handle&lt;v8::Context&gt;, DOMWindow*);

Now that this function isn&apos;t static, it doesn&apos;t need to take a v8::Handle&lt;v8::Context&gt; parameter.  It can just use m_context.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:146
&gt; +    RefPtr&lt;SecurityOrigin&gt; m_isolatedWorldShellSecurityOrigin;

So, we keep a SecurityOrigin pointer here and in ScriptController?  Do we need to have both of them?  Do they play different roles?

&gt; Source/WebCore/bindings/v8/WorldContextHandle.cpp:53
&gt; +        ASSERT_NOT_REACHED();

Please just use ASSERT rather than trying to handle these impossible cases.

&gt; Source/WebCore/bindings/v8/WorldContextHandle.cpp:58
&gt; +    m_context = SharedPersistent&lt;v8::Context&gt;::create(v8::Persistent&lt;v8::Context&gt;::New(context));

Here is the v8::Persistent&lt;v8::Context&gt;::Dispose() that balances this New() ?

&gt; Source/WebCore/bindings/v8/WorldContextHandle.cpp:70
&gt; +    if (m_context-&gt;get().IsEmpty()) {
&gt; +        ASSERT_NOT_REACHED();
&gt; +        // FIXME: This is problematic, but an empty context is worse.
&gt;          return script-&gt;mainWorldContext();
&gt; +    }

Please just ASSERT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711409</commentid>
    <comment_count>3</comment_count>
      <attachid>162013</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-04 13:35:03 -0700</bug_when>
    <thetext>Comment on attachment 162013
Patch

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

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:376
&gt;&gt; +        worldID = DOMWrapperWorld::uninitializedWorldId;
&gt; 
&gt; Should we change the test runner so that the testing environment is more like the production environment?

It&apos;s used all over the place.  I&apos;d be okay with changing it later, but you said you wanted to do away with worldId, which seemed like a much better fix for this problem.

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.h:200
&gt;&gt; +    typedef HashMap&lt;int, RefPtr&lt;SecurityOrigin&gt; &gt; IsolatedWorldSecurityOriginMap;
&gt; 
&gt; I wonder if we should move the SecurityOrigin pointer into V8DOMWindowShell.  We can do that in a separate patch though.

I think it&apos;s possible to set an origin for a shell that doesn&apos;t exist yet, but I&apos;m not sure.

&gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:253
&gt;&gt; +            if (m_world-&gt;isMainWorld()) {
&gt; 
&gt; Do we ever call this function with weak and !m_world-&gt;isMainWorld() ?

No.  The weak flag is just for the temporary worlds that survive one call to evaluateInIsolatedWorld.  I tried to give everything the same lifecycle, but it&apos;s just not possible this iteration.  Even so, i can move it out of the else clause.

&gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:564
&gt;&gt; +        return;
&gt; 
&gt; Is this a bad merge?  I thought I deleted this code from trunk.

Totally possible.  I&apos;ve rebased this code dozens of times.  I&apos;ll get rid of it.

&gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:651
&gt;&gt; +        InspectorInstrumentation::didCreateIsolatedContext(m_frame, scriptState, securityOrigin.get());
&gt; 
&gt; Why does setIsolatedWorldSecurityOrigin call didCreateIsolatedContext ?  I would assume that would be the responsibility of the create function, not of a function that just sets the security origin.

No idea.  This code is copied from V8IsolatedContext directly.  There were a number of issues around the way the inspector interacted with V8IsolatedContext.  I can add a FIXME to remember to figure out why it&apos;s there in the future.

&gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:132
&gt;&gt; +    v8::Persistent&lt;v8::Context&gt; createNewContext(v8::Handle&lt;v8::Object&gt; global);
&gt; 
&gt; createNewContext -&gt; createContext
&gt; 
&gt; Why does this function return a v8::Persistent&lt;v8::Context&gt; ?  It seems like the result could just be stored in m_context.

It can.  I was just trying to keep the changes to a minimum, although that&apos;s a joke given the size of the patch.

&gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:146
&gt;&gt; +    RefPtr&lt;SecurityOrigin&gt; m_isolatedWorldShellSecurityOrigin;
&gt; 
&gt; So, we keep a SecurityOrigin pointer here and in ScriptController?  Do we need to have both of them?  Do they play different roles?

This copy seems only to be around to make its getter fast.  It&apos;s just an artefact of the merge.  I&apos;ll see if I can delete it easily.

&gt;&gt; Source/WebCore/bindings/v8/WorldContextHandle.cpp:58
&gt;&gt; +    m_context = SharedPersistent&lt;v8::Context&gt;::create(v8::Persistent&lt;v8::Context&gt;::New(context));
&gt; 
&gt; Here is the v8::Persistent&lt;v8::Context&gt;::Dispose() that balances this New() ?

Yikes.  That&apos;s a huge problem.  I was using ScopedPersistent earlier, which didn&apos;t require it, but that had copy constructor issues.  I&apos;ll add the Dispose() to the SharedPersistent destructor, since the class is only used here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711410</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-04 13:40:38 -0700</bug_when>
    <thetext>Another option option is to make WorldContextHandle RefCounted and then to just use ScopedPersistent.  I&apos;d like to get rid of SharedPersistent if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711798</commentid>
    <comment_count>5</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-05 00:46:15 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Another option option is to make WorldContextHandle RefCounted and then to just use ScopedPersistent.  I&apos;d like to get rid of SharedPersistent if possible.

I had tried that, but it was more change than I wanted to make.  I&apos;ve marked it as FIXME and will remove it after this patch stabilizes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711958</commentid>
    <comment_count>6</comment_count>
      <attachid>162221</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-05 05:00:30 -0700</bug_when>
    <thetext>Created attachment 162221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711964</commentid>
    <comment_count>7</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-05 05:09:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=162221) [details]
&gt; Patch

This patch covers the above concerns.  Mostly, I&apos;ve marked everything up with FIXMEs which I&apos;ll deal with once this patch is stable.  I&apos;ve also moved all isolated shells back to using the weak destruction method to minimize change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712168</commentid>
    <comment_count>8</comment_count>
      <attachid>162221</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-05 10:03:20 -0700</bug_when>
    <thetext>Comment on attachment 162221
Patch

Attachment 162221 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13765262

New failing tests:
http/tests/misc/window-open-then-write.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712199</commentid>
    <comment_count>9</comment_count>
      <attachid>162221</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-05 10:24:03 -0700</bug_when>
    <thetext>Comment on attachment 162221
Patch

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

This looks great.  Is that test failure really caused by this patch?  Let&apos;s try running it through the commit-queue.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:336
&gt; +            ASSERT(iter-&gt;second-&gt;world()-&gt;worldId() == worldId);
&gt; +            ASSERT(iter-&gt;second-&gt;world()-&gt;extensionGroup() == extensionGroup);
&gt; +           return iter-&gt;second;

Bad indent.

&gt; Source/WebCore/bindings/v8/SharedPersistent.h:47
&gt; +            return adoptRef(new SharedPersistent&lt;T&gt;(v8::Persistent&lt;v8::Context&gt;::New(value)));

I would have just make this class hold a ScopedPersistent, but let&apos;s not worry about that since we&apos;re going to remove it shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712537</commentid>
    <comment_count>10</comment_count>
      <attachid>162221</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-05 14:27:22 -0700</bug_when>
    <thetext>Comment on attachment 162221
Patch

Rejecting attachment 162221 from commit-queue.

New failing tests:
http/tests/misc/window-open-then-write.html
Full output: http://queues.webkit.org/results/13769075</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715874</commentid>
    <comment_count>11</comment_count>
      <attachid>163077</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-10 02:55:54 -0700</bug_when>
    <thetext>Created attachment 163077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715877</commentid>
    <comment_count>12</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-10 02:56:47 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 162221 [details])
&gt; Rejecting attachment 162221 [details] from commit-queue.
&gt; 
&gt; New failing tests:
&gt; http/tests/misc/window-open-then-write.html
&gt; Full output: http://queues.webkit.org/results/13769075

Reintroduced hack to fix test timeout.  Marked as FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715910</commentid>
    <comment_count>13</comment_count>
      <attachid>163077</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-10 04:07:32 -0700</bug_when>
    <thetext>Comment on attachment 163077
Patch

Attachment 163077 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13806305

New failing tests:
http/tests/media/media-source/seek-to-end-after-duration-change.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716181</commentid>
    <comment_count>14</comment_count>
      <attachid>163077</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-10 09:54:02 -0700</bug_when>
    <thetext>Comment on attachment 163077
Patch

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

There&apos;s some more polishing that we could do on this patch, but I&apos;d like to get this landed.  We can iterate after landing it.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:379
&gt; +        V8DOMWindowShell* isolatedWorldShell = getOrCreateIsolatedWorldContext(worldID, extensionGroup);

nit: getOrCreateIsolatedWorldContext -&gt; ensureIsolatedWindowShell(worldID, extensionGroup) ?

We typically use the word &quot;ensure&quot; to mean &quot;get or create&quot;.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:470
&gt; -    v8::Handle&lt;v8::Context&gt; v8Context = ScriptController::mainWorldContext(frame);
&gt; +    v8::Handle&lt;v8::Context&gt; v8Context = mainWorldContext(frame);

I&apos;d change the type of this handle to Local to document that it is a local handle.

&gt; Source/WebCore/bindings/v8/ScriptController.h:72
&gt; +    // FIXME: Replace existingWindowShell with existingWindowShellInternal see comment in V8DOMWindowShell::initializeIfNeeded.
&gt; +    ScriptController* existingWindowShell(DOMWrapperWorld*) { return this; }

Why does existingWindowShell return a ScriptController* rather than a V8DOMWindowShell* ?

&gt; Source/WebCore/bindings/v8/ScriptController.h:201
&gt; +    typedef HashMap&lt;int, V8DOMWindowShell*&gt; IsolatedWorldMap;

I see.  We&apos;re still using the V8 garbage collector to manage the lifetime of the V8DOMWindowShell in the case of isolated worlds...  Interesting.  I&apos;m not sure that&apos;s what we want in the long term, but I think its ok for now.

&gt; Source/WebCore/bindings/v8/SharedPersistent.h:47
&gt; +            return adoptRef(new SharedPersistent&lt;T&gt;(v8::Persistent&lt;v8::Context&gt;::New(value)));

Technically this should be v8::Persistent&lt;T&gt;::New since we don&apos;t know that T is v8::Context.

&gt; Source/WebCore/bindings/v8/SharedPersistent.h:49
&gt; +        ~SharedPersistent()

I thought we were just going to have this class hold a ScopedPersistent rather than a v8::Persistent.  That way we&apos;d get the calls to New and Dispose for free.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:181
&gt; +    return reinterpret_cast&lt;V8DOMWindowShell*&gt;(toInnerGlobalObject(v8::Context::GetEntered())-&gt;GetPointerFromInternalField(V8DOMWindow::enteredIsolatedWorldIndex));

reinterpret_cast -&gt; static_cast

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:219
&gt; +    delete reinterpret_cast&lt;V8DOMWindowShell*&gt;(parameter);

reinterpret_cast -&gt; static_cast

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.h:108
&gt; +        // This is a temporary performance optimization. Essentially,
&gt; +        // GetHiddenValue is too slow for this code path. We need to get the
&gt; +        // V8 team to add a real property to v8::Context for isolated worlds.
&gt; +        // Until then, we optimize the common case of not having any isolated
&gt; +        // worlds at all.

I&apos;d get rid of this comment.  It&apos;s not really temporary!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716185</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-10 09:55:00 -0700</bug_when>
    <thetext>Lets do one more round addressing the (minor) comments above and then lets land this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716202</commentid>
    <comment_count>16</comment_count>
      <attachid>163077</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-10 10:06:01 -0700</bug_when>
    <thetext>Comment on attachment 163077
Patch

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

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:237
&gt; +        m_context.get().MakeWeak(this, isolatedContextWeakCallback);

We should probably 0 out m_frame at this point so we don&apos;t have a dangling reference to the Frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716240</commentid>
    <comment_count>17</comment_count>
      <attachid>163077</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-10 10:33:47 -0700</bug_when>
    <thetext>Comment on attachment 163077
Patch

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

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:379
&gt;&gt; +        V8DOMWindowShell* isolatedWorldShell = getOrCreateIsolatedWorldContext(worldID, extensionGroup);
&gt; 
&gt; nit: getOrCreateIsolatedWorldContext -&gt; ensureIsolatedWindowShell(worldID, extensionGroup) ?
&gt; 
&gt; We typically use the word &quot;ensure&quot; to mean &quot;get or create&quot;.

ok

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.h:72
&gt;&gt; +    ScriptController* existingWindowShell(DOMWrapperWorld*) { return this; }
&gt; 
&gt; Why does existingWindowShell return a ScriptController* rather than a V8DOMWindowShell* ?

I&apos;ll fix that after this patch lands.  There&apos;s a weird reliance on existingWindowShell never returning a main world shell.  I think it only caused issues with one test.

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.h:201
&gt;&gt; +    typedef HashMap&lt;int, V8DOMWindowShell*&gt; IsolatedWorldMap;
&gt; 
&gt; I see.  We&apos;re still using the V8 garbage collector to manage the lifetime of the V8DOMWindowShell in the case of isolated worlds...  Interesting.  I&apos;m not sure that&apos;s what we want in the long term, but I think its ok for now.

I tried to minimize change.  For all but the worlds that are created for one call, I believe I can switch to having the lifecycle identical to that of the main window shell.

&gt;&gt; Source/WebCore/bindings/v8/SharedPersistent.h:47
&gt;&gt; +            return adoptRef(new SharedPersistent&lt;T&gt;(v8::Persistent&lt;v8::Context&gt;::New(value)));
&gt; 
&gt; Technically this should be v8::Persistent&lt;T&gt;::New since we don&apos;t know that T is v8::Context.

yep.  copy and paste failure.

&gt;&gt; Source/WebCore/bindings/v8/SharedPersistent.h:49
&gt;&gt; +        ~SharedPersistent()
&gt; 
&gt; I thought we were just going to have this class hold a ScopedPersistent rather than a v8::Persistent.  That way we&apos;d get the calls to New and Dispose for free.

This class will be deleted shortly, but I&apos;ll change it.

&gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:181
&gt;&gt; +    return reinterpret_cast&lt;V8DOMWindowShell*&gt;(toInnerGlobalObject(v8::Context::GetEntered())-&gt;GetPointerFromInternalField(V8DOMWindow::enteredIsolatedWorldIndex));
&gt; 
&gt; reinterpret_cast -&gt; static_cast

ok

&gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:219
&gt;&gt; +    delete reinterpret_cast&lt;V8DOMWindowShell*&gt;(parameter);
&gt; 
&gt; reinterpret_cast -&gt; static_cast

ok

&gt;&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:237
&gt;&gt; +        m_context.get().MakeWeak(this, isolatedContextWeakCallback);
&gt; 
&gt; We should probably 0 out m_frame at this point so we don&apos;t have a dangling reference to the Frame.

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716913</commentid>
    <comment_count>18</comment_count>
      <attachid>163295</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-11 00:40:59 -0700</bug_when>
    <thetext>Created attachment 163295
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716943</commentid>
    <comment_count>19</comment_count>
      <attachid>163301</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-11 01:43:36 -0700</bug_when>
    <thetext>Created attachment 163301
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716976</commentid>
    <comment_count>20</comment_count>
      <attachid>163301</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 02:34:52 -0700</bug_when>
    <thetext>Comment on attachment 163301
Patch

Clearing flags on attachment: 163301

Committed r128159: &lt;http://trac.webkit.org/changeset/128159&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716977</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 02:34:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162013</attachid>
            <date>2012-09-04 05:06:20 -0700</date>
            <delta_ts>2012-09-05 05:00:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95735-20120904140602.patch</filename>
            <type>text/plain</type>
            <size>67118</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NDU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGY5MWQ2M2E4ZWI2ZDAz
Njc1MDFlNWU0MWQxNzMyNDc2OWFiMmJiNy4uYzU0ZmVhNTUyMDZmODU5NjA2NGY0ODg2MjkxMmFh
YjE4ZmE4YWFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAorMjAxMi0wOS0wNCAgRGFu
IENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZW1vdmVkIFY4SXNvbGF0
ZWRDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTczNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbW92ZSBWOElzb2xhdGVkQ29udGV4dCBhbmQgbWVyZ2UgZnVuY3Rpb25hbGl0eSBpbnRvIFY4
RE9NV2luZG93U2hlbGwuCisgICAgICAgIFRoaXMgYnJpbmdzIHRoZSBWOCBpc29sYXRlZCB3b3Js
ZCBtb2RlbCBpbnRvIGNsb3NlciBhbGlnbm1lbnQgd2l0aAorICAgICAgICB0aGF0IG9mIEpTQy4K
KyAgICAgICAgCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogVXNlVjguY21ha2U6CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAo
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YTo6Z2V0Q3VycmVudFN0b3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3Jh
cHBlcldvcmxkOjpnZXRPckNyZWF0ZUlzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0RPTVdyYXBwZXJXb3JsZC5oOgorICAgICAgICAoRE9NV3JhcHBlcldvcmxkKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OlNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJGb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjbGVhckZvck5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93
U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0SXNv
bGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OnVuc2FmZUhhbmRsZVRvQ3VycmVudFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpiaW5kVG9XaW5kb3dPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRJc29sYXRlZFdvcmxkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
aW5kb3dTaGVsbDo6ZW50ZXJlZElzb2xhdGVkV29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZCk6
CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6VjhET01XaW5kb3dTaGVsbCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95VGVtcG9yYXJ5U2hlbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNvbGF0ZWRDb250ZXh0V2Vha0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4RE9NV2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVOZXdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50V3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNsZWFyRG9jdW1lbnRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpzZXRTZWN1cml0eVRva2VuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6Om5hbWVkSXRlbUFkZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4RE9NV2luZG93U2hlbGw6Om5hbWVkSXRlbVJlbW92ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBkYXRlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lu
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFY4RE9NV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XaW5kb3dTaGVsbDo6d29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dT
aGVsbDo6aXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9N
V3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpnZXRDYWNoZWRXcmFw
cGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ybGRDb250ZXh0SGFuZGxlOjpXb3JsZENvbnRleHRIYW5kbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ybGRDb250ZXh0SGFuZGxlOjphZGp1c3RlZENvbnRleHQpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
VjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4WE1MSHR0cFJlcXVlc3Q6OmNvbnN0cnVjdG9yQ2FsbGJh
Y2spOgorCiAyMDEyLTA5LTA0ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBp
bnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0gRml4IGJ1aWxkIGVycm9yIGluIE5ldHdvcmtTdGF0
ZU5vdGlmaWVyRWZsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQppbmRleCBkMDQxYzgxNjQyYjUwOGFjOWE3Y2E3
M2E1ZWFkZTU0OTBkOWNiZDRjLi45ODYyNTg4YTg5OTc4Y2U2NjFiOThkM2JlYWI4ZmEzM2JjOTVk
NjMxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Vc2VWOC5jbWFrZQpAQCAtNTcsNyArNTcsNiBAQCBMSVNUKEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKICAgICBiaW5kaW5n
cy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuY3BwCiAgICAgYmluZGluZ3MvdjgvVjhIaWRkZW5Q
cm9wZXJ0eU5hbWUuY3BwCi0gICAgYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCiAg
ICAgYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKICAgICBiaW5kaW5ncy92OC9W
OE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCiAgICAgYmluZGluZ3MvdjgvVjhPYmplY3RDb25zdHJ1
Y3Rvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwMDJhZTA4YzhjMTA1YmU2OGY2Zjg0YzliMTg4
YjI4MzcxYmI5OGUwLi5mN2I3YmMwMjVhN2UyZTdmYmI4NzhjZDVlNDVlMjExNjZkMTc3ZTkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0yMjkwLDggKzIyOTAsNiBAQAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
SGlkZGVuUHJvcGVydHlOYW1lLmgnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SXNvbGF0
ZWRDb250ZXh0LmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRl
eHQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA0ZWJlNjU0ZDBl
ODlhODEzMGUxZWQzMTliYmM0MzZmY2YyZjhiM2I5Li44OTY1MDYzMjBlNDg1Yzg1N2E1MzdkMjRh
ZTA4ODg0ZmMwNTViYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjUzMiw3ICsyNTMyLDYgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4QmluZGluZy5oIik7CiAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIlY4RE9NV3JhcHBlci5oIik7Ci0gICAgQWRkVG9JbXBsSW5jbHVkZXMo
IlY4SXNvbGF0ZWRDb250ZXh0LmgiKTsKIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkaW50ZXJm
YWNlTmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IGJkYTQ3YTVhY2RlYjllYmY3YWVk
YmQxZjNkMzNjZjlkMTU0ZjQ0MGQuLmM1OTVmNTVmMTViZmYwYTdjMmZmNDZhM2YwOGNhNmYwY2Rh
MGVkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUg
IlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4RmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAi
VjhJbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRl
IDx3dGYvRmxvYXQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zsb2F0NjRBcnJheS5oPgogI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5k
ZXggZjM3MzNlZmZhNDVhN2ZhNDc4ZjYzM2ViNzEzZGMyZGVmNWViMWZlNi4uZGZmODE3NTQ3MDYy
ZDQ4NjNjNDNkNWQwMjcyNDZmMWNiYTkwNmFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgi
Ci0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdl
dHRlci5jcHAKaW5kZXggODk3NWNmNjMyNWUyMDZlMzcwODYyNDMzOWM4ZTMyYWRmN2YxMGRjYi4u
MzFkMmY2NzNkNTc2NWE3ZjZjYzM3MGZjOGY5MDdjZTQxNjMzNDlkOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUg
IlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVk
ZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBmZTNlYjRmZmYwNTA2OGY0MGQyYzc1YjUxMTEx
MTI1NjQxMDE1ZTEyLi40NTAyOWI1NTk5ODgxNDdjMGE5Mjg3Y2I4ODEyZWY2ZjE2NTlhOTdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAj
aW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5o
IgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0
LmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDE5NDBkN2RiZGJlYTg0MjJkN2M2M2U4MWM4
YWExNGQzOGUyOGU0MGIuLjA3OWIxNGFlYTQxNDkzZTBhZmQxODk0YTNkNjdkNzA2YjM2ODYwZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUg
IlY4Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4
RXZlbnQuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9k
ZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3Bw
CmluZGV4IDkzNzVjZTMxMDYzOTQ0NjQwYzViMGY2Zjc3MWJhMTgwOTM4NjkzMDUuLjNmNzJkNmM1
YTRhYmY0NjYyYmNjY2NjMzA1MmFhYzRlN2FkNWY2MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3Bw
CkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1
ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggMDA5OGQ1ZWIw
Yjg0OGQ2ODE2NjFiMDM1OWQ5YThjMzAzNTgyODdhOS4uNjFmZWI0MDFmMDU5MTJkODFlZDBiYTU2
NDIyYTdlN2VmM2U5NTQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTMxLDcgKzMxLDYg
QEAKICNpbmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQu
aCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFRlc3RPYmouaCIKICNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5jcHAKaW5kZXggYWMxMTY3OTk4ZDA4Yzc1ZDQ2Zjg3NjAxOWM3ODllNDdlMmNiN2EzZi4uOGRi
ODVkM2YzOGYwMDY3MTY3OTM5OTdjYWI3MDFkODFlMGZjYTZlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNp
bmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgog
I2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggN2E3NGY1ODI3OTJhODE2ODFlNDIy
ZWNkZWFkNDViMTY0ZmNjODE3OS4uYjUwNWU4OGY5NzZlNzZhZTA2NzkzMWZkODUxNmFhNzVjZTI4
ODVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMjgsNyArMjgs
NiBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVk
Q29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0Tm9kZS5jcHAKaW5kZXggNWFiMTc3ZGRkNWYwOTFiZDM2MWFlMGFkZWUwM2FjNWUw
NjJlODUxMy4uMzJmM2NiMjA0OGVhNzRhZmRkZGE0NWVhNzRmN2RiOTMzODcxMzgwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RO
b2RlLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIK
LSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDM3ZDczOTM5MzQ0ZmM3
YTAwOWI3MTZlNzIzYzI3M2MxNzdmNDJhZGMuLmExYmY1MTQzMjFjMjk2ZTI4N2RkZTA1Yjg1MGVh
YWE1ZDBjMWNiMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiVjhE
T01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgogI2luY2x1ZGUgIlY4RmxvYXQz
MkFycmF5LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOFNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiVjhTVkdQb2ludC5oIgogI2luY2x1ZGUgIlY4U2NyaXB0
UHJvZmlsZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmNwcAppbmRleCBhZThkMThkNDVjZmRjNWFjNDlhM2FkZGJjNDFmNGNmNTJi
OWFkZWFlLi5jY2RkNjM4ZmU4ZDY1NWI3ZTZjYzY3YTNjNjljZDE1ZTcyMzM5ZWI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgog
I2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1
ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgogI2lu
Y2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAppbmRleCAxYTYzYzJmMmJkZmU4YTY4
ZGUyNmJiOTY2M2UyZWQ5Y2NkZGQ5MWE4Li5hZjUwYTFlY2EzYWIyMTU4MWFiZDY0YWEwMGZmNWFm
MzM4Y2JiOTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcApAQCAtMzEs
NyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTURhdGEuaCIKICNp
bmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmgiCiAjaW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKIApAQCAtNDMsNyArNDMs
NyBAQCBET01EYXRhU3RvcmUmIERPTURhdGE6OmdldEN1cnJlbnRTdG9yZSh2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6
Y3VycmVudChpc29sYXRlKTsKICAgICBpZiAoVU5MSUtFTFkoZGF0YS0+ZG9tRGF0YVN0b3JlKCkg
IT0gMCkpCiAgICAgICAgIHJldHVybiAqZGF0YS0+ZG9tRGF0YVN0b3JlKCk7Ci0gICAgVjhJc29s
YXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpOwor
ICAgIFY4RE9NV2luZG93U2hlbGwqIGNvbnRleHQgPSBWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRl
cmVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNvbnRleHQgIT0gMCkpCiAgICAgICAgIHJldHVybiAq
Y29udGV4dC0+d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCk7CiAgICAgcmV0dXJuIGRlZmF1bHRTdG9y
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3Js
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCmlu
ZGV4IDMxYTAyODZjNDUxZjc2N2RjZDNlYjQ0MWE3ZmU4YzEzZmNjY2IzMWYuLmZkYTYzYWI3Nzk5
MDIxMGJiOGIxYjAwYWFiY2U1NDYxN2ZiYjMwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcApAQCAtOTIsMTEgKzkyLDEzIEBAIHN0YXRpYyBp
bnQgdGVtcG9yYXJ5V29ybGRJZCA9IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXplZFdvcmxk
SWQtMTsKIAogUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IERPTVdyYXBwZXJXb3JsZDo6Z2V0
T3JDcmVhdGVJc29sYXRlZFdvcmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApCiB7
Ci0gICAgQVNTRVJUKHdvcmxkSWQgIT0gbWFpbldvcmxkSWQpOwotICAgIEFTU0VSVCh3b3JsZElk
ICE9IHVuaW5pdGlhbGl6ZWRXb3JsZElkKTsKKyAgICBpZiAod29ybGRJZCA9PSBtYWluV29ybGRJ
ZCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG1haW5U
aHJlYWROb3JtYWxXb3JsZCgpOworICAgIH0KIAogICAgIFdvcmxkTWFwJiBtYXAgPSBpc29sYXRl
ZFdvcmxkTWFwKCk7Ci0gICAgaWYgKCF3b3JsZElkKQorICAgIGlmICghd29ybGRJZCB8fCB3b3Js
ZElkID09IHVuaW5pdGlhbGl6ZWRXb3JsZElkKQogICAgICAgICB3b3JsZElkID0gdGVtcG9yYXJ5
V29ybGRJZC0tOwogICAgIGVsc2UgewogICAgICAgICBXb3JsZE1hcDo6aXRlcmF0b3IgaSA9IG1h
cC5maW5kKHdvcmxkSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NV3JhcHBlcldvcmxkLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVy
V29ybGQuaAppbmRleCAwMTEyNWI3ZjM0YjliNTA3MWRiMjZkZTUwNjE1NGM0OWRkMGM0NmI0Li40
NjdjMzIyZmJmMGJjNDE2MDQxM2ZjNjNmZGNjMmU4NGJhOWQ5NzFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaApAQCAtNDEsMTAgKzQxLDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoaXMgY2xhc3MgcmVwcmVzZW50IGEgY29sbGVjdGlvbiBv
ZiBET00gd3JhcHBlcnMgZm9yIGEgc3BlY2lmaWMgd29ybGQuCiBjbGFzcyBET01XcmFwcGVyV29y
bGQgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0IGludCBtYWluV29ybGRJZCA9IC0xOwotICAgIHN0YXRpYyBjb25zdCBpbnQgbWFpbldvcmxk
RXh0ZW5zaW9uR3JvdXAgPSAtMTsKLSAgICBzdGF0aWMgY29uc3QgaW50IHVuaW5pdGlhbGl6ZWRX
b3JsZElkID0gLTI7Ci0gICAgc3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxpemVkRXh0ZW5zaW9u
R3JvdXAgPSAtMjsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1haW5Xb3JsZElkID0gMDsKKyAgICBz
dGF0aWMgY29uc3QgaW50IG1haW5Xb3JsZEV4dGVuc2lvbkdyb3VwID0gMDsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IHVuaW5pdGlhbGl6ZWRXb3JsZElkID0gLTE7CisgICAgc3RhdGljIGNvbnN0IGlu
dCB1bmluaXRpYWxpemVkRXh0ZW5zaW9uR3JvdXAgPSAtMTsKICAgICAvLyBJZiAwIGlzIHBhc3Nl
ZCBhcyB3b3JsZElkLCB0aGUgd29ybGQgd2lsbCBiZSBhc3NpZ25lZCBhIHRlbXBvcmFyeSBpZCBp
bnN0ZWFkLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gZ2V0T3JDcmVh
dGVJc29sYXRlZFdvcmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogICAgIHN0
YXRpYyBib29sIGlzb2xhdGVkV29ybGRzRXhpc3QoKSB7IHJldHVybiBpc29sYXRlZFdvcmxkQ291
bnQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5j
cHAKaW5kZXggMjZiMTIzNzI4NmQ4MTlkMDk5MGEyNGRiNzllMzU1NjhhZDIzOWFjMy4uNjc4OGU5
YWNjNGI0YTg1NjFhM2Y4MTQ4NGRjYjgyYzQ1ODE3YzI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTYyLDcgKzYyLDYgQEAKICNp
bmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1l
LmgiCiAjaW5jbHVkZSAiVjhIVE1MRW1iZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRl
ZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5QT2JqZWN0LmgiCiAjaW5jbHVkZSAiVjhSZWN1cnNp
b25TY29wZS5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpAQCAtMTEwLDcgKzEwOSw3IEBAIGJvb2wg
U2NyaXB0Q29udHJvbGxlcjo6Y2FuQWNjZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1l
KQogU2NyaXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAgICAg
OiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9zb3VyY2VVUkwoMCkKLSAgICAsIG1fd2luZG93U2hl
bGwoVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKGZyYW1lKSkKKyAgICAsIG1fd2luZG93U2hlbGwo
VjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKGZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkp
CiAgICAgLCBtX3BhdXNlZChmYWxzZSkKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ICAgICAsIG1fd3JhcHBlZFdpbmRvd1NjcmlwdE5QT2JqZWN0KDApCkBAIC0xMjAsNiArMTE5LDgg
QEAgU2NyaXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAKIFNj
cmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKIHsKKyAgICBmb3IgKElzb2xhdGVk
V29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKTsgKytpdGVyKQorICAgICAgICBpdGVyLT5zZWNvbmQt
PmRlc3Ryb3lHbG9iYWwoKTsKICAgICB3aW5kb3dTaGVsbCgpLT5kZXN0cm95R2xvYmFsKCk7CiAg
ICAgY2xlYXJGb3JDbG9zZSgpOwogfQpAQCAtMTUzLDI3ICsxNTQsMjMgQEAgdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogI2VuZGlmCiB9CiAKLXZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6cmVzZXRJc29sYXRlZFdvcmxkcygpCi17Ci0gICAgZm9yIChJc29sYXRlZFdv
cmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOwotICAgICAg
ICAgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaXRl
ci0+c2Vjb25kLT5kZXN0cm95KCk7Ci0gICAgfQotICAgIG1faXNvbGF0ZWRXb3JsZHMuY2xlYXIo
KTsKLSAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuY2xlYXIoKTsKLX0KLQogdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhckZvckNsb3NlKCkKIHsKLSAgICByZXNldElzb2xhdGVk
V29ybGRzKCk7CiAgICAgVjhHQ0NvbnRyb2xsZXI6OmhpbnRGb3JDb2xsZWN0R2FyYmFnZSgpOwor
ICAgIGZvciAoSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3Js
ZHMuYmVnaW4oKTsgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpCisgICAg
ICAgIGl0ZXItPnNlY29uZC0+Y2xlYXJGb3JDbG9zZSgpOworICAgIG1faXNvbGF0ZWRXb3JsZHMu
Y2xlYXIoKTsKKyAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuY2xlYXIoKTsKICAg
ICB3aW5kb3dTaGVsbCgpLT5jbGVhckZvckNsb3NlKCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKIHsKLSAgICByZXNldElzb2xhdGVkV29ybGRzKCk7
CiAgICAgVjhHQ0NvbnRyb2xsZXI6OmhpbnRGb3JDb2xsZWN0R2FyYmFnZSgpOworICAgIGZvciAo
SXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuYmVnaW4o
KTsgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGl0ZXIt
PnNlY29uZC0+Y2xlYXJGb3JOYXZpZ2F0aW9uKCk7CisgICAgbV9pc29sYXRlZFdvcmxkcy5jbGVh
cigpOworICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5jbGVhcigpOwogICAgIHdp
bmRvd1NoZWxsKCktPmNsZWFyRm9yTmF2aWdhdGlvbigpOwogfQogCkBAIC0zMjQsNTAgKzMyMSw3
NyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRT
b3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogICAgIHJldHVybiBTY3JpcHRWYWx1ZShvYmplY3QpOwog
fQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2ln
bmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgVmVj
dG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cykKK1Bhc3NSZWZQdHI8VjhET01XaW5kb3dTaGVsbD4g
U2NyaXB0Q29udHJvbGxlcjo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29y
bGRJZCwgaW50IGV4dGVuc2lvbkdyb3VwKQogewotICAgIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KHdvcmxkSUQsIHNvdXJjZXMsIDAsIHJlc3VsdHMpOworICAgIGlmIChVTkxJS0VMWSh3b3JsZElk
ID09IERPTVdyYXBwZXJXb3JsZDo6bWFpbldvcmxkSWQpKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbV93aW5kb3dTaGVsbDsKKyAgICB9CisKKyAgICAv
LyBDaGVjayB0aGUgbWFwIGZvciBub24tdGVtcG9yYXJ5IHdvcmxkcy4KKyAgICBpZiAod29ybGRJ
ZCAhPSBET01XcmFwcGVyV29ybGQ6OnVuaW5pdGlhbGl6ZWRXb3JsZElkKSB7CisgICAgICAgIElz
b2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29y
bGRJZCk7CisgICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQtPndvcmxkKCktPndvcmxkSWQoKSA9PSB3b3Js
ZElkKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQtPndvcmxkKCktPmV4dGVuc2lv
bkdyb3VwKCkgPT0gZXh0ZW5zaW9uR3JvdXApOworICAgICAgICAgICByZXR1cm4gaXRlci0+c2Vj
b25kOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29y
bGQgPSBET01XcmFwcGVyV29ybGQ6OmdldE9yQ3JlYXRlSXNvbGF0ZWRXb3JsZCh3b3JsZElkLCBl
eHRlbnNpb25Hcm91cCk7CisgICAgUmVmUHRyPFY4RE9NV2luZG93U2hlbGw+IGlzb2xhdGVkV29y
bGRTaGVsbCA9IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZShtX2ZyYW1lLCB3b3JsZCk7CisgICAg
bV9pc29sYXRlZFdvcmxkcy5zZXQod29ybGQtPndvcmxkSWQoKSwgaXNvbGF0ZWRXb3JsZFNoZWxs
LmdldCgpKTsKKyAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZFNoZWxsLnJlbGVhc2UoKTsKIH0KIAot
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3
b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRl
bnNpb25Hcm91cCwgVmVjdG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cykKK1Y4RE9NV2luZG93U2hl
bGwqIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCkKIHsKLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgaWYgKFVO
TElLRUxZKCF3b3JsZCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbmVlZCB0byBnZXQg
cmVvcmdhbml6ZWQgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3
b3JsZC4KLSAgICBpZiAoIXdpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKExJS0VMWSh3b3JsZC0+aXNNYWluV29ybGQoKSkpCisgICAg
ICAgIHJldHVybiBtX3dpbmRvd1NoZWxsLmdldCgpOwogCisgICAgSXNvbGF0ZWRXb3JsZE1hcDo6
aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZC0+d29ybGRJZCgpKTsK
KyAgICByZXR1cm4gaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpID8gMCA6IGl0ZXItPnNl
Y29uZC5nZXQoKTsKK30KKworVjhET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6d2lu
ZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKK3sKKyAgICBWOERPTVdpbmRvd1NoZWxs
KiBzaGVsbCA9IGV4aXN0aW5nV2luZG93U2hlbGwod29ybGQpOworICAgIGlmIChMSUtFTFkoISFz
aGVsbCkpCisgICAgICAgIHJldHVybiBzaGVsbDsKKworICAgIFJlZlB0cjxWOERPTVdpbmRvd1No
ZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUobV9mcmFt
ZSwgd29ybGQpOworICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxkLT53b3JsZElkKCksIGlz
b2xhdGVkV29ybGRTaGVsbC5nZXQoKSk7CisgICAgcmV0dXJuIGlzb2xhdGVkV29ybGRTaGVsbC5n
ZXQoKTsKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3Js
ZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBp
bnQgZXh0ZW5zaW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpCit7CisgICAg
Ly8gRXhjZXB0IGluIHRoZSB0ZXN0IHJ1bm5lciwgd29ybGRJRCBzaG91bGQgYmUgbm9uIDAgYXMg
aXQgY29uZmxpY3RzIHdpdGggdGhlIG1haW5Xb3JsZElkLgorICAgIGlmIChVTkxJS0VMWSghd29y
bGRJRCkpCisgICAgICAgIHdvcmxkSUQgPSBET01XcmFwcGVyV29ybGQ6OnVuaW5pdGlhbGl6ZWRX
b3JsZElkOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4OjpMb2Nh
bDx2ODo6QXJyYXk+IHY4UmVzdWx0czsKICAgICB7CiAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBl
dmFsdWF0ZUhhbmRsZVNjb3BlOwotICAgICAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRD
b250ZXh0ID0gMDsKLSAgICAgICAgaWYgKHdvcmxkSUQgPiAwKSB7Ci0gICAgICAgICAgICBJc29s
YXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxk
SUQpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkKLSAg
ICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBpdGVyLT5zZWNvbmQ7Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29sYXRl
ZENvbnRleHQobV9mcmFtZSwgRE9NV3JhcHBlcldvcmxkOjpnZXRPckNyZWF0ZUlzb2xhdGVkV29y
bGQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNvbGF0
ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoYW5n
ZSB0aGlzIHRvIHVzaW5nIHdpbmRvdyBzaGVsbHMgdG8gbWF0Y2ggSlNDLgotICAgICAgICAgICAg
ICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxkSUQsIGlzb2xhdGVkQ29udGV4dCk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgIFJlZlB0cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxk
U2hlbGwgPSBnZXRPckNyZWF0ZUlzb2xhdGVkV29ybGRDb250ZXh0KHdvcmxkSUQsIGV4dGVuc2lv
bkdyb3VwKTsKIAorICAgICAgICBpZiAod29ybGRJRCAhPSBET01XcmFwcGVyV29ybGQ6OnVuaW5p
dGlhbGl6ZWRXb3JsZElkKSB7CiAgICAgICAgICAgICBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW5NYXA6Oml0ZXJhdG9yIHNlY3VyaXR5T3JpZ2luSXRlciA9IG1faXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2lucy5maW5kKHdvcmxkSUQpOwogICAgICAgICAgICAgaWYgKHNlY3VyaXR5T3JpZ2lu
SXRlciAhPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZW5kKCkpCi0gICAgICAgICAg
ICAgICAgaXNvbGF0ZWRDb250ZXh0LT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0
ZXItPnNlY29uZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpc29sYXRlZENvbnRl
eHQgPSBuZXcgVjhJc29sYXRlZENvbnRleHQobV9mcmFtZSwgRE9NV3JhcHBlcldvcmxkOjpnZXRP
ckNyZWF0ZUlzb2xhdGVkV29ybGQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApKTsKLSAgICAgICAg
ICAgIGlmIChpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgICAgICBkZWxldGUgaXNvbGF0ZWRDb250ZXh0OwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpc29sYXRlZFdvcmxkU2hlbGwtPnNldElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnNlY29uZCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkpOworICAg
ICAgICBpc29sYXRlZFdvcmxkU2hlbGwtPmluaXRpYWxpemVJZk5lZWRlZCgpOworICAgICAgICBp
ZiAoaXNvbGF0ZWRXb3JsZFNoZWxsLT5jb250ZXh0KCkuSXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpM
b2NhbDx2ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlZFdvcmxkU2hlbGwtPmNvbnRleHQoKSk7CiAg
ICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4dCk7CiAgICAgICAg
IHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJlc3VsdEFycmF5ID0gdjg6OkFycmF5OjpOZXcoc291cmNl
cy5zaXplKCkpOwogCkBAIC0zNzgsOCArNDAyLDEyIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNj
CiAgICAgICAgICAgICByZXN1bHRBcnJheS0+U2V0KGksIGV2YWx1YXRpb25SZXN1bHQpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKCF3b3JsZElEKQotICAgICAgICAgICAgaXNvbGF0ZWRDb250
ZXh0LT5kZXN0cm95KCk7CisgICAgICAgIC8vIE1hcmsgdGVtcG9yYXJ5IHNoZWxsIGZvciB3ZWFr
IGRlc3RydWN0aW9uLgorICAgICAgICBpZiAod29ybGRJRCA9PSBET01XcmFwcGVyV29ybGQ6OnVu
aW5pdGlhbGl6ZWRXb3JsZElkKSB7CisgICAgICAgICAgICBpbnQgYWN0dWFsV29ybGRJZCA9IGlz
b2xhdGVkV29ybGRTaGVsbC0+d29ybGQoKS0+d29ybGRJZCgpOworICAgICAgICAgICAgbV9pc29s
YXRlZFdvcmxkcy5yZW1vdmUoYWN0dWFsV29ybGRJZCk7CisgICAgICAgICAgICBpc29sYXRlZFdv
cmxkU2hlbGwtPmRlc3Ryb3lUZW1wb3JhcnlTaGVsbCgpOworICAgICAgICB9CiAKICAgICAgICAg
djhSZXN1bHRzID0gZXZhbHVhdGVIYW5kbGVTY29wZS5DbG9zZShyZXN1bHRBcnJheSk7CiAgICAg
fQpAQCAtMzk2LDcgKzQyNCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlCiAgICAgbV9pc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLnNldCh3b3JsZElELCBzZWN1cml0eU9yaWdpbik7CiAg
ICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmlu
ZCh3b3JsZElEKTsKICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQotICAg
ICAgICBpdGVyLT5zZWNvbmQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKKyAg
ICAgICAgaXRlci0+c2Vjb25kLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oc2VjdXJp
dHlPcmlnaW4pOwogfQogCiBUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5k
bGVyUG9zaXRpb24oKSBjb25zdApAQCAtNDEzLDExICs0NDEsMTEgQEAgdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpmaW5pc2hlZFdpdGhFdmVudChFdmVudCogZXZlbnQpCiAKIHY4OjpQZXJzaXN0ZW50
PHY4OjpDb250ZXh0PiBTY3JpcHRDb250cm9sbGVyOjp1bnNhZmVIYW5kbGVUb0N1cnJlbnRXb3Js
ZENvbnRleHQoKQogewotICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0
ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewotICAgICAgICBSZWZQdHI8U2hh
cmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBjb250ZXh0ID0gaXNvbGF0ZWRDb250ZXh0LT5z
aGFyZWRDb250ZXh0KCk7Ci0gICAgICAgIGlmIChtX2ZyYW1lICE9IHRvRnJhbWVJZk5vdERldGFj
aGVkKGNvbnRleHQtPmdldCgpKSkKKyAgICBpZiAoVjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRT
aGVsbCA9IFY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkgeworICAgICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGVkU2hlbGwtPmNvbnRleHQoKTsK
KyAgICAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpIHx8IG1fZnJhbWUgIT0gdG9GcmFtZUlmTm90
RGV0YWNoZWQoY29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gdjg6OlBlcnNpc3RlbnQ8djg6
OkNvbnRleHQ+KCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LT5nZXQoKTsKKyAgICAgICAgcmV0
dXJuIGNvbnRleHQ7CiAgICAgfQogICAgIHdpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRl
ZCgpOwogICAgIHJldHVybiB3aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7CkBAIC00NDcsNyArNDc1
LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpiaW5kVG9XaW5kb3dPYmplY3QoRnJhbWUqIGZy
YW1lLCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmoKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBTY3Jp
cHRDb250cm9sbGVyOjptYWluV29ybGRDb250ZXh0KGZyYW1lKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiB2OENvbnRleHQgPSBtYWluV29ybGRDb250ZXh0KGZyYW1lKTsKICAgICBpZiAo
djhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDcsMTAgKzU3NSwx
MyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyhWZWN0b3I8UmVmUHRyPERP
TVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKQogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluV29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKKyAgICBp
ZiAod29ybGQgPT0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpIHsKKyAgICAgICAgZXZhbHVhdGUo
c291cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBWZWN0b3I8U2NyaXB0U291cmNl
Q29kZT4gc291cmNlczsKICAgICBzb3VyY2VzLmFwcGVuZChzb3VyY2UpOwotICAgIC8vIEZJWE1F
OiBHZXQgYW4gSUQgZnJvbSB0aGUgd29ybGQgcGFyYW0uCi0gICAgZXZhbHVhdGVJbklzb2xhdGVk
V29ybGQoMCwgc291cmNlcywgMCk7CisgICAgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGQt
PndvcmxkSWQoKSwgc291cmNlcywgd29ybGQtPmV4dGVuc2lvbkdyb3VwKCksIDApOwogfQogCiBW
OEV4dGVuc2lvbnMmIFNjcmlwdENvbnRyb2xsZXI6OnJlZ2lzdGVyZWRFeHRlbnNpb25zKCkKQEAg
LTY1MSwxNCArNjgyLDE0IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVk
Q29udGV4dHMoVmVjdG9yPHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlCiB7CiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIGZvciAoSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7IGl0ICE9IG1faXNvbGF0ZWRXb3JsZHMu
ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4
dCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGlmICghaXNvbGF0ZWRDb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpKQorICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFdvcmxkU2hlbGwgPSBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoIWlzb2xhdGVkV29ybGRTaGVsbC0+aXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gaXNvbGF0ZWRDb250ZXh0LT5jb250
ZXh0KCk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IGlzb2xh
dGVkV29ybGRTaGVsbC0+Y29udGV4dCgpOwogICAgICAgICBpZiAodjhDb250ZXh0LklzRW1wdHko
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
djhDb250ZXh0KSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0YXRl
KiwgU2VjdXJpdHlPcmlnaW4qPihzY3JpcHRTdGF0ZSwgaXNvbGF0ZWRDb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0YXRl
KiwgU2VjdXJpdHlPcmlnaW4qPihzY3JpcHRTdGF0ZSwgaXNvbGF0ZWRXb3JsZFNoZWxsLT5pc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oKSkpOwogICAgIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDM0YzdjNjRmMzFh
MGVlYzE5MGI5NWYzNDRmNzlmY2EyMjQyYzg1YWYuLmYyNWUwNWY0ZmQ1ZWFiZGQ1ZTM5YzAyMTYw
OWI2MjYzNTQ5MzVhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRD
b250cm9sbGVyLmgKQEAgLTU3LDIwICs1Nyw4IEBAIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiBj
bGFzcyBTY3JpcHRTdGF0ZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgVjhET01XaW5k
b3dTaGVsbDsKLWNsYXNzIFY4SXNvbGF0ZWRDb250ZXh0OwogY2xhc3MgV2lkZ2V0OwogCi0vLyBO
b3RlOiBhbHRob3VnaCB0aGUgcG9pbnRlciBpcyByYXcsIHRoZSBpbnN0YW5jZSBpcyBrZXB0IGFs
aXZlIGJ5IGEgc3Ryb25nCi0vLyByZWZlcmVuY2UgdG8gdGhlIHY4IGNvbnRleHQgaXQgY29udGFp
bnMsIHdoaWNoIGlzIG5vdCBtYWRlIHdlYWsgdW50aWwgd2UKLS8vIGNhbGwgd29ybGQtPmRlc3Ry
b3koKS4KLS8vCi0vLyBGSVhNRTogV2Ugd2FudCB0byBldmVudHVhbGx5IGJlIGhvbGRpbmcgd2lu
ZG93IHNoZWxscyBpbnN0ZWFkIG9mIHRoZQotLy8gSXNvbGF0ZWRDb250ZXh0IGRpcmVjdGx5Lgot
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0ODc1Ci10eXBlZGVm
IEhhc2hNYXA8aW50LCBWOElzb2xhdGVkQ29udGV4dCo+IElzb2xhdGVkV29ybGRNYXA7Ci0KLXR5
cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiBJc29sYXRlZFdvcmxk
U2VjdXJpdHlPcmlnaW5NYXA7Ci0KIHR5cGVkZWYgV1RGOjpWZWN0b3I8djg6OkV4dGVuc2lvbio+
IFY4RXh0ZW5zaW9uczsKIAogY2xhc3MgU2NyaXB0Q29udHJvbGxlciB7CkBAIC03OCw5ICs2Niw5
IEBAIHB1YmxpYzoKICAgICBTY3JpcHRDb250cm9sbGVyKEZyYW1lKik7CiAgICAgflNjcmlwdENv
bnRyb2xsZXIoKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBldmVudHVhbGx5IHRha2Ug
RE9NV3JhcHBlcldvcmxkIGFyZ3VtZW50LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NDg3NQogICAgIFY4RE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxs
KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dTaGVsbC5nZXQoKTsgfQorICAgIFY4RE9NV2luZG93
U2hlbGwqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCopOworICAgIFY4RE9NV2luZG93U2hl
bGwqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKik7CiAKICAgICBTY3JpcHRW
YWx1ZSBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICBTY3JpcHRW
YWx1ZSBleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib29sIGZvcmNlVXNlckdl
c3R1cmUgPSBmYWxzZSk7CkBAIC0xMDUsMTIgKzkzLDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBj
YWxsZXIgbXVzdCBob2xkIGFuIGV4ZWN1dGlvbiBjb250ZXh0LgogICAgIFNjcmlwdFZhbHVlIGV2
YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKIAotICAgIC8vIEV2YWx1YXRlIEphdmFT
Y3JpcHQgaW4gYSBuZXcgaXNvbGF0ZWQgd29ybGQuIFRoZSBzY3JpcHQgZ2V0cyBpdHMgb3duCi0g
ICAgLy8gZ2xvYmFsIHNjb3BlLCBpdHMgb3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNpYyBKYXZh
U2NyaXB0IG9iamVjdHMgKFN0cmluZywKLSAgICAvLyBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0
cyBvd24gd3JhcHBlcnMgZm9yIGFsbCBET00gbm9kZXMgYW5kIERPTQotICAgIC8vIGNvbnN0cnVj
dG9ycy4KLSAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQs
IGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgVmVjdG9yPFNjcmlwdFZh
bHVlPiogcmVzdWx0cyk7Ci0KICAgICAvLyBFeGVjdXRlcyBKYXZhU2NyaXB0IGluIGFuIGlzb2xh
dGVkIHdvcmxkLiBUaGUgc2NyaXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUsCiAgICAgLy8g
aXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJp
bmcsIEFycmF5LCBhbmQgc28tb24pLAogICAgIC8vIGFuZCBpdHMgb3duIHdyYXBwZXJzIGZvciBh
bGwgRE9NIG5vZGVzIGFuZCBET00gY29uc3RydWN0b3JzLgpAQCAtMTE4LDIyICsxMDAsMTYgQEAg
cHVibGljOgogICAgIC8vIElmIGFuIGlzb2xhdGVkIHdvcmxkIHdpdGggdGhlIHNwZWNpZmllZCBJ
RCBhbHJlYWR5IGV4aXN0cywgaXQgaXMgcmV1c2VkLgogICAgIC8vIE90aGVyd2lzZSwgYSBuZXcg
d29ybGQgaXMgY3JlYXRlZC4KICAgICAvLwotICAgIC8vIElmIHRoZSB3b3JsZElEIGlzIDAsIGEg
bmV3IHdvcmxkIGlzIGFsd2F5cyBjcmVhdGVkLgorICAgIC8vIElmIHRoZSB3b3JsZElEIGlzIDAg
b3IgRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJZCwgYSBuZXcgd29ybGQgaXMg
YWx3YXlzIGNyZWF0ZWQuCiAgICAgLy8KICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiBleHRlbnNp
b25Hcm91cCBoZXJlLgotICAgIHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQg
d29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0
ZW5zaW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpOworICAgIHZvaWQgZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwLCBWZWN0b3I8U2NyaXB0VmFsdWU+
KiByZXN1bHRzKTsKIAogICAgIC8vIEFzc29jaWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQgKHNlZSBh
Ym92ZSBmb3IgZGVzY3JpcHRpb24pIHdpdGggYSBzZWN1cml0eQogICAgIC8vIG9yaWdpbi4gWE1M
SHR0cFJlcXVlc3QgaW5zdGFuY2VzIHVzZWQgaW4gdGhhdCB3b3JsZCB3aWxsIGJlIGNvbnNpZGVy
ZWQKICAgICAvLyB0byBjb21lIGZyb20gdGhhdCBvcmlnaW4sIG5vdCB0aGUgZnJhbWUncy4KICAg
ICB2b2lkIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4pOwogCi0gICAgLy8gTWFzcXVlcmFkZSAndGhpcycgYXMgdGhl
IHdpbmRvd1NoZWxsLgotICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgcHJvdmlk
ZXMgcmVhc29uYWJsZSBjb21wYXRpYmlsaXR5Ci0gICAgLy8gd2l0aCB3aGF0IEpTQyBkb2VzIGFz
IHdlbGwuCi0gICAgU2NyaXB0Q29udHJvbGxlciogd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxk
KikgeyByZXR1cm4gdGhpczsgfQotICAgIFNjcmlwdENvbnRyb2xsZXIqIGV4aXN0aW5nV2luZG93
U2hlbGwoRE9NV3JhcHBlcldvcmxkKikgeyByZXR1cm4gdGhpczsgfQotCiAgICAgLy8gQ3JlYXRl
cyBhIHByb3BlcnR5IG9mIHRoZSBnbG9iYWwgb2JqZWN0IG9mIGEgZnJhbWUuCiAgICAgdm9pZCBi
aW5kVG9XaW5kb3dPYmplY3QoRnJhbWUqLCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmplY3QqKTsK
IApAQCAtMjIwLDE5ICsxOTYsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgY29udGV4dERl
YnVnSWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogCiBwcml2YXRlOgotICAgIHZvaWQgcmVz
ZXRJc29sYXRlZFdvcmxkcygpOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxWOERP
TVdpbmRvd1NoZWxsPiA+IElzb2xhdGVkV29ybGRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1h
cDsKKworICAgIFBhc3NSZWZQdHI8VjhET01XaW5kb3dTaGVsbD4gZ2V0T3JDcmVhdGVJc29sYXRl
ZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCwgaW50IGV4dGVuc2lvbkdyb3VwKTsKIAogICAgIEZy
YW1lKiBtX2ZyYW1lOwogICAgIGNvbnN0IFN0cmluZyogbV9zb3VyY2VVUkw7CiAKLSAgICAvLyBG
b3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmUgb2YgdGhlc2UuIFNvb24gd2Ugd2lsbCBoYXZlIG9u
ZSBwZXIgRE9NV3JhcHBlcldvcmxkLgogICAgIFJlZlB0cjxWOERPTVdpbmRvd1NoZWxsPiBtX3dp
bmRvd1NoZWxsOwotCi0gICAgLy8gVGhlIGlzb2xhdGVkIHdvcmxkcyB3ZSBhcmUgdHJhY2tpbmcg
Zm9yIHRoaXMgZnJhbWUuIFdlIGhvbGQgdGhlbSBhbGl2ZQotICAgIC8vIGhlcmUgc28gdGhhdCB0
aGV5IGNhbiBiZSB1c2VkIGFnYWluIGJ5IGZ1dHVyZSBjYWxscyB0bwotICAgIC8vIGV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKCkuCiAgICAgSXNvbGF0ZWRXb3JsZE1hcCBtX2lzb2xhdGVkV29ybGRz
OwotCiAgICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luTWFwIG1faXNvbGF0ZWRXb3JsZFNl
Y3VyaXR5T3JpZ2luczsKIAogICAgIGJvb2wgbV9wYXVzZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhCaW5kaW5nLmNwcAppbmRleCBhY2QwNDNhYTUxZjBjZDQ3ZWQ5OWI2ZWI2ZjEyYTFk
NDNlNDFlYWU5Li43OTJiNmQzNGNiZjQxZWY2OTUyZTExYzdlM2YyMTU1NjA1MGFmNzg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKQEAgLTMwNSw5ICszMDUsOSBA
QCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHRvVjhDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFdvcmxkQwogCiBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0
RGF0YUZvckN1cnJlbnRXb3JsZChGcmFtZSogZnJhbWUpCiB7Ci0gICAgVjhJc29sYXRlZENvbnRl
eHQqIGlzb2xhdGVkQ29udGV4dDsKLSAgICBpZiAoVU5MSUtFTFkoISEoaXNvbGF0ZWRDb250ZXh0
ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkpKQotICAgICAgICByZXR1cm4gaXNv
bGF0ZWRDb250ZXh0LT5wZXJDb250ZXh0RGF0YSgpOworICAgIFY4RE9NV2luZG93U2hlbGwqIGlz
b2xhdGVkU2hlbGw7CisgICAgaWYgKFVOTElLRUxZKCEhKGlzb2xhdGVkU2hlbGwgPSBWOERPTVdp
bmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpKSkKKyAgICAgICAgcmV0dXJuIGlzb2xhdGVkU2hlbGwt
PnBlckNvbnRleHREYXRhKCk7CiAgICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hl
bGwoKS0+cGVyQ29udGV4dERhdGEoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAppbmRleCA0ZGZjZTcwOWFhOWQxZmMxZjgzYjE4YWQ4
MDQxMjAyYzM3MjdhYjUyLi5kYzdlZmIwNTc3ZWM3MzI2ZWNmNzIzMmQ4NDc2YmFkYzljOTIxMDQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNw
cApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk1lbW9yeVVzYWdlU3VwcG9ydC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKQEAgLTE3NSwxMyAr
MTc2LDM0IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvSW5uZXJHbG9iYWxPYmpl
Y3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKTsKIH0K
IAotUGFzc1JlZlB0cjxWOERPTVdpbmRvd1NoZWxsPiBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUo
RnJhbWUqIGZyYW1lKQorc3RhdGljIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZEZpZWxkKFY4RE9NV2lu
ZG93U2hlbGwqIHNoZWxsLCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBWOERPTVdpbmRvd1NoZWxsKGZyYW1lKSk7CisgICAgdG9Jbm5l
ckdsb2JhbE9iamVjdChjb250ZXh0KS0+U2V0UG9pbnRlckluSW50ZXJuYWxGaWVsZChWOERPTVdp
bmRvdzo6ZW50ZXJlZElzb2xhdGVkV29ybGRJbmRleCwgc2hlbGwpOwogfQogCi1WOERPTVdpbmRv
d1NoZWxsOjpWOERPTVdpbmRvd1NoZWxsKEZyYW1lKiBmcmFtZSkKK1Y4RE9NV2luZG93U2hlbGwq
IFY4RE9NV2luZG93U2hlbGw6OmVudGVyZWRJc29sYXRlZFdvcmxkQ29udGV4dCgpCit7CisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VjhET01XaW5kb3dTaGVsbCo+KHRvSW5uZXJHbG9iYWxP
YmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKSktPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxG
aWVsZChWOERPTVdpbmRvdzo6ZW50ZXJlZElzb2xhdGVkV29ybGRJbmRleCkpOworfQorCitzdGF0
aWMgdm9pZCBzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IHRhcmdldENvbnRleHQsIGludCBkZWJ1Z0lkKQoreworICAgIGNoYXIgYnVmZmVyWzMy
XTsKKyAgICBpZiAoZGVidWdJZCA9PSAtMSkKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXpl
b2YoYnVmZmVyKSwgImluamVjdGVkIik7CisgICAgZWxzZQorICAgICAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiaW5qZWN0ZWQsJWQiLCBkZWJ1Z0lkKTsKKyAgICB0YXJnZXRD
b250ZXh0LT5TZXREYXRhKHY4OjpTdHJpbmc6Ok5ldyhidWZmZXIpKTsKK30KKworUGFzc1JlZlB0
cjxWOERPTVdpbmRvd1NoZWxsPiBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUoRnJhbWUqIGZyYW1l
LCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBWOERPTVdpbmRvd1NoZWxsKGZyYW1lLCB3b3JsZCkpOworfQorCitWOERPTVdpbmRv
d1NoZWxsOjpWOERPTVdpbmRvd1NoZWxsKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxET01XcmFw
cGVyV29ybGQ+IHdvcmxkKQogICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fd29ybGQod29y
bGQpCiB7CiB9CiAKQEAgLTE5MSwxNyArMjEzLDQ4IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6
aXNDb250ZXh0SW5pdGlhbGl6ZWQoKQogICAgIHJldHVybiAhbV9jb250ZXh0LmlzRW1wdHkoKTsK
IH0KIAotdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dCgpCit2b2lkIFY4RE9N
V2luZG93U2hlbGw6OmRlc3Ryb3lUZW1wb3JhcnlTaGVsbCgpCit7CisgICAgZGlzcG9zZUNvbnRl
eHQodHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGlzb2xhdGVkQ29udGV4dFdlYWtDYWxsYmFjayh2
ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogcGFyYW1ldGVyKQoreworICAg
IFY4RE9NV2luZG93U2hlbGwqIHNoZWxsID0gcmVpbnRlcnByZXRfY2FzdDxWOERPTVdpbmRvd1No
ZWxsKj4ocGFyYW1ldGVyKTsKKyAgICBBU1NFUlQoc2hlbGwtPmhhc09uZVJlZigpKTsKKyAgICAv
LyBIYW5kbGUgd2lsbCBiZSBkaXNwb3NlZCBpbiBkZXJlZigpLgorICAgIHNoZWxsLT5kZXJlZigp
OworfQorCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0KGJvb2wgd2VhaykK
IHsKKyAgICBpZiAoVU5MSUtFTFkobV9jb250ZXh0LmdldCgpLklzV2VhaygpKSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlm
ICghbV9jb250ZXh0LmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPndpbGxSZWxlYXNlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0KCksIDApOwotICAg
ICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLQotICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IGRp
c3Bvc2luZyB0aGUgY29udGV4dCBoYXMgY3JlYXRlZCBhIGxvdCBvZgotICAgICAgICAvLyBnYXJi
YWdlLiBOb3RpZnkgVjggYWJvdXQgdGhpcyBzbyBpdCdsbCBoYXZlIGEgY2hhbmNlIG9mIGNsZWFu
aW5nCi0gICAgICAgIC8vIGl0IHVwIHdoZW4gaWRsZS4KLSAgICAgICAgYm9vbCBpc01haW5GcmFt
ZSA9IG1fZnJhbWUtPnBhZ2UoKSAmJiAobV9mcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSA9PSBt
X2ZyYW1lKTsgCi0gICAgICAgIFY4R0NGb3JDb250ZXh0RGlzcG9zZTo6aW5zdGFuY2UoKS5ub3Rp
ZnlDb250ZXh0RGlzcG9zZWQoaXNNYWluRnJhbWUpOworCisgICAgICAgIG1fZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+d2lsbFJlbGVhc2VTY3JpcHRDb250ZXh0KG1fY29udGV4dC5nZXQoKSwg
bV93b3JsZC0+d29ybGRJZCgpKTsKKworICAgICAgICBpZiAod2VhaykgeworICAgICAgICAgICAg
QVNTRVJUKCFtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKKyAgICAgICAgICAgIC8vIFRoZSBkZXJl
ZigpIGhhcHBlbnMgaW4gY2FsbGJhY2suCisgICAgICAgICAgICB0aGlzLT5yZWYoKTsKKyAgICAg
ICAgICAgIGRlc3Ryb3lHbG9iYWwoKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5nZXQoKS5NYWtl
V2Vhayh0aGlzLCBpc29sYXRlZENvbnRleHRXZWFrQ2FsbGJhY2spOworICAgICAgICB9IGVsc2Ug
eworCisgICAgICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKworICAgICAgICAgICAgLy8gSXQn
cyBsaWtlbHkgdGhhdCBkaXNwb3NpbmcgdGhlIGNvbnRleHQgaGFzIGNyZWF0ZWQgYSBsb3Qgb2YK
KyAgICAgICAgICAgIC8vIGdhcmJhZ2UuIE5vdGlmeSBWOCBhYm91dCB0aGlzIHNvIGl0J2xsIGhh
dmUgYSBjaGFuY2Ugb2YgY2xlYW5pbmcKKyAgICAgICAgICAgIC8vIGl0IHVwIHdoZW4gaWRsZS4K
KyAgICAgICAgICAgIGlmIChtX3dvcmxkLT5pc01haW5Xb3JsZCgpKSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBpc01haW5GcmFtZSA9IG1fZnJhbWUtPnBhZ2UoKSAmJiAobV9mcmFtZS0+cGFnZSgp
LT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICBWOEdDRm9yQ29udGV4
dERpc3Bvc2U6Omluc3RhbmNlKCkubm90aWZ5Q29udGV4dERpc3Bvc2VkKGlzTWFpbkZyYW1lKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fcGVyQ29udGV4dERhdGEu
Y2xlYXIoKTsKQEAgLTI4OSwxMCArMzQyLDEyIEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5p
dGlhbGl6ZUlmTmVlZGVkKCkKIAogICAgIGluaXRpYWxpemVWOElmTmVlZGVkKCk7CiAKLSAgICBt
X2NvbnRleHQuYWRvcHQoY3JlYXRlTmV3Q29udGV4dChtX2dsb2JhbC5nZXQoKSwgMCwgMCkpOwor
ICAgIG1fY29udGV4dC5hZG9wdChjcmVhdGVOZXdDb250ZXh0KG1fZ2xvYmFsLmdldCgpKSk7CiAg
ICAgaWYgKG1fY29udGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGJvb2wgaXNNYWluV29ybGQgPSBtX3dvcmxkLT5pc01haW5Xb3JsZCgpOworCiAgICAgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1f
Y29udGV4dC5nZXQoKSk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250
ZXh0KTsKIApAQCAtMzA0LDYgKzM1OSwxNSBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRp
YWxpemVJZk5lZWRlZCgpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBGbGFnIGNvbnRleHQg
YXMgaXNvbGF0ZWQuCisgICAgaWYgKCFpc01haW5Xb3JsZCkgeworICAgICAgICBWOERPTVdpbmRv
d1NoZWxsKiBtYWluV2luZG93ID0gbV9mcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCk7Cisg
ICAgICAgIG1haW5XaW5kb3ctPmluaXRpYWxpemVJZk5lZWRlZCgpOworICAgICAgICBpZiAoIW1h
aW5XaW5kb3ctPmNvbnRleHQoKS5Jc0VtcHR5KCkpCisgICAgICAgICAgICBzZXRJbmplY3RlZFNj
cmlwdENvbnRleHREZWJ1Z0lkKG1fY29udGV4dC5nZXQoKSwgbV9mcmFtZS0+c2NyaXB0KCktPmNv
bnRleHREZWJ1Z0lkKG1haW5XaW5kb3ctPmNvbnRleHQoKSkpOworICAgICAgICBzZXRJc29sYXRl
ZFdvcmxkRmllbGQodGhpcywgY29udGV4dCk7CisgICAgfQorCiAgICAgbV9wZXJDb250ZXh0RGF0
YSA9IFY4UGVyQ29udGV4dERhdGE6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmICgh
bV9wZXJDb250ZXh0RGF0YS0+aW5pdCgpKSB7CiAgICAgICAgIGRpc3Bvc2VDb250ZXh0KCk7CkBA
IC0zMTUsMjMgKzM3OSwyNiBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVJZk5l
ZWRlZCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB1cGRhdGVEb2N1bWVu
dCgpOwotCi0gICAgc2V0U2VjdXJpdHlUb2tlbigpOwotCi0gICAgaWYgKG1fZnJhbWUtPmRvY3Vt
ZW50KCkpCi0gICAgICAgIGNvbnRleHQtPkFsbG93Q29kZUdlbmVyYXRpb25Gcm9tU3RyaW5ncyht
X2ZyYW1lLT5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dFdmFsKDAs
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6U3VwcHJlc3NSZXBvcnQpKTsKLQotICAgIG1fZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ3JlYXRlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0
KCksIDAsIDApOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcuIFdlIHNob3VsZCBhY3R1
YWxseSBkbyB0aGlzIGZvciB0aGUgcHJvcGVyIHdvcmxkIG9uY2UKLSAgICAvLyB3ZSBkbyBpc29s
YXRlZCB3b3JsZHMgdGhlIFdlYkNvcmUgd2F5LgotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kaXNw
YXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCgwKTsKKyAgICBpZiAoaXNNYWluV29ybGQp
IHsKKyAgICAgICAgdXBkYXRlRG9jdW1lbnQoKTsKKyAgICAgICAgc2V0U2VjdXJpdHlUb2tlbigp
OworICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PkFsbG93Q29kZUdlbmVyYXRpb25Gcm9tU3RyaW5ncyhtX2ZyYW1lLT5kb2N1bWVudCgpLT5jb250
ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dFdmFsKDAsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6
U3VwcHJlc3NSZXBvcnQpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBVc2luZyB0aGUgZGVm
YXVsdCBzZWN1cml0eSB0b2tlbiBtZWFucyB0aGF0IHRoZSBjYW5BY2Nlc3MgaXMgYWx3YXlzCisg
ICAgICAgIC8vIGNhbGxlZCwgd2hpY2ggaXMgc2xvdy4KKyAgICAgICAgLy8gRklYTUU6IFVzZSB0
b2tlbnMgd2hlcmUgcG9zc2libGUuIFRoaXMgd2lsbCBtZWFuIGtlZXBpbmcgdHJhY2sgb2YgYWxs
CisgICAgICAgIC8vICAgICAgICBjcmVhdGVkIGNvbnRleHRzIHNvIHRoYXQgdGhleSBjYW4gYWxs
IGJlIHVwZGF0ZWQgd2hlbiB0aGUKKyAgICAgICAgLy8gICAgICAgIGRvY3VtZW50IGRvbWFpbgor
ICAgICAgICAvLyAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgbV9jb250ZXh0LT5Vc2VEZWZhdWx0
U2VjdXJpdHlUb2tlbigpOworICAgIH0KKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkt
PmRpZENyZWF0ZVNjcmlwdENvbnRleHQobV9jb250ZXh0LmdldCgpLCBtX3dvcmxkLT5leHRlbnNp
b25Hcm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVOZXdD
b250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBpbnQgZXh0ZW5zaW9uR3JvdXAs
IGludCB3b3JsZElkKQordjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4RE9NV2luZG93U2hl
bGw6OmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwpCiB7CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHJlc3VsdDsKIApAQCAtMzU5LDYgKzQyNiw4
IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVO
ZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iCiAgICAgY29uc3QgVjhFeHRlbnNpb25zJiBleHRl
bnNpb25zID0gU2NyaXB0Q29udHJvbGxlcjo6cmVnaXN0ZXJlZEV4dGVuc2lvbnMoKTsKICAgICBP
d25BcnJheVB0cjxjb25zdCBjaGFyKj4gZXh0ZW5zaW9uTmFtZXMgPSBhZG9wdEFycmF5UHRyKG5l
dyBjb25zdCBjaGFyKltleHRlbnNpb25zLnNpemUoKV0pOwogICAgIGludCBpbmRleCA9IDA7Cisg
ICAgaW50IGV4dGVuc2lvbkdyb3VwID0gbV93b3JsZC0+ZXh0ZW5zaW9uR3JvdXAoKTsKKyAgICBp
bnQgd29ybGRJZCA9IG1fd29ybGQtPndvcmxkSWQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgLy8gRW5zdXJlIG91ciBkYXRl
IGV4dGVuc2lvbiBpcyBhbHdheXMgYWxsb3dlZC4KICAgICAgICAgaWYgKGV4dGVuc2lvbnNbaV0g
IT0gRGF0ZUV4dGVuc2lvbjo6Z2V0KCkKQEAgLTQwNiwxMSArNDc1LDE1IEBAIGJvb2wgVjhET01X
aW5kb3dTaGVsbDo6aW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0LCBET01XaW5kCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRXcmFw
cGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcikKIHsKKyAgICBBU1NFUlQobV93b3Js
ZC0+aXNNYWluV29ybGQoKSk7CiAgICAgbV9kb2N1bWVudC5zZXQod3JhcHBlcik7CiB9CiAKIHZv
aWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRQcm9wZXJ0eSgpCiB7CisgICAgaWYg
KCFtX3dvcmxkLT5pc01haW5Xb3JsZCgpKQorICAgICAgICByZXR1cm47CisKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB1c2UgYSBuZXcg
TG9jYWwgaGFuZGxlIGhlcmU/CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSht
X2NvbnRleHQuZ2V0KCkpOwpAQCAtNDM5LDExICs1MTIsMTggQEAgdm9pZCBWOERPTVdpbmRvd1No
ZWxsOjp1cGRhdGVEb2N1bWVudFByb3BlcnR5KCkKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6Y2xl
YXJEb2N1bWVudFByb3BlcnR5KCkKIHsKICAgICBBU1NFUlQoIW1fY29udGV4dC5pc0VtcHR5KCkp
OworICAgIGlmICghbV93b3JsZC0+aXNNYWluV29ybGQoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IG1fY29udGV4dC0+R2xvYmFsKCktPkZvcmNlRGVsZXRlKHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1l
bnQiKSk7CiB9CiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6c2V0U2VjdXJpdHlUb2tlbigpCiB7
CisgICAgaWYgKCFtX3dvcmxkLT5pc01haW5Xb3JsZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIAogICAgIC8vIEFzayB0aGUgZG9jdW1lbnQncyBT
ZWN1cml0eU9yaWdpbiB0byBnZW5lcmF0ZSBhIHNlY3VyaXR5IHRva2VuLgpAQCAtNDc0LDYgKzU1
NCwxNSBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnNldFNlY3VyaXR5VG9rZW4oKQogCiB2b2lk
IFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50KCkKIHsKKyAgICBpZiAoIW1fd29ybGQt
PmlzTWFpbldvcmxkKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgcG9zc2li
bGUgYW55bW9yZS4KKyAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGlmIChtX2dsb2JhbC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQpAQCAtNDk5LDYgKzU4OCwxMSBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gcHJvcGVydHks
IGNvbnN0IHY4OjpBYwogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6Om5hbWVkSXRlbUFkZGVkKEhU
TUxEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKKyAgICBp
ZiAoIW1fd29ybGQtPmlzTWFpbldvcmxkKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIWluaXRpYWxpemVJZk5lZWRl
ZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTUxMiw2ICs2MDYsMTEgQEAgdm9pZCBWOERPTVdp
bmRvd1NoZWxsOjpuYW1lZEl0ZW1BZGRlZChIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcKIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1SZW1vdmVkKEhU
TUxEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKKyAgICBp
ZiAoIW1fd29ybGQtPmlzTWFpbldvcmxkKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoZG9jdW1lbnQtPmhhc05hbWVk
SXRlbShuYW1lLmltcGwoKSkgfHwgZG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKG5hbWUuaW1w
bCgpKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01MjgsMTAgKzYyNywzMCBAQCB2b2lkIFY4RE9N
V2luZG93U2hlbGw6Om5hbWVkSXRlbVJlbW92ZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgQXRvbWljU3RyaQogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZVNlY3VyaXR5T3Jp
Z2luKCkKIHsKKyAgICBpZiAoIW1fd29ybGQtPmlzTWFpbldvcmxkKCkpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAobV9j
b250ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKICAgICBzZXRTZWN1cml0eVRva2VuKCk7CiB9CiAKK3ZvaWQgVjhET01XaW5k
b3dTaGVsbDo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQoreworICAgIGlmIChtX3dvcmxkLT5pc01haW5Xb3Js
ZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFtX2lzb2xhdGVkV29ybGRTaGVsbFNlY3VyaXR5T3JpZ2luICYmICFj
b250ZXh0KCkuSXNFbXB0eSgpICYmIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRl
bmRzKCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgICAgICBT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2ODo6TG9j
YWw8djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dCgpKSk7CisgICAgICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkQ3JlYXRlSXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUsIHNjcmlwdFN0YXRl
LCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CisgICAgfQorICAgIG1faXNvbGF0ZWRXb3JsZFNoZWxs
U2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbjsKK30KKwogfSAvLyBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgKaW5kZXggNWVlZjI4
NmYyOGE4ZmZhZjA1YzY1MWYwNWVjYWZhZGQzZjQ0ZDRkNC4uYWJiYWYxMDk5NDc0NDNlNGRjY2Ew
MjgzNGQ3ODQxZGZmNGYzYjNhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XaW5kb3dTaGVsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuaApAQCAtMzEsNyArMzEsOSBAQAogI2lmbmRlZiBWOERPTVdpbmRvd1No
ZWxsX2gKICNkZWZpbmUgVjhET01XaW5kb3dTaGVsbF9oCiAKKyNpbmNsdWRlICJET01XcmFwcGVy
V29ybGQuaCIKICNpbmNsdWRlICJTY29wZWRQZXJzaXN0ZW50LmgiCisjaW5jbHVkZSAiU2hhcmVk
UGVyc2lzdGVudC5oIgogI2luY2x1ZGUgIlY4UGVyQ29udGV4dERhdGEuaCIKICNpbmNsdWRlICJX
cmFwcGVyVHlwZUluZm8uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDYsMTIgKzQ4
LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERPTVdpbmRvdzsKIGNsYXNzIEZyYW1l
OwogY2xhc3MgSFRNTERvY3VtZW50OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIC8vIFY4V2lu
ZG93U2hlbGwgcmVwcmVzZW50cyBhbGwgdGhlIHBlci1nbG9iYWwgb2JqZWN0IHN0YXRlIGZvciBh
IEZyYW1lIHRoYXQKIC8vIHBlcnNpc3QgYmV0d2VlbiBuYXZpZ2F0aW9ucy4KIGNsYXNzIFY4RE9N
V2luZG93U2hlbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxWOERPTVdpbmRvd1NoZWxsPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VjhET01XaW5kb3dTaGVsbD4gY3JlYXRlKEZyYW1l
Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhET01XaW5kb3dTaGVsbD4gY3JlYXRlKEZyYW1l
KiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+KTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpDb250ZXh0PiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAK
QEAgLTY4LDcgKzcxLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNDb250ZXh0SW5pdGlhbGl6ZWQo
KTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBjcmVhdGVOZXdDb250ZXh0KHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIGludCB3b3Js
ZElkKTsKLSAgICBzdGF0aWMgYm9vbCBpbnN0YWxsRE9NV2luZG93KHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQsIERPTVdpbmRvdyopOwogCiAgICAgYm9vbCBpbml0aWFsaXplSWZOZWVk
ZWQoKTsKICAgICB2b2lkIHVwZGF0ZURvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXIpOwpAQCAtODAsMTAgKzgyLDQzIEBAIHB1YmxpYzoKIAogICAgIFY4UGVyQ29u
dGV4dERhdGEqIHBlckNvbnRleHREYXRhKCkgeyByZXR1cm4gbV9wZXJDb250ZXh0RGF0YS5nZXQo
KTsgfQogCisgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0
KCk7IH0KKworICAgIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+KTsKKyAgICBTZWN1cml0eU9yaWdpbiogaXNvbGF0ZWRXb3JsZFNl
Y3VyaXR5T3JpZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV93b3JsZC0+aXNN
YWluV29ybGQoKSk7CisgICAgICAgIHJldHVybiBtX2lzb2xhdGVkV29ybGRTaGVsbFNlY3VyaXR5
T3JpZ2luLmdldCgpOworICAgIH07CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpc29sYXRlZCB3b3Js
ZCBhc3NvY2lhdGVkIHdpdGgKKyAgICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpLiBCZWNh
dXNlIHdvcmxkcyBhcmUgaXNvbGF0ZWQsIHRoZSBlbnRpcmUKKyAgICAvLyBKYXZhU2NyaXB0IGNh
bGwgc3RhY2sgc2hvdWxkIGJlIGZyb20gdGhlIHNhbWUgaXNvbGF0ZWQgd29ybGQuCisgICAgLy8g
UmV0dXJucyAwIGlmIHRoZSBlbnRlcmVkIGNvbnRleHQgaXMgZnJvbSB0aGUgbWFpbiB3b3JsZC4K
KyAgICAvLworICAgIC8vIEZJWE1FOiBDb25zaWRlciBlZGdlIGNhc2VzIHdpdGggRE9NIG11dGF0
aW9uIGV2ZW50cyB0aGF0IG1pZ2h0CisgICAgLy8gdmlvbGF0ZSB0aGlzIGludmFyaWFudC4KKyAg
ICAvLworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHBvb3JseSBuYW1lZCBhZnRlciB0aGUgZGVsZXRp
b24gb2YgaXNvbGF0ZWQgY29udGV4dHMuCisgICAgc3RhdGljIFY4RE9NV2luZG93U2hlbGwqIGdl
dEVudGVyZWQoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBwZXJmb3Jt
YW5jZSBvcHRpbWl6YXRpb24uIEVzc2VudGlhbGx5LAorICAgICAgICAvLyBHZXRIaWRkZW5WYWx1
ZSBpcyB0b28gc2xvdyBmb3IgdGhpcyBjb2RlIHBhdGguIFdlIG5lZWQgdG8gZ2V0IHRoZQorICAg
ICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJlYWwgcHJvcGVydHkgdG8gdjg6OkNvbnRleHQgZm9y
IGlzb2xhdGVkIHdvcmxkcy4KKyAgICAgICAgLy8gVW50aWwgdGhlbiwgd2Ugb3B0aW1pemUgdGhl
IGNvbW1vbiBjYXNlIG9mIG5vdCBoYXZpbmcgYW55IGlzb2xhdGVkCisgICAgICAgIC8vIHdvcmxk
cyBhdCBhbGwuCisgICAgICAgIGlmICghRE9NV3JhcHBlcldvcmxkOjppc29sYXRlZFdvcmxkc0V4
aXN0KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCF2ODo6Q29udGV4dDo6
SW5Db250ZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGVudGVy
ZWRJc29sYXRlZFdvcmxkQ29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZGVzdHJveVRlbXBv
cmFyeVNoZWxsKCk7CiBwcml2YXRlOgotICAgIFY4RE9NV2luZG93U2hlbGwoRnJhbWUqKTsKKyAg
ICBWOERPTVdpbmRvd1NoZWxsKEZyYW1lKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+KTsK
IAotICAgIHZvaWQgZGlzcG9zZUNvbnRleHQoKTsKKyAgICB2b2lkIGRpc3Bvc2VDb250ZXh0KGJv
b2wgd2VhayA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2VjdXJpdHlUb2tlbigpOwogCkBAIC05
NCwxMyArMTI5LDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVEb2N1bWVudFByb3BlcnR5
KCk7CiAgICAgdm9pZCBjbGVhckRvY3VtZW50UHJvcGVydHkoKTsKIAorICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpDb250ZXh0PiBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Z2xvYmFsKTsKKyAgICBib29sIGluc3RhbGxET01XaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4sIERPTVdpbmRvdyopOworCisgICAgc3RhdGljIFY4RE9NV2luZG93U2hlbGwqIGVudGVyZWRJ
c29sYXRlZFdvcmxkQ29udGV4dCgpOworCiAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4gbV93b3JsZDsKIAogICAgIE93blB0cjxWOFBlckNvbnRleHREYXRh
PiBtX3BlckNvbnRleHREYXRhOwogCiAgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4g
bV9jb250ZXh0OwogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9nbG9iYWw7CiAg
ICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2RvY3VtZW50OworCisgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX2lzb2xhdGVkV29ybGRTaGVsbFNlY3VyaXR5T3JpZ2luOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaAppbmRleCA0ZTU2NGEzNGJhNTkwODg4ZjMxY2EyNWQyODAzNjcxZjFmMmY5NWIy
Li4wZTVjYjI4MzQwMjQxMTRhNTZjNThlZDYyOGQ3ZDgzNWY5ZWJlOTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
aCIKICNpbmNsdWRlICJWOERPTU1hcC5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0Lmgi
CisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCiAjaW5jbHVkZSA8djguaD4KQEAgLTEzMCw3
ICsxMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAqd3JhcHBlcjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVjhJc29sYXRlZENvbnRl
eHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpOworICAgICAgICAg
ICAgVjhET01XaW5kb3dTaGVsbCogY29udGV4dCA9IFY4RE9NV2luZG93U2hlbGw6OmdldEVudGVy
ZWQoKTsKICAgICAgICAgICAgIGlmIChMSUtFTFkoIWNvbnRleHQpKSB7CiAgICAgICAgICAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHdyYXBwZXIgPSBub2RlLT53cmFwcGVyKCk7
CiAgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5OGY4ZWM5MTg5MzY1NDczYzU3OTBjNDE3Y2NmZDk3Njk4ODJkNjhiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIK
LQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNp
bmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgotI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiVjhQZXJDb250ZXh0
RGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1WOElzb2xhdGVkQ29udGV4dCogVjhJc29sYXRlZENvbnRleHQ6Omlzb2xhdGVkQ29u
dGV4dCgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VjhJc29sYXRlZENvbnRleHQq
PihnZXRHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKSktPkdldFBvaW50ZXJG
cm9tSW50ZXJuYWxGaWVsZChWOERPTVdpbmRvdzo6ZW50ZXJlZElzb2xhdGVkV29ybGRJbmRleCkp
OwotfQotCi12b2lkIFY4SXNvbGF0ZWRDb250ZXh0Ojpjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxi
YWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRlZENvbnRl
eHQpCi17Ci0gICAgLy8gT3VyIGNvbnRleHQgaXMgZ29pbmcgYXdheS4gIFRpbWUgdG8gY2xlYW4g
dXAgdGhlIHdvcmxkLgotICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nh
c3Q8VjhJc29sYXRlZENvbnRleHQqPihpc29sYXRlZENvbnRleHQpOwotICAgIGRlbGV0ZSBjb250
ZXh0OwotfQotCi1zdGF0aWMgdm9pZCBzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IHRhcmdldENvbnRleHQsIGludCBkZWJ1Z0lkKQotewotICAg
IGNoYXIgYnVmZmVyWzMyXTsKLSAgICBpZiAoZGVidWdJZCA9PSAtMSkKLSAgICAgICAgc25wcmlu
dGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgImluamVjdGVkIik7Ci0gICAgZWxzZQotICAgICAg
ICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiaW5qZWN0ZWQsJWQiLCBkZWJ1Z0lk
KTsKLSAgICB0YXJnZXRDb250ZXh0LT5TZXREYXRhKHY4OjpTdHJpbmc6Ok5ldyhidWZmZXIpKTsK
LX0KLQotVjhJc29sYXRlZENvbnRleHQ6OlY4SXNvbGF0ZWRDb250ZXh0KEZyYW1lKiBmcmFtZSwg
UGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkKQotICAgIDogbV93b3JsZCh3b3JsZCks
Ci0gICAgICBtX2ZyYW1lKGZyYW1lKQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBtYWluV29ybGRDb250ZXh0ID0gZnJhbWUtPnNjcmlw
dCgpLT53aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7Ci0gICAgaWYgKG1haW5Xb3JsZENvbnRleHQu
SXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJl
IGNyZWF0aW5nIGEgbmV3IFY4RE9NV2luZG93U2hlbGwgaGVyZSBpbnN0ZWFkIG9mIHJpcGluZyBv
dXQgdGhlIGNvbnRleHQuCi0gICAgbV9jb250ZXh0ID0gU2hhcmVkUGVyc2lzdGVudDx2ODo6Q29u
dGV4dD46OmNyZWF0ZShmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmNyZWF0ZU5ld0Nv
bnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBtX3dvcmxkLT5leHRlbnNpb25Hcm91cCgp
LCBtX3dvcmxkLT53b3JsZElkKCkpKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXQoKS5Jc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJ1biBjb2RlIGluIHRoZSBuZXcgY29udGV4
dC4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dC0+Z2V0KCkp
OwotCi0gICAgc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZChtX2NvbnRleHQtPmdldCgp
LCBTY3JpcHRDb250cm9sbGVyOjpjb250ZXh0RGVidWdJZChtYWluV29ybGRDb250ZXh0KSk7Ci0K
LSAgICBnZXRHbG9iYWxPYmplY3QobV9jb250ZXh0LT5nZXQoKSktPlNldFBvaW50ZXJJbkludGVy
bmFsRmllbGQoVjhET01XaW5kb3c6OmVudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgsIHRoaXMpOwot
Ci0gICAgbV9wZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4dERhdGE6OmNyZWF0ZShtX2NvbnRl
eHQtPmdldCgpKTsKLSAgICBtX3BlckNvbnRleHREYXRhLT5pbml0KCk7Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyB3aWxsIGdvIGF3YXkgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBp
c29sYXRlZCB3b3JsZC4KLSAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmluc3Rh
bGxET01XaW5kb3cobV9jb250ZXh0LT5nZXQoKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2lu
ZG93KCkpOwotCi0gICAgLy8gVXNpbmcgdGhlIGRlZmF1bHQgc2VjdXJpdHkgdG9rZW4gbWVhbnMg
dGhhdCB0aGUgY2FuQWNjZXNzIGlzIGFsd2F5cwotICAgIC8vIGNhbGxlZCwgd2hpY2ggaXMgc2xv
dy4KLSAgICAvLyBGSVhNRTogVXNlIHRva2VucyB3aGVyZSBwb3NzaWJsZS4gVGhpcyB3aWxsIG1l
YW4ga2VlcGluZyB0cmFjayBvZiBhbGwKLSAgICAvLyAgICAgICAgY3JlYXRlZCBjb250ZXh0cyBz
byB0aGF0IHRoZXkgY2FuIGFsbCBiZSB1cGRhdGVkIHdoZW4gdGhlCi0gICAgLy8gICAgICAgIGRv
Y3VtZW50IGRvbWFpbgotICAgIC8vICAgICAgICBjaGFuZ2VzLgotICAgIG1fY29udGV4dC0+Z2V0
KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7Ci0KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
Y2xpZW50KCktPmRpZENyZWF0ZVNjcmlwdENvbnRleHQoY29udGV4dCgpLCBtX3dvcmxkLT5leHRl
bnNpb25Hcm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwotfQotCi12b2lkIFY4SXNvbGF0ZWRD
b250ZXh0OjpkZXN0cm95KCkKLXsKLSAgICBtX3BlckNvbnRleHREYXRhLmNsZWFyKCk7Ci0gICAg
bV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT53aWxsUmVsZWFzZVNjcmlwdENvbnRleHQoY29u
dGV4dCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwotICAgIG1fY29udGV4dC0+Z2V0KCkuTWFrZVdl
YWsodGhpcywgJmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2spOwotICAgIG1fZnJhbWUgPSAw
OwotfQotCi1WOElzb2xhdGVkQ29udGV4dDo6flY4SXNvbGF0ZWRDb250ZXh0KCkKLXsKLSAgICBt
X2NvbnRleHQtPmRpc3Bvc2VIYW5kbGUoKTsKLX0KLQotdm9pZCBWOElzb2xhdGVkQ29udGV4dDo6
c2V0U2VjdXJpdHlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmln
aW4pCi17Ci0gICAgaWYgKCFtX3NlY3VyaXR5T3JpZ2luICYmIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aGFzRnJvbnRlbmRzKCkgJiYgIWNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKLSAgICAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpO
ZXcoY29udGV4dCgpKSk7Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3Jl
YXRlSXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUsIHNjcmlwdFN0YXRlLCBzZWN1cml0eU9yaWdpbi5n
ZXQoKSk7Ci0gICAgfQotICAgIG1fc2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbjsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SXNvbGF0ZWRDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMWMy
ODA3ZDY0NGRjMWZkNWRmNDc5NTMzOTUyNGZmYWZjNjFhYTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJ
c29sYXRlZENvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBW
OElzb2xhdGVkQ29udGV4dF9oCi0jZGVmaW5lIFY4SXNvbGF0ZWRDb250ZXh0X2gKLQotI2luY2x1
ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIgLy8g
Zm9yIFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGUKLSNpbmNsdWRlICJTaGFyZWRQZXJzaXN0ZW50
LmgiCi0jaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDx2OC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYW1lOwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFz
cyBWOFBlckNvbnRleHREYXRhOwotCi0vLyBWOElzb2xhdGVkQ29udGV4dAotLy8KLS8vIFY4SXNv
bGF0ZWRDb250ZXh0IHJlcHJlc2VudHMgYSBpc29sYXRlZCBleGVjdXRpb24gZW52aXJvbm1lbnQg
Zm9yCi0vLyBKYXZhU2NyaXB0LiAgRWFjaCBpc29sYXRlZCB3b3JsZCBleGVjdXRlcyBpbiBwYXJh
bGxlbCB3aXRoIHRoZSBtYWluCi0vLyBKYXZhU2NyaXB0IHdvcmxkLiAgQW4gaXNvbGF0ZWQgd29y
bGQgaGFzIGFjY2VzcyB0byB0aGUgc2FtZSBET00gZGF0YQotLy8gc3RydWN0dXJlcyBhcyB0aGUg
bWFpbiB3b3JsZCBidXQgbm9uZSBvZiB0aGUgSmF2YVNjcmlwdCBwb2ludGVycy4KLS8vCi0vLyBJ
dCBpcyBhbiBlcnJvciB0byBldmVyIHNoYXJlIGEgSmF2YVNjcmlwdCBwb2ludGVyIGJldHdlZW4g
dHdvIGlzb2xhdGVkCi0vLyB3b3JsZHMgb3IgYmV0d2VlbiBhbiBpc29sYXRlZCB3b3JsZCBhbmQg
dGhlIG1haW4gd29ybGQuICBCZWNhdXNlCi0vLyBpc29sYXRlZCB3b3JsZHMgaGF2ZSBhY2Nlc3Mg
dG8gdGhlIERPTSwgdGhleSBuZWVkIHRoZWlyIG93biBET00gd3JhcHBlcnMKLS8vIHRvIGF2b2lk
IGhhdmluZyBwb2ludGVycyB0byB0aGUgbWFpbiB3b3JsZCdzIERPTSB3cmFwcGVycyAod2hpY2gg
YXJlCi0vLyBKYXZhU2NyaXB0IG9iamVjdHMpLgotY2xhc3MgVjhJc29sYXRlZENvbnRleHQgewot
cHVibGljOgotICAgIC8vIENyZWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQuIFRvIGRlc3Ryb3kgaXQs
IGNhbGwgZGVzdHJveSgpLgotICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlzb2xhdGVkIHdv
cmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgotICAgIFY4SXNvbGF0ZWRDb250
ZXh0KEZyYW1lKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+KTsKLSAgICB+VjhJc29sYXRl
ZENvbnRleHQoKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byBkZXN0cm95IHRoZSBpc29sYXRlZCB3
b3JsZC4gSXQgd2lsbCBiZSBkZWxldGVkIHNvbWV0aW1lCi0gICAgLy8gYWZ0ZXIgdGhpcyBjYWxs
LCBvbmNlIGFsbCBzY3JpcHQgcmVmZXJlbmNlcyB0byB0aGUgd29ybGQncyBjb250ZXh0Ci0gICAg
Ly8gaGF2ZSBiZWVuIGRyb3BwZWQuCi0gICAgdm9pZCBkZXN0cm95KCk7Ci0KLSAgICAvLyBSZXR1
cm5zIHRoZSBpc29sYXRlZCB3b3JsZCBhc3NvY2lhdGVkIHdpdGgKLSAgICAvLyB2ODo6Q29udGV4
dDo6R2V0RW50ZXJlZCgpLiAgQmVjYXVzZSB3b3JsZHMgYXJlIGlzb2xhdGVkLCB0aGUgZW50aXJl
Ci0gICAgLy8gSmF2YVNjcmlwdCBjYWxsIHN0YWNrIHNob3VsZCBiZSBmcm9tIHRoZSBzYW1lIGlz
b2xhdGVkIHdvcmxkLgotICAgIC8vIFJldHVybnMgMCBpZiB0aGUgZW50ZXJlZCBjb250ZXh0IGlz
IGZyb20gdGhlIG1haW4gd29ybGQuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgZWRn
ZSBjYXNlcyB3aXRoIERPTSBtdXRhdGlvbiBldmVudHMgdGhhdCBtaWdodAotICAgIC8vIHZpb2xh
dGUgdGhpcyBpbnZhcmlhbnQuCi0gICAgLy8KLSAgICBzdGF0aWMgVjhJc29sYXRlZENvbnRleHQq
IGdldEVudGVyZWQoKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBwZXJm
b3JtYW5jZSBvcHRpbWl6YXRpb24uIEVzc2VudGlhbGx5LAotICAgICAgICAvLyBHZXRIaWRkZW5W
YWx1ZSBpcyB0b28gc2xvdyBmb3IgdGhpcyBjb2RlIHBhdGguIFdlIG5lZWQgdG8gZ2V0IHRoZQot
ICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJlYWwgcHJvcGVydHkgdG8gdjg6OkNvbnRleHQg
Zm9yIGlzb2xhdGVkIHdvcmxkcy4KLSAgICAgICAgLy8gVW50aWwgdGhlbiwgd2Ugb3B0aW1pemUg
dGhlIGNvbW1vbiBjYXNlIG9mIG5vdCBoYXZpbmcgYW55IGlzb2xhdGVkCi0gICAgICAgIC8vIHdv
cmxkcyBhdCBhbGwuCi0gICAgICAgIGlmICghRE9NV3JhcHBlcldvcmxkOjppc29sYXRlZFdvcmxk
c0V4aXN0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKCF2ODo6Q29udGV4
dDo6SW5Db250ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGlz
b2xhdGVkQ29udGV4dCgpOwotICAgIH0KLQotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNv
bnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9Ci0gICAgUGFzc1JlZlB0cjxTaGFy
ZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IHNoYXJlZENvbnRleHQoKSB7IHJldHVybiBtX2Nv
bnRleHQ7IH0KLQotICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQoKSBjb25zdCB7IHJldHVybiBt
X3dvcmxkLmdldCgpOyB9Ci0KLSAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRTZWN1
cml0eU9yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7Ci0KLSAgICBWOFBlckNvbnRl
eHREYXRhKiBwZXJDb250ZXh0RGF0YSgpIHsgcmV0dXJuIG1fcGVyQ29udGV4dERhdGEuZ2V0KCk7
IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9i
YWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRleHQtPkdsb2JhbCgpLT5H
ZXRQcm90b3R5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBnYXJiYWdlIGNv
bGxlY3RvciB3aGVuIG91ciBKYXZhU2NyaXB0IGNvbnRleHQgaXMgYWJvdXQKLSAgICAvLyB0byBi
ZSBkZXN0cm95ZWQuCi0gICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRDb250ZXh0
KTsKLQotICAgIHN0YXRpYyBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0KCk7Ci0K
LSAgICAvLyBUaGUgdW5kZXJseWluZyB2ODo6Q29udGV4dC4gVGhpcyBvYmplY3QgaXMga2VlcCBv
biB0aGUgaGVhcCBhcwotICAgIC8vIGxvbmcgYXMgfG1fY29udGV4dHwgaGFzIG5vdCBiZWVuIGdh
cmJhZ2UgY29sbGVjdGVkLgotICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0
PiA+IG1fY29udGV4dDsKLQotICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1fd29ybGQ7Ci0K
LSAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJpdHlPcmlnaW47Ci0KLSAgICBGcmFt
ZSogbV9mcmFtZTsKLQotICAgIE93blB0cjxWOFBlckNvbnRleHREYXRhPiBtX3BlckNvbnRleHRE
YXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVjhJc29sYXRl
ZENvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVu
dExpc3RlbmVyLmNwcAppbmRleCBjMWJiZGJmNzc1NmU4YjA3NTdhOGFkMDRiOTI0NDQxMWExYThh
ZTNkLi4wYjA0NmQzMzJlZDVjZTdmMTcxZDU4MDcwMmU0NGZmODY3NjJiOGNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcApAQCAt
MzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZv
cm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNv
ZGUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIK
ICNpbmNsdWRlICJWOERvY3VtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvV29ybGRDb250ZXh0SGFuZGxlLmNwcAppbmRleCA0ODhmM2I1MjdiNjgzMTQyNmI0ZjlkNDBk
NDg3MTE3MDkxNWVhMTQ4Li45NWQxMTFiM2Q5MTRkYjU3MDVhYTY3MjUwMWIyMWYyMDNlMDkwYmI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5k
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmxkQ29udGV4dEhhbmRs
ZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIK
IAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00MiwxNCArNDIsMzIgQEAgV29ybGRDb250ZXh0SGFuZGxlOjpXb3JsZENvbnRl
eHRIYW5kbGUoV29ybGRUb1VzZSB3b3JsZFRvVXNlKQogICAgIGlmICh3b3JsZFRvVXNlID09IFVz
ZU1haW5Xb3JsZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0
KiBjb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkKLSAgICAgICAgbV9j
b250ZXh0ID0gY29udGV4dC0+c2hhcmVkQ29udGV4dCgpOworICAgIFY4RE9NV2luZG93U2hlbGwq
IHNoZWxsID0gVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpOworICAgIGlmICghc2hlbGwp
IHsKKyAgICAgICAgbV93b3JsZFRvVXNlID0gVXNlTWFpbldvcmxkOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBzaGVs
bC0+Y29udGV4dCgpOworICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9jb250ZXh0ID0gU2hhcmVkUGVyc2lzdGVudDx2
ODo6Q29udGV4dD46OmNyZWF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9j
b250ZXh0ID0gU2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZSh2ODo6UGVyc2lz
dGVudDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0KSk7CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD4gV29ybGRDb250ZXh0SGFuZGxlOjphZGp1c3RlZENvbnRleHQoU2NyaXB0Q29udHJvbGxl
ciogc2NyaXB0KSBjb25zdAogewotICAgIGlmIChtX3dvcmxkVG9Vc2UgPT0gVXNlTWFpbldvcmxk
IHx8ICFtX2NvbnRleHQgfHwgbV9jb250ZXh0LT5nZXQoKS5Jc0VtcHR5KCkpCisgICAgaWYgKG1f
d29ybGRUb1VzZSA9PSBVc2VNYWluV29ybGQpCisgICAgICAgIHJldHVybiBzY3JpcHQtPm1haW5X
b3JsZENvbnRleHQoKTsKKworICAgIGlmIChtX2NvbnRleHQtPmdldCgpLklzRW1wdHkoKSkgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
cHJvYmxlbWF0aWMsIGJ1dCBhbiBlbXB0eSBjb250ZXh0IGlzIHdvcnNlLgogICAgICAgICByZXR1
cm4gc2NyaXB0LT5tYWluV29ybGRDb250ZXh0KCk7CisgICAgfQogCiAgICAgcmV0dXJuIHY4OjpM
b2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQtPmdldCgpKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcApp
bmRleCAzZWYxOWYyNTVlYjM5OTZlYTU5YTIzYTE5MDY3YTY2YTIxMWUzOGZhLi40Zjg0YjRkMzM4
ZjkxYWE0OTJmNTZmMmM1MjZiNzU5ZDA5MTA0OGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCkBAIC00NCw5ICs0
NCw5IEBACiAjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRl
ICJWOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1ZGUgIlY4RE9NSW1wbGVtZW50YXRp
b24uaCIKKyNpbmNsdWRlICJWOERPTVdpbmRvd1NoZWxsLmgiCiAjaW5jbHVkZSAiVjhET01XcmFw
cGVyLmgiCiAjaW5jbHVkZSAiVjhIVE1MRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVk
Q29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4VG91Y2guaCIKICNp
bmNsdWRlICJWOFRvdWNoTGlzdC5oIgpAQCAtMTMwLDcgKzEzMCw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KERvY3VtZW50KiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBm
b3JjZU5ld09iCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhEb2N1bWVu
dDo6d3JhcChpbXBsLCBpc29sYXRlLCBmb3JjZU5ld09iamVjdCk7CiAgICAgaWYgKHdyYXBwZXIu
SXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICBpZiAoIVY4SXNvbGF0ZWRD
b250ZXh0OjpnZXRFbnRlcmVkKCkpIHsKKyAgICBpZiAoIVY4RE9NV2luZG93U2hlbGw6OmdldEVu
dGVyZWQoKSkgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkKICAg
ICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+dXBkYXRlRG9jdW1lbnRX
cmFwcGVyKHdyYXBwZXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDNmMWNiYzFl
ZTc2OWU1MWQwMzFmMjMzZWI5ODBhZTY3NmNjNTRjZGQuLmFiMWE5NGUzN2FmZTFlOGYyNjJiNjc5
MmJlMWM4NTJmYTk4OTI1MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcApAQCAtNDAsOSArNDAsOSBA
QAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1
ZGUgIlY4RE9NV2luZG93LmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2luY2x1
ZGUgIlY4SFRNTEFsbENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOEhUTUxDb2xsZWN0aW9uLmgi
Ci0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNp
bmNsdWRlICJWOFJlY3Vyc2lvblNjb3BlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgpAQCAtMTg3LDcgKzE4Nyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhU
TUxEb2N1bWVudCogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOCiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhIVE1MRG9jdW1lbnQ6OndyYXAoaW1w
bCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgaWYgKCFWOElzb2xhdGVkQ29udGV4dDo6Z2V0
RW50ZXJlZCgpKSB7CisgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsK
ICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpCiAgICAgICAgICAgICBm
cmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFw
cGVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggNzk3ZWFhYmYwODljZjMzNjk1YzQz
NWY3ODZkMzVmNGZjZjc5MjU1MC4uZGNjNzkzNjYzZjEzNTVkYjNhY2JkNzNjMDNkNjE2NmY4YzVh
N2ExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZH
RG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIlY4
U1ZHRG9jdW1lbnQuaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRl
ZENvbnRleHQuaCIKKyNpbmNsdWRlICJWOERPTVdpbmRvd1NoZWxsLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDUsNyArNDUsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChT
VkdEb2N1bWVudCogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZQogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4U1ZHRG9jdW1lbnQ6OndyYXAoaW1w
bCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgaWYgKCFWOElzb2xhdGVkQ29udGV4dDo6Z2V0
RW50ZXJlZCgpKSB7CisgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsK
ICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpCiAgICAgICAgICAgICBm
cmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFw
cGVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCmluZGV4IGMwZTlj
NWI5MmJjMmM5ZWI1YTdhNTViYmQ0ZDUwYWUzNDE0ZTgyZDcuLjAwYzFjMjY2OWRmN2JkZTg0ZDc0
ZGU3ZWI2Njk4MzRiMDc4NjU1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3Bw
CkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiT3JpZ2luQWNjZXNzRW50cnkuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUg
IlY4SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2lu
Y2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1
ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgpAQCAtNTksOCArNTksOCBAQCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVxdWVzdDo6Y29uc3RydWN0b3JDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJgogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihSZWZlcmVuY2VF
cnJvciwgIlhNTEh0dHBSZXF1ZXN0IGNvbnN0cnVjdG9yJ3MgYXNzb2NpYXRlZCBjb250ZXh0IGlz
IG5vdCBhdmFpbGFibGUiLCBhcmdzLkdldElzb2xhdGUoKSk7CiAKICAgICBSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luOwotICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogaXNv
bGF0ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkKLSAgICAgICAg
c2VjdXJpdHlPcmlnaW4gPSBpc29sYXRlZENvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7CisgICAg
aWYgKFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkV29ybGRTaGVsbCA9IFY4RE9NV2luZG93U2hl
bGw6OmdldEVudGVyZWQoKSkKKyAgICAgICAgc2VjdXJpdHlPcmlnaW4gPSBpc29sYXRlZFdvcmxk
U2hlbGwtPmlzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbigpOwogICAgIFJlZlB0cjxYTUxIdHRw
UmVxdWVzdD4geG1sSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IHNlY3VyaXR5T3JpZ2luKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBh
cmdzLkhvbGRlcigpOwogICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCAm
aW5mbywgeG1sSHR0cFJlcXVlc3QuZ2V0KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162221</attachid>
            <date>2012-09-05 05:00:30 -0700</date>
            <delta_ts>2012-09-10 02:55:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95735-20120905140010.patch</filename>
            <type>text/plain</type>
            <size>68814</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmYzMzkxMDNlMjIxOGEz
MjRiZjIzZWJkMWFkMzZhOWYxZGE4MmNkYS4uNGMyMWQyZDcxNDI5ZDAyM2RjZDUzOWUwNjMzZTk0
NTUyNmM3NjNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wOS0wNSAgRGFu
IENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZW1vdmVkIFY4SXNvbGF0
ZWRDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTczNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbW92ZSBWOElzb2xhdGVkQ29udGV4dCBhbmQgbWVyZ2UgZnVuY3Rpb25hbGl0eSBpbnRvIFY4
RE9NV2luZG93U2hlbGwuCisgICAgICAgIFRoaXMgYnJpbmdzIHRoZSBWOCBpc29sYXRlZCB3b3Js
ZCBtb2RlbCBpbnRvIGNsb3NlciBhbGlnbm1lbnQgd2l0aAorICAgICAgICB0aGF0IG9mIEpTQy4K
KworICAgICAgICBObyBuZXcgdGVzdHMuICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKwor
ICAgICAgICAqIFVzZVY4LmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRl
SW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZs
b2F0NjRBcnJheS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01EYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTURhdGE6OmdldEN1cnJlbnRTdG9yZSk6CisgICAgICAgICogYmluZGluZ3Mv
djgvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3Js
ZDo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01X
cmFwcGVyV29ybGQuaDoKKyAgICAgICAgKERPTVdyYXBwZXJXb3JsZCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hl
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OnVuc2FmZUhhbmRsZVRvQ3VycmVudFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpiaW5kVG9XaW5kb3dPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NoYXJlZFBlcnNp
c3RlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkUGVy
c2lzdGVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFBlcnNpc3RlbnQ6On5T
aGFyZWRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFBlcnNpc3RlbnQ6Omdl
dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnBlckNvbnRleHREYXRhRm9yQ3VycmVudFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOERPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldElzb2xhdGVkV29y
bGRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjplbnRlcmVkSXNv
bGF0ZWRXb3JsZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
RE9NV2luZG93U2hlbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1No
ZWxsOjpWOERPTVdpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hl
bGw6OmRlc3Ryb3lJc29sYXRlZFNoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29u
dGV4dFdlYWtDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpk
aXNwb3NlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppbml0
aWFsaXplSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y3Jl
YXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppbnN0YWxs
RE9NV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURv
Y3VtZW50V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjp1cGRh
dGVEb2N1bWVudFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6
OmNsZWFyRG9jdW1lbnRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1No
ZWxsOjpzZXRTZWN1cml0eVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hl
bGw6OnVwZGF0ZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6
Om5hbWVkSXRlbUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6Om5h
bWVkSXRlbVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBk
YXRlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6
c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OERPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFY4RE9NV2lu
ZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6d29ybGQpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aXNvbGF0ZWRXb3JsZFNlY3VyaXR5
T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6VjhET01XcmFwcGVyOjpnZXRDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOElzb2xhdGVkQ29udGV4dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhJc29sYXRlZENvbnRleHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExh
enlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JsZENvbnRleHRI
YW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ybGRDb250ZXh0SGFuZGxlOjpXb3JsZENv
bnRleHRIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ybGRDb250ZXh0SGFuZGxlOjphZGp1
c3RlZENvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4WE1M
SHR0cFJlcXVlc3Q6OmNvbnN0cnVjdG9yQ2FsbGJhY2spOgorCiAyMDEyLTA5LTA0ICBLZWlzaGkg
SGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vdmUgUGFnZVBvcHVwQ2xp
ZW50IGltcGxlbWVudGF0aW9uIGZvciBpbnB1dFt0eXBlPWRhdGVdIHRvIENocm9taXVtIFdlYktp
dCBsYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9Vc2VWOC5jbWFrZQppbmRleCBkMDQxYzgxNjQyYjUwOGFjOWE3Y2E3M2E1ZWFkZTU0
OTBkOWNiZDRjLi45ODYyNTg4YTg5OTc4Y2U2NjFiOThkM2JlYWI4ZmEzM2JjOTVkNjMxIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9V
c2VWOC5jbWFrZQpAQCAtNTcsNyArNTcsNiBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKICAgICBiaW5kaW5ncy92OC9WOEdD
Rm9yQ29udGV4dERpc3Bvc2UuY3BwCiAgICAgYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5h
bWUuY3BwCi0gICAgYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCiAgICAgYmluZGlu
Z3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKICAgICBiaW5kaW5ncy92OC9WOE5vZGVGaWx0
ZXJDb25kaXRpb24uY3BwCiAgICAgYmluZGluZ3MvdjgvVjhPYmplY3RDb25zdHJ1Y3Rvci5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA5MWM0NDYxN2EwN2E1ZTMzOTJlM2IxMWQ1N2U3ZTczZjI4ZmUz
ZjU0Li4xYzhiMjg2ZmY0NmM0MGI0MjhjMzZiYzAwODllZjBjOWMxNDdjNTk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC0yMjk3LDggKzIyOTcsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
R0NGb3JDb250ZXh0RGlzcG9zZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhpZGRl
blByb3BlcnR5TmFtZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJv
cGVydHlOYW1lLmgnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0
LmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA0ZWJlNjU0ZDBlODlhODEzMGUx
ZWQzMTliYmM0MzZmY2YyZjhiM2I5Li44OTY1MDYzMjBlNDg1Yzg1N2E1MzdkMjRhZTA4ODg0ZmMw
NTViYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQpAQCAtMjUzMiw3ICsyNTMyLDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIik7
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4QmluZGluZy5oIik7CiAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIlY4RE9NV3JhcHBlci5oIik7Ci0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4SXNvbGF0
ZWRDb250ZXh0LmgiKTsKIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkaW50ZXJmYWNlTmFtZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IGJkYTQ3YTVhY2RlYjllYmY3YWVkYmQxZjNkMzNj
ZjlkMTU0ZjQ0MGQuLmM1OTVmNTVmMTViZmYwYTdjMmZmNDZhM2YwOGNhNmYwY2RhMGVkZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0
NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlY4RE9NV3Jh
cHBlci5oIgogI2luY2x1ZGUgIlY4RmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiVjhJbnQzMkFy
cmF5LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvRmxv
YXQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zsb2F0NjRBcnJheS5oPgogI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggZjM3MzNl
ZmZhNDVhN2ZhNDc4ZjYzM2ViNzEzZGMyZGVmNWViMWZlNi4uZGZmODE3NTQ3MDYyZDQ4NjNjNDNk
NWQwMjcyNDZmMWNiYTkwNmFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAK
QEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVk
ZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlIDx3
dGYvVW51c2VkUGFyYW0uaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAK
aW5kZXggODk3NWNmNjMyNWUyMDZlMzcwODYyNDMzOWM4ZTMyYWRmN2YxMGRjYi4uMzFkMmY2NzNk
NTc2NWE3ZjZjYzM3MGZjOGY5MDdjZTQxNjMzNDlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3Jh
cHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENv
bnN0cnVjdG9yLmNwcAppbmRleCBmZTNlYjRmZmYwNTA2OGY0MGQyYzc1YjUxMTExMTI1NjQxMDE1
ZTEyLi40NTAyOWI1NTk5ODgxNDdjMGE5Mjg3Y2I4ODEyZWY2ZjE2NTlhOTdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1
ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5j
bHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRh
cmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRUYXJnZXQuY3BwCmluZGV4IDE5NDBkN2RiZGJlYTg0MjJkN2M2M2U4MWM4YWExNGQzOGUy
OGU0MGIuLjA3OWIxNGFlYTQxNDkzZTBhZmQxODk0YTNkNjdkNzA2YjM2ODYwZDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRh
cmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIlY4Q29sbGVj
dGlvbi5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4RXZlbnQuaCIK
LSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCmluZGV4IDkz
NzVjZTMxMDYzOTQ0NjQwYzViMGY2Zjc3MWJhMTgwOTM4NjkzMDUuLjNmNzJkNmM1YTRhYmY0NjYy
YmNjY2NjMzA1MmFhYzRlN2FkNWY2MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCkBAIC0yNyw3
ICsyNyw2IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNv
bGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggMDA5OGQ1ZWIwYjg0OGQ2ODE2
NjFiMDM1OWQ5YThjMzAzNTgyODdhOS4uNjFmZWI0MDFmMDU5MTJkODFlZDBiYTU2NDIyYTdlN2Vm
M2U5NTQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNs
dWRlICJUZXN0U3VwcGxlbWVudGFsLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNs
dWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFRlc3RPYmouaCIKICNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5k
ZXggYWMxMTY3OTk4ZDA4Yzc1ZDQ2Zjg3NjAxOWM3ODllNDdlMmNiN2EzZi4uOGRiODVkM2YzOGYw
MDY3MTY3OTM5OTdjYWI3MDFkODFlMGZjYTZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJW
OERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggN2E3NGY1ODI3OTJhODE2ODFlNDIyZWNkZWFkNDVi
MTY0ZmNjODE3OS4uYjUwNWU4OGY5NzZlNzZhZTA2NzkzMWZkODUxNmFhNzVjZTI4ODVjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5h
bWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2lu
Y2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
ICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5o
IgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
Tm9kZS5jcHAKaW5kZXggNWFiMTc3ZGRkNWYwOTFiZDM2MWFlMGFkZWUwM2FjNWUwNjJlODUxMy4u
MzJmM2NiMjA0OGVhNzRhZmRkZGE0NWVhNzRmN2RiOTMzODcxMzgwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcApA
QCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNp
bmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRl
ICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDM3ZDczOTM5MzQ0ZmM3YTAwOWI3MTZl
NzIzYzI3M2MxNzdmNDJhZGMuLmExYmY1MTQzMjFjMjk2ZTI4N2RkZTA1Yjg1MGVhYWE1ZDBjMWNi
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiVjhET01XcmFwcGVy
LmgiCiAjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgogI2luY2x1ZGUgIlY4RmxvYXQzMkFycmF5Lmgi
Ci0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOFNWR0RvY3VtZW50
LmgiCiAjaW5jbHVkZSAiVjhTVkdQb2ludC5oIgogI2luY2x1ZGUgIlY4U2NyaXB0UHJvZmlsZS5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmNwcAppbmRleCBhZThkMThkNDVjZmRjNWFjNDlhM2FkZGJjNDFmNGNmNTJiOWFkZWFlLi5j
Y2RkNjM4ZmU4ZDY1NWI3ZTZjYzY3YTNjNjljZDE1ZTcyMzM5ZWI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMzIs
NyArMzIsNiBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNv
bGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgPHd0
Zi9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAppbmRleCAxYTYzYzJmMmJkZmU4YTY4ZGUyNmJiOTY2
M2UyZWQ5Y2NkZGQ5MWE4Li5hZjUwYTFlY2EzYWIyMTU4MWFiZDY0YWEwMGZmNWFmMzM4Y2JiOTdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcApAQCAtMzEsNyArMzEsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTURhdGEuaCIKICNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4
RE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKIApAQCAtNDMsNyArNDMsNyBAQCBET01E
YXRhU3RvcmUmIERPTURhdGE6OmdldEN1cnJlbnRTdG9yZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
ICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudChp
c29sYXRlKTsKICAgICBpZiAoVU5MSUtFTFkoZGF0YS0+ZG9tRGF0YVN0b3JlKCkgIT0gMCkpCiAg
ICAgICAgIHJldHVybiAqZGF0YS0+ZG9tRGF0YVN0b3JlKCk7Ci0gICAgVjhJc29sYXRlZENvbnRl
eHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpOworICAgIFY4RE9N
V2luZG93U2hlbGwqIGNvbnRleHQgPSBWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNvbnRleHQgIT0gMCkpCiAgICAgICAgIHJldHVybiAqY29udGV4dC0+
d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCk7CiAgICAgcmV0dXJuIGRlZmF1bHRTdG9yZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCmluZGV4IDMxYTAy
ODZjNDUxZjc2N2RjZDNlYjQ0MWE3ZmU4YzEzZmNjY2IzMWYuLmRmZWMzYWVjYjQyNTYxMjM2ZDlj
MjgxZWNhMzllNWE3MzAyMmRkNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NV3JhcHBlcldvcmxkLmNwcApAQCAtOTMsMTAgKzkzLDkgQEAgc3RhdGljIGludCB0ZW1wb3Jh
cnlXb3JsZElkID0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJZC0xOwogUGFz
c1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IERPTVdyYXBwZXJXb3JsZDo6Z2V0T3JDcmVhdGVJc29s
YXRlZFdvcmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApCiB7CiAgICAgQVNTRVJU
KHdvcmxkSWQgIT0gbWFpbldvcmxkSWQpOwotICAgIEFTU0VSVCh3b3JsZElkICE9IHVuaW5pdGlh
bGl6ZWRXb3JsZElkKTsKIAogICAgIFdvcmxkTWFwJiBtYXAgPSBpc29sYXRlZFdvcmxkTWFwKCk7
Ci0gICAgaWYgKCF3b3JsZElkKQorICAgIGlmICghd29ybGRJZCB8fCB3b3JsZElkID09IHVuaW5p
dGlhbGl6ZWRXb3JsZElkKQogICAgICAgICB3b3JsZElkID0gdGVtcG9yYXJ5V29ybGRJZC0tOwog
ICAgIGVsc2UgewogICAgICAgICBXb3JsZE1hcDo6aXRlcmF0b3IgaSA9IG1hcC5maW5kKHdvcmxk
SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldv
cmxkLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAppbmRl
eCAwMTEyNWI3ZjM0YjliNTA3MWRiMjZkZTUwNjE1NGM0OWRkMGM0NmI0Li40NjdjMzIyZmJmMGJj
NDE2MDQxM2ZjNjNmZGNjMmU4NGJhOWQ5NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9ET01XcmFwcGVyV29ybGQuaApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIC8vIFRoaXMgY2xhc3MgcmVwcmVzZW50IGEgY29sbGVjdGlvbiBvZiBET00gd3JhcHBl
cnMgZm9yIGEgc3BlY2lmaWMgd29ybGQuCiBjbGFzcyBET01XcmFwcGVyV29ybGQgOiBwdWJsaWMg
V1RGOjpSZWZDb3VudGVkQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGludCBtYWlu
V29ybGRJZCA9IC0xOwotICAgIHN0YXRpYyBjb25zdCBpbnQgbWFpbldvcmxkRXh0ZW5zaW9uR3Jv
dXAgPSAtMTsKLSAgICBzdGF0aWMgY29uc3QgaW50IHVuaW5pdGlhbGl6ZWRXb3JsZElkID0gLTI7
Ci0gICAgc3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxpemVkRXh0ZW5zaW9uR3JvdXAgPSAtMjsK
KyAgICBzdGF0aWMgY29uc3QgaW50IG1haW5Xb3JsZElkID0gMDsKKyAgICBzdGF0aWMgY29uc3Qg
aW50IG1haW5Xb3JsZEV4dGVuc2lvbkdyb3VwID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IHVu
aW5pdGlhbGl6ZWRXb3JsZElkID0gLTE7CisgICAgc3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxp
emVkRXh0ZW5zaW9uR3JvdXAgPSAtMTsKICAgICAvLyBJZiAwIGlzIHBhc3NlZCBhcyB3b3JsZElk
LCB0aGUgd29ybGQgd2lsbCBiZSBhc3NpZ25lZCBhIHRlbXBvcmFyeSBpZCBpbnN0ZWFkLgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gZ2V0T3JDcmVhdGVJc29sYXRlZFdv
cmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogICAgIHN0YXRpYyBib29sIGlz
b2xhdGVkV29ybGRzRXhpc3QoKSB7IHJldHVybiBpc29sYXRlZFdvcmxkQ291bnQ7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggMjZi
MTIzNzI4NmQ4MTlkMDk5MGEyNGRiNzllMzU1NjhhZDIzOWFjMy4uNDljYjViYmZkNmNlMTcwYTI4
Mzc4OWUyMjYyMjY0ODE5YTUzYmIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTYyLDcgKzYyLDYgQEAKICNpbmNsdWRlICJWOEdD
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVk
ZSAiVjhIVE1MRW1iZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIK
ICNpbmNsdWRlICJWOE5QT2JqZWN0LmgiCiAjaW5jbHVkZSAiVjhSZWN1cnNpb25TY29wZS5oIgog
I2luY2x1ZGUgIldpZGdldC5oIgpAQCAtMTEwLDcgKzEwOSw3IEBAIGJvb2wgU2NyaXB0Q29udHJv
bGxlcjo6Y2FuQWNjZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogU2NyaXB0Q29u
dHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZy
YW1lKQogICAgICwgbV9zb3VyY2VVUkwoMCkKLSAgICAsIG1fd2luZG93U2hlbGwoVjhET01XaW5k
b3dTaGVsbDo6Y3JlYXRlKGZyYW1lKSkKKyAgICAsIG1fd2luZG93U2hlbGwoVjhET01XaW5kb3dT
aGVsbDo6Y3JlYXRlKGZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkpCiAgICAgLCBtX3Bh
dXNlZChmYWxzZSkKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAsIG1fd3Jh
cHBlZFdpbmRvd1NjcmlwdE5QT2JqZWN0KDApCkBAIC0xNTcsNyArMTU2LDcgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpyZXNldElzb2xhdGVkV29ybGRzKCkKIHsKICAgICBmb3IgKElzb2xhdGVk
V29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7CiAgICAg
ICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBp
dGVyLT5zZWNvbmQtPmRlc3Ryb3koKTsKKyAgICAgICAgaXRlci0+c2Vjb25kLT5kZXN0cm95SXNv
bGF0ZWRTaGVsbCgpOwogICAgIH0KICAgICBtX2lzb2xhdGVkV29ybGRzLmNsZWFyKCk7CiAgICAg
bV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmNsZWFyKCk7CkBAIC0zMjQsNTAgKzMyMyw3
MiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRT
b3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogICAgIHJldHVybiBTY3JpcHRWYWx1ZShvYmplY3QpOwog
fQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2ln
bmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgVmVj
dG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cykKK1Bhc3NSZWZQdHI8VjhET01XaW5kb3dTaGVsbD4g
U2NyaXB0Q29udHJvbGxlcjo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29y
bGRJZCwgaW50IGV4dGVuc2lvbkdyb3VwKQogewotICAgIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KHdvcmxkSUQsIHNvdXJjZXMsIDAsIHJlc3VsdHMpOworICAgIEFTU0VSVCh3b3JsZElkICE9IERP
TVdyYXBwZXJXb3JsZDo6bWFpbldvcmxkSWQpOworCisgICAgLy8gQ2hlY2sgdGhlIG1hcCBmb3Ig
bm9uLXRlbXBvcmFyeSB3b3JsZHMuCisgICAgaWYgKHdvcmxkSWQgIT0gRE9NV3JhcHBlcldvcmxk
Ojp1bmluaXRpYWxpemVkV29ybGRJZCkgeworICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVy
YXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSWQpOworICAgICAgICBpZiAo
aXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXRl
ci0+c2Vjb25kLT53b3JsZCgpLT53b3JsZElkKCkgPT0gd29ybGRJZCk7CisgICAgICAgICAgICBB
U1NFUlQoaXRlci0+c2Vjb25kLT53b3JsZCgpLT5leHRlbnNpb25Hcm91cCgpID09IGV4dGVuc2lv
bkdyb3VwKTsKKyAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkID0gRE9NV3JhcHBlcldvcmxk
OjpnZXRPckNyZWF0ZUlzb2xhdGVkV29ybGQod29ybGRJZCwgZXh0ZW5zaW9uR3JvdXApOworICAg
IFJlZlB0cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRv
d1NoZWxsOjpjcmVhdGUobV9mcmFtZSwgd29ybGQpOworICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0
KHdvcmxkLT53b3JsZElkKCksIGlzb2xhdGVkV29ybGRTaGVsbC5nZXQoKSk7CisgICAgcmV0dXJu
IGlzb2xhdGVkV29ybGRTaGVsbC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9y
PFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFZlY3RvcjxT
Y3JpcHRWYWx1ZT4qIHJlc3VsdHMpCitWOERPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVy
OjpleGlzdGluZ1dpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7Ci0gICAgdjg6
OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIEFTU0VSVCh3b3JsZCk7CiAKLSAgICAvLyBG
SVhNRTogVGhpcyB3aWxsIG5lZWQgdG8gZ2V0IHJlb3JnYW5pemVkIG9uY2Ugd2UgaGF2ZSBhIHdp
bmRvd1NoZWxsIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQuCi0gICAgaWYgKCF3aW5kb3dTaGVsbCgp
LT5pbml0aWFsaXplSWZOZWVkZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChMSUtFTFko
d29ybGQtPmlzTWFpbldvcmxkKCkpKQorICAgICAgICByZXR1cm4gbV93aW5kb3dTaGVsbC5nZXQo
KTsKIAorICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29y
bGRzLmZpbmQod29ybGQtPndvcmxkSWQoKSk7CisgICAgcmV0dXJuIGl0ZXIgPT0gbV9pc29sYXRl
ZFdvcmxkcy5lbmQoKSA/IDAgOiBpdGVyLT5zZWNvbmQuZ2V0KCk7Cit9CisKK1Y4RE9NV2luZG93
U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29y
bGQpCit7CisgICAgVjhET01XaW5kb3dTaGVsbCogc2hlbGwgPSBleGlzdGluZ1dpbmRvd1NoZWxs
KHdvcmxkKTsKKyAgICBpZiAoTElLRUxZKCEhc2hlbGwpKQorICAgICAgICByZXR1cm4gc2hlbGw7
CisKKyAgICBSZWZQdHI8VjhET01XaW5kb3dTaGVsbD4gaXNvbGF0ZWRXb3JsZFNoZWxsID0gVjhE
T01XaW5kb3dTaGVsbDo6Y3JlYXRlKG1fZnJhbWUsIHdvcmxkKTsKKyAgICBtX2lzb2xhdGVkV29y
bGRzLnNldCh3b3JsZC0+d29ybGRJZCgpLCBpc29sYXRlZFdvcmxkU2hlbGwuZ2V0KCkpOworICAg
IHJldHVybiBpc29sYXRlZFdvcmxkU2hlbGwuZ2V0KCk7Cit9CisKK3ZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxT
Y3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwLCBWZWN0b3I8U2Ny
aXB0VmFsdWU+KiByZXN1bHRzKQoreworICAgIC8vIEV4Y2VwdCBpbiB0aGUgdGVzdCBydW5uZXIs
IHdvcmxkSUQgc2hvdWxkIGJlIG5vbiAwIGFzIGl0IGNvbmZsaWN0cyB3aXRoIHRoZSBtYWluV29y
bGRJZC4KKyAgICAvLyBGSVhNRTogQ2hhbmdlIHRoZSB0ZXN0IHJ1bm5lciB0byBwZXJmb3JtIHRo
aXMgc3dhcCBhbmQgbWFrZSB0aGlzIGFuIEFTU0VSVC4KKyAgICBpZiAoVU5MSUtFTFkoIXdvcmxk
SUQpKQorICAgICAgICB3b3JsZElEID0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29y
bGRJZDsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICB2ODo6TG9jYWw8
djg6OkFycmF5PiB2OFJlc3VsdHM7CiAgICAgewogICAgICAgICB2ODo6SGFuZGxlU2NvcGUgZXZh
bHVhdGVIYW5kbGVTY29wZTsKLSAgICAgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29u
dGV4dCA9IDA7Ci0gICAgICAgIGlmICh3b3JsZElEID4gMCkgewotICAgICAgICAgICAgSXNvbGF0
ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElE
KTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpCi0gICAg
ICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gaXRlci0+c2Vjb25kOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0ZWRD
b250ZXh0KG1fZnJhbWUsIERPTVdyYXBwZXJXb3JsZDo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxk
KHdvcmxkSUQsIGV4dGVuc2lvbkdyb3VwKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzb2xhdGVk
Q29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgaXNvbGF0ZWRDb250ZXh0OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGFuZ2Ug
dGhpcyB0byB1c2luZyB3aW5kb3cgc2hlbGxzIHRvIG1hdGNoIEpTQy4KLSAgICAgICAgICAgICAg
ICBtX2lzb2xhdGVkV29ybGRzLnNldCh3b3JsZElELCBpc29sYXRlZENvbnRleHQpOwotICAgICAg
ICAgICAgfQorICAgICAgICBSZWZQdHI8VjhET01XaW5kb3dTaGVsbD4gaXNvbGF0ZWRXb3JsZFNo
ZWxsID0gZ2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkQ29udGV4dCh3b3JsZElELCBleHRlbnNpb25H
cm91cCk7CiAKKyAgICAgICAgaWYgKHdvcmxkSUQgIT0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRp
YWxpemVkV29ybGRJZCkgewogICAgICAgICAgICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lu
TWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdpbkl0ZXIgPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKICAgICAgICAgICAgIGlmIChzZWN1cml0eU9yaWdpbkl0
ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmVuZCgpKQotICAgICAgICAgICAg
ICAgIGlzb2xhdGVkQ29udGV4dC0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVy
LT5zZWNvbmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0
ID0gbmV3IFY4SXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUsIERPTVdyYXBwZXJXb3JsZDo6Z2V0T3JD
cmVhdGVJc29sYXRlZFdvcmxkKHdvcmxkSUQsIGV4dGVuc2lvbkdyb3VwKSk7Ci0gICAgICAgICAg
ICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXNvbGF0ZWRXb3JsZFNoZWxsLT5zZXRJc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVyLT5zZWNvbmQpOwogICAg
ICAgICB9CiAKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKTsKKyAgICAg
ICAgaXNvbGF0ZWRXb3JsZFNoZWxsLT5pbml0aWFsaXplSWZOZWVkZWQoKTsKKyAgICAgICAgaWYg
KGlzb2xhdGVkV29ybGRTaGVsbC0+Y29udGV4dCgpLklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0ZWRXb3JsZFNoZWxsLT5jb250ZXh0KCkpOwogICAg
ICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNvbnRleHQpOwogICAgICAgICB2
ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHRBcnJheSA9IHY4OjpBcnJheTo6TmV3KHNvdXJjZXMu
c2l6ZSgpKTsKIApAQCAtMzc4LDggKzM5OSwxMiBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTYwog
ICAgICAgICAgICAgcmVzdWx0QXJyYXktPlNldChpLCBldmFsdWF0aW9uUmVzdWx0KTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICghd29ybGRJRCkKLSAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4
dC0+ZGVzdHJveSgpOworICAgICAgICAvLyBNYXJrIHRlbXBvcmFyeSBzaGVsbCBmb3Igd2VhayBk
ZXN0cnVjdGlvbi4KKyAgICAgICAgaWYgKHdvcmxkSUQgPT0gRE9NV3JhcHBlcldvcmxkOjp1bmlu
aXRpYWxpemVkV29ybGRJZCkgeworICAgICAgICAgICAgaW50IGFjdHVhbFdvcmxkSWQgPSBpc29s
YXRlZFdvcmxkU2hlbGwtPndvcmxkKCktPndvcmxkSWQoKTsKKyAgICAgICAgICAgIG1faXNvbGF0
ZWRXb3JsZHMucmVtb3ZlKGFjdHVhbFdvcmxkSWQpOworICAgICAgICAgICAgaXNvbGF0ZWRXb3Js
ZFNoZWxsLT5kZXN0cm95SXNvbGF0ZWRTaGVsbCgpOworICAgICAgICB9CiAKICAgICAgICAgdjhS
ZXN1bHRzID0gZXZhbHVhdGVIYW5kbGVTY29wZS5DbG9zZShyZXN1bHRBcnJheSk7CiAgICAgfQpA
QCAtMzk2LDcgKzQyMSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlCiAgICAgbV9pc29sYXRl
ZFdvcmxkU2VjdXJpdHlPcmlnaW5zLnNldCh3b3JsZElELCBzZWN1cml0eU9yaWdpbik7CiAgICAg
SXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3
b3JsZElEKTsKICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQotICAgICAg
ICBpdGVyLT5zZWNvbmQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKKyAgICAg
ICAgaXRlci0+c2Vjb25kLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlP
cmlnaW4pOwogfQogCiBUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVy
UG9zaXRpb24oKSBjb25zdApAQCAtNDEzLDExICs0MzgsMTEgQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpmaW5pc2hlZFdpdGhFdmVudChFdmVudCogZXZlbnQpCiAKIHY4OjpQZXJzaXN0ZW50PHY4
OjpDb250ZXh0PiBTY3JpcHRDb250cm9sbGVyOjp1bnNhZmVIYW5kbGVUb0N1cnJlbnRXb3JsZENv
bnRleHQoKQogewotICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0g
VjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewotICAgICAgICBSZWZQdHI8U2hhcmVk
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBjb250ZXh0ID0gaXNvbGF0ZWRDb250ZXh0LT5zaGFy
ZWRDb250ZXh0KCk7Ci0gICAgICAgIGlmIChtX2ZyYW1lICE9IHRvRnJhbWVJZk5vdERldGFjaGVk
KGNvbnRleHQtPmdldCgpKSkKKyAgICBpZiAoVjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRTaGVs
bCA9IFY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkgeworICAgICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGVkU2hlbGwtPmNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpIHx8IG1fZnJhbWUgIT0gdG9GcmFtZUlmTm90RGV0
YWNoZWQoY29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gdjg6OlBlcnNpc3RlbnQ8djg6OkNv
bnRleHQ+KCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LT5nZXQoKTsKKyAgICAgICAgcmV0dXJu
IGNvbnRleHQ7CiAgICAgfQogICAgIHdpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgp
OwogICAgIHJldHVybiB3aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7CkBAIC00NDcsNyArNDcyLDcg
QEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpiaW5kVG9XaW5kb3dPYmplY3QoRnJhbWUqIGZyYW1l
LCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmoKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBTY3JpcHRD
b250cm9sbGVyOjptYWluV29ybGRDb250ZXh0KGZyYW1lKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiB2OENvbnRleHQgPSBtYWluV29ybGRDb250ZXh0KGZyYW1lKTsKICAgICBpZiAodjhD
b250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDcsMTAgKzU3MiwxMyBA
QCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyhWZWN0b3I8UmVmUHRyPERPTVdy
YXBwZXJXb3JsZD4gPiYgd29ybGRzKQogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUlu
V29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKKyAgICBpZiAo
d29ybGQgPT0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpIHsKKyAgICAgICAgZXZhbHVhdGUoc291
cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBWZWN0b3I8U2NyaXB0U291cmNlQ29k
ZT4gc291cmNlczsKICAgICBzb3VyY2VzLmFwcGVuZChzb3VyY2UpOwotICAgIC8vIEZJWE1FOiBH
ZXQgYW4gSUQgZnJvbSB0aGUgd29ybGQgcGFyYW0uCi0gICAgZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQoMCwgc291cmNlcywgMCk7CisgICAgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGQtPndv
cmxkSWQoKSwgc291cmNlcywgd29ybGQtPmV4dGVuc2lvbkdyb3VwKCksIDApOwogfQogCiBWOEV4
dGVuc2lvbnMmIFNjcmlwdENvbnRyb2xsZXI6OnJlZ2lzdGVyZWRFeHRlbnNpb25zKCkKQEAgLTY1
MSwxNCArNjc5LDE0IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29u
dGV4dHMoVmVjdG9yPHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlCiB7CiAgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIGZvciAoSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7IGl0ICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dCA9
IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGlmICghaXNvbGF0ZWRDb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpKQorICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFdvcmxkU2hlbGwgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoIWlzb2xhdGVkV29ybGRTaGVsbC0+aXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2luKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0
KCk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IGlzb2xhdGVk
V29ybGRTaGVsbC0+Y29udGV4dCgpOwogICAgICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUg
PSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcodjhD
b250ZXh0KSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwg
U2VjdXJpdHlPcmlnaW4qPihzY3JpcHRTdGF0ZSwgaXNvbGF0ZWRDb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwg
U2VjdXJpdHlPcmlnaW4qPihzY3JpcHRTdGF0ZSwgaXNvbGF0ZWRXb3JsZFNoZWxsLT5pc29sYXRl
ZFdvcmxkU2VjdXJpdHlPcmlnaW4oKSkpOwogICAgIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDM0YzdjNjRmMzFhMGVl
YzE5MGI5NWYzNDRmNzlmY2EyMjQyYzg1YWYuLmRkOGY0YzliM2RkMmRhZGZmZmUyN2E3ZWZhYjU4
YWIzMWRjZDhkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmgKQEAgLTU3LDIwICs1Nyw4IEBAIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiBjbGFz
cyBTY3JpcHRTdGF0ZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgVjhET01XaW5kb3dT
aGVsbDsKLWNsYXNzIFY4SXNvbGF0ZWRDb250ZXh0OwogY2xhc3MgV2lkZ2V0OwogCi0vLyBOb3Rl
OiBhbHRob3VnaCB0aGUgcG9pbnRlciBpcyByYXcsIHRoZSBpbnN0YW5jZSBpcyBrZXB0IGFsaXZl
IGJ5IGEgc3Ryb25nCi0vLyByZWZlcmVuY2UgdG8gdGhlIHY4IGNvbnRleHQgaXQgY29udGFpbnMs
IHdoaWNoIGlzIG5vdCBtYWRlIHdlYWsgdW50aWwgd2UKLS8vIGNhbGwgd29ybGQtPmRlc3Ryb3ko
KS4KLS8vCi0vLyBGSVhNRTogV2Ugd2FudCB0byBldmVudHVhbGx5IGJlIGhvbGRpbmcgd2luZG93
IHNoZWxscyBpbnN0ZWFkIG9mIHRoZQotLy8gSXNvbGF0ZWRDb250ZXh0IGRpcmVjdGx5LgotLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0ODc1Ci10eXBlZGVmIEhh
c2hNYXA8aW50LCBWOElzb2xhdGVkQ29udGV4dCo+IElzb2xhdGVkV29ybGRNYXA7Ci0KLXR5cGVk
ZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiBJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW5NYXA7Ci0KIHR5cGVkZWYgV1RGOjpWZWN0b3I8djg6OkV4dGVuc2lvbio+IFY4
RXh0ZW5zaW9uczsKIAogY2xhc3MgU2NyaXB0Q29udHJvbGxlciB7CkBAIC03OCw5ICs2Niw5IEBA
IHB1YmxpYzoKICAgICBTY3JpcHRDb250cm9sbGVyKEZyYW1lKik7CiAgICAgflNjcmlwdENvbnRy
b2xsZXIoKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBldmVudHVhbGx5IHRha2UgRE9N
V3JhcHBlcldvcmxkIGFyZ3VtZW50LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDg3NQogICAgIFY4RE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKCkg
Y29uc3QgeyByZXR1cm4gbV93aW5kb3dTaGVsbC5nZXQoKTsgfQorICAgIFY4RE9NV2luZG93U2hl
bGwqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCopOworICAgIFY4RE9NV2luZG93U2hlbGwq
IGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKik7CiAKICAgICBTY3JpcHRWYWx1
ZSBleGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICBTY3JpcHRWYWx1
ZSBleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib29sIGZvcmNlVXNlckdlc3R1
cmUgPSBmYWxzZSk7CkBAIC0xMDUsMTIgKzkzLDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBjYWxs
ZXIgbXVzdCBob2xkIGFuIGV4ZWN1dGlvbiBjb250ZXh0LgogICAgIFNjcmlwdFZhbHVlIGV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKIAotICAgIC8vIEV2YWx1YXRlIEphdmFTY3Jp
cHQgaW4gYSBuZXcgaXNvbGF0ZWQgd29ybGQuIFRoZSBzY3JpcHQgZ2V0cyBpdHMgb3duCi0gICAg
Ly8gZ2xvYmFsIHNjb3BlLCBpdHMgb3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNpYyBKYXZhU2Ny
aXB0IG9iamVjdHMgKFN0cmluZywKLSAgICAvLyBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0cyBv
d24gd3JhcHBlcnMgZm9yIGFsbCBET00gbm9kZXMgYW5kIERPTQotICAgIC8vIGNvbnN0cnVjdG9y
cy4KLSAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNv
bnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgVmVjdG9yPFNjcmlwdFZhbHVl
PiogcmVzdWx0cyk7Ci0KICAgICAvLyBFeGVjdXRlcyBKYXZhU2NyaXB0IGluIGFuIGlzb2xhdGVk
IHdvcmxkLiBUaGUgc2NyaXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUsCiAgICAgLy8gaXRz
IG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcs
IEFycmF5LCBhbmQgc28tb24pLAogICAgIC8vIGFuZCBpdHMgb3duIHdyYXBwZXJzIGZvciBhbGwg
RE9NIG5vZGVzIGFuZCBET00gY29uc3RydWN0b3JzLgpAQCAtMTE4LDIyICsxMDAsMTYgQEAgcHVi
bGljOgogICAgIC8vIElmIGFuIGlzb2xhdGVkIHdvcmxkIHdpdGggdGhlIHNwZWNpZmllZCBJRCBh
bHJlYWR5IGV4aXN0cywgaXQgaXMgcmV1c2VkLgogICAgIC8vIE90aGVyd2lzZSwgYSBuZXcgd29y
bGQgaXMgY3JlYXRlZC4KICAgICAvLwotICAgIC8vIElmIHRoZSB3b3JsZElEIGlzIDAsIGEgbmV3
IHdvcmxkIGlzIGFsd2F5cyBjcmVhdGVkLgorICAgIC8vIElmIHRoZSB3b3JsZElEIGlzIDAgb3Ig
RE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJZCwgYSBuZXcgd29ybGQgaXMgYWx3
YXlzIGNyZWF0ZWQuCiAgICAgLy8KICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiBleHRlbnNpb25H
cm91cCBoZXJlLgotICAgIHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29y
bGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5z
aW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpOworICAgIHZvaWQgZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VD
b2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiBy
ZXN1bHRzKTsKIAogICAgIC8vIEFzc29jaWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQgKHNlZSBhYm92
ZSBmb3IgZGVzY3JpcHRpb24pIHdpdGggYSBzZWN1cml0eQogICAgIC8vIG9yaWdpbi4gWE1MSHR0
cFJlcXVlc3QgaW5zdGFuY2VzIHVzZWQgaW4gdGhhdCB3b3JsZCB3aWxsIGJlIGNvbnNpZGVyZWQK
ICAgICAvLyB0byBjb21lIGZyb20gdGhhdCBvcmlnaW4sIG5vdCB0aGUgZnJhbWUncy4KICAgICB2
b2lkIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4pOwogCi0gICAgLy8gTWFzcXVlcmFkZSAndGhpcycgYXMgdGhlIHdp
bmRvd1NoZWxsLgotICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgcHJvdmlkZXMg
cmVhc29uYWJsZSBjb21wYXRpYmlsaXR5Ci0gICAgLy8gd2l0aCB3aGF0IEpTQyBkb2VzIGFzIHdl
bGwuCi0gICAgU2NyaXB0Q29udHJvbGxlciogd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKikg
eyByZXR1cm4gdGhpczsgfQotICAgIFNjcmlwdENvbnRyb2xsZXIqIGV4aXN0aW5nV2luZG93U2hl
bGwoRE9NV3JhcHBlcldvcmxkKikgeyByZXR1cm4gdGhpczsgfQotCiAgICAgLy8gQ3JlYXRlcyBh
IHByb3BlcnR5IG9mIHRoZSBnbG9iYWwgb2JqZWN0IG9mIGEgZnJhbWUuCiAgICAgdm9pZCBiaW5k
VG9XaW5kb3dPYmplY3QoRnJhbWUqLCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmplY3QqKTsKIApA
QCAtMjIwLDE5ICsxOTYsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgY29udGV4dERlYnVn
SWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogCiBwcml2YXRlOgorICAgIHR5cGVkZWYgSGFz
aE1hcDxpbnQsIFJlZlB0cjxWOERPTVdpbmRvd1NoZWxsPiA+IElzb2xhdGVkV29ybGRNYXA7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IElzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbk1hcDsKKworICAgIFBhc3NSZWZQdHI8VjhET01XaW5kb3dTaGVs
bD4gZ2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCwgaW50IGV4dGVu
c2lvbkdyb3VwKTsKICAgICB2b2lkIHJlc2V0SXNvbGF0ZWRXb3JsZHMoKTsKIAogICAgIEZyYW1l
KiBtX2ZyYW1lOwogICAgIGNvbnN0IFN0cmluZyogbV9zb3VyY2VVUkw7CiAKLSAgICAvLyBGb3Ig
dGhlIG1vbWVudCwgd2UgaGF2ZSBvbmUgb2YgdGhlc2UuIFNvb24gd2Ugd2lsbCBoYXZlIG9uZSBw
ZXIgRE9NV3JhcHBlcldvcmxkLgogICAgIFJlZlB0cjxWOERPTVdpbmRvd1NoZWxsPiBtX3dpbmRv
d1NoZWxsOwotCi0gICAgLy8gVGhlIGlzb2xhdGVkIHdvcmxkcyB3ZSBhcmUgdHJhY2tpbmcgZm9y
IHRoaXMgZnJhbWUuIFdlIGhvbGQgdGhlbSBhbGl2ZQotICAgIC8vIGhlcmUgc28gdGhhdCB0aGV5
IGNhbiBiZSB1c2VkIGFnYWluIGJ5IGZ1dHVyZSBjYWxscyB0bwotICAgIC8vIGV2YWx1YXRlSW5J
c29sYXRlZFdvcmxkKCkuCiAgICAgSXNvbGF0ZWRXb3JsZE1hcCBtX2lzb2xhdGVkV29ybGRzOwot
CiAgICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luTWFwIG1faXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2luczsKIAogICAgIGJvb2wgbV9wYXVzZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TaGFyZWRQZXJzaXN0ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TaGFyZWRQZXJzaXN0ZW50LmgKaW5kZXggODgyNWJkNWVkZDg1YTQ4M2RlNzM1NWZi
MGU1MzVjOTljM2Y0ZWEwYi4uMjA1NTkyYzk5YWJmZTJjODE2Nzk2MTllNzdjZDY0YjFjYTU1ODQ3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2hhcmVkUGVyc2lzdGVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaApA
QCAtMzcsMzUgKzM3LDI1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIC8vIEEgc2hh
cmVhYmxlIHJlZmVyZW5jZSB0byBhIHY4IHBlcnNpc3RlbnQgaGFuZGxlLiAgVXNpbmcgYSBzaGFy
ZWQKLSAgICAvLyBwZXJzaXN0ZW50IGFueSBudW1iZXIgb2Ygb2JqZWN0cyBjYW4gc2hhcmUgYSBy
ZWZlcmVuY2UgdG8gYSB2OAotICAgIC8vIG9iamVjdCBhbmQgd2hlbiBpdCBzaG91bGQgbm8gbG9u
Z2VyIGJlIGFjY2Vzc2libGUgdGhlIG9iamVjdCdzCi0gICAgLy8gb3duZXIgY2FuIGNsZWFyIGl0
LgorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjbGFzcy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KICAgICBjbGFzcyBTaGFyZWRQZXJzaXN0ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8U2hh
cmVkUGVyc2lzdGVudDxUPiA+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgc2V0KHY4OjpQ
ZXJzaXN0ZW50PFQ+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFs
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8VD4gZ2V0KCkKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDxUPiA+IGNyZWF0ZSh2ODo6UGVyc2lz
dGVudDxUPiB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7Cisg
ICAgICAgICAgICBBU1NFUlQoIXZhbHVlLklzRW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNoYXJlZFBlcnNpc3RlbnQ8VD4odjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+OjpOZXcodmFsdWUpKSk7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBkaXNwb3NlSGFuZGxl
KCkKKyAgICAgICAgflNoYXJlZFBlcnNpc3RlbnQoKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1fdmFsdWUuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgIG1fdmFsdWUuRGlzcG9zZSgp
OwotICAgICAgICAgICAgICBtX3ZhbHVlLkNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV92YWx1
ZS5EaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgbV92YWx1ZS5DbGVhcigpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3Rl
bnQ8VD4gPiBjcmVhdGUodjg6OlBlcnNpc3RlbnQ8VD4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkUGVyc2lzdGVudDxUPih2YWx1ZSkpOwot
ICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8VD4g
PiBjcmVhdGUoKQorICAgICAgICB2ODo6UGVyc2lzdGVudDxUPiBnZXQoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gY3JlYXRlKHY4OjpQZXJzaXN0ZW50PFQ+KCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgICAgIH0KICAgICBwcml2YXRlOgogICAgICAgICBleHBs
aWNpdCBTaGFyZWRQZXJzaXN0ZW50KHY4OjpQZXJzaXN0ZW50PFQ+IHZhbHVlKSA6IG1fdmFsdWUo
dmFsdWUpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKaW5kZXgg
YWNkMDQzYWE1MWYwY2Q0N2VkOTliNmViNmYxMmExZDQzZTQxZWFlOS4uNzkyYjZkMzRjYmY0MWVm
Njk1MmUxMWM3ZTNmMjE1NTYwNTBhZjc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuY3BwCkBAIC0zMDUsOSArMzA1LDkgQEAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiB0
b1Y4Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBXb3JsZEMK
IAogVjhQZXJDb250ZXh0RGF0YSogcGVyQ29udGV4dERhdGFGb3JDdXJyZW50V29ybGQoRnJhbWUq
IGZyYW1lKQogewotICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRleHQ7Ci0gICAg
aWYgKFVOTElLRUxZKCEhKGlzb2xhdGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRF
bnRlcmVkKCkpKSkKLSAgICAgICAgcmV0dXJuIGlzb2xhdGVkQ29udGV4dC0+cGVyQ29udGV4dERh
dGEoKTsKKyAgICBWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFNoZWxsOworICAgIGlmIChVTkxJ
S0VMWSghIShpc29sYXRlZFNoZWxsID0gVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpKSkp
CisgICAgICAgIHJldHVybiBpc29sYXRlZFNoZWxsLT5wZXJDb250ZXh0RGF0YSgpOwogICAgIHJl
dHVybiBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnBlckNvbnRleHREYXRhKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAK
aW5kZXggNGRmY2U3MDlhYTlkMWZjMWY4M2IxOGFkODA0MTIwMmMzNzI3YWI1Mi4uODcwYzE3Y2Ew
ZTE2NTBhM2NiNjQ5ZTMzYmYxNWIyMjU5ZjA5OTQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
ICNpbmNsdWRlICJNZW1vcnlVc2FnZVN1cHBvcnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCkBAIC0xNzUsMTMgKzE3NiwzNCBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB0b0lubmVyR2xvYmFsT2JqZWN0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleAogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRleHQt
Pkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8VjhET01XaW5kb3dT
aGVsbD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyB2b2lk
IHNldElzb2xhdGVkV29ybGRGaWVsZChWOERPTVdpbmRvd1NoZWxsKiBzaGVsbCwgdjg6OkxvY2Fs
PHY4OjpDb250ZXh0PiBjb250ZXh0KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhET01X
aW5kb3dTaGVsbChmcmFtZSkpOworICAgIHRvSW5uZXJHbG9iYWxPYmplY3QoY29udGV4dCktPlNl
dFBvaW50ZXJJbkludGVybmFsRmllbGQoVjhET01XaW5kb3c6OmVudGVyZWRJc29sYXRlZFdvcmxk
SW5kZXgsIHNoZWxsKTsKIH0KIAotVjhET01XaW5kb3dTaGVsbDo6VjhET01XaW5kb3dTaGVsbChG
cmFtZSogZnJhbWUpCitWOERPTVdpbmRvd1NoZWxsKiBWOERPTVdpbmRvd1NoZWxsOjplbnRlcmVk
SXNvbGF0ZWRXb3JsZENvbnRleHQoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFY4
RE9NV2luZG93U2hlbGwqPih0b0lubmVyR2xvYmFsT2JqZWN0KHY4OjpDb250ZXh0OjpHZXRFbnRl
cmVkKCkpLT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQoVjhET01XaW5kb3c6OmVudGVyZWRJ
c29sYXRlZFdvcmxkSW5kZXgpKTsKK30KKworc3RhdGljIHZvaWQgc2V0SW5qZWN0ZWRTY3JpcHRD
b250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0YXJnZXRDb250ZXh0LCBpbnQg
ZGVidWdJZCkKK3sKKyAgICBjaGFyIGJ1ZmZlclszMl07CisgICAgaWYgKGRlYnVnSWQgPT0gLTEp
CisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJpbmplY3RlZCIpOwor
ICAgIGVsc2UKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgImluamVj
dGVkLCVkIiwgZGVidWdJZCk7CisgICAgdGFyZ2V0Q29udGV4dC0+U2V0RGF0YSh2ODo6U3RyaW5n
OjpOZXcoYnVmZmVyKSk7Cit9CisKK1Bhc3NSZWZQdHI8VjhET01XaW5kb3dTaGVsbD4gVjhET01X
aW5kb3dTaGVsbDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29y
bGQ+IHdvcmxkKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhET01XaW5kb3dTaGVsbChm
cmFtZSwgd29ybGQpKTsKK30KKworVjhET01XaW5kb3dTaGVsbDo6VjhET01XaW5kb3dTaGVsbChG
cmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiB3b3JsZCkKICAgICA6IG1f
ZnJhbWUoZnJhbWUpCisgICAgLCBtX3dvcmxkKHdvcmxkKQogewogfQogCkBAIC0xOTEsMTcgKzIx
Myw0MyBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmlzQ29udGV4dEluaXRpYWxpemVkKCkKICAg
ICByZXR1cm4gIW1fY29udGV4dC5pc0VtcHR5KCk7CiB9CiAKLXZvaWQgVjhET01XaW5kb3dTaGVs
bDo6ZGlzcG9zZUNvbnRleHQoKQordm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95SXNvbGF0
ZWRTaGVsbCgpCit7CisgICAgZGlzcG9zZUNvbnRleHQodHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lk
IGlzb2xhdGVkQ29udGV4dFdlYWtDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9i
amVjdCwgdm9pZCogcGFyYW1ldGVyKQogeworICAgIFY4RE9NV2luZG93U2hlbGwqIHNoZWxsID0g
cmVpbnRlcnByZXRfY2FzdDxWOERPTVdpbmRvd1NoZWxsKj4ocGFyYW1ldGVyKTsKKyAgICBBU1NF
UlQoc2hlbGwtPmhhc09uZVJlZigpKTsKKyAgICAvLyBIYW5kbGUgd2lsbCBiZSBkaXNwb3NlZCBp
biBkZXJlZigpLgorICAgIHNoZWxsLT5kZXJlZigpOworfQorCit2b2lkIFY4RE9NV2luZG93U2hl
bGw6OmRpc3Bvc2VDb250ZXh0KGJvb2wgd2VhaykKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4dC5n
ZXQoKS5Jc1dlYWsoKSk7CisKICAgICBpZiAoIW1fY29udGV4dC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT53aWxsUmVsZWFzZVNjcmlwdENvbnRleHQo
bV9jb250ZXh0LmdldCgpLCAwKTsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisKKyAgICAg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT53aWxsUmVsZWFzZVNjcmlwdENvbnRleHQo
bV9jb250ZXh0LmdldCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOworCisgICAgICAgIGlmICh3ZWFr
KSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fd29ybGQtPmlzTWFpbldvcmxkKCkpOworICAgICAg
ICAgICAgLy8gVGhlIGRlcmVmKCkgaGFwcGVucyBpbiBjYWxsYmFjay4KKyAgICAgICAgICAgIHRo
aXMtPnJlZigpOworICAgICAgICAgICAgZGVzdHJveUdsb2JhbCgpOworICAgICAgICAgICAgbV9j
b250ZXh0LmdldCgpLk1ha2VXZWFrKHRoaXMsIGlzb2xhdGVkQ29udGV4dFdlYWtDYWxsYmFjayk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CiAKICAgICAg
ICAgLy8gSXQncyBsaWtlbHkgdGhhdCBkaXNwb3NpbmcgdGhlIGNvbnRleHQgaGFzIGNyZWF0ZWQg
YSBsb3Qgb2YKICAgICAgICAgLy8gZ2FyYmFnZS4gTm90aWZ5IFY4IGFib3V0IHRoaXMgc28gaXQn
bGwgaGF2ZSBhIGNoYW5jZSBvZiBjbGVhbmluZwogICAgICAgICAvLyBpdCB1cCB3aGVuIGlkbGUu
Ci0gICAgICAgIGJvb2wgaXNNYWluRnJhbWUgPSBtX2ZyYW1lLT5wYWdlKCkgJiYgKG1fZnJhbWUt
PnBhZ2UoKS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSk7IAotICAgICAgICBWOEdDRm9yQ29udGV4
dERpc3Bvc2U6Omluc3RhbmNlKCkubm90aWZ5Q29udGV4dERpc3Bvc2VkKGlzTWFpbkZyYW1lKTsK
KyAgICAgICAgaWYgKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpIHsKKyAgICAgICAgICAgIGJvb2wg
aXNNYWluRnJhbWUgPSBtX2ZyYW1lLT5wYWdlKCkgJiYgKG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZy
YW1lKCkgPT0gbV9mcmFtZSk7CisgICAgICAgICAgICBWOEdDRm9yQ29udGV4dERpc3Bvc2U6Omlu
c3RhbmNlKCkubm90aWZ5Q29udGV4dERpc3Bvc2VkKGlzTWFpbkZyYW1lKTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIG1fcGVyQ29udGV4dERhdGEuY2xlYXIoKTsKQEAgLTI4OSwxMCArMzM3LDEy
IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkKIAogICAgIGlu
aXRpYWxpemVWOElmTmVlZGVkKCk7CiAKLSAgICBtX2NvbnRleHQuYWRvcHQoY3JlYXRlTmV3Q29u
dGV4dChtX2dsb2JhbC5nZXQoKSwgMCwgMCkpOworICAgIGNyZWF0ZUNvbnRleHQoKTsKICAgICBp
ZiAobV9jb250ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYm9v
bCBpc01haW5Xb3JsZCA9IG1fd29ybGQtPmlzTWFpbldvcmxkKCk7CisKICAgICB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250
ZXh0LmdldCgpKTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNvbnRleHQp
OwogCkBAIC0zMDQsNDcgKzM1NCw1NyBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxp
emVJZk5lZWRlZCgpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBGbGFnIGNvbnRleHQgYXMg
aXNvbGF0ZWQuCisgICAgaWYgKCFpc01haW5Xb3JsZCkgeworICAgICAgICBWOERPTVdpbmRvd1No
ZWxsKiBtYWluV2luZG93ID0gbV9mcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCk7CisgICAg
ICAgIG1haW5XaW5kb3ctPmluaXRpYWxpemVJZk5lZWRlZCgpOworICAgICAgICBpZiAoIW1haW5X
aW5kb3ctPmNvbnRleHQoKS5Jc0VtcHR5KCkpCisgICAgICAgICAgICBzZXRJbmplY3RlZFNjcmlw
dENvbnRleHREZWJ1Z0lkKG1fY29udGV4dC5nZXQoKSwgbV9mcmFtZS0+c2NyaXB0KCktPmNvbnRl
eHREZWJ1Z0lkKG1haW5XaW5kb3ctPmNvbnRleHQoKSkpOworICAgICAgICBzZXRJc29sYXRlZFdv
cmxkRmllbGQodGhpcywgY29udGV4dCk7CisgICAgfQorCiAgICAgbV9wZXJDb250ZXh0RGF0YSA9
IFY4UGVyQ29udGV4dERhdGE6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmICghbV9w
ZXJDb250ZXh0RGF0YS0+aW5pdCgpKSB7CiAgICAgICAgIGRpc3Bvc2VDb250ZXh0KCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIWluc3RhbGxET01XaW5kb3coY29u
dGV4dCwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpKSB7CisgICAgaWYgKCFpbnN0
YWxsRE9NV2luZG93KCkpIHsKICAgICAgICAgZGlzcG9zZUNvbnRleHQoKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHVwZGF0ZURvY3VtZW50KCk7Ci0KLSAgICBzZXRTZWN1
cml0eVRva2VuKCk7Ci0KLSAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgY29u
dGV4dC0+QWxsb3dDb2RlR2VuZXJhdGlvbkZyb21TdHJpbmdzKG1fZnJhbWUtPmRvY3VtZW50KCkt
PmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0V2YWwoMCwgQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpTdXBwcmVzc1JlcG9ydCkpOwotCi0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
LT5kaWRDcmVhdGVTY3JpcHRDb250ZXh0KG1fY29udGV4dC5nZXQoKSwgMCwgMCk7Ci0KLSAgICAv
LyBGSVhNRTogVGhpcyBpcyB3cm9uZy4gV2Ugc2hvdWxkIGFjdHVhbGx5IGRvIHRoaXMgZm9yIHRo
ZSBwcm9wZXIgd29ybGQgb25jZQotICAgIC8vIHdlIGRvIGlzb2xhdGVkIHdvcmxkcyB0aGUgV2Vi
Q29yZSB3YXkuCi0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dP
YmplY3RJbldvcmxkKDApOworICAgIGlmIChpc01haW5Xb3JsZCkgeworICAgICAgICB1cGRhdGVE
b2N1bWVudCgpOworICAgICAgICBzZXRTZWN1cml0eVRva2VuKCk7CisgICAgICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgY29udGV4dC0+QWxsb3dDb2RlR2VuZXJhdGlv
bkZyb21TdHJpbmdzKG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgp
LT5hbGxvd0V2YWwoMCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpTdXBwcmVzc1JlcG9ydCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFVzaW5nIHRoZSBkZWZhdWx0IHNlY3VyaXR5IHRva2Vu
IG1lYW5zIHRoYXQgdGhlIGNhbkFjY2VzcyBpcyBhbHdheXMKKyAgICAgICAgLy8gY2FsbGVkLCB3
aGljaCBpcyBzbG93LgorICAgICAgICAvLyBGSVhNRTogVXNlIHRva2VucyB3aGVyZSBwb3NzaWJs
ZS4gVGhpcyB3aWxsIG1lYW4ga2VlcGluZyB0cmFjayBvZiBhbGwKKyAgICAgICAgLy8gICAgICAg
IGNyZWF0ZWQgY29udGV4dHMgc28gdGhhdCB0aGV5IGNhbiBhbGwgYmUgdXBkYXRlZCB3aGVuIHRo
ZQorICAgICAgICAvLyAgICAgICAgZG9jdW1lbnQgZG9tYWluCisgICAgICAgIC8vICAgICAgICBj
aGFuZ2VzLgorICAgICAgICBtX2NvbnRleHQtPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7Cisg
ICAgfQorICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ3JlYXRlU2NyaXB0Q29u
dGV4dChtX2NvbnRleHQuZ2V0KCksIG1fd29ybGQtPmV4dGVuc2lvbkdyb3VwKCksIG1fd29ybGQt
PndvcmxkSWQoKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdjg6OlBlcnNpc3RlbnQ8djg6
OkNvbnRleHQ+IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBnbG9iYWwsIGludCBleHRlbnNpb25Hcm91cCwgaW50IHdvcmxkSWQpCit2b2lk
IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZUNvbnRleHQoKQogewotICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpDb250ZXh0PiByZXN1bHQ7Ci0KICAgICAvLyBUaGUgYWN0aXZlRG9jdW1lbnRMb2FkZXIg
cG9pbnRlciBjb3VsZCBiZSAwIGR1cmluZyBmcmFtZSBzaHV0ZG93bi4KICAgICAvLyBGSVhNRTog
Q2FuIHdlIHJlbW92ZSB0aGlzIGNoZWNrPwogICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBlbnZpcm9ubWVudCB1c2luZyBhbiBlbXB0eSB0
ZW1wbGF0ZSBmb3IgdGhlIHNoYWRvdwogICAgIC8vIG9iamVjdC4gUmV1c2UgdGhlIGdsb2JhbCBv
YmplY3QgaWYgb25lIGhhcyBiZWVuIGNyZWF0ZWQgZWFybGllci4KICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0VGVtcGxhdGU+IGdsb2JhbFRlbXBsYXRlID0gVjhET01XaW5kb3c6OkdldFNo
YWRvd09iamVjdFRlbXBsYXRlKCk7CiAgICAgaWYgKGdsb2JhbFRlbXBsYXRlLklzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVXNlZCB0
byBhdm9pZCBzbGVlcCBjYWxscyBpbiB1bmxvYWQgaGFuZGxlcnMuCiAgICAgU2NyaXB0Q29udHJv
bGxlcjo6cmVnaXN0ZXJFeHRlbnNpb25JZk5lZWRlZChEYXRlRXh0ZW5zaW9uOjpnZXQoKSk7CkBA
IC0zNTksNiArNDE5LDggQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4RE9NV2luZG93
U2hlbGw6OmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2IKICAgICBjb25zdCBWOEV4
dGVuc2lvbnMmIGV4dGVuc2lvbnMgPSBTY3JpcHRDb250cm9sbGVyOjpyZWdpc3RlcmVkRXh0ZW5z
aW9ucygpOwogICAgIE93bkFycmF5UHRyPGNvbnN0IGNoYXIqPiBleHRlbnNpb25OYW1lcyA9IGFk
b3B0QXJyYXlQdHIobmV3IGNvbnN0IGNoYXIqW2V4dGVuc2lvbnMuc2l6ZSgpXSk7CiAgICAgaW50
IGluZGV4ID0gMDsKKyAgICBpbnQgZXh0ZW5zaW9uR3JvdXAgPSBtX3dvcmxkLT5leHRlbnNpb25H
cm91cCgpOworICAgIGludCB3b3JsZElkID0gbV93b3JsZC0+d29ybGRJZCgpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICAvLyBF
bnN1cmUgb3VyIGRhdGUgZXh0ZW5zaW9uIGlzIGFsd2F5cyBhbGxvd2VkLgogICAgICAgICBpZiAo
ZXh0ZW5zaW9uc1tpXSAhPSBEYXRlRXh0ZW5zaW9uOjpnZXQoKQpAQCAtMzY4LDEzICs0MzAsMTMg
QEAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZU5l
d0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2IKICAgICAgICAgZXh0ZW5zaW9uTmFtZXNbaW5kZXgr
K10gPSBleHRlbnNpb25zW2ldLT5uYW1lKCk7CiAgICAgfQogICAgIHY4OjpFeHRlbnNpb25Db25m
aWd1cmF0aW9uIGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24oaW5kZXgsIGV4dGVuc2lvbk5hbWVzLmdl
dCgpKTsKLSAgICByZXN1bHQgPSB2ODo6Q29udGV4dDo6TmV3KCZleHRlbnNpb25Db25maWd1cmF0
aW9uLCBnbG9iYWxUZW1wbGF0ZSwgZ2xvYmFsKTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAg
bV9jb250ZXh0LmFkb3B0KHY4OjpDb250ZXh0OjpOZXcoJmV4dGVuc2lvbkNvbmZpZ3VyYXRpb24s
IGdsb2JhbFRlbXBsYXRlLCBtX2dsb2JhbC5nZXQoKSkpOwogfQogCi1ib29sIFY4RE9NV2luZG93
U2hlbGw6Omluc3RhbGxET01XaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwg
RE9NV2luZG93KiB3aW5kb3cpCitib29sIFY4RE9NV2luZG93U2hlbGw6Omluc3RhbGxET01XaW5k
b3coKQogeworICAgIERPTVdpbmRvdyogd2luZG93ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9t
V2luZG93KCk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHdpbmRvd1dyYXBwZXIgPSBWOE9i
amVjdENvbnN0cnVjdG9yOjpuZXdJbnN0YW5jZShWOERPTVdyYXBwZXI6OmNvbnN0cnVjdG9yRm9y
VHlwZSgmVjhET01XaW5kb3c6OmluZm8sIHdpbmRvdykpOwogICAgIGlmICh3aW5kb3dXcmFwcGVy
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk4LDcgKzQ2MCw3IEBAIGJv
b2wgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0LCBET01XaW5kCiAgICAgLy8gICAgICAgb3V0ZXIsIGlubmVyLCBhbmQgRE9N
V2luZG93IGluc3RhbmNlIGFsbCBhcHBlYXIgdG8gYmUgdGhlIHNhbWUKICAgICAvLyAgICAgICBK
YXZhU2NyaXB0IG9iamVjdC4KICAgICAvLwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaW5u
ZXJHbG9iYWxPYmplY3QgPSB0b0lubmVyR2xvYmFsT2JqZWN0KGNvbnRleHQpOworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gaW5uZXJHbG9iYWxPYmplY3QgPSB0b0lubmVyR2xvYmFsT2JqZWN0
KG1fY29udGV4dC5nZXQoKSk7CiAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGlubmVy
R2xvYmFsT2JqZWN0LCAmVjhET01XaW5kb3c6OmluZm8sIHdpbmRvdyk7CiAgICAgaW5uZXJHbG9i
YWxPYmplY3QtPlNldFByb3RvdHlwZSh3aW5kb3dXcmFwcGVyKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQwNiwxMSArNDY4LDE1IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbERPTVdp
bmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBET01XaW5kCiAKIHZvaWQgVjhE
T01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlcikKIHsKKyAgICBBU1NFUlQobV93b3JsZC0+aXNNYWluV29ybGQoKSk7CiAgICAg
bV9kb2N1bWVudC5zZXQod3JhcHBlcik7CiB9CiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBk
YXRlRG9jdW1lbnRQcm9wZXJ0eSgpCiB7CisgICAgaWYgKCFtX3dvcmxkLT5pc01haW5Xb3JsZCgp
KQorICAgICAgICByZXR1cm47CisKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSB1c2UgYSBuZXcgTG9jYWwgaGFuZGxlIGhlcmU/CiAgICAg
djg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2NvbnRleHQuZ2V0KCkpOwpAQCAtNDM5
LDExICs1MDUsMTUgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFByb3Bl
cnR5KCkKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6Y2xlYXJEb2N1bWVudFByb3BlcnR5KCkKIHsK
ICAgICBBU1NFUlQoIW1fY29udGV4dC5pc0VtcHR5KCkpOworICAgIGlmICghbV93b3JsZC0+aXNN
YWluV29ybGQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+R2xvYmFsKCktPkZv
cmNlRGVsZXRlKHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1lbnQiKSk7CiB9CiAKIHZvaWQgVjhET01X
aW5kb3dTaGVsbDo6c2V0U2VjdXJpdHlUb2tlbigpCiB7CisgICAgQVNTRVJUKG1fd29ybGQtPmlz
TWFpbldvcmxkKCkpOworCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKTsKIAogICAgIC8vIEFzayB0aGUgZG9jdW1lbnQncyBTZWN1cml0eU9yaWdpbiB0byBnZW5l
cmF0ZSBhIHNlY3VyaXR5IHRva2VuLgpAQCAtNDc0LDYgKzU0NCw4IEBAIHZvaWQgVjhET01XaW5k
b3dTaGVsbDo6c2V0U2VjdXJpdHlUb2tlbigpCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBk
YXRlRG9jdW1lbnQoKQogeworICAgIEFTU0VSVChtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKKwog
ICAgIGlmIChtX2dsb2JhbC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWlu
aXRpYWxpemVJZk5lZWRlZCgpKQpAQCAtNDk5LDYgKzU3MSw4IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZ2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBwcm9wZXJ0eSwgY29uc3Qg
djg6OkFjCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtQWRkZWQoSFRNTERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogeworICAgIEFTU0VSVCht
X3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKKwogICAgIGlmICghaW5pdGlhbGl6ZUlmTmVlZGVkKCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtNTEyLDYgKzU4Niw4IEBAIHZvaWQgVjhET01XaW5kb3dT
aGVsbDo6bmFtZWRJdGVtQWRkZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWlj
U3RyaW5nCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVtb3ZlZChIVE1MRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CisgICAgQVNTRVJU
KG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOworCiAgICAgaWYgKGRvY3VtZW50LT5oYXNOYW1lZEl0
ZW0obmFtZS5pbXBsKCkpIHx8IGRvY3VtZW50LT5oYXNFeHRyYU5hbWVkSXRlbShuYW1lLmltcGwo
KSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTI4LDEwICs2MDQsMjUgQEAgdm9pZCBWOERPTVdp
bmRvd1NoZWxsOjpuYW1lZEl0ZW1SZW1vdmVkKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEF0b21pY1N0cmkKIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVTZWN1cml0eU9yaWdp
bigpCiB7CisgICAgQVNTRVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOworCiAgICAgaWYgKG1f
Y29udGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICB2ODo6SGFuZGxlU2NvcGUg
aGFuZGxlU2NvcGU7CiAgICAgc2V0U2VjdXJpdHlUb2tlbigpOwogfQogCit2b2lkIFY4RE9NV2lu
ZG93U2hlbGw6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBBU1NFUlQoIW1fd29ybGQtPmlzTWFp
bldvcmxkKCkpOworCisgICAgaWYgKCFtX2lzb2xhdGVkV29ybGRTaGVsbFNlY3VyaXR5T3JpZ2lu
ICYmICFjb250ZXh0KCkuSXNFbXB0eSgpICYmIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFz
RnJvbnRlbmRzKCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAg
ICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2
ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dCgpKSk7CisgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBiZSBoZXJlPworICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENyZWF0ZUlzb2xhdGVkQ29udGV4dChtX2ZyYW1lLCBzY3JpcHRTdGF0ZSwgc2VjdXJpdHlP
cmlnaW4uZ2V0KCkpOworICAgIH0KKyAgICBtX2lzb2xhdGVkV29ybGRTaGVsbFNlY3VyaXR5T3Jp
Z2luID0gc2VjdXJpdHlPcmlnaW47Cit9CisKIH0gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCmluZGV4IDVlZWYyODZmMjhhOGZmYWYw
NWM2NTFmMDVlY2FmYWRkM2Y0NGQ0ZDQuLmI4Y2U0MjBjYmYzODNiNjM5NjJiOGU2OGVkY2Q4ZjVh
OTlkMGU1YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2lu
ZG93U2hlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1No
ZWxsLmgKQEAgLTMxLDcgKzMxLDkgQEAKICNpZm5kZWYgVjhET01XaW5kb3dTaGVsbF9oCiAjZGVm
aW5lIFY4RE9NV2luZG93U2hlbGxfaAogCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAj
aW5jbHVkZSAiU2NvcGVkUGVyc2lzdGVudC5oIgorI2luY2x1ZGUgIlNoYXJlZFBlcnNpc3RlbnQu
aCIKICNpbmNsdWRlICJWOFBlckNvbnRleHREYXRhLmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJ
bmZvLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTQ2LDEyICs0OCwxMyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhU
TUxEb2N1bWVudDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiAvLyBWOFdpbmRvd1NoZWxsIHJl
cHJlc2VudHMgYWxsIHRoZSBwZXItZ2xvYmFsIG9iamVjdCBzdGF0ZSBmb3IgYSBGcmFtZSB0aGF0
CiAvLyBwZXJzaXN0IGJldHdlZW4gbmF2aWdhdGlvbnMuCiBjbGFzcyBWOERPTVdpbmRvd1NoZWxs
IDogcHVibGljIFJlZkNvdW50ZWQ8VjhET01XaW5kb3dTaGVsbD4gewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFY4RE9NV2luZG93U2hlbGw+IGNyZWF0ZShGcmFtZSopOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFY4RE9NV2luZG93U2hlbGw+IGNyZWF0ZShGcmFtZSosIFBhc3NSZWZQ
dHI8RE9NV3JhcHBlcldvcmxkPik7CiAKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4g
Y29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCkBAIC02OCw3ICs3
MSw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ29udGV4dEluaXRpYWxpemVkKCk7CiAKICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdyb3VwLCBpbnQgd29ybGRJZCk7Ci0gICAg
c3RhdGljIGJvb2wgaW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0LCBET01XaW5kb3cqKTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZUlmTmVlZGVkKCk7CiAgICAg
dm9pZCB1cGRhdGVEb2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
KTsKQEAgLTgwLDEwICs4Miw0MyBAQCBwdWJsaWM6CiAKICAgICBWOFBlckNvbnRleHREYXRhKiBw
ZXJDb250ZXh0RGF0YSgpIHsgcmV0dXJuIG1fcGVyQ29udGV4dERhdGEuZ2V0KCk7IH0KIAorICAg
IERPTVdyYXBwZXJXb3JsZCogd29ybGQoKSB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9CisKKyAg
ICB2b2lkIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPik7CisgICAgU2VjdXJpdHlPcmlnaW4qIGlzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdp
bigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIW1fd29ybGQtPmlzTWFpbldvcmxkKCkp
OworICAgICAgICByZXR1cm4gbV9pc29sYXRlZFdvcmxkU2hlbGxTZWN1cml0eU9yaWdpbi5nZXQo
KTsKKyAgICB9OworCisgICAgLy8gUmV0dXJucyB0aGUgaXNvbGF0ZWQgd29ybGQgYXNzb2NpYXRl
ZCB3aXRoCisgICAgLy8gdjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKS4gQmVjYXVzZSB3b3JsZHMg
YXJlIGlzb2xhdGVkLCB0aGUgZW50aXJlCisgICAgLy8gSmF2YVNjcmlwdCBjYWxsIHN0YWNrIHNo
b3VsZCBiZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGVkIHdvcmxkLgorICAgIC8vIFJldHVybnMgMCBp
ZiB0aGUgZW50ZXJlZCBjb250ZXh0IGlzIGZyb20gdGhlIG1haW4gd29ybGQuCisgICAgLy8KKyAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgZWRnZSBjYXNlcyB3aXRoIERPTSBtdXRhdGlvbiBldmVudHMg
dGhhdCBtaWdodAorICAgIC8vIHZpb2xhdGUgdGhpcyBpbnZhcmlhbnQuCisgICAgLy8KKyAgICAv
LyBGSVhNRTogVGhpcyBpcyBwb29ybHkgbmFtZWQgYWZ0ZXIgdGhlIGRlbGV0aW9uIG9mIGlzb2xh
dGVkIGNvbnRleHRzLgorICAgIHN0YXRpYyBWOERPTVdpbmRvd1NoZWxsKiBnZXRFbnRlcmVkKCkK
KyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcGVyZm9ybWFuY2Ugb3B0aW1p
emF0aW9uLiBFc3NlbnRpYWxseSwKKyAgICAgICAgLy8gR2V0SGlkZGVuVmFsdWUgaXMgdG9vIHNs
b3cgZm9yIHRoaXMgY29kZSBwYXRoLiBXZSBuZWVkIHRvIGdldCB0aGUKKyAgICAgICAgLy8gVjgg
dGVhbSB0byBhZGQgYSByZWFsIHByb3BlcnR5IHRvIHY4OjpDb250ZXh0IGZvciBpc29sYXRlZCB3
b3JsZHMuCisgICAgICAgIC8vIFVudGlsIHRoZW4sIHdlIG9wdGltaXplIHRoZSBjb21tb24gY2Fz
ZSBvZiBub3QgaGF2aW5nIGFueSBpc29sYXRlZAorICAgICAgICAvLyB3b3JsZHMgYXQgYWxsLgor
ICAgICAgICBpZiAoIURPTVdyYXBwZXJXb3JsZDo6aXNvbGF0ZWRXb3JsZHNFeGlzdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghdjg6OkNvbnRleHQ6OkluQ29udGV4dCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBlbnRlcmVkSXNvbGF0ZWRX
b3JsZENvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGRlc3Ryb3lJc29sYXRlZFNoZWxsKCk7
CiBwcml2YXRlOgotICAgIFY4RE9NV2luZG93U2hlbGwoRnJhbWUqKTsKKyAgICBWOERPTVdpbmRv
d1NoZWxsKEZyYW1lKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+KTsKIAotICAgIHZvaWQg
ZGlzcG9zZUNvbnRleHQoKTsKKyAgICB2b2lkIGRpc3Bvc2VDb250ZXh0KGJvb2wgd2VhayA9IGZh
bHNlKTsKIAogICAgIHZvaWQgc2V0U2VjdXJpdHlUb2tlbigpOwogCkBAIC05NCwxMyArMTI5LDIy
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVEb2N1bWVudFByb3BlcnR5KCk7CiAgICAgdm9p
ZCBjbGVhckRvY3VtZW50UHJvcGVydHkoKTsKIAorICAgIHZvaWQgY3JlYXRlQ29udGV4dCgpOwor
ICAgIGJvb2wgaW5zdGFsbERPTVdpbmRvdygpOworCisgICAgc3RhdGljIFY4RE9NV2luZG93U2hl
bGwqIGVudGVyZWRJc29sYXRlZFdvcmxkQ29udGV4dCgpOworCiAgICAgRnJhbWUqIG1fZnJhbWU7
CisgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV93b3JsZDsKIAogICAgIE93blB0cjxWOFBl
ckNvbnRleHREYXRhPiBtX3BlckNvbnRleHREYXRhOwogCiAgICAgU2NvcGVkUGVyc2lzdGVudDx2
ODo6Q29udGV4dD4gbV9jb250ZXh0OwogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
bV9nbG9iYWw7CiAgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2RvY3VtZW50Owor
CisgICAgLy8gRklYTUU6IEVpdGhlciByZW1vdmUgdGhpcyBvciB0aGUgbWFwIGluIFNjcmlwdENv
bnRyb2xsZXIuCisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2lzb2xhdGVkV29ybGRTaGVs
bFNlY3VyaXR5T3JpZ2luOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAppbmRleCA0ZTU2NGEzNGJhNTkwODg4ZjMx
Y2EyNWQyODAzNjcxZjFmMmY5NWIyLi4wZTVjYjI4MzQwMjQxMTRhNTZjNThlZDYyOGQ3ZDgzNWY5
ZWJlOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApAQCAt
MzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVjhD
dXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJWOERPTU1hcC5oIgotI2luY2x1ZGUg
IlY4SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2lu
Y2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCiAjaW5j
bHVkZSA8djguaD4KQEAgLTEzMCw3ICsxMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAqd3JhcHBlcjsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgVjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0
RW50ZXJlZCgpOworICAgICAgICAgICAgVjhET01XaW5kb3dTaGVsbCogY29udGV4dCA9IFY4RE9N
V2luZG93U2hlbGw6OmdldEVudGVyZWQoKTsKICAgICAgICAgICAgIGlmIChMSUtFTFkoIWNvbnRl
eHQpKSB7CiAgICAgICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHdyYXBw
ZXIgPSBub2RlLT53cmFwcGVyKCk7CiAgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGY4ZWM5MTg5MzY1NDczYzU3OTBjNDE3Y2NmZDk3
Njk4ODJkNjhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
VjhJc29sYXRlZENvbnRleHQuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
LSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCi0j
aW5jbHVkZSAiVjhQZXJDb250ZXh0RGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1WOElzb2xhdGVkQ29udGV4dCogVjhJc29sYXRl
ZENvbnRleHQ6Omlzb2xhdGVkQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VjhJc29sYXRlZENvbnRleHQqPihnZXRHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVu
dGVyZWQoKSktPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZChWOERPTVdpbmRvdzo6ZW50ZXJl
ZElzb2xhdGVkV29ybGRJbmRleCkpOwotfQotCi12b2lkIFY4SXNvbGF0ZWRDb250ZXh0Ojpjb250
ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0
LCB2b2lkKiBpc29sYXRlZENvbnRleHQpCi17Ci0gICAgLy8gT3VyIGNvbnRleHQgaXMgZ29pbmcg
YXdheS4gIFRpbWUgdG8gY2xlYW4gdXAgdGhlIHdvcmxkLgotICAgIFY4SXNvbGF0ZWRDb250ZXh0
KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8VjhJc29sYXRlZENvbnRleHQqPihpc29sYXRlZENvbnRl
eHQpOwotICAgIGRlbGV0ZSBjb250ZXh0OwotfQotCi1zdGF0aWMgdm9pZCBzZXRJbmplY3RlZFNj
cmlwdENvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHRhcmdldENvbnRleHQs
IGludCBkZWJ1Z0lkKQotewotICAgIGNoYXIgYnVmZmVyWzMyXTsKLSAgICBpZiAoZGVidWdJZCA9
PSAtMSkKLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgImluamVjdGVk
Iik7Ci0gICAgZWxzZQotICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAi
aW5qZWN0ZWQsJWQiLCBkZWJ1Z0lkKTsKLSAgICB0YXJnZXRDb250ZXh0LT5TZXREYXRhKHY4OjpT
dHJpbmc6Ok5ldyhidWZmZXIpKTsKLX0KLQotVjhJc29sYXRlZENvbnRleHQ6OlY4SXNvbGF0ZWRD
b250ZXh0KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkKQot
ICAgIDogbV93b3JsZCh3b3JsZCksCi0gICAgICBtX2ZyYW1lKGZyYW1lKQotewotICAgIHY4OjpI
YW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBtYWluV29ybGRD
b250ZXh0ID0gZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7Ci0gICAg
aWYgKG1haW5Xb3JsZENvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGJlIGNyZWF0aW5nIGEgbmV3IFY4RE9NV2luZG93U2hlbGwgaGVy
ZSBpbnN0ZWFkIG9mIHJpcGluZyBvdXQgdGhlIGNvbnRleHQuCi0gICAgbV9jb250ZXh0ID0gU2hh
cmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZShmcmFtZS0+c2NyaXB0KCktPndpbmRv
d1NoZWxsKCktPmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBtX3dv
cmxkLT5leHRlbnNpb25Hcm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpKTsKLSAgICBpZiAobV9j
b250ZXh0LT5nZXQoKS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJ1biBj
b2RlIGluIHRoZSBuZXcgY29udGV4dC4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNj
b3BlKG1fY29udGV4dC0+Z2V0KCkpOwotCi0gICAgc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVi
dWdJZChtX2NvbnRleHQtPmdldCgpLCBTY3JpcHRDb250cm9sbGVyOjpjb250ZXh0RGVidWdJZCht
YWluV29ybGRDb250ZXh0KSk7Ci0KLSAgICBnZXRHbG9iYWxPYmplY3QobV9jb250ZXh0LT5nZXQo
KSktPlNldFBvaW50ZXJJbkludGVybmFsRmllbGQoVjhET01XaW5kb3c6OmVudGVyZWRJc29sYXRl
ZFdvcmxkSW5kZXgsIHRoaXMpOwotCi0gICAgbV9wZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4
dERhdGE6OmNyZWF0ZShtX2NvbnRleHQtPmdldCgpKTsKLSAgICBtX3BlckNvbnRleHREYXRhLT5p
bml0KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGdvIGF3YXkgb25jZSB3ZSBoYXZlIGEg
d2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KLSAgICBmcmFtZS0+c2NyaXB0KCkt
PndpbmRvd1NoZWxsKCktPmluc3RhbGxET01XaW5kb3cobV9jb250ZXh0LT5nZXQoKSwgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpOwotCi0gICAgLy8gVXNpbmcgdGhlIGRlZmF1bHQg
c2VjdXJpdHkgdG9rZW4gbWVhbnMgdGhhdCB0aGUgY2FuQWNjZXNzIGlzIGFsd2F5cwotICAgIC8v
IGNhbGxlZCwgd2hpY2ggaXMgc2xvdy4KLSAgICAvLyBGSVhNRTogVXNlIHRva2VucyB3aGVyZSBw
b3NzaWJsZS4gVGhpcyB3aWxsIG1lYW4ga2VlcGluZyB0cmFjayBvZiBhbGwKLSAgICAvLyAgICAg
ICAgY3JlYXRlZCBjb250ZXh0cyBzbyB0aGF0IHRoZXkgY2FuIGFsbCBiZSB1cGRhdGVkIHdoZW4g
dGhlCi0gICAgLy8gICAgICAgIGRvY3VtZW50IGRvbWFpbgotICAgIC8vICAgICAgICBjaGFuZ2Vz
LgotICAgIG1fY29udGV4dC0+Z2V0KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7Ci0KLSAg
ICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENyZWF0ZVNjcmlwdENvbnRleHQoY29u
dGV4dCgpLCBtX3dvcmxkLT5leHRlbnNpb25Hcm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwot
fQotCi12b2lkIFY4SXNvbGF0ZWRDb250ZXh0OjpkZXN0cm95KCkKLXsKLSAgICBtX3BlckNvbnRl
eHREYXRhLmNsZWFyKCk7Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT53aWxsUmVs
ZWFzZVNjcmlwdENvbnRleHQoY29udGV4dCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwotICAgIG1f
Y29udGV4dC0+Z2V0KCkuTWFrZVdlYWsodGhpcywgJmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJh
Y2spOwotICAgIG1fZnJhbWUgPSAwOwotfQotCi1WOElzb2xhdGVkQ29udGV4dDo6flY4SXNvbGF0
ZWRDb250ZXh0KCkKLXsKLSAgICBtX2NvbnRleHQtPmRpc3Bvc2VIYW5kbGUoKTsKLX0KLQotdm9p
ZCBWOElzb2xhdGVkQ29udGV4dDo6c2V0U2VjdXJpdHlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgaWYgKCFtX3NlY3VyaXR5T3JpZ2luICYm
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkgJiYgIWNvbnRleHQoKS5J
c0VtcHR5KCkpIHsKLSAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgICAg
ICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2ODo6
TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dCgpKSk7Ci0gICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlSXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUsIHNjcmlwdFN0
YXRlLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0gICAgfQotICAgIG1fc2VjdXJpdHlPcmlnaW4g
PSBzZWN1cml0eU9yaWdpbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDlkMWMyODA3ZDY0NGRjMWZkNWRmNDc5NTMzOTUyNGZmYWZjNjFhYTQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBWOElzb2xhdGVkQ29udGV4dF9oCi0jZGVmaW5lIFY4SXNvbGF0
ZWRDb250ZXh0X2gKLQotI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIlNj
cmlwdFNvdXJjZUNvZGUuaCIgLy8gZm9yIFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGUKLSNpbmNs
dWRlICJTaGFyZWRQZXJzaXN0ZW50LmgiCi0jaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKLSNpbmNs
dWRlIDx2OC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYW1lOwotY2xhc3Mg
U2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBWOFBlckNvbnRleHREYXRhOwotCi0vLyBWOElzb2xhdGVk
Q29udGV4dAotLy8KLS8vIFY4SXNvbGF0ZWRDb250ZXh0IHJlcHJlc2VudHMgYSBpc29sYXRlZCBl
eGVjdXRpb24gZW52aXJvbm1lbnQgZm9yCi0vLyBKYXZhU2NyaXB0LiAgRWFjaCBpc29sYXRlZCB3
b3JsZCBleGVjdXRlcyBpbiBwYXJhbGxlbCB3aXRoIHRoZSBtYWluCi0vLyBKYXZhU2NyaXB0IHdv
cmxkLiAgQW4gaXNvbGF0ZWQgd29ybGQgaGFzIGFjY2VzcyB0byB0aGUgc2FtZSBET00gZGF0YQot
Ly8gc3RydWN0dXJlcyBhcyB0aGUgbWFpbiB3b3JsZCBidXQgbm9uZSBvZiB0aGUgSmF2YVNjcmlw
dCBwb2ludGVycy4KLS8vCi0vLyBJdCBpcyBhbiBlcnJvciB0byBldmVyIHNoYXJlIGEgSmF2YVNj
cmlwdCBwb2ludGVyIGJldHdlZW4gdHdvIGlzb2xhdGVkCi0vLyB3b3JsZHMgb3IgYmV0d2VlbiBh
biBpc29sYXRlZCB3b3JsZCBhbmQgdGhlIG1haW4gd29ybGQuICBCZWNhdXNlCi0vLyBpc29sYXRl
ZCB3b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVkIHRoZWlyIG93biBET00g
d3JhcHBlcnMKLS8vIHRvIGF2b2lkIGhhdmluZyBwb2ludGVycyB0byB0aGUgbWFpbiB3b3JsZCdz
IERPTSB3cmFwcGVycyAod2hpY2ggYXJlCi0vLyBKYXZhU2NyaXB0IG9iamVjdHMpLgotY2xhc3Mg
VjhJc29sYXRlZENvbnRleHQgewotcHVibGljOgotICAgIC8vIENyZWF0ZXMgYW4gaXNvbGF0ZWQg
d29ybGQuIFRvIGRlc3Ryb3kgaXQsIGNhbGwgZGVzdHJveSgpLgotICAgIC8vIFRoaXMgd2lsbCBk
ZWxldGUgdGhlIGlzb2xhdGVkIHdvcmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydk
LgotICAgIFY4SXNvbGF0ZWRDb250ZXh0KEZyYW1lKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29y
bGQ+KTsKLSAgICB+VjhJc29sYXRlZENvbnRleHQoKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byBk
ZXN0cm95IHRoZSBpc29sYXRlZCB3b3JsZC4gSXQgd2lsbCBiZSBkZWxldGVkIHNvbWV0aW1lCi0g
ICAgLy8gYWZ0ZXIgdGhpcyBjYWxsLCBvbmNlIGFsbCBzY3JpcHQgcmVmZXJlbmNlcyB0byB0aGUg
d29ybGQncyBjb250ZXh0Ci0gICAgLy8gaGF2ZSBiZWVuIGRyb3BwZWQuCi0gICAgdm9pZCBkZXN0
cm95KCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpc29sYXRlZCB3b3JsZCBhc3NvY2lhdGVkIHdp
dGgKLSAgICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpLiAgQmVjYXVzZSB3b3JsZHMgYXJl
IGlzb2xhdGVkLCB0aGUgZW50aXJlCi0gICAgLy8gSmF2YVNjcmlwdCBjYWxsIHN0YWNrIHNob3Vs
ZCBiZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGVkIHdvcmxkLgotICAgIC8vIFJldHVybnMgMCBpZiB0
aGUgZW50ZXJlZCBjb250ZXh0IGlzIGZyb20gdGhlIG1haW4gd29ybGQuCi0gICAgLy8KLSAgICAv
LyBGSVhNRTogQ29uc2lkZXIgZWRnZSBjYXNlcyB3aXRoIERPTSBtdXRhdGlvbiBldmVudHMgdGhh
dCBtaWdodAotICAgIC8vIHZpb2xhdGUgdGhpcyBpbnZhcmlhbnQuCi0gICAgLy8KLSAgICBzdGF0
aWMgVjhJc29sYXRlZENvbnRleHQqIGdldEVudGVyZWQoKQotICAgIHsKLSAgICAgICAgLy8gVGhp
cyBpcyBhIHRlbXBvcmFyeSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIEVzc2VudGlhbGx5LAot
ICAgICAgICAvLyBHZXRIaWRkZW5WYWx1ZSBpcyB0b28gc2xvdyBmb3IgdGhpcyBjb2RlIHBhdGgu
IFdlIG5lZWQgdG8gZ2V0IHRoZQotICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJlYWwgcHJv
cGVydHkgdG8gdjg6OkNvbnRleHQgZm9yIGlzb2xhdGVkIHdvcmxkcy4KLSAgICAgICAgLy8gVW50
aWwgdGhlbiwgd2Ugb3B0aW1pemUgdGhlIGNvbW1vbiBjYXNlIG9mIG5vdCBoYXZpbmcgYW55IGlz
b2xhdGVkCi0gICAgICAgIC8vIHdvcmxkcyBhdCBhbGwuCi0gICAgICAgIGlmICghRE9NV3JhcHBl
cldvcmxkOjppc29sYXRlZFdvcmxkc0V4aXN0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgaWYgKCF2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIGlzb2xhdGVkQ29udGV4dCgpOwotICAgIH0KLQotICAgIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9
Ci0gICAgUGFzc1JlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IHNoYXJlZENv
bnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KLQotICAgIERPTVdyYXBwZXJXb3JsZCogd29y
bGQoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9Ci0KLSAgICBTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgp
OyB9Ci0gICAgdm9pZCBzZXRTZWN1cml0eU9yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
Pik7Ci0KLSAgICBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YSgpIHsgcmV0dXJuIG1f
cGVyQ29udGV4dERhdGEuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29u
dGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KGNvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2Fs
bGVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGVuIG91ciBKYXZhU2NyaXB0IGNvbnRleHQg
aXMgYWJvdXQKLSAgICAvLyB0byBiZSBkZXN0cm95ZWQuCi0gICAgc3RhdGljIHZvaWQgY29udGV4
dFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwg
dm9pZCogaXNvbGF0ZWRDb250ZXh0KTsKLQotICAgIHN0YXRpYyBWOElzb2xhdGVkQ29udGV4dCog
aXNvbGF0ZWRDb250ZXh0KCk7Ci0KLSAgICAvLyBUaGUgdW5kZXJseWluZyB2ODo6Q29udGV4dC4g
VGhpcyBvYmplY3QgaXMga2VlcCBvbiB0aGUgaGVhcCBhcwotICAgIC8vIGxvbmcgYXMgfG1fY29u
dGV4dHwgaGFzIG5vdCBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkLgotICAgIFJlZlB0cjxTaGFyZWRQ
ZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4dDsKLQotICAgIFJlZlB0cjxET01XcmFw
cGVyV29ybGQ+IG1fd29ybGQ7Ci0KLSAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJp
dHlPcmlnaW47Ci0KLSAgICBGcmFtZSogbV9mcmFtZTsKLQotICAgIE93blB0cjxWOFBlckNvbnRl
eHREYXRhPiBtX3BlckNvbnRleHREYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVjhJc29sYXRlZENvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAppbmRleCBjMWJiZGJmNzc1NmU4YjA3
NTdhOGFkMDRiOTI0NDQxMWExYThhZTNkLi4wYjA0NmQzMzJlZDVjZTdmMTcxZDU4MDcwMmU0NGZm
ODY3NjJiOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2lu
Y2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNs
dWRlICJWOERPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJWOERvY3VtZW50LmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcAppbmRleCA0ODhm
M2I1MjdiNjgzMTQyNmI0ZjlkNDBkNDg3MTE3MDkxNWVhMTQ4Li4wNWU1MTQ4OTA1NDVmNDU2MjNm
ODllMzhkNWFlOWFmZGM2YTc5NTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmxkQ29udGV4dEhhbmRsZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJX
b3JsZENvbnRleHRIYW5kbGUuaCIKIAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNp
bmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwxNSArNDIsMjEgQEAgV29ybGRDb250
ZXh0SGFuZGxlOjpXb3JsZENvbnRleHRIYW5kbGUoV29ybGRUb1VzZSB3b3JsZFRvVXNlKQogICAg
IGlmICh3b3JsZFRvVXNlID09IFVzZU1haW5Xb3JsZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKFY4SXNvbGF0ZWRDb250ZXh0KiBjb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVu
dGVyZWQoKSkKLSAgICAgICAgbV9jb250ZXh0ID0gY29udGV4dC0+c2hhcmVkQ29udGV4dCgpOwor
ICAgIFY4RE9NV2luZG93U2hlbGwqIHNoZWxsID0gVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJl
ZCgpOworICAgIGlmIChMSUtFTFkoIXNoZWxsKSkgeworICAgICAgICBtX3dvcmxkVG9Vc2UgPSBV
c2VNYWluV29ybGQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQgPSBT
aGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6Y3JlYXRlKHNoZWxsLT5jb250ZXh0KCkpOwog
fQogCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFdvcmxkQ29udGV4dEhhbmRsZTo6YWRqdXN0ZWRD
b250ZXh0KFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCkgY29uc3QKIHsKLSAgICBpZiAobV93b3Js
ZFRvVXNlID09IFVzZU1haW5Xb3JsZCB8fCAhbV9jb250ZXh0IHx8IG1fY29udGV4dC0+Z2V0KCku
SXNFbXB0eSgpKQorICAgIGlmIChtX3dvcmxkVG9Vc2UgPT0gVXNlTWFpbldvcmxkKQogICAgICAg
ICByZXR1cm4gc2NyaXB0LT5tYWluV29ybGRDb250ZXh0KCk7CiAKKyAgICBBU1NFUlQoIW1fY29u
dGV4dC0+Z2V0KCkuSXNFbXB0eSgpKTsKICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0
Pjo6TmV3KG1fY29udGV4dC0+Z2V0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggM2VmMTlmMjU1
ZWIzOTk2ZWE1OWEyM2ExOTA2N2E2NmEyMTFlMzhmYS4uNGY4NGI0ZDMzOGY5MWFhNDkyZjU2ZjJj
NTI2Yjc1OWQwOTEwNDhlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcApAQCAtNDQsOSArNDQsOSBAQAogI2luY2x1
ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaW5jbHVkZSAiVjhDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJWOERPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1
ZGUgIlY4SFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNp
bmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFRvdWNoLmgiCiAjaW5jbHVkZSAiVjhUb3Vj
aExpc3QuaCIKQEAgLTEzMCw3ICsxMzAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChE
b2N1bWVudCogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYgogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4RG9jdW1lbnQ6OndyYXAoaW1wbCwg
aXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgaWYgKCFWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50
ZXJlZCgpKSB7CisgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsKICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpCiAgICAgICAgICAgICBmcmFt
ZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVy
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAppbmRleCAzZjFjYmMxZWU3NjllNTFkMDMxZjIz
M2ViOTgwYWU2NzZjYzU0Y2RkLi5hYjFhOTRlMzdhZmUxZThmMjYyYjY3OTJiZTFjODUyZmE5ODky
NTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
RG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTQwLDkgKzQwLDkgQEAKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdpbmRv
dy5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJWOEhUTUxBbGxD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhIVE1MQ29sbGVjdGlvbi5oIgotI2luY2x1ZGUgIlY4
SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhSZWN1
cnNpb25TY29wZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTE4
Nyw3ICsxODcsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChIVE1MRG9jdW1lbnQqIGlt
cGwsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGZvcmNlTgogICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IFY4SFRNTERvY3VtZW50Ojp3cmFwKGltcGwsIGlzb2xhdGUsIGZv
cmNlTmV3T2JqZWN0KTsKICAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biB3cmFwcGVyOwotICAgIGlmICghVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewor
ICAgIGlmICghVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpKSB7CiAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpKQogICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgp
LT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1l
bnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9j
dW1lbnRDdXN0b20uY3BwCmluZGV4IDc5N2VhYWJmMDg5Y2YzMzY5NWM0MzVmNzg2ZDM1ZjRmY2Y3
OTI1NTAuLmRjYzc5MzY2M2YxMzU1ZGIzYWNiZDczYzAzZDYxNjZmOGM1YTdhMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVu
dEN1c3RvbS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJWOFNWR0RvY3VtZW50Lmgi
CiAKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCisj
aW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQ1LDcgKzQ1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU1ZHRG9jdW1lbnQqIGlt
cGwsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGZvcmNlTmUKICAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFNWR0RvY3VtZW50Ojp3cmFwKGltcGwsIGlzb2xhdGUsIGZv
cmNlTmV3T2JqZWN0KTsKICAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biB3cmFwcGVyOwotICAgIGlmICghVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewor
ICAgIGlmICghVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpKSB7CiAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpKQogICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgp
LT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJl
cXVlc3RDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAppbmRleCBjMGU5YzViOTJiYzJjOWViNWE3
YTU1YmJkNGQ1MGFlMzQxNGU4MmQ3Li4wMGMxYzI2NjlkZjdiZGU4NGQ3NGRlN2ViNjY5ODM0YjA3
ODY1NWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcApAQCAtMzUsNyArMzUs
NyBAQAogI2luY2x1ZGUgIk9yaWdpbkFjY2Vzc0VudHJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJWOFV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkuaCIKQEAgLTU5LDggKzU5LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4WE1MSHR0cFJlcXVlc3Q6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoUmVmZXJlbmNlRXJyb3IsICJYTUxIdHRw
UmVxdWVzdCBjb25zdHJ1Y3RvcidzIGFzc29jaWF0ZWQgY29udGV4dCBpcyBub3QgYXZhaWxhYmxl
IiwgYXJncy5HZXRJc29sYXRlKCkpOwogCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1
cml0eU9yaWdpbjsKLSAgICBpZiAoVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dCA9
IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpCi0gICAgICAgIHNlY3VyaXR5T3JpZ2lu
ID0gaXNvbGF0ZWRDb250ZXh0LT5zZWN1cml0eU9yaWdpbigpOworICAgIGlmIChWOERPTVdpbmRv
d1NoZWxsKiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVk
KCkpCisgICAgICAgIHNlY3VyaXR5T3JpZ2luID0gaXNvbGF0ZWRXb3JsZFNoZWxsLT5pc29sYXRl
ZFdvcmxkU2VjdXJpdHlPcmlnaW4oKTsKICAgICBSZWZQdHI8WE1MSHR0cFJlcXVlc3Q+IHhtbEh0
dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzZWN1cml0eU9yaWdp
bik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsK
ICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8sIHhtbEh0dHBS
ZXF1ZXN0LmdldCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163077</attachid>
            <date>2012-09-10 02:55:54 -0700</date>
            <delta_ts>2012-09-11 00:40:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95735-20120910115530.patch</filename>
            <type>text/plain</type>
            <size>69465</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTRmMjZjNGY2ZjVhYzE5
NTIxYTcyNTUzMzgzN2YyZmZhMDRiN2I1My4uMmUxMmIxNTliN2I2MTc1ZjRiNTA5NGM1ZjVlOWU0
MDMxYjM3MjRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wOS0xMCAgRGFu
IENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZW1vdmVkIFY4SXNvbGF0
ZWRDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTczNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbW92ZSBWOElzb2xhdGVkQ29udGV4dCBhbmQgbWVyZ2UgZnVuY3Rpb25hbGl0eSBpbnRvIFY4
RE9NV2luZG93U2hlbGwuCisgICAgICAgIFRoaXMgYnJpbmdzIHRoZSBWOCBpc29sYXRlZCB3b3Js
ZCBtb2RlbCBpbnRvIGNsb3NlciBhbGlnbm1lbnQgd2l0aAorICAgICAgICB0aGF0IG9mIEpTQy4K
KworICAgICAgICBObyBuZXcgdGVzdHMuICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKwor
ICAgICAgICAqIFVzZVY4LmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRl
SW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZs
b2F0NjRBcnJheS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01EYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTURhdGE6OmdldEN1cnJlbnRTdG9yZSk6CisgICAgICAgICogYmluZGluZ3Mv
djgvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3Js
ZDo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01X
cmFwcGVyV29ybGQuaDoKKyAgICAgICAgKERPTVdyYXBwZXJXb3JsZCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3
aW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpz
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6Y3VycmVudFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpiaW5kVG9XaW5kb3dPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENvbnRleHRzKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNj
cmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhp
c3RpbmdXaW5kb3dTaGVsbCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2hhcmVkUGVyc2lzdGVu
dC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRQZXJzaXN0
ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkUGVyc2lzdGVudDo6flNoYXJl
ZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkUGVyc2lzdGVudDo6Z2V0KToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGVyQ29udGV4dERhdGFGb3JDdXJyZW50V29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SXNvbGF0ZWRXb3JsZEZp
ZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmVudGVyZWRJc29sYXRl
ZFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEluamVjdGVkU2NyaXB0Q29udGV4dERlYnVnSWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
aW5kb3dTaGVsbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6
OlY4RE9NV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6
ZGVzdHJveUlzb2xhdGVkU2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb250ZXh0
V2Vha0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmRpc3Bv
c2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxp
emVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVD
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6Omluc3RhbGxET01X
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1l
bnRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURv
Y3VtZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y2xl
YXJEb2N1bWVudFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6
OnNldFNlY3VyaXR5VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6
dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFt
ZWRJdGVtQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJ
dGVtUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVT
ZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpzZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9N
V2luZG93U2hlbGwuaDoKKyAgICAgICAgKFY4RE9NV2luZG93U2hlbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhET01XaW5kb3dTaGVsbDo6d29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
aW5kb3dTaGVsbDo6aXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpnZXRDYWNo
ZWRXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V29ybGRDb250ZXh0SGFuZGxlOjpXb3JsZENvbnRleHRIYW5kbGUpOgorICAgICAgICAo
V2ViQ29yZTo6V29ybGRDb250ZXh0SGFuZGxlOjphZGp1c3RlZENvbnRleHQpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4WE1MSHR0cFJlcXVlc3Q6OmNvbnN0cnVjdG9y
Q2FsbGJhY2spOgorCiAyMDEyLTA5LTA5ICBUYWlqdSBUc3Vpa2kgIDx0emlrQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgb2YgUmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVS
TCBzaG91bGQgbm90IGJlIG9wdGlvbmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVXNl
VjguY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQppbmRleCBkMDQxYzgxNjQyYjUw
OGFjOWE3Y2E3M2E1ZWFkZTU0OTBkOWNiZDRjLi45ODYyNTg4YTg5OTc4Y2U2NjFiOThkM2JlYWI4
ZmEzM2JjOTVkNjMxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQpAQCAtNTcsNyArNTcsNiBAQCBMSVNUKEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKICAg
ICBiaW5kaW5ncy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuY3BwCiAgICAgYmluZGluZ3Mvdjgv
VjhIaWRkZW5Qcm9wZXJ0eU5hbWUuY3BwCi0gICAgYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRl
eHQuY3BwCiAgICAgYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKICAgICBiaW5k
aW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCiAgICAgYmluZGluZ3MvdjgvVjhPYmpl
Y3RDb25zdHJ1Y3Rvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4Y2U4ZTdjYzIzNTU0NDkwZGE2
ZmM3YTQzOGI4MzE1MDFhMGFjMDI0Li40YTQ4ZTdkZjQ1MzFhMjg0MThiM2IyMjFiMDhkZjcxNDU2
MmYyNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMzAxLDggKzIzMDEsNiBAQAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5oJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJc29s
YXRlZENvbnRleHQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0
ZW5lci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIu
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA5
NGYxYTFiY2VjMzM2MmFmZjYwOGViYTc3NjUyYzdmODkyYjY4NDJkLi44NDBkMzA4ZmVlNjk3OGYw
ZTNmZWVlZWMxNjk3ODRkZjIxYWM1MGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjUzMiw3ICsyNTMyLDYgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4QmluZGluZy5oIik7
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4RE9NV3JhcHBlci5oIik7Ci0gICAgQWRkVG9JbXBs
SW5jbHVkZXMoIlY4SXNvbGF0ZWRDb250ZXh0LmgiKTsKIAogICAgIEFkZEluY2x1ZGVzRm9yVHlw
ZSgkaW50ZXJmYWNlTmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IGU0NzAzYmM5MWRj
YzE5ZThiNGNlMzNjMzQ3OTkwZWYwNmIwYjk5MjIuLjAwZWJkNmRiOGI3ZTJkZTc2ODczNjg5NmUw
ZjgxZTg1OTA5ZmU4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtMzIsNyArMzIsNiBAQAog
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4RmxvYXQzMkFycmF5LmgiCiAj
aW5jbHVkZSAiVjhJbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIK
ICNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zsb2F0NjRBcnJh
eS5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVj
dC5jcHAKaW5kZXggYjk5NmM4MTU1YmVmOGZiZjk2NGQyYTMwNzAxNDZhYmJiMjMyZWE2MC4uYmRj
M2VhNDNjMjJlZjc5ZjNhYTQ4N2UyYzEwNzIyOTMzYmRhOGNlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFj
dGl2ZURPTU9iamVjdC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01X
cmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5v
ZGUuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0
b21OYW1lZEdldHRlci5jcHAKaW5kZXggN2MzMmJlNmUwMWVkZTBkMDIwMGI2ZWFhYzBkOThkOTM2
N2Q5MjU3NC4uM2YzMGJkNTE2YjEwYTRiOTM4NWE4YzdiNmEzNWY3MTQxNGUwZTk0NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgog
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0Lmgi
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBiM2EzNTM0ZjI0YWI3NmY1MWRi
ZWI1ZTQ1N2U0NmZjNTE1Mjk0MmZjLi43MDFiODlhYzg3MmVhMzMxMjg2NjI5ZGMwM2M4ZmY0YTA2
NjAyODk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0yOCw3ICsy
OCw2IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0
ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IGI3ODM2OWU5NTVmNGVkNzZm
M2RiODhlOTI5NmUwN2YzYTdlMjRiNDcuLmI1OTY1ZGM5MjNiOTg0NTZlMGVkNmI5MWY4OGJhZjg3
Yjk4M2UwY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMzAsNyArMzAsNiBAQAog
I2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2lu
Y2x1ZGUgIlY4RXZlbnQuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1
ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNl
cHRpb24uY3BwCmluZGV4IGQ4MDE5OWQ5ZjExOWM4OWQ3MDAzZjk2YTI3NDQxN2JjYjczYmY3ZGMu
LjFhNmU4Mzk5YTg0Mzk0MzYxOTNkMzMyNTAzNzRhYzcwOWI1NDg4ZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNl
cHRpb24uY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5o
IgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXgg
YzUzNTA3NjcxNTU0NTgwNDJmMjI4YjJkZDFhYmFjNTU5ZmEzYzE5Yi4uZDVkMWE2N2M5Yjc3Njk5
ZGM3Yjg3OTMyNDRkNjQwNzc1NmQyN2FhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRl
ZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFRlc3RPYmouaCIK
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAKaW5kZXggMjRjNGRmNjk4NThhNjA2NmZjZjQ1NTNlYTI2MjgwODg1NzIx
ZDJkMy4uN2IxZTc3NDQ2MjU0YTc3OGU2NDhkZDY3OWI1MDYxOGNlNTY0NTg3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMjksNyArMjksNiBA
QAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29u
dGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNmUyNjJkNDNjNGY1
OGNmNDMzMTUyZmQzYjMwNDE2MWQ0OTYwM2VhOC4uNDBjZmFhN2M2ZTRhZGQzNmY1ZDM3NGFlZTk5
ZWExYTdmODU5MzlhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAt
MjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJW
OElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKaW5kZXggNTY1NWE4YzAxYTc1MzRhMWZmMzBhY2Zl
NmUwZmY5OWIxOTZhZmRiMC4uNzZjYWNkZDk3ZmQzM2JhYzdmMmY4YTkxMDcwOWFkMzU5ZTA5MzM2
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3ROb2RlLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdy
YXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9k
ZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDQ2YjQx
NWQyODFhNTc4ZDBmMGJhNjgyOTU1NWFjODZhNWU1YTQ0YWMuLmM5NzYwZjEyMmM3ZmNkZTMyN2Zl
YjRhNzBiZTRkMmU2ZTQyN2ZlMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC00Myw3ICs0Myw2IEBACiAjaW5j
bHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgogI2luY2x1ZGUg
IlY4RmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNs
dWRlICJWOFNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiVjhTVkdQb2ludC5oIgogI2luY2x1ZGUg
IlY4U2NyaXB0UHJvZmlsZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCBiYTRjNDBkNTY0YWY3ZjQ2ZDBhZDIwZjE1
MzFiZWVkMmYyOGUzYWYwLi5mOGZjNWU1OTBhYjRhNzhhNDJjNGM4YjI0NjY1MTMzNmFjMThjOGFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5o
IgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9y
dC5oIgogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAppbmRleCAxYTYzYzJm
MmJkZmU4YTY4ZGUyNmJiOTY2M2UyZWQ5Y2NkZGQ5MWE4Li5hZjUwYTFlY2EzYWIyMTU4MWFiZDY0
YWEwMGZmNWFmMzM4Y2JiOTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNw
cApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTURh
dGEuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4
dC5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKIApAQCAt
NDMsNyArNDMsNyBAQCBET01EYXRhU3RvcmUmIERPTURhdGE6OmdldEN1cnJlbnRTdG9yZSh2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29s
YXRlRGF0YTo6Y3VycmVudChpc29sYXRlKTsKICAgICBpZiAoVU5MSUtFTFkoZGF0YS0+ZG9tRGF0
YVN0b3JlKCkgIT0gMCkpCiAgICAgICAgIHJldHVybiAqZGF0YS0+ZG9tRGF0YVN0b3JlKCk7Ci0g
ICAgVjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50
ZXJlZCgpOworICAgIFY4RE9NV2luZG93U2hlbGwqIGNvbnRleHQgPSBWOERPTVdpbmRvd1NoZWxs
OjpnZXRFbnRlcmVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNvbnRleHQgIT0gMCkpCiAgICAgICAg
IHJldHVybiAqY29udGV4dC0+d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCk7CiAgICAgcmV0dXJuIGRl
ZmF1bHRTdG9yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdy
YXBwZXJXb3JsZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29y
bGQuY3BwCmluZGV4IDMxYTAyODZjNDUxZjc2N2RjZDNlYjQ0MWE3ZmU4YzEzZmNjY2IzMWYuLmIz
MWE3ZWM2NzI5MjNhMDhiZTIxOGI1YTExYWMyMDk4NGMzODM2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcApAQCAtOTMsMTAgKzkzLDkgQEAg
c3RhdGljIGludCB0ZW1wb3JhcnlXb3JsZElkID0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxp
emVkV29ybGRJZC0xOwogUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IERPTVdyYXBwZXJXb3Js
ZDo6Z2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3Jv
dXApCiB7CiAgICAgQVNTRVJUKHdvcmxkSWQgIT0gbWFpbldvcmxkSWQpOwotICAgIEFTU0VSVCh3
b3JsZElkICE9IHVuaW5pdGlhbGl6ZWRXb3JsZElkKTsKIAogICAgIFdvcmxkTWFwJiBtYXAgPSBp
c29sYXRlZFdvcmxkTWFwKCk7Ci0gICAgaWYgKCF3b3JsZElkKQorICAgIGlmICh3b3JsZElkID09
IHVuaW5pdGlhbGl6ZWRXb3JsZElkKQogICAgICAgICB3b3JsZElkID0gdGVtcG9yYXJ5V29ybGRJ
ZC0tOwogICAgIGVsc2UgewogICAgICAgICBXb3JsZE1hcDo6aXRlcmF0b3IgaSA9IG1hcC5maW5k
KHdvcmxkSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3Jh
cHBlcldvcmxkLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQu
aAppbmRleCAwMTEyNWI3ZjM0YjliNTA3MWRiMjZkZTUwNjE1NGM0OWRkMGM0NmI0Li40NjdjMzIy
ZmJmMGJjNDE2MDQxM2ZjNjNmZGNjMmU4NGJhOWQ5NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaApAQCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIFRoaXMgY2xhc3MgcmVwcmVzZW50IGEgY29sbGVjdGlvbiBvZiBET00g
d3JhcHBlcnMgZm9yIGEgc3BlY2lmaWMgd29ybGQuCiBjbGFzcyBET01XcmFwcGVyV29ybGQgOiBw
dWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBtYWluV29ybGRJZCA9IC0xOwotICAgIHN0YXRpYyBjb25zdCBpbnQgbWFpbldvcmxkRXh0ZW5z
aW9uR3JvdXAgPSAtMTsKLSAgICBzdGF0aWMgY29uc3QgaW50IHVuaW5pdGlhbGl6ZWRXb3JsZElk
ID0gLTI7Ci0gICAgc3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxpemVkRXh0ZW5zaW9uR3JvdXAg
PSAtMjsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1haW5Xb3JsZElkID0gMDsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IG1haW5Xb3JsZEV4dGVuc2lvbkdyb3VwID0gMDsKKyAgICBzdGF0aWMgY29uc3Qg
aW50IHVuaW5pdGlhbGl6ZWRXb3JsZElkID0gLTE7CisgICAgc3RhdGljIGNvbnN0IGludCB1bmlu
aXRpYWxpemVkRXh0ZW5zaW9uR3JvdXAgPSAtMTsKICAgICAvLyBJZiAwIGlzIHBhc3NlZCBhcyB3
b3JsZElkLCB0aGUgd29ybGQgd2lsbCBiZSBhc3NpZ25lZCBhIHRlbXBvcmFyeSBpZCBpbnN0ZWFk
LgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gZ2V0T3JDcmVhdGVJc29s
YXRlZFdvcmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogICAgIHN0YXRpYyBi
b29sIGlzb2xhdGVkV29ybGRzRXhpc3QoKSB7IHJldHVybiBpc29sYXRlZFdvcmxkQ291bnQ7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5k
ZXggN2JlZTk3Y2JkYjczNDlmOGE3YmE5MzBlOGM4YzZhODdmNGNjN2Y4NC4uYTVhNTY0NDllNTJj
NzA2ZTM2YmNhZDE1M2ZiZWZhNzhlZGU5MjE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTYyLDcgKzYyLDYgQEAKICNpbmNsdWRl
ICJWOEdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAj
aW5jbHVkZSAiVjhIVE1MRW1iZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRl
eHQuaCIKICNpbmNsdWRlICJWOE5QT2JqZWN0LmgiCiAjaW5jbHVkZSAiVjhSZWN1cnNpb25TY29w
ZS5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpAQCAtMTEwLDcgKzEwOSw3IEBAIGJvb2wgU2NyaXB0
Q29udHJvbGxlcjo6Y2FuQWNjZXNzRnJvbUN1cnJlbnRPcmlnaW4oRnJhbWUgKmZyYW1lKQogU2Ny
aXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2Zy
YW1lKGZyYW1lKQogICAgICwgbV9zb3VyY2VVUkwoMCkKLSAgICAsIG1fd2luZG93U2hlbGwoVjhE
T01XaW5kb3dTaGVsbDo6Y3JlYXRlKGZyYW1lKSkKKyAgICAsIG1fd2luZG93U2hlbGwoVjhET01X
aW5kb3dTaGVsbDo6Y3JlYXRlKGZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkpCiAgICAg
LCBtX3BhdXNlZChmYWxzZSkKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAs
IG1fd3JhcHBlZFdpbmRvd1NjcmlwdE5QT2JqZWN0KDApCkBAIC0xNTcsNyArMTU2LDcgQEAgdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpyZXNldElzb2xhdGVkV29ybGRzKCkKIHsKICAgICBmb3IgKElz
b2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7
CiAgICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICBpdGVyLT5zZWNvbmQtPmRlc3Ryb3koKTsKKyAgICAgICAgaXRlci0+c2Vjb25kLT5kZXN0
cm95SXNvbGF0ZWRTaGVsbCgpOwogICAgIH0KICAgICBtX2lzb2xhdGVkV29ybGRzLmNsZWFyKCk7
CiAgICAgbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmNsZWFyKCk7CkBAIC0zMjQsNTAg
KzMyMyw3MiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBT
Y3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogICAgIHJldHVybiBTY3JpcHRWYWx1ZShvYmpl
Y3QpOwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNl
cywgVmVjdG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cykKK1Y4RE9NV2luZG93U2hlbGwqIFNjcmlw
dENvbnRyb2xsZXI6OmdldE9yQ3JlYXRlSXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdvcmxkSWQs
IGludCBleHRlbnNpb25Hcm91cCkKIHsKLSAgICBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3Js
ZElELCBzb3VyY2VzLCAwLCByZXN1bHRzKTsKKyAgICBBU1NFUlQod29ybGRJZCAhPSBET01XcmFw
cGVyV29ybGQ6Om1haW5Xb3JsZElkKTsKKworICAgIC8vIENoZWNrIHRoZSBtYXAgZm9yIG5vbi10
ZW1wb3Jhcnkgd29ybGRzLgorICAgIGlmICh3b3JsZElkICE9IERPTVdyYXBwZXJXb3JsZDo6dW5p
bml0aWFsaXplZFdvcmxkSWQpIHsKKyAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElkKTsKKyAgICAgICAgaWYgKGl0ZXIg
IT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnNl
Y29uZC0+d29ybGQoKS0+d29ybGRJZCgpID09IHdvcmxkSWQpOworICAgICAgICAgICAgQVNTRVJU
KGl0ZXItPnNlY29uZC0+d29ybGQoKS0+ZXh0ZW5zaW9uR3JvdXAoKSA9PSBleHRlbnNpb25Hcm91
cCk7CisgICAgICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAgfQor
CisgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQgPSBET01XcmFwcGVyV29ybGQ6Omdl
dE9yQ3JlYXRlSXNvbGF0ZWRXb3JsZCh3b3JsZElkLCBleHRlbnNpb25Hcm91cCk7CisgICAgT3du
UHRyPFY4RE9NV2luZG93U2hlbGw+IGlzb2xhdGVkV29ybGRTaGVsbCA9IFY4RE9NV2luZG93U2hl
bGw6OmNyZWF0ZShtX2ZyYW1lLCB3b3JsZCk7CisgICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29y
bGQtPndvcmxkSWQoKSwgaXNvbGF0ZWRXb3JsZFNoZWxsLmdldCgpKTsKKyAgICByZXR1cm4gaXNv
bGF0ZWRXb3JsZFNoZWxsLmxlYWtQdHIoKTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpl
dmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2Ny
aXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCwgVmVjdG9yPFNjcmlw
dFZhbHVlPiogcmVzdWx0cykKK1Y4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmV4
aXN0aW5nV2luZG93U2hlbGxJbnRlcm5hbChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogewotICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICBBU1NFUlQod29ybGQpOwogCi0gICAg
Ly8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHRvIGdldCByZW9yZ2FuaXplZCBvbmNlIHdlIGhhdmUg
YSB3aW5kb3dTaGVsbCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgotICAgIGlmICghd2luZG93U2hl
bGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoTElL
RUxZKHdvcmxkLT5pc01haW5Xb3JsZCgpKSkKKyAgICAgICAgcmV0dXJuIG1fd2luZG93U2hlbGwu
Z2V0KCk7CiAKKyAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRl
ZFdvcmxkcy5maW5kKHdvcmxkLT53b3JsZElkKCkpOworICAgIHJldHVybiBpdGVyID09IG1faXNv
bGF0ZWRXb3JsZHMuZW5kKCkgPyAwIDogaXRlci0+c2Vjb25kOworfQorCitWOERPTVdpbmRvd1No
ZWxsKiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxk
KQoreworICAgIFY4RE9NV2luZG93U2hlbGwqIHNoZWxsID0gZXhpc3RpbmdXaW5kb3dTaGVsbElu
dGVybmFsKHdvcmxkKTsKKyAgICBpZiAoTElLRUxZKCEhc2hlbGwpKQorICAgICAgICByZXR1cm4g
c2hlbGw7CisKKyAgICBPd25QdHI8VjhET01XaW5kb3dTaGVsbD4gaXNvbGF0ZWRXb3JsZFNoZWxs
ID0gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKG1fZnJhbWUsIHdvcmxkKTsKKyAgICBtX2lzb2xh
dGVkV29ybGRzLnNldCh3b3JsZC0+d29ybGRJZCgpLCBpc29sYXRlZFdvcmxkU2hlbGwuZ2V0KCkp
OworICAgIHJldHVybiBpc29sYXRlZFdvcmxkU2hlbGwubGVha1B0cigpOworfQorCit2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25z
dCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCwg
VmVjdG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cykKK3sKKyAgICAvLyBFeGNlcHQgaW4gdGhlIHRl
c3QgcnVubmVyLCB3b3JsZElEIHNob3VsZCBiZSBub24gMCBhcyBpdCBjb25mbGljdHMgd2l0aCB0
aGUgbWFpbldvcmxkSWQuCisgICAgLy8gRklYTUU6IENoYW5nZSB0aGUgdGVzdCBydW5uZXIgdG8g
cGVyZm9ybSB0aGlzIHN3YXAgYW5kIG1ha2UgdGhpcyBhbiBBU1NFUlQuCisgICAgaWYgKFVOTElL
RUxZKCF3b3JsZElEKSkKKyAgICAgICAgd29ybGRJRCA9IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0
aWFsaXplZFdvcmxkSWQ7CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAg
djg6OkxvY2FsPHY4OjpBcnJheT4gdjhSZXN1bHRzOwogICAgIHsKICAgICAgICAgdjg6OkhhbmRs
ZVNjb3BlIGV2YWx1YXRlSGFuZGxlU2NvcGU7Ci0gICAgICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBp
c29sYXRlZENvbnRleHQgPSAwOwotICAgICAgICBpZiAod29ybGRJRCA+IDApIHsKLSAgICAgICAg
ICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZp
bmQod29ybGRJRCk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVu
ZCgpKQotICAgICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IGl0ZXItPnNlY29uZDsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBW
OElzb2xhdGVkQ29udGV4dChtX2ZyYW1lLCBET01XcmFwcGVyV29ybGQ6OmdldE9yQ3JlYXRlSXNv
bGF0ZWRXb3JsZCh3b3JsZElELCBleHRlbnNpb25Hcm91cCkpOwotICAgICAgICAgICAgICAgIGlm
IChpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgY2hhbmdlIHRoaXMgdG8gdXNpbmcgd2luZG93IHNoZWxscyB0byBtYXRjaCBKU0MuCi0gICAg
ICAgICAgICAgICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29ybGRJRCwgaXNvbGF0ZWRDb250ZXh0
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgVjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRXb3Js
ZFNoZWxsID0gZ2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkQ29udGV4dCh3b3JsZElELCBleHRlbnNp
b25Hcm91cCk7CiAKKyAgICAgICAgaWYgKHdvcmxkSUQgIT0gRE9NV3JhcHBlcldvcmxkOjp1bmlu
aXRpYWxpemVkV29ybGRJZCkgewogICAgICAgICAgICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3Jp
Z2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdpbkl0ZXIgPSBtX2lzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKICAgICAgICAgICAgIGlmIChzZWN1cml0eU9yaWdp
bkl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmVuZCgpKQotICAgICAgICAg
ICAgICAgIGlzb2xhdGVkQ29udGV4dC0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5J
dGVyLT5zZWNvbmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaXNvbGF0ZWRDb250
ZXh0ID0gbmV3IFY4SXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUsIERPTVdyYXBwZXJXb3JsZDo6Z2V0
T3JDcmVhdGVJc29sYXRlZFdvcmxkKHdvcmxkSUQsIGV4dGVuc2lvbkdyb3VwKSk7Ci0gICAgICAg
ICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXNvbGF0ZWRXb3JsZFNoZWxsLT5zZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVyLT5zZWNvbmQpOwog
ICAgICAgICB9CiAKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6
OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKTsKKyAg
ICAgICAgaXNvbGF0ZWRXb3JsZFNoZWxsLT5pbml0aWFsaXplSWZOZWVkZWQoKTsKKyAgICAgICAg
aWYgKGlzb2xhdGVkV29ybGRTaGVsbC0+Y29udGV4dCgpLklzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0ZWRXb3JsZFNoZWxsLT5jb250ZXh0KCkpOwog
ICAgICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNvbnRleHQpOwogICAgICAg
ICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHRBcnJheSA9IHY4OjpBcnJheTo6TmV3KHNvdXJj
ZXMuc2l6ZSgpKTsKIApAQCAtMzc4LDggKzM5OSwxMiBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxT
YwogICAgICAgICAgICAgcmVzdWx0QXJyYXktPlNldChpLCBldmFsdWF0aW9uUmVzdWx0KTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmICghd29ybGRJRCkKLSAgICAgICAgICAgIGlzb2xhdGVkQ29u
dGV4dC0+ZGVzdHJveSgpOworICAgICAgICAvLyBNYXJrIHRlbXBvcmFyeSBzaGVsbCBmb3Igd2Vh
ayBkZXN0cnVjdGlvbi4KKyAgICAgICAgaWYgKHdvcmxkSUQgPT0gRE9NV3JhcHBlcldvcmxkOjp1
bmluaXRpYWxpemVkV29ybGRJZCkgeworICAgICAgICAgICAgaW50IGFjdHVhbFdvcmxkSWQgPSBp
c29sYXRlZFdvcmxkU2hlbGwtPndvcmxkKCktPndvcmxkSWQoKTsKKyAgICAgICAgICAgIG1faXNv
bGF0ZWRXb3JsZHMucmVtb3ZlKGFjdHVhbFdvcmxkSWQpOworICAgICAgICAgICAgaXNvbGF0ZWRX
b3JsZFNoZWxsLT5kZXN0cm95SXNvbGF0ZWRTaGVsbCgpOworICAgICAgICB9CiAKICAgICAgICAg
djhSZXN1bHRzID0gZXZhbHVhdGVIYW5kbGVTY29wZS5DbG9zZShyZXN1bHRBcnJheSk7CiAgICAg
fQpAQCAtMzk2LDcgKzQyMSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlCiAgICAgbV9pc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLnNldCh3b3JsZElELCBzZWN1cml0eU9yaWdpbik7CiAg
ICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmlu
ZCh3b3JsZElEKTsKICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQotICAg
ICAgICBpdGVyLT5zZWNvbmQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKKyAg
ICAgICAgaXRlci0+c2Vjb25kLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oc2VjdXJp
dHlPcmlnaW4pOwogfQogCiBUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5k
bGVyUG9zaXRpb24oKSBjb25zdApAQCAtNDEzLDExICs0MzgsMTEgQEAgdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpmaW5pc2hlZFdpdGhFdmVudChFdmVudCogZXZlbnQpCiAKIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD4gU2NyaXB0Q29udHJvbGxlcjo6Y3VycmVudFdvcmxkQ29udGV4dCgpCiB7Ci0gICAg
aWYgKFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4
dDo6Z2V0RW50ZXJlZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpD
b250ZXh0PiA+IGNvbnRleHQgPSBpc29sYXRlZENvbnRleHQtPnNoYXJlZENvbnRleHQoKTsKLSAg
ICAgICAgaWYgKG1fZnJhbWUgIT0gdG9GcmFtZUlmTm90RGV0YWNoZWQoY29udGV4dC0+Z2V0KCkp
KQorICAgIGlmIChWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFNoZWxsID0gVjhET01XaW5kb3dT
aGVsbDo6Z2V0RW50ZXJlZCgpKSB7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0
PiBjb250ZXh0ID0gaXNvbGF0ZWRTaGVsbC0+Y29udGV4dCgpOworICAgICAgICBpZiAoY29udGV4
dC5Jc0VtcHR5KCkgfHwgbV9mcmFtZSAhPSB0b0ZyYW1lSWZOb3REZXRhY2hlZChjb250ZXh0KSkK
ICAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+KCk7Ci0gICAgICAgIHJl
dHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dC0+Z2V0KCkpOworICAgICAg
ICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNvbnRleHQpOwogICAgIH0KICAg
ICB3aW5kb3dTaGVsbCgpLT5pbml0aWFsaXplSWZOZWVkZWQoKTsKICAgICByZXR1cm4gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdpbmRvd1NoZWxsKCktPmNvbnRleHQoKSk7CkBAIC00NDIs
NyArNDY3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpiaW5kVG9XaW5kb3dPYmplY3QoRnJh
bWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmoKIHsKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQg
PSBTY3JpcHRDb250cm9sbGVyOjptYWluV29ybGRDb250ZXh0KGZyYW1lKTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBtYWluV29ybGRDb250ZXh0KGZyYW1lKTsKICAg
ICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDIsMTAg
KzU2NywxMyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyhWZWN0b3I8UmVm
UHRyPERPTVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKQogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpl
dmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsK
KyAgICBpZiAod29ybGQgPT0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpIHsKKyAgICAgICAgZXZh
bHVhdGUoc291cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBWZWN0b3I8U2NyaXB0
U291cmNlQ29kZT4gc291cmNlczsKICAgICBzb3VyY2VzLmFwcGVuZChzb3VyY2UpOwotICAgIC8v
IEZJWE1FOiBHZXQgYW4gSUQgZnJvbSB0aGUgd29ybGQgcGFyYW0uCi0gICAgZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQoMCwgc291cmNlcywgMCk7CisgICAgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQo
d29ybGQtPndvcmxkSWQoKSwgc291cmNlcywgd29ybGQtPmV4dGVuc2lvbkdyb3VwKCksIDApOwog
fQogCiBWOEV4dGVuc2lvbnMmIFNjcmlwdENvbnRyb2xsZXI6OnJlZ2lzdGVyZWRFeHRlbnNpb25z
KCkKQEAgLTY0NiwxNCArNjc0LDE0IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElz
b2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlCiB7CiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIGZvciAoSXNvbGF0ZWRXb3JsZE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7IGl0ICE9IG1faXNvbGF0ZWRX
b3JsZHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVk
Q29udGV4dCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGlmICghaXNvbGF0ZWRDb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpKQorICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFdvcmxkU2hl
bGwgPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoIWlzb2xhdGVkV29ybGRTaGVsbC0+aXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gaXNvbGF0ZWRDb250ZXh0LT5jb250
ZXh0KCk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IGlzb2xh
dGVkV29ybGRTaGVsbC0+Y29udGV4dCgpOwogICAgICAgICBpZiAodjhDb250ZXh0LklzRW1wdHko
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
djhDb250ZXh0KSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0YXRl
KiwgU2VjdXJpdHlPcmlnaW4qPihzY3JpcHRTdGF0ZSwgaXNvbGF0ZWRDb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjpwYWlyPFNjcmlwdFN0YXRl
KiwgU2VjdXJpdHlPcmlnaW4qPihzY3JpcHRTdGF0ZSwgaXNvbGF0ZWRXb3JsZFNoZWxsLT5pc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oKSkpOwogICAgIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGRkZjBkNDk2MWQ3
OWI4ZTM3NjMzMThiMTI3YjMyOGU3MDViYmIxOTMuLmIxYWU3ZTU0NzI3Nzg5OGE4NDc0ZjA0NjVj
ODY3ZWMwODY2MTQwODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRD
b250cm9sbGVyLmgKQEAgLTU3LDIwICs1Nyw4IEBAIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiBj
bGFzcyBTY3JpcHRTdGF0ZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgVjhET01XaW5k
b3dTaGVsbDsKLWNsYXNzIFY4SXNvbGF0ZWRDb250ZXh0OwogY2xhc3MgV2lkZ2V0OwogCi0vLyBO
b3RlOiBhbHRob3VnaCB0aGUgcG9pbnRlciBpcyByYXcsIHRoZSBpbnN0YW5jZSBpcyBrZXB0IGFs
aXZlIGJ5IGEgc3Ryb25nCi0vLyByZWZlcmVuY2UgdG8gdGhlIHY4IGNvbnRleHQgaXQgY29udGFp
bnMsIHdoaWNoIGlzIG5vdCBtYWRlIHdlYWsgdW50aWwgd2UKLS8vIGNhbGwgd29ybGQtPmRlc3Ry
b3koKS4KLS8vCi0vLyBGSVhNRTogV2Ugd2FudCB0byBldmVudHVhbGx5IGJlIGhvbGRpbmcgd2lu
ZG93IHNoZWxscyBpbnN0ZWFkIG9mIHRoZQotLy8gSXNvbGF0ZWRDb250ZXh0IGRpcmVjdGx5Lgot
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0ODc1Ci10eXBlZGVm
IEhhc2hNYXA8aW50LCBWOElzb2xhdGVkQ29udGV4dCo+IElzb2xhdGVkV29ybGRNYXA7Ci0KLXR5
cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiBJc29sYXRlZFdvcmxk
U2VjdXJpdHlPcmlnaW5NYXA7Ci0KIHR5cGVkZWYgV1RGOjpWZWN0b3I8djg6OkV4dGVuc2lvbio+
IFY4RXh0ZW5zaW9uczsKIAogY2xhc3MgU2NyaXB0Q29udHJvbGxlciB7CkBAIC03OCw5ICs2Niwx
MSBAQCBwdWJsaWM6CiAgICAgU2NyaXB0Q29udHJvbGxlcihGcmFtZSopOwogICAgIH5TY3JpcHRD
b250cm9sbGVyKCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZXZlbnR1YWxseSB0YWtl
IERPTVdyYXBwZXJXb3JsZCBhcmd1bWVudC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4NzUKICAgICBWOERPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVs
bCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93U2hlbGwuZ2V0KCk7IH0KKyAgICBWOERPTVdpbmRv
d1NoZWxsKiB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKTsKKyAgICAvLyBGSVhNRTogUmVw
bGFjZSBleGlzdGluZ1dpbmRvd1NoZWxsIHdpdGggZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFs
IHNlZSBjb21tZW50IGluIFY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVJZk5lZWRlZC4KKyAg
ICBTY3JpcHRDb250cm9sbGVyKiBleGlzdGluZ1dpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCop
IHsgcmV0dXJuIHRoaXM7IH0KKyAgICBWOERPTVdpbmRvd1NoZWxsKiBleGlzdGluZ1dpbmRvd1No
ZWxsSW50ZXJuYWwoRE9NV3JhcHBlcldvcmxkKik7CiAKICAgICBTY3JpcHRWYWx1ZSBleGVjdXRl
U2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICBTY3JpcHRWYWx1ZSBleGVjdXRl
U2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib29sIGZvcmNlVXNlckdlc3R1cmUgPSBmYWxz
ZSk7CkBAIC0xMDUsMTIgKzk1LDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBjYWxsZXIgbXVzdCBo
b2xkIGFuIGV4ZWN1dGlvbiBjb250ZXh0LgogICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0
IFNjcmlwdFNvdXJjZUNvZGUmKTsKIAotICAgIC8vIEV2YWx1YXRlIEphdmFTY3JpcHQgaW4gYSBu
ZXcgaXNvbGF0ZWQgd29ybGQuIFRoZSBzY3JpcHQgZ2V0cyBpdHMgb3duCi0gICAgLy8gZ2xvYmFs
IHNjb3BlLCBpdHMgb3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNpYyBKYXZhU2NyaXB0IG9iamVj
dHMgKFN0cmluZywKLSAgICAvLyBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0cyBvd24gd3JhcHBl
cnMgZm9yIGFsbCBET00gbm9kZXMgYW5kIERPTQotICAgIC8vIGNvbnN0cnVjdG9ycy4KLSAgICB2
b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3Rv
cjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgVmVjdG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0
cyk7Ci0KICAgICAvLyBFeGVjdXRlcyBKYXZhU2NyaXB0IGluIGFuIGlzb2xhdGVkIHdvcmxkLiBU
aGUgc2NyaXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUsCiAgICAgLy8gaXRzIG93biBwcm90
b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsIEFycmF5LCBh
bmQgc28tb24pLAogICAgIC8vIGFuZCBpdHMgb3duIHdyYXBwZXJzIGZvciBhbGwgRE9NIG5vZGVz
IGFuZCBET00gY29uc3RydWN0b3JzLgpAQCAtMTE4LDIyICsxMDIsMTYgQEAgcHVibGljOgogICAg
IC8vIElmIGFuIGlzb2xhdGVkIHdvcmxkIHdpdGggdGhlIHNwZWNpZmllZCBJRCBhbHJlYWR5IGV4
aXN0cywgaXQgaXMgcmV1c2VkLgogICAgIC8vIE90aGVyd2lzZSwgYSBuZXcgd29ybGQgaXMgY3Jl
YXRlZC4KICAgICAvLwotICAgIC8vIElmIHRoZSB3b3JsZElEIGlzIDAsIGEgbmV3IHdvcmxkIGlz
IGFsd2F5cyBjcmVhdGVkLgorICAgIC8vIElmIHRoZSB3b3JsZElEIGlzIDAgb3IgRE9NV3JhcHBl
cldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJZCwgYSBuZXcgd29ybGQgaXMgYWx3YXlzIGNyZWF0
ZWQuCiAgICAgLy8KICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiBleHRlbnNpb25Hcm91cCBoZXJl
LgotICAgIHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29u
c3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAs
IFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpOworICAgIHZvaWQgZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291
cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzKTsK
IAogICAgIC8vIEFzc29jaWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQgKHNlZSBhYm92ZSBmb3IgZGVz
Y3JpcHRpb24pIHdpdGggYSBzZWN1cml0eQogICAgIC8vIG9yaWdpbi4gWE1MSHR0cFJlcXVlc3Qg
aW5zdGFuY2VzIHVzZWQgaW4gdGhhdCB3b3JsZCB3aWxsIGJlIGNvbnNpZGVyZWQKICAgICAvLyB0
byBjb21lIGZyb20gdGhhdCBvcmlnaW4sIG5vdCB0aGUgZnJhbWUncy4KICAgICB2b2lkIHNldElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4pOwogCi0gICAgLy8gTWFzcXVlcmFkZSAndGhpcycgYXMgdGhlIHdpbmRvd1NoZWxs
LgotICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgcHJvdmlkZXMgcmVhc29uYWJs
ZSBjb21wYXRpYmlsaXR5Ci0gICAgLy8gd2l0aCB3aGF0IEpTQyBkb2VzIGFzIHdlbGwuCi0gICAg
U2NyaXB0Q29udHJvbGxlciogd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKikgeyByZXR1cm4g
dGhpczsgfQotICAgIFNjcmlwdENvbnRyb2xsZXIqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3Jh
cHBlcldvcmxkKikgeyByZXR1cm4gdGhpczsgfQotCiAgICAgLy8gQ3JlYXRlcyBhIHByb3BlcnR5
IG9mIHRoZSBnbG9iYWwgb2JqZWN0IG9mIGEgZnJhbWUuCiAgICAgdm9pZCBiaW5kVG9XaW5kb3dP
YmplY3QoRnJhbWUqLCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmplY3QqKTsKIApAQCAtMjE3LDE5
ICsxOTUsMjQgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgY29udGV4dERlYnVnSWQodjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4pOwogCiBwcml2YXRlOgorICAgIC8vIE5vdGU6IGFsdGhvdWdoIHRo
ZSBwb2ludGVyIGlzIHJhdywgdGhlIGluc3RhbmNlIGlzIGtlcHQgYWxpdmUgYnkgYSBzdHJvbmcK
KyAgICAvLyByZWZlcmVuY2UgdG8gdGhlIHY4IGNvbnRleHQgaXQgY29udGFpbnMsIHdoaWNoIGlz
IG5vdCBtYWRlIHdlYWsgdW50aWwgd2UKKyAgICAvLyBjYWxsIHdvcmxkLT5kZXN0cm95SXNvbGF0
ZWRTaGVsbCgpLgorICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFY4RE9NV2luZG93U2hlbGwqPiBJ
c29sYXRlZFdvcmxkTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gPiBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA7CisKICAgICB2b2lkIHJl
c2V0SXNvbGF0ZWRXb3JsZHMoKTsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIGNvbnN0IFN0
cmluZyogbV9zb3VyY2VVUkw7CiAKLSAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmUg
b2YgdGhlc2UuIFNvb24gd2Ugd2lsbCBoYXZlIG9uZSBwZXIgRE9NV3JhcHBlcldvcmxkLgorICAg
IFY4RE9NV2luZG93U2hlbGwqIGdldE9yQ3JlYXRlSXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdv
cmxkSWQsIGludCBleHRlbnNpb25Hcm91cCk7CiAgICAgT3duUHRyPFY4RE9NV2luZG93U2hlbGw+
IG1fd2luZG93U2hlbGw7CiAKICAgICAvLyBUaGUgaXNvbGF0ZWQgd29ybGRzIHdlIGFyZSB0cmFj
a2luZyBmb3IgdGhpcyBmcmFtZS4gV2UgaG9sZCB0aGVtIGFsaXZlCiAgICAgLy8gaGVyZSBzbyB0
aGF0IHRoZXkgY2FuIGJlIHVzZWQgYWdhaW4gYnkgZnV0dXJlIGNhbGxzIHRvCiAgICAgLy8gZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQoKS4KICAgICBJc29sYXRlZFdvcmxkTWFwIG1faXNvbGF0ZWRX
b3JsZHM7Ci0KICAgICBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXAgbV9pc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW5zOwogCiAgICAgYm9vbCBtX3BhdXNlZDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaAppbmRleCA4ODI1YmQ1ZWRkODVhNDgz
ZGU3MzU1ZmIwZTUzNWM5OWMzZjRlYTBiLi4yMDU1OTJjOTlhYmZlMmM4MTY3OTYxOWU3N2NkNjRi
MWNhNTU4NDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TaGFyZWRQ
ZXJzaXN0ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2hhcmVkUGVyc2lz
dGVudC5oCkBAIC0zNywzNSArMzcsMjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Ly8gQSBzaGFyZWFibGUgcmVmZXJlbmNlIHRvIGEgdjggcGVyc2lzdGVudCBoYW5kbGUuICBVc2lu
ZyBhIHNoYXJlZAotICAgIC8vIHBlcnNpc3RlbnQgYW55IG51bWJlciBvZiBvYmplY3RzIGNhbiBz
aGFyZSBhIHJlZmVyZW5jZSB0byBhIHY4Ci0gICAgLy8gb2JqZWN0IGFuZCB3aGVuIGl0IHNob3Vs
ZCBubyBsb25nZXIgYmUgYWNjZXNzaWJsZSB0aGUgb2JqZWN0J3MKLSAgICAvLyBvd25lciBjYW4g
Y2xlYXIgaXQuCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNsYXNzLgogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgogICAgIGNsYXNzIFNoYXJlZFBlcnNpc3RlbnQgOiBwdWJsaWMgUmVmQ291
bnRlZDxTaGFyZWRQZXJzaXN0ZW50PFQ+ID4gewogICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCBz
ZXQodjg6OlBlcnNpc3RlbnQ8VD4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fdmFs
dWUgPSB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICB2ODo6UGVyc2lzdGVudDxUPiBnZXQoKQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PFQ+ID4gY3JlYXRlKHY4
OjpQZXJzaXN0ZW50PFQ+IHZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV92
YWx1ZTsKKyAgICAgICAgICAgIEFTU0VSVCghdmFsdWUuSXNFbXB0eSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkUGVyc2lzdGVudDxUPih2ODo6UGVyc2lzdGVudDx2
ODo6Q29udGV4dD46Ok5ldyh2YWx1ZSkpKTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGRpc3Bv
c2VIYW5kbGUoKQorICAgICAgICB+U2hhcmVkUGVyc2lzdGVudCgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmICghbV92YWx1ZS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgbV92YWx1ZS5E
aXNwb3NlKCk7Ci0gICAgICAgICAgICAgIG1fdmFsdWUuQ2xlYXIoKTsKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlLkRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLkNsZWFyKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVk
UGVyc2lzdGVudDxUPiA+IGNyZWF0ZSh2ODo6UGVyc2lzdGVudDxUPiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRQZXJzaXN0ZW50PFQ+KHZh
bHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkUGVyc2lz
dGVudDxUPiA+IGNyZWF0ZSgpCisgICAgICAgIHY4OjpQZXJzaXN0ZW50PFQ+IGdldCgpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGUodjg6OlBlcnNpc3RlbnQ8VD4oKSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKICAgICAgICAgfQogICAgIHByaXZhdGU6CiAgICAg
ICAgIGV4cGxpY2l0IFNoYXJlZFBlcnNpc3RlbnQodjg6OlBlcnNpc3RlbnQ8VD4gdmFsdWUpIDog
bV92YWx1ZSh2YWx1ZSkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNw
cAppbmRleCBmOTIxNDg2NTYxZDgwOTNlYTg3ZmVlOWZlNDQ0ODRmYjA4ODkxYzY1Li41YzkwNDZm
ZGY3NzRhZmQzNDdhMjRiY2I2YmFhNmNjYzFjZThmY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QmluZGluZy5jcHAKQEAgLTMxMCw5ICszMTAsOSBAQCB2ODo6TG9jYWw8djg6OkNv
bnRleHQ+IHRvVjhDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFdvcmxkQwogCiBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3Js
ZChGcmFtZSogZnJhbWUpCiB7Ci0gICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4
dDsKLSAgICBpZiAoVU5MSUtFTFkoISEoaXNvbGF0ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRl
eHQ6OmdldEVudGVyZWQoKSkpKQotICAgICAgICByZXR1cm4gaXNvbGF0ZWRDb250ZXh0LT5wZXJD
b250ZXh0RGF0YSgpOworICAgIFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkU2hlbGw7CisgICAg
aWYgKFVOTElLRUxZKCEhKGlzb2xhdGVkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRl
cmVkKCkpKSkKKyAgICAgICAgcmV0dXJuIGlzb2xhdGVkU2hlbGwtPnBlckNvbnRleHREYXRhKCk7
CiAgICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+cGVyQ29udGV4dERh
dGEoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
aW5kb3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1No
ZWxsLmNwcAppbmRleCA4YWJjOWUxNDc1ZWFmMDRlMzNlMjI0YmFmZDk5MmEwYjc5ODM5NDA5Li5l
YTI0MDJkMGMzMmRjYjFjZmYwMmIzYWQ2ZmE5Njc5NzY3MTU0NTkzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcApAQCAtMzcsNiArMzcsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIgogI2luY2x1ZGUgIk1lbW9yeVVzYWdlU3VwcG9ydC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKQEAgLTE3MCwxMyArMTcxLDM0IEBAIHN0YXRpYyB2
b2lkIGNoZWNrRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciwg
RG9jdW1lbnQqIGRvY3VtCiAgICAgQVNTRVJUKCFkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSB8
fCAoVjhEb2N1bWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFw
cGVyLT5HZXRQcm90b3R5cGUoKSkpID09IGRvY3VtZW50KSk7CiB9CiAKLVBhc3NPd25QdHI8VjhE
T01XaW5kb3dTaGVsbD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSkKK3N0
YXRpYyB2b2lkIHNldElzb2xhdGVkV29ybGRGaWVsZChWOERPTVdpbmRvd1NoZWxsKiBzaGVsbCwg
djg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KQogewotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgVjhET01XaW5kb3dTaGVsbChmcmFtZSkpOworICAgIHRvSW5uZXJHbG9iYWxPYmplY3QoY29u
dGV4dCktPlNldFBvaW50ZXJJbkludGVybmFsRmllbGQoVjhET01XaW5kb3c6OmVudGVyZWRJc29s
YXRlZFdvcmxkSW5kZXgsIHNoZWxsKTsKIH0KIAotVjhET01XaW5kb3dTaGVsbDo6VjhET01XaW5k
b3dTaGVsbChGcmFtZSogZnJhbWUpCitWOERPTVdpbmRvd1NoZWxsKiBWOERPTVdpbmRvd1NoZWxs
OjplbnRlcmVkSXNvbGF0ZWRXb3JsZENvbnRleHQoKQoreworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFY4RE9NV2luZG93U2hlbGwqPih0b0lubmVyR2xvYmFsT2JqZWN0KHY4OjpDb250ZXh0
OjpHZXRFbnRlcmVkKCkpLT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQoVjhET01XaW5kb3c6
OmVudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgpKTsKK30KKworc3RhdGljIHZvaWQgc2V0SW5qZWN0
ZWRTY3JpcHRDb250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0YXJnZXRDb250
ZXh0LCBpbnQgZGVidWdJZCkKK3sKKyAgICBjaGFyIGJ1ZmZlclszMl07CisgICAgaWYgKGRlYnVn
SWQgPT0gLTEpCisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJpbmpl
Y3RlZCIpOworICAgIGVsc2UKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVy
KSwgImluamVjdGVkLCVkIiwgZGVidWdJZCk7CisgICAgdGFyZ2V0Q29udGV4dC0+U2V0RGF0YSh2
ODo6U3RyaW5nOjpOZXcoYnVmZmVyKSk7Cit9CisKK1Bhc3NPd25QdHI8VjhET01XaW5kb3dTaGVs
bD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxET01X
cmFwcGVyV29ybGQ+IHdvcmxkKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVjhET01XaW5k
b3dTaGVsbChmcmFtZSwgd29ybGQpKTsKK30KKworVjhET01XaW5kb3dTaGVsbDo6VjhET01XaW5k
b3dTaGVsbChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiB3b3JsZCkK
ICAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3dvcmxkKHdvcmxkKQogewogfQogCkBAIC0x
ODYsMTggKzIwOCw0MCBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmlzQ29udGV4dEluaXRpYWxp
emVkKCkKICAgICByZXR1cm4gIW1fY29udGV4dC5pc0VtcHR5KCk7CiB9CiAKLXZvaWQgVjhET01X
aW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHQoKQordm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0
cm95SXNvbGF0ZWRTaGVsbCgpCit7CisgICAgZGlzcG9zZUNvbnRleHQodHJ1ZSk7Cit9CisKK3N0
YXRpYyB2b2lkIGlzb2xhdGVkQ29udGV4dFdlYWtDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6
VmFsdWU+IG9iamVjdCwgdm9pZCogcGFyYW1ldGVyKQogeworICAgIC8vIEhhbmRsZSB3aWxsIGJl
IGRpc3Bvc2VkIGluIGRlbGV0ZS4KKyAgICBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxWOERPTVdp
bmRvd1NoZWxsKj4ocGFyYW1ldGVyKTsKK30KKwordm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkaXNw
b3NlQ29udGV4dChib29sIHdlYWspCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHQuZ2V0KCkuSXNX
ZWFrKCkpOwogICAgIG1fcGVyQ29udGV4dERhdGEuY2xlYXIoKTsKIAotICAgIGlmICghbV9jb250
ZXh0LmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPndp
bGxSZWxlYXNlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0KCksIDApOworICAgIGlmIChtX2Nv
bnRleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCktPndpbGxSZWxlYXNlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0KCksIG1f
d29ybGQtPndvcmxkSWQoKSk7CisKKyAgICBpZiAoIXdlYWspCiAgICAgICAgIG1fY29udGV4dC5j
bGVhcigpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fd29ybGQtPmlzTWFpbldvcmxk
KCkpOworICAgICAgICBkZXN0cm95R2xvYmFsKCk7CisgICAgICAgIG1fY29udGV4dC5nZXQoKS5N
YWtlV2Vhayh0aGlzLCBpc29sYXRlZENvbnRleHRXZWFrQ2FsbGJhY2spOworICAgIH0KIAotICAg
ICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IGRpc3Bvc2luZyB0aGUgY29udGV4dCBoYXMgY3JlYXRl
ZCBhIGxvdCBvZgotICAgICAgICAvLyBnYXJiYWdlLiBOb3RpZnkgVjggYWJvdXQgdGhpcyBzbyBp
dCdsbCBoYXZlIGEgY2hhbmNlIG9mIGNsZWFuaW5nCi0gICAgICAgIC8vIGl0IHVwIHdoZW4gaWRs
ZS4KLSAgICAgICAgYm9vbCBpc01haW5GcmFtZSA9IG1fZnJhbWUtPnBhZ2UoKSAmJiAobV9mcmFt
ZS0+cGFnZSgpLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKTsgCisgICAgLy8gSXQncyBsaWtlbHkg
dGhhdCBkaXNwb3NpbmcgdGhlIGNvbnRleHQgaGFzIGNyZWF0ZWQgYSBsb3Qgb2YKKyAgICAvLyBn
YXJiYWdlLiBOb3RpZnkgVjggYWJvdXQgdGhpcyBzbyBpdCdsbCBoYXZlIGEgY2hhbmNlIG9mIGNs
ZWFuaW5nCisgICAgLy8gaXQgdXAgd2hlbiBpZGxlLgorICAgIGlmIChtX3dvcmxkLT5pc01haW5X
b3JsZCgpKSB7CisgICAgICAgIGJvb2wgaXNNYWluRnJhbWUgPSBtX2ZyYW1lLT5wYWdlKCkgJiYg
KG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSk7CiAgICAgICAgIFY4R0NG
b3JDb250ZXh0RGlzcG9zZTo6aW5zdGFuY2UoKS5ub3RpZnlDb250ZXh0RGlzcG9zZWQoaXNNYWlu
RnJhbWUpOwogICAgIH0KIH0KQEAgLTI4NCwxMCArMzI4LDEyIEBAIGJvb2wgVjhET01XaW5kb3dT
aGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkKIAogICAgIGluaXRpYWxpemVWOElmTmVlZGVkKCk7
CiAKLSAgICBtX2NvbnRleHQuYWRvcHQoY3JlYXRlTmV3Q29udGV4dChtX2dsb2JhbC5nZXQoKSwg
MCwgMCkpOworICAgIGNyZWF0ZUNvbnRleHQoKTsKICAgICBpZiAobV9jb250ZXh0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYm9vbCBpc01haW5Xb3JsZCA9IG1fd29y
bGQtPmlzTWFpbldvcmxkKCk7CisKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQg
PSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0LmdldCgpKTsKICAgICB2ODo6
Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNvbnRleHQpOwogCkBAIC0yOTksNDcgKzM0NSw2
MyBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVJZk5lZWRlZCgpCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICAvLyBGbGFnIGNvbnRleHQgYXMgaXNvbGF0ZWQuCisgICAgaWYgKCFp
c01haW5Xb3JsZCkgeworICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBtYWluV2luZG93ID0gbV9m
cmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCk7CisgICAgICAgIG1haW5XaW5kb3ctPmluaXRp
YWxpemVJZk5lZWRlZCgpOworICAgICAgICBpZiAoIW1haW5XaW5kb3ctPmNvbnRleHQoKS5Jc0Vt
cHR5KCkpCisgICAgICAgICAgICBzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKG1fY29u
dGV4dC5nZXQoKSwgbV9mcmFtZS0+c2NyaXB0KCktPmNvbnRleHREZWJ1Z0lkKG1haW5XaW5kb3ct
PmNvbnRleHQoKSkpOworICAgICAgICBzZXRJc29sYXRlZFdvcmxkRmllbGQodGhpcywgY29udGV4
dCk7CisgICAgfQorCiAgICAgbV9wZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4dERhdGE6OmNy
ZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmICghbV9wZXJDb250ZXh0RGF0YS0+aW5pdCgp
KSB7CiAgICAgICAgIGRpc3Bvc2VDb250ZXh0KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBpZiAoIWluc3RhbGxET01XaW5kb3coY29udGV4dCwgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+ZG9tV2luZG93KCkpKSB7CisgICAgaWYgKCFpbnN0YWxsRE9NV2luZG93KCkpIHsKICAg
ICAgICAgZGlzcG9zZUNvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIHVwZGF0ZURvY3VtZW50KCk7Ci0KLSAgICBzZXRTZWN1cml0eVRva2VuKCk7Ci0KLSAgICBp
ZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgY29udGV4dC0+QWxsb3dDb2RlR2VuZXJh
dGlvbkZyb21TdHJpbmdzKG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGlj
eSgpLT5hbGxvd0V2YWwoMCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpTdXBwcmVzc1JlcG9ydCkp
OwotCi0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVhdGVTY3JpcHRDb250
ZXh0KG1fY29udGV4dC5nZXQoKSwgMCwgMCk7CisgICAgaWYgKGlzTWFpbldvcmxkKSB7CisgICAg
ICAgIHVwZGF0ZURvY3VtZW50KCk7CisgICAgICAgIHNldFNlY3VyaXR5VG9rZW4oKTsKKyAgICAg
ICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICBjb250ZXh0LT5BbGxvd0Nv
ZGVHZW5lcmF0aW9uRnJvbVN0cmluZ3MobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29udGVudFNlY3Vy
aXR5UG9saWN5KCktPmFsbG93RXZhbCgwLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlN1cHByZXNz
UmVwb3J0KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVXNpbmcgdGhlIGRlZmF1bHQgc2Vj
dXJpdHkgdG9rZW4gbWVhbnMgdGhhdCB0aGUgY2FuQWNjZXNzIGlzIGFsd2F5cworICAgICAgICAv
LyBjYWxsZWQsIHdoaWNoIGlzIHNsb3cuCisgICAgICAgIC8vIEZJWE1FOiBVc2UgdG9rZW5zIHdo
ZXJlIHBvc3NpYmxlLiBUaGlzIHdpbGwgbWVhbiBrZWVwaW5nIHRyYWNrIG9mIGFsbAorICAgICAg
ICAvLyAgICAgICAgY3JlYXRlZCBjb250ZXh0cyBzbyB0aGF0IHRoZXkgY2FuIGFsbCBiZSB1cGRh
dGVkIHdoZW4gdGhlCisgICAgICAgIC8vICAgICAgICBkb2N1bWVudCBkb21haW4KKyAgICAgICAg
Ly8gICAgICAgIGNoYW5nZXMuCisgICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVsdFNlY3VyaXR5
VG9rZW4oKTsKKyAgICB9CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVh
dGVTY3JpcHRDb250ZXh0KG1fY29udGV4dC5nZXQoKSwgbV93b3JsZC0+ZXh0ZW5zaW9uR3JvdXAo
KSwgbV93b3JsZC0+d29ybGRJZCgpKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLiBX
ZSBzaG91bGQgYWN0dWFsbHkgZG8gdGhpcyBmb3IgdGhlIHByb3BlciB3b3JsZCBvbmNlCi0gICAg
Ly8gd2UgZG8gaXNvbGF0ZWQgd29ybGRzIHRoZSBXZWJDb3JlIHdheS4KLSAgICBtX2ZyYW1lLT5s
b2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoMCk7CisgICAgaWYg
KGlzTWFpbldvcmxkKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbGwgaXMgcHJvYmFibHkg
aW4gdGhlIHdyb25nIHNwb3QsIGJ1dCBjYXVzZXMgYSB0ZXN0IHRpbWVvdXQgZm9yIGh0dHAvdGVz
dHMvbWlzYy93aW5kb3ctb3Blbi10aGVuLXdyaXRlLmh0bWwgd2hlbiByZW1vdmVkLgorICAgICAg
ICAvLyBBZGRpdGlvbmFsbHksIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwg
Y2Fubm90IGJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZCB1bnRpbCB0aGlzIGNhbGwgaXMgZ29uZS4K
KyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJ
bldvcmxkKDApOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi12ODo6UGVyc2lzdGVu
dDx2ODo6Q29udGV4dD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdyb3VwLCBpbnQgd29ybGRJZCkK
K3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlQ29udGV4dCgpCiB7Ci0gICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkNvbnRleHQ+IHJlc3VsdDsKLQogICAgIC8vIFRoZSBhY3RpdmVEb2N1bWVudExv
YWRlciBwb2ludGVyIGNvdWxkIGJlIDAgZHVyaW5nIGZyYW1lIHNodXRkb3duLgogICAgIC8vIEZJ
WE1FOiBDYW4gd2UgcmVtb3ZlIHRoaXMgY2hlY2s/CiAgICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIo
KS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGVudmlyb25tZW50IHVzaW5nIGFuIGVt
cHR5IHRlbXBsYXRlIGZvciB0aGUgc2hhZG93CiAgICAgLy8gb2JqZWN0LiBSZXVzZSB0aGUgZ2xv
YmFsIG9iamVjdCBpZiBvbmUgaGFzIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT4gZ2xvYmFsVGVtcGxhdGUgPSBWOERPTVdpbmRvdzo6
R2V0U2hhZG93T2JqZWN0VGVtcGxhdGUoKTsKICAgICBpZiAoZ2xvYmFsVGVtcGxhdGUuSXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm47CiAKICAgICAvLyBV
c2VkIHRvIGF2b2lkIHNsZWVwIGNhbGxzIGluIHVubG9hZCBoYW5kbGVycy4KICAgICBTY3JpcHRD
b250cm9sbGVyOjpyZWdpc3RlckV4dGVuc2lvbklmTmVlZGVkKERhdGVFeHRlbnNpb246OmdldCgp
KTsKQEAgLTM1NCw2ICs0MTYsOCBAQCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gVjhET01X
aW5kb3dTaGVsbDo6Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYgogICAgIGNvbnN0
IFY4RXh0ZW5zaW9ucyYgZXh0ZW5zaW9ucyA9IFNjcmlwdENvbnRyb2xsZXI6OnJlZ2lzdGVyZWRF
eHRlbnNpb25zKCk7CiAgICAgT3duQXJyYXlQdHI8Y29uc3QgY2hhcio+IGV4dGVuc2lvbk5hbWVz
ID0gYWRvcHRBcnJheVB0cihuZXcgY29uc3QgY2hhcipbZXh0ZW5zaW9ucy5zaXplKCldKTsKICAg
ICBpbnQgaW5kZXggPSAwOworICAgIGludCBleHRlbnNpb25Hcm91cCA9IG1fd29ybGQtPmV4dGVu
c2lvbkdyb3VwKCk7CisgICAgaW50IHdvcmxkSWQgPSBtX3dvcmxkLT53b3JsZElkKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IC8vIEVuc3VyZSBvdXIgZGF0ZSBleHRlbnNpb24gaXMgYWx3YXlzIGFsbG93ZWQuCiAgICAgICAg
IGlmIChleHRlbnNpb25zW2ldICE9IERhdGVFeHRlbnNpb246OmdldCgpCkBAIC0zNjMsMTMgKzQy
NywxMyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gVjhET01XaW5kb3dTaGVsbDo6Y3Jl
YXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYgogICAgICAgICBleHRlbnNpb25OYW1lc1tp
bmRleCsrXSA9IGV4dGVuc2lvbnNbaV0tPm5hbWUoKTsKICAgICB9CiAgICAgdjg6OkV4dGVuc2lv
bkNvbmZpZ3VyYXRpb24gZXh0ZW5zaW9uQ29uZmlndXJhdGlvbihpbmRleCwgZXh0ZW5zaW9uTmFt
ZXMuZ2V0KCkpOwotICAgIHJlc3VsdCA9IHY4OjpDb250ZXh0OjpOZXcoJmV4dGVuc2lvbkNvbmZp
Z3VyYXRpb24sIGdsb2JhbFRlbXBsYXRlLCBnbG9iYWwpOwogCi0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICBtX2NvbnRleHQuYWRvcHQodjg6OkNvbnRleHQ6Ok5ldygmZXh0ZW5zaW9uQ29uZmlndXJh
dGlvbiwgZ2xvYmFsVGVtcGxhdGUsIG1fZ2xvYmFsLmdldCgpKSk7CiB9CiAKLWJvb2wgVjhET01X
aW5kb3dTaGVsbDo6aW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0LCBET01XaW5kb3cqIHdpbmRvdykKK2Jvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbERP
TVdpbmRvdygpCiB7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5kb21XaW5kb3coKTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gd2luZG93V3JhcHBlciA9
IFY4T2JqZWN0Q29uc3RydWN0b3I6Om5ld0luc3RhbmNlKFY4RE9NV3JhcHBlcjo6Y29uc3RydWN0
b3JGb3JUeXBlKCZWOERPTVdpbmRvdzo6aW5mbywgd2luZG93KSk7CiAgICAgaWYgKHdpbmRvd1dy
YXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTMsNyArNDU3LDcg
QEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppbnN0YWxsRE9NV2luZG93KHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNvbnRleHQsIERPTVdpbmQKICAgICAvLyAgICAgICBvdXRlciwgaW5uZXIsIGFu
ZCBET01XaW5kb3cgaW5zdGFuY2UgYWxsIGFwcGVhciB0byBiZSB0aGUgc2FtZQogICAgIC8vICAg
ICAgIEphdmFTY3JpcHQgb2JqZWN0LgogICAgIC8vCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBpbm5lckdsb2JhbE9iamVjdCA9IHRvSW5uZXJHbG9iYWxPYmplY3QoY29udGV4dCk7CisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBpbm5lckdsb2JhbE9iamVjdCA9IHRvSW5uZXJHbG9iYWxP
YmplY3QobV9jb250ZXh0LmdldCgpKTsKICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIo
aW5uZXJHbG9iYWxPYmplY3QsICZWOERPTVdpbmRvdzo6aW5mbywgd2luZG93KTsKICAgICBpbm5l
ckdsb2JhbE9iamVjdC0+U2V0UHJvdG90eXBlKHdpbmRvd1dyYXBwZXIpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtNDAxLDExICs0NjUsMTUgQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppbnN0YWxs
RE9NV2luZG93KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIERPTVdpbmQKIAogdm9p
ZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyKQogeworICAgIEFTU0VSVChtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsK
ICAgICBtX2RvY3VtZW50LnNldCh3cmFwcGVyKTsKIH0KIAogdm9pZCBWOERPTVdpbmRvd1NoZWxs
Ojp1cGRhdGVEb2N1bWVudFByb3BlcnR5KCkKIHsKKyAgICBpZiAoIW1fd29ybGQtPmlzTWFpbldv
cmxkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHVzZSBhIG5ldyBMb2NhbCBoYW5kbGUgaGVyZT8K
ICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dC5nZXQoKSk7CkBA
IC00MzQsMTEgKzUwMiwxNSBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50
UHJvcGVydHkoKQogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpjbGVhckRvY3VtZW50UHJvcGVydHko
KQogewogICAgIEFTU0VSVCghbV9jb250ZXh0LmlzRW1wdHkoKSk7CisgICAgaWYgKCFtX3dvcmxk
LT5pc01haW5Xb3JsZCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5HbG9iYWwo
KS0+Rm9yY2VEZWxldGUodjg6OlN0cmluZzo6TmV3KCJkb2N1bWVudCIpKTsKIH0KIAogdm9pZCBW
OERPTVdpbmRvd1NoZWxsOjpzZXRTZWN1cml0eVRva2VuKCkKIHsKKyAgICBBU1NFUlQobV93b3Js
ZC0+aXNNYWluV29ybGQoKSk7CisKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpOwogCiAgICAgLy8gQXNrIHRoZSBkb2N1bWVudCdzIFNlY3VyaXR5T3JpZ2luIHRv
IGdlbmVyYXRlIGEgc2VjdXJpdHkgdG9rZW4uCkBAIC00NjksNiArNTQxLDcgQEAgdm9pZCBWOERP
TVdpbmRvd1NoZWxsOjpzZXRTZWN1cml0eVRva2VuKCkKIAogdm9pZCBWOERPTVdpbmRvd1NoZWxs
Ojp1cGRhdGVEb2N1bWVudCgpCiB7CisgICAgQVNTRVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkp
OwogICAgIGlmIChtX2dsb2JhbC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
IWluaXRpYWxpemVJZk5lZWRlZCgpKQpAQCAtNDk0LDYgKzU2Nyw4IEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZ2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBwcm9wZXJ0eSwgY29u
c3Qgdjg6OkFjCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtQWRkZWQoSFRNTERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogeworICAgIEFTU0VS
VChtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKKwogICAgIGlmICghaW5pdGlhbGl6ZUlmTmVlZGVk
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTA3LDYgKzU4Miw4IEBAIHZvaWQgVjhET01XaW5k
b3dTaGVsbDo6bmFtZWRJdGVtQWRkZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRv
bWljU3RyaW5nCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVtb3ZlZChIVE1M
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CisgICAgQVNT
RVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOworCiAgICAgaWYgKGRvY3VtZW50LT5oYXNOYW1l
ZEl0ZW0obmFtZS5pbXBsKCkpIHx8IGRvY3VtZW50LT5oYXNFeHRyYU5hbWVkSXRlbShuYW1lLmlt
cGwoKSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTIzLDEwICs2MDAsMjMgQEAgdm9pZCBWOERP
TVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1SZW1vdmVkKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEF0b21pY1N0cmkKIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVTZWN1cml0eU9y
aWdpbigpCiB7CisgICAgQVNTRVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOwogICAgIGlmICht
X2NvbnRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOwogICAgIHNldFNlY3VyaXR5VG9rZW4oKTsKIH0KIAordm9pZCBWOERPTVdp
bmRvd1NoZWxsOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCit7CisgICAgQVNTRVJUKCFtX3dvcmxkLT5pc01h
aW5Xb3JsZCgpKTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgaGVyZT8KKyAgICBpZiAo
IW1faXNvbGF0ZWRXb3JsZFNoZWxsU2VjdXJpdHlPcmlnaW4gJiYgIWNvbnRleHQoKS5Jc0VtcHR5
KCkgJiYgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSkgeworICAgICAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KHY4OjpMb2NhbDx2ODo6Q29udGV4dD46
Ok5ldyhjb250ZXh0KCkpKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRD
cmVhdGVJc29sYXRlZENvbnRleHQobV9mcmFtZSwgc2NyaXB0U3RhdGUsIHNlY3VyaXR5T3JpZ2lu
LmdldCgpKTsKKyAgICB9CisgICAgbV9pc29sYXRlZFdvcmxkU2hlbGxTZWN1cml0eU9yaWdpbiA9
IHNlY3VyaXR5T3JpZ2luOworfQorCiB9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaAppbmRleCBjNjE1MjU3MzhkNjgzZDliN2FjYWQ2
NjU2YTA2MWQ3YWU2ZjIzZmNjLi5jYjNjZmFlMDY3YWI3MjVlMzkyY2NmMGU5YzhiMjBiOGYxNDYz
MzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1No
ZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5o
CkBAIC0zMSw3ICszMSw5IEBACiAjaWZuZGVmIFY4RE9NV2luZG93U2hlbGxfaAogI2RlZmluZSBW
OERPTVdpbmRvd1NoZWxsX2gKIAorI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1
ZGUgIlNjb3BlZFBlcnNpc3RlbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIlY4UGVyQ29udGV4dERhdGEuaCIKICNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTEsNyArNTMsNyBAQCBjbGFzcyBIVE1MRG9j
dW1lbnQ7CiAvLyBwZXJzaXN0IGJldHdlZW4gbmF2aWdhdGlvbnMuCiBjbGFzcyBWOERPTVdpbmRv
d1NoZWxsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxWOERPTVdpbmRvd1NoZWxs
PiBjcmVhdGUoRnJhbWUqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxWOERPTVdpbmRvd1NoZWxs
PiBjcmVhdGUoRnJhbWUqLCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4pOwogCiAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHQuZ2V0KCk7IH0KIApAQCAtNjgsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NvbnRl
eHRJbml0aWFsaXplZCgpOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNyZWF0
ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwsIGludCBleHRlbnNpb25H
cm91cCwgaW50IHdvcmxkSWQpOwotICAgIHN0YXRpYyBib29sIGluc3RhbGxET01XaW5kb3codjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwgRE9NV2luZG93Kik7CiAKICAgICBib29sIGlu
aXRpYWxpemVJZk5lZWRlZCgpOwogICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcik7CkBAIC04MCwxMCArODEsNDMgQEAgcHVibGljOgog
CiAgICAgVjhQZXJDb250ZXh0RGF0YSogcGVyQ29udGV4dERhdGEoKSB7IHJldHVybiBtX3BlckNv
bnRleHREYXRhLmdldCgpOyB9CiAKKyAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkKCkgeyByZXR1
cm4gbV93b3JsZC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlP
cmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOworICAgIFNlY3VyaXR5T3JpZ2luKiBp
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKKyAgICAgICAgcmV0dXJuIG1faXNvbGF0ZWRXb3Js
ZFNoZWxsU2VjdXJpdHlPcmlnaW4uZ2V0KCk7CisgICAgfTsKKworICAgIC8vIFJldHVybnMgdGhl
IGlzb2xhdGVkIHdvcmxkIGFzc29jaWF0ZWQgd2l0aAorICAgIC8vIHY4OjpDb250ZXh0OjpHZXRF
bnRlcmVkKCkuIEJlY2F1c2Ugd29ybGRzIGFyZSBpc29sYXRlZCwgdGhlIGVudGlyZQorICAgIC8v
IEphdmFTY3JpcHQgY2FsbCBzdGFjayBzaG91bGQgYmUgZnJvbSB0aGUgc2FtZSBpc29sYXRlZCB3
b3JsZC4KKyAgICAvLyBSZXR1cm5zIDAgaWYgdGhlIGVudGVyZWQgY29udGV4dCBpcyBmcm9tIHRo
ZSBtYWluIHdvcmxkLgorICAgIC8vCisgICAgLy8gRklYTUU6IENvbnNpZGVyIGVkZ2UgY2FzZXMg
d2l0aCBET00gbXV0YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKKyAgICAvLyB2aW9sYXRlIHRoaXMg
aW52YXJpYW50LgorICAgIC8vCisgICAgLy8gRklYTUU6IFRoaXMgaXMgcG9vcmx5IG5hbWVkIGFm
dGVyIHRoZSBkZWxldGlvbiBvZiBpc29sYXRlZCBjb250ZXh0cy4KKyAgICBzdGF0aWMgVjhET01X
aW5kb3dTaGVsbCogZ2V0RW50ZXJlZCgpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGEgdGVt
cG9yYXJ5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gRXNzZW50aWFsbHksCisgICAgICAgIC8v
IEdldEhpZGRlblZhbHVlIGlzIHRvbyBzbG93IGZvciB0aGlzIGNvZGUgcGF0aC4gV2UgbmVlZCB0
byBnZXQgdGhlCisgICAgICAgIC8vIFY4IHRlYW0gdG8gYWRkIGEgcmVhbCBwcm9wZXJ0eSB0byB2
ODo6Q29udGV4dCBmb3IgaXNvbGF0ZWQgd29ybGRzLgorICAgICAgICAvLyBVbnRpbCB0aGVuLCB3
ZSBvcHRpbWl6ZSB0aGUgY29tbW9uIGNhc2Ugb2Ygbm90IGhhdmluZyBhbnkgaXNvbGF0ZWQKKyAg
ICAgICAgLy8gd29ybGRzIGF0IGFsbC4KKyAgICAgICAgaWYgKCFET01XcmFwcGVyV29ybGQ6Omlz
b2xhdGVkV29ybGRzRXhpc3QoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAo
IXY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gZW50ZXJlZElzb2xhdGVkV29ybGRDb250ZXh0KCk7CisgICAgfQorCisgICAgdm9p
ZCBkZXN0cm95SXNvbGF0ZWRTaGVsbCgpOwogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBWOERPTVdp
bmRvd1NoZWxsKEZyYW1lKik7CisgICAgVjhET01XaW5kb3dTaGVsbChGcmFtZSosIFBhc3NSZWZQ
dHI8RE9NV3JhcHBlcldvcmxkPik7CiAKLSAgICB2b2lkIGRpc3Bvc2VDb250ZXh0KCk7CisgICAg
dm9pZCBkaXNwb3NlQ29udGV4dChib29sIHdlYWsgPSBmYWxzZSk7CiAKICAgICB2b2lkIHNldFNl
Y3VyaXR5VG9rZW4oKTsKIApAQCAtOTQsMTMgKzEyOCwyMiBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlRG9jdW1lbnRQcm9wZXJ0eSgpOwogICAgIHZvaWQgY2xlYXJEb2N1bWVudFByb3BlcnR5
KCk7CiAKKyAgICB2b2lkIGNyZWF0ZUNvbnRleHQoKTsKKyAgICBib29sIGluc3RhbGxET01XaW5k
b3coKTsKKworICAgIHN0YXRpYyBWOERPTVdpbmRvd1NoZWxsKiBlbnRlcmVkSXNvbGF0ZWRXb3Js
ZENvbnRleHQoKTsKKwogICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIFJlZlB0cjxET01XcmFwcGVy
V29ybGQ+IG1fd29ybGQ7CiAKICAgICBPd25QdHI8VjhQZXJDb250ZXh0RGF0YT4gbV9wZXJDb250
ZXh0RGF0YTsKIAogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsK
ICAgICBTY29wZWRQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fZ2xvYmFsOwogICAgIFNjb3BlZFBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9kb2N1bWVudDsKKworICAgIC8vIEZJWE1FOiBFaXRoZXIg
cmVtb3ZlIHRoaXMgb3IgdGhlIG1hcCBpbiBTY3JpcHRDb250cm9sbGVyLgorICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gbV9pc29sYXRlZFdvcmxkU2hlbGxTZWN1cml0eU9yaWdpbjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmgKaW5kZXggYTYwOWUzMjc5OTU4M2I5OGE1NTNjNTBmMmM4MTA0YTI1NjcyNWI2MC4u
MzViYTAwNzgzYTk2OWI4ODU0YTliZWYyYjExMjQ1YzJkNGQ4MzE3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRl
ICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJWOERPTU1hcC5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5j
bHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCiAjaW5jbHVkZSA8djguaD4KQEAgLTEzMCw3ICsxMzAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAqd3Jh
cHBlcjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVjhJc29sYXRlZENvbnRleHQqIGNv
bnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpOworICAgICAgICAgICAgVjhE
T01XaW5kb3dTaGVsbCogY29udGV4dCA9IFY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKTsK
ICAgICAgICAgICAgIGlmIChMSUtFTFkoIWNvbnRleHQpKSB7CiAgICAgICAgICAgICAgICAgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHdyYXBwZXIgPSBub2RlLT53cmFwcGVyKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCF3cmFwcGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhJc29sYXRlZENvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
OGY4ZWM5MTg5MzY1NDczYzU3OTBjNDE3Y2NmZDk3Njk4ODJkNjhiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKLQotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgotI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiVjhQZXJDb250ZXh0RGF0YS5o
IgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1WOElzb2xhdGVkQ29udGV4dCogVjhJc29sYXRlZENvbnRleHQ6Omlzb2xhdGVkQ29udGV4dCgp
Ci17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VjhJc29sYXRlZENvbnRleHQqPihnZXRH
bG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKSktPkdldFBvaW50ZXJGcm9tSW50
ZXJuYWxGaWVsZChWOERPTVdpbmRvdzo6ZW50ZXJlZElzb2xhdGVkV29ybGRJbmRleCkpOwotfQot
Ci12b2lkIFY4SXNvbGF0ZWRDb250ZXh0Ojpjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRlZENvbnRleHQpCi17
Ci0gICAgLy8gT3VyIGNvbnRleHQgaXMgZ29pbmcgYXdheS4gIFRpbWUgdG8gY2xlYW4gdXAgdGhl
IHdvcmxkLgotICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8VjhJ
c29sYXRlZENvbnRleHQqPihpc29sYXRlZENvbnRleHQpOwotICAgIGRlbGV0ZSBjb250ZXh0Owot
fQotCi1zdGF0aWMgdm9pZCBzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IHRhcmdldENvbnRleHQsIGludCBkZWJ1Z0lkKQotewotICAgIGNoYXIg
YnVmZmVyWzMyXTsKLSAgICBpZiAoZGVidWdJZCA9PSAtMSkKLSAgICAgICAgc25wcmludGYoYnVm
ZmVyLCBzaXplb2YoYnVmZmVyKSwgImluamVjdGVkIik7Ci0gICAgZWxzZQotICAgICAgICBzbnBy
aW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiaW5qZWN0ZWQsJWQiLCBkZWJ1Z0lkKTsKLSAg
ICB0YXJnZXRDb250ZXh0LT5TZXREYXRhKHY4OjpTdHJpbmc6Ok5ldyhidWZmZXIpKTsKLX0KLQot
VjhJc29sYXRlZENvbnRleHQ6OlY4SXNvbGF0ZWRDb250ZXh0KEZyYW1lKiBmcmFtZSwgUGFzc1Jl
ZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkKQotICAgIDogbV93b3JsZCh3b3JsZCksCi0gICAg
ICBtX2ZyYW1lKGZyYW1lKQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBtYWluV29ybGRDb250ZXh0ID0gZnJhbWUtPnNjcmlwdCgpLT53
aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7Ci0gICAgaWYgKG1haW5Xb3JsZENvbnRleHQuSXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGNyZWF0
aW5nIGEgbmV3IFY4RE9NV2luZG93U2hlbGwgaGVyZSBpbnN0ZWFkIG9mIHJpcGluZyBvdXQgdGhl
IGNvbnRleHQuCi0gICAgbV9jb250ZXh0ID0gU2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD46
OmNyZWF0ZShmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmNyZWF0ZU5ld0NvbnRleHQo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBtX3dvcmxkLT5leHRlbnNpb25Hcm91cCgpLCBtX3dv
cmxkLT53b3JsZElkKCkpKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXQoKS5Jc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIFJ1biBjb2RlIGluIHRoZSBuZXcgY29udGV4dC4KLSAg
ICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dC0+Z2V0KCkpOwotCi0g
ICAgc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZChtX2NvbnRleHQtPmdldCgpLCBTY3Jp
cHRDb250cm9sbGVyOjpjb250ZXh0RGVidWdJZChtYWluV29ybGRDb250ZXh0KSk7Ci0KLSAgICBn
ZXRHbG9iYWxPYmplY3QobV9jb250ZXh0LT5nZXQoKSktPlNldFBvaW50ZXJJbkludGVybmFsRmll
bGQoVjhET01XaW5kb3c6OmVudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgsIHRoaXMpOwotCi0gICAg
bV9wZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4dERhdGE6OmNyZWF0ZShtX2NvbnRleHQtPmdl
dCgpKTsKLSAgICBtX3BlckNvbnRleHREYXRhLT5pbml0KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhp
cyB3aWxsIGdvIGF3YXkgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRl
ZCB3b3JsZC4KLSAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmluc3RhbGxET01X
aW5kb3cobV9jb250ZXh0LT5nZXQoKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkp
OwotCi0gICAgLy8gVXNpbmcgdGhlIGRlZmF1bHQgc2VjdXJpdHkgdG9rZW4gbWVhbnMgdGhhdCB0
aGUgY2FuQWNjZXNzIGlzIGFsd2F5cwotICAgIC8vIGNhbGxlZCwgd2hpY2ggaXMgc2xvdy4KLSAg
ICAvLyBGSVhNRTogVXNlIHRva2VucyB3aGVyZSBwb3NzaWJsZS4gVGhpcyB3aWxsIG1lYW4ga2Vl
cGluZyB0cmFjayBvZiBhbGwKLSAgICAvLyAgICAgICAgY3JlYXRlZCBjb250ZXh0cyBzbyB0aGF0
IHRoZXkgY2FuIGFsbCBiZSB1cGRhdGVkIHdoZW4gdGhlCi0gICAgLy8gICAgICAgIGRvY3VtZW50
IGRvbWFpbgotICAgIC8vICAgICAgICBjaGFuZ2VzLgotICAgIG1fY29udGV4dC0+Z2V0KCktPlVz
ZURlZmF1bHRTZWN1cml0eVRva2VuKCk7Ci0KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmRpZENyZWF0ZVNjcmlwdENvbnRleHQoY29udGV4dCgpLCBtX3dvcmxkLT5leHRlbnNpb25H
cm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwotfQotCi12b2lkIFY4SXNvbGF0ZWRDb250ZXh0
OjpkZXN0cm95KCkKLXsKLSAgICBtX3BlckNvbnRleHREYXRhLmNsZWFyKCk7Ci0gICAgbV9mcmFt
ZS0+bG9hZGVyKCktPmNsaWVudCgpLT53aWxsUmVsZWFzZVNjcmlwdENvbnRleHQoY29udGV4dCgp
LCBtX3dvcmxkLT53b3JsZElkKCkpOwotICAgIG1fY29udGV4dC0+Z2V0KCkuTWFrZVdlYWsodGhp
cywgJmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2spOwotICAgIG1fZnJhbWUgPSAwOwotfQot
Ci1WOElzb2xhdGVkQ29udGV4dDo6flY4SXNvbGF0ZWRDb250ZXh0KCkKLXsKLSAgICBtX2NvbnRl
eHQtPmRpc3Bvc2VIYW5kbGUoKTsKLX0KLQotdm9pZCBWOElzb2xhdGVkQ29udGV4dDo6c2V0U2Vj
dXJpdHlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCi17
Ci0gICAgaWYgKCFtX3NlY3VyaXR5T3JpZ2luICYmIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
aGFzRnJvbnRlbmRzKCkgJiYgIWNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUg
PSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY29u
dGV4dCgpKSk7Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlSXNv
bGF0ZWRDb250ZXh0KG1fZnJhbWUsIHNjcmlwdFN0YXRlLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7
Ci0gICAgfQotICAgIG1fc2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbjsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhJc29sYXRlZENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNv
bGF0ZWRDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMWMyODA3ZDY0
NGRjMWZkNWRmNDc5NTMzOTUyNGZmYWZjNjFhYTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRl
ZENvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBWOElzb2xh
dGVkQ29udGV4dF9oCi0jZGVmaW5lIFY4SXNvbGF0ZWRDb250ZXh0X2gKLQotI2luY2x1ZGUgIkRP
TVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIgLy8gZm9yIFdl
YkNvcmU6OlNjcmlwdFNvdXJjZUNvZGUKLSNpbmNsdWRlICJTaGFyZWRQZXJzaXN0ZW50LmgiCi0j
aW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDx2OC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEZyYW1lOwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBWOFBl
ckNvbnRleHREYXRhOwotCi0vLyBWOElzb2xhdGVkQ29udGV4dAotLy8KLS8vIFY4SXNvbGF0ZWRD
b250ZXh0IHJlcHJlc2VudHMgYSBpc29sYXRlZCBleGVjdXRpb24gZW52aXJvbm1lbnQgZm9yCi0v
LyBKYXZhU2NyaXB0LiAgRWFjaCBpc29sYXRlZCB3b3JsZCBleGVjdXRlcyBpbiBwYXJhbGxlbCB3
aXRoIHRoZSBtYWluCi0vLyBKYXZhU2NyaXB0IHdvcmxkLiAgQW4gaXNvbGF0ZWQgd29ybGQgaGFz
IGFjY2VzcyB0byB0aGUgc2FtZSBET00gZGF0YQotLy8gc3RydWN0dXJlcyBhcyB0aGUgbWFpbiB3
b3JsZCBidXQgbm9uZSBvZiB0aGUgSmF2YVNjcmlwdCBwb2ludGVycy4KLS8vCi0vLyBJdCBpcyBh
biBlcnJvciB0byBldmVyIHNoYXJlIGEgSmF2YVNjcmlwdCBwb2ludGVyIGJldHdlZW4gdHdvIGlz
b2xhdGVkCi0vLyB3b3JsZHMgb3IgYmV0d2VlbiBhbiBpc29sYXRlZCB3b3JsZCBhbmQgdGhlIG1h
aW4gd29ybGQuICBCZWNhdXNlCi0vLyBpc29sYXRlZCB3b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhl
IERPTSwgdGhleSBuZWVkIHRoZWlyIG93biBET00gd3JhcHBlcnMKLS8vIHRvIGF2b2lkIGhhdmlu
ZyBwb2ludGVycyB0byB0aGUgbWFpbiB3b3JsZCdzIERPTSB3cmFwcGVycyAod2hpY2ggYXJlCi0v
LyBKYXZhU2NyaXB0IG9iamVjdHMpLgotY2xhc3MgVjhJc29sYXRlZENvbnRleHQgewotcHVibGlj
OgotICAgIC8vIENyZWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQuIFRvIGRlc3Ryb3kgaXQsIGNhbGwg
ZGVzdHJveSgpLgotICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlzb2xhdGVkIHdvcmxkIHdo
ZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgotICAgIFY4SXNvbGF0ZWRDb250ZXh0KEZy
YW1lKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+KTsKLSAgICB+VjhJc29sYXRlZENvbnRl
eHQoKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byBkZXN0cm95IHRoZSBpc29sYXRlZCB3b3JsZC4g
SXQgd2lsbCBiZSBkZWxldGVkIHNvbWV0aW1lCi0gICAgLy8gYWZ0ZXIgdGhpcyBjYWxsLCBvbmNl
IGFsbCBzY3JpcHQgcmVmZXJlbmNlcyB0byB0aGUgd29ybGQncyBjb250ZXh0Ci0gICAgLy8gaGF2
ZSBiZWVuIGRyb3BwZWQuCi0gICAgdm9pZCBkZXN0cm95KCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRo
ZSBpc29sYXRlZCB3b3JsZCBhc3NvY2lhdGVkIHdpdGgKLSAgICAvLyB2ODo6Q29udGV4dDo6R2V0
RW50ZXJlZCgpLiAgQmVjYXVzZSB3b3JsZHMgYXJlIGlzb2xhdGVkLCB0aGUgZW50aXJlCi0gICAg
Ly8gSmF2YVNjcmlwdCBjYWxsIHN0YWNrIHNob3VsZCBiZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGVk
IHdvcmxkLgotICAgIC8vIFJldHVybnMgMCBpZiB0aGUgZW50ZXJlZCBjb250ZXh0IGlzIGZyb20g
dGhlIG1haW4gd29ybGQuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgZWRnZSBjYXNl
cyB3aXRoIERPTSBtdXRhdGlvbiBldmVudHMgdGhhdCBtaWdodAotICAgIC8vIHZpb2xhdGUgdGhp
cyBpbnZhcmlhbnQuCi0gICAgLy8KLSAgICBzdGF0aWMgVjhJc29sYXRlZENvbnRleHQqIGdldEVu
dGVyZWQoKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBwZXJmb3JtYW5j
ZSBvcHRpbWl6YXRpb24uIEVzc2VudGlhbGx5LAotICAgICAgICAvLyBHZXRIaWRkZW5WYWx1ZSBp
cyB0b28gc2xvdyBmb3IgdGhpcyBjb2RlIHBhdGguIFdlIG5lZWQgdG8gZ2V0IHRoZQotICAgICAg
ICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJlYWwgcHJvcGVydHkgdG8gdjg6OkNvbnRleHQgZm9yIGlz
b2xhdGVkIHdvcmxkcy4KLSAgICAgICAgLy8gVW50aWwgdGhlbiwgd2Ugb3B0aW1pemUgdGhlIGNv
bW1vbiBjYXNlIG9mIG5vdCBoYXZpbmcgYW55IGlzb2xhdGVkCi0gICAgICAgIC8vIHdvcmxkcyBh
dCBhbGwuCi0gICAgICAgIGlmICghRE9NV3JhcHBlcldvcmxkOjppc29sYXRlZFdvcmxkc0V4aXN0
KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKCF2ODo6Q29udGV4dDo6SW5D
b250ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGlzb2xhdGVk
Q29udGV4dCgpOwotICAgIH0KLQotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQo
KSB7IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9Ci0gICAgUGFzc1JlZlB0cjxTaGFyZWRQZXJz
aXN0ZW50PHY4OjpDb250ZXh0PiA+IHNoYXJlZENvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7
IH0KLQotICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dvcmxk
LmdldCgpOyB9Ci0KLSAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7
IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRTZWN1cml0eU9y
aWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7Ci0KLSAgICBWOFBlckNvbnRleHREYXRh
KiBwZXJDb250ZXh0RGF0YSgpIHsgcmV0dXJuIG1fcGVyQ29udGV4dERhdGEuZ2V0KCk7IH0KLQot
cHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmpl
Y3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90
b3R5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rv
ciB3aGVuIG91ciBKYXZhU2NyaXB0IGNvbnRleHQgaXMgYWJvdXQKLSAgICAvLyB0byBiZSBkZXN0
cm95ZWQuCi0gICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRDb250ZXh0KTsKLQot
ICAgIHN0YXRpYyBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0KCk7Ci0KLSAgICAv
LyBUaGUgdW5kZXJseWluZyB2ODo6Q29udGV4dC4gVGhpcyBvYmplY3QgaXMga2VlcCBvbiB0aGUg
aGVhcCBhcwotICAgIC8vIGxvbmcgYXMgfG1fY29udGV4dHwgaGFzIG5vdCBiZWVuIGdhcmJhZ2Ug
Y29sbGVjdGVkLgotICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1f
Y29udGV4dDsKLQotICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1fd29ybGQ7Ci0KLSAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJpdHlPcmlnaW47Ci0KLSAgICBGcmFtZSogbV9m
cmFtZTsKLQotICAgIE93blB0cjxWOFBlckNvbnRleHREYXRhPiBtX3BlckNvbnRleHREYXRhOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVjhJc29sYXRlZENvbnRl
eHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRM
aXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3Rl
bmVyLmNwcAppbmRleCBjMWJiZGJmNzc1NmU4YjA3NTdhOGFkMDRiOTI0NDQxMWExYThhZTNkLi4w
YjA0NmQzMzJlZDVjZTdmMTcxZDU4MDcwMmU0NGZmODY3NjJiOGNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcApAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVt
ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKICNpbmNs
dWRlICJWOERvY3VtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29y
bGRDb250ZXh0SGFuZGxlLmNwcAppbmRleCA0ODhmM2I1MjdiNjgzMTQyNmI0ZjlkNDBkNDg3MTE3
MDkxNWVhMTQ4Li4wNWU1MTQ4OTA1NDVmNDU2MjNmODllMzhkNWFlOWFmZGM2YTc5NTdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmxkQ29udGV4dEhhbmRsZS5jcHAK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIKIAogI2lu
Y2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5o
IgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00MiwxNSArNDIsMjEgQEAgV29ybGRDb250ZXh0SGFuZGxlOjpXb3JsZENvbnRleHRIYW5k
bGUoV29ybGRUb1VzZSB3b3JsZFRvVXNlKQogICAgIGlmICh3b3JsZFRvVXNlID09IFVzZU1haW5X
b3JsZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0KiBjb250
ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkKLSAgICAgICAgbV9jb250ZXh0
ID0gY29udGV4dC0+c2hhcmVkQ29udGV4dCgpOworICAgIFY4RE9NV2luZG93U2hlbGwqIHNoZWxs
ID0gVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpOworICAgIGlmIChMSUtFTFkoIXNoZWxs
KSkgeworICAgICAgICBtX3dvcmxkVG9Vc2UgPSBVc2VNYWluV29ybGQ7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQgPSBTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0
Pjo6Y3JlYXRlKHNoZWxsLT5jb250ZXh0KCkpOwogfQogCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
IFdvcmxkQ29udGV4dEhhbmRsZTo6YWRqdXN0ZWRDb250ZXh0KFNjcmlwdENvbnRyb2xsZXIqIHNj
cmlwdCkgY29uc3QKIHsKLSAgICBpZiAobV93b3JsZFRvVXNlID09IFVzZU1haW5Xb3JsZCB8fCAh
bV9jb250ZXh0IHx8IG1fY29udGV4dC0+Z2V0KCkuSXNFbXB0eSgpKQorICAgIGlmIChtX3dvcmxk
VG9Vc2UgPT0gVXNlTWFpbldvcmxkKQogICAgICAgICByZXR1cm4gc2NyaXB0LT5tYWluV29ybGRD
b250ZXh0KCk7CiAKKyAgICBBU1NFUlQoIW1fY29udGV4dC0+Z2V0KCkuSXNFbXB0eSgpKTsKICAg
ICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dC0+Z2V0KCkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1
bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1
bWVudEN1c3RvbS5jcHAKaW5kZXggNTkxMTQ0ZjhiNjU2ODhkNjM2ODM1YzUxYzJmNDQ5NDhlYTI0
YWVmNi4uNzgxYTdiNzI2NmZkYTVkMWE3NTFhYzNiZThmNDU3MjkxZjE4ZmUxYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9t
LmNwcApAQCAtNDQsOSArNDQsOSBAQAogI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgiCiAjaW5jbHVkZSAiVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJW
OERPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2lu
Y2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50LmgiCi0jaW5j
bHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRl
ICJWOFRvdWNoLmgiCiAjaW5jbHVkZSAiVjhUb3VjaExpc3QuaCIKQEAgLTEzMCw3ICsxMzAsNyBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChEb2N1bWVudCogaW1wbCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleAogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IFY4RG9jdW1lbnQ6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlLCBm
b3JjZU5ld09iamVjdCk7CiAgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gd3JhcHBlcjsKLSAgICBpZiAoIVY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpIHsK
KyAgICBpZiAoIVY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkgewogICAgICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkKICAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQo
KS0+d2luZG93U2hlbGwoKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1
bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
RG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IGNhMzk3NTQ3ZGIwNDEzMjJhYmY1ZmUxZjdhNzNkZTAy
N2VkMTg5YzEuLjI4ODRkYzU0ODJkMGViOGVmZGJkOTEyMTYyNDljODcwNWNjMjgyNDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERv
Y3VtZW50Q3VzdG9tLmNwcApAQCAtNDAsOSArNDAsOSBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisjaW5j
bHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIlY4SFRNTEFsbENvbGxlY3Rpb24u
aCIKICNpbmNsdWRlICJWOEhUTUxDb2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENv
bnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFJlY3Vyc2lvblNjb3Bl
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtMTg3LDcgKzE4Nyw3
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxEb2N1bWVudCogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwcGVyID0gVjhIVE1MRG9jdW1lbnQ6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlLCBmb3JjZU5ld09iamVjdCk7CiAgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKLSAgICBpZiAoIVY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVk
KCkpIHsKKyAgICBpZiAoIVY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkgewogICAgICAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkKICAgICAgICAgICAgIGZyYW1lLT5z
Y3JpcHQoKS0+d2luZG93U2hlbGwoKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNW
R0RvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFNWR0RvY3VtZW50Q3VzdG9tLmNwcAppbmRleCBhNmY0MWI2ZGI1MjY1YWEwZDZiYWEyZmZjOGM2
ODcyYzQ0OTNhY2I4Li5kYTE2NmE3YWZmZjNiN2FjNTk1YTAyODJiZWVmOTc1ODBlNWNhODNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVu
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZH
RG9jdW1lbnRDdXN0b20uY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiVjhTVkdEb2N1
bWVudC5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4
dC5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00NSw3ICs0NSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNWR0RvY3Vt
ZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29uCiAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhTVkdEb2N1bWVudDo6d3JhcChpbXBsLCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKICAgICBpZiAod3JhcHBlci5J
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIGlmICghVjhJc29sYXRlZENv
bnRleHQ6OmdldEVudGVyZWQoKSkgeworICAgIGlmICghVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50
ZXJlZCgpKSB7CiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpKQogICAg
ICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdy
YXBwZXIod3JhcHBlcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcApp
bmRleCBjMGU5YzViOTJiYzJjOWViNWE3YTU1YmJkNGQ1MGFlMzQxNGU4MmQ3Li4wMGMxYzI2Njlk
ZjdiZGU4NGQ3NGRlN2ViNjY5ODM0YjA3ODY1NWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0
cnVjdG9yLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIk9yaWdpbkFjY2Vzc0VudHJ5
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
LSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hl
bGwuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQu
aCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKQEAgLTU5LDggKzU5
LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4WE1MSHR0cFJlcXVlc3Q6OmNvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
UmVmZXJlbmNlRXJyb3IsICJYTUxIdHRwUmVxdWVzdCBjb25zdHJ1Y3RvcidzIGFzc29jaWF0ZWQg
Y29udGV4dCBpcyBub3QgYXZhaWxhYmxlIiwgYXJncy5HZXRJc29sYXRlKCkpOwogCiAgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKLSAgICBpZiAoVjhJc29sYXRlZENv
bnRleHQqIGlzb2xhdGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkp
Ci0gICAgICAgIHNlY3VyaXR5T3JpZ2luID0gaXNvbGF0ZWRDb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpOworICAgIGlmIChWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERP
TVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpCisgICAgICAgIHNlY3VyaXR5T3JpZ2luID0gaXNv
bGF0ZWRXb3JsZFNoZWxsLT5pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oKTsKICAgICBSZWZQ
dHI8WE1MSHR0cFJlcXVlc3Q+IHhtbEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0LCBzZWN1cml0eU9yaWdpbik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIo
d3JhcHBlciwgJmluZm8sIHhtbEh0dHBSZXF1ZXN0LmdldCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163295</attachid>
            <date>2012-09-11 00:40:59 -0700</date>
            <delta_ts>2012-09-11 01:43:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95735-20120911094034.patch</filename>
            <type>text/plain</type>
            <size>69059</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2I4ZTg3YjU3YTY0ZWQz
NmIzZjNjNzZjN2YyNDJkNmFiMzUzNGFiNC4uN2FiZmY0MjA4MzljOTllYmExYTVhMjMzNzJhMzNi
ZjgzN2Y2ZTAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wOS0xMSAgRGFu
IENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZW1vdmVkIFY4SXNvbGF0
ZWRDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTczNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbW92ZSBWOElzb2xhdGVkQ29udGV4dCBhbmQgbWVyZ2UgZnVuY3Rpb25hbGl0eSBpbnRvIFY4
RE9NV2luZG93U2hlbGwuCisgICAgICAgIFRoaXMgYnJpbmdzIHRoZSBWOCBpc29sYXRlZCB3b3Js
ZCBtb2RlbCBpbnRvIGNsb3NlciBhbGlnbm1lbnQgd2l0aAorICAgICAgICB0aGF0IG9mIEpTQy4K
KworICAgICAgICBObyBuZXcgdGVzdHMuICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKwor
ICAgICAgICAqIFVzZVY4LmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRl
SW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZs
b2F0NjRBcnJheS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01EYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTURhdGE6OmdldEN1cnJlbnRTdG9yZSk6CisgICAgICAgICogYmluZGluZ3Mv
djgvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3Js
ZDo6ZW5zdXJlSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NV3JhcHBl
cldvcmxkLmg6CisgICAgICAgIChET01XcmFwcGVyV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6U2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpyZXNldElzb2xhdGVkV29ybGRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmVuc3VyZUlzb2xhdGVkV29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGxJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NoZWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRl
ZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnNldElzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
OjpjdXJyZW50V29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
Ojpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JpcHRDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93
U2hlbGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkUGVyc2lzdGVudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFBlcnNpc3RlbnQ6OmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRQZXJzaXN0ZW50OjpTaGFyZWRQZXJzaXN0ZW50KToKKyAgICAgICAgKFNo
YXJlZFBlcnNpc3RlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRJc29sYXRlZFdvcmxkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVs
bDo6ZW50ZXJlZElzb2xhdGVkV29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZCk6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XaW5kb3dTaGVsbDo6VjhET01XaW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdpbmRvd1NoZWxsOjpkZXN0cm95SXNvbGF0ZWRTaGVsbCk6CisgICAgICAgIChXZWJDb3Jl
Ojppc29sYXRlZENvbnRleHRXZWFrQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
aW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5k
b3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2lu
ZG93U2hlbGw6OmNyZWF0ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dT
aGVsbDo6aW5zdGFsbERPTVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1No
ZWxsOjp1cGRhdGVEb2N1bWVudFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5k
b3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdpbmRvd1NoZWxsOjpjbGVhckRvY3VtZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XaW5kb3dTaGVsbDo6c2V0U2VjdXJpdHlUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1BZGRlZCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdp
bmRvd1NoZWxsOjpuYW1lZEl0ZW1SZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2lu
ZG93U2hlbGw6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbik6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oOgorICAgICAgICAoVjhET01XaW5kb3dTaGVs
bCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjp3b3JsZCk6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdyYXBwZXI6OmdldENhY2hlZFdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNv
bGF0ZWRDb250ZXh0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOElzb2xh
dGVkQ29udGV4dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50
TGlzdGVuZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmxkQ29udGV4dEhhbmRsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JsZENvbnRleHRIYW5kbGU6OldvcmxkQ29udGV4dEhh
bmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JsZENvbnRleHRIYW5kbGU6OmFkanVzdGVkQ29u
dGV4dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0
dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhYTUxIdHRwUmVx
dWVzdDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDktMTAgIEtlaXNoaSBIYXR0b3Jp
ICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBJbnB1dFR5cGVOYW1lcyB0byBh
IHNlcGFyYXRlIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1VzZVY4LmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UKaW5kZXggZDA0MWM4MTY0MmI1MDhhYzlhN2NhNzNh
NWVhZGU1NDkwZDljYmQ0Yy4uOTg2MjU4OGE4OTk3OGNlNjYxYjk4ZDNiZWFiOGZhMzNiYzk1ZDYz
MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvVXNlVjguY21ha2UKQEAgLTU3LDcgKzU3LDYgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCiAgICAgYmluZGluZ3Mv
djgvVjhHQ0ZvckNvbnRleHREaXNwb3NlLmNwcAogICAgIGJpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJv
cGVydHlOYW1lLmNwcAotICAgIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAogICAg
IGJpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCiAgICAgYmluZGluZ3MvdjgvVjhO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcAogICAgIGJpbmRpbmdzL3Y4L1Y4T2JqZWN0Q29uc3RydWN0
b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODZiMzI5MTdmNzU1MTk5MmY2NDkyMGI4YTNlMTY5
MDA2ZTRjMDIxZC4uNGJhZjk1Y2UwZTQ1NTYxYTg2MzQ4NzNhNjVmYzI2MjhmODlmNGE5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMjMwMSw4ICsyMzAxLDYgQEAKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOEdDRm9yQ29udGV4dERpc3Bvc2UuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
VjhIaWRkZW5Qcm9wZXJ0eU5hbWUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhp
ZGRlblByb3BlcnR5TmFtZS5oJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOElzb2xhdGVk
Q29udGV4dC5jcHAnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0
LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggNTQxNmZjODk3MTQ0
Y2Y4ZjRlNDQ2NWU4MmYwNTZhN2U1OGU5ZTg4Mi4uYzI5Y2M1YzBmODJiMTllY2M2MWNjMTg5OWJl
MTg4OTUzMjZlMzg5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTI1MTksNyArMjUxOSw2IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOEJpbmRpbmcuaCIpOwogICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJWOERPTVdyYXBwZXIuaCIpOwotICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJW
OElzb2xhdGVkQ29udGV4dC5oIik7CiAKICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJGludGVyZmFj
ZU5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAppbmRleCBlNDcwM2JjOTFkY2MxOWU4YjRjZTMz
YzM0Nzk5MGVmMDZiMGI5OTIyLi4wMGViZDZkYjhiN2UyZGU3Njg3MzY4OTZlMGY4MWU4NTkwOWZl
ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJW
OERPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJWOEZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIlY4
SW50MzJBcnJheS5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSA8
d3RmL0Zsb2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9GbG9hdDY0QXJyYXkuaD4KICNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4
IGI5OTZjODE1NWJlZjhmYmY5NjRkMmEzMDcwMTQ2YWJiYjIzMmVhNjAuLmJkYzNlYTQzYzIyZWY3
OWYzYWE0ODdlMmMxMDcyMjkzM2JkYThjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmpl
Y3QuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgot
I2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5j
bHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuY3BwCmluZGV4IDdjMzJiZTZlMDFlZGUwZDAyMDBiNmVhYWMwZDk4ZDkzNjdkOTI1NzQuLjNm
MzBiZDUxNmIxMGE0YjkzODVhOGM3YjZhMzVmNzE0MTRlMGU5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJW
OERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYjNhMzUzNGYyNGFiNzZmNTFkYmViNWU0NTdlNDZm
YzUxNTI5NDJmYy4uNzAxYjg5YWM4NzJlYTMzMTI4NjYyOWRjMDNjOGZmNGEwNjYwMjg5NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2lu
Y2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
ICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5o
IgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCBiNzgzNjllOTU1ZjRlZDc2ZjNkYjg4ZTkyOTZl
MDdmM2E3ZTI0YjQ3Li5iNTk2NWRjOTIzYjk4NDU2ZTBlZDZiOTFmODhiYWY4N2I5ODNlMGNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJW
OENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJWOEV2
ZW50LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUu
aCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcApp
bmRleCBkODAxOTlkOWYxMTljODlkNzAwM2Y5NmEyNzQ0MTdiY2I3M2JmN2RjLi4xYTZlODM5OWE4
NDM5NDM2MTkzZDMzMjUwMzc0YWM3MDliNTQ4OGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcApA
QCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNp
bmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRl
ICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCmluZGV4IDFkNzdhYTJmNDUw
ZmRkZDA4NWFkYTEyNGMxMmVhYTViYTEzOWYxZDEuLmZmN2JhMGRlZmE4ODAyOWU1N2M1MGVlZTM3
Njc1ZWEyOTQ5NzMxMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCkBAIC0zMSw3ICszMSw2IEBA
CiAjaW5jbHVkZSAiVGVzdFN1cHBsZW1lbnRhbC5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgog
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhUZXN0T2JqLmgiCiAjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
Y3BwCmluZGV4IDI0YzRkZjY5ODU4YTYwNjZmY2Y0NTUzZWEyNjI4MDg4NTcyMWQyZDMuLjdiMWU3
NzQ0NjI1NGE3NzhlNjQ4ZGQ2NzliNTA2MThjZTU2NDU4N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5j
bHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IDY2ZDI5MDk3YmQ1OGM2MjNhZmZlMzk3
OTFhOTJlMjAyZWI5NmY5ZDcuLjE2MmE5YTVkYzhhY2M1N2NjOTMzNDk2OGNjMzgyOGMyZTMzNDJm
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTI4LDcgKzI4LDYg
QEAKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENv
bnRleHQuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5vZGUuY3BwCmluZGV4IDU2NTVhOGMwMWE3NTM0YTFmZjMwYWNmZTZlMGZmOTliMTk2
YWZkYjAuLjc2Y2FjZGQ5N2ZkMzNiYWM3ZjJmOGE5MTA3MDlhZDM1OWUwOTMzNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9k
ZS5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0j
aW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCA5MjUzNzEyNGUyN2ExZjVl
YzhiN2RhYWRiMjBmNTJlYWI0ZTQxZjA2Li41ZmQzMjNlZWU0ZjY3NTgyNjU1ZjU2M2VjMjFhNjI0
OTczNGUzZGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgIlY4RE9N
V3JhcHBlci5oIgogI2luY2x1ZGUgIlY4RG9jdW1lbnQuaCIKICNpbmNsdWRlICJWOEZsb2F0MzJB
cnJheS5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhTVkdE
b2N1bWVudC5oIgogI2luY2x1ZGUgIlY4U1ZHUG9pbnQuaCIKICNpbmNsdWRlICJWOFNjcmlwdFBy
b2ZpbGUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAKaW5kZXggYmE0YzQwZDU2NGFmN2Y0NmQwYWQyMGYxNTMxYmVlZDJmMjhl
M2FmMC4uZjhmYzVlNTkwYWI0YTc4YTQyYzRjOGIyNDY2NTEzMzZhYzE4YzhhZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNp
bmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRl
ICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKICNpbmNs
dWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5jcHAKaW5kZXggMWE2M2MyZjJiZGZlOGE2OGRl
MjZiYjk2NjNlMmVkOWNjZGRkOTFhOC4uYWY1MGExZWNhM2FiMjE1ODFhYmQ2NGFhMDBmZjVhZjMz
OGNiYjk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5jcHAKQEAgLTMxLDcg
KzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJET01EYXRhLmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKKyNpbmNs
dWRlICJWOERPTVdpbmRvd1NoZWxsLmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCiAKQEAgLTQzLDcgKzQzLDcg
QEAgRE9NRGF0YVN0b3JlJiBET01EYXRhOjpnZXRDdXJyZW50U3RvcmUodjg6Oklzb2xhdGUqIGlz
b2xhdGUpCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1
cnJlbnQoaXNvbGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKGRhdGEtPmRvbURhdGFTdG9yZSgpICE9
IDApKQogICAgICAgICByZXR1cm4gKmRhdGEtPmRvbURhdGFTdG9yZSgpOwotICAgIFY4SXNvbGF0
ZWRDb250ZXh0KiBjb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKTsKKyAg
ICBWOERPTVdpbmRvd1NoZWxsKiBjb250ZXh0ID0gVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShjb250ZXh0ICE9IDApKQogICAgICAgICByZXR1cm4gKmNv
bnRleHQtPndvcmxkKCktPmRvbURhdGFTdG9yZSgpOwogICAgIHJldHVybiBkZWZhdWx0U3RvcmU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcAppbmRl
eCAzMWEwMjg2YzQ1MWY3NjdkY2QzZWI0NDFhN2ZlOGMxM2ZjY2NiMzFmLi44NTllODM2ZjIzNDA0
ZmQyOGIwNGNlYTVkM2M3ZmQ3ZTQ5NWExYzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKQEAgLTkwLDEzICs5MCwxMiBAQCB2b2lkIERPTVdy
YXBwZXJXb3JsZDo6ZGVhbGxvY2F0ZShET01XcmFwcGVyV29ybGQqIHdvcmxkKQogCiBzdGF0aWMg
aW50IHRlbXBvcmFyeVdvcmxkSWQgPSBET01XcmFwcGVyV29ybGQ6OnVuaW5pdGlhbGl6ZWRXb3Js
ZElkLTE7CiAKLVBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBET01XcmFwcGVyV29ybGQ6Omdl
dE9yQ3JlYXRlSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJZCwgaW50IGV4dGVuc2lvbkdyb3VwKQor
UGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IERPTVdyYXBwZXJXb3JsZDo6ZW5zdXJlSXNvbGF0
ZWRXb3JsZChpbnQgd29ybGRJZCwgaW50IGV4dGVuc2lvbkdyb3VwKQogewogICAgIEFTU0VSVCh3
b3JsZElkICE9IG1haW5Xb3JsZElkKTsKLSAgICBBU1NFUlQod29ybGRJZCAhPSB1bmluaXRpYWxp
emVkV29ybGRJZCk7CiAKICAgICBXb3JsZE1hcCYgbWFwID0gaXNvbGF0ZWRXb3JsZE1hcCgpOwot
ICAgIGlmICghd29ybGRJZCkKKyAgICBpZiAod29ybGRJZCA9PSB1bmluaXRpYWxpemVkV29ybGRJ
ZCkKICAgICAgICAgd29ybGRJZCA9IHRlbXBvcmFyeVdvcmxkSWQtLTsKICAgICBlbHNlIHsKICAg
ICAgICAgV29ybGRNYXA6Oml0ZXJhdG9yIGkgPSBtYXAuZmluZCh3b3JsZElkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmgKaW5kZXggMDExMjViN2YzNGI5
YjUwNzFkYjI2ZGU1MDYxNTRjNDlkZDBjNDZiNC4uOWNjY2Q1ZmM2YjJlNDgxM2Y5OTkyY2RiMGNl
Nzk5MTFhNDA5MDQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
V3JhcHBlcldvcmxkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBl
cldvcmxkLmgKQEAgLTQxLDEyICs0MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBUaGlz
IGNsYXNzIHJlcHJlc2VudCBhIGNvbGxlY3Rpb24gb2YgRE9NIHdyYXBwZXJzIGZvciBhIHNwZWNp
ZmljIHdvcmxkLgogY2xhc3MgRE9NV3JhcHBlcldvcmxkIDogcHVibGljIFdURjo6UmVmQ291bnRl
ZEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBpbnQgbWFpbldvcmxkSWQgPSAtMTsK
LSAgICBzdGF0aWMgY29uc3QgaW50IG1haW5Xb3JsZEV4dGVuc2lvbkdyb3VwID0gLTE7Ci0gICAg
c3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxpemVkV29ybGRJZCA9IC0yOwotICAgIHN0YXRpYyBj
b25zdCBpbnQgdW5pbml0aWFsaXplZEV4dGVuc2lvbkdyb3VwID0gLTI7CisgICAgc3RhdGljIGNv
bnN0IGludCBtYWluV29ybGRJZCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCBtYWluV29ybGRF
eHRlbnNpb25Hcm91cCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxpemVkV29y
bGRJZCA9IC0xOworICAgIHN0YXRpYyBjb25zdCBpbnQgdW5pbml0aWFsaXplZEV4dGVuc2lvbkdy
b3VwID0gLTE7CiAgICAgLy8gSWYgMCBpcyBwYXNzZWQgYXMgd29ybGRJZCwgdGhlIHdvcmxkIHdp
bGwgYmUgYXNzaWduZWQgYSB0ZW1wb3JhcnkgaWQgaW5zdGVhZC4KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxET01XcmFwcGVyV29ybGQ+IGdldE9yQ3JlYXRlSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJ
ZCwgaW50IGV4dGVuc2lvbkdyb3VwKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01XcmFwcGVy
V29ybGQ+IGVuc3VyZUlzb2xhdGVkV29ybGQoaW50IHdvcmxkSWQsIGludCBleHRlbnNpb25Hcm91
cCk7CiAgICAgc3RhdGljIGJvb2wgaXNvbGF0ZWRXb3JsZHNFeGlzdCgpIHsgcmV0dXJuIGlzb2xh
dGVkV29ybGRDb3VudDsgfQogICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Ig
YSBwcm9ibGVtIGluIFdlYlZpZXdJbXBsLgogICAgIC8vIERvIG5vdCB1c2UgdGhpcyBhbnl3aGVy
ZSBlbHNlISEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxl
ci5jcHAKaW5kZXggZTY2NTVlZDlhOTYzNzY4ZjMxMzNiYTFiY2UxODhhMjA0ZmE5YzRjOC4uMjEx
YmE5NDdhMTcyNzFmYTYzZDM5ODE3ZmI2OGViOWRjMDk0YTE4NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTYyLDcgKzYyLDYgQEAK
ICNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlO
YW1lLmgiCiAjaW5jbHVkZSAiVjhIVE1MRW1iZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhJc29s
YXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5QT2JqZWN0LmgiCiAjaW5jbHVkZSAiVjhSZWN1
cnNpb25TY29wZS5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpAQCAtMTAwLDcgKzk5LDcgQEAgYm9v
bCBTY3JpcHRDb250cm9sbGVyOjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSAqZnJh
bWUpCiBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVyKEZyYW1lKiBmcmFtZSkKICAg
ICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3NvdXJjZVVSTCgwKQotICAgICwgbV93aW5kb3dT
aGVsbChWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUoZnJhbWUpKQorICAgICwgbV93aW5kb3dTaGVs
bChWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUoZnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KSkKICAgICAsIG1fcGF1c2VkKGZhbHNlKQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQogICAgICwgbV93cmFwcGVkV2luZG93U2NyaXB0TlBPYmplY3QoMCkKQEAgLTE0Nyw3ICsxNDYs
NyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnJlc2V0SXNvbGF0ZWRXb3JsZHMoKQogewogICAg
IGZvciAoSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMu
YmVnaW4oKTsKICAgICAgICAgIGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgIGl0ZXItPnNlY29uZC0+ZGVzdHJveSgpOworICAgICAgICBpdGVyLT5zZWNv
bmQtPmRlc3Ryb3lJc29sYXRlZFNoZWxsKCk7CiAgICAgfQogICAgIG1faXNvbGF0ZWRXb3JsZHMu
Y2xlYXIoKTsKICAgICBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuY2xlYXIoKTsKQEAg
LTMxNCw1MCArMzEzLDcyIEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAgICAgcmV0dXJuIFNjcmlwdFZh
bHVlKG9iamVjdCk7CiB9CiAKLXZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
JiBzb3VyY2VzLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzKQorVjhET01XaW5kb3dTaGVs
bCogU2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdvcmxk
SWQsIGludCBleHRlbnNpb25Hcm91cCkKIHsKLSAgICBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3
b3JsZElELCBzb3VyY2VzLCAwLCByZXN1bHRzKTsKKyAgICBBU1NFUlQod29ybGRJZCAhPSBET01X
cmFwcGVyV29ybGQ6Om1haW5Xb3JsZElkKTsKKworICAgIC8vIENoZWNrIHRoZSBtYXAgZm9yIG5v
bi10ZW1wb3Jhcnkgd29ybGRzLgorICAgIGlmICh3b3JsZElkICE9IERPTVdyYXBwZXJXb3JsZDo6
dW5pbml0aWFsaXplZFdvcmxkSWQpIHsKKyAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElkKTsKKyAgICAgICAgaWYgKGl0
ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGl0ZXIt
PnNlY29uZC0+d29ybGQoKS0+d29ybGRJZCgpID09IHdvcmxkSWQpOworICAgICAgICAgICAgQVNT
RVJUKGl0ZXItPnNlY29uZC0+d29ybGQoKS0+ZXh0ZW5zaW9uR3JvdXAoKSA9PSBleHRlbnNpb25H
cm91cCk7CisgICAgICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAg
fQorCisgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQgPSBET01XcmFwcGVyV29ybGQ6
OmVuc3VyZUlzb2xhdGVkV29ybGQod29ybGRJZCwgZXh0ZW5zaW9uR3JvdXApOworICAgIE93blB0
cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxs
OjpjcmVhdGUobV9mcmFtZSwgd29ybGQpOworICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxk
LT53b3JsZElkKCksIGlzb2xhdGVkV29ybGRTaGVsbC5nZXQoKSk7CisgICAgcmV0dXJuIGlzb2xh
dGVkV29ybGRTaGVsbC5sZWFrUHRyKCk7CiB9CiAKLXZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlw
dFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRW
YWx1ZT4qIHJlc3VsdHMpCitWOERPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjpleGlz
dGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKLSAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgQVNTRVJUKHdvcmxkKTsKIAotICAgIC8v
IEZJWE1FOiBUaGlzIHdpbGwgbmVlZCB0byBnZXQgcmVvcmdhbml6ZWQgb25jZSB3ZSBoYXZlIGEg
d2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KLSAgICBpZiAoIXdpbmRvd1NoZWxs
KCktPmluaXRpYWxpemVJZk5lZWRlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKExJS0VM
WSh3b3JsZC0+aXNNYWluV29ybGQoKSkpCisgICAgICAgIHJldHVybiBtX3dpbmRvd1NoZWxsLmdl
dCgpOworCisgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRX
b3JsZHMuZmluZCh3b3JsZC0+d29ybGRJZCgpKTsKKyAgICByZXR1cm4gaXRlciA9PSBtX2lzb2xh
dGVkV29ybGRzLmVuZCgpID8gMCA6IGl0ZXItPnNlY29uZDsKK30KKworVjhET01XaW5kb3dTaGVs
bCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkK
K3sKKyAgICBWOERPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IGV4aXN0aW5nV2luZG93U2hlbGxJbnRl
cm5hbCh3b3JsZCk7CisgICAgaWYgKExJS0VMWSghIXNoZWxsKSkKKyAgICAgICAgcmV0dXJuIHNo
ZWxsOwogCisgICAgT3duUHRyPFY4RE9NV2luZG93U2hlbGw+IGlzb2xhdGVkV29ybGRTaGVsbCA9
IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZShtX2ZyYW1lLCB3b3JsZCk7CisgICAgbV9pc29sYXRl
ZFdvcmxkcy5zZXQod29ybGQtPndvcmxkSWQoKSwgaXNvbGF0ZWRXb3JsZFNoZWxsLmdldCgpKTsK
KyAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZFNoZWxsLmxlYWtQdHIoKTsKK30KKwordm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFZl
Y3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpCit7CisgICAgLy8gRXhjZXB0IGluIHRoZSB0ZXN0
IHJ1bm5lciwgd29ybGRJRCBzaG91bGQgYmUgbm9uIDAgYXMgaXQgY29uZmxpY3RzIHdpdGggdGhl
IG1haW5Xb3JsZElkLgorICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhlIHRlc3QgcnVubmVyIHRvIHBl
cmZvcm0gdGhpcyBzd2FwIGFuZCBtYWtlIHRoaXMgYW4gQVNTRVJULgorICAgIGlmIChVTkxJS0VM
WSghd29ybGRJRCkpCisgICAgICAgIHdvcmxkSUQgPSBET01XcmFwcGVyV29ybGQ6OnVuaW5pdGlh
bGl6ZWRXb3JsZElkOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHY4
OjpMb2NhbDx2ODo6QXJyYXk+IHY4UmVzdWx0czsKICAgICB7CiAgICAgICAgIHY4OjpIYW5kbGVT
Y29wZSBldmFsdWF0ZUhhbmRsZVNjb3BlOwotICAgICAgICBWOElzb2xhdGVkQ29udGV4dCogaXNv
bGF0ZWRDb250ZXh0ID0gMDsKLSAgICAgICAgaWYgKHdvcmxkSUQgPiAwKSB7Ci0gICAgICAgICAg
ICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5k
KHdvcmxkSUQpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQo
KSkKLSAgICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBpdGVyLT5zZWNvbmQ7Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJ
c29sYXRlZENvbnRleHQobV9mcmFtZSwgRE9NV3JhcHBlcldvcmxkOjpnZXRPckNyZWF0ZUlzb2xh
dGVkV29ybGQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApKTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGNoYW5nZSB0aGlzIHRvIHVzaW5nIHdpbmRvdyBzaGVsbHMgdG8gbWF0Y2ggSlNDLgotICAgICAg
ICAgICAgICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxkSUQsIGlzb2xhdGVkQ29udGV4dCk7
Ci0gICAgICAgICAgICB9CisgICAgICAgIFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkV29ybGRT
aGVsbCA9IGVuc3VyZUlzb2xhdGVkV29ybGRDb250ZXh0KHdvcmxkSUQsIGV4dGVuc2lvbkdyb3Vw
KTsKIAorICAgICAgICBpZiAod29ybGRJRCAhPSBET01XcmFwcGVyV29ybGQ6OnVuaW5pdGlhbGl6
ZWRXb3JsZElkKSB7CiAgICAgICAgICAgICBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA6
Oml0ZXJhdG9yIHNlY3VyaXR5T3JpZ2luSXRlciA9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3Jp
Z2lucy5maW5kKHdvcmxkSUQpOwogICAgICAgICAgICAgaWYgKHNlY3VyaXR5T3JpZ2luSXRlciAh
PSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZW5kKCkpCi0gICAgICAgICAgICAgICAg
aXNvbGF0ZWRDb250ZXh0LT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnNl
Y29uZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBu
ZXcgVjhJc29sYXRlZENvbnRleHQobV9mcmFtZSwgRE9NV3JhcHBlcldvcmxkOjpnZXRPckNyZWF0
ZUlzb2xhdGVkV29ybGQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApKTsKLSAgICAgICAgICAgIGlm
IChpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICBkZWxldGUgaXNvbGF0ZWRDb250ZXh0OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpc29sYXRlZFdvcmxkU2hlbGwtPnNldElzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnNlY29uZCk7CiAgICAgICAg
IH0KIAotICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkpOworICAgICAgICBp
c29sYXRlZFdvcmxkU2hlbGwtPmluaXRpYWxpemVJZk5lZWRlZCgpOworICAgICAgICBpZiAoaXNv
bGF0ZWRXb3JsZFNoZWxsLT5jb250ZXh0KCkuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2
ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlZFdvcmxkU2hlbGwtPmNvbnRleHQoKSk7CiAgICAgICAg
IHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4dCk7CiAgICAgICAgIHY4OjpM
b2NhbDx2ODo6QXJyYXk+IHJlc3VsdEFycmF5ID0gdjg6OkFycmF5OjpOZXcoc291cmNlcy5zaXpl
KCkpOwogCkBAIC0zNjgsOCArMzg5LDEyIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjCiAgICAg
ICAgICAgICByZXN1bHRBcnJheS0+U2V0KGksIGV2YWx1YXRpb25SZXN1bHQpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCF3b3JsZElEKQotICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5k
ZXN0cm95KCk7CisgICAgICAgIC8vIE1hcmsgdGVtcG9yYXJ5IHNoZWxsIGZvciB3ZWFrIGRlc3Ry
dWN0aW9uLgorICAgICAgICBpZiAod29ybGRJRCA9PSBET01XcmFwcGVyV29ybGQ6OnVuaW5pdGlh
bGl6ZWRXb3JsZElkKSB7CisgICAgICAgICAgICBpbnQgYWN0dWFsV29ybGRJZCA9IGlzb2xhdGVk
V29ybGRTaGVsbC0+d29ybGQoKS0+d29ybGRJZCgpOworICAgICAgICAgICAgbV9pc29sYXRlZFdv
cmxkcy5yZW1vdmUoYWN0dWFsV29ybGRJZCk7CisgICAgICAgICAgICBpc29sYXRlZFdvcmxkU2hl
bGwtPmRlc3Ryb3lJc29sYXRlZFNoZWxsKCk7CisgICAgICAgIH0KIAogICAgICAgICB2OFJlc3Vs
dHMgPSBldmFsdWF0ZUhhbmRsZVNjb3BlLkNsb3NlKHJlc3VsdEFycmF5KTsKICAgICB9CkBAIC0z
ODYsNyArNDExLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2UKICAgICBtX2lzb2xhdGVkV29y
bGRTZWN1cml0eU9yaWdpbnMuc2V0KHdvcmxkSUQsIHNlY3VyaXR5T3JpZ2luKTsKICAgICBJc29s
YXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxk
SUQpOwogICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpCi0gICAgICAgIGl0
ZXItPnNlY29uZC0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOworICAgICAgICBp
dGVyLT5zZWNvbmQtPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdp
bik7CiB9CiAKIFRleHRQb3NpdGlvbiBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJQb3Np
dGlvbigpIGNvbnN0CkBAIC00MDMsMTEgKzQyOCwxMSBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkKIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0
PiBTY3JpcHRDb250cm9sbGVyOjpjdXJyZW50V29ybGRDb250ZXh0KCkKIHsKLSAgICBpZiAoVjhJ
c29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRF
bnRlcmVkKCkpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+
ID4gY29udGV4dCA9IGlzb2xhdGVkQ29udGV4dC0+c2hhcmVkQ29udGV4dCgpOwotICAgICAgICBp
ZiAobV9mcmFtZSAhPSB0b0ZyYW1lSWZOb3REZXRhY2hlZChjb250ZXh0LT5nZXQoKSkpCisgICAg
aWYgKFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpn
ZXRFbnRlcmVkKCkpIHsKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRl
eHQgPSBpc29sYXRlZFNoZWxsLT5jb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0LklzRW1w
dHkoKSB8fCBtX2ZyYW1lICE9IHRvRnJhbWVJZk5vdERldGFjaGVkKGNvbnRleHQpKQogICAgICAg
ICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4oKTsKLSAgICAgICAgcmV0dXJuIHY4
OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0LT5nZXQoKSk7CisgICAgICAgIHJldHVy
biB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dCk7CiAgICAgfQogICAgIHdpbmRv
d1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpOwogICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcod2luZG93U2hlbGwoKS0+Y29udGV4dCgpKTsKQEAgLTUzMiwxMCArNTU3
LDEzIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Z2V0QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8
RE9NV3JhcHBlcldvcmxkPiA+JiB3b3JsZHMpCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5Xb3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkKQogeworICAg
IGlmICh3b3JsZCA9PSBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkgeworICAgICAgICBldmFsdWF0
ZShzb3VyY2UpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlPiBzb3VyY2VzOwogICAgIHNvdXJjZXMuYXBwZW5kKHNvdXJjZSk7Ci0gICAgLy8gRklY
TUU6IEdldCBhbiBJRCBmcm9tIHRoZSB3b3JsZCBwYXJhbS4KLSAgICBldmFsdWF0ZUluSXNvbGF0
ZWRXb3JsZCgwLCBzb3VyY2VzLCAwKTsKKyAgICBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3Js
ZC0+d29ybGRJZCgpLCBzb3VyY2VzLCB3b3JsZC0+ZXh0ZW5zaW9uR3JvdXAoKSwgMCk7CiB9CiAK
IFY4RXh0ZW5zaW9ucyYgU2NyaXB0Q29udHJvbGxlcjo6cmVnaXN0ZXJlZEV4dGVuc2lvbnMoKQpA
QCAtNjM2LDE0ICs2NjQsMTQgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0
ZWRDb250ZXh0cyhWZWN0b3I8c3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2UKIHsKICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjppdGVy
YXRvciBpdCA9IG1faXNvbGF0ZWRXb3JsZHMuYmVnaW4oKTsgaXQgIT0gbV9pc29sYXRlZFdvcmxk
cy5lbmQoKTsgKytpdCkgewotICAgICAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250
ZXh0ID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKCFpc29sYXRlZENvbnRleHQtPnNlY3VyaXR5
T3JpZ2luKCkpCisgICAgICAgIFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkV29ybGRTaGVsbCA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmICghaXNvbGF0ZWRXb3JsZFNoZWxsLT5pc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW4oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBpc29sYXRlZENvbnRleHQtPmNvbnRleHQo
KTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gaXNvbGF0ZWRX
b3JsZFNoZWxsLT5jb250ZXh0KCk7CiAgICAgICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9
IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyh2OENv
bnRleHQpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6OnBhaXI8U2NyaXB0U3RhdGUqLCBT
ZWN1cml0eU9yaWdpbio+KHNjcmlwdFN0YXRlLCBpc29sYXRlZENvbnRleHQtPnNlY3VyaXR5T3Jp
Z2luKCkpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6OnBhaXI8U2NyaXB0U3RhdGUqLCBT
ZWN1cml0eU9yaWdpbio+KHNjcmlwdFN0YXRlLCBpc29sYXRlZFdvcmxkU2hlbGwtPmlzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbigpKSk7CiAgICAgfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggOWQ5YzZkNDhlMmU3MTAx
NDNlMTBhNjlhODUyODUxMDliM2M1OWQ2Mi4uMDQwMjE1MjM4YzUxNDNmZWY4OTYxMDRlMjVkMmUz
OWM0NmI1ZmIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaApAQCAtNTcsMjAgKzU3LDggQEAgY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKIGNsYXNz
IFNjcmlwdFN0YXRlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBWOERPTVdpbmRvd1No
ZWxsOwotY2xhc3MgVjhJc29sYXRlZENvbnRleHQ7CiBjbGFzcyBXaWRnZXQ7CiAKLS8vIE5vdGU6
IGFsdGhvdWdoIHRoZSBwb2ludGVyIGlzIHJhdywgdGhlIGluc3RhbmNlIGlzIGtlcHQgYWxpdmUg
YnkgYSBzdHJvbmcKLS8vIHJlZmVyZW5jZSB0byB0aGUgdjggY29udGV4dCBpdCBjb250YWlucywg
d2hpY2ggaXMgbm90IG1hZGUgd2VhayB1bnRpbCB3ZQotLy8gY2FsbCB3b3JsZC0+ZGVzdHJveSgp
LgotLy8KLS8vIEZJWE1FOiBXZSB3YW50IHRvIGV2ZW50dWFsbHkgYmUgaG9sZGluZyB3aW5kb3cg
c2hlbGxzIGluc3RlYWQgb2YgdGhlCi0vLyBJc29sYXRlZENvbnRleHQgZGlyZWN0bHkuCi0vLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4NzUKLXR5cGVkZWYgSGFz
aE1hcDxpbnQsIFY4SXNvbGF0ZWRDb250ZXh0Kj4gSXNvbGF0ZWRXb3JsZE1hcDsKLQotdHlwZWRl
ZiBIYXNoTWFwPGludCwgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IElzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbk1hcDsKLQogdHlwZWRlZiBXVEY6OlZlY3Rvcjx2ODo6RXh0ZW5zaW9uKj4gVjhF
eHRlbnNpb25zOwogCiBjbGFzcyBTY3JpcHRDb250cm9sbGVyIHsKQEAgLTc4LDkgKzY2LDExIEBA
IHB1YmxpYzoKICAgICBTY3JpcHRDb250cm9sbGVyKEZyYW1lKik7CiAgICAgflNjcmlwdENvbnRy
b2xsZXIoKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBldmVudHVhbGx5IHRha2UgRE9N
V3JhcHBlcldvcmxkIGFyZ3VtZW50LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDg3NQogICAgIFY4RE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKCkg
Y29uc3QgeyByZXR1cm4gbV93aW5kb3dTaGVsbC5nZXQoKTsgfQorICAgIFY4RE9NV2luZG93U2hl
bGwqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCopOworICAgIC8vIEZJWE1FOiBSZXBsYWNl
IGV4aXN0aW5nV2luZG93U2hlbGwgd2l0aCBleGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwgc2Vl
IGNvbW1lbnQgaW4gVjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkLgorICAgIFNj
cmlwdENvbnRyb2xsZXIqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKikgeyBy
ZXR1cm4gdGhpczsgfQorICAgIFY4RE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hlbGxJ
bnRlcm5hbChET01XcmFwcGVyV29ybGQqKTsKIAogICAgIFNjcmlwdFZhbHVlIGV4ZWN1dGVTY3Jp
cHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwogICAgIFNjcmlwdFZhbHVlIGV4ZWN1dGVTY3Jp
cHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSA9IGZhbHNlKTsK
QEAgLTEwNSwxMiArOTUsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGNhbGxlciBtdXN0IGhvbGQg
YW4gZXhlY3V0aW9uIGNvbnRleHQuCiAgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU2Ny
aXB0U291cmNlQ29kZSYpOwogCi0gICAgLy8gRXZhbHVhdGUgSmF2YVNjcmlwdCBpbiBhIG5ldyBp
c29sYXRlZCB3b3JsZC4gVGhlIHNjcmlwdCBnZXRzIGl0cyBvd24KLSAgICAvLyBnbG9iYWwgc2Nv
cGUsIGl0cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAo
U3RyaW5nLAotICAgIC8vIEFycmF5LCBhbmQgc28tb24pLCBhbmQgaXRzIG93biB3cmFwcGVycyBm
b3IgYWxsIERPTSBub2RlcyBhbmQgRE9NCi0gICAgLy8gY29uc3RydWN0b3JzLgotICAgIHZvaWQg
ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNj
cmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzKTsK
LQogICAgIC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYW4gaXNvbGF0ZWQgd29ybGQuIFRoZSBz
Y3JpcHQgZ2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZSwKICAgICAvLyBpdHMgb3duIHByb3RvdHlw
ZXMgZm9yIGludHJpbnNpYyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJyYXksIGFuZCBz
by1vbiksCiAgICAgLy8gYW5kIGl0cyBvd24gd3JhcHBlcnMgZm9yIGFsbCBET00gbm9kZXMgYW5k
IERPTSBjb25zdHJ1Y3RvcnMuCkBAIC0xMTgsMjIgKzEwMiwxNiBAQCBwdWJsaWM6CiAgICAgLy8g
SWYgYW4gaXNvbGF0ZWQgd29ybGQgd2l0aCB0aGUgc3BlY2lmaWVkIElEIGFscmVhZHkgZXhpc3Rz
LCBpdCBpcyByZXVzZWQuCiAgICAgLy8gT3RoZXJ3aXNlLCBhIG5ldyB3b3JsZCBpcyBjcmVhdGVk
LgogICAgIC8vCi0gICAgLy8gSWYgdGhlIHdvcmxkSUQgaXMgMCwgYSBuZXcgd29ybGQgaXMgYWx3
YXlzIGNyZWF0ZWQuCisgICAgLy8gSWYgdGhlIHdvcmxkSUQgaXMgMCBvciBET01XcmFwcGVyV29y
bGQ6OnVuaW5pdGlhbGl6ZWRXb3JsZElkLCBhIG5ldyB3b3JsZCBpcyBhbHdheXMgY3JlYXRlZC4K
ICAgICAvLwogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIGV4dGVuc2lvbkdyb3VwIGhlcmUuCi0g
ICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBW
ZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCwgVmVj
dG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cyk7CisgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRX
b3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2Vz
LCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpOwogCiAg
ICAgLy8gQXNzb2NpYXRlcyBhbiBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZvciBkZXNjcmlw
dGlvbikgd2l0aCBhIHNlY3VyaXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVxdWVzdCBpbnN0
YW5jZXMgdXNlZCBpbiB0aGF0IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZAogICAgIC8vIHRvIGNv
bWUgZnJvbSB0aGF0IG9yaWdpbiwgbm90IHRoZSBmcmFtZSdzLgogICAgIHZvaWQgc2V0SXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPik7CiAKLSAgICAvLyBNYXNxdWVyYWRlICd0aGlzJyBhcyB0aGUgd2luZG93U2hlbGwuCi0g
ICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCBwcm92aWRlcyByZWFzb25hYmxlIGNv
bXBhdGliaWxpdHkKLSAgICAvLyB3aXRoIHdoYXQgSlNDIGRvZXMgYXMgd2VsbC4KLSAgICBTY3Jp
cHRDb250cm9sbGVyKiB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSB7IHJldHVybiB0aGlz
OyB9Ci0gICAgU2NyaXB0Q29udHJvbGxlciogZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVy
V29ybGQqKSB7IHJldHVybiB0aGlzOyB9Ci0KICAgICAvLyBDcmVhdGVzIGEgcHJvcGVydHkgb2Yg
dGhlIGdsb2JhbCBvYmplY3Qgb2YgYSBmcmFtZS4KICAgICB2b2lkIGJpbmRUb1dpbmRvd09iamVj
dChGcmFtZSosIGNvbnN0IFN0cmluZyYga2V5LCBOUE9iamVjdCopOwogCkBAIC0yMDgsMTkgKzE4
NiwyNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGludCBjb250ZXh0RGVidWdJZCh2ODo6SGFuZGxl
PHY4OjpDb250ZXh0Pik7CiAKIHByaXZhdGU6CisgICAgLy8gTm90ZTogYWx0aG91Z2ggdGhlIHBv
aW50ZXIgaXMgcmF3LCB0aGUgaW5zdGFuY2UgaXMga2VwdCBhbGl2ZSBieSBhIHN0cm9uZworICAg
IC8vIHJlZmVyZW5jZSB0byB0aGUgdjggY29udGV4dCBpdCBjb250YWlucywgd2hpY2ggaXMgbm90
IG1hZGUgd2VhayB1bnRpbCB3ZQorICAgIC8vIGNhbGwgd29ybGQtPmRlc3Ryb3lJc29sYXRlZFNo
ZWxsKCkuCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVjhET01XaW5kb3dTaGVsbCo+IElzb2xh
dGVkV29ybGRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiA+IElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDsKKwogICAgIHZvaWQgcmVzZXRJ
c29sYXRlZFdvcmxkcygpOwogCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgY29uc3QgU3RyaW5n
KiBtX3NvdXJjZVVSTDsKIAotICAgIC8vIEZvciB0aGUgbW9tZW50LCB3ZSBoYXZlIG9uZSBvZiB0
aGVzZS4gU29vbiB3ZSB3aWxsIGhhdmUgb25lIHBlciBET01XcmFwcGVyV29ybGQuCisgICAgVjhE
T01XaW5kb3dTaGVsbCogZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdvcmxkSWQsIGlu
dCBleHRlbnNpb25Hcm91cCk7CiAgICAgT3duUHRyPFY4RE9NV2luZG93U2hlbGw+IG1fd2luZG93
U2hlbGw7CiAKICAgICAvLyBUaGUgaXNvbGF0ZWQgd29ybGRzIHdlIGFyZSB0cmFja2luZyBmb3Ig
dGhpcyBmcmFtZS4gV2UgaG9sZCB0aGVtIGFsaXZlCiAgICAgLy8gaGVyZSBzbyB0aGF0IHRoZXkg
Y2FuIGJlIHVzZWQgYWdhaW4gYnkgZnV0dXJlIGNhbGxzIHRvCiAgICAgLy8gZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQoKS4KICAgICBJc29sYXRlZFdvcmxkTWFwIG1faXNvbGF0ZWRXb3JsZHM7Ci0K
ICAgICBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXAgbV9pc29sYXRlZFdvcmxkU2VjdXJp
dHlPcmlnaW5zOwogCiAgICAgYm9vbCBtX3BhdXNlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaAppbmRleCA4ODI1YmQ1ZWRkODVhNDgzZGU3MzU1ZmIw
ZTUzNWM5OWMzZjRlYTBiLi4yZTM5YTA2MzA1YzAzOTY3YWY0Mjg2MjU1NjBlNjkzNjgyOTY1MDdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TaGFyZWRQZXJzaXN0ZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2hhcmVkUGVyc2lzdGVudC5oCkBA
IC0zMSw0NSArMzEsMjggQEAKICNpZm5kZWYgU2hhcmVkUGVyc2lzdGVudF9oCiAjZGVmaW5lIFNo
YXJlZFBlcnNpc3RlbnRfaAogCisjaW5jbHVkZSAiU2NvcGVkUGVyc2lzdGVudC5oIgogI2luY2x1
ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICAvLyBBIHNoYXJlYWJsZSBy
ZWZlcmVuY2UgdG8gYSB2OCBwZXJzaXN0ZW50IGhhbmRsZS4gIFVzaW5nIGEgc2hhcmVkCi0gICAg
Ly8gcGVyc2lzdGVudCBhbnkgbnVtYmVyIG9mIG9iamVjdHMgY2FuIHNoYXJlIGEgcmVmZXJlbmNl
IHRvIGEgdjgKLSAgICAvLyBvYmplY3QgYW5kIHdoZW4gaXQgc2hvdWxkIG5vIGxvbmdlciBiZSBh
Y2Nlc3NpYmxlIHRoZSBvYmplY3QncwotICAgIC8vIG93bmVyIGNhbiBjbGVhciBpdC4KKyAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgY2xhc3MuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAg
ICAgY2xhc3MgU2hhcmVkUGVyc2lzdGVudCA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZFBlcnNp
c3RlbnQ8VD4gPiB7CiAgICAgcHVibGljOgotICAgICAgICB2b2lkIHNldCh2ODo6UGVyc2lzdGVu
dDxUPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlOwotICAg
ICAgICB9Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50PFQ+IGdldCgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZGlzcG9zZUhh
bmRsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV92YWx1ZS5Jc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgICAgbV92YWx1ZS5EaXNwb3NlKCk7Ci0gICAgICAgICAgICAgIG1fdmFsdWUu
Q2xlYXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWRQZXJzaXN0ZW50PFQ+ID4gY3JlYXRlKHY4OjpQZXJzaXN0ZW50PFQ+IHZhbHVl
KQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PFQ+ID4gY3JlYXRl
KHY4OjpIYW5kbGU8VD4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2hhcmVkUGVyc2lzdGVudDxUPih2YWx1ZSkpOwogICAgICAgICB9Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8VD4gPiBjcmVhdGUoKQorICAgICAg
ICBpbmxpbmUgdjg6OlBlcnNpc3RlbnQ8VD4gZ2V0KCkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZSh2ODo6UGVyc2lzdGVudDxUPigpKTsKKyAgICAgICAgICAgIHJldHVybiBt
X3ZhbHVlLmdldCgpOwogICAgICAgICB9CiAgICAgcHJpdmF0ZToKLSAgICAgICAgZXhwbGljaXQg
U2hhcmVkUGVyc2lzdGVudCh2ODo6UGVyc2lzdGVudDxUPiB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVl
KSB7IH0KLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8VD4gbV92YWx1ZTsKKyAgICAgICAgZXhwbGlj
aXQgU2hhcmVkUGVyc2lzdGVudCh2ODo6SGFuZGxlPFQ+IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUp
IHsgfQorICAgICAgICBTY29wZWRQZXJzaXN0ZW50PFQ+IG1fdmFsdWU7CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5j
cHAKaW5kZXggZjkyMTQ4NjU2MWQ4MDkzZWE4N2ZlZTlmZTQ0NDg0ZmIwODg5MWM2NS4uNWM5MDQ2
ZmRmNzc0YWZkMzQ3YTI0YmNiNmJhYTZjY2MxY2U4ZmNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmcuY3BwCkBAIC0zMTAsOSArMzEwLDkgQEAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiB0b1Y4Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBXb3JsZEMKIAogVjhQZXJDb250ZXh0RGF0YSogcGVyQ29udGV4dERhdGFGb3JDdXJyZW50V29y
bGQoRnJhbWUqIGZyYW1lKQogewotICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRl
eHQ7Ci0gICAgaWYgKFVOTElLRUxZKCEhKGlzb2xhdGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250
ZXh0OjpnZXRFbnRlcmVkKCkpKSkKLSAgICAgICAgcmV0dXJuIGlzb2xhdGVkQ29udGV4dC0+cGVy
Q29udGV4dERhdGEoKTsKKyAgICBWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFNoZWxsOworICAg
IGlmIChVTkxJS0VMWSghIShpc29sYXRlZFNoZWxsID0gVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50
ZXJlZCgpKSkpCisgICAgICAgIHJldHVybiBpc29sYXRlZFNoZWxsLT5wZXJDb250ZXh0RGF0YSgp
OwogICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnBlckNvbnRleHRE
YXRhKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V2luZG93U2hlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dT
aGVsbC5jcHAKaW5kZXggOGFiYzllMTQ3NWVhZjA0ZTMzZTIyNGJhZmQ5OTJhMGI3OTgzOTQwOS4u
M2Y1OTU1NDdjNzljNTVmNjUyOGM2NzYzZmI3MDE1ZjJjYWQzMjdiYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKQEAgLTM3LDYgKzM3LDcg
QEAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCIKICNpbmNsdWRlICJNZW1vcnlVc2FnZVN1cHBvcnQuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCkBAIC0xNzAsMTMgKzE3MSwzNCBAQCBzdGF0aWMg
dm9pZCBjaGVja0RvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIs
IERvY3VtZW50KiBkb2N1bQogICAgIEFTU0VSVCghZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkg
fHwgKFY4RG9jdW1lbnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3Jh
cHBlci0+R2V0UHJvdG90eXBlKCkpKSA9PSBkb2N1bWVudCkpOwogfQogCi1QYXNzT3duUHRyPFY4
RE9NV2luZG93U2hlbGw+IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZShGcmFtZSogZnJhbWUpCitz
dGF0aWMgdm9pZCBzZXRJc29sYXRlZFdvcmxkRmllbGQoVjhET01XaW5kb3dTaGVsbCogc2hlbGws
IHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFY4RE9NV2luZG93U2hlbGwoZnJhbWUpKTsKKyAgICB0b0lubmVyR2xvYmFsT2JqZWN0KGNv
bnRleHQpLT5TZXRQb2ludGVySW5JbnRlcm5hbEZpZWxkKFY4RE9NV2luZG93OjplbnRlcmVkSXNv
bGF0ZWRXb3JsZEluZGV4LCBzaGVsbCk7CiB9CiAKLVY4RE9NV2luZG93U2hlbGw6OlY4RE9NV2lu
ZG93U2hlbGwoRnJhbWUqIGZyYW1lKQorVjhET01XaW5kb3dTaGVsbCogVjhET01XaW5kb3dTaGVs
bDo6ZW50ZXJlZElzb2xhdGVkV29ybGRDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VjhET01XaW5kb3dTaGVsbCo+KHRvSW5uZXJHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6Okdl
dEVudGVyZWQoKSktPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZChWOERPTVdpbmRvdzo6ZW50
ZXJlZElzb2xhdGVkV29ybGRJbmRleCkpOworfQorCitzdGF0aWMgdm9pZCBzZXRJbmplY3RlZFNj
cmlwdENvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHRhcmdldENvbnRleHQs
IGludCBkZWJ1Z0lkKQoreworICAgIGNoYXIgYnVmZmVyWzMyXTsKKyAgICBpZiAoZGVidWdJZCA9
PSAtMSkKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgImluamVjdGVk
Iik7CisgICAgZWxzZQorICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAi
aW5qZWN0ZWQsJWQiLCBkZWJ1Z0lkKTsKKyAgICB0YXJnZXRDb250ZXh0LT5TZXREYXRhKHY4OjpT
dHJpbmc6Ok5ldyhidWZmZXIpKTsKK30KKworUGFzc093blB0cjxWOERPTVdpbmRvd1NoZWxsPiBW
OERPTVdpbmRvd1NoZWxsOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPERPTVdyYXBw
ZXJXb3JsZD4gd29ybGQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWOERPTVdpbmRvd1No
ZWxsKGZyYW1lLCB3b3JsZCkpOworfQorCitWOERPTVdpbmRvd1NoZWxsOjpWOERPTVdpbmRvd1No
ZWxsKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkKQogICAg
IDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fd29ybGQod29ybGQpCiB7CiB9CiAKQEAgLTE4Niwx
OCArMjA4LDQxIEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlhbGl6ZWQo
KQogICAgIHJldHVybiAhbV9jb250ZXh0LmlzRW1wdHkoKTsKIH0KIAotdm9pZCBWOERPTVdpbmRv
d1NoZWxsOjpkaXNwb3NlQ29udGV4dCgpCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OmRlc3Ryb3lJ
c29sYXRlZFNoZWxsKCkKK3sKKyAgICBkaXNwb3NlQ29udGV4dCh0cnVlKTsKK30KKworc3RhdGlj
IHZvaWQgaXNvbGF0ZWRDb250ZXh0V2Vha0NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4gb2JqZWN0LCB2b2lkKiBwYXJhbWV0ZXIpCiB7CisgICAgLy8gSGFuZGxlIHdpbGwgYmUgZGlz
cG9zZWQgaW4gZGVsZXRlLgorICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxWOERPTVdpbmRvd1NoZWxs
Kj4ocGFyYW1ldGVyKTsKK30KKwordm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4
dChib29sIHdlYWspCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHQuZ2V0KCkuSXNXZWFrKCkpOwog
ICAgIG1fcGVyQ29udGV4dERhdGEuY2xlYXIoKTsKIAotICAgIGlmICghbV9jb250ZXh0LmlzRW1w
dHkoKSkgewotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPndpbGxSZWxlYXNl
U2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0KCksIDApOworICAgIGlmIChtX2NvbnRleHQuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPndpbGxSZWxlYXNlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0KCksIG1fd29ybGQtPndv
cmxkSWQoKSk7CisKKyAgICBpZiAoIXdlYWspCiAgICAgICAgIG1fY29udGV4dC5jbGVhcigpOwor
ICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fd29ybGQtPmlzTWFpbldvcmxkKCkpOworICAg
ICAgICBkZXN0cm95R2xvYmFsKCk7CisgICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICBtX2Nv
bnRleHQuZ2V0KCkuTWFrZVdlYWsodGhpcywgaXNvbGF0ZWRDb250ZXh0V2Vha0NhbGxiYWNrKTsK
KyAgICB9CiAKLSAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCBkaXNwb3NpbmcgdGhlIGNvbnRl
eHQgaGFzIGNyZWF0ZWQgYSBsb3Qgb2YKLSAgICAgICAgLy8gZ2FyYmFnZS4gTm90aWZ5IFY4IGFi
b3V0IHRoaXMgc28gaXQnbGwgaGF2ZSBhIGNoYW5jZSBvZiBjbGVhbmluZwotICAgICAgICAvLyBp
dCB1cCB3aGVuIGlkbGUuCi0gICAgICAgIGJvb2wgaXNNYWluRnJhbWUgPSBtX2ZyYW1lLT5wYWdl
KCkgJiYgKG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSk7IAorICAgIC8v
IEl0J3MgbGlrZWx5IHRoYXQgZGlzcG9zaW5nIHRoZSBjb250ZXh0IGhhcyBjcmVhdGVkIGEgbG90
IG9mCisgICAgLy8gZ2FyYmFnZS4gTm90aWZ5IFY4IGFib3V0IHRoaXMgc28gaXQnbGwgaGF2ZSBh
IGNoYW5jZSBvZiBjbGVhbmluZworICAgIC8vIGl0IHVwIHdoZW4gaWRsZS4KKyAgICBpZiAobV93
b3JsZC0+aXNNYWluV29ybGQoKSkgeworICAgICAgICBib29sIGlzTWFpbkZyYW1lID0gbV9mcmFt
ZS0+cGFnZSgpICYmIChtX2ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpOwog
ICAgICAgICBWOEdDRm9yQ29udGV4dERpc3Bvc2U6Omluc3RhbmNlKCkubm90aWZ5Q29udGV4dERp
c3Bvc2VkKGlzTWFpbkZyYW1lKTsKICAgICB9CiB9CkBAIC0yODQsMTAgKzMyOSwxMiBAQCBib29s
IFY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVJZk5lZWRlZCgpCiAKICAgICBpbml0aWFsaXpl
VjhJZk5lZWRlZCgpOwogCi0gICAgbV9jb250ZXh0LmFkb3B0KGNyZWF0ZU5ld0NvbnRleHQobV9n
bG9iYWwuZ2V0KCksIDAsIDApKTsKKyAgICBjcmVhdGVDb250ZXh0KCk7CiAgICAgaWYgKG1fY29u
dGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGJvb2wgaXNNYWlu
V29ybGQgPSBtX3dvcmxkLT5pc01haW5Xb3JsZCgpOworCiAgICAgdjg6OkxvY2FsPHY4OjpDb250
ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dC5nZXQo
KSk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KTsKIApAQCAt
Mjk5LDQ3ICszNDYsNjMgQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppbml0aWFsaXplSWZOZWVk
ZWQoKQogICAgICAgICB9CiAgICAgfQogCisgICAgLy8gRmxhZyBjb250ZXh0IGFzIGlzb2xhdGVk
LgorICAgIGlmICghaXNNYWluV29ybGQpIHsKKyAgICAgICAgVjhET01XaW5kb3dTaGVsbCogbWFp
bldpbmRvdyA9IG1fZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpOworICAgICAgICBtYWlu
V2luZG93LT5pbml0aWFsaXplSWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKCFtYWluV2luZG93LT5j
b250ZXh0KCkuSXNFbXB0eSgpKQorICAgICAgICAgICAgc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0
RGVidWdJZChtX2NvbnRleHQuZ2V0KCksIG1fZnJhbWUtPnNjcmlwdCgpLT5jb250ZXh0RGVidWdJ
ZChtYWluV2luZG93LT5jb250ZXh0KCkpKTsKKyAgICAgICAgc2V0SXNvbGF0ZWRXb3JsZEZpZWxk
KHRoaXMsIGNvbnRleHQpOworICAgIH0KKwogICAgIG1fcGVyQ29udGV4dERhdGEgPSBWOFBlckNv
bnRleHREYXRhOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICBpZiAoIW1fcGVyQ29udGV4
dERhdGEtPmluaXQoKSkgewogICAgICAgICBkaXNwb3NlQ29udGV4dCgpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFpbnN0YWxsRE9NV2luZG93KGNvbnRleHQsIG1f
ZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpKSkgeworICAgIGlmICghaW5zdGFsbERPTVdp
bmRvdygpKSB7CiAgICAgICAgIGRpc3Bvc2VDb250ZXh0KCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICB1cGRhdGVEb2N1bWVudCgpOwotCi0gICAgc2V0U2VjdXJpdHlUb2tl
bigpOwotCi0gICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIGNvbnRleHQtPkFs
bG93Q29kZUdlbmVyYXRpb25Gcm9tU3RyaW5ncyhtX2ZyYW1lLT5kb2N1bWVudCgpLT5jb250ZW50
U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dFdmFsKDAsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6U3Vw
cHJlc3NSZXBvcnQpKTsKLQotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ3Jl
YXRlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0KCksIDAsIDApOworICAgIGlmIChpc01haW5X
b3JsZCkgeworICAgICAgICB1cGRhdGVEb2N1bWVudCgpOworICAgICAgICBzZXRTZWN1cml0eVRv
a2VuKCk7CisgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgY29u
dGV4dC0+QWxsb3dDb2RlR2VuZXJhdGlvbkZyb21TdHJpbmdzKG1fZnJhbWUtPmRvY3VtZW50KCkt
PmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0V2YWwoMCwgQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpTdXBwcmVzc1JlcG9ydCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFVzaW5nIHRo
ZSBkZWZhdWx0IHNlY3VyaXR5IHRva2VuIG1lYW5zIHRoYXQgdGhlIGNhbkFjY2VzcyBpcyBhbHdh
eXMKKyAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBpcyBzbG93LgorICAgICAgICAvLyBGSVhNRTog
VXNlIHRva2VucyB3aGVyZSBwb3NzaWJsZS4gVGhpcyB3aWxsIG1lYW4ga2VlcGluZyB0cmFjayBv
ZiBhbGwKKyAgICAgICAgLy8gICAgICAgIGNyZWF0ZWQgY29udGV4dHMgc28gdGhhdCB0aGV5IGNh
biBhbGwgYmUgdXBkYXRlZCB3aGVuIHRoZQorICAgICAgICAvLyAgICAgICAgZG9jdW1lbnQgZG9t
YWluCisgICAgICAgIC8vICAgICAgICBjaGFuZ2VzLgorICAgICAgICBtX2NvbnRleHQtPlVzZURl
ZmF1bHRTZWN1cml0eVRva2VuKCk7CisgICAgfQorICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+ZGlkQ3JlYXRlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0KCksIG1fd29ybGQtPmV4
dGVuc2lvbkdyb3VwKCksIG1fd29ybGQtPndvcmxkSWQoKSk7CiAKLSAgICAvLyBGSVhNRTogVGhp
cyBpcyB3cm9uZy4gV2Ugc2hvdWxkIGFjdHVhbGx5IGRvIHRoaXMgZm9yIHRoZSBwcm9wZXIgd29y
bGQgb25jZQotICAgIC8vIHdlIGRvIGlzb2xhdGVkIHdvcmxkcyB0aGUgV2ViQ29yZSB3YXkuCi0g
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxk
KDApOworICAgIGlmIChpc01haW5Xb3JsZCkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYWxs
IGlzIHByb2JhYmx5IGluIHRoZSB3cm9uZyBzcG90LCBidXQgY2F1c2VzIGEgdGVzdCB0aW1lb3V0
IGZvciBodHRwL3Rlc3RzL21pc2Mvd2luZG93LW9wZW4tdGhlbi13cml0ZS5odG1sIHdoZW4gcmVt
b3ZlZC4KKyAgICAgICAgLy8gQWRkaXRpb25hbGx5LCBTY3JpcHRDb250cm9sbGVyOjpleGlzdGlu
Z1dpbmRvd1NoZWxsIGNhbm5vdCBiZSBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgdW50aWwgdGhpcyBj
YWxsIGlzIGdvbmUuCisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kaXNwYXRjaERpZENsZWFy
V2luZG93T2JqZWN0SW5Xb3JsZCgwKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
djg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZU5ld0Nv
bnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwsIGludCBleHRlbnNpb25Hcm91cCwg
aW50IHdvcmxkSWQpCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZUNvbnRleHQoKQogewot
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiByZXN1bHQ7Ci0KICAgICAvLyBUaGUgYWN0
aXZlRG9jdW1lbnRMb2FkZXIgcG9pbnRlciBjb3VsZCBiZSAwIGR1cmluZyBmcmFtZSBzaHV0ZG93
bi4KICAgICAvLyBGSVhNRTogQ2FuIHdlIHJlbW92ZSB0aGlzIGNoZWNrPwogICAgIGlmICghbV9m
cmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBlbnZpcm9ubWVu
dCB1c2luZyBhbiBlbXB0eSB0ZW1wbGF0ZSBmb3IgdGhlIHNoYWRvdwogICAgIC8vIG9iamVjdC4g
UmV1c2UgdGhlIGdsb2JhbCBvYmplY3QgaWYgb25lIGhhcyBiZWVuIGNyZWF0ZWQgZWFybGllci4K
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0VGVtcGxhdGU+IGdsb2JhbFRlbXBsYXRlID0g
VjhET01XaW5kb3c6OkdldFNoYWRvd09iamVjdFRlbXBsYXRlKCk7CiAgICAgaWYgKGdsb2JhbFRl
bXBsYXRlLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gVXNlZCB0byBhdm9pZCBzbGVlcCBjYWxscyBpbiB1bmxvYWQgaGFuZGxlcnMu
CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6cmVnaXN0ZXJFeHRlbnNpb25JZk5lZWRlZChEYXRlRXh0
ZW5zaW9uOjpnZXQoKSk7CkBAIC0zNTQsNiArNDE3LDggQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkNv
bnRleHQ+IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6
T2IKICAgICBjb25zdCBWOEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMgPSBTY3JpcHRDb250cm9sbGVy
OjpyZWdpc3RlcmVkRXh0ZW5zaW9ucygpOwogICAgIE93bkFycmF5UHRyPGNvbnN0IGNoYXIqPiBl
eHRlbnNpb25OYW1lcyA9IGFkb3B0QXJyYXlQdHIobmV3IGNvbnN0IGNoYXIqW2V4dGVuc2lvbnMu
c2l6ZSgpXSk7CiAgICAgaW50IGluZGV4ID0gMDsKKyAgICBpbnQgZXh0ZW5zaW9uR3JvdXAgPSBt
X3dvcmxkLT5leHRlbnNpb25Hcm91cCgpOworICAgIGludCB3b3JsZElkID0gbV93b3JsZC0+d29y
bGRJZCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7ICsr
aSkgewogICAgICAgICAvLyBFbnN1cmUgb3VyIGRhdGUgZXh0ZW5zaW9uIGlzIGFsd2F5cyBhbGxv
d2VkLgogICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXSAhPSBEYXRlRXh0ZW5zaW9uOjpnZXQoKQpA
QCAtMzYzLDEzICs0MjgsMTMgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4RE9NV2lu
ZG93U2hlbGw6OmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2IKICAgICAgICAgZXh0
ZW5zaW9uTmFtZXNbaW5kZXgrK10gPSBleHRlbnNpb25zW2ldLT5uYW1lKCk7CiAgICAgfQogICAg
IHY4OjpFeHRlbnNpb25Db25maWd1cmF0aW9uIGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24oaW5kZXgs
IGV4dGVuc2lvbk5hbWVzLmdldCgpKTsKLSAgICByZXN1bHQgPSB2ODo6Q29udGV4dDo6TmV3KCZl
eHRlbnNpb25Db25maWd1cmF0aW9uLCBnbG9iYWxUZW1wbGF0ZSwgZ2xvYmFsKTsKIAotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgbV9jb250ZXh0LmFkb3B0KHY4OjpDb250ZXh0OjpOZXcoJmV4dGVu
c2lvbkNvbmZpZ3VyYXRpb24sIGdsb2JhbFRlbXBsYXRlLCBtX2dsb2JhbC5nZXQoKSkpOwogfQog
Ci1ib29sIFY4RE9NV2luZG93U2hlbGw6Omluc3RhbGxET01XaW5kb3codjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCwgRE9NV2luZG93KiB3aW5kb3cpCitib29sIFY4RE9NV2luZG93U2hl
bGw6Omluc3RhbGxET01XaW5kb3coKQogeworICAgIERPTVdpbmRvdyogd2luZG93ID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHdp
bmRvd1dyYXBwZXIgPSBWOE9iamVjdENvbnN0cnVjdG9yOjpuZXdJbnN0YW5jZShWOERPTVdyYXBw
ZXI6OmNvbnN0cnVjdG9yRm9yVHlwZSgmVjhET01XaW5kb3c6OmluZm8sIHdpbmRvdykpOwogICAg
IGlmICh3aW5kb3dXcmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MzkzLDcgKzQ1OCw3IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbERPTVdpbmRvdyh2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBET01XaW5kCiAgICAgLy8gICAgICAgb3V0
ZXIsIGlubmVyLCBhbmQgRE9NV2luZG93IGluc3RhbmNlIGFsbCBhcHBlYXIgdG8gYmUgdGhlIHNh
bWUKICAgICAvLyAgICAgICBKYXZhU2NyaXB0IG9iamVjdC4KICAgICAvLwotICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gaW5uZXJHbG9iYWxPYmplY3QgPSB0b0lubmVyR2xvYmFsT2JqZWN0KGNv
bnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaW5uZXJHbG9iYWxPYmplY3QgPSB0
b0lubmVyR2xvYmFsT2JqZWN0KG1fY29udGV4dC5nZXQoKSk7CiAgICAgVjhET01XcmFwcGVyOjpz
ZXRET01XcmFwcGVyKGlubmVyR2xvYmFsT2JqZWN0LCAmVjhET01XaW5kb3c6OmluZm8sIHdpbmRv
dyk7CiAgICAgaW5uZXJHbG9iYWxPYmplY3QtPlNldFByb3RvdHlwZSh3aW5kb3dXcmFwcGVyKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQwMSwxMSArNDY2LDE1IEBAIGJvb2wgVjhET01XaW5kb3dT
aGVsbDo6aW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBE
T01XaW5kCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcikKIHsKKyAgICBBU1NFUlQobV93b3JsZC0+aXNN
YWluV29ybGQoKSk7CiAgICAgbV9kb2N1bWVudC5zZXQod3JhcHBlcik7CiB9CiAKIHZvaWQgVjhE
T01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRQcm9wZXJ0eSgpCiB7CisgICAgaWYgKCFtX3dv
cmxkLT5pc01haW5Xb3JsZCgpKQorICAgICAgICByZXR1cm47CisKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB1c2UgYSBuZXcgTG9jYWwg
aGFuZGxlIGhlcmU/CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2NvbnRl
eHQuZ2V0KCkpOwpAQCAtNDM0LDExICs1MDMsMTUgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1
cGRhdGVEb2N1bWVudFByb3BlcnR5KCkKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6Y2xlYXJEb2N1
bWVudFByb3BlcnR5KCkKIHsKICAgICBBU1NFUlQoIW1fY29udGV4dC5pc0VtcHR5KCkpOworICAg
IGlmICghbV93b3JsZC0+aXNNYWluV29ybGQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29u
dGV4dC0+R2xvYmFsKCktPkZvcmNlRGVsZXRlKHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1lbnQiKSk7
CiB9CiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6c2V0U2VjdXJpdHlUb2tlbigpCiB7CisgICAg
QVNTRVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOworCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIAogICAgIC8vIEFzayB0aGUgZG9jdW1lbnQncyBTZWN1
cml0eU9yaWdpbiB0byBnZW5lcmF0ZSBhIHNlY3VyaXR5IHRva2VuLgpAQCAtNDY5LDYgKzU0Miw3
IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6c2V0U2VjdXJpdHlUb2tlbigpCiAKIHZvaWQgVjhE
T01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnQoKQogeworICAgIEFTU0VSVChtX3dvcmxkLT5p
c01haW5Xb3JsZCgpKTsKICAgICBpZiAobV9nbG9iYWwuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKCFpbml0aWFsaXplSWZOZWVkZWQoKSkKQEAgLTQ5NCw2ICs1NjgsOCBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
cHJvcGVydHksIGNvbnN0IHY4OjpBYwogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6Om5hbWVkSXRl
bUFkZGVkKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkK
IHsKKyAgICBBU1NFUlQobV93b3JsZC0+aXNNYWluV29ybGQoKSk7CisKICAgICBpZiAoIWluaXRp
YWxpemVJZk5lZWRlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTUwNyw2ICs1ODMsOCBAQCB2
b2lkIFY4RE9NV2luZG93U2hlbGw6Om5hbWVkSXRlbUFkZGVkKEhUTUxEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEF0b21pY1N0cmluZwogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6Om5hbWVkSXRl
bVJlbW92ZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KQogeworICAgIEFTU0VSVChtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKKwogICAgIGlmIChkb2N1
bWVudC0+aGFzTmFtZWRJdGVtKG5hbWUuaW1wbCgpKSB8fCBkb2N1bWVudC0+aGFzRXh0cmFOYW1l
ZEl0ZW0obmFtZS5pbXBsKCkpKQogICAgICAgICByZXR1cm47CiAKQEAgLTUyMywxMCArNjAxLDIz
IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVtb3ZlZChIVE1MRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBk
YXRlU2VjdXJpdHlPcmlnaW4oKQogeworICAgIEFTU0VSVChtX3dvcmxkLT5pc01haW5Xb3JsZCgp
KTsKICAgICBpZiAobV9jb250ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICBzZXRTZWN1cml0eVRva2VuKCk7CiB9CiAK
K3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQoreworICAgIEFTU0VSVCgh
bV93b3JsZC0+aXNNYWluV29ybGQoKSk7CisgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIGhl
cmU/CisgICAgaWYgKCFtX2lzb2xhdGVkV29ybGRTaGVsbFNlY3VyaXR5T3JpZ2luICYmICFjb250
ZXh0KCkuSXNFbXB0eSgpICYmIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRz
KCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgICAgICBTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2ODo6TG9jYWw8
djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dCgpKSk7CisgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ3JlYXRlSXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUsIHNjcmlwdFN0YXRlLCBz
ZWN1cml0eU9yaWdpbi5nZXQoKSk7CisgICAgfQorICAgIG1faXNvbGF0ZWRXb3JsZFNoZWxsU2Vj
dXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbjsKK30KKwogfSAvLyBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgKaW5kZXggYzYxNTI1NzM4
ZDY4M2Q5YjdhY2FkNjY1NmEwNjFkN2FlNmYyM2ZjYy4uMDFkMjk4MTdmYzhkMzIxY2IxNGExOGUw
ODYzOGU0MzIyYWQ2OWRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XaW5kb3dTaGVsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V2luZG93U2hlbGwuaApAQCAtMzEsNyArMzEsOSBAQAogI2lmbmRlZiBWOERPTVdpbmRvd1NoZWxs
X2gKICNkZWZpbmUgVjhET01XaW5kb3dTaGVsbF9oCiAKKyNpbmNsdWRlICJET01XcmFwcGVyV29y
bGQuaCIKICNpbmNsdWRlICJTY29wZWRQZXJzaXN0ZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlICJWOFBlckNvbnRleHREYXRhLmgiCiAjaW5jbHVkZSAiV3JhcHBl
clR5cGVJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTUxLDcgKzUzLDcgQEAg
Y2xhc3MgSFRNTERvY3VtZW50OwogLy8gcGVyc2lzdCBiZXR3ZWVuIG5hdmlnYXRpb25zLgogY2xh
c3MgVjhET01XaW5kb3dTaGVsbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VjhE
T01XaW5kb3dTaGVsbD4gY3JlYXRlKEZyYW1lKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8VjhE
T01XaW5kb3dTaGVsbD4gY3JlYXRlKEZyYW1lKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+
KTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBjb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKQEAgLTY4LDcgKzcwLDYgQEAgcHVibGljOgogICAg
IGJvb2wgaXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpD
b250ZXh0PiBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBp
bnQgZXh0ZW5zaW9uR3JvdXAsIGludCB3b3JsZElkKTsKLSAgICBzdGF0aWMgYm9vbCBpbnN0YWxs
RE9NV2luZG93KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIERPTVdpbmRvdyopOwog
CiAgICAgYm9vbCBpbml0aWFsaXplSWZOZWVkZWQoKTsKICAgICB2b2lkIHVwZGF0ZURvY3VtZW50
V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIpOwpAQCAtODAsMTAgKzgxLDM4
IEBAIHB1YmxpYzoKIAogICAgIFY4UGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRhKCkgeyBy
ZXR1cm4gbV9wZXJDb250ZXh0RGF0YS5nZXQoKTsgfQogCisgICAgRE9NV3JhcHBlcldvcmxkKiB3
b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0SXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKKyAgICBTZWN1
cml0eU9yaWdpbiogaXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghbV93b3JsZC0+aXNNYWluV29ybGQoKSk7CisgICAgICAgIHJldHVybiBt
X2lzb2xhdGVkV29ybGRTaGVsbFNlY3VyaXR5T3JpZ2luLmdldCgpOworICAgIH07CisKKyAgICAv
LyBSZXR1cm5zIHRoZSBpc29sYXRlZCB3b3JsZCBhc3NvY2lhdGVkIHdpdGgKKyAgICAvLyB2ODo6
Q29udGV4dDo6R2V0RW50ZXJlZCgpLiBCZWNhdXNlIHdvcmxkcyBhcmUgaXNvbGF0ZWQsIHRoZSBl
bnRpcmUKKyAgICAvLyBKYXZhU2NyaXB0IGNhbGwgc3RhY2sgc2hvdWxkIGJlIGZyb20gdGhlIHNh
bWUgaXNvbGF0ZWQgd29ybGQuCisgICAgLy8gUmV0dXJucyAwIGlmIHRoZSBlbnRlcmVkIGNvbnRl
eHQgaXMgZnJvbSB0aGUgbWFpbiB3b3JsZC4KKyAgICAvLworICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBlZGdlIGNhc2VzIHdpdGggRE9NIG11dGF0aW9uIGV2ZW50cyB0aGF0IG1pZ2h0CisgICAgLy8g
dmlvbGF0ZSB0aGlzIGludmFyaWFudC4KKyAgICAvLworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHBv
b3JseSBuYW1lZCBhZnRlciB0aGUgZGVsZXRpb24gb2YgaXNvbGF0ZWQgY29udGV4dHMuCisgICAg
c3RhdGljIFY4RE9NV2luZG93U2hlbGwqIGdldEVudGVyZWQoKQorICAgIHsKKyAgICAgICAgaWYg
KCFET01XcmFwcGVyV29ybGQ6Omlzb2xhdGVkV29ybGRzRXhpc3QoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBpZiAoIXY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZW50ZXJlZElzb2xhdGVkV29ybGRDb250ZXh0
KCk7CisgICAgfQorCisgICAgdm9pZCBkZXN0cm95SXNvbGF0ZWRTaGVsbCgpOwogcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBWOERPTVdpbmRvd1NoZWxsKEZyYW1lKik7CisgICAgVjhET01XaW5kb3dT
aGVsbChGcmFtZSosIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPik7CiAKLSAgICB2b2lkIGRp
c3Bvc2VDb250ZXh0KCk7CisgICAgdm9pZCBkaXNwb3NlQ29udGV4dChib29sIHdlYWsgPSBmYWxz
ZSk7CiAKICAgICB2b2lkIHNldFNlY3VyaXR5VG9rZW4oKTsKIApAQCAtOTQsMTMgKzEyMywyMiBA
QCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRQcm9wZXJ0eSgpOwogICAgIHZvaWQg
Y2xlYXJEb2N1bWVudFByb3BlcnR5KCk7CiAKKyAgICB2b2lkIGNyZWF0ZUNvbnRleHQoKTsKKyAg
ICBib29sIGluc3RhbGxET01XaW5kb3coKTsKKworICAgIHN0YXRpYyBWOERPTVdpbmRvd1NoZWxs
KiBlbnRlcmVkSXNvbGF0ZWRXb3JsZENvbnRleHQoKTsKKwogICAgIEZyYW1lKiBtX2ZyYW1lOwor
ICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1fd29ybGQ7CiAKICAgICBPd25QdHI8VjhQZXJD
b250ZXh0RGF0YT4gbV9wZXJDb250ZXh0RGF0YTsKIAogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6
OkNvbnRleHQ+IG1fY29udGV4dDsKICAgICBTY29wZWRQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1f
Z2xvYmFsOwogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9kb2N1bWVudDsKKwor
ICAgIC8vIEZJWE1FOiBFaXRoZXIgcmVtb3ZlIHRoaXMgb3IgdGhlIG1hcCBpbiBTY3JpcHRDb250
cm9sbGVyLgorICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9pc29sYXRlZFdvcmxkU2hlbGxT
ZWN1cml0eU9yaWdpbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggMzk5ZjIxMDgxYmE3MTY5ZTU4NGNi
MWE3MjE2MTNlMGRmYzc4M2FjZC4uZTI0NDc5YTFjMzFmNzUzMjdkOTg2YjI4NjI5ZDI1OWQ5NDgy
NmNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTM3
LDcgKzM3LDcgQEAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21Y
UGF0aE5TUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJWOERPTU1hcC5oIgotI2luY2x1ZGUgIlY4SXNv
bGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUg
IlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCiAjaW5jbHVkZSA8
djguaD4KQEAgLTEyMyw3ICsxMjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAqd3JhcHBlcjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
VjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJl
ZCgpOworICAgICAgICAgICAgVjhET01XaW5kb3dTaGVsbCogY29udGV4dCA9IFY4RE9NV2luZG93
U2hlbGw6OmdldEVudGVyZWQoKTsKICAgICAgICAgICAgIGlmIChMSUtFTFkoIWNvbnRleHQpKSB7
CiAgICAgICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4qIHdyYXBwZXIgPSBu
b2RlLT53cmFwcGVyKCk7CiAgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5OGY4ZWM5MTg5MzY1NDczYzU3OTBjNDE3Y2NmZDk3Njk4ODJk
NjhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVjhJc29s
YXRlZENvbnRleHQuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCi0jaW5jbHVk
ZSAiVjhQZXJDb250ZXh0RGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1WOElzb2xhdGVkQ29udGV4dCogVjhJc29sYXRlZENvbnRl
eHQ6Omlzb2xhdGVkQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VjhJ
c29sYXRlZENvbnRleHQqPihnZXRHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQo
KSktPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZChWOERPTVdpbmRvdzo6ZW50ZXJlZElzb2xh
dGVkV29ybGRJbmRleCkpOwotfQotCi12b2lkIFY4SXNvbGF0ZWRDb250ZXh0Ojpjb250ZXh0V2Vh
a1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lk
KiBpc29sYXRlZENvbnRleHQpCi17Ci0gICAgLy8gT3VyIGNvbnRleHQgaXMgZ29pbmcgYXdheS4g
IFRpbWUgdG8gY2xlYW4gdXAgdGhlIHdvcmxkLgotICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBjb250
ZXh0ID0gc3RhdGljX2Nhc3Q8VjhJc29sYXRlZENvbnRleHQqPihpc29sYXRlZENvbnRleHQpOwot
ICAgIGRlbGV0ZSBjb250ZXh0OwotfQotCi1zdGF0aWMgdm9pZCBzZXRJbmplY3RlZFNjcmlwdENv
bnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHRhcmdldENvbnRleHQsIGludCBk
ZWJ1Z0lkKQotewotICAgIGNoYXIgYnVmZmVyWzMyXTsKLSAgICBpZiAoZGVidWdJZCA9PSAtMSkK
LSAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgImluamVjdGVkIik7Ci0g
ICAgZWxzZQotICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiaW5qZWN0
ZWQsJWQiLCBkZWJ1Z0lkKTsKLSAgICB0YXJnZXRDb250ZXh0LT5TZXREYXRhKHY4OjpTdHJpbmc6
Ok5ldyhidWZmZXIpKTsKLX0KLQotVjhJc29sYXRlZENvbnRleHQ6OlY4SXNvbGF0ZWRDb250ZXh0
KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkKQotICAgIDog
bV93b3JsZCh3b3JsZCksCi0gICAgICBtX2ZyYW1lKGZyYW1lKQotewotICAgIHY4OjpIYW5kbGVT
Y29wZSBzY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBtYWluV29ybGRDb250ZXh0
ID0gZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7Ci0gICAgaWYgKG1h
aW5Xb3JsZENvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGNyZWF0aW5nIGEgbmV3IFY4RE9NV2luZG93U2hlbGwgaGVyZSBpbnN0
ZWFkIG9mIHJpcGluZyBvdXQgdGhlIGNvbnRleHQuCi0gICAgbV9jb250ZXh0ID0gU2hhcmVkUGVy
c2lzdGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZShmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxs
KCktPmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBtX3dvcmxkLT5l
eHRlbnNpb25Hcm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpKTsKLSAgICBpZiAobV9jb250ZXh0
LT5nZXQoKS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJ1biBjb2RlIGlu
IHRoZSBuZXcgY29udGV4dC4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1f
Y29udGV4dC0+Z2V0KCkpOwotCi0gICAgc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZCht
X2NvbnRleHQtPmdldCgpLCBTY3JpcHRDb250cm9sbGVyOjpjb250ZXh0RGVidWdJZChtYWluV29y
bGRDb250ZXh0KSk7Ci0KLSAgICBnZXRHbG9iYWxPYmplY3QobV9jb250ZXh0LT5nZXQoKSktPlNl
dFBvaW50ZXJJbkludGVybmFsRmllbGQoVjhET01XaW5kb3c6OmVudGVyZWRJc29sYXRlZFdvcmxk
SW5kZXgsIHRoaXMpOwotCi0gICAgbV9wZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4dERhdGE6
OmNyZWF0ZShtX2NvbnRleHQtPmdldCgpKTsKLSAgICBtX3BlckNvbnRleHREYXRhLT5pbml0KCk7
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGdvIGF3YXkgb25jZSB3ZSBoYXZlIGEgd2luZG93
U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KLSAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRv
d1NoZWxsKCktPmluc3RhbGxET01XaW5kb3cobV9jb250ZXh0LT5nZXQoKSwgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+ZG9tV2luZG93KCkpOwotCi0gICAgLy8gVXNpbmcgdGhlIGRlZmF1bHQgc2VjdXJp
dHkgdG9rZW4gbWVhbnMgdGhhdCB0aGUgY2FuQWNjZXNzIGlzIGFsd2F5cwotICAgIC8vIGNhbGxl
ZCwgd2hpY2ggaXMgc2xvdy4KLSAgICAvLyBGSVhNRTogVXNlIHRva2VucyB3aGVyZSBwb3NzaWJs
ZS4gVGhpcyB3aWxsIG1lYW4ga2VlcGluZyB0cmFjayBvZiBhbGwKLSAgICAvLyAgICAgICAgY3Jl
YXRlZCBjb250ZXh0cyBzbyB0aGF0IHRoZXkgY2FuIGFsbCBiZSB1cGRhdGVkIHdoZW4gdGhlCi0g
ICAgLy8gICAgICAgIGRvY3VtZW50IGRvbWFpbgotICAgIC8vICAgICAgICBjaGFuZ2VzLgotICAg
IG1fY29udGV4dC0+Z2V0KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7Ci0KLSAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENyZWF0ZVNjcmlwdENvbnRleHQoY29udGV4dCgp
LCBtX3dvcmxkLT5leHRlbnNpb25Hcm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwotfQotCi12
b2lkIFY4SXNvbGF0ZWRDb250ZXh0OjpkZXN0cm95KCkKLXsKLSAgICBtX3BlckNvbnRleHREYXRh
LmNsZWFyKCk7Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT53aWxsUmVsZWFzZVNj
cmlwdENvbnRleHQoY29udGV4dCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwotICAgIG1fY29udGV4
dC0+Z2V0KCkuTWFrZVdlYWsodGhpcywgJmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2spOwot
ICAgIG1fZnJhbWUgPSAwOwotfQotCi1WOElzb2xhdGVkQ29udGV4dDo6flY4SXNvbGF0ZWRDb250
ZXh0KCkKLXsKLSAgICBtX2NvbnRleHQtPmRpc3Bvc2VIYW5kbGUoKTsKLX0KLQotdm9pZCBWOElz
b2xhdGVkQ29udGV4dDo6c2V0U2VjdXJpdHlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4gc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgaWYgKCFtX3NlY3VyaXR5T3JpZ2luICYmIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkgJiYgIWNvbnRleHQoKS5Jc0VtcHR5
KCkpIHsKLSAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgICAgICBTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCh2ODo6TG9jYWw8
djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dCgpKSk7Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ3JlYXRlSXNvbGF0ZWRDb250ZXh0KG1fZnJhbWUsIHNjcmlwdFN0YXRlLCBz
ZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0gICAgfQotICAgIG1fc2VjdXJpdHlPcmlnaW4gPSBzZWN1
cml0eU9yaWdpbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDlkMWMyODA3ZDY0NGRjMWZkNWRmNDc5NTMzOTUyNGZmYWZjNjFhYTQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBWOElzb2xhdGVkQ29udGV4dF9oCi0jZGVmaW5lIFY4SXNvbGF0ZWRDb250
ZXh0X2gKLQotI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIlNjcmlwdFNv
dXJjZUNvZGUuaCIgLy8gZm9yIFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGUKLSNpbmNsdWRlICJT
aGFyZWRQZXJzaXN0ZW50LmgiCi0jaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDx2
OC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYW1lOwotY2xhc3MgU2VjdXJp
dHlPcmlnaW47Ci1jbGFzcyBWOFBlckNvbnRleHREYXRhOwotCi0vLyBWOElzb2xhdGVkQ29udGV4
dAotLy8KLS8vIFY4SXNvbGF0ZWRDb250ZXh0IHJlcHJlc2VudHMgYSBpc29sYXRlZCBleGVjdXRp
b24gZW52aXJvbm1lbnQgZm9yCi0vLyBKYXZhU2NyaXB0LiAgRWFjaCBpc29sYXRlZCB3b3JsZCBl
eGVjdXRlcyBpbiBwYXJhbGxlbCB3aXRoIHRoZSBtYWluCi0vLyBKYXZhU2NyaXB0IHdvcmxkLiAg
QW4gaXNvbGF0ZWQgd29ybGQgaGFzIGFjY2VzcyB0byB0aGUgc2FtZSBET00gZGF0YQotLy8gc3Ry
dWN0dXJlcyBhcyB0aGUgbWFpbiB3b3JsZCBidXQgbm9uZSBvZiB0aGUgSmF2YVNjcmlwdCBwb2lu
dGVycy4KLS8vCi0vLyBJdCBpcyBhbiBlcnJvciB0byBldmVyIHNoYXJlIGEgSmF2YVNjcmlwdCBw
b2ludGVyIGJldHdlZW4gdHdvIGlzb2xhdGVkCi0vLyB3b3JsZHMgb3IgYmV0d2VlbiBhbiBpc29s
YXRlZCB3b3JsZCBhbmQgdGhlIG1haW4gd29ybGQuICBCZWNhdXNlCi0vLyBpc29sYXRlZCB3b3Js
ZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVkIHRoZWlyIG93biBET00gd3JhcHBl
cnMKLS8vIHRvIGF2b2lkIGhhdmluZyBwb2ludGVycyB0byB0aGUgbWFpbiB3b3JsZCdzIERPTSB3
cmFwcGVycyAod2hpY2ggYXJlCi0vLyBKYXZhU2NyaXB0IG9iamVjdHMpLgotY2xhc3MgVjhJc29s
YXRlZENvbnRleHQgewotcHVibGljOgotICAgIC8vIENyZWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQu
IFRvIGRlc3Ryb3kgaXQsIGNhbGwgZGVzdHJveSgpLgotICAgIC8vIFRoaXMgd2lsbCBkZWxldGUg
dGhlIGlzb2xhdGVkIHdvcmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgotICAg
IFY4SXNvbGF0ZWRDb250ZXh0KEZyYW1lKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+KTsK
LSAgICB+VjhJc29sYXRlZENvbnRleHQoKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byBkZXN0cm95
IHRoZSBpc29sYXRlZCB3b3JsZC4gSXQgd2lsbCBiZSBkZWxldGVkIHNvbWV0aW1lCi0gICAgLy8g
YWZ0ZXIgdGhpcyBjYWxsLCBvbmNlIGFsbCBzY3JpcHQgcmVmZXJlbmNlcyB0byB0aGUgd29ybGQn
cyBjb250ZXh0Ci0gICAgLy8gaGF2ZSBiZWVuIGRyb3BwZWQuCi0gICAgdm9pZCBkZXN0cm95KCk7
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpc29sYXRlZCB3b3JsZCBhc3NvY2lhdGVkIHdpdGgKLSAg
ICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpLiAgQmVjYXVzZSB3b3JsZHMgYXJlIGlzb2xh
dGVkLCB0aGUgZW50aXJlCi0gICAgLy8gSmF2YVNjcmlwdCBjYWxsIHN0YWNrIHNob3VsZCBiZSBm
cm9tIHRoZSBzYW1lIGlzb2xhdGVkIHdvcmxkLgotICAgIC8vIFJldHVybnMgMCBpZiB0aGUgZW50
ZXJlZCBjb250ZXh0IGlzIGZyb20gdGhlIG1haW4gd29ybGQuCi0gICAgLy8KLSAgICAvLyBGSVhN
RTogQ29uc2lkZXIgZWRnZSBjYXNlcyB3aXRoIERPTSBtdXRhdGlvbiBldmVudHMgdGhhdCBtaWdo
dAotICAgIC8vIHZpb2xhdGUgdGhpcyBpbnZhcmlhbnQuCi0gICAgLy8KLSAgICBzdGF0aWMgVjhJ
c29sYXRlZENvbnRleHQqIGdldEVudGVyZWQoKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBh
IHRlbXBvcmFyeSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIEVzc2VudGlhbGx5LAotICAgICAg
ICAvLyBHZXRIaWRkZW5WYWx1ZSBpcyB0b28gc2xvdyBmb3IgdGhpcyBjb2RlIHBhdGguIFdlIG5l
ZWQgdG8gZ2V0IHRoZQotICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJlYWwgcHJvcGVydHkg
dG8gdjg6OkNvbnRleHQgZm9yIGlzb2xhdGVkIHdvcmxkcy4KLSAgICAgICAgLy8gVW50aWwgdGhl
biwgd2Ugb3B0aW1pemUgdGhlIGNvbW1vbiBjYXNlIG9mIG5vdCBoYXZpbmcgYW55IGlzb2xhdGVk
Ci0gICAgICAgIC8vIHdvcmxkcyBhdCBhbGwuCi0gICAgICAgIGlmICghRE9NV3JhcHBlcldvcmxk
Ojppc29sYXRlZFdvcmxkc0V4aXN0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
aWYgKCF2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgcmV0dXJuIGlzb2xhdGVkQ29udGV4dCgpOwotICAgIH0KLQotICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9Ci0gICAg
UGFzc1JlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IHNoYXJlZENvbnRleHQo
KSB7IHJldHVybiBtX2NvbnRleHQ7IH0KLQotICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQoKSBj
b25zdCB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9Ci0KLSAgICBTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRTZWN1cml0eU9yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7Ci0K
LSAgICBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YSgpIHsgcmV0dXJuIG1fcGVyQ29u
dGV4dERhdGEuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRl
eHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbGVkIGJ5
IHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGVuIG91ciBKYXZhU2NyaXB0IGNvbnRleHQgaXMgYWJv
dXQKLSAgICAvLyB0byBiZSBkZXN0cm95ZWQuCi0gICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtS
ZWZlcmVuY2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCog
aXNvbGF0ZWRDb250ZXh0KTsKLQotICAgIHN0YXRpYyBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0
ZWRDb250ZXh0KCk7Ci0KLSAgICAvLyBUaGUgdW5kZXJseWluZyB2ODo6Q29udGV4dC4gVGhpcyBv
YmplY3QgaXMga2VlcCBvbiB0aGUgaGVhcCBhcwotICAgIC8vIGxvbmcgYXMgfG1fY29udGV4dHwg
aGFzIG5vdCBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkLgotICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0
ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4dDsKLQotICAgIFJlZlB0cjxET01XcmFwcGVyV29y
bGQ+IG1fd29ybGQ7Ci0KLSAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJpdHlPcmln
aW47Ci0KLSAgICBGcmFtZSogbV9mcmFtZTsKLQotICAgIE93blB0cjxWOFBlckNvbnRleHREYXRh
PiBtX3BlckNvbnRleHREYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gVjhJc29sYXRlZENvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAppbmRleCA4ZmJkZTkzNWUzNzAxODllZjc5OTk2
NDZkNDA1MzY2ZmQzMGU0ZDVhLi5jZGIwMDE3OWY5M2FkYTViZjk0NjExMDE5YzE3NzlhYjhjNTk0
ZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExp
c3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExp
c3RlbmVyLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUg
IlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJW
OERPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJWOERvY3VtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcAppbmRleCA0ODhmM2I1Mjdi
NjgzMTQyNmI0ZjlkNDBkNDg3MTE3MDkxNWVhMTQ4Li4xODAyODBhYmMxYzEzMzkzN2ViMTU0NTI4
MzIwN2Q3ZTcwYjVjMWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JsZENvbnRleHRIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmxkQ29udGV4dEhhbmRsZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXb3JsZENv
bnRleHRIYW5kbGUuaCIKIAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
ICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwxNSArNDIsMjIgQEAgV29ybGRDb250ZXh0SGFu
ZGxlOjpXb3JsZENvbnRleHRIYW5kbGUoV29ybGRUb1VzZSB3b3JsZFRvVXNlKQogICAgIGlmICh3
b3JsZFRvVXNlID09IFVzZU1haW5Xb3JsZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFY4
SXNvbGF0ZWRDb250ZXh0KiBjb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQo
KSkKLSAgICAgICAgbV9jb250ZXh0ID0gY29udGV4dC0+c2hhcmVkQ29udGV4dCgpOworICAgIFY4
RE9NV2luZG93U2hlbGwqIHNoZWxsID0gVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpOwor
ICAgIGlmIChMSUtFTFkoIXNoZWxsKSkgeworICAgICAgICBtX3dvcmxkVG9Vc2UgPSBVc2VNYWlu
V29ybGQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoIXNoZWxsLT5jb250
ZXh0KCkuSXNFbXB0eSgpKTsKKyAgICBtX2NvbnRleHQgPSBTaGFyZWRQZXJzaXN0ZW50PHY4OjpD
b250ZXh0Pjo6Y3JlYXRlKHNoZWxsLT5jb250ZXh0KCkpOwogfQogCiB2ODo6TG9jYWw8djg6OkNv
bnRleHQ+IFdvcmxkQ29udGV4dEhhbmRsZTo6YWRqdXN0ZWRDb250ZXh0KFNjcmlwdENvbnRyb2xs
ZXIqIHNjcmlwdCkgY29uc3QKIHsKLSAgICBpZiAobV93b3JsZFRvVXNlID09IFVzZU1haW5Xb3Js
ZCB8fCAhbV9jb250ZXh0IHx8IG1fY29udGV4dC0+Z2V0KCkuSXNFbXB0eSgpKQorICAgIGlmICht
X3dvcmxkVG9Vc2UgPT0gVXNlTWFpbldvcmxkKQogICAgICAgICByZXR1cm4gc2NyaXB0LT5tYWlu
V29ybGRDb250ZXh0KCk7CiAKKyAgICBBU1NFUlQoIW1fY29udGV4dC0+Z2V0KCkuSXNFbXB0eSgp
KTsKICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dC0+Z2V0
KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggNTkxMTQ0ZjhiNjU2ODhkNjM2ODM1YzUxYzJmNDQ5
NDhlYTI0YWVmNi4uNzgxYTdiNzI2NmZkYTVkMWE3NTFhYzNiZThmNDU3MjkxZjE4ZmUxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50
Q3VzdG9tLmNwcApAQCAtNDQsOSArNDQsOSBAQAogI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgiCiAjaW5jbHVkZSAiVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIKICNpbmNs
dWRlICJWOERPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5o
IgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNp
bmNsdWRlICJWOFRvdWNoLmgiCiAjaW5jbHVkZSAiVjhUb3VjaExpc3QuaCIKQEAgLTEzMCw3ICsx
MzAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChEb2N1bWVudCogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleAogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlciA9IFY4RG9jdW1lbnQ6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlLCBmb3JjZU5ld09iamVjdCk7CiAgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKLSAgICBpZiAoIVY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVk
KCkpIHsKKyAgICBpZiAoIVY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkgewogICAgICAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkKICAgICAgICAgICAgIGZyYW1lLT5z
Y3JpcHQoKS0+d2luZG93U2hlbGwoKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IGJlNTM0MzEwOTY1ZjAxMGQ3MzRjYTU3NWRh
NGZmOTgzYzkzYWYzM2YuLmU1MGEyNjAzZTQ0N2ExZjYzNGM5YjZmM2E5YmNjODhhODI0ODNhZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1
bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTERvY3VtZW50Q3VzdG9tLmNwcApAQCAtNDAsOSArNDAsOSBAQAogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV2luZG93Lmgi
CisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIlY4SFRNTEFsbENvbGxl
Y3Rpb24uaCIKICNpbmNsdWRlICJWOEhUTUxDb2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhJc29s
YXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFJlY3Vyc2lv
blNjb3BlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtMTgzLDcg
KzE4Myw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxEb2N1bWVudCogaW1wbCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvCiAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyID0gVjhIVE1MRG9jdW1lbnQ6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlLCBmb3JjZU5ld09iamVjdCk7CiAgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICBpZiAoIVY4SXNvbGF0ZWRDb250ZXh0OjpnZXRF
bnRlcmVkKCkpIHsKKyAgICBpZiAoIVY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkgewog
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkKICAgICAgICAgICAgIGZy
YW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBw
ZXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcAppbmRleCBhNmY0MWI2ZGI1MjY1YWEwZDZiYWEy
ZmZjOGM2ODcyYzQ0OTNhY2I4Li5kYTE2NmE3YWZmZjNiN2FjNTk1YTAyODJiZWVmOTc1ODBlNWNh
ODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdE
b2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiVjhT
VkdEb2N1bWVudC5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVk
Q29udGV4dC5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00NSw3ICs0NSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNW
R0RvY3VtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29uCiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhTVkdEb2N1bWVudDo6d3JhcChpbXBs
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKICAgICBpZiAod3Jh
cHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIGlmICghVjhJc29s
YXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgeworICAgIGlmICghVjhET01XaW5kb3dTaGVsbDo6
Z2V0RW50ZXJlZCgpKSB7CiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgp
KQogICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1
bWVudFdyYXBwZXIod3JhcHBlcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9y
LmNwcAppbmRleCA1OTk0ZWEzODEyYjAwNTkxNGVmMGVjZGQzMGE3YzlhMmRhYjkyNzUwLi4wNTBi
N2ZiNGQzODZhNzFmOTdjYmVhNGE5NTllMTJiYWY3YTc3OTNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVz
dENvbnN0cnVjdG9yLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIk9yaWdpbkFjY2Vz
c0VudHJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4RE9NV2lu
ZG93U2hlbGwuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKQEAgLTU1
LDggKzU1LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4WE1MSHR0cFJlcXVlc3Q6OmNvbnN0
cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogCiAgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbjsKLSAgICBpZiAoVjhJc29sYXRlZENv
bnRleHQqIGlzb2xhdGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkp
Ci0gICAgICAgIHNlY3VyaXR5T3JpZ2luID0gaXNvbGF0ZWRDb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpOworICAgIGlmIChWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERP
TVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpCisgICAgICAgIHNlY3VyaXR5T3JpZ2luID0gaXNv
bGF0ZWRXb3JsZFNoZWxsLT5pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oKTsKIAogICAgIFJl
ZlB0cjxYTUxIdHRwUmVxdWVzdD4geG1sSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIHNlY3VyaXR5T3JpZ2luKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163301</attachid>
            <date>2012-09-11 01:43:36 -0700</date>
            <delta_ts>2012-09-11 02:34:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>69055</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2I4ZTg3YjU3YTY0ZWQz
NmIzZjNjNzZjN2YyNDJkNmFiMzUzNGFiNC4uN2FiZmY0MjA4MzljOTllYmExYTVhMjMzNzJhMzNi
ZjgzN2Y2ZTAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wOS0xMSAgRGFu
IENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZW1vdmVkIFY4SXNvbGF0
ZWRDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTczNQorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgUmVt
b3ZlIFY4SXNvbGF0ZWRDb250ZXh0IGFuZCBtZXJnZSBmdW5jdGlvbmFsaXR5IGludG8gVjhET01X
aW5kb3dTaGVsbC4KKyAgICAgICAgVGhpcyBicmluZ3MgdGhlIFY4IGlzb2xhdGVkIHdvcmxkIG1v
ZGVsIGludG8gY2xvc2VyIGFsaWdubWVudCB3aXRoCisgICAgICAgIHRoYXQgb2YgSlNDLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAg
ICAgICogVXNlVjguY21ha2U6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2
NEFycmF5LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRGF0YTo6Z2V0Q3VycmVudFN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9E
T01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjpl
bnN1cmVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01XcmFwcGVyV29y
bGQuaDoKKyAgICAgICAgKERPTVdyYXBwZXJXb3JsZCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
OjpTY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OnJlc2V0SXNvbGF0ZWRXb3JsZHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6ZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hlbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmN1
cnJlbnRXb3JsZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNv
bGxlY3RJc29sYXRlZENvbnRleHRzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcmlwdENvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVs
bCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2hhcmVkUGVyc2lzdGVudC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRQZXJzaXN0ZW50OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkUGVyc2lzdGVudDo6Z2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZFBlcnNpc3RlbnQ6OlNoYXJlZFBlcnNpc3RlbnQpOgorICAgICAgICAoU2hhcmVk
UGVyc2lzdGVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBlckNvbnRleHREYXRhRm9yQ3VycmVudFdvcmxkKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldElz
b2xhdGVkV29ybGRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpl
bnRlcmVkSXNvbGF0ZWRXb3JsZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdpbmRvd1NoZWxsOjpWOERPTVdpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OmRlc3Ryb3lJc29sYXRlZFNoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6Omlz
b2xhdGVkQ29udGV4dFdlYWtDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRv
d1NoZWxsOjpkaXNwb3NlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1No
ZWxsOjppbml0aWFsaXplSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dT
aGVsbDo6Y3JlYXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxs
OjppbnN0YWxsRE9NV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6
OnVwZGF0ZURvY3VtZW50V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1No
ZWxsOjp1cGRhdGVEb2N1bWVudFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2lu
ZG93U2hlbGw6OmNsZWFyRG9jdW1lbnRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdpbmRvd1NoZWxsOjpzZXRTZWN1cml0eVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2lu
ZG93U2hlbGw6Om5hbWVkSXRlbUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93
U2hlbGw6Om5hbWVkSXRlbVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dT
aGVsbDo6dXBkYXRlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5k
b3dTaGVsbDo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgIChWOERPTVdpbmRvd1NoZWxsKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OndvcmxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4RE9NV2luZG93U2hlbGw6Omlzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3Jh
cHBlcjo6Z2V0Q2FjaGVkV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRl
ZENvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRD
b250ZXh0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0
ZW5lci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmxkQ29udGV4dEhhbmRsZTo6V29ybGRDb250ZXh0SGFuZGxl
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmxkQ29udGV4dEhhbmRsZTo6YWRqdXN0ZWRDb250ZXh0
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJl
cXVlc3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFhNTEh0dHBSZXF1ZXN0
Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKwogMjAxMi0wOS0xMCAgS2Vpc2hpIEhhdHRvcmkgIDxr
ZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIElucHV0VHlwZU5hbWVzIHRvIGEgc2Vw
YXJhdGUgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQppbmRleCBkMDQxYzgxNjQyYjUwOGFjOWE3Y2E3M2E1ZWFk
ZTU0OTBkOWNiZDRjLi45ODYyNTg4YTg5OTc4Y2U2NjFiOThkM2JlYWI4ZmEzM2JjOTVkNjMxIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Vc2VWOC5jbWFrZQpAQCAtNTcsNyArNTcsNiBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKICAgICBiaW5kaW5ncy92OC9W
OEdDRm9yQ29udGV4dERpc3Bvc2UuY3BwCiAgICAgYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0
eU5hbWUuY3BwCi0gICAgYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCiAgICAgYmlu
ZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAKICAgICBiaW5kaW5ncy92OC9WOE5vZGVG
aWx0ZXJDb25kaXRpb24uY3BwCiAgICAgYmluZGluZ3MvdjgvVjhPYmplY3RDb25zdHJ1Y3Rvci5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4NmIzMjkxN2Y3NTUxOTkyZjY0OTIwYjhhM2UxNjkwMDZl
NGMwMjFkLi40YmFmOTVjZTBlNDU1NjFhODYzNDg3M2E2NWZjMjYyOGY4OWY0YTllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC0yMzAxLDggKzIzMDEsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1Y4R0NGb3JDb250ZXh0RGlzcG9zZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhp
ZGRlblByb3BlcnR5TmFtZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SGlkZGVu
UHJvcGVydHlOYW1lLmgnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250
ZXh0LmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA1NDE2ZmM4OTcxNDRjZjhm
NGU0NDY1ZTgyZjA1NmE3ZTU4ZTllODgyLi5jMjljYzVjMGY4MmIxOWVjYzYxY2MxODk5YmUxODg5
NTMyNmUzODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjUxOSw3ICsyNTE5LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICBBZGRUb0ltcGxJbmNsdWRlcygiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4QmluZGluZy5oIik7CiAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIlY4RE9NV3JhcHBlci5oIik7Ci0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4SXNv
bGF0ZWRDb250ZXh0LmgiKTsKIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkaW50ZXJmYWNlTmFt
ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IGU0NzAzYmM5MWRjYzE5ZThiNGNlMzNjMzQ3
OTkwZWYwNmIwYjk5MjIuLjAwZWJkNmRiOGI3ZTJkZTc2ODczNjg5NmUwZjgxZTg1OTA5ZmU4NzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZs
b2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlY4RE9N
V3JhcHBlci5oIgogI2luY2x1ZGUgIlY4RmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiVjhJbnQz
MkFycmF5LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYv
RmxvYXQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zsb2F0NjRBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggYjk5
NmM4MTU1YmVmOGZiZjk2NGQyYTMwNzAxNDZhYmJiMjMyZWE2MC4uYmRjM2VhNDNjMjJlZjc5ZjNh
YTQ4N2UyYzEwNzIyOTMzYmRhOGNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5j
cHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5j
bHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5j
cHAKaW5kZXggN2MzMmJlNmUwMWVkZTBkMDIwMGI2ZWFhYzBkOThkOTM2N2Q5MjU3NC4uM2YzMGJk
NTE2YjEwYTRiOTM4NWE4YzdiNmEzNWY3MTQxNGUwZTk0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9N
V3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcAppbmRleCBiM2EzNTM0ZjI0YWI3NmY1MWRiZWI1ZTQ1N2U0NmZjNTE1
Mjk0MmZjLi43MDFiODlhYzg3MmVhMzMxMjg2NjI5ZGMwM2M4ZmY0YTA2NjAyODk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVk
ZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2lu
Y2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVu
dFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IGI3ODM2OWU5NTVmNGVkNzZmM2RiODhlOTI5NmUwN2Yz
YTdlMjRiNDcuLmI1OTY1ZGM5MjNiOTg0NTZlMGVkNmI5MWY4OGJhZjg3Yjk4M2UwY2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVu
dFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIlY4Q29s
bGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4RXZlbnQu
aCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgog
I2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCmluZGV4
IGQ4MDE5OWQ5ZjExOWM4OWQ3MDAzZjk2YTI3NDQxN2JjYjczYmY3ZGMuLjFhNmU4Mzk5YTg0Mzk0
MzYxOTNkMzMyNTAzNzRhYzcwOWI1NDg4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCkBAIC0y
Nyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4
SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggMWQ3N2FhMmY0NTBmZGRk
MDg1YWRhMTI0YzEyZWFhNWJhMTM5ZjFkMS4uZmY3YmEwZGVmYTg4MDI5ZTU3YzUwZWVlMzc2NzVl
YTI5NDk3MzEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNp
bmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5j
bHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNp
bmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFRlc3RPYmouaCIKICNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAK
aW5kZXggMjRjNGRmNjk4NThhNjA2NmZjZjQ1NTNlYTI2MjgwODg1NzIxZDJkMy4uN2IxZTc3NDQ2
MjU0YTc3OGU2NDhkZDY3OWI1MDYxOGNlNTY0NTg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRl
ICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNjZkMjkwOTdiZDU4YzYyM2FmZmUzOTc5MWE5
MmUyMDJlYjk2ZjlkNy4uMTYyYTlhNWRjOGFjYzU3Y2M5MzM0OTY4Y2MzODI4YzJlMzM0MmZhNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMjgsNyArMjgsNiBAQAog
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4
dC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0Tm9kZS5jcHAKaW5kZXggNTY1NWE4YzAxYTc1MzRhMWZmMzBhY2ZlNmUwZmY5OWIxOTZhZmRi
MC4uNzZjYWNkZDk3ZmQzM2JhYzdmMmY4YTkxMDcwOWFkMzU5ZTA5MzM2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNw
cApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNs
dWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDkyNTM3MTI0ZTI3YTFmNWVjOGI3
ZGFhZGIyMGY1MmVhYjRlNDFmMDYuLjVmZDMyM2VlZTRmNjc1ODI2NTVmNTYzZWMyMWE2MjQ5NzM0
ZTNkZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPYmouY3BwCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiVjhET01XcmFw
cGVyLmgiCiAjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgogI2luY2x1ZGUgIlY4RmxvYXQzMkFycmF5
LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOFNWR0RvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiVjhTVkdQb2ludC5oIgogI2luY2x1ZGUgIlY4U2NyaXB0UHJvZmls
ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcAppbmRleCBiYTRjNDBkNTY0YWY3ZjQ2ZDBhZDIwZjE1MzFiZWVkMmYyOGUzYWYw
Li5mOGZjNWU1OTBhYjRhNzhhNDJjNGM4YjI0NjY1MTMzNmFjMThjOGFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAt
MzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1
ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4
SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUg
PHd0Zi9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAppbmRleCAxYTYzYzJmMmJkZmU4YTY4ZGUyNmJi
OTY2M2UyZWQ5Y2NkZGQ5MWE4Li5hZjUwYTFlY2EzYWIyMTU4MWFiZDY0YWEwMGZmNWFmMzM4Y2Ji
OTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcApAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTURhdGEuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUg
IlY4RE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgi
CiAjaW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKIApAQCAtNDMsNyArNDMsNyBAQCBE
T01EYXRhU3RvcmUmIERPTURhdGE6OmdldEN1cnJlbnRTdG9yZSh2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVu
dChpc29sYXRlKTsKICAgICBpZiAoVU5MSUtFTFkoZGF0YS0+ZG9tRGF0YVN0b3JlKCkgIT0gMCkp
CiAgICAgICAgIHJldHVybiAqZGF0YS0+ZG9tRGF0YVN0b3JlKCk7Ci0gICAgVjhJc29sYXRlZENv
bnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpOworICAgIFY4
RE9NV2luZG93U2hlbGwqIGNvbnRleHQgPSBWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNvbnRleHQgIT0gMCkpCiAgICAgICAgIHJldHVybiAqY29udGV4
dC0+d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCk7CiAgICAgcmV0dXJuIGRlZmF1bHRTdG9yZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCmluZGV4IDMx
YTAyODZjNDUxZjc2N2RjZDNlYjQ0MWE3ZmU4YzEzZmNjY2IzMWYuLjg1OWU4MzZmMjM0MDRmZDI4
YjA0Y2VhNWQzYzdmZDdlNDk1YTFjMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvRE9NV3JhcHBlcldvcmxkLmNwcApAQCAtOTAsMTMgKzkwLDEyIEBAIHZvaWQgRE9NV3JhcHBl
cldvcmxkOjpkZWFsbG9jYXRlKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAKIHN0YXRpYyBpbnQg
dGVtcG9yYXJ5V29ybGRJZCA9IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXplZFdvcmxkSWQt
MTsKIAotUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IERPTVdyYXBwZXJXb3JsZDo6Z2V0T3JD
cmVhdGVJc29sYXRlZFdvcmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApCitQYXNz
UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gRE9NV3JhcHBlcldvcmxkOjplbnN1cmVJc29sYXRlZFdv
cmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApCiB7CiAgICAgQVNTRVJUKHdvcmxk
SWQgIT0gbWFpbldvcmxkSWQpOwotICAgIEFTU0VSVCh3b3JsZElkICE9IHVuaW5pdGlhbGl6ZWRX
b3JsZElkKTsKIAogICAgIFdvcmxkTWFwJiBtYXAgPSBpc29sYXRlZFdvcmxkTWFwKCk7Ci0gICAg
aWYgKCF3b3JsZElkKQorICAgIGlmICh3b3JsZElkID09IHVuaW5pdGlhbGl6ZWRXb3JsZElkKQog
ICAgICAgICB3b3JsZElkID0gdGVtcG9yYXJ5V29ybGRJZC0tOwogICAgIGVsc2UgewogICAgICAg
ICBXb3JsZE1hcDo6aXRlcmF0b3IgaSA9IG1hcC5maW5kKHdvcmxkSWQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAppbmRleCAwMTEyNWI3ZjM0YjliNTA3
MWRiMjZkZTUwNjE1NGM0OWRkMGM0NmI0Li45Y2NjZDVmYzZiMmU0ODEzZjk5OTJjZGIwY2U3OTkx
MWE0MDkwNDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFw
cGVyV29ybGQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29y
bGQuaApAQCAtNDEsMTIgKzQxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoaXMgY2xh
c3MgcmVwcmVzZW50IGEgY29sbGVjdGlvbiBvZiBET00gd3JhcHBlcnMgZm9yIGEgc3BlY2lmaWMg
d29ybGQuCiBjbGFzcyBET01XcmFwcGVyV29ybGQgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFz
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGludCBtYWluV29ybGRJZCA9IC0xOwotICAg
IHN0YXRpYyBjb25zdCBpbnQgbWFpbldvcmxkRXh0ZW5zaW9uR3JvdXAgPSAtMTsKLSAgICBzdGF0
aWMgY29uc3QgaW50IHVuaW5pdGlhbGl6ZWRXb3JsZElkID0gLTI7Ci0gICAgc3RhdGljIGNvbnN0
IGludCB1bmluaXRpYWxpemVkRXh0ZW5zaW9uR3JvdXAgPSAtMjsKKyAgICBzdGF0aWMgY29uc3Qg
aW50IG1haW5Xb3JsZElkID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1haW5Xb3JsZEV4dGVu
c2lvbkdyb3VwID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IHVuaW5pdGlhbGl6ZWRXb3JsZElk
ID0gLTE7CisgICAgc3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxpemVkRXh0ZW5zaW9uR3JvdXAg
PSAtMTsKICAgICAvLyBJZiAwIGlzIHBhc3NlZCBhcyB3b3JsZElkLCB0aGUgd29ybGQgd2lsbCBi
ZSBhc3NpZ25lZCBhIHRlbXBvcmFyeSBpZCBpbnN0ZWFkLgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4gZ2V0T3JDcmVhdGVJc29sYXRlZFdvcmxkKGludCB3b3JsZElkLCBp
bnQgZXh0ZW5zaW9uR3JvdXApOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3Js
ZD4gZW5zdXJlSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJZCwgaW50IGV4dGVuc2lvbkdyb3VwKTsK
ICAgICBzdGF0aWMgYm9vbCBpc29sYXRlZFdvcmxkc0V4aXN0KCkgeyByZXR1cm4gaXNvbGF0ZWRX
b3JsZENvdW50OyB9CiAgICAgLy8gRklYTUU6IHRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHBy
b2JsZW0gaW4gV2ViVmlld0ltcGwuCiAgICAgLy8gRG8gbm90IHVzZSB0aGlzIGFueXdoZXJlIGVs
c2UhIQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cAppbmRleCBlNjY1NWVkOWE5NjM3NjhmMzEzM2JhMWJjZTE4OGEyMDRmYTljNGM4Li4yMTFiYTk0
N2ExNzI3MWZhNjNkMzk4MTdmYjY4ZWI5ZGMwOTRhMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNjIsNyArNjIsNiBAQAogI2lu
Y2x1ZGUgIlY4R0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUu
aCIKICNpbmNsdWRlICJWOEhUTUxFbWJlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOElzb2xhdGVk
Q29udGV4dC5oIgogI2luY2x1ZGUgIlY4TlBPYmplY3QuaCIKICNpbmNsdWRlICJWOFJlY3Vyc2lv
blNjb3BlLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCkBAIC0xMDAsNyArOTksNyBAQCBib29sIFNj
cmlwdENvbnRyb2xsZXI6OmNhbkFjY2Vzc0Zyb21DdXJyZW50T3JpZ2luKEZyYW1lICpmcmFtZSkK
IFNjcmlwdENvbnRyb2xsZXI6OlNjcmlwdENvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQogICAgIDog
bV9mcmFtZShmcmFtZSkKICAgICAsIG1fc291cmNlVVJMKDApCi0gICAgLCBtX3dpbmRvd1NoZWxs
KFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZShmcmFtZSkpCisgICAgLCBtX3dpbmRvd1NoZWxsKFY4
RE9NV2luZG93U2hlbGw6OmNyZWF0ZShmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpKQog
ICAgICwgbV9wYXVzZWQoZmFsc2UpCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAg
ICAgLCBtX3dyYXBwZWRXaW5kb3dTY3JpcHROUE9iamVjdCgwKQpAQCAtMTQ3LDcgKzE0Niw3IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6cmVzZXRJc29sYXRlZFdvcmxkcygpCiB7CiAgICAgZm9y
IChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5iZWdp
bigpOwogICAgICAgICAgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgaXRlci0+c2Vjb25kLT5kZXN0cm95KCk7CisgICAgICAgIGl0ZXItPnNlY29uZC0+
ZGVzdHJveUlzb2xhdGVkU2hlbGwoKTsKICAgICB9CiAgICAgbV9pc29sYXRlZFdvcmxkcy5jbGVh
cigpOwogICAgIG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5jbGVhcigpOwpAQCAtMzE0
LDUwICszMTMsNzIgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29u
c3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKICAgICByZXR1cm4gU2NyaXB0VmFsdWUo
b2JqZWN0KTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRX
b3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNv
dXJjZXMsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpCitWOERPTVdpbmRvd1NoZWxsKiBT
Y3JpcHRDb250cm9sbGVyOjplbnN1cmVJc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCwg
aW50IGV4dGVuc2lvbkdyb3VwKQogewotICAgIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxk
SUQsIHNvdXJjZXMsIDAsIHJlc3VsdHMpOworICAgIEFTU0VSVCh3b3JsZElkICE9IERPTVdyYXBw
ZXJXb3JsZDo6bWFpbldvcmxkSWQpOworCisgICAgLy8gQ2hlY2sgdGhlIG1hcCBmb3Igbm9uLXRl
bXBvcmFyeSB3b3JsZHMuCisgICAgaWYgKHdvcmxkSWQgIT0gRE9NV3JhcHBlcldvcmxkOjp1bmlu
aXRpYWxpemVkV29ybGRJZCkgeworICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBp
dGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSWQpOworICAgICAgICBpZiAoaXRlciAh
PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXRlci0+c2Vj
b25kLT53b3JsZCgpLT53b3JsZElkKCkgPT0gd29ybGRJZCk7CisgICAgICAgICAgICBBU1NFUlQo
aXRlci0+c2Vjb25kLT53b3JsZCgpLT5leHRlbnNpb25Hcm91cCgpID09IGV4dGVuc2lvbkdyb3Vw
KTsKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiB3b3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6ZW5z
dXJlSXNvbGF0ZWRXb3JsZCh3b3JsZElkLCBleHRlbnNpb25Hcm91cCk7CisgICAgT3duUHRyPFY4
RE9NV2luZG93U2hlbGw+IGlzb2xhdGVkV29ybGRTaGVsbCA9IFY4RE9NV2luZG93U2hlbGw6OmNy
ZWF0ZShtX2ZyYW1lLCB3b3JsZCk7CisgICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29ybGQtPndv
cmxkSWQoKSwgaXNvbGF0ZWRXb3JsZFNoZWxsLmdldCgpKTsKKyAgICByZXR1cm4gaXNvbGF0ZWRX
b3JsZFNoZWxsLmxlYWtQdHIoKTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCwgVmVjdG9yPFNjcmlwdFZhbHVl
PiogcmVzdWx0cykKK1Y4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5n
V2luZG93U2hlbGxJbnRlcm5hbChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogewotICAgIHY4OjpI
YW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICBBU1NFUlQod29ybGQpOwogCi0gICAgLy8gRklY
TUU6IFRoaXMgd2lsbCBuZWVkIHRvIGdldCByZW9yZ2FuaXplZCBvbmNlIHdlIGhhdmUgYSB3aW5k
b3dTaGVsbCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgotICAgIGlmICghd2luZG93U2hlbGwoKS0+
aW5pdGlhbGl6ZUlmTmVlZGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoTElLRUxZKHdv
cmxkLT5pc01haW5Xb3JsZCgpKSkKKyAgICAgICAgcmV0dXJuIG1fd2luZG93U2hlbGwuZ2V0KCk7
CisKKyAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxk
cy5maW5kKHdvcmxkLT53b3JsZElkKCkpOworICAgIHJldHVybiBpdGVyID09IG1faXNvbGF0ZWRX
b3JsZHMuZW5kKCkgPyAwIDogaXRlci0+c2Vjb25kOworfQorCitWOERPTVdpbmRvd1NoZWxsKiBT
Y3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKQorewor
ICAgIFY4RE9NV2luZG93U2hlbGwqIHNoZWxsID0gZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFs
KHdvcmxkKTsKKyAgICBpZiAoTElLRUxZKCEhc2hlbGwpKQorICAgICAgICByZXR1cm4gc2hlbGw7
CiAKKyAgICBPd25QdHI8VjhET01XaW5kb3dTaGVsbD4gaXNvbGF0ZWRXb3JsZFNoZWxsID0gVjhE
T01XaW5kb3dTaGVsbDo6Y3JlYXRlKG1fZnJhbWUsIHdvcmxkKTsKKyAgICBtX2lzb2xhdGVkV29y
bGRzLnNldCh3b3JsZC0+d29ybGRJZCgpLCBpc29sYXRlZFdvcmxkU2hlbGwuZ2V0KCkpOworICAg
IHJldHVybiBpc29sYXRlZFdvcmxkU2hlbGwubGVha1B0cigpOworfQorCit2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0
b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCwgVmVjdG9y
PFNjcmlwdFZhbHVlPiogcmVzdWx0cykKK3sKKyAgICAvLyBFeGNlcHQgaW4gdGhlIHRlc3QgcnVu
bmVyLCB3b3JsZElEIHNob3VsZCBiZSBub24gMCBhcyBpdCBjb25mbGljdHMgd2l0aCB0aGUgbWFp
bldvcmxkSWQuCisgICAgLy8gRklYTUU6IENoYW5nZSB0aGUgdGVzdCBydW5uZXIgdG8gcGVyZm9y
bSB0aGlzIHN3YXAgYW5kIG1ha2UgdGhpcyBhbiBBU1NFUlQuCisgICAgaWYgKFVOTElLRUxZKCF3
b3JsZElEKSkKKyAgICAgICAgd29ybGRJRCA9IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXpl
ZFdvcmxkSWQ7CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgdjg6Okxv
Y2FsPHY4OjpBcnJheT4gdjhSZXN1bHRzOwogICAgIHsKICAgICAgICAgdjg6OkhhbmRsZVNjb3Bl
IGV2YWx1YXRlSGFuZGxlU2NvcGU7Ci0gICAgICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRl
ZENvbnRleHQgPSAwOwotICAgICAgICBpZiAod29ybGRJRCA+IDApIHsKLSAgICAgICAgICAgIElz
b2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29y
bGRJRCk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQot
ICAgICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xh
dGVkQ29udGV4dChtX2ZyYW1lLCBET01XcmFwcGVyV29ybGQ6OmdldE9yQ3JlYXRlSXNvbGF0ZWRX
b3JsZCh3b3JsZElELCBleHRlbnNpb25Hcm91cCkpOwotICAgICAgICAgICAgICAgIGlmIChpc29s
YXRlZENvbnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hh
bmdlIHRoaXMgdG8gdXNpbmcgd2luZG93IHNoZWxscyB0byBtYXRjaCBKU0MuCi0gICAgICAgICAg
ICAgICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29ybGRJRCwgaXNvbGF0ZWRDb250ZXh0KTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgVjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRXb3JsZFNoZWxs
ID0gZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApOwog
CisgICAgICAgIGlmICh3b3JsZElEICE9IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXplZFdv
cmxkSWQpIHsKICAgICAgICAgICAgIElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDo6aXRl
cmF0b3Igc2VjdXJpdHlPcmlnaW5JdGVyID0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5z
LmZpbmQod29ybGRJRCk7CiAgICAgICAgICAgICBpZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1f
aXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5lbmQoKSkKLSAgICAgICAgICAgICAgICBpc29s
YXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+c2Vjb25k
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBW
OElzb2xhdGVkQ29udGV4dChtX2ZyYW1lLCBET01XcmFwcGVyV29ybGQ6OmdldE9yQ3JlYXRlSXNv
bGF0ZWRXb3JsZCh3b3JsZElELCBleHRlbnNpb25Hcm91cCkpOwotICAgICAgICAgICAgaWYgKGlz
b2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGRl
bGV0ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlzb2xhdGVkV29ybGRTaGVsbC0+c2V0SXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+c2Vjb25kKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6
Q29udGV4dD46Ok5ldyhpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKSk7CisgICAgICAgIGlzb2xh
dGVkV29ybGRTaGVsbC0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7CisgICAgICAgIGlmIChpc29sYXRl
ZFdvcmxkU2hlbGwtPmNvbnRleHQoKS5Jc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpD
b250ZXh0Pjo6TmV3KGlzb2xhdGVkV29ybGRTaGVsbC0+Y29udGV4dCgpKTsKICAgICAgICAgdjg6
OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KTsKICAgICAgICAgdjg6OkxvY2Fs
PHY4OjpBcnJheT4gcmVzdWx0QXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhzb3VyY2VzLnNpemUoKSk7
CiAKQEAgLTM2OCw4ICszODksMTIgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUlu
SXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2MKICAgICAgICAg
ICAgIHJlc3VsdEFycmF5LT5TZXQoaSwgZXZhbHVhdGlvblJlc3VsdCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIXdvcmxkSUQpCi0gICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ry
b3koKTsKKyAgICAgICAgLy8gTWFyayB0ZW1wb3Jhcnkgc2hlbGwgZm9yIHdlYWsgZGVzdHJ1Y3Rp
b24uCisgICAgICAgIGlmICh3b3JsZElEID09IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXpl
ZFdvcmxkSWQpIHsKKyAgICAgICAgICAgIGludCBhY3R1YWxXb3JsZElkID0gaXNvbGF0ZWRXb3Js
ZFNoZWxsLT53b3JsZCgpLT53b3JsZElkKCk7CisgICAgICAgICAgICBtX2lzb2xhdGVkV29ybGRz
LnJlbW92ZShhY3R1YWxXb3JsZElkKTsKKyAgICAgICAgICAgIGlzb2xhdGVkV29ybGRTaGVsbC0+
ZGVzdHJveUlzb2xhdGVkU2hlbGwoKTsKKyAgICAgICAgfQogCiAgICAgICAgIHY4UmVzdWx0cyA9
IGV2YWx1YXRlSGFuZGxlU2NvcGUuQ2xvc2UocmVzdWx0QXJyYXkpOwogICAgIH0KQEAgLTM4Niw3
ICs0MTEsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0cjxTZQogICAgIG1faXNvbGF0ZWRXb3JsZFNl
Y3VyaXR5T3JpZ2lucy5zZXQod29ybGRJRCwgc2VjdXJpdHlPcmlnaW4pOwogICAgIElzb2xhdGVk
V29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7
CiAgICAgaWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkKLSAgICAgICAgaXRlci0+
c2Vjb25kLT5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CisgICAgICAgIGl0ZXIt
PnNlY29uZC0+c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsK
IH0KIAogVGV4dFBvc2l0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlclBvc2l0aW9u
KCkgY29uc3QKQEAgLTQwMywxMSArNDI4LDExIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Zmlu
aXNoZWRXaXRoRXZlbnQoRXZlbnQqIGV2ZW50KQogCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFNj
cmlwdENvbnRyb2xsZXI6OmN1cnJlbnRXb3JsZENvbnRleHQoKQogewotICAgIGlmIChWOElzb2xh
dGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVy
ZWQoKSkgewotICAgICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBj
b250ZXh0ID0gaXNvbGF0ZWRDb250ZXh0LT5zaGFyZWRDb250ZXh0KCk7Ci0gICAgICAgIGlmICht
X2ZyYW1lICE9IHRvRnJhbWVJZk5vdERldGFjaGVkKGNvbnRleHQtPmdldCgpKSkKKyAgICBpZiAo
VjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRTaGVsbCA9IFY4RE9NV2luZG93U2hlbGw6OmdldEVu
dGVyZWQoKSkgeworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4dCA9
IGlzb2xhdGVkU2hlbGwtPmNvbnRleHQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgp
IHx8IG1fZnJhbWUgIT0gdG9GcmFtZUlmTm90RGV0YWNoZWQoY29udGV4dCkpCiAgICAgICAgICAg
ICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwotICAgICAgICByZXR1cm4gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNvbnRleHQtPmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHY4
OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0KTsKICAgICB9CiAgICAgd2luZG93U2hl
bGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7CiAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD46Ok5ldyh3aW5kb3dTaGVsbCgpLT5jb250ZXh0KCkpOwpAQCAtNTMyLDEwICs1NTcsMTMg
QEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpnZXRBbGxXb3JsZHMoVmVjdG9yPFJlZlB0cjxET01X
cmFwcGVyV29ybGQ+ID4mIHdvcmxkcykKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJ
bldvcmxkKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CisgICAgaWYg
KHdvcmxkID09IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKSB7CisgICAgICAgIGV2YWx1YXRlKHNv
dXJjZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgVmVjdG9yPFNjcmlwdFNvdXJjZUNv
ZGU+IHNvdXJjZXM7CiAgICAgc291cmNlcy5hcHBlbmQoc291cmNlKTsKLSAgICAvLyBGSVhNRTog
R2V0IGFuIElEIGZyb20gdGhlIHdvcmxkIHBhcmFtLgotICAgIGV2YWx1YXRlSW5Jc29sYXRlZFdv
cmxkKDAsIHNvdXJjZXMsIDApOworICAgIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkLT53
b3JsZElkKCksIHNvdXJjZXMsIHdvcmxkLT5leHRlbnNpb25Hcm91cCgpLCAwKTsKIH0KIAogVjhF
eHRlbnNpb25zJiBTY3JpcHRDb250cm9sbGVyOjpyZWdpc3RlcmVkRXh0ZW5zaW9ucygpCkBAIC02
MzYsMTQgKzY2NCwxNCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJc29sYXRlZENv
bnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8U2NyaXB0U3RhdGUqLCBTZQogewogICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKICAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOyBpdCAhPSBtX2lzb2xhdGVkV29ybGRzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRleHQg
PSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoIWlzb2xhdGVkQ29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKSkKKyAgICAgICAgVjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRXb3JsZFNoZWxsID0gaXQt
PnNlY29uZDsKKyAgICAgICAgaWYgKCFpc29sYXRlZFdvcmxkU2hlbGwtPmlzb2xhdGVkV29ybGRT
ZWN1cml0eU9yaWdpbigpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpOwor
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBpc29sYXRlZFdvcmxk
U2hlbGwtPmNvbnRleHQoKTsKICAgICAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gU2Ny
aXB0U3RhdGU6OmZvckNvbnRleHQodjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHY4Q29udGV4
dCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlY3Vy
aXR5T3JpZ2luKj4oc2NyaXB0U3RhdGUsIGlzb2xhdGVkQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSosIFNlY3Vy
aXR5T3JpZ2luKj4oc2NyaXB0U3RhdGUsIGlzb2xhdGVkV29ybGRTaGVsbC0+aXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2luKCkpKTsKICAgICB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAppbmRleCA5ZDljNmQ0OGUyZTcxMDE0M2Ux
MGE2OWE4NTI4NTEwOWIzYzU5ZDYyLi4wNDAyMTUyMzhjNTE0M2ZlZjg5NjEwNGUyNWQyZTM5YzQ2
YjVmYjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxl
ci5oCkBAIC01NywyMCArNTcsOCBAQCBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogY2xhc3MgU2Ny
aXB0U3RhdGU7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFY4RE9NV2luZG93U2hlbGw7
Ci1jbGFzcyBWOElzb2xhdGVkQ29udGV4dDsKIGNsYXNzIFdpZGdldDsKIAotLy8gTm90ZTogYWx0
aG91Z2ggdGhlIHBvaW50ZXIgaXMgcmF3LCB0aGUgaW5zdGFuY2UgaXMga2VwdCBhbGl2ZSBieSBh
IHN0cm9uZwotLy8gcmVmZXJlbmNlIHRvIHRoZSB2OCBjb250ZXh0IGl0IGNvbnRhaW5zLCB3aGlj
aCBpcyBub3QgbWFkZSB3ZWFrIHVudGlsIHdlCi0vLyBjYWxsIHdvcmxkLT5kZXN0cm95KCkuCi0v
LwotLy8gRklYTUU6IFdlIHdhbnQgdG8gZXZlbnR1YWxseSBiZSBob2xkaW5nIHdpbmRvdyBzaGVs
bHMgaW5zdGVhZCBvZiB0aGUKLS8vIElzb2xhdGVkQ29udGV4dCBkaXJlY3RseS4KLS8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDg3NQotdHlwZWRlZiBIYXNoTWFw
PGludCwgVjhJc29sYXRlZENvbnRleHQqPiBJc29sYXRlZFdvcmxkTWFwOwotCi10eXBlZGVmIEhh
c2hNYXA8aW50LCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gSXNvbGF0ZWRXb3JsZFNlY3VyaXR5
T3JpZ2luTWFwOwotCiB0eXBlZGVmIFdURjo6VmVjdG9yPHY4OjpFeHRlbnNpb24qPiBWOEV4dGVu
c2lvbnM7CiAKIGNsYXNzIFNjcmlwdENvbnRyb2xsZXIgewpAQCAtNzgsOSArNjYsMTEgQEAgcHVi
bGljOgogICAgIFNjcmlwdENvbnRyb2xsZXIoRnJhbWUqKTsKICAgICB+U2NyaXB0Q29udHJvbGxl
cigpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgdGFrZSBET01XcmFw
cGVyV29ybGQgYXJndW1lbnQuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk0ODc1CiAgICAgVjhET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwoKSBjb25z
dCB7IHJldHVybiBtX3dpbmRvd1NoZWxsLmdldCgpOyB9CisgICAgVjhET01XaW5kb3dTaGVsbCog
d2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKik7CisgICAgLy8gRklYTUU6IFJlcGxhY2UgZXhp
c3RpbmdXaW5kb3dTaGVsbCB3aXRoIGV4aXN0aW5nV2luZG93U2hlbGxJbnRlcm5hbCBzZWUgY29t
bWVudCBpbiBWOERPTVdpbmRvd1NoZWxsOjppbml0aWFsaXplSWZOZWVkZWQuCisgICAgU2NyaXB0
Q29udHJvbGxlciogZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSB7IHJldHVy
biB0aGlzOyB9CisgICAgVjhET01XaW5kb3dTaGVsbCogZXhpc3RpbmdXaW5kb3dTaGVsbEludGVy
bmFsKERPTVdyYXBwZXJXb3JsZCopOwogCiAgICAgU2NyaXB0VmFsdWUgZXhlY3V0ZVNjcmlwdChj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CiAgICAgU2NyaXB0VmFsdWUgZXhlY3V0ZVNjcmlwdChj
b25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlID0gZmFsc2UpOwpAQCAt
MTA1LDEyICs5NSw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgY2FsbGVyIG11c3QgaG9sZCBhbiBl
eGVjdXRpb24gY29udGV4dC4KICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRT
b3VyY2VDb2RlJik7CiAKLSAgICAvLyBFdmFsdWF0ZSBKYXZhU2NyaXB0IGluIGEgbmV3IGlzb2xh
dGVkIHdvcmxkLiBUaGUgc2NyaXB0IGdldHMgaXRzIG93bgotICAgIC8vIGdsb2JhbCBzY29wZSwg
aXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJp
bmcsCi0gICAgLy8gQXJyYXksIGFuZCBzby1vbiksIGFuZCBpdHMgb3duIHdyYXBwZXJzIGZvciBh
bGwgRE9NIG5vZGVzIGFuZCBET00KLSAgICAvLyBjb25zdHJ1Y3RvcnMuCi0gICAgdm9pZCBldmFs
dWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0
U291cmNlQ29kZT4mIHNvdXJjZXMsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpOwotCiAg
ICAgLy8gRXhlY3V0ZXMgSmF2YVNjcmlwdCBpbiBhbiBpc29sYXRlZCB3b3JsZC4gVGhlIHNjcmlw
dCBnZXRzIGl0cyBvd24gZ2xvYmFsIHNjb3BlLAogICAgIC8vIGl0cyBvd24gcHJvdG90eXBlcyBm
b3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5nLCBBcnJheSwgYW5kIHNvLW9u
KSwKICAgICAvLyBhbmQgaXRzIG93biB3cmFwcGVycyBmb3IgYWxsIERPTSBub2RlcyBhbmQgRE9N
IGNvbnN0cnVjdG9ycy4KQEAgLTExOCwyMiArMTAyLDE2IEBAIHB1YmxpYzoKICAgICAvLyBJZiBh
biBpc29sYXRlZCB3b3JsZCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgYWxyZWFkeSBleGlzdHMsIGl0
IGlzIHJldXNlZC4KICAgICAvLyBPdGhlcndpc2UsIGEgbmV3IHdvcmxkIGlzIGNyZWF0ZWQuCiAg
ICAgLy8KLSAgICAvLyBJZiB0aGUgd29ybGRJRCBpcyAwLCBhIG5ldyB3b3JsZCBpcyBhbHdheXMg
Y3JlYXRlZC4KKyAgICAvLyBJZiB0aGUgd29ybGRJRCBpcyAwIG9yIERPTVdyYXBwZXJXb3JsZDo6
dW5pbml0aWFsaXplZFdvcmxkSWQsIGEgbmV3IHdvcmxkIGlzIGFsd2F5cyBjcmVhdGVkLgogICAg
IC8vCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgZXh0ZW5zaW9uR3JvdXAgaGVyZS4KLSAgICB2
b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3Rv
cjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwLCBWZWN0b3I8
U2NyaXB0VmFsdWU+KiByZXN1bHRzKTsKKyAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGlu
dCBleHRlbnNpb25Hcm91cCwgVmVjdG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cyk7CiAKICAgICAv
LyBBc3NvY2lhdGVzIGFuIGlzb2xhdGVkIHdvcmxkIChzZWUgYWJvdmUgZm9yIGRlc2NyaXB0aW9u
KSB3aXRoIGEgc2VjdXJpdHkKICAgICAvLyBvcmlnaW4uIFhNTEh0dHBSZXF1ZXN0IGluc3RhbmNl
cyB1c2VkIGluIHRoYXQgd29ybGQgd2lsbCBiZSBjb25zaWRlcmVkCiAgICAgLy8gdG8gY29tZSBm
cm9tIHRoYXQgb3JpZ2luLCBub3QgdGhlIGZyYW1lJ3MuCiAgICAgdm9pZCBzZXRJc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
KTsKIAotICAgIC8vIE1hc3F1ZXJhZGUgJ3RoaXMnIGFzIHRoZSB3aW5kb3dTaGVsbC4KLSAgICAv
LyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjaywgYnV0IHByb3ZpZGVzIHJlYXNvbmFibGUgY29tcGF0
aWJpbGl0eQotICAgIC8vIHdpdGggd2hhdCBKU0MgZG9lcyBhcyB3ZWxsLgotICAgIFNjcmlwdENv
bnRyb2xsZXIqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCopIHsgcmV0dXJuIHRoaXM7IH0K
LSAgICBTY3JpcHRDb250cm9sbGVyKiBleGlzdGluZ1dpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3Js
ZCopIHsgcmV0dXJuIHRoaXM7IH0KLQogICAgIC8vIENyZWF0ZXMgYSBwcm9wZXJ0eSBvZiB0aGUg
Z2xvYmFsIG9iamVjdCBvZiBhIGZyYW1lLgogICAgIHZvaWQgYmluZFRvV2luZG93T2JqZWN0KEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBrZXksIE5QT2JqZWN0Kik7CiAKQEAgLTIwOCwxOSArMTg2LDI0
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50IGNvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+KTsKIAogcHJpdmF0ZToKKyAgICAvLyBOb3RlOiBhbHRob3VnaCB0aGUgcG9pbnRl
ciBpcyByYXcsIHRoZSBpbnN0YW5jZSBpcyBrZXB0IGFsaXZlIGJ5IGEgc3Ryb25nCisgICAgLy8g
cmVmZXJlbmNlIHRvIHRoZSB2OCBjb250ZXh0IGl0IGNvbnRhaW5zLCB3aGljaCBpcyBub3QgbWFk
ZSB3ZWFrIHVudGlsIHdlCisgICAgLy8gY2FsbCB3b3JsZC0+ZGVzdHJveUlzb2xhdGVkU2hlbGwo
KS4KKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWOERPTVdpbmRvd1NoZWxsKj4gSXNvbGF0ZWRX
b3JsZE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
ID4gSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luTWFwOworCiAgICAgdm9pZCByZXNldElzb2xh
dGVkV29ybGRzKCk7CiAKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBjb25zdCBTdHJpbmcqIG1f
c291cmNlVVJMOwogCi0gICAgLy8gRm9yIHRoZSBtb21lbnQsIHdlIGhhdmUgb25lIG9mIHRoZXNl
LiBTb29uIHdlIHdpbGwgaGF2ZSBvbmUgcGVyIERPTVdyYXBwZXJXb3JsZC4KKyAgICBWOERPTVdp
bmRvd1NoZWxsKiBlbnN1cmVJc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCwgaW50IGV4
dGVuc2lvbkdyb3VwKTsKICAgICBPd25QdHI8VjhET01XaW5kb3dTaGVsbD4gbV93aW5kb3dTaGVs
bDsKIAogICAgIC8vIFRoZSBpc29sYXRlZCB3b3JsZHMgd2UgYXJlIHRyYWNraW5nIGZvciB0aGlz
IGZyYW1lLiBXZSBob2xkIHRoZW0gYWxpdmUKICAgICAvLyBoZXJlIHNvIHRoYXQgdGhleSBjYW4g
YmUgdXNlZCBhZ2FpbiBieSBmdXR1cmUgY2FsbHMgdG8KICAgICAvLyBldmFsdWF0ZUluSXNvbGF0
ZWRXb3JsZCgpLgogICAgIElzb2xhdGVkV29ybGRNYXAgbV9pc29sYXRlZFdvcmxkczsKLQogICAg
IElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcCBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9y
aWdpbnM7CiAKICAgICBib29sIG1fcGF1c2VkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2hhcmVkUGVyc2lzdGVudC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2hhcmVkUGVyc2lzdGVudC5oCmluZGV4IDg4MjViZDVlZGQ4NWE0ODNkZTczNTVmYjBlNTM1
Yzk5YzNmNGVhMGIuLjJlMzlhMDYzMDVjMDM5NjdhZjQyODYyNTU2MGU2OTM2ODI5NjUwN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TaGFyZWRQZXJzaXN0ZW50LmgKQEAgLTMx
LDQ1ICszMSwyOCBAQAogI2lmbmRlZiBTaGFyZWRQZXJzaXN0ZW50X2gKICNkZWZpbmUgU2hhcmVk
UGVyc2lzdGVudF9oCiAKKyNpbmNsdWRlICJTY29wZWRQZXJzaXN0ZW50LmgiCiAjaW5jbHVkZSA8
djguaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIC8vIEEgc2hhcmVhYmxlIHJlZmVy
ZW5jZSB0byBhIHY4IHBlcnNpc3RlbnQgaGFuZGxlLiAgVXNpbmcgYSBzaGFyZWQKLSAgICAvLyBw
ZXJzaXN0ZW50IGFueSBudW1iZXIgb2Ygb2JqZWN0cyBjYW4gc2hhcmUgYSByZWZlcmVuY2UgdG8g
YSB2OAotICAgIC8vIG9iamVjdCBhbmQgd2hlbiBpdCBzaG91bGQgbm8gbG9uZ2VyIGJlIGFjY2Vz
c2libGUgdGhlIG9iamVjdCdzCi0gICAgLy8gb3duZXIgY2FuIGNsZWFyIGl0LgorICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyBjbGFzcy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBj
bGFzcyBTaGFyZWRQZXJzaXN0ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkUGVyc2lzdGVu
dDxUPiA+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgc2V0KHY4OjpQZXJzaXN0ZW50PFQ+
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAg
IH0KLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8VD4gZ2V0KCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBkaXNwb3NlSGFuZGxl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX3ZhbHVlLklzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICBtX3ZhbHVlLkRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgbV92YWx1ZS5DbGVh
cigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXJlZFBlcnNpc3RlbnQ8VD4gPiBjcmVhdGUodjg6OlBlcnNpc3RlbnQ8VD4gdmFsdWUpCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8VD4gPiBjcmVhdGUodjg6
OkhhbmRsZTxUPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTaGFyZWRQZXJzaXN0ZW50PFQ+KHZhbHVlKSk7CiAgICAgICAgIH0KLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDxUPiA+IGNyZWF0ZSgpCisgICAgICAgIGlu
bGluZSB2ODo6UGVyc2lzdGVudDxUPiBnZXQoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gY3JlYXRlKHY4OjpQZXJzaXN0ZW50PFQ+KCkpOworICAgICAgICAgICAgcmV0dXJuIG1fdmFs
dWUuZ2V0KCk7CiAgICAgICAgIH0KICAgICBwcml2YXRlOgotICAgICAgICBleHBsaWNpdCBTaGFy
ZWRQZXJzaXN0ZW50KHY4OjpQZXJzaXN0ZW50PFQ+IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHsg
fQotICAgICAgICB2ODo6UGVyc2lzdGVudDxUPiBtX3ZhbHVlOworICAgICAgICBleHBsaWNpdCBT
aGFyZWRQZXJzaXN0ZW50KHY4OjpIYW5kbGU8VD4gdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkgeyB9
CisgICAgICAgIFNjb3BlZFBlcnNpc3RlbnQ8VD4gbV92YWx1ZTsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcApp
bmRleCBmOTIxNDg2NTYxZDgwOTNlYTg3ZmVlOWZlNDQ0ODRmYjA4ODkxYzY1Li41YzkwNDZmZGY3
NzRhZmQzNDdhMjRiY2I2YmFhNmNjYzFjZThmY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZy5jcHAKQEAgLTMxMCw5ICszMTAsOSBAQCB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+IHRvVjhDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFdv
cmxkQwogCiBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZChG
cmFtZSogZnJhbWUpCiB7Ci0gICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xhdGVkQ29udGV4dDsK
LSAgICBpZiAoVU5MSUtFTFkoISEoaXNvbGF0ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6
OmdldEVudGVyZWQoKSkpKQotICAgICAgICByZXR1cm4gaXNvbGF0ZWRDb250ZXh0LT5wZXJDb250
ZXh0RGF0YSgpOworICAgIFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkU2hlbGw7CisgICAgaWYg
KFVOTElLRUxZKCEhKGlzb2xhdGVkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVk
KCkpKSkKKyAgICAgICAgcmV0dXJuIGlzb2xhdGVkU2hlbGwtPnBlckNvbnRleHREYXRhKCk7CiAg
ICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+cGVyQ29udGV4dERhdGEo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcAppbmRleCA4YWJjOWUxNDc1ZWFmMDRlMzNlMjI0YmFmZDk5MmEwYjc5ODM5NDA5Li4zZjU5
NTU0N2M3OWM1NWY2NTI4YzY3NjNmYjcwMTVmMmNhZDMyN2JhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcApAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIgogI2luY2x1ZGUgIk1lbW9yeVVzYWdlU3VwcG9ydC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKQEAgLTE3MCwxMyArMTcxLDM0IEBAIHN0YXRpYyB2b2lk
IGNoZWNrRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciwgRG9j
dW1lbnQqIGRvY3VtCiAgICAgQVNTRVJUKCFkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSB8fCAo
VjhEb2N1bWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3cmFwcGVy
LT5HZXRQcm90b3R5cGUoKSkpID09IGRvY3VtZW50KSk7CiB9CiAKLVBhc3NPd25QdHI8VjhET01X
aW5kb3dTaGVsbD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSkKK3N0YXRp
YyB2b2lkIHNldElzb2xhdGVkV29ybGRGaWVsZChWOERPTVdpbmRvd1NoZWxsKiBzaGVsbCwgdjg6
OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcg
VjhET01XaW5kb3dTaGVsbChmcmFtZSkpOworICAgIHRvSW5uZXJHbG9iYWxPYmplY3QoY29udGV4
dCktPlNldFBvaW50ZXJJbkludGVybmFsRmllbGQoVjhET01XaW5kb3c6OmVudGVyZWRJc29sYXRl
ZFdvcmxkSW5kZXgsIHNoZWxsKTsKIH0KIAotVjhET01XaW5kb3dTaGVsbDo6VjhET01XaW5kb3dT
aGVsbChGcmFtZSogZnJhbWUpCitWOERPTVdpbmRvd1NoZWxsKiBWOERPTVdpbmRvd1NoZWxsOjpl
bnRlcmVkSXNvbGF0ZWRXb3JsZENvbnRleHQoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxW
OERPTVdpbmRvd1NoZWxsKj4odG9Jbm5lckdsb2JhbE9iamVjdCh2ODo6Q29udGV4dDo6R2V0RW50
ZXJlZCgpKS0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKFY4RE9NV2luZG93OjplbnRlcmVk
SXNvbGF0ZWRXb3JsZEluZGV4KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldEluamVjdGVkU2NyaXB0
Q29udGV4dERlYnVnSWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdGFyZ2V0Q29udGV4dCwgaW50
IGRlYnVnSWQpCit7CisgICAgY2hhciBidWZmZXJbMzJdOworICAgIGlmIChkZWJ1Z0lkID09IC0x
KQorICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiaW5qZWN0ZWQiKTsK
KyAgICBlbHNlCisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJpbmpl
Y3RlZCwlZCIsIGRlYnVnSWQpOworICAgIHRhcmdldENvbnRleHQtPlNldERhdGEodjg6OlN0cmlu
Zzo6TmV3KGJ1ZmZlcikpOworfQorCitQYXNzT3duUHRyPFY4RE9NV2luZG93U2hlbGw+IFY4RE9N
V2luZG93U2hlbGw6OmNyZWF0ZShGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldv
cmxkPiB3b3JsZCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFY4RE9NV2luZG93U2hlbGwo
ZnJhbWUsIHdvcmxkKSk7Cit9CisKK1Y4RE9NV2luZG93U2hlbGw6OlY4RE9NV2luZG93U2hlbGwo
RnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQpCiAgICAgOiBt
X2ZyYW1lKGZyYW1lKQorICAgICwgbV93b3JsZCh3b3JsZCkKIHsKIH0KIApAQCAtMTg2LDE4ICsy
MDgsNDEgQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppc0NvbnRleHRJbml0aWFsaXplZCgpCiAg
ICAgcmV0dXJuICFtX2NvbnRleHQuaXNFbXB0eSgpOwogfQogCi12b2lkIFY4RE9NV2luZG93U2hl
bGw6OmRpc3Bvc2VDb250ZXh0KCkKK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6ZGVzdHJveUlzb2xh
dGVkU2hlbGwoKQoreworICAgIGRpc3Bvc2VDb250ZXh0KHRydWUpOworfQorCitzdGF0aWMgdm9p
ZCBpc29sYXRlZENvbnRleHRXZWFrQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBv
YmplY3QsIHZvaWQqIHBhcmFtZXRlcikKIHsKKyAgICAvLyBIYW5kbGUgd2lsbCBiZSBkaXNwb3Nl
ZCBpbiBkZWxldGUuCisgICAgZGVsZXRlIHN0YXRpY19jYXN0PFY4RE9NV2luZG93U2hlbGwqPihw
YXJhbWV0ZXIpOworfQorCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0KGJv
b2wgd2VhaykKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4dC5nZXQoKS5Jc1dlYWsoKSk7CiAgICAg
bV9wZXJDb250ZXh0RGF0YS5jbGVhcigpOwogCi0gICAgaWYgKCFtX2NvbnRleHQuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+d2lsbFJlbGVhc2VTY3Jp
cHRDb250ZXh0KG1fY29udGV4dC5nZXQoKSwgMCk7CisgICAgaWYgKG1fY29udGV4dC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
d2lsbFJlbGVhc2VTY3JpcHRDb250ZXh0KG1fY29udGV4dC5nZXQoKSwgbV93b3JsZC0+d29ybGRJ
ZCgpKTsKKworICAgIGlmICghd2VhaykKICAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVCghbV93b3JsZC0+aXNNYWluV29ybGQoKSk7CisgICAgICAg
IGRlc3Ryb3lHbG9iYWwoKTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIG1fY29udGV4
dC5nZXQoKS5NYWtlV2Vhayh0aGlzLCBpc29sYXRlZENvbnRleHRXZWFrQ2FsbGJhY2spOworICAg
IH0KIAotICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IGRpc3Bvc2luZyB0aGUgY29udGV4dCBo
YXMgY3JlYXRlZCBhIGxvdCBvZgotICAgICAgICAvLyBnYXJiYWdlLiBOb3RpZnkgVjggYWJvdXQg
dGhpcyBzbyBpdCdsbCBoYXZlIGEgY2hhbmNlIG9mIGNsZWFuaW5nCi0gICAgICAgIC8vIGl0IHVw
IHdoZW4gaWRsZS4KLSAgICAgICAgYm9vbCBpc01haW5GcmFtZSA9IG1fZnJhbWUtPnBhZ2UoKSAm
JiAobV9mcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKTsgCisgICAgLy8gSXQn
cyBsaWtlbHkgdGhhdCBkaXNwb3NpbmcgdGhlIGNvbnRleHQgaGFzIGNyZWF0ZWQgYSBsb3Qgb2YK
KyAgICAvLyBnYXJiYWdlLiBOb3RpZnkgVjggYWJvdXQgdGhpcyBzbyBpdCdsbCBoYXZlIGEgY2hh
bmNlIG9mIGNsZWFuaW5nCisgICAgLy8gaXQgdXAgd2hlbiBpZGxlLgorICAgIGlmIChtX3dvcmxk
LT5pc01haW5Xb3JsZCgpKSB7CisgICAgICAgIGJvb2wgaXNNYWluRnJhbWUgPSBtX2ZyYW1lLT5w
YWdlKCkgJiYgKG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSk7CiAgICAg
ICAgIFY4R0NGb3JDb250ZXh0RGlzcG9zZTo6aW5zdGFuY2UoKS5ub3RpZnlDb250ZXh0RGlzcG9z
ZWQoaXNNYWluRnJhbWUpOwogICAgIH0KIH0KQEAgLTI4NCwxMCArMzI5LDEyIEBAIGJvb2wgVjhE
T01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkKIAogICAgIGluaXRpYWxpemVWOElm
TmVlZGVkKCk7CiAKLSAgICBtX2NvbnRleHQuYWRvcHQoY3JlYXRlTmV3Q29udGV4dChtX2dsb2Jh
bC5nZXQoKSwgMCwgMCkpOworICAgIGNyZWF0ZUNvbnRleHQoKTsKICAgICBpZiAobV9jb250ZXh0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYm9vbCBpc01haW5Xb3Js
ZCA9IG1fd29ybGQtPmlzTWFpbldvcmxkKCk7CisKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
IGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0LmdldCgpKTsK
ICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNvbnRleHQpOwogCkBAIC0yOTks
NDcgKzM0Niw2MyBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVJZk5lZWRlZCgp
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBGbGFnIGNvbnRleHQgYXMgaXNvbGF0ZWQuCisg
ICAgaWYgKCFpc01haW5Xb3JsZCkgeworICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBtYWluV2lu
ZG93ID0gbV9mcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCk7CisgICAgICAgIG1haW5XaW5k
b3ctPmluaXRpYWxpemVJZk5lZWRlZCgpOworICAgICAgICBpZiAoIW1haW5XaW5kb3ctPmNvbnRl
eHQoKS5Jc0VtcHR5KCkpCisgICAgICAgICAgICBzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1
Z0lkKG1fY29udGV4dC5nZXQoKSwgbV9mcmFtZS0+c2NyaXB0KCktPmNvbnRleHREZWJ1Z0lkKG1h
aW5XaW5kb3ctPmNvbnRleHQoKSkpOworICAgICAgICBzZXRJc29sYXRlZFdvcmxkRmllbGQodGhp
cywgY29udGV4dCk7CisgICAgfQorCiAgICAgbV9wZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4
dERhdGE6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmICghbV9wZXJDb250ZXh0RGF0
YS0+aW5pdCgpKSB7CiAgICAgICAgIGRpc3Bvc2VDb250ZXh0KCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpZiAoIWluc3RhbGxET01XaW5kb3coY29udGV4dCwgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpKSB7CisgICAgaWYgKCFpbnN0YWxsRE9NV2luZG93
KCkpIHsKICAgICAgICAgZGlzcG9zZUNvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHVwZGF0ZURvY3VtZW50KCk7Ci0KLSAgICBzZXRTZWN1cml0eVRva2VuKCk7
Ci0KLSAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgY29udGV4dC0+QWxsb3dD
b2RlR2VuZXJhdGlvbkZyb21TdHJpbmdzKG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbnRlbnRTZWN1
cml0eVBvbGljeSgpLT5hbGxvd0V2YWwoMCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpTdXBwcmVz
c1JlcG9ydCkpOwotCi0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVhdGVT
Y3JpcHRDb250ZXh0KG1fY29udGV4dC5nZXQoKSwgMCwgMCk7CisgICAgaWYgKGlzTWFpbldvcmxk
KSB7CisgICAgICAgIHVwZGF0ZURvY3VtZW50KCk7CisgICAgICAgIHNldFNlY3VyaXR5VG9rZW4o
KTsKKyAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICBjb250ZXh0
LT5BbGxvd0NvZGVHZW5lcmF0aW9uRnJvbVN0cmluZ3MobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29u
dGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93RXZhbCgwLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlN1cHByZXNzUmVwb3J0KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVXNpbmcgdGhlIGRl
ZmF1bHQgc2VjdXJpdHkgdG9rZW4gbWVhbnMgdGhhdCB0aGUgY2FuQWNjZXNzIGlzIGFsd2F5cwor
ICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGlzIHNsb3cuCisgICAgICAgIC8vIEZJWE1FOiBVc2Ug
dG9rZW5zIHdoZXJlIHBvc3NpYmxlLiBUaGlzIHdpbGwgbWVhbiBrZWVwaW5nIHRyYWNrIG9mIGFs
bAorICAgICAgICAvLyAgICAgICAgY3JlYXRlZCBjb250ZXh0cyBzbyB0aGF0IHRoZXkgY2FuIGFs
bCBiZSB1cGRhdGVkIHdoZW4gdGhlCisgICAgICAgIC8vICAgICAgICBkb2N1bWVudCBkb21haW4K
KyAgICAgICAgLy8gICAgICAgIGNoYW5nZXMuCisgICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVs
dFNlY3VyaXR5VG9rZW4oKTsKKyAgICB9CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
LT5kaWRDcmVhdGVTY3JpcHRDb250ZXh0KG1fY29udGV4dC5nZXQoKSwgbV93b3JsZC0+ZXh0ZW5z
aW9uR3JvdXAoKSwgbV93b3JsZC0+d29ybGRJZCgpKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHdyb25nLiBXZSBzaG91bGQgYWN0dWFsbHkgZG8gdGhpcyBmb3IgdGhlIHByb3BlciB3b3JsZCBv
bmNlCi0gICAgLy8gd2UgZG8gaXNvbGF0ZWQgd29ybGRzIHRoZSBXZWJDb3JlIHdheS4KLSAgICBt
X2ZyYW1lLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoMCk7
CisgICAgaWYgKGlzTWFpbldvcmxkKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbGwgaXMg
cHJvYmFibHkgaW4gdGhlIHdyb25nIHNwb3QsIGJ1dCBjYXVzZXMgYSB0ZXN0IHRpbWVvdXQgZm9y
IGh0dHAvdGVzdHMvbWlzYy93aW5kb3ctb3Blbi10aGVuLXdyaXRlLmh0bWwgd2hlbiByZW1vdmVk
LgorICAgICAgICAvLyBBZGRpdGlvbmFsbHksIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2lu
ZG93U2hlbGwgY2Fubm90IGJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZCB1bnRpbCB0aGlzIGNhbGwg
aXMgZ29uZS4KKyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmRpc3BhdGNoRGlkQ2xlYXJXaW5k
b3dPYmplY3RJbldvcmxkKDApOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi12ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlTmV3Q29udGV4
dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdyb3VwLCBpbnQg
d29ybGRJZCkKK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlQ29udGV4dCgpCiB7Ci0gICAg
djg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHJlc3VsdDsKLQogICAgIC8vIFRoZSBhY3RpdmVE
b2N1bWVudExvYWRlciBwb2ludGVyIGNvdWxkIGJlIDAgZHVyaW5nIGZyYW1lIHNodXRkb3duLgog
ICAgIC8vIEZJWE1FOiBDYW4gd2UgcmVtb3ZlIHRoaXMgY2hlY2s/CiAgICAgaWYgKCFtX2ZyYW1l
LT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGVudmlyb25tZW50IHVz
aW5nIGFuIGVtcHR5IHRlbXBsYXRlIGZvciB0aGUgc2hhZG93CiAgICAgLy8gb2JqZWN0LiBSZXVz
ZSB0aGUgZ2xvYmFsIG9iamVjdCBpZiBvbmUgaGFzIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgogICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT4gZ2xvYmFsVGVtcGxhdGUgPSBWOERP
TVdpbmRvdzo6R2V0U2hhZG93T2JqZWN0VGVtcGxhdGUoKTsKICAgICBpZiAoZ2xvYmFsVGVtcGxh
dGUuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBVc2VkIHRvIGF2b2lkIHNsZWVwIGNhbGxzIGluIHVubG9hZCBoYW5kbGVycy4KICAg
ICBTY3JpcHRDb250cm9sbGVyOjpyZWdpc3RlckV4dGVuc2lvbklmTmVlZGVkKERhdGVFeHRlbnNp
b246OmdldCgpKTsKQEAgLTM1NCw2ICs0MTcsOCBAQCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4
dD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYgog
ICAgIGNvbnN0IFY4RXh0ZW5zaW9ucyYgZXh0ZW5zaW9ucyA9IFNjcmlwdENvbnRyb2xsZXI6OnJl
Z2lzdGVyZWRFeHRlbnNpb25zKCk7CiAgICAgT3duQXJyYXlQdHI8Y29uc3QgY2hhcio+IGV4dGVu
c2lvbk5hbWVzID0gYWRvcHRBcnJheVB0cihuZXcgY29uc3QgY2hhcipbZXh0ZW5zaW9ucy5zaXpl
KCldKTsKICAgICBpbnQgaW5kZXggPSAwOworICAgIGludCBleHRlbnNpb25Hcm91cCA9IG1fd29y
bGQtPmV4dGVuc2lvbkdyb3VwKCk7CisgICAgaW50IHdvcmxkSWQgPSBtX3dvcmxkLT53b3JsZElk
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIC8vIEVuc3VyZSBvdXIgZGF0ZSBleHRlbnNpb24gaXMgYWx3YXlzIGFsbG93ZWQu
CiAgICAgICAgIGlmIChleHRlbnNpb25zW2ldICE9IERhdGVFeHRlbnNpb246OmdldCgpCkBAIC0z
NjMsMTMgKzQyOCwxMyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gVjhET01XaW5kb3dT
aGVsbDo6Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYgogICAgICAgICBleHRlbnNp
b25OYW1lc1tpbmRleCsrXSA9IGV4dGVuc2lvbnNbaV0tPm5hbWUoKTsKICAgICB9CiAgICAgdjg6
OkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gZXh0ZW5zaW9uQ29uZmlndXJhdGlvbihpbmRleCwgZXh0
ZW5zaW9uTmFtZXMuZ2V0KCkpOwotICAgIHJlc3VsdCA9IHY4OjpDb250ZXh0OjpOZXcoJmV4dGVu
c2lvbkNvbmZpZ3VyYXRpb24sIGdsb2JhbFRlbXBsYXRlLCBnbG9iYWwpOwogCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBtX2NvbnRleHQuYWRvcHQodjg6OkNvbnRleHQ6Ok5ldygmZXh0ZW5zaW9u
Q29uZmlndXJhdGlvbiwgZ2xvYmFsVGVtcGxhdGUsIG1fZ2xvYmFsLmdldCgpKSk7CiB9CiAKLWJv
b2wgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0LCBET01XaW5kb3cqIHdpbmRvdykKK2Jvb2wgVjhET01XaW5kb3dTaGVsbDo6
aW5zdGFsbERPTVdpbmRvdygpCiB7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5kb21XaW5kb3coKTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gd2luZG93
V3JhcHBlciA9IFY4T2JqZWN0Q29uc3RydWN0b3I6Om5ld0luc3RhbmNlKFY4RE9NV3JhcHBlcjo6
Y29uc3RydWN0b3JGb3JUeXBlKCZWOERPTVdpbmRvdzo6aW5mbywgd2luZG93KSk7CiAgICAgaWYg
KHdpbmRvd1dyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTMs
NyArNDU4LDcgQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppbnN0YWxsRE9NV2luZG93KHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIERPTVdpbmQKICAgICAvLyAgICAgICBvdXRlciwg
aW5uZXIsIGFuZCBET01XaW5kb3cgaW5zdGFuY2UgYWxsIGFwcGVhciB0byBiZSB0aGUgc2FtZQog
ICAgIC8vICAgICAgIEphdmFTY3JpcHQgb2JqZWN0LgogICAgIC8vCi0gICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBpbm5lckdsb2JhbE9iamVjdCA9IHRvSW5uZXJHbG9iYWxPYmplY3QoY29udGV4
dCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBpbm5lckdsb2JhbE9iamVjdCA9IHRvSW5u
ZXJHbG9iYWxPYmplY3QobV9jb250ZXh0LmdldCgpKTsKICAgICBWOERPTVdyYXBwZXI6OnNldERP
TVdyYXBwZXIoaW5uZXJHbG9iYWxPYmplY3QsICZWOERPTVdpbmRvdzo6aW5mbywgd2luZG93KTsK
ICAgICBpbm5lckdsb2JhbE9iamVjdC0+U2V0UHJvdG90eXBlKHdpbmRvd1dyYXBwZXIpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtNDAxLDExICs0NjYsMTUgQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxs
OjppbnN0YWxsRE9NV2luZG93KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIERPTVdp
bmQKIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFdyYXBwZXIodjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyKQogeworICAgIEFTU0VSVChtX3dvcmxkLT5pc01haW5X
b3JsZCgpKTsKICAgICBtX2RvY3VtZW50LnNldCh3cmFwcGVyKTsKIH0KIAogdm9pZCBWOERPTVdp
bmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFByb3BlcnR5KCkKIHsKKyAgICBpZiAoIW1fd29ybGQt
PmlzTWFpbldvcmxkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHVzZSBhIG5ldyBMb2NhbCBoYW5k
bGUgaGVyZT8KICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dC5n
ZXQoKSk7CkBAIC00MzQsMTEgKzUwMywxNSBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVwZGF0
ZURvY3VtZW50UHJvcGVydHkoKQogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpjbGVhckRvY3VtZW50
UHJvcGVydHkoKQogewogICAgIEFTU0VSVCghbV9jb250ZXh0LmlzRW1wdHkoKSk7CisgICAgaWYg
KCFtX3dvcmxkLT5pc01haW5Xb3JsZCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0
LT5HbG9iYWwoKS0+Rm9yY2VEZWxldGUodjg6OlN0cmluZzo6TmV3KCJkb2N1bWVudCIpKTsKIH0K
IAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpzZXRTZWN1cml0eVRva2VuKCkKIHsKKyAgICBBU1NF
UlQobV93b3JsZC0+aXNNYWluV29ybGQoKSk7CisKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpOwogCiAgICAgLy8gQXNrIHRoZSBkb2N1bWVudCdzIFNlY3VyaXR5
T3JpZ2luIHRvIGdlbmVyYXRlIGEgc2VjdXJpdHkgdG9rZW4uCkBAIC00NjksNiArNTQyLDcgQEAg
dm9pZCBWOERPTVdpbmRvd1NoZWxsOjpzZXRTZWN1cml0eVRva2VuKCkKIAogdm9pZCBWOERPTVdp
bmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudCgpCiB7CisgICAgQVNTRVJUKG1fd29ybGQtPmlzTWFp
bldvcmxkKCkpOwogICAgIGlmIChtX2dsb2JhbC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQpAQCAtNDk0LDYgKzU2OCw4IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBwcm9w
ZXJ0eSwgY29uc3Qgdjg6OkFjCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtQWRk
ZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewor
ICAgIEFTU0VSVChtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKKwogICAgIGlmICghaW5pdGlhbGl6
ZUlmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTA3LDYgKzU4Myw4IEBAIHZvaWQg
VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtQWRkZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgQXRvbWljU3RyaW5nCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVt
b3ZlZChIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7
CisgICAgQVNTRVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOworCiAgICAgaWYgKGRvY3VtZW50
LT5oYXNOYW1lZEl0ZW0obmFtZS5pbXBsKCkpIHx8IGRvY3VtZW50LT5oYXNFeHRyYU5hbWVkSXRl
bShuYW1lLmltcGwoKSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTIzLDEwICs2MDEsMjMgQEAg
dm9pZCBWOERPTVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1SZW1vdmVkKEhUTUxEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEF0b21pY1N0cmkKIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVT
ZWN1cml0eU9yaWdpbigpCiB7CisgICAgQVNTRVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOwog
ICAgIGlmIChtX2NvbnRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIHNldFNlY3VyaXR5VG9rZW4oKTsKIH0KIAordm9p
ZCBWOERPTVdpbmRvd1NoZWxsOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCit7CisgICAgQVNTRVJUKCFtX3dv
cmxkLT5pc01haW5Xb3JsZCgpKTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgaGVyZT8K
KyAgICBpZiAoIW1faXNvbGF0ZWRXb3JsZFNoZWxsU2VjdXJpdHlPcmlnaW4gJiYgIWNvbnRleHQo
KS5Jc0VtcHR5KCkgJiYgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSkg
eworICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgICAgIFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KHY4OjpMb2NhbDx2ODo6
Q29udGV4dD46Ok5ldyhjb250ZXh0KCkpKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDcmVhdGVJc29sYXRlZENvbnRleHQobV9mcmFtZSwgc2NyaXB0U3RhdGUsIHNlY3Vy
aXR5T3JpZ2luLmdldCgpKTsKKyAgICB9CisgICAgbV9pc29sYXRlZFdvcmxkU2hlbGxTZWN1cml0
eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luOworfQorCiB9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaAppbmRleCBjNjE1MjU3MzhkNjgz
ZDliN2FjYWQ2NjU2YTA2MWQ3YWU2ZjIzZmNjLi4wMWQyOTgxN2ZjOGQzMjFjYjE0YTE4ZTA4NjM4
ZTQzMjJhZDY5ZGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdpbmRvd1NoZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5oCkBAIC0zMSw3ICszMSw5IEBACiAjaWZuZGVmIFY4RE9NV2luZG93U2hlbGxfaAog
I2RlZmluZSBWOERPTVdpbmRvd1NoZWxsX2gKIAorI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5o
IgogI2luY2x1ZGUgIlNjb3BlZFBlcnNpc3RlbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogI2luY2x1ZGUgIlY4UGVyQ29udGV4dERhdGEuaCIKICNpbmNsdWRlICJXcmFwcGVyVHlw
ZUluZm8uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTEsNyArNTMsNyBAQCBjbGFz
cyBIVE1MRG9jdW1lbnQ7CiAvLyBwZXJzaXN0IGJldHdlZW4gbmF2aWdhdGlvbnMuCiBjbGFzcyBW
OERPTVdpbmRvd1NoZWxsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxWOERPTVdp
bmRvd1NoZWxsPiBjcmVhdGUoRnJhbWUqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxWOERPTVdp
bmRvd1NoZWxsPiBjcmVhdGUoRnJhbWUqLCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4pOwog
CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRleHQuZ2V0KCk7IH0KIApAQCAtNjgsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0NvbnRleHRJbml0aWFsaXplZCgpOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+IGNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwsIGludCBl
eHRlbnNpb25Hcm91cCwgaW50IHdvcmxkSWQpOwotICAgIHN0YXRpYyBib29sIGluc3RhbGxET01X
aW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwgRE9NV2luZG93Kik7CiAKICAg
ICBib29sIGluaXRpYWxpemVJZk5lZWRlZCgpOwogICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRXcmFw
cGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcik7CkBAIC04MCwxMCArODEsMzggQEAg
cHVibGljOgogCiAgICAgVjhQZXJDb250ZXh0RGF0YSogcGVyQ29udGV4dERhdGEoKSB7IHJldHVy
biBtX3BlckNvbnRleHREYXRhLmdldCgpOyB9CiAKKyAgICBET01XcmFwcGVyV29ybGQqIHdvcmxk
KCkgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxk
U2VjdXJpdHlPcmlnaW4oUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOworICAgIFNlY3VyaXR5
T3JpZ2luKiBpc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKKyAgICAgICAgcmV0dXJuIG1faXNv
bGF0ZWRXb3JsZFNoZWxsU2VjdXJpdHlPcmlnaW4uZ2V0KCk7CisgICAgfTsKKworICAgIC8vIFJl
dHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFzc29jaWF0ZWQgd2l0aAorICAgIC8vIHY4OjpDb250
ZXh0OjpHZXRFbnRlcmVkKCkuIEJlY2F1c2Ugd29ybGRzIGFyZSBpc29sYXRlZCwgdGhlIGVudGly
ZQorICAgIC8vIEphdmFTY3JpcHQgY2FsbCBzdGFjayBzaG91bGQgYmUgZnJvbSB0aGUgc2FtZSBp
c29sYXRlZCB3b3JsZC4KKyAgICAvLyBSZXR1cm5zIDAgaWYgdGhlIGVudGVyZWQgY29udGV4dCBp
cyBmcm9tIHRoZSBtYWluIHdvcmxkLgorICAgIC8vCisgICAgLy8gRklYTUU6IENvbnNpZGVyIGVk
Z2UgY2FzZXMgd2l0aCBET00gbXV0YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKKyAgICAvLyB2aW9s
YXRlIHRoaXMgaW52YXJpYW50LgorICAgIC8vCisgICAgLy8gRklYTUU6IFRoaXMgaXMgcG9vcmx5
IG5hbWVkIGFmdGVyIHRoZSBkZWxldGlvbiBvZiBpc29sYXRlZCBjb250ZXh0cy4KKyAgICBzdGF0
aWMgVjhET01XaW5kb3dTaGVsbCogZ2V0RW50ZXJlZCgpCisgICAgeworICAgICAgICBpZiAoIURP
TVdyYXBwZXJXb3JsZDo6aXNvbGF0ZWRXb3JsZHNFeGlzdCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIGlmICghdjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBlbnRlcmVkSXNvbGF0ZWRXb3JsZENvbnRleHQoKTsK
KyAgICB9CisKKyAgICB2b2lkIGRlc3Ryb3lJc29sYXRlZFNoZWxsKCk7CiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IFY4RE9NV2luZG93U2hlbGwoRnJhbWUqKTsKKyAgICBWOERPTVdpbmRvd1NoZWxs
KEZyYW1lKiwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+KTsKIAotICAgIHZvaWQgZGlzcG9z
ZUNvbnRleHQoKTsKKyAgICB2b2lkIGRpc3Bvc2VDb250ZXh0KGJvb2wgd2VhayA9IGZhbHNlKTsK
IAogICAgIHZvaWQgc2V0U2VjdXJpdHlUb2tlbigpOwogCkBAIC05NCwxMyArMTIzLDIyIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCB1cGRhdGVEb2N1bWVudFByb3BlcnR5KCk7CiAgICAgdm9pZCBjbGVh
ckRvY3VtZW50UHJvcGVydHkoKTsKIAorICAgIHZvaWQgY3JlYXRlQ29udGV4dCgpOworICAgIGJv
b2wgaW5zdGFsbERPTVdpbmRvdygpOworCisgICAgc3RhdGljIFY4RE9NV2luZG93U2hlbGwqIGVu
dGVyZWRJc29sYXRlZFdvcmxkQ29udGV4dCgpOworCiAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAg
UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV93b3JsZDsKIAogICAgIE93blB0cjxWOFBlckNvbnRl
eHREYXRhPiBtX3BlckNvbnRleHREYXRhOwogCiAgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6Q29u
dGV4dD4gbV9jb250ZXh0OwogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9nbG9i
YWw7CiAgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2RvY3VtZW50OworCisgICAg
Ly8gRklYTUU6IEVpdGhlciByZW1vdmUgdGhpcyBvciB0aGUgbWFwIGluIFNjcmlwdENvbnRyb2xs
ZXIuCisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2lzb2xhdGVkV29ybGRTaGVsbFNlY3Vy
aXR5T3JpZ2luOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAppbmRleCAzOTlmMjEwODFiYTcxNjllNTg0Y2IxYTcy
MTYxM2UwZGZjNzgzYWNkLi5lMjQ0NzlhMWMzMWY3NTMyN2Q5ODZiMjg2MjlkMjU5ZDk0ODI2Y2Y4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApAQCAtMzcsNyAr
MzcsNyBAQAogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJWOEN1c3RvbVhQYXRo
TlNSZXNvbHZlci5oIgogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRl
ZENvbnRleHQuaCIKKyNpbmNsdWRlICJWOERPTVdpbmRvd1NoZWxsLmgiCiAjaW5jbHVkZSAiVjhV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKICNpbmNsdWRlIDx2OC5o
PgpAQCAtMTIzLDcgKzEyMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICp3cmFwcGVyOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBWOElz
b2xhdGVkQ29udGV4dCogY29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCk7
CisgICAgICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBjb250ZXh0ID0gVjhET01XaW5kb3dTaGVs
bDo6Z2V0RW50ZXJlZCgpOwogICAgICAgICAgICAgaWYgKExJS0VMWSghY29udGV4dCkpIHsKICAg
ICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Piogd3JhcHBlciA9IG5vZGUt
PndyYXBwZXIoKTsKICAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDk4ZjhlYzkxODkzNjU0NzNjNTc5MGM0MTdjY2ZkOTc2OTg4MmQ2OGIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJWOElzb2xhdGVk
Q29udGV4dC5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgotI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKLSNpbmNsdWRlICJW
OFBlckNvbnRleHREYXRhLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVY4SXNvbGF0ZWRDb250ZXh0KiBWOElzb2xhdGVkQ29udGV4dDo6
aXNvbGF0ZWRDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOElzb2xh
dGVkQ29udGV4dCo+KGdldEdsb2JhbE9iamVjdCh2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpKS0+
R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKFY4RE9NV2luZG93OjplbnRlcmVkSXNvbGF0ZWRX
b3JsZEluZGV4KSk7Ci19Ci0KLXZvaWQgVjhJc29sYXRlZENvbnRleHQ6OmNvbnRleHRXZWFrUmVm
ZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIGlz
b2xhdGVkQ29udGV4dCkKLXsKLSAgICAvLyBPdXIgY29udGV4dCBpcyBnb2luZyBhd2F5LiAgVGlt
ZSB0byBjbGVhbiB1cCB0aGUgd29ybGQuCi0gICAgVjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQg
PSBzdGF0aWNfY2FzdDxWOElzb2xhdGVkQ29udGV4dCo+KGlzb2xhdGVkQ29udGV4dCk7Ci0gICAg
ZGVsZXRlIGNvbnRleHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEluamVjdGVkU2NyaXB0Q29udGV4
dERlYnVnSWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdGFyZ2V0Q29udGV4dCwgaW50IGRlYnVn
SWQpCi17Ci0gICAgY2hhciBidWZmZXJbMzJdOwotICAgIGlmIChkZWJ1Z0lkID09IC0xKQotICAg
ICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiaW5qZWN0ZWQiKTsKLSAgICBl
bHNlCi0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJpbmplY3RlZCwl
ZCIsIGRlYnVnSWQpOwotICAgIHRhcmdldENvbnRleHQtPlNldERhdGEodjg6OlN0cmluZzo6TmV3
KGJ1ZmZlcikpOwotfQotCi1WOElzb2xhdGVkQ29udGV4dDo6VjhJc29sYXRlZENvbnRleHQoRnJh
bWUqIGZyYW1lLCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQpCi0gICAgOiBtX3dv
cmxkKHdvcmxkKSwKLSAgICAgIG1fZnJhbWUoZnJhbWUpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3Bl
IHNjb3BlOwotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IG1haW5Xb3JsZENvbnRleHQgPSBm
cmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmNvbnRleHQoKTsKLSAgICBpZiAobWFpbldv
cmxkQ29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYmUgY3JlYXRpbmcgYSBuZXcgVjhET01XaW5kb3dTaGVsbCBoZXJlIGluc3RlYWQg
b2YgcmlwaW5nIG91dCB0aGUgY29udGV4dC4KLSAgICBtX2NvbnRleHQgPSBTaGFyZWRQZXJzaXN0
ZW50PHY4OjpDb250ZXh0Pjo6Y3JlYXRlKGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+
Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1fd29ybGQtPmV4dGVu
c2lvbkdyb3VwKCksIG1fd29ybGQtPndvcmxkSWQoKSkpOwotICAgIGlmIChtX2NvbnRleHQtPmdl
dCgpLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUnVuIGNvZGUgaW4gdGhl
IG5ldyBjb250ZXh0LgotICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250
ZXh0LT5nZXQoKSk7Ci0KLSAgICBzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKG1fY29u
dGV4dC0+Z2V0KCksIFNjcmlwdENvbnRyb2xsZXI6OmNvbnRleHREZWJ1Z0lkKG1haW5Xb3JsZENv
bnRleHQpKTsKLQotICAgIGdldEdsb2JhbE9iamVjdChtX2NvbnRleHQtPmdldCgpKS0+U2V0UG9p
bnRlckluSW50ZXJuYWxGaWVsZChWOERPTVdpbmRvdzo6ZW50ZXJlZElzb2xhdGVkV29ybGRJbmRl
eCwgdGhpcyk7Ci0KLSAgICBtX3BlckNvbnRleHREYXRhID0gVjhQZXJDb250ZXh0RGF0YTo6Y3Jl
YXRlKG1fY29udGV4dC0+Z2V0KCkpOwotICAgIG1fcGVyQ29udGV4dERhdGEtPmluaXQoKTsKLQot
ICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgZ28gYXdheSBvbmNlIHdlIGhhdmUgYSB3aW5kb3dTaGVs
bCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgotICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hl
bGwoKS0+aW5zdGFsbERPTVdpbmRvdyhtX2NvbnRleHQtPmdldCgpLCBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5kb21XaW5kb3coKSk7Ci0KLSAgICAvLyBVc2luZyB0aGUgZGVmYXVsdCBzZWN1cml0eSB0
b2tlbiBtZWFucyB0aGF0IHRoZSBjYW5BY2Nlc3MgaXMgYWx3YXlzCi0gICAgLy8gY2FsbGVkLCB3
aGljaCBpcyBzbG93LgotICAgIC8vIEZJWE1FOiBVc2UgdG9rZW5zIHdoZXJlIHBvc3NpYmxlLiBU
aGlzIHdpbGwgbWVhbiBrZWVwaW5nIHRyYWNrIG9mIGFsbAotICAgIC8vICAgICAgICBjcmVhdGVk
IGNvbnRleHRzIHNvIHRoYXQgdGhleSBjYW4gYWxsIGJlIHVwZGF0ZWQgd2hlbiB0aGUKLSAgICAv
LyAgICAgICAgZG9jdW1lbnQgZG9tYWluCi0gICAgLy8gICAgICAgIGNoYW5nZXMuCi0gICAgbV9j
b250ZXh0LT5nZXQoKS0+VXNlRGVmYXVsdFNlY3VyaXR5VG9rZW4oKTsKLQotICAgIG1fZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ3JlYXRlU2NyaXB0Q29udGV4dChjb250ZXh0KCksIG1f
d29ybGQtPmV4dGVuc2lvbkdyb3VwKCksIG1fd29ybGQtPndvcmxkSWQoKSk7Ci19Ci0KLXZvaWQg
VjhJc29sYXRlZENvbnRleHQ6OmRlc3Ryb3koKQotewotICAgIG1fcGVyQ29udGV4dERhdGEuY2xl
YXIoKTsKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPndpbGxSZWxlYXNlU2NyaXB0
Q29udGV4dChjb250ZXh0KCksIG1fd29ybGQtPndvcmxkSWQoKSk7Ci0gICAgbV9jb250ZXh0LT5n
ZXQoKS5NYWtlV2Vhayh0aGlzLCAmY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7Ci0gICAg
bV9mcmFtZSA9IDA7Ci19Ci0KLVY4SXNvbGF0ZWRDb250ZXh0Ojp+VjhJc29sYXRlZENvbnRleHQo
KQotewotICAgIG1fY29udGV4dC0+ZGlzcG9zZUhhbmRsZSgpOwotfQotCi12b2lkIFY4SXNvbGF0
ZWRDb250ZXh0OjpzZXRTZWN1cml0eU9yaWdpbihQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBz
ZWN1cml0eU9yaWdpbikKLXsKLSAgICBpZiAoIW1fc2VjdXJpdHlPcmlnaW4gJiYgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSAmJiAhY29udGV4dCgpLklzRW1wdHkoKSkg
ewotICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgICAgIFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KHY4OjpMb2NhbDx2ODo6
Q29udGV4dD46Ok5ldyhjb250ZXh0KCkpKTsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDcmVhdGVJc29sYXRlZENvbnRleHQobV9mcmFtZSwgc2NyaXB0U3RhdGUsIHNlY3Vy
aXR5T3JpZ2luLmdldCgpKTsKLSAgICB9Ci0gICAgbV9zZWN1cml0eU9yaWdpbiA9IHNlY3VyaXR5
T3JpZ2luOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOWQxYzI4MDdkNjQ0ZGMxZmQ1ZGY0Nzk1MzM5NTI0ZmZhZmM2MWFhNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFY4SXNvbGF0ZWRDb250ZXh0X2gKLSNkZWZpbmUgVjhJc29sYXRlZENvbnRleHRf
aAotCi0jaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNl
Q29kZS5oIiAvLyBmb3IgV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZQotI2luY2x1ZGUgIlNoYXJl
ZFBlcnNpc3RlbnQuaCIKLSNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgotI2luY2x1ZGUgPHY4Lmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJhbWU7Ci1jbGFzcyBTZWN1cml0eU9y
aWdpbjsKLWNsYXNzIFY4UGVyQ29udGV4dERhdGE7Ci0KLS8vIFY4SXNvbGF0ZWRDb250ZXh0Ci0v
LwotLy8gVjhJc29sYXRlZENvbnRleHQgcmVwcmVzZW50cyBhIGlzb2xhdGVkIGV4ZWN1dGlvbiBl
bnZpcm9ubWVudCBmb3IKLS8vIEphdmFTY3JpcHQuICBFYWNoIGlzb2xhdGVkIHdvcmxkIGV4ZWN1
dGVzIGluIHBhcmFsbGVsIHdpdGggdGhlIG1haW4KLS8vIEphdmFTY3JpcHQgd29ybGQuICBBbiBp
c29sYXRlZCB3b3JsZCBoYXMgYWNjZXNzIHRvIHRoZSBzYW1lIERPTSBkYXRhCi0vLyBzdHJ1Y3R1
cmVzIGFzIHRoZSBtYWluIHdvcmxkIGJ1dCBub25lIG9mIHRoZSBKYXZhU2NyaXB0IHBvaW50ZXJz
LgotLy8KLS8vIEl0IGlzIGFuIGVycm9yIHRvIGV2ZXIgc2hhcmUgYSBKYXZhU2NyaXB0IHBvaW50
ZXIgYmV0d2VlbiB0d28gaXNvbGF0ZWQKLS8vIHdvcmxkcyBvciBiZXR3ZWVuIGFuIGlzb2xhdGVk
IHdvcmxkIGFuZCB0aGUgbWFpbiB3b3JsZC4gIEJlY2F1c2UKLS8vIGlzb2xhdGVkIHdvcmxkcyBo
YXZlIGFjY2VzcyB0byB0aGUgRE9NLCB0aGV5IG5lZWQgdGhlaXIgb3duIERPTSB3cmFwcGVycwot
Ly8gdG8gYXZvaWQgaGF2aW5nIHBvaW50ZXJzIHRvIHRoZSBtYWluIHdvcmxkJ3MgRE9NIHdyYXBw
ZXJzICh3aGljaCBhcmUKLS8vIEphdmFTY3JpcHQgb2JqZWN0cykuCi1jbGFzcyBWOElzb2xhdGVk
Q29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgLy8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8g
ZGVzdHJveSBpdCwgY2FsbCBkZXN0cm95KCkuCi0gICAgLy8gVGhpcyB3aWxsIGRlbGV0ZSB0aGUg
aXNvbGF0ZWQgd29ybGQgd2hlbiB0aGUgY29udGV4dCBpdCBvd25zIGlzIEdDJ2QuCi0gICAgVjhJ
c29sYXRlZENvbnRleHQoRnJhbWUqLCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4pOwotICAg
IH5WOElzb2xhdGVkQ29udGV4dCgpOwotCi0gICAgLy8gQ2FsbCB0aGlzIHRvIGRlc3Ryb3kgdGhl
IGlzb2xhdGVkIHdvcmxkLiBJdCB3aWxsIGJlIGRlbGV0ZWQgc29tZXRpbWUKLSAgICAvLyBhZnRl
ciB0aGlzIGNhbGwsIG9uY2UgYWxsIHNjcmlwdCByZWZlcmVuY2VzIHRvIHRoZSB3b3JsZCdzIGNv
bnRleHQKLSAgICAvLyBoYXZlIGJlZW4gZHJvcHBlZC4KLSAgICB2b2lkIGRlc3Ryb3koKTsKLQot
ICAgIC8vIFJldHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFzc29jaWF0ZWQgd2l0aAotICAgIC8v
IHY4OjpDb250ZXh0OjpHZXRFbnRlcmVkKCkuICBCZWNhdXNlIHdvcmxkcyBhcmUgaXNvbGF0ZWQs
IHRoZSBlbnRpcmUKLSAgICAvLyBKYXZhU2NyaXB0IGNhbGwgc3RhY2sgc2hvdWxkIGJlIGZyb20g
dGhlIHNhbWUgaXNvbGF0ZWQgd29ybGQuCi0gICAgLy8gUmV0dXJucyAwIGlmIHRoZSBlbnRlcmVk
IGNvbnRleHQgaXMgZnJvbSB0aGUgbWFpbiB3b3JsZC4KLSAgICAvLwotICAgIC8vIEZJWE1FOiBD
b25zaWRlciBlZGdlIGNhc2VzIHdpdGggRE9NIG11dGF0aW9uIGV2ZW50cyB0aGF0IG1pZ2h0Ci0g
ICAgLy8gdmlvbGF0ZSB0aGlzIGludmFyaWFudC4KLSAgICAvLwotICAgIHN0YXRpYyBWOElzb2xh
dGVkQ29udGV4dCogZ2V0RW50ZXJlZCgpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGEgdGVt
cG9yYXJ5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gRXNzZW50aWFsbHksCi0gICAgICAgIC8v
IEdldEhpZGRlblZhbHVlIGlzIHRvbyBzbG93IGZvciB0aGlzIGNvZGUgcGF0aC4gV2UgbmVlZCB0
byBnZXQgdGhlCi0gICAgICAgIC8vIFY4IHRlYW0gdG8gYWRkIGEgcmVhbCBwcm9wZXJ0eSB0byB2
ODo6Q29udGV4dCBmb3IgaXNvbGF0ZWQgd29ybGRzLgotICAgICAgICAvLyBVbnRpbCB0aGVuLCB3
ZSBvcHRpbWl6ZSB0aGUgY29tbW9uIGNhc2Ugb2Ygbm90IGhhdmluZyBhbnkgaXNvbGF0ZWQKLSAg
ICAgICAgLy8gd29ybGRzIGF0IGFsbC4KLSAgICAgICAgaWYgKCFET01XcmFwcGVyV29ybGQ6Omlz
b2xhdGVkV29ybGRzRXhpc3QoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAo
IXY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gaXNvbGF0ZWRDb250ZXh0KCk7Ci0gICAgfQotCi0gICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC0+Z2V0KCk7IH0KLSAgICBQYXNz
UmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gc2hhcmVkQ29udGV4dCgpIHsg
cmV0dXJuIG1fY29udGV4dDsgfQotCi0gICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCgpIGNvbnN0
IHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KLQotICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCk7IH0KLSAgICB2
b2lkIHNldFNlY3VyaXR5T3JpZ2luKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKLQotICAg
IFY4UGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRhKCkgeyByZXR1cm4gbV9wZXJDb250ZXh0
RGF0YS5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGdldEdsb2JhbE9iamVjdCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+
R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBDYWxsZWQgYnkgdGhl
IGdhcmJhZ2UgY29sbGVjdG9yIHdoZW4gb3VyIEphdmFTY3JpcHQgY29udGV4dCBpcyBhYm91dAot
ICAgIC8vIHRvIGJlIGRlc3Ryb3llZC4KLSAgICBzdGF0aWMgdm9pZCBjb250ZXh0V2Vha1JlZmVy
ZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29s
YXRlZENvbnRleHQpOwotCi0gICAgc3RhdGljIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENv
bnRleHQoKTsKLQotICAgIC8vIFRoZSB1bmRlcmx5aW5nIHY4OjpDb250ZXh0LiBUaGlzIG9iamVj
dCBpcyBrZWVwIG9uIHRoZSBoZWFwIGFzCi0gICAgLy8gbG9uZyBhcyB8bV9jb250ZXh0fCBoYXMg
bm90IGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQuCi0gICAgUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8
djg6OkNvbnRleHQ+ID4gbV9jb250ZXh0OwotCi0gICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4g
bV93b3JsZDsKLQotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsK
LQotICAgIEZyYW1lKiBtX2ZyYW1lOwotCi0gICAgT3duUHRyPFY4UGVyQ29udGV4dERhdGE+IG1f
cGVyQ29udGV4dERhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBWOElzb2xhdGVkQ29udGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDhmYmRlOTM1ZTM3MDE4OWVmNzk5OTY0NmQ0
MDUzNjZmZDMwZTRkNWEuLmNkYjAwMTc5ZjkzYWRhNWJmOTQ2MTEwMTljMTc3OWFiOGM1OTRkYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVu
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVu
ZXIuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiU2Ny
aXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4RE9N
V3JhcHBlci5oIgogI2luY2x1ZGUgIlY4RG9jdW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmxkQ29udGV4dEhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwCmluZGV4IDQ4OGYzYjUyN2I2ODMx
NDI2YjRmOWQ0MGQ0ODcxMTcwOTE1ZWExNDguLjE4MDI4MGFiYzFjMTMzOTM3ZWIxNTQ1MjgzMjA3
ZDdlNzBiNWMxZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmxk
Q29udGV4dEhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ybGRD
b250ZXh0SGFuZGxlLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldvcmxkQ29udGV4
dEhhbmRsZS5oIgogCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlY4
SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDE1ICs0MiwyMiBAQCBXb3JsZENvbnRleHRIYW5kbGU6
OldvcmxkQ29udGV4dEhhbmRsZShXb3JsZFRvVXNlIHdvcmxkVG9Vc2UpCiAgICAgaWYgKHdvcmxk
VG9Vc2UgPT0gVXNlTWFpbldvcmxkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoVjhJc29s
YXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKQot
ICAgICAgICBtX2NvbnRleHQgPSBjb250ZXh0LT5zaGFyZWRDb250ZXh0KCk7CisgICAgVjhET01X
aW5kb3dTaGVsbCogc2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCk7CisgICAg
aWYgKExJS0VMWSghc2hlbGwpKSB7CisgICAgICAgIG1fd29ybGRUb1VzZSA9IFVzZU1haW5Xb3Js
ZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVCghc2hlbGwtPmNvbnRleHQo
KS5Jc0VtcHR5KCkpOworICAgIG1fY29udGV4dCA9IFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+OjpjcmVhdGUoc2hlbGwtPmNvbnRleHQoKSk7CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4
dD4gV29ybGRDb250ZXh0SGFuZGxlOjphZGp1c3RlZENvbnRleHQoU2NyaXB0Q29udHJvbGxlciog
c2NyaXB0KSBjb25zdAogewotICAgIGlmIChtX3dvcmxkVG9Vc2UgPT0gVXNlTWFpbldvcmxkIHx8
ICFtX2NvbnRleHQgfHwgbV9jb250ZXh0LT5nZXQoKS5Jc0VtcHR5KCkpCisgICAgaWYgKG1fd29y
bGRUb1VzZSA9PSBVc2VNYWluV29ybGQpCiAgICAgICAgIHJldHVybiBzY3JpcHQtPm1haW5Xb3Js
ZENvbnRleHQoKTsKIAorICAgIEFTU0VSVCghbV9jb250ZXh0LT5nZXQoKS5Jc0VtcHR5KCkpOwog
ICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0LT5nZXQoKSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERv
Y3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERv
Y3VtZW50Q3VzdG9tLmNwcAppbmRleCA1OTExNDRmOGI2NTY4OGQ2MzY4MzVjNTFjMmY0NDk0OGVh
MjRhZWY2Li43ODFhN2I3MjY2ZmRhNWQxYTc1MWFjM2JlOGY0NTcyOTFmMThmZTFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0
b20uY3BwCkBAIC00NCw5ICs0NCw5IEBACiAjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaCIKICNpbmNsdWRlICJWOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlY4RE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJWOERPTVdpbmRvd1NoZWxsLmgiCiAj
aW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVjhIVE1MRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1
ZGUgIlY4VG91Y2guaCIKICNpbmNsdWRlICJWOFRvdWNoTGlzdC5oIgpAQCAtMTMwLDcgKzEzMCw3
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KERvY3VtZW50KiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwcGVyID0gVjhEb2N1bWVudDo6d3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUs
IGZvcmNlTmV3T2JqZWN0KTsKICAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB3cmFwcGVyOwotICAgIGlmICghVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkg
eworICAgIGlmICghVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpKSB7CiAgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpKQogICAgICAgICAgICAgZnJhbWUtPnNjcmlw
dCgpLT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERv
Y3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggYmU1MzQzMTA5NjVmMDEwZDczNGNhNTc1ZGE0ZmY5
ODNjOTNhZjMzZi4uZTUwYTI2MDNlNDQ3YTFmNjM0YzliNmYzYTliY2M4OGE4MjQ4M2FkNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
RG9jdW1lbnRDdXN0b20uY3BwCkBAIC00MCw5ICs0MCw5IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNp
bmNsdWRlICJWOERPTVdpbmRvd1NoZWxsLmgiCiAjaW5jbHVkZSAiVjhIVE1MQWxsQ29sbGVjdGlv
bi5oIgogI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJWOElzb2xhdGVk
Q29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UmVjdXJzaW9uU2Nv
cGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC0xODMsNyArMTgz
LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTERvY3VtZW50KiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ28KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBWOEhUTUxEb2N1bWVudDo6d3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKICAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiB3cmFwcGVyOwotICAgIGlmICghVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVy
ZWQoKSkgeworICAgIGlmICghVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpKSB7CiAgICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpKQogICAgICAgICAgICAgZnJhbWUt
PnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1ZHRG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IGE2ZjQxYjZkYjUyNjVhYTBkNmJhYTJmZmM4
YzY4NzJjNDQ5M2FjYjguLmRhMTY2YTdhZmZmM2I3YWM1OTVhMDI4MmJlZWY5NzU4MGU1Y2E4M2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3Vt
ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJWOFNWR0Rv
Y3VtZW50LmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250
ZXh0LmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dTaGVsbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU1ZHRG9j
dW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db24KICAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFNWR0RvY3VtZW50Ojp3cmFwKGltcGwsIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogICAgIGlmICh3cmFwcGVy
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgaWYgKCFWOElzb2xhdGVk
Q29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CisgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRF
bnRlcmVkKCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpCiAg
ICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50
V3JhcHBlcih3cmFwcGVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3Bw
CmluZGV4IDU5OTRlYTM4MTJiMDA1OTE0ZWYwZWNkZDMwYTdjOWEyZGFiOTI3NTAuLjA1MGI3ZmI0
ZDM4NmE3MWY5N2NiZWE0YTk1OWUxMmJhZjdhNzc5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29u
c3RydWN0b3IuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiT3JpZ2luQWNjZXNzRW50
cnkuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5o
IgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3dT
aGVsbC5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4
dC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgpAQCAtNTUsOCAr
NTUsOCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVxdWVzdDo6Y29uc3RydWN0
b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAKICAgICBSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luOwotICAgIGlmIChWOElzb2xhdGVkQ29udGV4
dCogaXNvbGF0ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkKLSAg
ICAgICAgc2VjdXJpdHlPcmlnaW4gPSBpc29sYXRlZENvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7
CisgICAgaWYgKFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkV29ybGRTaGVsbCA9IFY4RE9NV2lu
ZG93U2hlbGw6OmdldEVudGVyZWQoKSkKKyAgICAgICAgc2VjdXJpdHlPcmlnaW4gPSBpc29sYXRl
ZFdvcmxkU2hlbGwtPmlzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbigpOwogCiAgICAgUmVmUHRy
PFhNTEh0dHBSZXF1ZXN0PiB4bWxIdHRwUmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgc2VjdXJpdHlPcmlnaW4pOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>