<?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>235259</bug_id>
          
          <creation_ts>2022-01-14 17:47:15 -0800</creation_ts>
          <short_desc>Introduce dynamicDowncast&lt;&gt;() for convenience</short_desc>
          <delta_ts>2022-01-15 17:35:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1831136</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-01-14 17:47:15 -0800</bug_when>
    <thetext>Introduce dynamicDowncast&lt;&gt;() for convenience. It can result in more concise code for the common pattern where we call `is&lt;T&gt;(x)` and then `downcast&lt;T&gt;(x)`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831137</commentid>
    <comment_count>1</comment_count>
      <attachid>449237</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-01-14 17:51:27 -0800</bug_when>
    <thetext>Created attachment 449237
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831238</commentid>
    <comment_count>2</comment_count>
      <attachid>449266</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-01-15 12:48:51 -0800</bug_when>
    <thetext>Created attachment 449266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831252</commentid>
    <comment_count>3</comment_count>
      <attachid>449266</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-15 13:55:49 -0800</bug_when>
    <thetext>Comment on attachment 449266
Patch

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

Looks good.

I kind of liked how the other pattern resulted in a reference and fewer lines of code later in the function that were using a pointer where you had to understand why it’s not null checked. But on the other hand the two separate function template calls were not good. This is better. Too bad this is not like Swift where we can null check and end up with something you can use like a reference.

&gt; Source/WebCore/bindings/js/JSLazyEventListener.cpp:93
&gt;      auto&amp; node = downcast&lt;Node&gt;(eventTarget);
&gt; -    if (!is&lt;SVGElement&gt;(node))
&gt; +    auto* element = dynamicDowncast&lt;SVGElement&gt;(node);
&gt; +    if (!element || !element-&gt;correspondingElement())
&gt;          return false;

Node is never used here. I think this should just be:

    auto* element = dynamicDowncast&lt;SVGElement&gt;(eventTarget);

And if that doesn’t compile, then we should fix the underlying mechanism so it does.

&gt; Source/WebCore/bindings/js/JSLazyEventListener.cpp:131
&gt; -    Element* element = m_originalNode &amp;&amp; !m_originalNode-&gt;isDocumentNode() &amp;&amp; is&lt;Element&gt;(*m_originalNode) ? downcast&lt;Element&gt;(m_originalNode.get()) : nullptr;
&gt; +    Element* element = m_originalNode &amp;&amp; !m_originalNode-&gt;isDocumentNode() ? dynamicDowncast&lt;Element&gt;(m_originalNode.get()) : nullptr;

Since the cast is to Element, and a document node is not an element, there is no need to call isDocumentNode:

    auto* element = dynamicDowncast&lt;Element&gt;(m_originalNode.get());

&gt; Source/WebCore/dom/TypedElementDescendantIterator.h:211
&gt; +    if (auto elementDescendant = dynamicDowncast&lt;ElementType&gt;(descendant))
&gt; +        return ElementDescendantIterator&lt;ElementType&gt;(m_root, &amp;elementDescendant);

The &amp;elementDescendant here looks wrong, pointer to a pointer. Surprised it compiles.

Also, above we use the name descendantElement for the same thing. I like that name better.

&gt; Source/WebCore/page/DragController.cpp:349
&gt;      if (inputElement-&gt;isTextButton() &amp;&amp; is&lt;ShadowRoot&gt;(inputElement-&gt;treeScope().rootNode())) {
&gt;          auto&amp; host = *downcast&lt;ShadowRoot&gt;(inputElement-&gt;treeScope().rootNode()).host();
&gt; -        inputElement = is&lt;HTMLInputElement&gt;(host) ? &amp;downcast&lt;HTMLInputElement&gt;(host) : nullptr;
&gt; +        inputElement = dynamicDowncast&lt;HTMLInputElement&gt;(host);
&gt;      }

Might just want to do one longer expression here instead of two lines. Wouldn’t we want to use dynamicDowncast&lt;ShadowRoot&gt; here too? Even better if we had a function that returned the host, and null if the root node is not a ShadowRoot. Maybe such a function does exist?

&gt; Source/WebCore/page/DragController.cpp:511
&gt;      if (is&lt;PluginDocument&gt;(document)) {
&gt; -        const Widget* widget = downcast&lt;PluginDocument&gt;(*document).pluginWidget();
&gt; -        const PluginViewBase* pluginView = is&lt;PluginViewBase&gt;(widget) ? downcast&lt;PluginViewBase&gt;(widget) : nullptr;
&gt; +        auto* widget = downcast&lt;PluginDocument&gt;(*document).pluginWidget();
&gt; +        auto* pluginView = dynamicDowncast&lt;PluginViewBase&gt;(widget);
&gt;  
&gt;          if (pluginView)
&gt;              pluginDocumentAcceptsDrags = pluginView-&gt;shouldAllowNavigationFromDrags();

Local variable doesn’t help here. I would write:

    if (auto* pluginDocument = dynamicDowncast&lt;PluginDocument&gt;(document)) {
        if (auto* view = dynamicDowncast&lt;PluginViewBase&gt;(pluginDocument-&gt;pluginWidget())
            pluginDocumentAcceptsDrags = view-&gt;shouldAllowNavigationFromDrags();
    }

&gt; Source/WebCore/platform/DragImage.cpp:83
&gt; -        : element(is&lt;Element&gt;(node) ? &amp;downcast&lt;Element&gt;(node) : nullptr)
&gt; +        : element(dynamicDowncast&lt;Element&gt;(node))

Makes me wonder if we really want the parentElement here when the node is not an element. Presumably not, but so strange that we just don’t tell any element if a non-element node is being dragged. Maybe in practice the node is always an element and the checking here is a dead code path.

&gt; Source/WebKitLegacy/mac/DOM/DOMUIKitExtensions.mm:275
&gt;              if (is&lt;RenderBox&gt;(*renderer)) {
&gt; -                RenderBox&amp; asBox = renderer-&gt;enclosingBox();
&gt; -                RenderObject* parent = asBox.parent();
&gt; -                RenderBox* parentRenderBox = is&lt;RenderBox&gt;(parent) ? downcast&lt;RenderBox&gt;(parent) : nullptr;
&gt; +                auto&amp; asBox = renderer-&gt;enclosingBox();
&gt; +                auto* parentRenderBox = dynamicDowncast&lt;RenderBox&gt;(asBox.parent());
&gt;                  if (parentRenderBox &amp;&amp; asBox.width() == parentRenderBox-&gt;width()) {
&gt;                      noCost = YES;
&gt;                  }

Noticed I am really not happy with the asBox argument name, because it’s not renderer casted to RenderBox, even though the code above does check that renderer is a RenderBox. Not a new concern, but messy. The variable name is basically an incorrect comment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831262</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-01-15 14:33:03 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 449266 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=449266&amp;action=review
&gt; 
&gt; Looks good.
&gt; 
&gt; I kind of liked how the other pattern resulted in a reference and fewer
&gt; lines of code later in the function that were using a pointer where you had
&gt; to understand why it’s not null checked. But on the other hand the two
&gt; separate function template calls were not good. This is better. Too bad this
&gt; is not like Swift where we can null check and end up with something you can
&gt; use like a reference.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSLazyEventListener.cpp:93
&gt; &gt;      auto&amp; node = downcast&lt;Node&gt;(eventTarget);
&gt; &gt; -    if (!is&lt;SVGElement&gt;(node))
&gt; &gt; +    auto* element = dynamicDowncast&lt;SVGElement&gt;(node);
&gt; &gt; +    if (!element || !element-&gt;correspondingElement())
&gt; &gt;          return false;
&gt; 
&gt; Node is never used here. I think this should just be:
&gt; 
&gt;     auto* element = dynamicDowncast&lt;SVGElement&gt;(eventTarget);
&gt; 
&gt; And if that doesn’t compile, then we should fix the underlying mechanism so
&gt; it does.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSLazyEventListener.cpp:131
&gt; &gt; -    Element* element = m_originalNode &amp;&amp; !m_originalNode-&gt;isDocumentNode() &amp;&amp; is&lt;Element&gt;(*m_originalNode) ? downcast&lt;Element&gt;(m_originalNode.get()) : nullptr;
&gt; &gt; +    Element* element = m_originalNode &amp;&amp; !m_originalNode-&gt;isDocumentNode() ? dynamicDowncast&lt;Element&gt;(m_originalNode.get()) : nullptr;
&gt; 
&gt; Since the cast is to Element, and a document node is not an element, there
&gt; is no need to call isDocumentNode:
&gt; 
&gt;     auto* element = dynamicDowncast&lt;Element&gt;(m_originalNode.get());
&gt; 
&gt; &gt; Source/WebCore/dom/TypedElementDescendantIterator.h:211
&gt; &gt; +    if (auto elementDescendant = dynamicDowncast&lt;ElementType&gt;(descendant))
&gt; &gt; +        return ElementDescendantIterator&lt;ElementType&gt;(m_root, &amp;elementDescendant);
&gt; 
&gt; The &amp;elementDescendant here looks wrong, pointer to a pointer. Surprised it
&gt; compiles.
&gt; 
&gt; Also, above we use the name descendantElement for the same thing. I like
&gt; that name better.
&gt; 
&gt; &gt; Source/WebCore/page/DragController.cpp:349
&gt; &gt;      if (inputElement-&gt;isTextButton() &amp;&amp; is&lt;ShadowRoot&gt;(inputElement-&gt;treeScope().rootNode())) {
&gt; &gt;          auto&amp; host = *downcast&lt;ShadowRoot&gt;(inputElement-&gt;treeScope().rootNode()).host();
&gt; &gt; -        inputElement = is&lt;HTMLInputElement&gt;(host) ? &amp;downcast&lt;HTMLInputElement&gt;(host) : nullptr;
&gt; &gt; +        inputElement = dynamicDowncast&lt;HTMLInputElement&gt;(host);
&gt; &gt;      }
&gt; 
&gt; Might just want to do one longer expression here instead of two lines.
&gt; Wouldn’t we want to use dynamicDowncast&lt;ShadowRoot&gt; here too? Even better if
&gt; we had a function that returned the host, and null if the root node is not a
&gt; ShadowRoot. Maybe such a function does exist?
&gt; 
&gt; &gt; Source/WebCore/page/DragController.cpp:511
&gt; &gt;      if (is&lt;PluginDocument&gt;(document)) {
&gt; &gt; -        const Widget* widget = downcast&lt;PluginDocument&gt;(*document).pluginWidget();
&gt; &gt; -        const PluginViewBase* pluginView = is&lt;PluginViewBase&gt;(widget) ? downcast&lt;PluginViewBase&gt;(widget) : nullptr;
&gt; &gt; +        auto* widget = downcast&lt;PluginDocument&gt;(*document).pluginWidget();
&gt; &gt; +        auto* pluginView = dynamicDowncast&lt;PluginViewBase&gt;(widget);
&gt; &gt;  
&gt; &gt;          if (pluginView)
&gt; &gt;              pluginDocumentAcceptsDrags = pluginView-&gt;shouldAllowNavigationFromDrags();
&gt; 
&gt; Local variable doesn’t help here. I would write:
&gt; 
&gt;     if (auto* pluginDocument = dynamicDowncast&lt;PluginDocument&gt;(document)) {
&gt;         if (auto* view =
&gt; dynamicDowncast&lt;PluginViewBase&gt;(pluginDocument-&gt;pluginWidget())
&gt;             pluginDocumentAcceptsDrags =
&gt; view-&gt;shouldAllowNavigationFromDrags();
&gt;     }
&gt; 
&gt; &gt; Source/WebCore/platform/DragImage.cpp:83
&gt; &gt; -        : element(is&lt;Element&gt;(node) ? &amp;downcast&lt;Element&gt;(node) : nullptr)
&gt; &gt; +        : element(dynamicDowncast&lt;Element&gt;(node))
&gt; 
&gt; Makes me wonder if we really want the parentElement here when the node is
&gt; not an element. Presumably not, but so strange that we just don’t tell any
&gt; element if a non-element node is being dragged. Maybe in practice the node
&gt; is always an element and the checking here is a dead code path.
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/DOM/DOMUIKitExtensions.mm:275
&gt; &gt;              if (is&lt;RenderBox&gt;(*renderer)) {
&gt; &gt; -                RenderBox&amp; asBox = renderer-&gt;enclosingBox();
&gt; &gt; -                RenderObject* parent = asBox.parent();
&gt; &gt; -                RenderBox* parentRenderBox = is&lt;RenderBox&gt;(parent) ? downcast&lt;RenderBox&gt;(parent) : nullptr;
&gt; &gt; +                auto&amp; asBox = renderer-&gt;enclosingBox();
&gt; &gt; +                auto* parentRenderBox = dynamicDowncast&lt;RenderBox&gt;(asBox.parent());
&gt; &gt;                  if (parentRenderBox &amp;&amp; asBox.width() == parentRenderBox-&gt;width()) {
&gt; &gt;                      noCost = YES;
&gt; &gt;                  }
&gt; 
&gt; Noticed I am really not happy with the asBox argument name, because it’s not
&gt; renderer casted to RenderBox, even though the code above does check that
&gt; renderer is a RenderBox. Not a new concern, but messy. The variable name is
&gt; basically an incorrect comment!

Wow, I just looked deeper at the code and this essentially casts the renderer to a RenderBox is a very weird way.

enclosingBox() is defined as:
```
RenderBox&amp; RenderObject::enclosingBox() const
{
    return *lineageOfType&lt;RenderBox&gt;(const_cast&lt;RenderObject&amp;&gt;(*this)).first();
}
```

Since we previously checked that renderer was a RenderBox, lineageOfType&lt;RenderBox&gt;(renderer).first() WILL actually return the renderer casted to a RenderBox.

So weird, I&apos;ll look into using a simple cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831263</commentid>
    <comment_count>5</comment_count>
      <attachid>449271</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-01-15 14:36:45 -0800</bug_when>
    <thetext>Created attachment 449271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831265</commentid>
    <comment_count>6</comment_count>
      <attachid>449266</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-15 14:40:24 -0800</bug_when>
    <thetext>Comment on attachment 449266
Patch

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

&gt;&gt; Source/WebCore/page/DragController.cpp:349
&gt;&gt;      }
&gt; 
&gt; Might just want to do one longer expression here instead of two lines. Wouldn’t we want to use dynamicDowncast&lt;ShadowRoot&gt; here too? Even better if we had a function that returned the host, and null if the root node is not a ShadowRoot. Maybe such a function does exist?

And, yes Node::shadowHost() is that function. And given the rest of the context, the new code should just be this:

    if (inputElement-&gt;isTextButton())
        inputElement = dynamicDowncast&lt;HTMLInputElement&gt;(inputElement-&gt;shadowHost());

I studied the function and we don’t need other checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831267</commentid>
    <comment_count>7</comment_count>
      <attachid>449272</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-01-15 14:51:15 -0800</bug_when>
    <thetext>Created attachment 449272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831280</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-15 17:34:33 -0800</bug_when>
    <thetext>Committed r288069 (246089@main): &lt;https://commits.webkit.org/246089@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 449272.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831281</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-15 17:35:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/87643782&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449237</attachid>
            <date>2022-01-14 17:51:27 -0800</date>
            <delta_ts>2022-01-15 12:48:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235259-20220114175126.patch</filename>
            <type>text/plain</type>
            <size>80779</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDYxNGUzMjY5OGYzZTJjMGVmY2ZhMmI0
NjJjZjQwYzI0NDNhZGNjNWMuLjlkM2Y0N2ZmNGNiYjRlMjRmOWQ0Zjg5OGJkMzA3NjQ4YjEzZDcy
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDEtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgZHluYW1pY0Rvd25jYXN0PD4oKSBmb3Ig
Y29udmVuaWVuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNTI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEludHJvZHVjZSBkeW5hbWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5jZS4gSXQgY2Fu
IHJlc3VsdCBpbiBtb3JlIGNvbmNpc2UgY29kZSBmb3IgdGhlIGNvbW1vbiBwYXR0ZXJuCisgICAg
ICAgIHdoZXJlIHdlIGNhbGwgYGlzPFQ+KHgpYCBhbmQgdGhlbiBgZG93bmNhc3Q8VD4oeClgLgor
CisgICAgICAgICogd3RmL1R5cGVDYXN0cy5oOgorICAgICAgICAoV1RGOjpkeW5hbWljRG93bmNh
c3QpOgorCiAyMDIyLTAxLTE0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IFdURjo6VVVJRCdzIHBvdGVudGlhbCBjb2xsaXNpb24gd2l0aCBlbXB0eSBh
bmQgZGVsZXRlZCB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1N2Q5ZTBlMGFjNDg0ODcxODUwYTBjN2Uz
ZjY2MTAwYWU0MGUxODlmLi5mOTc3ODljMTJmNjNiYjJhN2NhM2RiZTI5Y2NjMTJhZTM0YWZmMTA0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU3IEBACisyMDIyLTAxLTE0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIGR5bmFtaWNEb3duY2FzdDw+
KCkgZm9yIGNvbnZlbmllbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUyNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTdGFydCBhZG9wdGluZyBkeW5hbWljRG93bmNhc3Q8PigpLgorCisgICAgICAg
ICogYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmlt
YXRpb246OnNldFRpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6d2ls
bENoYW5nZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6dGltaW5n
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6aW52YWxpZGF0ZUVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246OmZpbmlzaE5vdGlmaWNhdGlv
blN0ZXBzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6cmVzb2x2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246OnBlcnNpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViQW5pbWF0aW9uOjpjb21taXRTdHlsZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzQ2xvbmVJblNoYWRvd1RyZWVPZlNWR1VzZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rp
b24gY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KToKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0
OjppbnNlcnRSdWxlKToKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdHRyOjpzdHlsZSk6CisgICAgICAgICogZG9tL0Jyb2FkY2FzdENoYW5uZWwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QnJvYWRjYXN0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6ZW5zdXJl
T25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkJyb2FkY2FzdENoYW5uZWw6OmlzRWxp
Z2libGVGb3JNZXNzYWdpbmcgY29uc3QpOgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZSk6CisgICAg
ICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omxlbmd0
aCBjb25zdCk6CisgICAgICAgICogZG9tL0NvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3I6OnRyYXZlcnNl
UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2VkVHJlZUFuY2VzdG9yQWRhcHRlcjo6
YmVnaW4pOgorICAgICAgICAqIGRvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oOgorICAgICAgICAo
V2ViQ29yZTo6Zmlyc3RDaGlsZEluQ29tcG9zZWRUcmVlSWdub3JpbmdVc2VyQWdlbnRTaGFkb3cp
OgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRhaW5lck5vZGU6OnJlbW92ZU5vZGVXaXRoU2NyaXB0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OnJlbW92ZVNlbGZPckNoaWxkTm9kZXNGb3JJbnNlcnRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveVJlbmRlclRyZWVJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpjb250YWluc0luY2x1ZGluZ0hvc3RFbGVtZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpjaGVja0FjY2VwdENoaWxkKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y291bnRDaGlsZE5vZGVzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnRyYXZlcnNlVG9DaGlsZEF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OmZpcnN0Q2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bGFz
dENoaWxkIGNvbnN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d2lkZ2V0Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YnVp
bGRBY2Nlc3NLZXlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRqdXN0Rm9j
dXNlZE5vZGVPbk5vZGVSZW1vdmFsKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKiBkb20vRWxl
bWVudElubGluZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBhcmVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBkb20vTW91c2VF
dmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50Ojp0b0VsZW1lbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudDo6ZnJvbUVsZW1lbnQgY29uc3QpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbmRlckJveCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW5kZXJCb3hNb2RlbE9iamVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb250YWluaW5nU2hhZG93Um9vdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbik6CisgICAg
ICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpjb250
YWluZXJUZXh0IGNvbnN0KToKKyAgICAgICAgKiBkb20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dE5vZGVUcmF2ZXJzYWw6OmNvbnRlbnRzQXNTdHJpbmcpOgor
ICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3Bl
OjplbGVtZW50c0Zyb21Qb2ludCk6CisgICAgICAgICogZG9tL1R5cGVkRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERlc2NlbmRhbnRSYW5nZTxF
bGVtZW50VHlwZT46OmZyb20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5jbHVzaXZlRWxl
bWVudERlc2NlbmRhbnRSYW5nZTxFbGVtZW50VHlwZT46OmZyb20gY29uc3QpOgorICAgICAgICAq
IGRvbS9WaXNpdGVkTGlua1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmtIYXNoRm9y
RWxlbWVudCk6CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQ
cm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRl
cjo6ZnJvbUNvbnRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjplbmNsb3NpbmdCbG9jayk6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Om93bmVy
U2VsZWN0RWxlbWVudCBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbmRl
ckVtYmVkZGVkT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAgICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZv
cm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9zY3JvbGxDb250cm9sbGVyOjp1cGRhdGVBdXRvc2Ny
b2xsUmVuZGVyZXIpOgorICAgICAgICAqIHBhZ2UvRE9NVGltZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NVGltZXI6OmZpcmVkKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFzRmlsZUlucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFn
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkTm9kZURyYWdFbmFibGVyOjpTY29w
ZWROb2RlRHJhZ0VuYWJsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNldENETUluc3RhbmNlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
ZWdhY3lJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaWdodHMpOgorICAgICAgICAo
V2ViQ29yZTo6cGxhY2VDaGlsZElubGluZUJveGVzSW5CbG9ja0RpcmVjdGlvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93OjptYXJnaW5WYWx1ZXNGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpmaW5kQXV0b3Njcm9sbGFibGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmltYWdlT3JpZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9u
IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OnVwZGF0ZUlubmVyQ29udGVudFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjptYXlB
ZmZlY3RMYXlvdXQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlbmRlckJveCBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpbmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RJdGVtOjp1cGRhdGVWYWx1ZU5vdyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9mZnNldFBhcmVu
dCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjp0YWJsZSBjb25zdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVEZWJ1
Z0luZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbmlu
Z0Jsb2NrQmVsb3dWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6Om5vcm1h
bGl6ZVRyZWVBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZVVwZGF0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0
ZXI6OlBhcmVudDo6UGFyZW50KToKKyAgICAgICAgKiBzdHlsZS9DaGlsZENoYW5nZUludmFsaWRh
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNoaWxkQ2hhbmdlSW52YWxpZGF0aW9u
OjpDaGlsZENoYW5nZUludmFsaWRhdGlvbik6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6ZmluZFZpZXdBbmNob3IgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6ZmluZFJvb3RBbmNob3IgY29u
c3QpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmJpdG1hcEltYWdlRnJvbUltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwZGZEb2N1
bWVudEltYWdlRnJvbUltYWdlRWxlbWVudCk6CisKIDIwMjItMDEtMTQgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBXaGVuIGluc2VydGluZyBhIHNlbGVjdGVkIDxv
cHRpb24+IGluIGEgPHNlbGVjdD4gZWxlbWVudCwgaXRzIHNlbGVjdGVkIHN0YXRlIHNob3VsZCBy
ZW1haW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggODMwNTRhMjNlNGZhMTExZjdhZTQwMDFlN2MxNWJmMTNiZWYyZTZh
MC4uNGM4M2JlMjljNDAzZmQ5OTQwOTcyZjdmYjllZmFiY2NjNDVhMmFiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAyMi0wMS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgorCisgICAgICAgIEludHJvZHVjZSBkeW5hbWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5j
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjU5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhcnQg
YWRvcHRpbmcgZHluYW1pY0Rvd25jYXN0PD4oKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvRnVs
bFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1
bGxTY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnBheW1lbnRDb29yZGluYXRvcik6CisKIDIwMjItMDEtMTQgIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT046ICBBUktpdCBleGFtcGxlIGxvYWRz
IGEgcGFnZSBmdWxsIG9mIHJhbmRvbSBzeW1ib2xzIGluc3RlYWQgb2YgYSAzRCBtb2RlbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGQyNTNjZThjZDIxNGY3MjI5MGUxMDQ2MmM4MTc1
NWJkYWRmNjdhMDUuLmRlYjM4MmQwMWI0YmZlN2U1NjZlMWM2NjA3YTY3NzQ3NDhjZTdhMTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMS0xNCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjZSBkeW5h
bWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhcnQgYWRvcHRpbmcgZHluYW1pY0Rvd25jYXN0PD4o
KS4KKworICAgICAgICAqIERPTS9ET01VSUtpdEV4dGVuc2lvbnMubW06CisgICAgICAgICgtW0RP
TUhUTUxFbGVtZW50IHN0cnVjdHVyYWxDb21wbGV4aXR5Q29udHJpYnV0aW9uXSk6CisgICAgICAg
ICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgIChpbnB1dEVsZW1l
bnRGcm9tRE9NRWxlbWVudCk6CisKIDIwMjItMDEtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hv
cnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGEgZmV3IE9iamVjdGl2ZS1DIG9iamVjdCBs
ZWFrcyBkdWUgdG8gZWFybHkgcmV0dXJucyBpbiBgaW5pdGAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1R5cGVDYXN0cy5oIGIvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKaW5kZXggYmRk
Y2E4N2VlOGVlYWVkMzIzZGQwM2FhY2Y0NWMzMDIxOTQ5YzBkNS4uMTUyMDQ5ZGMwNTNkNTNmMjI3
MDMxYjk5MmY0M2I0ZmM5OTY1NThiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVHlwZUNh
c3RzLmgKKysrIGIvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKQEAgLTg4LDYgKzg4LDI0IEBA
IGlubGluZSBtYXRjaF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4qIGRvd25jYXN0KFNvdXJj
ZSogc291cmNlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxtYXRjaF9jb25zdG5lc3NfdDxTb3Vy
Y2UsIFRhcmdldD4qPihzb3VyY2UpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5
cGVuYW1lIFNvdXJjZT4KK2lubGluZSBtYXRjaF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4q
IGR5bmFtaWNEb3duY2FzdChTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KCFz
dGQ6OmlzX3NhbWVfdjxTb3VyY2UsIFRhcmdldD4sICJVbm5lY2Vzc2FyeSBjYXN0IHRvIHNhbWUg
dHlwZSIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8U291cmNlLCBUYXJn
ZXQ+LCAiU2hvdWxkIGJlIGEgZG93bmNhc3QiKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpczxUYXJnZXQ+KHNvdXJjZSkpOworICAgIHJldHVybiBpczxUYXJnZXQ+KHNv
dXJjZSkgPyAmc3RhdGljX2Nhc3Q8bWF0Y2hfY29uc3RuZXNzX3Q8U291cmNlLCBUYXJnZXQ+Jj4o
c291cmNlKSA6IG51bGxwdHI7Cit9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1l
IFNvdXJjZT4KK2lubGluZSBtYXRjaF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4qIGR5bmFt
aWNEb3duY2FzdChTb3VyY2UqIHNvdXJjZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6Omlz
X3NhbWVfdjxTb3VyY2UsIFRhcmdldD4sICJVbm5lY2Vzc2FyeSBjYXN0IHRvIHNhbWUgdHlwZSIp
OworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8U291cmNlLCBUYXJnZXQ+LCAi
U2hvdWxkIGJlIGEgZG93bmNhc3QiKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTighc291cmNlIHx8IGlzPFRhcmdldD4oKnNvdXJjZSkpOworCisgICAgcmV0dXJuIGlzPFRh
cmdldD4oc291cmNlKSA/IHN0YXRpY19jYXN0PG1hdGNoX2NvbnN0bmVzc190PFNvdXJjZSwgVGFy
Z2V0Pio+KHNvdXJjZSkgOiBudWxscHRyOworfQorCiAvLyBBZGQgc3VwcG9ydCBmb3IgdHlwZSBj
aGVja2luZyAvIGNhc3RpbmcgdXNpbmcgaXM8PigpIC8gZG93bmNhc3Q8PigpIGhlbHBlcnMgZm9y
IGEgc3BlY2lmaWMgY2xhc3MuCiAjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
Q2xhc3NOYW1lKSBcCiBuYW1lc3BhY2UgV1RGIHsgXApAQCAtMTIwLDMgKzEzOCw0IEBAIGlubGlu
ZSBib29sIGlzKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxBcmdUeXBlLCBEZWxldGVyPiYgc291cmNl
KQogdXNpbmcgV1RGOjpUeXBlQ2FzdFRyYWl0czsKIHVzaW5nIFdURjo6aXM7CiB1c2luZyBXVEY6
OmRvd25jYXN0OwordXNpbmcgV1RGOjpkeW5hbWljRG93bmNhc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCmluZGV4IDA1ZTRhZTBkMTM4ZmFiZDI5YWU1YTJiMDQ0
ZDRhNjgxNGQ3N2ZhNWUuLmYyMGJiY2ZkY2Q0NDY1MGYxNTBjZWI3ZTBmMjNmZjgwMzAzN2NmZjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCkBAIC0yNDQsOCAr
MjQ0LDggQEAgdm9pZCBXZWJBbmltYXRpb246OnNldFRpbWVsaW5lKFJlZlB0cjxBbmltYXRpb25U
aW1lbGluZT4mJiB0aW1lbGluZSkKICAgICBpZiAobV9zdGFydFRpbWUpCiAgICAgICAgIG1faG9s
ZFRpbWUgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZm
ZWN0KSkgewotICAgICAgICBpZiAoYXV0byB0YXJnZXQgPSBkb3duY2FzdDxLZXlmcmFtZUVmZmVj
dD4obV9lZmZlY3QuZ2V0KCkpLT50YXJnZXRTdHlsZWFibGUoKSkgeworICAgIGlmIChhdXRvIGtl
eWZyYW1lRWZmZWN0ID0gZHluYW1pY0Rvd25jYXN0PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdC5n
ZXQoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8gdGFyZ2V0ID0ga2V5ZnJhbWVFZmZlY3QtPnRhcmdl
dFN0eWxlYWJsZSgpKSB7CiAgICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGRlY2xhcmF0
aXZlIGFuaW1hdGlvbiwgd2UgZG9uJ3Qgd2FudCB0byByZW1vdmUgdGhlIGFuaW1hdGlvbiBmcm9t
IHRoZSByZWxldmFudCBtYXBzIGJlY2F1c2UKICAgICAgICAgICAgIC8vIHdoaWxlIHRoZSB0aW1l
bGluZSB3YXMgc2V0IHZpYSB0aGUgQVBJLCB0aGUgZWxlbWVudCBzdGlsbCBoYXMgYSB0cmFuc2l0
aW9uIG9yIGFuaW1hdGlvbiBzZXQgdXAgYW5kIHdlIG11c3QKICAgICAgICAgICAgIC8vIG5vdCBi
cmVhayB0aGUgcmVsYXRpb25zaGlwLgpAQCAtNzI1LDggKzcyNSw4IEBAIHZvaWQgV2ViQW5pbWF0
aW9uOjpjYW5jZWwoKQogCiB2b2lkIFdlYkFuaW1hdGlvbjo6d2lsbENoYW5nZVJlbmRlcmVyKCkK
IHsKLSAgICBpZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0KSkKLSAgICAgICAgZG93bmNh
c3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkud2lsbENoYW5nZVJlbmRlcmVyKCk7CisgICAg
aWYgKGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5hbWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+
KG1fZWZmZWN0LmdldCgpKSkKKyAgICAgICAga2V5ZnJhbWVFZmZlY3QtPndpbGxDaGFuZ2VSZW5k
ZXJlcigpOwogfQogCiB2b2lkIFdlYkFuaW1hdGlvbjo6ZW5xdWV1ZUFuaW1hdGlvblBsYXliYWNr
RXZlbnQoY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBjdXJy
ZW50VGltZSwgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiB0aW1lbGluZVRpbWUpCkBAIC04MzgsOSAr
ODM4LDkgQEAgdm9pZCBXZWJBbmltYXRpb246OnRpbWluZ0RpZENoYW5nZShEaWRTZWVrIGRpZFNl
ZWssIFN5bmNocm9ub3VzbHlOb3RpZnkgc3luY2hyb24KICAgICBtX3Nob3VsZFNraXBVcGRhdGlu
Z0ZpbmlzaGVkU3RhdGVXaGVuUmVzb2x2aW5nID0gZmFsc2U7CiAgICAgdXBkYXRlRmluaXNoZWRT
dGF0ZShkaWRTZWVrLCBzeW5jaHJvbm91c2x5Tm90aWZ5KTsKIAotICAgIGlmIChpczxLZXlmcmFt
ZUVmZmVjdD4obV9lZmZlY3QpKSB7CisgICAgaWYgKGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5h
bWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKSkgewogICAgICAgICB1
cGRhdGVSZWxldmFuY2UoKTsKLSAgICAgICAgZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2Vm
ZmVjdCkuYW5pbWF0aW9uVGltaW5nRGlkQ2hhbmdlKCk7CisgICAgICAgIGtleWZyYW1lRWZmZWN0
LT5hbmltYXRpb25UaW1pbmdEaWRDaGFuZ2UoKTsKICAgICB9CiAKICAgICBpZiAoc2lsZW50bHkg
PT0gU2lsZW50bHk6Ok5vICYmIG1fdGltZWxpbmUpCkBAIC04NDksOCArODQ5LDggQEAgdm9pZCBX
ZWJBbmltYXRpb246OnRpbWluZ0RpZENoYW5nZShEaWRTZWVrIGRpZFNlZWssIFN5bmNocm9ub3Vz
bHlOb3RpZnkgc3luY2hyb24KIAogdm9pZCBXZWJBbmltYXRpb246OmludmFsaWRhdGVFZmZlY3Qo
KQogewotICAgIGlmICghaXNFZmZlY3RJbnZhbGlkYXRpb25TdXNwZW5kZWQoKSAmJiBpczxLZXlm
cmFtZUVmZmVjdD4obV9lZmZlY3QpKQotICAgICAgICBkb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4o
Km1fZWZmZWN0KS5pbnZhbGlkYXRlKCk7CisgICAgaWYgKGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBk
eW5hbWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKTsgIWlzRWZmZWN0
SW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgJiYga2V5ZnJhbWVFZmZlY3QpCisgICAgICAgIGtleWZy
YW1lRWZmZWN0LT5pbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgV2ViQW5pbWF0aW9uOjp1cGRhdGVG
aW5pc2hlZFN0YXRlKERpZFNlZWsgZGlkU2VlaywgU3luY2hyb25vdXNseU5vdGlmeSBzeW5jaHJv
bm91c2x5Tm90aWZ5KQpAQCAtOTYyLDggKzk2Miw4IEBAIHZvaWQgV2ViQW5pbWF0aW9uOjpmaW5p
c2hOb3RpZmljYXRpb25TdGVwcygpCiAgICAgLy8gICAgT3RoZXJ3aXNlLCBxdWV1ZSBhIHRhc2sg
dG8gZGlzcGF0Y2ggZmluaXNoRXZlbnQgYXQgYW5pbWF0aW9uLiBUaGUgdGFzayBzb3VyY2UgZm9y
IHRoaXMgdGFzayBpcyB0aGUgRE9NIG1hbmlwdWxhdGlvbiB0YXNrIHNvdXJjZS4KICAgICBlbnF1
ZXVlQW5pbWF0aW9uUGxheWJhY2tFdmVudChldmVudE5hbWVzKCkuZmluaXNoRXZlbnQsIGN1cnJl
bnRUaW1lKCksIG1fdGltZWxpbmUgPyBtX3RpbWVsaW5lLT5jdXJyZW50VGltZSgpIDogc3RkOjpu
dWxsb3B0KTsKIAotICAgIGlmIChpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpKSB7Ci0gICAg
ICAgIGlmIChSZWZQdHIgdGFyZ2V0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVj
dCkudGFyZ2V0KCkpIHsKKyAgICBpZiAoYXV0byBrZXlmcmFtZUVmZmVjdCA9IGR5bmFtaWNEb3du
Y2FzdDxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QuZ2V0KCkpKSB7CisgICAgICAgIGlmIChSZWZQ
dHIgdGFyZ2V0ID0ga2V5ZnJhbWVFZmZlY3QtPnRhcmdldCgpKSB7CiAgICAgICAgICAgICBpZiAo
YXV0byogcGFnZSA9IHRhcmdldC0+ZG9jdW1lbnQoKS5wYWdlKCkpCiAgICAgICAgICAgICAgICAg
cGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYW5pbWF0aW9uRGlkRmluaXNoRm9yRWxlbWVudCgqdGFy
Z2V0KTsKICAgICAgICAgfQpAQCAtMTI4Nyw4ICsxMjg3LDggQEAgdm9pZCBXZWJBbmltYXRpb246
OnJlc29sdmUoUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBjb25zdCBTdHlsZTo6UmVzb2x1dGlv
bkNvbnQKICAgICAgICAgdXBkYXRlRmluaXNoZWRTdGF0ZShEaWRTZWVrOjpObywgU3luY2hyb25v
dXNseU5vdGlmeTo6WWVzKTsKICAgICBtX3Nob3VsZFNraXBVcGRhdGluZ0ZpbmlzaGVkU3RhdGVX
aGVuUmVzb2x2aW5nID0gZmFsc2U7CiAKLSAgICBpZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZm
ZWN0KSkKLSAgICAgICAgZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkuYXBwbHko
dGFyZ2V0U3R5bGUsIHJlc29sdXRpb25Db250ZXh0LCBzdGFydFRpbWUpOworICAgIGlmIChhdXRv
IGtleWZyYW1lRWZmZWN0ID0gZHluYW1pY0Rvd25jYXN0PEtleWZyYW1lRWZmZWN0PihtX2VmZmVj
dC5nZXQoKSkpCisgICAgICAgIGtleWZyYW1lRWZmZWN0LT5hcHBseSh0YXJnZXRTdHlsZSwgcmVz
b2x1dGlvbkNvbnRleHQsIHN0YXJ0VGltZSk7CiB9CiAKIHZvaWQgV2ViQW5pbWF0aW9uOjpzZXRT
dXNwZW5kZWQoYm9vbCBpc1N1c3BlbmRlZCkKQEAgLTE0MTcsMTEgKzE0MTcsMTAgQEAgdm9pZCBX
ZWJBbmltYXRpb246OnBlcnNpc3QoKQogICAgIGF1dG8gcHJldmlvdXNSZXBsYWNlU3RhdGUgPSBz
dGQ6OmV4Y2hhbmdlKG1fcmVwbGFjZVN0YXRlLCBSZXBsYWNlU3RhdGU6OlBlcnNpc3RlZCk7CiAK
ICAgICBpZiAocHJldmlvdXNSZXBsYWNlU3RhdGUgPT0gUmVwbGFjZVN0YXRlOjpSZW1vdmVkICYm
IG1fdGltZWxpbmUpIHsKLSAgICAgICAgaWYgKGlzPEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdCkp
IHsKLSAgICAgICAgICAgIGF1dG8mIGtleWZyYW1lRWZmZWN0ID0gZG93bmNhc3Q8S2V5ZnJhbWVF
ZmZlY3Q+KCptX2VmZmVjdCk7Ci0gICAgICAgICAgICBhdXRvIHN0eWxlYWJsZSA9IGtleWZyYW1l
RWZmZWN0LnRhcmdldFN0eWxlYWJsZSgpOworICAgICAgICBpZiAoYXV0byBrZXlmcmFtZUVmZmVj
dCA9IGR5bmFtaWNEb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QuZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBhdXRvIHN0eWxlYWJsZSA9IGtleWZyYW1lRWZmZWN0LT50YXJnZXRTdHlsZWFi
bGUoKTsKICAgICAgICAgICAgIHN0eWxlYWJsZS0+YW5pbWF0aW9uV2FzQWRkZWQoKnRoaXMpOwot
ICAgICAgICAgICAgc3R5bGVhYmxlLT5lbnN1cmVLZXlmcmFtZUVmZmVjdFN0YWNrKCkuYWRkRWZm
ZWN0KGtleWZyYW1lRWZmZWN0KTsKKyAgICAgICAgICAgIHN0eWxlYWJsZS0+ZW5zdXJlS2V5ZnJh
bWVFZmZlY3RTdGFjaygpLmFkZEVmZmVjdCgqa2V5ZnJhbWVFZmZlY3QpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTQzMSw3ICsxNDMwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViQW5pbWF0
aW9uOjpjb21taXRTdHlsZXMoKQogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy93ZWIt
YW5pbWF0aW9ucy0xLyNjb21taXQtY29tcHV0ZWQtc3R5bGVzCiAKICAgICAvLyAxLiBMZXQgdGFy
Z2V0cyBiZSB0aGUgc2V0IG9mIGFsbCBlZmZlY3QgdGFyZ2V0cyBmb3IgYW5pbWF0aW9uIGVmZmVj
dHMgYXNzb2NpYXRlZCB3aXRoIGFuaW1hdGlvbi4KLSAgICBhdXRvKiBlZmZlY3QgPSBpczxLZXlm
cmFtZUVmZmVjdD4obV9lZmZlY3QpID8gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0
LmdldCgpKSA6IG51bGxwdHI7CisgICAgYXV0byogZWZmZWN0ID0gZHluYW1pY0Rvd25jYXN0PEtl
eWZyYW1lRWZmZWN0PihtX2VmZmVjdC5nZXQoKSk7CiAgICAgYXV0byogdGFyZ2V0ID0gZWZmZWN0
ID8gZWZmZWN0LT50YXJnZXQoKSA6IG51bGxwdHI7CiAKICAgICAvLyAyLiBGb3IgZWFjaCB0YXJn
ZXQgaW4gdGFyZ2V0czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuY3BwCmluZGV4IGM4NzdkMjdiNjk4NGYzN2Y5ZGNjYzAzMjc0YmYxNjY4Mjk3ZTUwMTYu
LjA1OWRmZWE2OWE4NWQ1NmQzZDRhM2RmNDNiNjFhYmI4ODc0MDkwZjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcApAQCAtMTUxLDcgKzE1MSw3
IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgICAgIGlmICghd2luZG93LT53cmFwcGVk
KCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGlmICh3YXNDcmVhdGVkRnJvbU1hcmt1cCgpKSB7Ci0gICAgICAgICAgICBFbGVtZW50
KiBlbGVtZW50ID0gZXZlbnQudGFyZ2V0KCktPmlzTm9kZSgpICYmICFkb3duY2FzdDxOb2RlPigq
ZXZlbnQudGFyZ2V0KCkpLmlzRG9jdW1lbnROb2RlKCkgJiYgaXM8RWxlbWVudD4oKmV2ZW50LnRh
cmdldCgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGV2ZW50LnRhcmdldCgpKSA6IG51bGxwdHI7Cisg
ICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZXZlbnQudGFyZ2V0KCktPmlzTm9kZSgpICYm
ICFkb3duY2FzdDxOb2RlPigqZXZlbnQudGFyZ2V0KCkpLmlzRG9jdW1lbnROb2RlKCkgPyBkeW5h
bWljRG93bmNhc3Q8RWxlbWVudD4oKmV2ZW50LnRhcmdldCgpKSA6IG51bGxwdHI7CiAgICAgICAg
ICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY29udGVudFNlY3VyaXR5UG9saWN5KCkt
PmFsbG93SW5saW5lRXZlbnRIYW5kbGVycyhzb3VyY2VVUkwoKS5zdHJpbmcoKSwgc291cmNlUG9z
aXRpb24oKS5tX2xpbmUsIGNvZGUoKSwgZWxlbWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xh
enlFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2
ZW50TGlzdGVuZXIuY3BwCmluZGV4IGFiZjE4ZDg5YjY3YTY2MmI3ODFhYzYzODc2NzIzYzUzNDU1
MzgxZTYuLmQ3YzY4MTg0YzYwNzEzNDBmMmI2OGRiZWZiNTdhYmFhZjRhNTRiMDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCkBA
IC04OCwxNSArODgsMTIgQEAgc3RhdGljIGlubGluZSBib29sIGlzQ2xvbmVJblNoYWRvd1RyZWVP
ZlNWR1VzZUVsZW1lbnQoTm9kZSYgb3JpZ2luYWxOb2RlLCBFdmVudFQKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgYXV0byYgbm9kZSA9IGRvd25jYXN0PE5vZGU+KGV2ZW50VGFyZ2V0KTsK
LSAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KG5vZGUpKQorICAgIGF1dG8qIGVsZW1lbnQgPSBkeW5h
bWljRG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZSk7CisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVt
ZW50LT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZSk7Ci0gICAgaWYgKCFl
bGVtZW50LmNvcnJlc3BvbmRpbmdFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIEFTU0VSVChlbGVtZW50LmlzSW5TaGFkb3dUcmVlKCkpOwotICAgIHJldHVybiAmb3JpZ2lu
YWxOb2RlID09IGVsZW1lbnQuY29ycmVzcG9uZGluZ0VsZW1lbnQoKTsKKyAgICBBU1NFUlQoZWxl
bWVudC0+aXNJblNoYWRvd1RyZWUoKSk7CisgICAgcmV0dXJuICZvcmlnaW5hbE5vZGUgPT0gZWxl
bWVudC0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKTsKIH0KIAogLy8gVGhpcyBpcyB0byBoZWxwIGZp
bmQgdGhlIHVuZGVybHlpbmcgY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzI0MzE0MDI3Pi4KQEAg
LTEzMSw3ICsxMjgsNyBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6
ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgZXhlYwogICAgIGlmICghZG9jdW1l
bnQuZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBFbGVtZW50KiBlbGVt
ZW50ID0gbV9vcmlnaW5hbE5vZGUgJiYgIW1fb3JpZ2luYWxOb2RlLT5pc0RvY3VtZW50Tm9kZSgp
ICYmIGlzPEVsZW1lbnQ+KCptX29yaWdpbmFsTm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihtX29y
aWdpbmFsTm9kZS5nZXQoKSkgOiBudWxscHRyOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBtX29y
aWdpbmFsTm9kZSAmJiAhbV9vcmlnaW5hbE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgPyBkeW5hbWlj
RG93bmNhc3Q8RWxlbWVudD4obV9vcmlnaW5hbE5vZGUuZ2V0KCkpIDogbnVsbHB0cjsKICAgICBp
ZiAoIWRvY3VtZW50LmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0lubGluZUV2ZW50SGFu
ZGxlcnMobV9zb3VyY2VVUkwuc3RyaW5nKCksIG1fc291cmNlUG9zaXRpb24ubV9saW5lLCBtX2Nv
ZGUsIGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCBiYjI0OWM4NmYzYzE3NjBhZjE2ZTVjMDI3MjdjMDlj
NWU3OTNlYTg1Li5mOGE5MTg3NzM0Y2RiMGQ5Mzc4ODliYmJlMjRmYzFlOGFkYTNmNTU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApAQCAtMzU1LDcgKzM1NSw3IEBAIEZv
bnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyCiAKICAgICBpZiAocmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJz
dCkKICAgICAgICAgcmVzb2x2ZUFuZEFzc2lnbkdlbmVyaWNGYW1pbHkoKTsKLSAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBpczxEb2N1bWVudD4obV9jb250ZXh0KSA/ICZkb3duY2FzdDxEb2N1bWVu
dD4oKm1fY29udGV4dCkgOiBudWxscHRyOworICAgIGF1dG8qIGRvY3VtZW50ID0gZHluYW1pY0Rv
d25jYXN0PERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpOwogICAgIGF1dG8qIGZhY2UgPSBtX2Nz
c0ZvbnRGYWNlU2V0LT5mb250RmFjZShmb250RGVzY3JpcHRpb25Gb3JMb29rdXAtPmZvbnRTZWxl
Y3Rpb25SZXF1ZXN0KCksIGZhbWlseUZvckxvb2t1cCk7CiAgICAgaWYgKGZhY2UpIHsKICAgICAg
ICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0
LmNwcAppbmRleCBkYmM2N2Q3YTEzNTU5NjRiYjM4NWM1NTBjMmIxOTJiZmM5ODI5ZGVlLi5mNDYx
OGVmMDI0YTk3OWZkMjUyY2NjNDdmYTZmODA2Y2Q5MzA4MDVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2hlZXQuY3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+
IENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1bnNp
Z24KICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwogCi0gICAgUnVsZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzLCBSdWxlSW5z
ZXJ0aW9uLCBpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSA/IGRvd25jYXN0PFN0eWxlUnVs
ZUtleWZyYW1lcz4ocnVsZS5nZXQoKSkgOiBudWxscHRyKTsKKyAgICBSdWxlTXV0YXRpb25TY29w
ZSBtdXRhdGlvblNjb3BlKHRoaXMsIFJ1bGVJbnNlcnRpb24sIGR5bmFtaWNEb3duY2FzdDxTdHls
ZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSk7CiAKICAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRlbnRz
LmdldCgpLndyYXBwZXJJbnNlcnRSdWxlKHJ1bGUucmVsZWFzZU5vbk51bGwoKSwgaW5kZXgpOwog
ICAgIGlmICghc3VjY2VzcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAppbmRleCBiN2QwZTFkN2ZmN2FiYjgxYjM0
NzcxN2ZlOGUzZjBhN2M1MTdkYTM0Li4xMmM0MDI2ZDdiNzUyZTE0ZTEwOTEwZDJjNmFlMGY4MjE2
YWVhNzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCkBAIC0xMTIsMTAgKzExMiwxMSBAQCBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBBdHRyOjpzdHlsZSgpCiB7CiAgICAgLy8gVGhpcyBpcyBub3QgcGFydCBvZiB0
aGUgRE9NIEFQSSwgYW5kIHRoZXJlZm9yZSBub3QgYXZhaWxhYmxlIHRvIHdlYnBhZ2VzLiBIb3dl
dmVyLCBXZWJLaXQgU1BJCiAgICAgLy8gbGV0cyBjbGllbnRzIHVzZSB0aGlzIHZpYSB0aGUgT2Jq
ZWN0aXZlLUMgYW5kIEphdmFTY3JpcHQgYmluZGluZ3MuCi0gICAgaWYgKCFpczxTdHlsZWRFbGVt
ZW50PihtX2VsZW1lbnQpKQorICAgIGF1dG8gc3R5bGVkRWxlbWVudCA9IGR5bmFtaWNEb3duY2Fz
dDxTdHlsZWRFbGVtZW50PihtX2VsZW1lbnQpOworICAgIGlmICghc3R5bGVkRWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgbV9zdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRp
ZXM6OmNyZWF0ZSgpOwotICAgIGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCptX2VsZW1lbnQpLmNv
bGxlY3RQcmVzZW50YXRpb25hbEhpbnRzRm9yQXR0cmlidXRlKHF1YWxpZmllZE5hbWUoKSwgdmFs
dWUoKSwgKm1fc3R5bGUpOworICAgIHN0eWxlZEVsZW1lbnQtPmNvbGxlY3RQcmVzZW50YXRpb25h
bEhpbnRzRm9yQXR0cmlidXRlKHF1YWxpZmllZE5hbWUoKSwgdmFsdWUoKSwgKm1fc3R5bGUpOwog
ICAgIHJldHVybiAmbV9zdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQnJvYWRjYXN0Q2hhbm5lbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQnJvYWRjYXN0Q2hhbm5lbC5jcHAKaW5kZXggNjMyOWRlYTU3YTE4N2Zm
MjU5Nzc3MGY4ZTRjYWE2NWJlOTQ1ZDVkNS4uZTc2MjUzY2Q2NDhiNDk4MDFmOWMzNDI1NjZmNzQ2
YjRlMjljNzMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Jyb2FkY2FzdENoYW5u
ZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ccm9hZGNhc3RDaGFubmVsLmNwcApAQCAt
MTA4LDggKzEwOCw4IEBAIHZvaWQgQnJvYWRjYXN0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6
ZW5zdXJlT25NYWluVGhyZWFkKEZ1bmN0aW9uPHZvaWQoRG9jdW1lCiAgICAgQVNTRVJUKGNvbnRl
eHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIAogICAgIFJlZiBwcm90ZWN0ZWRUaGlzIHsgKnRoaXMg
fTsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KCpjb250ZXh0KSkKLSAgICAgICAgdGFzayhkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpKTsKKyAgICBpZiAoYXV0byBkb2N1bWVudCA9IGR5bmFtaWNE
b3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpKQorICAgICAgICB0YXNrKCpkb2N1bWVudCk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqY29udGV4dCku
dGhyZWFkKCkud29ya2VyTG9hZGVyUHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKFtwcm90ZWN0ZWRU
aGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgdGFzayA9IFdURk1vdmUodGFzayldKGF1dG8m
IGNvbnRleHQpIHsKICAgICAgICAgICAgIHRhc2soZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQp
KTsKQEAgLTI2NSw4ICsyNjUsOCBAQCBib29sIEJyb2FkY2FzdENoYW5uZWw6OmlzRWxpZ2libGVG
b3JNZXNzYWdpbmcoKSBjb25zdAogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKGlzPERvY3VtZW50PigqY29udGV4dCkpCi0gICAgICAgIHJldHVybiBk
b3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpLmlzRnVsbHlBY3RpdmUoKTsKKyAgICBpZiAoYXV0
byBkb2N1bWVudCA9IGR5bmFtaWNEb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpKQorICAgICAg
ICByZXR1cm4gZG9jdW1lbnQtPmlzRnVsbHlBY3RpdmUoKTsKIAogICAgIHJldHVybiAhZG93bmNh
c3Q8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KS5pc0Nsb3NpbmcoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAppbmRleCBmODIxNzY2YjUxMjUwYmNkNmEzODUzMjk3NGJl
NjIwMjExMmY5M2M0Li5iYTMxMTkwYzRkNDIzZTc3NzllNWNkN2JlZjA1YzEwMmY4ZmRjZmZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCkBAIC0xMTksOCArMTE5LDggQEAgdW5z
aWduZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIHN0cmlu
ZywgdW5zaWduZWQgb2Zmc2V0LAogICAgICAgICBtX2RhdGEuYXBwZW5kKHN0cmluZy5jaGFyYWN0
ZXJzMTYoKSArIG9mZnNldCwgY2hhcmFjdGVyTGVuZ3RoTGltaXQpOwogCiAgICAgQVNTRVJUKCFy
ZW5kZXJlcigpIHx8IGlzPFRleHQ+KCp0aGlzKSk7Ci0gICAgaWYgKGlzPFRleHQ+KCp0aGlzKSkK
LSAgICAgICAgZG93bmNhc3Q8VGV4dD4oKnRoaXMpLnVwZGF0ZVJlbmRlcmVyQWZ0ZXJDb250ZW50
Q2hhbmdlKG9sZExlbmd0aCwgMCk7CisgICAgaWYgKGF1dG8gdGV4dCA9IGR5bmFtaWNEb3duY2Fz
dDxUZXh0PigqdGhpcykpCisgICAgICAgIHRleHQtPnVwZGF0ZVJlbmRlcmVyQWZ0ZXJDb250ZW50
Q2hhbmdlKG9sZExlbmd0aCwgMCk7CiAKICAgICBub3RpZnlQYXJlbnRBZnRlckNoYW5nZShjaGls
ZENoYW5nZSk7CiAKQEAgLTIwNywxMSArMjA3LDExIEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0
RGF0YUFuZFVwZGF0ZShjb25zdCBTdHJpbmcmIG5ld0RhdGEsIHVuc2lnbmVkIG9mZnNldE9mUmVw
CiAgICAgICAgIGRvY3VtZW50KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXRPZlJlcGxhY2Vk
RGF0YSwgbmV3TGVuZ3RoKTsKIAogICAgIEFTU0VSVCghcmVuZGVyZXIoKSB8fCBpczxUZXh0Pigq
dGhpcykpOwotICAgIGlmIChpczxUZXh0PigqdGhpcykpCi0gICAgICAgIGRvd25jYXN0PFRleHQ+
KCp0aGlzKS51cGRhdGVSZW5kZXJlckFmdGVyQ29udGVudENoYW5nZShvZmZzZXRPZlJlcGxhY2Vk
RGF0YSwgb2xkTGVuZ3RoKTsKKyAgICBpZiAoYXV0byB0ZXh0ID0gZHluYW1pY0Rvd25jYXN0PFRl
eHQ+KCp0aGlzKSkKKyAgICAgICAgdGV4dC0+dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRlbnRDaGFu
Z2Uob2Zmc2V0T2ZSZXBsYWNlZERhdGEsIG9sZExlbmd0aCk7CiAKLSAgICBpZiAoaXM8UHJvY2Vz
c2luZ0luc3RydWN0aW9uPigqdGhpcykpCi0gICAgICAgIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0
cnVjdGlvbj4oKnRoaXMpLmNoZWNrU3R5bGVTaGVldCgpOworICAgIGlmIChhdXRvIHByb2Nlc3Np
bmdJbnRydWN0aW9uID0gZHluYW1pY0Rvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKnRo
aXMpKQorICAgICAgICBwcm9jZXNzaW5nSW50cnVjdGlvbi0+Y2hlY2tTdHlsZVNoZWV0KCk7CiAK
ICAgICBpZiAoZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCkt
PnNlbGVjdGlvbigpLnRleHRXYXNSZXBsYWNlZCh0aGlzLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwg
b2xkTGVuZ3RoLCBuZXdMZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKaW5kZXgg
MzZhNDkyNTQwN2U5MTNjY2NhNzNlOTBkZTAzMmFiNWZiODc3NGE0Ny4uNTIwMDNkN2MxZGRlZDk3
YjlhN2UwODhjMzkzMjkxOGQ2NjQwODRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0NoYXJhY3RlckRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5o
CkBAIC03Miw4ICs3Miw4IEBAIHByaXZhdGU6CiAKIGlubGluZSB1bnNpZ25lZCBOb2RlOjpsZW5n
dGgoKSBjb25zdAogewotICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigqdGhpcykpCi0gICAgICAg
IHJldHVybiBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPigqdGhpcykubGVuZ3RoKCk7CisgICAgaWYg
KGF1dG8gY2hhcmFjdGVyRGF0YSA9IGR5bmFtaWNEb3duY2FzdDxDaGFyYWN0ZXJEYXRhPigqdGhp
cykpCisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJEYXRhLT5sZW5ndGgoKTsKICAgICByZXR1cm4g
Y291bnRDaGlsZE5vZGVzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9z
ZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oCmluZGV4IGM2NjFiY2U1YzhmYzJmYWRlNmMxODY0MjU1
ZjNkZGFjODA0NzBmMDcuLjg5YTY4ZTA0YzI5YmEyZmMwYzcyMWMwZGNiZjZhYWY1YzkwOThlNmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJh
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0
b3IuaApAQCAtNzIsOCArNzIsOCBAQCBpbmxpbmUgQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRv
ciYgQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvcjo6dHJhdmVyc2VQYXJlbgogICAgICAgICBt
X2N1cnJlbnQgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQotICAgIGlm
IChpczxTaGFkb3dSb290PigqcGFyZW50KSkgewotICAgICAgICBtX2N1cnJlbnQgPSBkb3duY2Fz
dDxTaGFkb3dSb290PigqcGFyZW50KS5ob3N0KCk7CisgICAgaWYgKGF1dG8gc2hhZG93Um9vdCA9
IGR5bmFtaWNEb3duY2FzdDxTaGFkb3dSb290PigqcGFyZW50KSkgeworICAgICAgICBtX2N1cnJl
bnQgPSBzaGFkb3dSb290LT5ob3N0KCk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAg
ICAgaWYgKCFpczxFbGVtZW50PigqcGFyZW50KSkgewpAQCAtMTAwLDEwICsxMDAsMTAgQEAgcHVi
bGljOgogCiAgICAgaXRlcmF0b3IgYmVnaW4oKQogICAgIHsKLSAgICAgICAgaWYgKGlzPFNoYWRv
d1Jvb3Q+KG1fbm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKmRvd25jYXN0PFNo
YWRvd1Jvb3Q+KG1fbm9kZSkuaG9zdCgpKTsKLSAgICAgICAgaWYgKGlzPFBzZXVkb0VsZW1lbnQ+
KG1fbm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKmRvd25jYXN0PFBzZXVkb0Vs
ZW1lbnQ+KG1fbm9kZSkuaG9zdEVsZW1lbnQoKSk7CisgICAgICAgIGlmIChhdXRvIHNoYWRvd1Jv
b3QgPSBkeW5hbWljRG93bmNhc3Q8U2hhZG93Um9vdD4obV9ub2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiBpdGVyYXRvcigqc2hhZG93Um9vdC0+aG9zdCgpKTsKKyAgICAgICAgaWYgKGF1dG8gcHNl
dWRvRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxQc2V1ZG9FbGVtZW50PihtX25vZGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCpwc2V1ZG9FbGVtZW50LT5ob3N0RWxlbWVudCgpKTsK
ICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fbm9kZSkudHJhdmVyc2VQYXJlbnQoKTsKICAgICB9
CiAgICAgaXRlcmF0b3IgZW5kKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21w
b3NlZFRyZWVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUl0ZXJh
dG9yLmgKaW5kZXggY2M0ZjIwMjU2ZjVlY2ZlNzZmMWJhNjE1NThkNjZmMmYyYTM1MDM1My4uNjIy
MDYxZjQ1NmQ4YjBkNjY0MjQ5OTZkMzM4MTM2ZTY3MzRkNjdkNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbXBvc2VkVHJlZUl0ZXJhdG9yLmgKQEAgLTIyNCw4ICsyMjQsOCBAQCBpbmxpbmUgTm9k
ZSogZmlyc3RDaGlsZEluQ29tcG9zZWRUcmVlSWdub3JpbmdVc2VyQWdlbnRTaGFkb3coTm9kZSYg
bm9kZSkKIHsKICAgICBpZiAoYXV0byogc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3RJZ25vcmluZ1Vz
ZXJBZ2VudFNoYWRvdyhub2RlKSkKICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmZpcnN0Q2hp
bGQoKTsKLSAgICBpZiAoaXM8SFRNTFNsb3RFbGVtZW50Pihub2RlKSkgewotICAgICAgICBpZiAo
YXV0byogYXNzaWduZWROb2RlcyA9IGRvd25jYXN0PEhUTUxTbG90RWxlbWVudD4obm9kZSkuYXNz
aWduZWROb2RlcygpKQorICAgIGlmIChhdXRvIHNsb3QgPSBkeW5hbWljRG93bmNhc3Q8SFRNTFNs
b3RFbGVtZW50Pihub2RlKSkgeworICAgICAgICBpZiAoYXV0byogYXNzaWduZWROb2RlcyA9IHNs
b3QtPmFzc2lnbmVkTm9kZXMoKSkKICAgICAgICAgICAgIHJldHVybiBhc3NpZ25lZE5vZGVzLT5h
dCgwKS5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIG5vZGUuZmlyc3RDaGlsZCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IDJjMjcyYzdlZWRjMzQxMjUyOThjYzQ3ZjMy
Nzk0MDU2ZmQyYzY2ZWMuLjMwZjU3ZDdkZTlmMmY0NDZkYjdhNGIxMjVjNThiOGNiMjExZTA4Mjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTE4MCw4ICsxODAsOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVtb3ZlTm9kZVdpdGhTY3JpcHRBc3Nl
cnRpb24oTm9kZSYgY2hpbGRUb1JlbQogICAgICAgICAvLyBGSVhNRTogTWVyZ2UgdGhlc2UgdHdv
IGNvZGUgcGF0aHMuIEl0J3MgYSBidWcgaW4gdGhlIHBhcnNlciBub3QgdG8gdXBkYXRlIGNvbm5l
Y3RlZFN1YmZyYW1lQ291bnQgaW4gdGltZS4KICAgICAgICAgZGlzY29ubmVjdFN1YmZyYW1lc0lm
TmVlZGVkKCp0aGlzLCBEZXNjZW5kYW50c09ubHkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChpczxDb250YWluZXJOb2RlPihjaGlsZFRvUmVtb3ZlKSkKLSAgICAgICAgICAgIGRpc2Nvbm5l
Y3RTdWJmcmFtZXNJZk5lZWRlZChkb3duY2FzdDxDb250YWluZXJOb2RlPihjaGlsZFRvUmVtb3Zl
KSwgUm9vdEFuZERlc2NlbmRhbnRzKTsKKyAgICAgICAgaWYgKGF1dG8gY29udGFpbmVyQ2hpbGQg
PSBkeW5hbWljRG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oY2hpbGRUb1JlbW92ZSkpCisgICAgICAg
ICAgICBkaXNjb25uZWN0U3ViZnJhbWVzSWZOZWVkZWQoKmNvbnRhaW5lckNoaWxkLCBSb290QW5k
RGVzY2VuZGFudHMpOwogICAgIH0KIAogICAgIGlmIChjaGlsZFRvUmVtb3ZlLnBhcmVudE5vZGUo
KSAhPSB0aGlzKQpAQCAtMjc4LDI1ICsyNzgsMjQgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9p
ZCBleGVjdXRlTm9kZUluc2VydGlvbldpdGhTY3JpcHRBc3NlcnRpb24oQ29udGFpbmVyTm9kZSYK
IAogRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9kZTo6cmVtb3ZlU2VsZk9yQ2hpbGROb2Rl
c0Zvckluc2VydGlvbihOb2RlJiBjaGlsZCwgTm9kZVZlY3RvciYgbm9kZXNGb3JJbnNlcnRpb24p
CiB7Ci0gICAgaWYgKCFpczxEb2N1bWVudEZyYWdtZW50PihjaGlsZCkpIHsKLSAgICAgICAgbm9k
ZXNGb3JJbnNlcnRpb24uYXBwZW5kKGNoaWxkKTsKLSAgICAgICAgUmVmUHRyIG9sZFBhcmVudCA9
IGNoaWxkLnBhcmVudE5vZGUoKTsKLSAgICAgICAgaWYgKCFvbGRQYXJlbnQpCisgICAgaWYgKGF1
dG8gZnJhZ21lbnQgPSBkeW5hbWljRG93bmNhc3Q8RG9jdW1lbnRGcmFnbWVudD4oY2hpbGQpKSB7
CisgICAgICAgIGlmICghZnJhZ21lbnQtPmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAgICAgIHJl
dHVybiB7IH07Ci0gICAgICAgIHJldHVybiBvbGRQYXJlbnQtPnJlbW92ZUNoaWxkKGNoaWxkKTsK
LSAgICB9CiAKLSAgICBhdXRvJiBmcmFnbWVudCA9IGRvd25jYXN0PERvY3VtZW50RnJhZ21lbnQ+
KGNoaWxkKTsKLSAgICBpZiAoIWZyYWdtZW50Lmhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgYXV0byByZW1vdmVkQ2hpbGROb2RlcyA9IGZyYWdtZW50LT5yZW1v
dmVBbGxDaGlsZHJlbldpdGhTY3JpcHRBc3NlcnRpb24oQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFu
Z2U6OlNvdXJjZTo6QVBJKTsKKyAgICAgICAgbm9kZXNGb3JJbnNlcnRpb24uc3dhcChyZW1vdmVk
Q2hpbGROb2Rlcyk7CiAKLSAgICBhdXRvIHJlbW92ZWRDaGlsZE5vZGVzID0gZnJhZ21lbnQucmVt
b3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENvbnRhaW5lck5vZGU6OkNoaWxkQ2hh
bmdlOjpTb3VyY2U6OkFQSSk7Ci0gICAgbm9kZXNGb3JJbnNlcnRpb24uc3dhcChyZW1vdmVkQ2hp
bGROb2Rlcyk7CisgICAgICAgIGZyYWdtZW50LT5yZWJ1aWxkU1ZHRXh0ZW5zaW9uc0VsZW1lbnRz
SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgZnJhZ21lbnQtPmRpc3BhdGNoU3VidHJlZU1vZGlmaWVk
RXZlbnQoKTsKIAotICAgIGZyYWdtZW50LnJlYnVpbGRTVkdFeHRlbnNpb25zRWxlbWVudHNJZk5l
Y2Vzc2FyeSgpOwotICAgIGZyYWdtZW50LmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CiAKLSAgICByZXR1cm4geyB9OworICAgIG5vZGVz
Rm9ySW5zZXJ0aW9uLmFwcGVuZChjaGlsZCk7CisgICAgUmVmUHRyIG9sZFBhcmVudCA9IGNoaWxk
LnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIW9sZFBhcmVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICByZXR1cm4gb2xkUGFyZW50LT5yZW1vdmVDaGlsZChjaGlsZCk7CiB9CiAKIC8vIEZJWE1F
OiBUaGlzIGZ1bmN0aW9uIG11c3QgZ2V0IGEgbmV3IG5hbWUuCkBAIC0zMTUsMTQgKzMxNCwxNCBA
QCB2b2lkIENvbnRhaW5lck5vZGU6OnJlbW92ZURldGFjaGVkQ2hpbGRyZW4oKQogCiBzdGF0aWMg
aW5saW5lIHZvaWQgZGVzdHJveVJlbmRlclRyZWVJZk5lZWRlZChOb2RlJiBjaGlsZCkKIHsKLSAg
ICBib29sIGlzRWxlbWVudCA9IGlzPEVsZW1lbnQ+KGNoaWxkKTsKLSAgICBhdXRvIGhhc0Rpc3Bs
YXlDb250ZW50cyA9IGlzRWxlbWVudCAmJiBkb3duY2FzdDxFbGVtZW50PihjaGlsZCkuaGFzRGlz
cGxheUNvbnRlbnRzKCk7CisgICAgYXV0byBjaGlsZEFzRWxlbWVudCA9IGR5bmFtaWNEb3duY2Fz
dDxFbGVtZW50PihjaGlsZCk7CisgICAgYXV0byBoYXNEaXNwbGF5Q29udGVudHMgPSBjaGlsZEFz
RWxlbWVudCAmJiBjaGlsZEFzRWxlbWVudC0+aGFzRGlzcGxheUNvbnRlbnRzKCk7CiAgICAgaWYg
KCFjaGlsZC5yZW5kZXJlcigpICYmICFoYXNEaXNwbGF5Q29udGVudHMpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoaXNFbGVtZW50KQotICAgICAgICBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRv
d25SZW5kZXJlcnMoZG93bmNhc3Q8RWxlbWVudD4oY2hpbGQpKTsKLSAgICBlbHNlIGlmIChpczxU
ZXh0PihjaGlsZCkpCi0gICAgICAgIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVy
KGRvd25jYXN0PFRleHQ+KGNoaWxkKSk7CisgICAgaWYgKGNoaWxkQXNFbGVtZW50KQorICAgICAg
ICBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcnMoKmNoaWxkQXNFbGVtZW50KTsK
KyAgICBlbHNlIGlmIChhdXRvIHRleHQgPSBkeW5hbWljRG93bmNhc3Q8VGV4dD4oY2hpbGQpKQor
ICAgICAgICBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcigqdGV4dCk7CiB9CiAK
IHZvaWQgQ29udGFpbmVyTm9kZTo6dGFrZUFsbENoaWxkcmVuRnJvbShDb250YWluZXJOb2RlKiBv
bGRQYXJlbnQpCkBAIC0zNjcsOCArMzY2LDggQEAgc3RhdGljIGJvb2wgY29udGFpbnNJbmNsdWRp
bmdIb3N0RWxlbWVudHMoY29uc3QgTm9kZSYgcG9zc2libGVBbmNlc3RvciwgY29uc3QgTm8KICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJl
bnQgPSBjdXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAoIXBhcmVudCkgewot
ICAgICAgICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KGN1cnJlbnROb2RlKSkKLSAgICAgICAgICAg
ICAgICBwYXJlbnQgPSBkb3duY2FzdDxTaGFkb3dSb290PihjdXJyZW50Tm9kZSktPmhvc3QoKTsK
KyAgICAgICAgICAgIGlmIChhdXRvIHNoYWRvd1Jvb3QgPSBkeW5hbWljRG93bmNhc3Q8U2hhZG93
Um9vdD4oY3VycmVudE5vZGUpKQorICAgICAgICAgICAgICAgIHBhcmVudCA9IHNoYWRvd1Jvb3Qt
Pmhvc3QoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGlzPERvY3VtZW50RnJhZ21lbnQ+KCpjdXJy
ZW50Tm9kZSkgJiYgZG93bmNhc3Q8RG9jdW1lbnRGcmFnbWVudD4oKmN1cnJlbnROb2RlKS5pc1Rl
bXBsYXRlQ29udGVudCgpKQogICAgICAgICAgICAgICAgIHBhcmVudCA9IHN0YXRpY19jYXN0PGNv
bnN0IFRlbXBsYXRlQ29udGVudERvY3VtZW50RnJhZ21lbnQqPihjdXJyZW50Tm9kZSktPmhvc3Qo
KTsKICAgICAgICAgfQpAQCAtNDAxLDggKzQwMCw4IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9u
T3I8dm9pZD4gY2hlY2tBY2NlcHRDaGlsZChDb250YWluZXJOb2RlJiBuZXdQYXJlbnQsIE5vZGUm
CiAgICAgaWYgKHNob3VsZFZhbGlkYXRlQ2hpbGRQYXJlbnQgPT0gU2hvdWxkVmFsaWRhdGVDaGls
ZFBhcmVudDo6WWVzICYmIHJlZkNoaWxkICYmIHJlZkNoaWxkLT5wYXJlbnROb2RlKCkgIT0gJm5l
d1BhcmVudCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAot
ICAgIGlmIChpczxEb2N1bWVudD4obmV3UGFyZW50KSkgewotICAgICAgICBpZiAoIWRvd25jYXN0
PERvY3VtZW50PihuZXdQYXJlbnQpLmNhbkFjY2VwdENoaWxkKG5ld0NoaWxkLCByZWZDaGlsZCwg
b3BlcmF0aW9uKSkKKyAgICBpZiAoYXV0byBuZXdQYXJlbnREb2N1bWVudCA9IGR5bmFtaWNEb3du
Y2FzdDxEb2N1bWVudD4obmV3UGFyZW50KSkgeworICAgICAgICBpZiAoIW5ld1BhcmVudERvY3Vt
ZW50LT5jYW5BY2NlcHRDaGlsZChuZXdDaGlsZCwgcmVmQ2hpbGQsIG9wZXJhdGlvbikpCiAgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAg
fSBlbHNlIGlmICghaXNDaGlsZFR5cGVBbGxvd2VkKG5ld1BhcmVudCwgbmV3Q2hpbGQpKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuaAppbmRleCBmMTU1NDAxNGI2ZmQ2MzA3ZWE1MmM4YjQwMzQwODgw
N2YyNzcxNTNmLi4xY2NjNjhmNDQ0ZDkxM2FmY2JhODdkM2I0ZmYyMTIzYTcwZGY3NGJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKQEAgLTE5NCwzMCArMTk0LDI2IEBAIGlubGluZSBD
b250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3VtZW50JiBkb2N1bWVudCwgQ29uc3RydWN0
aW9uVHlwZSB0eXBlKQogCiBpbmxpbmUgdW5zaWduZWQgTm9kZTo6Y291bnRDaGlsZE5vZGVzKCkg
Y29uc3QKIHsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS5jb3VudENo
aWxkTm9kZXMoKTsKKyAgICBhdXRvKiBjb250YWluZXJOb2RlID0gZHluYW1pY0Rvd25jYXN0PENv
bnRhaW5lck5vZGU+KCp0aGlzKTsKKyAgICByZXR1cm4gY29udGFpbmVyTm9kZSA/IGNvbnRhaW5l
ck5vZGUtPmNvdW50Q2hpbGROb2RlcygpIDogMDsKIH0KIAogaW5saW5lIE5vZGUqIE5vZGU6OnRy
YXZlcnNlVG9DaGlsZEF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIGlmICghaXM8Q29u
dGFpbmVyTm9kZT4oKnRoaXMpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4g
ZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnRoaXMpLnRyYXZlcnNlVG9DaGlsZEF0KGluZGV4KTsK
KyAgICBhdXRvKiBjb250YWluZXJOb2RlID0gZHluYW1pY0Rvd25jYXN0PENvbnRhaW5lck5vZGU+
KCp0aGlzKTsKKyAgICByZXR1cm4gY29udGFpbmVyTm9kZSA/IGNvbnRhaW5lck5vZGUtPnRyYXZl
cnNlVG9DaGlsZEF0KGluZGV4KSA6IG51bGxwdHI7CiB9CiAKIGlubGluZSBOb2RlKiBOb2RlOjpm
aXJzdENoaWxkKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5v
ZGU+KCp0aGlzKS5maXJzdENoaWxkKCk7CisgICAgYXV0byogY29udGFpbmVyTm9kZSA9IGR5bmFt
aWNEb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcyk7CisgICAgcmV0dXJuIGNvbnRhaW5lck5v
ZGUgPyBjb250YWluZXJOb2RlLT5maXJzdENoaWxkKCkgOiBudWxscHRyOwogfQogCiBpbmxpbmUg
Tm9kZSogTm9kZTo6bGFzdENoaWxkKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5v
ZGU+KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGRvd25jYXN0
PENvbnRhaW5lck5vZGU+KCp0aGlzKS5sYXN0Q2hpbGQoKTsKKyAgICBhdXRvKiBjb250YWluZXJO
b2RlID0gZHluYW1pY0Rvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKTsKKyAgICByZXR1cm4g
Y29udGFpbmVyTm9kZSA/IGNvbnRhaW5lck5vZGUtPmxhc3RDaGlsZCgpIDogbnVsbHB0cjsKIH0K
IAogaW5saW5lIE5vZGUmIE5vZGU6OnJvb3ROb2RlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCmluZGV4IGE3MDI2M2IwYmRhY2I5ZTQzZmRlZDVlNmY0YzdkMGQ0ZDc3Y2Y1ZWMuLjc4Y2Fh
YWU3ZDljNzIzNjIwNzY4YTQ0N2ZlYzI4ZThiODVjMTdiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcApAQCAtNDcwLDEyICs0NzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZE5hbWVQ
YXJ0KFVDaGFyMzIgYykKIAogc3RhdGljIFdpZGdldCogd2lkZ2V0Rm9yRWxlbWVudChFbGVtZW50
KiBmb2N1c2VkRWxlbWVudCkKIHsKLSAgICBpZiAoIWZvY3VzZWRFbGVtZW50KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvKiByZW5kZXJlciA9IGZvY3VzZWRFbGVtZW50LT5yZW5k
ZXJlcigpOwotICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCpyZW5kZXJl
cikud2lkZ2V0KCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBmb2N1c2VkRWxlbWVudCA/IGR5bmFt
aWNEb3duY2FzdDxSZW5kZXJXaWRnZXQ+KGZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcigpKSA6IG51
bGxwdHI7CisgICAgcmV0dXJuIHJlbmRlcmVyID8gcmVuZGVyZXItPndpZGdldCgpIDogbnVsbHB0
cjsKIH0KIAogc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhjb25zdCBFbGVtZW50JiBl
bGVtZW50KQpAQCAtODk1LDEzICs4OTEsMTMgQEAgdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NL
ZXlDYWNoZSgpCiAgICAgbV9hY2Nlc3NLZXlDYWNoZSA9IG1ha2VVbmlxdWU8SGFzaE1hcDxTdHJp
bmcsIFdlYWtQdHI8RWxlbWVudD4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+KFt0aGlzXSB7
CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBXZWFrUHRyPEVsZW1lbnQ+LCBBU0NJSUNhc2VJbnNl
bnNpdGl2ZUhhc2g+IG1hcDsKICAgICAgICAgZm9yIChhdXRvJiBub2RlIDogY29tcG9zZWRUcmVl
RGVzY2VuZGFudHMoKnRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUp
KQorICAgICAgICAgICAgYXV0byBlbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KG5v
ZGUpOworICAgICAgICAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwot
ICAgICAgICAgICAgYXV0byYga2V5ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKGFjY2Vzc2tleUF0dHIpOworICAgICAgICAgICAgYXV0byYga2V5ID0gZWxlbWVudC0+
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhY2Nlc3NrZXlBdHRyKTsKICAgICAgICAg
ICAgIGlmIChrZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgbWFwLmFkZChrZXksIGVsZW1lbnQpOworICAgICAgICAgICAgbWFwLmFkZChrZXksICpl
bGVtZW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbWFwOwogICAgIH0oKSk7CkBAIC00
NDk5LDcgKzQ0OTUsNyBAQCB2b2lkIERvY3VtZW50OjphZGp1c3RGb2N1c2VkTm9kZU9uTm9kZVJl
bW92YWwoTm9kZSYgbm9kZSwgTm9kZVJlbW92YWwgbm9kZVJlbW92YQogICAgIGlmIChpc05vZGVJ
blN1YnRyZWUoKmZvY3VzZWRFbGVtZW50LCBub2RlLCBub2RlUmVtb3ZhbCkpIHsKICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBhdm9pZCBzeW5jaHJvbm91c2x5IHVwZGF0aW5nIHRoZSBzdHls
ZSBpbnNpZGUgc2V0Rm9jdXNlZEVsZW1lbnQuCiAgICAgICAgIC8vIEZJWE1FOiBPYmplY3QgZWxl
bWVudHMgc2hvdWxkIGF2b2lkIGxvYWRpbmcgYSBmcmFtZSBzeW5jaHJvbm91c2x5IGluIGEgcG9z
dCBzdHlsZSByZWNhbGMgY2FsbGJhY2suCi0gICAgICAgIFN1YmZyYW1lTG9hZGluZ0Rpc2FibGVy
IGRpc2FibGVyKGlzPENvbnRhaW5lck5vZGU+KG5vZGUpID8gJmRvd25jYXN0PENvbnRhaW5lck5v
ZGU+KG5vZGUpIDogbnVsbHB0cik7CisgICAgICAgIFN1YmZyYW1lTG9hZGluZ0Rpc2FibGVyIGRp
c2FibGVyKGR5bmFtaWNEb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlKSk7CiAgICAgICAgIHNl
dEZvY3VzZWRFbGVtZW50KG51bGxwdHIsIHsgeyB9LCB7IH0sIEZvY3VzUmVtb3ZhbEV2ZW50c01v
ZGU6OkRvTm90RGlzcGF0Y2gsIHsgfSwgeyB9IH0pOwogICAgICAgICAvLyBTZXQgdGhlIGZvY3Vz
IG5hdmlnYXRpb24gc3RhcnRpbmcgbm9kZSB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50
IHNvIHRoYXQKICAgICAgICAgLy8gd2UgY2FuIGZhbGxiYWNrIHRvIHRoZSBzaWJsaW5ncyBvciBw
YXJlbnQgbm9kZSBmb3IgdGhlIG5leHQgc2VhcmNoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4
IDVkMjUwNzcwY2VjZDJiZjZkNDQwMTA5YTY2NmM0ZmRmNTNlMGU1MTAuLjUxMzA0ODU1YWZiNmVh
YTNlM2ZiZDk0OGFkMDRhNjk2YzMxNTI1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTIy
OTYsNyArMjI5Niw3IEBAIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IEVsZW1lbnQ6
Omluc2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUgaW5zCiAKICAgICBib29sIGJlY29t
ZUNvbm5lY3RlZCA9IGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudDsKICAgICBUcmVl
U2NvcGUqIG5ld1Njb3BlID0gJnBhcmVudE9mSW5zZXJ0ZWRUcmVlLnRyZWVTY29wZSgpOwotICAg
IEhUTUxEb2N1bWVudCogbmV3RG9jdW1lbnQgPSBiZWNvbWVDb25uZWN0ZWQgJiYgaXM8SFRNTERv
Y3VtZW50PihuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA/ICZkb3duY2FzdDxIVE1MRG9jdW1l
bnQ+KG5ld1Njb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBuZXdE
b2N1bWVudCA9IGJlY29tZUNvbm5lY3RlZCA/IGR5bmFtaWNEb3duY2FzdDxIVE1MRG9jdW1lbnQ+
KG5ld1Njb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKICAgICBpZiAoIWluc2VydGlv
blR5cGUudHJlZVNjb3BlQ2hhbmdlZCkKICAgICAgICAgbmV3U2NvcGUgPSBudWxscHRyOwogCkBA
IC0yMzU4LDcgKzIzNTgsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVt
b3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcgogICAgIGlmIChvbGRQ
YXJlbnRPZlJlbW92ZWRUcmVlLmlzSW5UcmVlU2NvcGUoKSkgewogICAgICAgICBUcmVlU2NvcGUq
IG9sZFNjb3BlID0gJm9sZFBhcmVudE9mUmVtb3ZlZFRyZWUudHJlZVNjb3BlKCk7CiAgICAgICAg
IERvY3VtZW50KiBvbGREb2N1bWVudCA9IHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1
bWVudCA/ICZvbGRTY29wZS0+ZG9jdW1lbnRTY29wZSgpIDogbnVsbHB0cjsKLSAgICAgICAgSFRN
TERvY3VtZW50KiBvbGRIVE1MRG9jdW1lbnQgPSBvbGREb2N1bWVudCAmJiBpczxIVE1MRG9jdW1l
bnQ+KCpvbGREb2N1bWVudCkgPyAmZG93bmNhc3Q8SFRNTERvY3VtZW50Pigqb2xkRG9jdW1lbnQp
IDogbnVsbHB0cjsKKyAgICAgICAgYXV0byogb2xkSFRNTERvY3VtZW50ID0gZHluYW1pY0Rvd25j
YXN0PEhUTUxEb2N1bWVudD4ob2xkRG9jdW1lbnQpOwogICAgICAgICBpZiAoIXJlbW92YWxUeXBl
LnRyZWVTY29wZUNoYW5nZWQpCiAgICAgICAgICAgICBvbGRTY29wZSA9IG51bGxwdHI7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50SW5saW5lcy5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRJbmxpbmVzLmgKaW5kZXggODYwYzA0OTE2MTE0Y2ZlNDY0YTQ3MDJm
ZmE3MWQxOGYxMjk3YzFmZC4uM2Y4NTdhNjQzM2Q2ZTFiMmIzMzJjMGY2OTMzZjU3NDQwNDRmZWY4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRJbmxpbmVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRJbmxpbmVzLmgKQEAgLTYxLDggKzYxLDcgQEAgaW5s
aW5lIE5hbWVkTm9kZU1hcCogTm9kZTo6YXR0cmlidXRlcygpIGNvbnN0CiAKIGlubGluZSBFbGVt
ZW50KiBOb2RlOjpwYXJlbnRFbGVtZW50KCkgY29uc3QKIHsKLSAgICBDb250YWluZXJOb2RlKiBw
YXJlbnQgPSBwYXJlbnROb2RlKCk7Ci0gICAgcmV0dXJuIGlzPEVsZW1lbnQ+KHBhcmVudCkgPyBk
b3duY2FzdDxFbGVtZW50PihwYXJlbnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rv
d25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUoKSk7CiB9CiAKIGlubGluZSBjb25zdCBFbGVtZW50
KiBFbGVtZW50Ojpyb290RWxlbWVudCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoZXIuY3BwCmluZGV4IDM5OTEyMTRlYzE0M2QzODRiNjhiYWY2NTU5OWMyOWY3NjY1MzY2ZWIu
LjBlZmZlMDY1NjJkMmIwZTQ4OTRmMGQ3YWMyOTQ5ZmFlODUwYjBkMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSYgbm9kZSwgRXZlbnQmIGV2ZW50KQogICAgIElu
cHV0RWxlbWVudENsaWNrU3RhdGUgY2xpY2tIYW5kbGluZ1N0YXRlOwogCiAgICAgYm9vbCBpc0Fj
dGl2YXRpb25FdmVudCA9IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudDsK
LSAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXRGb3JMZWdhY3lQcmVBY3RpdmF0aW9u
QmVoYXZpb3IgPSBpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSA/ICZkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50Pihub2RlKSA6IG51bGxwdHI7CisgICAgUmVmUHRyIGlucHV0Rm9yTGVnYWN5UHJl
QWN0aXZhdGlvbkJlaGF2aW9yID0gZHluYW1pY0Rvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5v
ZGUpOwogICAgIGlmICghaW5wdXRGb3JMZWdhY3lQcmVBY3RpdmF0aW9uQmVoYXZpb3IgJiYgaXNB
Y3RpdmF0aW9uRXZlbnQgJiYgZXZlbnQuYnViYmxlcygpKQogICAgICAgICBpbnB1dEZvckxlZ2Fj
eVByZUFjdGl2YXRpb25CZWhhdmlvciA9IGZpbmRJbnB1dEVsZW1lbnRJbkV2ZW50UGF0aChldmVu
dFBhdGgpOwogICAgIGlmIChpbnB1dEZvckxlZ2FjeVByZUFjdGl2YXRpb25CZWhhdmlvcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAppbmRleCBkYWMzZTA4OGQ5YTVkM2I3Njg3ZDRkYjFjZWZi
MmQ1ZWI4YjBlMGYyLi41OWQzOWFiMTljNGFmOGJmYTIyOGE2NWRlNmU1MWEzZjNiMzQ3MGQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgUmVmUHRyPE5v
ZGU+IE1vdXNlRXZlbnQ6OnRvRWxlbWVudCgpIGNvbnN0CiAgICAgICAgIHRhcmdldCA9IHJlbGF0
ZWRUYXJnZXQoKTsKICAgICBlbHNlCiAgICAgICAgIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwot
ICAgIHJldHVybiBpczxOb2RlPih0YXJnZXQpID8gJmRvd25jYXN0PE5vZGU+KCp0YXJnZXQpIDog
bnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PE5vZGU+KHRhcmdldCk7CiB9CiAK
IFJlZlB0cjxOb2RlPiBNb3VzZUV2ZW50Ojpmcm9tRWxlbWVudCgpIGNvbnN0CkBAIC0yMTQsNyAr
MjE0LDcgQEAgUmVmUHRyPE5vZGU+IE1vdXNlRXZlbnQ6OmZyb21FbGVtZW50KCkgY29uc3QKICAg
ICAgICAgdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgZWxzZQogICAgICAgICB0YXJnZXQg
PSByZWxhdGVkVGFyZ2V0KCk7Ci0gICAgcmV0dXJuIGlzPE5vZGU+KHRhcmdldCkgPyAmZG93bmNh
c3Q8Tm9kZT4oKnRhcmdldCkgOiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8
Tm9kZT4odGFyZ2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CmluZGV4IDUxZTBhY2EzNDQ0OWZjM2MzZDY1OWIyNjRjZjg4NWFiMzNmN2Y4Y2QuLjk2MjgxODAz
NjFjNzQzZGQ3NGFmMGFhMzJkYjQ1OGY0ZDZiYTdiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTgw
MSwxNCArODAxLDEyIEBAIE5vZGU6OkVkaXRhYmlsaXR5IE5vZGU6OmNvbXB1dGVFZGl0YWJpbGl0
eShVc2VyU2VsZWN0QWxsVHJlYXRtZW50IHRyZWF0bWVudCwgU2hvCiAKIFJlbmRlckJveCogTm9k
ZTo6cmVuZGVyQm94KCkgY29uc3QKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKLSAgICByZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcikgPyBkb3du
Y2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNE
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwogfQogCiBSZW5kZXJCb3hNb2RlbE9iamVj
dCogTm9kZTo6cmVuZGVyQm94TW9kZWxPYmplY3QoKSBjb25zdAogewotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIHJldHVybiBpczxSZW5kZXJCb3hN
b2RlbE9iamVjdD4ocmVuZGVyZXIpID8gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJl
bmRlcmVyKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCb3hN
b2RlbE9iamVjdD4ocmVuZGVyZXIoKSk7CiB9CiAgICAgCiBMYXlvdXRSZWN0IE5vZGU6OnJlbmRl
clJlY3QoYm9vbCogaXNSZXBsYWNlZCkKQEAgLTExNDgsOCArMTE0Niw3IEBAIEVsZW1lbnQqIE5v
ZGU6OnNoYWRvd0hvc3QoKSBjb25zdAogCiBTaGFkb3dSb290KiBOb2RlOjpjb250YWluaW5nU2hh
ZG93Um9vdCgpIGNvbnN0CiB7Ci0gICAgQ29udGFpbmVyTm9kZSYgcm9vdCA9IHRyZWVTY29wZSgp
LnJvb3ROb2RlKCk7Ci0gICAgcmV0dXJuIGlzPFNoYWRvd1Jvb3Q+KHJvb3QpID8gZG93bmNhc3Q8
U2hhZG93Um9vdD4oJnJvb3QpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0
PFNoYWRvd1Jvb3Q+KHRyZWVTY29wZSgpLnJvb3ROb2RlKCkpOwogfQogCiAjaWYgQVNTRVJUX0VO
QUJMRUQKQEAgLTE2NDMsOCArMTY0MCw4IEBAIHVuc2lnbmVkIHNob3J0IE5vZGU6OmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uKE5vZGUmIG90aGVyTm9kZSkKICAgICBpZiAoJm90aGVyTm9kZSA9PSB0
aGlzKQogICAgICAgICByZXR1cm4gRE9DVU1FTlRfUE9TSVRJT05fRVFVSVZBTEVOVDsKICAgICAK
LSAgICBBdHRyKiBhdHRyMSA9IGlzPEF0dHI+KCp0aGlzKSA/IGRvd25jYXN0PEF0dHI+KHRoaXMp
IDogbnVsbHB0cjsKLSAgICBBdHRyKiBhdHRyMiA9IGlzPEF0dHI+KG90aGVyTm9kZSkgPyAmZG93
bmNhc3Q8QXR0cj4ob3RoZXJOb2RlKSA6IG51bGxwdHI7CisgICAgYXV0byogYXR0cjEgPSBkeW5h
bWljRG93bmNhc3Q8QXR0cj4oKnRoaXMpOworICAgIGF1dG8qIGF0dHIyID0gZHluYW1pY0Rvd25j
YXN0PEF0dHI+KG90aGVyTm9kZSk7CiAgICAgCiAgICAgTm9kZSogc3RhcnQxID0gYXR0cjEgPyBh
dHRyMS0+b3duZXJFbGVtZW50KCkgOiB0aGlzOwogICAgIE5vZGUqIHN0YXJ0MiA9IGF0dHIyID8g
YXR0cjItPm93bmVyRWxlbWVudCgpIDogJm90aGVyTm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3Bw
CmluZGV4IDlhNTEyZWZlN2M5YzAxZWY4MjAxMmNiNDNmOWI2MTE1NTg5NjdhMmEuLmQ1ODdiOGJj
NjhiMjJmMGZmNGRhMDNjZDg5MjNjM2M2N2E4MzIxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNw
cApAQCAtMTg1LDcgKzE4NSw3IEBAIFRleHQqIFBvc2l0aW9uOjpjb250YWluZXJUZXh0KCkgY29u
c3QKIHsKICAgICBzd2l0Y2ggKGFuY2hvclR5cGUoKSkgewogICAgIGNhc2UgUG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yOgotICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlICYmIGlzPFRleHQ+KCpt
X2FuY2hvck5vZGUpID8gZG93bmNhc3Q8VGV4dD4obV9hbmNob3JOb2RlLmdldCgpKSA6IG51bGxw
dHI7CisgICAgICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8VGV4dD4obV9hbmNob3JOb2RlLmdl
dCgpKTsKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVBbmNob3I6CiAgICAgY2FzZSBQb3NpdGlv
bklzQWZ0ZXJBbmNob3I6CiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9UZXh0Tm9kZVRyYXZlcnNhbC5jcHAKaW5kZXggYjc4Y2E3OTBjZDc3MmUyNWU3NTcxYjI3YTM2
ZjM3Mjk4ZDc5ODg0ZC4uNzc2YzJjYjc2NDBkYzE2NzE5NzY4ZDNhYTIzMmFlMzc3MWQ2YTU1MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwCkBAIC00NywxMCArNDcs
MTAgQEAgU3RyaW5nIGNvbnRlbnRzQXNTdHJpbmcoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdCkK
IAogU3RyaW5nIGNvbnRlbnRzQXNTdHJpbmcoY29uc3QgTm9kZSYgcm9vdCkKIHsKLSAgICBpZiAo
aXM8VGV4dD4ocm9vdCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxUZXh0Pihyb290KS5kYXRh
KCk7Ci0gICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KHJvb3QpKQotICAgICAgICByZXR1cm4gY29u
dGVudHNBc1N0cmluZyhkb3duY2FzdDxDb250YWluZXJOb2RlPihyb290KSk7CisgICAgaWYgKGF1
dG8gdGV4dCA9IGR5bmFtaWNEb3duY2FzdDxUZXh0Pihyb290KSkKKyAgICAgICAgcmV0dXJuIHRl
eHQtPmRhdGEoKTsKKyAgICBpZiAoYXV0byBjb250YWluZXJOb2RlID0gZHluYW1pY0Rvd25jYXN0
PENvbnRhaW5lck5vZGU+KHJvb3QpKQorICAgICAgICByZXR1cm4gY29udGVudHNBc1N0cmluZygq
Y29udGFpbmVyTm9kZSk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVl
U2NvcGUuY3BwCmluZGV4IDhmNmM0N2Y4Y2Q2OGVmZmEwOTkyNDZjMDAxMDUyNjU5MmFiNGViNjMu
LmUyOTY3NjEzMzQ2Y2ExYTdkZmZlMzczMzNjMGVmNmQ1NTQ0ZWUzZDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuY3BwCkBAIC00MTQsOCArNDE0LDggQEAgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4g
VHJlZVNjb3BlOjplbGVtZW50c0Zyb21Qb2ludChkb3VibGUgY2xpZW50WCwgZG91YmxlIGNsaWUK
ICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYg
KGlzPFBzZXVkb0VsZW1lbnQ+KG5vZGUpKQotICAgICAgICAgICAgbm9kZSA9IGRvd25jYXN0PFBz
ZXVkb0VsZW1lbnQ+KCpub2RlKS5ob3N0RWxlbWVudCgpOworICAgICAgICBpZiAoYXV0byBwc2V1
ZG9FbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpub2RlKSkKKyAgICAg
ICAgICAgIG5vZGUgPSBwc2V1ZG9FbGVtZW50LT5ob3N0RWxlbWVudCgpOwogCiAgICAgICAgIC8v
IFBydW5lIGR1cGxpY2F0ZSBlbnRyaWVzLiBBIHBzZXVkbyA6OmJlZm9yZSBjb250ZW50IGFib3Zl
IGl0cyBwYXJlbnQKICAgICAgICAgLy8gbm9kZSBzaG91bGQgb25seSByZXN1bHQgaW4gb25lIGVu
dHJ5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1R5cGVkRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJ
dGVyYXRvci5oCmluZGV4IDZiY2Q1YzQwYTgyMmFjZmQ3MTllYjEzZTY0ZjNjNjBlMGU1Yjk2ZjAu
LmU0MGJlZjQzZGU2YjFhNGU0MTJiYzJiNWY5NWUwNDU2M2ZmMmE3ZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9UeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgKQEAgLTE3
MCw4ICsxNzAsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudERlc2Nl
bmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gRWxlbWVudERlcwogdGVtcGxhdGU8dHlwZW5hbWUg
RWxlbWVudFR5cGU+IEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IEVsZW1l
bnREZXNjZW5kYW50UmFuZ2U8RWxlbWVudFR5cGU+Ojpmcm9tKEVsZW1lbnQmIGRlc2NlbmRhbnQp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGRlc2NlbmRhbnQuaXNEZXNjZW5kYW50T2YobV9yb290KSk7
Ci0gICAgaWYgKGlzPEVsZW1lbnRUeXBlPihkZXNjZW5kYW50KSkKLSAgICAgICAgcmV0dXJuIEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgZG93bmNhc3Q8RWxl
bWVudFR5cGU+KCZkZXNjZW5kYW50KSk7CisgICAgaWYgKGF1dG8gZGVzY2VuZGFudEVsZW1lbnQg
PSBkeW5hbWljRG93bmNhc3Q8RWxlbWVudFR5cGU+KGRlc2NlbmRhbnQpKQorICAgICAgICByZXR1
cm4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBkZXNjZW5k
YW50RWxlbWVudCk7CiAgICAgRWxlbWVudFR5cGUqIG5leHQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5
cGU+OjpuZXh0KGRlc2NlbmRhbnQsICZtX3Jvb3QpOwogICAgIHJldHVybiBFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIG5leHQpOwogfQpAQCAtMjA3LDggKzIw
Nyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBFbGVtZW50RGVzY2VuZGFudEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPiBJbmNsdXNpdmVFCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50
VHlwZT4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gSW5jbHVzaXZlRWxl
bWVudERlc2NlbmRhbnRSYW5nZTxFbGVtZW50VHlwZT46OmZyb20oRWxlbWVudCYgZGVzY2VuZGFu
dCkgY29uc3QKIHsKICAgICBBU1NFUlQoJm1fcm9vdCA9PSAmZGVzY2VuZGFudCB8fCBkZXNjZW5k
YW50LmlzRGVzY2VuZGFudE9mKG1fcm9vdCkpOwotICAgIGlmIChpczxFbGVtZW50VHlwZT4oZGVz
Y2VuZGFudCkpCi0gICAgICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1l
bnRUeXBlPihtX3Jvb3QsIGRvd25jYXN0PEVsZW1lbnRUeXBlPigmZGVzY2VuZGFudCkpOworICAg
IGlmIChhdXRvIGVsZW1lbnREZXNjZW5kYW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnRUeXBl
PihkZXNjZW5kYW50KSkKKyAgICAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8
RWxlbWVudFR5cGU+KG1fcm9vdCwgJmVsZW1lbnREZXNjZW5kYW50KTsKICAgICBFbGVtZW50VHlw
ZSogbmV4dCA9IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5leHQoZGVzY2VuZGFudCwgJm1fcm9v
dCk7CiAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1f
cm9vdCwgbmV4dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExp
bmtTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKaW5k
ZXggMTMxNTkxYmI0OThiNDc5ZmYwMDBlYjg3ODc2YTcyM2MyYWZhZTdlZS4uYzU4N2M0ZWMwZWU4
NzM2YTk3ZDU1NzA5NWY1MzRiNmQ0ZDg1YjFkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVk
TGlua1N0YXRlLmNwcApAQCAtNzEsMTAgKzcxLDEwIEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6
aW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKQogCiBpbmxpbmUgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8U2hhcmVkU3RyaW5nSGFzaD4gbGlua0hhc2hGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KSkKLSAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlu
a0hhc2goKTsKLSAgICBpZiAoaXM8U1ZHQUVsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1
cm4gZG93bmNhc3Q8U1ZHQUVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOworICAg
IGlmIChhdXRvIGFuY2hvciA9IGR5bmFtaWNEb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oZWxl
bWVudCkpCisgICAgICAgIHJldHVybiBhbmNob3ItPnZpc2l0ZWRMaW5rSGFzaCgpOworICAgIGlm
IChhdXRvIGFuY2hvciA9IGR5bmFtaWNEb3duY2FzdDxTVkdBRWxlbWVudD4oZWxlbWVudCkpCisg
ICAgICAgIHJldHVybiBhbmNob3ItPnZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9y
dHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL21l
c3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKaW5kZXggZmM1MTNlZTFj
ODRiN2JiOGU0OTZhM2E3MGE0MTY0ODA2MDAzYTc5Zi4uMzQxYzAzY2VmM2RlM2E0YzhjNDZlNDUw
NTI4YTZhM2M1MGMzNTBiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vw
b3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKQEAgLTU3LDEx
ICs1NywxMSBAQCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpzZXRTaGFyZWRQcm92
aWRlcihNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlciYgcAogCiBNZXNzYWdlUG9ydENoYW5uZWxQ
cm92aWRlciYgTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6OmZyb21Db250ZXh0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0
KSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5tZXNzYWdlUG9y
dENoYW5uZWxQcm92aWRlcigpOworICAgIGlmIChhdXRvIGRvY3VtZW50ID0gZHluYW1pY0Rvd25j
YXN0PERvY3VtZW50Pihjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tZXNzYWdl
UG9ydENoYW5uZWxQcm92aWRlcigpOwogCi0gICAgaWYgKGlzPFdvcmtsZXRHbG9iYWxTY29wZT4o
Y29udGV4dCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxXb3JrbGV0R2xvYmFsU2NvcGU+KGNv
bnRleHQpLm1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyKCk7CisgICAgaWYgKGF1dG8gd29ya2xl
dFNjb3BlID0gZHluYW1pY0Rvd25jYXN0PFdvcmtsZXRHbG9iYWxTY29wZT4oY29udGV4dCkpCisg
ICAgICAgIHJldHVybiB3b3JrbGV0U2NvcGUtPm1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyKCk7
CiAKICAgICByZXR1cm4gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpLm1lc3Nh
Z2VQb3J0Q2hhbm5lbFByb3ZpZGVyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApp
bmRleCA5ODBkZGU4NTFmMTA3MjNkNzhmNjYxOTg0MjczMjQ4ZjdhMGZhNWM0Li43ZDlkNTliZTFj
MTUyZjA5ODVmNWY1MThiYjlmY2NlNTZmODdiYzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5jcHAKQEAgLTMyMSw4ICszMjEsNyBAQCBib29sIGlzSW5saW5lKGNvbnN0IE5vZGUqIG5vZGUp
CiAvLyBrbm93aW5nIGFib3V0IHRoZXNlIGtpbmRzIG9mIHNwZWNpYWwgY2FzZXMuCiBFbGVtZW50
KiBlbmNsb3NpbmdCbG9jayhOb2RlKiBub2RlLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUg
cnVsZSkKIHsKLSAgICBOb2RlKiBlbmNsb3NpbmdOb2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIGlzQmxvY2ssIHJ1bGUpOwotICAgIHJl
dHVybiBpczxFbGVtZW50PihlbmNsb3NpbmdOb2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGVuY2xv
c2luZ05vZGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+
KGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBp
c0Jsb2NrLCBydWxlKSk7CiB9CiAKIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdC
bG9jayhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T3B0R3JvdXBFbGVtZW50LmNwcAppbmRleCAzOTg5ZDdlN2RlNTUwNzJiMjQyZThlMzQwNTQxN2Zm
NjY5MDdiMjc3Li45ZjNhNjExNDljMDEwZDhkZTcyNTA1YjA3N2ZhMjBjZTFiMWYzMGZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKQEAgLTE1NSw4ICsx
NTUsNyBAQCBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBMYWJlbFRleHQoKSBjb25z
dAogICAgIAogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRHcm91cEVsZW1lbnQ6Om93bmVyU2Vs
ZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgYXV0byogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwot
ICAgIHJldHVybiBpczxIVE1MU2VsZWN0RWxlbWVudD4ocGFyZW50KSA/IGRvd25jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50PihwYXJlbnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25j
YXN0PEhUTUxTZWxlY3RFbGVtZW50PihwYXJlbnROb2RlKCkpOwogfQogCiBib29sIEhUTUxPcHRH
cm91cEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5kZXggODJjMzg5ZTkzY2JhOGQ0NmRiMDRl
NWI2ZTI0NDhkM2M3NTY5Y2M3MS4uOTFkZDkwZjM3NTQzMDU3ZTcwMzcyNDVjYmU4ODU4OGY0OTQy
NzZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
Y3BwCkBAIC03NCw3ICs3NCw3IEBAIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6On5IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KCkKIFJlbmRlckVtYmVkZGVkT2JqZWN0KiBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50OjpyZW5kZXJFbWJlZGRlZE9iamVjdCgpIGNvbnN0CiB7CiAgICAgLy8gSFRNTE9iamVjdEVs
ZW1lbnQgYW5kIEhUTUxFbWJlZEVsZW1lbnQgbWF5IHJldHVybiBhcmJpdHJhcnkgcmVuZGVyZXJz
IHdoZW4gdXNpbmcgZmFsbGJhY2sgY29udGVudC4KLSAgICByZXR1cm4gaXM8UmVuZGVyRW1iZWRk
ZWRPYmplY3Q+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJl
bmRlcmVyKCkpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckVt
YmVkZGVkT2JqZWN0PihyZW5kZXJlcigpKTsKIH0KIAogYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50Ojppc0ltYWdlVHlwZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IGExYmUxMTUwNWIwZDVmNWYy
MzQyN2E0ZjE4NmI2OWM3Y2VhM2ZlOGQuLmI4YjVmYjY1YWNmNDEyZTkzMjI1MjQ1YTQxYTVkODE4
MTU1NWQ2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC03OTQsNyArNzk0LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNyZWF0ZShDYW4KICAgICBib29sIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxz
ZTsKICAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gbnVsbHB0cjsKIAotICAgIGF1dG8qIGNh
bnZhc0VsZW1lbnQgPSBpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSA/ICZkb3duY2FzdDxI
VE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSA6IG51bGxwdHI7CisgICAgYXV0byogY2FudmFzRWxl
bWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKTsKIAogICAg
IGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNhbnZh
c0VsZW1lbnQtPmRvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
VmVyaWZpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmljYXRpb24uY3Bw
CmluZGV4IDNjMTk3MTUwN2JlMzI5ZmM5NjNmMjQ3YjdhNGIwODMzNDYyMDY3MTUuLjUzMWQyNGM0
M2VmYjE0YTI3ODY0ZmY1Zjk2MGUyMTA5OTBjNWRjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9WZXJpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9W
ZXJpZmljYXRpb24uY3BwCkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlz
bWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFt
LAogICAgIGZvciAodW5zaWduZWQgaW5saW5lQm94SW5kZXggPSAwOyBpbmxpbmVCb3hJbmRleCA8
IGlubGluZUJveGVzLnNpemUoKSAmJiBib3hJbmRleCA8IGJveGVzLnNpemUoKTsgKytpbmxpbmVC
b3hJbmRleCkgewogICAgICAgICBhdXRvJiBib3ggPSBib3hlc1tib3hJbmRleF07CiAgICAgICAg
IGF1dG8qIGlubGluZUJveCA9IGlubGluZUJveGVzW2lubGluZUJveEluZGV4XTsKLSAgICAgICAg
YXV0byogaW5saW5lVGV4dEJveCA9IGlzPFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g+KGlu
bGluZUJveCkgPyBkb3duY2FzdDxXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94PihpbmxpbmVC
b3gpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9IGR5bmFtaWNEb3du
Y2FzdDxXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpOwogICAgICAgICBi
b29sIG1hdGNoaW5nUnVucyA9IGlubGluZVRleHRCb3ggPyBjaGVja0Zvck1hdGNoaW5nVGV4dFJ1
bnMoYm94LCAqaW5saW5lVGV4dEJveCkgOiBjaGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoYm94
LCAqaW5saW5lQm94KTsKIAogICAgICAgICBpZiAoIW1hdGNoaW5nUnVucykgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcAppbmRleCBiMDBjNTE4MmFmMjk1
MTM0NmE3ZTYyZDlkYmY5OTI1NjE3MWEyOGJlLi4zNDRjZGZiMzg5MWExNzMyYTUwMzg3NWFkZmEz
MTgyYzUyMmRlOTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9s
bGVyLmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xsZXI6OnVw
ZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpCiAKICAgICB3aGlsZSAocmVuZGVyZXIgJiYgIShpczxS
ZW5kZXJCb3g+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmNh
bkF1dG9zY3JvbGwoKSkpCiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwot
ICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyID0gaXM8UmVuZGVyQm94PihyZW5kZXJlcikgPyBkb3du
Y2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKSA6IG51bGxwdHI7CisgICAgbV9hdXRvc2Nyb2xsUmVu
ZGVyZXIgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CiB9CiAKIHZvaWQg
QXV0b3Njcm9sbENvbnRyb2xsZXI6OnVwZGF0ZURyYWdBbmREcm9wKE5vZGUqIGRyb3BUYXJnZXRO
b2RlLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3NpdGlvbiwgV2FsbFRpbWUgZXZlbnRUaW1lKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVRpbWVyLmNwcAppbmRleCA4ODkwNTJlM2E0NTJlMjU2ZTM4NzgyMzg2N2Uz
YmI3OGQ1MDU3NDZkLi42NDViNjk5ZDExMmYxMTQ1ZTQxMzA5YmRlNTIxNWMxYjBiNmVlNzc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcApAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgRE9NVGlt
ZXI6OmZpcmVkKCkKICAgICAgICAgbmVzdGVkVGltZXJzLT5zdGFydFRyYWNraW5nKCk7CiAKICNp
ZiBFTkFCTEUoQ09OVEVOVF9DSEFOR0VfT0JTRVJWRVIpCi0gICAgQ29udGVudENoYW5nZU9ic2Vy
dmVyOjpET01UaW1lclNjb3BlIG9ic2VydmluZ1Njb3BlKGlzPERvY3VtZW50Pihjb250ZXh0KSA/
ICZkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkgOiBudWxscHRyLCAqdGhpcyk7CisgICAgQ29u
dGVudENoYW5nZU9ic2VydmVyOjpET01UaW1lclNjb3BlIG9ic2VydmluZ1Njb3BlKGR5bmFtaWNE
b3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksICp0aGlzKTsKICNlbmRpZgogICAgIG1fYWN0aW9u
LT5leGVjdXRlKGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CmluZGV4IDEzOTk1Njg5MzE5ZDk0MGJhM2JmOWQ0YjQyOGQyNzJhNmEzNWE0MDIuLmQ0N2YyYjFm
NmU3ZWJjYjk5ZTJiMDIyNThjMmM5MDI5ZDQxMjQ5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCkBAIC0zNDUsNyArMzQ1LDcgQEAgc3RhdGljIEhUTUxJbnB1dEVsZW1l
bnQqIGFzRmlsZUlucHV0KE5vZGUmIG5vZGUpCiAgICAgLy8gSWYgdGhpcyBpcyBhIGJ1dHRvbiBp
bnNpZGUgb2YgdGhlIGEgZmlsZSBpbnB1dCwgbW92ZSB1cCB0byB0aGUgZmlsZSBpbnB1dC4KICAg
ICBpZiAoaW5wdXRFbGVtZW50LT5pc1RleHRCdXR0b24oKSAmJiBpczxTaGFkb3dSb290PihpbnB1
dEVsZW1lbnQtPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpKSB7CiAgICAgICAgIGF1dG8mIGhvc3Qg
PSAqZG93bmNhc3Q8U2hhZG93Um9vdD4oaW5wdXRFbGVtZW50LT50cmVlU2NvcGUoKS5yb290Tm9k
ZSgpKS5ob3N0KCk7Ci0gICAgICAgIGlucHV0RWxlbWVudCA9IGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KGhvc3QpID8gJmRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGhvc3QpIDogbnVsbHB0cjsKKyAg
ICAgICAgaW5wdXRFbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGhv
c3QpOwogICAgIH0KIAogICAgIHJldHVybiBpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5p
c0ZpbGVVcGxvYWQoKSA/IGlucHV0RWxlbWVudCA6IG51bGxwdHI7CkBAIC01MDQsOCArNTA0LDgg
QEAgc3RkOjpvcHRpb25hbDxEcmFnT3BlcmF0aW9uPiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9u
Rm9yTG9hZChjb25zdCBEcmFnRGF0YSYgZHIKICAgICBib29sIHBsdWdpbkRvY3VtZW50QWNjZXB0
c0RyYWdzID0gZmFsc2U7CiAKICAgICBpZiAoaXM8UGx1Z2luRG9jdW1lbnQ+KGRvY3VtZW50KSkg
ewotICAgICAgICBjb25zdCBXaWRnZXQqIHdpZGdldCA9IGRvd25jYXN0PFBsdWdpbkRvY3VtZW50
PigqZG9jdW1lbnQpLnBsdWdpbldpZGdldCgpOwotICAgICAgICBjb25zdCBQbHVnaW5WaWV3QmFz
ZSogcGx1Z2luVmlldyA9IGlzPFBsdWdpblZpZXdCYXNlPih3aWRnZXQpID8gZG93bmNhc3Q8UGx1
Z2luVmlld0Jhc2U+KHdpZGdldCkgOiBudWxscHRyOworICAgICAgICBhdXRvKiB3aWRnZXQgPSBk
b3duY2FzdDxQbHVnaW5Eb2N1bWVudD4oKmRvY3VtZW50KS5wbHVnaW5XaWRnZXQoKTsKKyAgICAg
ICAgYXV0byogcGx1Z2luVmlldyA9IGR5bmFtaWNEb3duY2FzdDxQbHVnaW5WaWV3QmFzZT4od2lk
Z2V0KTsKIAogICAgICAgICBpZiAocGx1Z2luVmlldykKICAgICAgICAgICAgIHBsdWdpbkRvY3Vt
ZW50QWNjZXB0c0RyYWdzID0gcGx1Z2luVmlldy0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURy
YWdzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCA2ZGZlMGRkM2Vh
NGRhM2ExZjVmMGY2Yzc5ZDZkMWEzYmYwMGMzMTU5Li45ZTk3ZGQ1ZjY4OWU2YTFhOTBjOTA2OTQ0
NWRjM2Y0YjhjNDVlODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFn
SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAg
LTgwLDcgKzgwLDcgQEAgRHJhZ0ltYWdlUmVmIGZpdERyYWdJbWFnZVRvTWF4U2l6ZShEcmFnSW1h
Z2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGxheW91dFNpemUKIAogc3RydWN0IFNjb3BlZE5v
ZGVEcmFnRW5hYmxlciB7CiAgICAgU2NvcGVkTm9kZURyYWdFbmFibGVyKEZyYW1lJiBmcmFtZSwg
Tm9kZSYgbm9kZSkKLSAgICAgICAgOiBlbGVtZW50KGlzPEVsZW1lbnQ+KG5vZGUpID8gJmRvd25j
YXN0PEVsZW1lbnQ+KG5vZGUpIDogbnVsbHB0cikKKyAgICAgICAgOiBlbGVtZW50KGR5bmFtaWNE
b3duY2FzdDxFbGVtZW50Pihub2RlKSkKICAgICB7CiAgICAgICAgIGlmIChlbGVtZW50KQogICAg
ICAgICAgICAgZWxlbWVudC0+c2V0QmVpbmdEcmFnZ2VkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQppbmRleCAyYTRj
OTFiNTM2OWZlYzU4ZDljOWQ5NGU5ZmI0MjQ2ZDNjYmVmOTM4Li5lNjFhM2E3ZmNjOTYzNzk4ZjY4
OThjMDEyN2JkNzRiYjMzMGJmN2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQg
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNldENETVNlc3Npb24oQ0RNU2Vzc2lvbk1lZGlh
U291cmNlQVZGT2JqQyogc2VzCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRD
RE1JbnN0YW5jZShDRE1JbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkgJiYgSEFWRShBVkNPTlRFTlRLRVlTRVNTSU9OKQotICAgIGF1dG8qIGZwc0luc3Rh
bmNlID0gaXM8Q0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakM+KGluc3RhbmNlKSA/
IGRvd25jYXN0PENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDPihpbnN0YW5jZSkg
OiBudWxscHRyOworICAgIGF1dG8qIGZwc0luc3RhbmNlID0gZHluYW1pY0Rvd25jYXN0PENETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDPihpbnN0YW5jZSk7CiAgICAgaWYgKGZwc0lu
c3RhbmNlID09IG1fY2RtSW5zdGFuY2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCmluZGV4IDJjZGRlZGIx
NWVmMGFlNDg3ODNjYzFjYTdiMzQ0ZmIwMjQzNDUwMmUuLjdiNDZmMzk4YmQxMmE4OWVhNTlmZDc2
YjY1OTI2YTI4NDE4Mzg1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
ZWdhY3lJbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5SW5saW5lRmxvd0JveC5jcHAKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIExlZ2FjeUlubGlu
ZUZsb3dCb3g6OmNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhMZWdhY3lSb290SW5saW5lQm94JiBy
b290Qm94LAogICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gUG9zaXRpb25lZCBwbGFjZWhvbGRlcnMg
ZG9uJ3QgYWZmZWN0IGNhbGN1bGF0aW9ucy4KICAgICAgICAgCi0gICAgICAgIExlZ2FjeUlubGlu
ZUZsb3dCb3gqIGlubGluZUZsb3dCb3ggPSBpczxMZWdhY3lJbmxpbmVGbG93Qm94PigqY2hpbGQp
ID8gZG93bmNhc3Q8TGVnYWN5SW5saW5lRmxvd0JveD4oY2hpbGQpIDogbnVsbHB0cjsKKyAgICAg
ICAgYXV0byogaW5saW5lRmxvd0JveCA9IGR5bmFtaWNEb3duY2FzdDxMZWdhY3lJbmxpbmVGbG93
Qm94PigqY2hpbGQpOwogICAgICAgICAKICAgICAgICAgYm9vbCBhZmZlY3RzQXNjZW50ID0gZmFs
c2U7CiAgICAgICAgIGJvb2wgYWZmZWN0c0Rlc2NlbnQgPSBmYWxzZTsKQEAgLTY2Nyw3ICs2Njcs
NyBAQCBzdGF0aWMgdm9pZCBwbGFjZUNoaWxkSW5saW5lQm94ZXNJbkJsb2NrRGlyZWN0aW9uKExl
Z2FjeUlubGluZUZsb3dCb3gmIGlubGluZUJveAogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIAotICAgICAgICBMZWdhY3lJbmxpbmVGbG93Qm94KiBpbmxpbmVGbG93Qm94ID0gaXM8
TGVnYWN5SW5saW5lRmxvd0JveD4oKmNoaWxkKSA/IGRvd25jYXN0PExlZ2FjeUlubGluZUZsb3dC
b3g+KGNoaWxkKSA6IG51bGxwdHI7CisgICAgICAgIGF1dG8qIGlubGluZUZsb3dCb3ggPSBkeW5h
bWljRG93bmNhc3Q8TGVnYWN5SW5saW5lRmxvd0JveD4oKmNoaWxkKTsKICAgICAgICAgYm9vbCBj
aGlsZEFmZmVjdHNUb3BCb3R0b21Qb3MgPSB0cnVlOwogCiAgICAgICAgIGlmIChjaGlsZC0+dmVy
dGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OlRvcCAmJiB2ZXJ0aWNhbEFsaWduQXBwbGll
cyhjaGlsZC0+cmVuZGVyZXIoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwCmluZGV4IDNlN2UwY2NlMTU5MjA0M2E4ZWIxNDk5MDg0MDYyNjA3OTA0Y2Y0
ZjAuLjg0MmJlMWIzMjlmMmI2N2MxYTg3ZjU0MWI4MTJjNzFjZDliNTliNTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC03MzksNyArNzM5LDcg
QEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94JiBjaGls
ZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywKICAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoY2hp
bGQsIGxvZ2ljYWxUb3BFc3RpbWF0ZSwgQXBwbHlMYXlvdXREZWx0YSk7CiAgICAgZXN0aW1hdGVG
cmFnbWVudFJhbmdlRm9yQm94Q2hpbGQoY2hpbGQpOwogCi0gICAgUmVuZGVyQmxvY2tGbG93KiBj
aGlsZEJsb2NrRmxvdyA9IGlzPFJlbmRlckJsb2NrRmxvdz4oY2hpbGQpID8gJmRvd25jYXN0PFJl
bmRlckJsb2NrRmxvdz4oY2hpbGQpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBjaGlsZEJsb2NrRmxv
dyA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKTsKICAgICBib29sIG1h
cmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSBmYWxzZTsKICAgICBpZiAobG9naWNhbFRvcEVzdGlt
YXRlICE9IG9sZExvZ2ljYWxUb3AgJiYgIWNoaWxkLmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxv
Y2tGbG93ICYmIGNoaWxkQmxvY2tGbG93LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJr
RGVzY2VuZGFudHNXaXRoRmxvYXRzID0gdHJ1ZTsKQEAgLTk5Myw3ICs5OTMsNyBAQCBSZW5kZXJC
bG9ja0Zsb3c6Ok1hcmdpblZhbHVlcyBSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpblZhbHVlc0ZvckNo
aWxkKFJlbmRlckJveCYgYwogICAgIExheW91dFVuaXQgYmVmb3JlTWFyZ2luOwogICAgIExheW91
dFVuaXQgYWZ0ZXJNYXJnaW47CiAKLSAgICBSZW5kZXJCbG9ja0Zsb3cqIGNoaWxkUmVuZGVyQmxv
Y2sgPSBpczxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKSA/ICZkb3duY2FzdDxSZW5kZXJCbG9ja0Zs
b3c+KGNoaWxkKSA6IG51bGxwdHI7CisgICAgYXV0byogY2hpbGRSZW5kZXJCbG9jayA9IGR5bmFt
aWNEb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKTsKICAgICAKICAgICAvLyBJZiB0aGUg
Y2hpbGQgaGFzIHRoZSBzYW1lIGRpcmVjdGlvbmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBq
dXN0IHJldHVybiBpdHMKICAgICAvLyBtYXJnaW5zIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KQEAg
LTE0NzEsNyArMTQ3MSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUFmdGVy
QnJlYWsoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsCiAKIExheW91dFVuaXQg
UmVuZGVyQmxvY2tGbG93OjphZGp1c3RCbG9ja0NoaWxkRm9yUGFnaW5hdGlvbihMYXlvdXRVbml0
IGxvZ2ljYWxUb3BBZnRlckNsZWFyLCBMYXlvdXRVbml0IGVzdGltYXRlV2l0aG91dFBhZ2luYXRp
b24sIFJlbmRlckJveCYgY2hpbGQsIGJvb2wgYXRCZWZvcmVTaWRlT2ZCbG9jaykKIHsKLSAgICBS
ZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyAm
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7CisgICAgYXV0byogY2hpbGRS
ZW5kZXJCbG9jayA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpOwogCiAgICAg
aWYgKGVzdGltYXRlV2l0aG91dFBhZ2luYXRpb24gIT0gbG9naWNhbFRvcEFmdGVyQ2xlYXIpIHsK
ICAgICAgICAgLy8gT3VyIGd1ZXNzIHByaW9yIHRvIHBhZ2luYXRpb24gbW92ZW1lbnQgd2FzIHdy
b25nLiBCZWZvcmUgd2UgYXR0ZW1wdCB0byBwYWdpbmF0ZSwgbGV0J3MgdHJ5IGFnYWluIGF0IHRo
ZSBuZXcKQEAgLTI0OTYsNyArMjQ5Niw3IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlv
bk5ld0Zsb2F0cygpCiAgICAgICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhZ2luYXRpb24g
c3RydXQgdGhhdCBpcyBtYWtpbmcgdXMgbW92ZSBkb3duIGZ1cnRoZXIuCiAgICAgICAgICAgICAv
LyBOb3RlIHRoYXQgYW4gdW5zcGxpdHRhYmxlIGNoaWxkIGNhbid0IGFsc28gaGF2ZSBhIHBhZ2lu
YXRpb24gc3RydXQsIHNvIHRoaXMKICAgICAgICAgICAgIC8vIGlzIGV4Y2x1c2l2ZSB3aXRoIHRo
ZSBjYXNlIGFib3ZlLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSBpczxS
ZW5kZXJCbG9jaz4oY2hpbGRCb3gpID8gJmRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZEJveCkg
OiBudWxscHRyOworICAgICAgICAgICAgYXV0byogY2hpbGRCbG9jayA9IGR5bmFtaWNEb3duY2Fz
dDxSZW5kZXJCbG9jaz4oY2hpbGRCb3gpOwogICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2sgJiYg
Y2hpbGRCbG9jay0+cGFnaW5hdGlvblN0cnV0KCkpIHsKICAgICAgICAgICAgICAgICBuZXdMb2dp
Y2FsVG9wICs9IGNoaWxkQmxvY2stPnBhZ2luYXRpb25TdHJ1dCgpOwogICAgICAgICAgICAgICAg
IGNoaWxkQmxvY2stPnNldFBhZ2luYXRpb25TdHJ1dCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggYzI4MWM2MzliZGI3NzIxYTUwODBiZTA4OGJhYWI5YjYwZWE4
YzcxNy4uNTVmOGRmMzNiYzNkZTVkZWZhOGZiNThkZDc3YTk0NmNmZjgxNjYzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTEwNTcsNyArMTA1Nyw3IEBAIFJlbmRl
ckJveCogUmVuZGVyQm94OjpmaW5kQXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKICAgICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogICAgIH0KIAot
ICAgIHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlckJveD4o
cmVuZGVyZXIpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIpOwogfQogCiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBv
aW50JiBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAK
aW5kZXggZTc5ZTBmZDcwNWNkYWQ3MWJiMWVjZDQyNjAyNGM2Y2YxODAyNTQ2NC4uMjYzYzVkYzlm
ZWM0YTk1NTI3NDVhZGIxMTNiYWRlN2ViNjA3ZDkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtMjE2Nyw3ICsyMTY3LDcgQEAgYm9vbCBSZW5kZXJF
bGVtZW50OjpjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSBjb25zdAogCiBJbWFnZU9yaWVu
dGF0aW9uIFJlbmRlckVsZW1lbnQ6OmltYWdlT3JpZW50YXRpb24oKSBjb25zdAogewotICAgIGF1
dG8qIGltYWdlRWxlbWVudCA9IGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgPyBkb3du
Y2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBp
bWFnZUVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgp
KTsKICAgICByZXR1cm4gKGltYWdlRWxlbWVudCAmJiAhaW1hZ2VFbGVtZW50LT5hbGxvd3NPcmll
bnRhdGlvbk92ZXJyaWRlKCkpID8gSW1hZ2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uOjpG
cm9tSW1hZ2UpIDogc3R5bGUoKS5pbWFnZU9yaWVudGF0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCmluZGV4
IDg3ODVmMjI5OWM4MGQzOTQ2ZThmZmQyMTY2MmQwMjkyMTk0NjMxZjcuLjg3NTA2OTNiZDJhNjg4
YmU5NGU4YTcwOWQ3YmQ0NmNiNjM0M2QyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcApAQCAtMjQzLDggKzI0Myw3IEBA
IFZpc2libGVQb3NpdGlvbiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cG9zaXRpb25Gb3JQb2lu
dChjb25zdCBMYXlvdXRQb2ludCYsIGNvCiBIVE1MSW5wdXRFbGVtZW50KiBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6dXBsb2FkQnV0dG9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaW5wdXRFbGVt
ZW50KCkuc2hhZG93Um9vdCgpKTsKLSAgICBOb2RlKiBidXR0b25Ob2RlID0gaW5wdXRFbGVtZW50
KCkuc2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KGJ1dHRvbk5vZGUpID8gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oYnV0dG9uTm9k
ZSkgOiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oaW5wdXRFbGVtZW50KCkuc2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCkpOwogfQogCiBTdHJp
bmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmJ1dHRvblZhbHVlKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IGY5MjEzZTJmMzU3MTQ4ZjE0MGM0ZDQxMGQw
ZTExNDE3ZDc2ZjBiOTIuLjA1MDBmODk1ZmUwZjgzNWEyNGFhMWU3YzMxNTM2MGQyZmVkODRlOGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtMzMxLDcgKzMz
MSw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnVwZGF0ZUlubmVyQ29udGVudFJlY3QoKQogICAgIElu
dFNpemUgY29udGFpbmVyU2l6ZShyZXBsYWNlZENvbnRlbnRSZWN0KCkuc2l6ZSgpKTsKICAgICBp
ZiAoIWNvbnRhaW5lclNpemUuaXNFbXB0eSgpKSB7CiAgICAgICAgIFVSTCBpbWFnZVNvdXJjZVVS
TDsKLSAgICAgICAgaWYgKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IGlzPEhUTUxJ
bWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVt
ZW50KCkpIDogbnVsbHB0cikKKyAgICAgICAgaWYgKGF1dG8qIGltYWdlRWxlbWVudCA9IGR5bmFt
aWNEb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpKQogICAgICAgICAgICAgaW1h
Z2VTb3VyY2VVUkwgPSBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC0+aW1hZ2VT
b3VyY2VVUkwoKSk7CiAgICAgICAgIGltYWdlUmVzb3VyY2UoKS5zZXRDb250YWluZXJDb250ZXh0
KGNvbnRhaW5lclNpemUsIGltYWdlU291cmNlVVJMKTsKICAgICB9CkBAIC02NjYsNyArNjY2LDcg
QEAgSW1hZ2VEcmF3UmVzdWx0IFJlbmRlckltYWdlOjpwYWludEludG9SZWN0KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QKICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwogCi0gICAgSFRN
TEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVu
dCgpKSA/IGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgOiBudWxscHRyOwor
ICAgIGF1dG8qIGltYWdlRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50
PihlbGVtZW50KCkpOwogCiAgICAgLy8gRklYTUU6IERvY3VtZW50IHdoZW4gaW1hZ2UgIT0gaW1n
LmdldCgpLgogICAgIEltYWdlKiBpbWFnZSA9IGltYWdlUmVzb3VyY2UoKS5pbWFnZSgpLmdldCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBkNGQ3YzVj
NDQyNmM1OTJjN2EzNWY2N2M1ZmQyMjA4NjJhZTcyZjY4Li42YTlhMzkxMDAzZjJlMDA4YjJhZWFj
Zjc3ZjI0Zjg3YWQzZWE1MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcApAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiBib29s
IFJlbmRlcklubGluZTo6bWF5QWZmZWN0TGF5b3V0KCkgY29uc3QKIHsKICAgICBhdXRvKiBwYXJl
bnRTdHlsZSA9ICZwYXJlbnQoKS0+c3R5bGUoKTsKLSAgICBSZW5kZXJJbmxpbmUqIHBhcmVudFJl
bmRlcklubGluZSA9IGlzPFJlbmRlcklubGluZT4oKnBhcmVudCgpKSA/IGRvd25jYXN0PFJlbmRl
cklubGluZT4ocGFyZW50KCkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBwYXJlbnRSZW5kZXJJbmxp
bmUgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVySW5saW5lPigqcGFyZW50KCkpOwogICAgIGF1dG8g
aGFzSGFyZExpbmVCcmVha0NoaWxkT25seSA9IGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCkg
PT0gbGFzdENoaWxkKCkgJiYgZmlyc3RDaGlsZCgpLT5pc0JSKCk7CiAgICAgYm9vbCBjaGVja0Zv
bnRzID0gZG9jdW1lbnQoKS5pbk5vUXVpcmtzTW9kZSgpOwogICAgIGF1dG8gbWF5QWZmZWN0TGF5
b3V0ID0gKHBhcmVudFJlbmRlcklubGluZSAmJiBwYXJlbnRSZW5kZXJJbmxpbmUtPm1heUFmZmVj
dExheW91dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAyYjA0
NTFhZWNiNjEwOWIwYTJkYzhlNGI4NWE3MDMyYzQyOTIzZWFmLi40YzUwMzVlMDYwYTU4ZGUxOTVl
MjlhNzY4OWJlYjIzZDgyOTcyZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaApAQCAtMTY5LDcgKzE2OSw3IEBAIHB1YmxpYzoKIAogICAgIFBhZ2UmIHBhZ2UoKSBjb25z
dCB7IHJldHVybiByZW5kZXJlcigpLnBhZ2UoKTsgfQogICAgIFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QmIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotICAgIFJlbmRlckJv
eCogcmVuZGVyQm94KCkgY29uc3QgeyByZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSA/
ICZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsgfQorICAgIFJlbmRl
ckJveCogcmVuZGVyQm94KCkgY29uc3QgeyByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSk7IH0KIAogICAgIFJlbmRlckxheWVyKiBwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudDsgfQogICAgIFJlbmRlckxheWVyKiBwcmV2aW91c1NpYmxpbmcoKSBjb25z
dCB7IHJldHVybiBtX3ByZXZpb3VzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpbmVCb3hMaXN0LmNwcAppbmRleCA2ZTEzZjNhYTM0YTI0ODhmNjUwNjIxNTQyOTc3NWZi
ZjI2NTE3NDdjLi4zOTgxYjAxNmMyMWIyZWZkMGU1NGMxMjRjNDBjMWUyMjRiMzQ3MmE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKQEAgLTMx
MCw3ICszMTAsNyBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5n
ZWRDaGlsZChSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbgogICAgIGlmICghY29udGFpbmVy
LnBhcmVudCgpIHx8IChpczxSZW5kZXJCbG9ja0Zsb3c+KGNvbnRhaW5lcikgJiYgY29udGFpbmVy
LnNlbGZOZWVkc0xheW91dCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVySW5saW5l
KiBpbmxpbmVDb250YWluZXIgPSBpczxSZW5kZXJJbmxpbmU+KGNvbnRhaW5lcikgPyAmZG93bmNh
c3Q8UmVuZGVySW5saW5lPihjb250YWluZXIpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBpbmxpbmVD
b250YWluZXIgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVySW5saW5lPihjb250YWluZXIpOwogICAg
IExlZ2FjeUlubGluZUJveCogZmlyc3RCb3ggPSBpbmxpbmVDb250YWluZXIgPyBpbmxpbmVDb250
YWluZXItPmZpcnN0TGluZUJveCgpIDogZmlyc3RMaW5lQm94KCk7CiAKICAgICAvLyBJZiB3ZSBo
YXZlIG5vIGZpcnN0IGxpbmUgYm94LCB0aGVuIGp1c3QgYmFpbCBlYXJseS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCmluZGV4IGFlMjgyMmM2ZWRlYTY5NmMw
OGQ2YjM5MTU1NWY3YzUyMzZiNjQyZjguLjViZGRlMjJkODY4OWIzYjVhNTQ1MzVkNDdiY2NiNDg4
ZmU1NTIyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNw
cApAQCAtMjEwLDcgKzIxMCw3IEBAIHVuc2lnbmVkIFJlbmRlckxpc3RJdGVtOjppdGVtQ291bnRG
b3JPcmRlcmVkTGlzdChjb25zdCBIVE1MT0xpc3RFbGVtZW50JiBsaXN0KQogdm9pZCBSZW5kZXJM
aXN0SXRlbTo6dXBkYXRlVmFsdWVOb3coKSBjb25zdAogewogICAgIGF1dG8qIGxpc3QgPSBlbmNs
b3NpbmdMaXN0KCp0aGlzKTsKLSAgICBhdXRvKiBvcmRlcmVkTGlzdCA9IGlzPEhUTUxPTGlzdEVs
ZW1lbnQ+KGxpc3QpID8gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkgOiBudWxscHRy
OworICAgIGF1dG8qIG9yZGVyZWRMaXN0ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxPTGlzdEVsZW1l
bnQ+KGxpc3QpOwogCiAgICAgLy8gVGhlIHN0YXJ0IGl0ZW0gaXMgZWl0aGVyIHRoZSBjbG9zZXN0
IGl0ZW0gYmVmb3JlIHRoaXMgb25lIGluIHRoZSBsaXN0IHRoYXQgYWxyZWFkeSBoYXMgYSB2YWx1
ZSwKICAgICAvLyBvciB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBpZiBub25lIGhhdmUgYmVm
b3JlIHRoaXMgaGF2ZSB2YWx1ZXMgeWV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAppbmRleCA1MDQ1MDI0ODhkODRkYTkxNWE0ZDIxMDc3ZThjOGNhOWE5ZmZlNGNi
Li44Mzc3YWFmMTg3ZTg4ZDNmY2JhZTNmODczOGE4NTM5YWNlZGVmZmI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTc4MSw3ICsxNzgxLDcgQEAgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlck9iamVjdDo6b2Zmc2V0UGFyZW50KCkgY29uc3QKICAg
ICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgpOwogICAgIH0KIAotICAgIHJldHVybiBp
czxSZW5kZXJCb3hNb2RlbE9iamVjdD4oY3VycmVudCkgPyBkb3duY2FzdDxSZW5kZXJCb3hNb2Rl
bE9iamVjdD4oY3VycmVudCkgOiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8
UmVuZGVyQm94TW9kZWxPYmplY3Q+KGN1cnJlbnQpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVu
ZGVyT2JqZWN0OjpjcmVhdGVWaXNpYmxlUG9zaXRpb24oaW50IG9mZnNldCwgQWZmaW5pdHkgYWZm
aW5pdHkpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNw
cAppbmRleCA4MjU3Mzc2OGJmNDZkMGVkMTI2MWU2OTJmNjU2YmFmMWQ2YjE5YjIyLi5mM2EzMDE1
ZGVjYjdlZmE2OWRhNmEwZjE3NjU1YTRlOGI5ZjEyOTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCBSZW5kZXJUYWJs
ZSogUmVuZGVyVGFibGVDb2w6OnRhYmxlKCkgY29uc3QKICAgICBhdXRvIHRhYmxlID0gcGFyZW50
KCk7CiAgICAgaWYgKHRhYmxlICYmICFpczxSZW5kZXJUYWJsZT4oKnRhYmxlKSkKICAgICAgICAg
dGFibGUgPSB0YWJsZS0+cGFyZW50KCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRlclRhYmxlPih0YWJs
ZSkgPyBkb3duY2FzdDxSZW5kZXJUYWJsZT4odGFibGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4g
ZHluYW1pY0Rvd25jYXN0PFJlbmRlclRhYmxlPih0YWJsZSk7CiB9CiAKIFJlbmRlclRhYmxlQ29s
KiBSZW5kZXJUYWJsZUNvbDo6ZW5jbG9zaW5nQ29sdW1uR3JvdXAoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDAwZjU3MjQzYzU1
ZDYxZWZhMjk2MTI0ZWIzYjc4M2VlNGYxZWEwOGYuLjM4Njc3ZWZjYTcyNDg4NWViM2YzZmFmNzFi
YTFmYWE5NGIxNGY1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKQEAgLTQ3Myw3ICs0NzMsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6Ondy
aXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sCiB2
b2lkIHdyaXRlRGVidWdJbmZvKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9i
amVjdCwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+IGJlaGF2aW9yKQogewogICAgIGlmIChi
ZWhhdmlvci5jb250YWlucyhSZW5kZXJBc1RleHRGbGFnOjpTaG93SURBbmRDbGFzcykpIHsKLSAg
ICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50PihvYmplY3Qubm9kZSgpKSA/
IGRvd25jYXN0PEVsZW1lbnQ+KG9iamVjdC5ub2RlKCkpIDogbnVsbHB0cikgeworICAgICAgICBp
ZiAoYXV0byogZWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihvYmplY3Qubm9kZSgp
KSkgewogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCiAgICAgICAgICAgICAgICAg
dHMgPDwgIiBpZD1cIiIgPDwgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA8PCAiXCIiOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggNjBmZmIxNzA2NWMzMGI3
OTQzYjkzZThjZmE3NTI1NDI5MmMwYmRmOC4uMTdkZjkxZDZjZjA0NjFlN2E4MzBlMzA0NDZlNmFi
NzQ5OWI2YmViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAt
Mzk5LDcgKzM5OSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQogICAgIEVsZW1lbnQqIGRvY3Vt
ZW50RWxlbWVudCA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKFJlbmRl
ckVsZW1lbnQqIHJvb3RSZW5kZXJlciA9IGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVu
dC0+cmVuZGVyZXIoKSA6IG51bGxwdHIpIHsKICAgICAgICAgLy8gVGhlIGRvY3VtZW50IGVsZW1l
bnQncyByZW5kZXJlciBpcyBjdXJyZW50bHkgZm9yY2VkIHRvIGJlIGEgYmxvY2ssIGJ1dCBtYXkg
bm90IGFsd2F5cyBiZS4KLSAgICAgICAgUmVuZGVyQm94KiByb290Qm94ID0gaXM8UmVuZGVyQm94
Pigqcm9vdFJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlckJveD4ocm9vdFJlbmRlcmVyKSA6IG51
bGxwdHI7CisgICAgICAgIGF1dG8qIHJvb3RCb3ggPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94
Pigqcm9vdFJlbmRlcmVyKTsKICAgICAgICAgcm9vdEZpbGxzVmlld3BvcnQgPSByb290Qm94ICYm
ICFyb290Qm94LT54KCkgJiYgIXJvb3RCb3gtPnkoKSAmJiByb290Qm94LT53aWR0aCgpID49IHdp
ZHRoKCkgJiYgcm9vdEJveC0+aGVpZ2h0KCkgPj0gaGVpZ2h0KCk7CiAgICAgICAgIHJvb3RPYnNj
dXJlc0JhY2tncm91bmQgPSByZW5kZXJlck9ic2N1cmVzQmFja2dyb3VuZCgqcm9vdFJlbmRlcmVy
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9u
UmFuZ2VEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURh
dGEuY3BwCmluZGV4IDFhZmMxZTBhYTUwMTIxNjQ5ZTczYTJiYmYyMDI5YjRhMjczYTZjNDkuLmZi
ZTk2MjA1YTcwNDY5ODcxN2I3YjU0ZWQ4YmUzNjRjNDdjYmY2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCkBAIC03NCw4ICs3NCw3IEBA
IHN0YXRpYyBib29sIGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kCiAKIHN0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmlu
Z0Jsb2NrQmVsb3dWaWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgYXV0
byogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgcmV0
dXJuIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmlu
Z0Jsb2NrOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8UmVuZGVyVmlldz4ocmVuZGVyZXIu
Y29udGFpbmluZ0Jsb2NrKCkpOwogfQogCiBzdGF0aWMgU2VsZWN0aW9uQ29udGV4dCBjb2xsZWN0
U2VsZWN0aW9uRGF0YShjb25zdCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnRE
aWZmZXJlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKaW5kZXggNDM3Yzk5OTdmZGJjZDMzNTMxYmQwOTk1MzU4
ODY2ODU0MzAyOGI1Yy4uNjhjNjI3OTgzMjAyODcyZjRjZGY5YWVmMzkwODgwZmI1ZTBlMzYzMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZUJ1aWxkZXIuY3BwCkBAIC02MjUsNyArNjI1LDcgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRl
cjo6bm9ybWFsaXplVHJlZUFmdGVyU3R5bGVDaGFuZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IFIKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpICYm
IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKm5ld1BhcmVudCkubXVsdGlDb2x1bW5GbG93KCkt
PnNwYW5uZXJNYXAoKS5jb250YWlucygmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikpKTsK
ICAgICAgICAgICAgICAgICAgICAgbmV3RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3cgPSBkb3duY2Fz
dDxSZW5kZXJCbG9ja0Zsb3c+KCpuZXdQYXJlbnQpLm11bHRpQ29sdW1uRmxvdygpOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3RW5jbG9zaW5nRnJhZ21lbnRl
ZEZsb3cgIT0gY3VycmVudEVuY2xvc2luZ0ZyYWdtZW50ICYmIGlzPFJlbmRlck11bHRpQ29sdW1u
Rmxvdz4obmV3RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3cpID8gZG93bmNhc3Q8UmVuZGVyTXVsdGlD
b2x1bW5GbG93PihuZXdFbmNsb3NpbmdGcmFnbWVudGVkRmxvdykgOiBudWxscHRyOworICAgICAg
ICAgICAgICAgIHJldHVybiBuZXdFbmNsb3NpbmdGcmFnbWVudGVkRmxvdyAhPSBjdXJyZW50RW5j
bG9zaW5nRnJhZ21lbnQgPyBkeW5hbWljRG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93Pihu
ZXdFbmNsb3NpbmdGcmFnbWVudGVkRmxvdykgOiBudWxscHRyOwogICAgICAgICAgICAgfTsKICAg
ICAgICAgICAgIGlmIChhdXRvKiBuZXdFbmNsb3NpbmdNdWx0aUNvbHVtbiA9IG5ld011bHRpQ29s
dW1uRm9yUmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIExldCB0aGUgZnJhZ21lbnRl
ZCBmbG93IGtub3cgdGhhdCBpdCBoYXMgYSBuZXcgaW4tZmxvdyBkZXNjZW5kYW50LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRl
ci5jcHAKaW5kZXggZTFiZWEwY2MyZDI3Mzc3YjNlNzFiMzBlYjJjMWY2ZjI4MjdiYjlmZi4uMzkw
NGRhNDk0NDc3NTc0OGNiMjdkZjVkMTEwZDI5YWM5NzY5ZmY2NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCkBA
IC02NSw3ICs2NSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlclRyZWVVcGRhdGVy
OjpQYXJlbnQ6OlBhcmVudChDb250YWluZXJOb2RlJiByb290KQotICAgIDogZWxlbWVudChpczxE
b2N1bWVudD4ocm9vdCkgPyBudWxscHRyIDogZG93bmNhc3Q8RWxlbWVudD4oJnJvb3QpKQorICAg
IDogZWxlbWVudChkeW5hbWljRG93bmNhc3Q8RWxlbWVudD4ocm9vdCkpCiAgICAgLCByZW5kZXJU
cmVlUG9zaXRpb24oUmVuZGVyVHJlZVBvc2l0aW9uKCpyb290LnJlbmRlcmVyKCkpKQogewogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2hpbGRDaGFuZ2VJbnZhbGlkYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NoaWxkQ2hhbmdlSW52YWxpZGF0aW9uLmgKaW5kZXgg
YWM2ODliYzM1N2NiZWEwNzQ2MjYyYzUwZGJlODk3Njg4NGU4NDZhNC4uODY3MWZmYWNmZTdhNTgz
MjA1Yzk2YzEwMDA0MjYyNzM2NDU2YjdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvQ2hpbGRDaGFuZ2VJbnZhbGlkYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9D
aGlsZENoYW5nZUludmFsaWRhdGlvbi5oCkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiB9Owog
CiBpbmxpbmUgQ2hpbGRDaGFuZ2VJbnZhbGlkYXRpb246OkNoaWxkQ2hhbmdlSW52YWxpZGF0aW9u
KENvbnRhaW5lck5vZGUmIGNvbnRhaW5lciwgY29uc3QgQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFu
Z2UmIGNoaWxkQ2hhbmdlKQotICAgIDogbV9wYXJlbnRFbGVtZW50KGlzPEVsZW1lbnQ+KGNvbnRh
aW5lcikgPyBkb3duY2FzdDxFbGVtZW50PigmY29udGFpbmVyKSA6IG51bGxwdHIpCisgICAgOiBt
X3BhcmVudEVsZW1lbnQoZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KGNvbnRhaW5lcikpCiAgICAg
LCBtX2NoaWxkQ2hhbmdlKGNoaWxkQ2hhbmdlKQogICAgICwgbV9pc0VuYWJsZWQobV9wYXJlbnRF
bGVtZW50ID8gbV9wYXJlbnRFbGVtZW50LT5uZWVkc1N0eWxlSW52YWxpZGF0aW9uKCkgOiBmYWxz
ZSkKICAgICAsIG1fbmVlZHNIYXNJbnZhbGlkYXRpb24obV9pc0VuYWJsZWQgJiYgU2NvcGU6OmZv
ck5vZGUoKm1fcGFyZW50RWxlbWVudCkudXNlc0hhc1BzZXVkb0NsYXNzKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU1ZHRWxlbWVudC5jcHAKaW5kZXggYjNiNmI1Yzg0OTE1MjFiNDdhNzc4ZWZhZjViOTQ5
OWY4NjIwNzZiNS4uNTMwZmYxYjA3YWEyZjkyY2QzNDg2NDE0NTVhOWI1MDA4MzJmNmZhNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAtNTcyLDE0ICs1NzIsMTIgQEAgQWZm
aW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQg
dmlld1dpZHRoLCBmbG9hdCB2aWUKIAogU1ZHVmlld0VsZW1lbnQqIFNWR1NWR0VsZW1lbnQ6OmZp
bmRWaWV3QW5jaG9yKFN0cmluZ1ZpZXcgZnJhZ21lbnRJZGVudGlmaWVyKSBjb25zdAogewotICAg
IGF1dG8qIGFuY2hvckVsZW1lbnQgPSBkb2N1bWVudCgpLmZpbmRBbmNob3IoZnJhZ21lbnRJZGVu
dGlmaWVyKTsKLSAgICByZXR1cm4gaXM8U1ZHVmlld0VsZW1lbnQ+KGFuY2hvckVsZW1lbnQpID8g
ZG93bmNhc3Q8U1ZHVmlld0VsZW1lbnQ+KGFuY2hvckVsZW1lbnQpOiBudWxscHRyOworICAgIHJl
dHVybiBkeW5hbWljRG93bmNhc3Q8U1ZHVmlld0VsZW1lbnQ+KGRvY3VtZW50KCkuZmluZEFuY2hv
cihmcmFnbWVudElkZW50aWZpZXIpKTsKIH0KIAogU1ZHU1ZHRWxlbWVudCogU1ZHU1ZHRWxlbWVu
dDo6ZmluZFJvb3RBbmNob3IoY29uc3QgU1ZHVmlld0VsZW1lbnQqIHZpZXdFbGVtZW50KSBjb25z
dAogewotICAgIGF1dG8qIHZpZXdwb3J0RWxlbWVudCA9IFNWR0xvY2F0YWJsZTo6bmVhcmVzdFZp
ZXdwb3J0RWxlbWVudCh2aWV3RWxlbWVudCk7Ci0gICAgcmV0dXJuIGlzPFNWR1NWR0VsZW1lbnQ+
KHZpZXdwb3J0RWxlbWVudCkgPyBkb3duY2FzdDxTVkdTVkdFbGVtZW50Pih2aWV3cG9ydEVsZW1l
bnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFNWR1NWR0VsZW1lbnQ+
KFNWR0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCh2aWV3RWxlbWVudCkpOwogfQog
CiBTVkdTVkdFbGVtZW50KiBTVkdTVkdFbGVtZW50OjpmaW5kUm9vdEFuY2hvcihTdHJpbmdWaWV3
IGZyYWdtZW50SWRlbnRpZmllcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAppbmRleCAzNWE2NmUwOTVlNzVhMTM0NzljN2IxYzU2MmNlMTE5MWFiMWVlMTk0Li43ZDhhZDc5
ZjhlNTQ4ZWZmNjkzMDA4YmRhNTZhOWIyNDI1OTNhYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCkBAIC05NTcsMTUgKzk1NywxMyBAQCBzdGF0aWMgSW1hZ2UqIGltYWdlRnJv
bUltYWdlRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQogCiBzdGF0aWMgQml0bWFw
SW1hZ2UqIGJpdG1hcEltYWdlRnJvbUltYWdlRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIGF1dG8qIGltYWdlID0gaW1hZ2VGcm9tSW1hZ2VFbGVtZW50KGVsZW1lbnQp
OwotICAgIHJldHVybiBpbWFnZSAmJiBpczxCaXRtYXBJbWFnZT4oaW1hZ2UpID8gJmRvd25jYXN0
PEJpdG1hcEltYWdlPigqaW1hZ2UpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25j
YXN0PEJpdG1hcEltYWdlPihpbWFnZUZyb21JbWFnZUVsZW1lbnQoZWxlbWVudCkpOwogfQogCiAj
aWYgVVNFKENHKQogc3RhdGljIFBERkRvY3VtZW50SW1hZ2UqIHBkZkRvY3VtZW50SW1hZ2VGcm9t
SW1hZ2VFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgYXV0byogaW1h
Z2UgPSBpbWFnZUZyb21JbWFnZUVsZW1lbnQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGltYWdlICYm
IGlzPFBERkRvY3VtZW50SW1hZ2U+KGltYWdlKSA/ICZkb3duY2FzdDxQREZEb2N1bWVudEltYWdl
PigqaW1hZ2UpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFBERkRvY3Vt
ZW50SW1hZ2U+KGltYWdlRnJvbUltYWdlRWxlbWVudChlbGVtZW50KSk7CiB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNj
cmVlbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2Vi
RnVsbFNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IGY4YjE1MmQ2NTA3ZWUwM2FmNjQxOWIzMmQxOWVm
ZjUzZWFhNjVlZTIuLmVmNDk4OTNmMTNjOWM0OWM1ZDBiNThkNDI3YjE1Mzc2ZTA0NjFlMWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9X
ZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4oKQogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKICAgICBhdXRvKiBjdXJyZW50UGxheWJhY2tDb250cm9sc0VsZW1lbnQgPSBtX3BhZ2UtPnBs
YXliYWNrU2Vzc2lvbk1hbmFnZXIoKS5jdXJyZW50UGxheWJhY2tDb250cm9sc0VsZW1lbnQoKTsK
LSAgICBzZXRQSVBTdGFuZGJ5RWxlbWVudChpczxIVE1MVmlkZW9FbGVtZW50PihjdXJyZW50UGxh
eWJhY2tDb250cm9sc0VsZW1lbnQpID8gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oY3VycmVu
dFBsYXliYWNrQ29udHJvbHNFbGVtZW50KSA6IG51bGxwdHIpOworICAgIHNldFBJUFN0YW5kYnlF
bGVtZW50KGR5bmFtaWNEb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PihjdXJyZW50UGxheWJhY2tD
b250cm9sc0VsZW1lbnQpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggNmY0MjhhYWVl
ZGEyNjkzNmI1ZTZiZmJlZGY2MmRjODRmN2Q3NTgwZi4uNzJiYzQ4OTEzYmNlODlkOTRmOGE1ZGE4
YjJmZTJjNWQ5ZmEwYTNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMjU2LDggKzI1Niw3IEBAIFdlYlBh
eW1lbnRDb29yZGluYXRvciogV2ViUGFnZTo6cGF5bWVudENvb3JkaW5hdG9yKCkKIHsKICAgICBp
ZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byYgY2xpZW50ID0g
bV9wYWdlLT5wYXltZW50Q29vcmRpbmF0b3IoKS5jbGllbnQoKTsKLSAgICByZXR1cm4gaXM8V2Vi
UGF5bWVudENvb3JkaW5hdG9yPihjbGllbnQpID8gZG93bmNhc3Q8V2ViUGF5bWVudENvb3JkaW5h
dG9yPigmY2xpZW50KSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxXZWJQ
YXltZW50Q29vcmRpbmF0b3I+KG1fcGFnZS0+cGF5bWVudENvb3JkaW5hdG9yKCkuY2xpZW50KCkp
OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01VSUtpdEV4dGVuc2lvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlL
aXRFeHRlbnNpb25zLm1tCmluZGV4IDYzNTViNmY5MDMxODAwNTVjYjYwN2E4MGJlNzcwMTM4NGQ4
OGRkN2EuLjIyZTU1N2NhNjEzZGY5NjkyMTY0NTRlMzQ1MmU0YzJmODhkM2I3YzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAt
MjY4LDkgKzI2OCw4IEBAIC0gKGludClzdHJ1Y3R1cmFsQ29tcGxleGl0eUNvbnRyaWJ1dGlvbgog
ICAgICAgICB9IGVsc2UgaWYgKGlzPFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVy
KSB8fCAoaXM8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+
KCpyZW5kZXJlcikuaW5saW5lQ29udGludWF0aW9uKCkpKSB7CiAgICAgICAgICAgICBCT09MIG5v
Q29zdCA9IE5POwogICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSkgewot
ICAgICAgICAgICAgICAgIFJlbmRlckJveCYgYXNCb3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94
KCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBhc0JveC5wYXJlbnQo
KTsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IGlzPFJlbmRl
ckJveD4ocGFyZW50KSA/IGRvd25jYXN0PFJlbmRlckJveD4ocGFyZW50KSA6IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgYXV0byYgYXNCb3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94KCk7Cisg
ICAgICAgICAgICAgICAgYXV0byogcGFyZW50UmVuZGVyQm94ID0gZHluYW1pY0Rvd25jYXN0PFJl
bmRlckJveD4oYXNCb3gucGFyZW50KCkpOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRSZW5k
ZXJCb3ggJiYgYXNCb3gud2lkdGgoKSA9PSBwYXJlbnRSZW5kZXJCb3gtPndpZHRoKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgbm9Db3N0ID0gWUVTOwogICAgICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0
aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50
YXRpb24ubW0KaW5kZXggMzhkN2U1MzJkNmVhYTBjYWMzODg2MmYzZTBlMTY5ZmUyODEyNzdmMS4u
M2RiMjQ4OGQ2MGVjNDFiMDgxZjdhOTE3ZDBlMjYxYjI3ZTYyNGEyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24u
bW0KQEAgLTMwMSw3ICszMDEsNyBAQCAtIChET01FbGVtZW50ICopZWxlbWVudFdpdGhOYW1lOihO
U1N0cmluZyAqKW5hbWUgaW5Gb3JtOihET01FbGVtZW50ICopZm9ybQogc3RhdGljIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQqIGVsZW1lbnQp
CiB7CiAgICAgRWxlbWVudCogbm9kZSA9IGNvcmUoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4obm9kZSkg
OiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
bm9kZSk7CiB9CiAKIC0gKEJPT0wpZWxlbWVudERvZXNBdXRvQ29tcGxldGU6KERPTUVsZW1lbnQg
KillbGVtZW50Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449266</attachid>
            <date>2022-01-15 12:48:51 -0800</date>
            <delta_ts>2022-01-15 14:40:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235259-20220115124849.patch</filename>
            <type>text/plain</type>
            <size>80647</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDYxNGUzMjY5OGYzZTJjMGVmY2ZhMmI0
NjJjZjQwYzI0NDNhZGNjNWMuLjlkM2Y0N2ZmNGNiYjRlMjRmOWQ0Zjg5OGJkMzA3NjQ4YjEzZDcy
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDEtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgZHluYW1pY0Rvd25jYXN0PD4oKSBmb3Ig
Y29udmVuaWVuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNTI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEludHJvZHVjZSBkeW5hbWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5jZS4gSXQgY2Fu
IHJlc3VsdCBpbiBtb3JlIGNvbmNpc2UgY29kZSBmb3IgdGhlIGNvbW1vbiBwYXR0ZXJuCisgICAg
ICAgIHdoZXJlIHdlIGNhbGwgYGlzPFQ+KHgpYCBhbmQgdGhlbiBgZG93bmNhc3Q8VD4oeClgLgor
CisgICAgICAgICogd3RmL1R5cGVDYXN0cy5oOgorICAgICAgICAoV1RGOjpkeW5hbWljRG93bmNh
c3QpOgorCiAyMDIyLTAxLTE0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IFdURjo6VVVJRCdzIHBvdGVudGlhbCBjb2xsaXNpb24gd2l0aCBlbXB0eSBh
bmQgZGVsZXRlZCB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1N2Q5ZTBlMGFjNDg0ODcxODUwYTBjN2Uz
ZjY2MTAwYWU0MGUxODlmLi5mOTc3ODljMTJmNjNiYjJhN2NhM2RiZTI5Y2NjMTJhZTM0YWZmMTA0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU3IEBACisyMDIyLTAxLTE0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIGR5bmFtaWNEb3duY2FzdDw+
KCkgZm9yIGNvbnZlbmllbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUyNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTdGFydCBhZG9wdGluZyBkeW5hbWljRG93bmNhc3Q8PigpLgorCisgICAgICAg
ICogYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmlt
YXRpb246OnNldFRpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6d2ls
bENoYW5nZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6dGltaW5n
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6aW52YWxpZGF0ZUVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246OmZpbmlzaE5vdGlmaWNhdGlv
blN0ZXBzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6cmVzb2x2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246OnBlcnNpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViQW5pbWF0aW9uOjpjb21taXRTdHlsZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzQ2xvbmVJblNoYWRvd1RyZWVPZlNWR1VzZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rp
b24gY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KToKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0
OjppbnNlcnRSdWxlKToKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdHRyOjpzdHlsZSk6CisgICAgICAgICogZG9tL0Jyb2FkY2FzdENoYW5uZWwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QnJvYWRjYXN0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6ZW5zdXJl
T25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkJyb2FkY2FzdENoYW5uZWw6OmlzRWxp
Z2libGVGb3JNZXNzYWdpbmcgY29uc3QpOgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZSk6CisgICAg
ICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omxlbmd0
aCBjb25zdCk6CisgICAgICAgICogZG9tL0NvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3I6OnRyYXZlcnNl
UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2VkVHJlZUFuY2VzdG9yQWRhcHRlcjo6
YmVnaW4pOgorICAgICAgICAqIGRvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oOgorICAgICAgICAo
V2ViQ29yZTo6Zmlyc3RDaGlsZEluQ29tcG9zZWRUcmVlSWdub3JpbmdVc2VyQWdlbnRTaGFkb3cp
OgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRhaW5lck5vZGU6OnJlbW92ZU5vZGVXaXRoU2NyaXB0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OnJlbW92ZVNlbGZPckNoaWxkTm9kZXNGb3JJbnNlcnRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveVJlbmRlclRyZWVJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpjb250YWluc0luY2x1ZGluZ0hvc3RFbGVtZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpjaGVja0FjY2VwdENoaWxkKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y291bnRDaGlsZE5vZGVzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnRyYXZlcnNlVG9DaGlsZEF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OmZpcnN0Q2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bGFz
dENoaWxkIGNvbnN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d2lkZ2V0Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YnVp
bGRBY2Nlc3NLZXlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRqdXN0Rm9j
dXNlZE5vZGVPbk5vZGVSZW1vdmFsKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKiBkb20vRWxl
bWVudElubGluZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBhcmVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBkb20vTW91c2VF
dmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50Ojp0b0VsZW1lbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudDo6ZnJvbUVsZW1lbnQgY29uc3QpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbmRlckJveCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW5kZXJCb3hNb2RlbE9iamVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb250YWluaW5nU2hhZG93Um9vdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbik6CisgICAg
ICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpjb250
YWluZXJUZXh0IGNvbnN0KToKKyAgICAgICAgKiBkb20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dE5vZGVUcmF2ZXJzYWw6OmNvbnRlbnRzQXNTdHJpbmcpOgor
ICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3Bl
OjplbGVtZW50c0Zyb21Qb2ludCk6CisgICAgICAgICogZG9tL1R5cGVkRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERlc2NlbmRhbnRSYW5nZTxF
bGVtZW50VHlwZT46OmZyb20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5jbHVzaXZlRWxl
bWVudERlc2NlbmRhbnRSYW5nZTxFbGVtZW50VHlwZT46OmZyb20gY29uc3QpOgorICAgICAgICAq
IGRvbS9WaXNpdGVkTGlua1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmtIYXNoRm9y
RWxlbWVudCk6CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQ
cm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRl
cjo6ZnJvbUNvbnRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjplbmNsb3NpbmdCbG9jayk6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Om93bmVy
U2VsZWN0RWxlbWVudCBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbmRl
ckVtYmVkZGVkT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAgICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZv
cm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9zY3JvbGxDb250cm9sbGVyOjp1cGRhdGVBdXRvc2Ny
b2xsUmVuZGVyZXIpOgorICAgICAgICAqIHBhZ2UvRE9NVGltZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NVGltZXI6OmZpcmVkKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFzRmlsZUlucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFn
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkTm9kZURyYWdFbmFibGVyOjpTY29w
ZWROb2RlRHJhZ0VuYWJsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNldENETUluc3RhbmNlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
ZWdhY3lJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaWdodHMpOgorICAgICAgICAo
V2ViQ29yZTo6cGxhY2VDaGlsZElubGluZUJveGVzSW5CbG9ja0RpcmVjdGlvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93OjptYXJnaW5WYWx1ZXNGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpmaW5kQXV0b3Njcm9sbGFibGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmltYWdlT3JpZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9u
IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OnVwZGF0ZUlubmVyQ29udGVudFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjptYXlB
ZmZlY3RMYXlvdXQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlbmRlckJveCBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpbmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RJdGVtOjp1cGRhdGVWYWx1ZU5vdyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9mZnNldFBhcmVu
dCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjp0YWJsZSBjb25zdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVEZWJ1
Z0luZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbmlu
Z0Jsb2NrQmVsb3dWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6Om5vcm1h
bGl6ZVRyZWVBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZVVwZGF0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0
ZXI6OlBhcmVudDo6UGFyZW50KToKKyAgICAgICAgKiBzdHlsZS9DaGlsZENoYW5nZUludmFsaWRh
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNoaWxkQ2hhbmdlSW52YWxpZGF0aW9u
OjpDaGlsZENoYW5nZUludmFsaWRhdGlvbik6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6ZmluZFZpZXdBbmNob3IgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6ZmluZFJvb3RBbmNob3IgY29u
c3QpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmJpdG1hcEltYWdlRnJvbUltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwZGZEb2N1
bWVudEltYWdlRnJvbUltYWdlRWxlbWVudCk6CisKIDIwMjItMDEtMTQgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBXaGVuIGluc2VydGluZyBhIHNlbGVjdGVkIDxv
cHRpb24+IGluIGEgPHNlbGVjdD4gZWxlbWVudCwgaXRzIHNlbGVjdGVkIHN0YXRlIHNob3VsZCBy
ZW1haW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggODMwNTRhMjNlNGZhMTExZjdhZTQwMDFlN2MxNWJmMTNiZWYyZTZh
MC4uNGM4M2JlMjljNDAzZmQ5OTQwOTcyZjdmYjllZmFiY2NjNDVhMmFiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAyMi0wMS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgorCisgICAgICAgIEludHJvZHVjZSBkeW5hbWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5j
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjU5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhcnQg
YWRvcHRpbmcgZHluYW1pY0Rvd25jYXN0PD4oKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvRnVs
bFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1
bGxTY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnBheW1lbnRDb29yZGluYXRvcik6CisKIDIwMjItMDEtMTQgIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT046ICBBUktpdCBleGFtcGxlIGxvYWRz
IGEgcGFnZSBmdWxsIG9mIHJhbmRvbSBzeW1ib2xzIGluc3RlYWQgb2YgYSAzRCBtb2RlbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGQyNTNjZThjZDIxNGY3MjI5MGUxMDQ2MmM4MTc1
NWJkYWRmNjdhMDUuLmRlYjM4MmQwMWI0YmZlN2U1NjZlMWM2NjA3YTY3NzQ3NDhjZTdhMTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMS0xNCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjZSBkeW5h
bWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhcnQgYWRvcHRpbmcgZHluYW1pY0Rvd25jYXN0PD4o
KS4KKworICAgICAgICAqIERPTS9ET01VSUtpdEV4dGVuc2lvbnMubW06CisgICAgICAgICgtW0RP
TUhUTUxFbGVtZW50IHN0cnVjdHVyYWxDb21wbGV4aXR5Q29udHJpYnV0aW9uXSk6CisgICAgICAg
ICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgIChpbnB1dEVsZW1l
bnRGcm9tRE9NRWxlbWVudCk6CisKIDIwMjItMDEtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hv
cnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGEgZmV3IE9iamVjdGl2ZS1DIG9iamVjdCBs
ZWFrcyBkdWUgdG8gZWFybHkgcmV0dXJucyBpbiBgaW5pdGAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1R5cGVDYXN0cy5oIGIvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKaW5kZXggYmRk
Y2E4N2VlOGVlYWVkMzIzZGQwM2FhY2Y0NWMzMDIxOTQ5YzBkNS4uMWMyN2RmOTcyOWY3ZmZiMjAz
YzBiMzdiNDg0ZmYyZDEyNjM2NjMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVHlwZUNh
c3RzLmgKKysrIGIvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKQEAgLTg4LDYgKzg4LDIxIEBA
IGlubGluZSBtYXRjaF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4qIGRvd25jYXN0KFNvdXJj
ZSogc291cmNlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxtYXRjaF9jb25zdG5lc3NfdDxTb3Vy
Y2UsIFRhcmdldD4qPihzb3VyY2UpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5
cGVuYW1lIFNvdXJjZT4KK2lubGluZSBtYXRjaF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4q
IGR5bmFtaWNEb3duY2FzdChTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KCFz
dGQ6OmlzX3NhbWVfdjxTb3VyY2UsIFRhcmdldD4sICJVbm5lY2Vzc2FyeSBjYXN0IHRvIHNhbWUg
dHlwZSIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8U291cmNlLCBUYXJn
ZXQ+LCAiU2hvdWxkIGJlIGEgZG93bmNhc3QiKTsKKyAgICByZXR1cm4gaXM8VGFyZ2V0Pihzb3Vy
Y2UpID8gJnN0YXRpY19jYXN0PG1hdGNoX2NvbnN0bmVzc190PFNvdXJjZSwgVGFyZ2V0PiY+KHNv
dXJjZSkgOiBudWxscHRyOworfQordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBT
b3VyY2U+CitpbmxpbmUgbWF0Y2hfY29uc3RuZXNzX3Q8U291cmNlLCBUYXJnZXQ+KiBkeW5hbWlj
RG93bmNhc3QoU291cmNlKiBzb3VyY2UpCit7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19z
YW1lX3Y8U291cmNlLCBUYXJnZXQ+LCAiVW5uZWNlc3NhcnkgY2FzdCB0byBzYW1lIHR5cGUiKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PFNvdXJjZSwgVGFyZ2V0PiwgIlNo
b3VsZCBiZSBhIGRvd25jYXN0Iik7CisgICAgcmV0dXJuIGlzPFRhcmdldD4oc291cmNlKSA/IHN0
YXRpY19jYXN0PG1hdGNoX2NvbnN0bmVzc190PFNvdXJjZSwgVGFyZ2V0Pio+KHNvdXJjZSkgOiBu
dWxscHRyOworfQorCiAvLyBBZGQgc3VwcG9ydCBmb3IgdHlwZSBjaGVja2luZyAvIGNhc3Rpbmcg
dXNpbmcgaXM8PigpIC8gZG93bmNhc3Q8PigpIGhlbHBlcnMgZm9yIGEgc3BlY2lmaWMgY2xhc3Mu
CiAjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oQ2xhc3NOYW1lKSBcCiBuYW1l
c3BhY2UgV1RGIHsgXApAQCAtMTIwLDMgKzEzNSw0IEBAIGlubGluZSBib29sIGlzKGNvbnN0IHN0
ZDo6dW5pcXVlX3B0cjxBcmdUeXBlLCBEZWxldGVyPiYgc291cmNlKQogdXNpbmcgV1RGOjpUeXBl
Q2FzdFRyYWl0czsKIHVzaW5nIFdURjo6aXM7CiB1c2luZyBXVEY6OmRvd25jYXN0OwordXNpbmcg
V1RGOjpkeW5hbWljRG93bmNhc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vV2ViQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRp
b24uY3BwCmluZGV4IDA1ZTRhZTBkMTM4ZmFiZDI5YWU1YTJiMDQ0ZDRhNjgxNGQ3N2ZhNWUuLmYy
MGJiY2ZkY2Q0NDY1MGYxNTBjZWI3ZTBmMjNmZjgwMzAzN2NmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCkBAIC0yNDQsOCArMjQ0LDggQEAgdm9pZCBXZWJB
bmltYXRpb246OnNldFRpbWVsaW5lKFJlZlB0cjxBbmltYXRpb25UaW1lbGluZT4mJiB0aW1lbGlu
ZSkKICAgICBpZiAobV9zdGFydFRpbWUpCiAgICAgICAgIG1faG9sZFRpbWUgPSBzdGQ6Om51bGxv
cHQ7CiAKLSAgICBpZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0KSkgewotICAgICAgICBp
ZiAoYXV0byB0YXJnZXQgPSBkb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QuZ2V0KCkp
LT50YXJnZXRTdHlsZWFibGUoKSkgeworICAgIGlmIChhdXRvIGtleWZyYW1lRWZmZWN0ID0gZHlu
YW1pY0Rvd25jYXN0PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdC5nZXQoKSkpIHsKKyAgICAgICAg
aWYgKGF1dG8gdGFyZ2V0ID0ga2V5ZnJhbWVFZmZlY3QtPnRhcmdldFN0eWxlYWJsZSgpKSB7CiAg
ICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGRlY2xhcmF0aXZlIGFuaW1hdGlvbiwgd2Ug
ZG9uJ3Qgd2FudCB0byByZW1vdmUgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSByZWxldmFudCBtYXBz
IGJlY2F1c2UKICAgICAgICAgICAgIC8vIHdoaWxlIHRoZSB0aW1lbGluZSB3YXMgc2V0IHZpYSB0
aGUgQVBJLCB0aGUgZWxlbWVudCBzdGlsbCBoYXMgYSB0cmFuc2l0aW9uIG9yIGFuaW1hdGlvbiBz
ZXQgdXAgYW5kIHdlIG11c3QKICAgICAgICAgICAgIC8vIG5vdCBicmVhayB0aGUgcmVsYXRpb25z
aGlwLgpAQCAtNzI1LDggKzcyNSw4IEBAIHZvaWQgV2ViQW5pbWF0aW9uOjpjYW5jZWwoKQogCiB2
b2lkIFdlYkFuaW1hdGlvbjo6d2lsbENoYW5nZVJlbmRlcmVyKCkKIHsKLSAgICBpZiAoaXM8S2V5
ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0KSkKLSAgICAgICAgZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+
KCptX2VmZmVjdCkud2lsbENoYW5nZVJlbmRlcmVyKCk7CisgICAgaWYgKGF1dG8ga2V5ZnJhbWVF
ZmZlY3QgPSBkeW5hbWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKSkK
KyAgICAgICAga2V5ZnJhbWVFZmZlY3QtPndpbGxDaGFuZ2VSZW5kZXJlcigpOwogfQogCiB2b2lk
IFdlYkFuaW1hdGlvbjo6ZW5xdWV1ZUFuaW1hdGlvblBsYXliYWNrRXZlbnQoY29uc3QgQXRvbVN0
cmluZyYgdHlwZSwgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBjdXJyZW50VGltZSwgc3RkOjpvcHRp
b25hbDxTZWNvbmRzPiB0aW1lbGluZVRpbWUpCkBAIC04MzgsOSArODM4LDkgQEAgdm9pZCBXZWJB
bmltYXRpb246OnRpbWluZ0RpZENoYW5nZShEaWRTZWVrIGRpZFNlZWssIFN5bmNocm9ub3VzbHlO
b3RpZnkgc3luY2hyb24KICAgICBtX3Nob3VsZFNraXBVcGRhdGluZ0ZpbmlzaGVkU3RhdGVXaGVu
UmVzb2x2aW5nID0gZmFsc2U7CiAgICAgdXBkYXRlRmluaXNoZWRTdGF0ZShkaWRTZWVrLCBzeW5j
aHJvbm91c2x5Tm90aWZ5KTsKIAotICAgIGlmIChpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3Qp
KSB7CisgICAgaWYgKGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5hbWljRG93bmNhc3Q8S2V5ZnJh
bWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKSkgewogICAgICAgICB1cGRhdGVSZWxldmFuY2UoKTsK
LSAgICAgICAgZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkuYW5pbWF0aW9uVGlt
aW5nRGlkQ2hhbmdlKCk7CisgICAgICAgIGtleWZyYW1lRWZmZWN0LT5hbmltYXRpb25UaW1pbmdE
aWRDaGFuZ2UoKTsKICAgICB9CiAKICAgICBpZiAoc2lsZW50bHkgPT0gU2lsZW50bHk6Ok5vICYm
IG1fdGltZWxpbmUpCkBAIC04NDksOCArODQ5LDggQEAgdm9pZCBXZWJBbmltYXRpb246OnRpbWlu
Z0RpZENoYW5nZShEaWRTZWVrIGRpZFNlZWssIFN5bmNocm9ub3VzbHlOb3RpZnkgc3luY2hyb24K
IAogdm9pZCBXZWJBbmltYXRpb246OmludmFsaWRhdGVFZmZlY3QoKQogewotICAgIGlmICghaXNF
ZmZlY3RJbnZhbGlkYXRpb25TdXNwZW5kZWQoKSAmJiBpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZl
Y3QpKQotICAgICAgICBkb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4oKm1fZWZmZWN0KS5pbnZhbGlk
YXRlKCk7CisgICAgaWYgKGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5hbWljRG93bmNhc3Q8S2V5
ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKTsgIWlzRWZmZWN0SW52YWxpZGF0aW9uU3VzcGVu
ZGVkKCkgJiYga2V5ZnJhbWVFZmZlY3QpCisgICAgICAgIGtleWZyYW1lRWZmZWN0LT5pbnZhbGlk
YXRlKCk7CiB9CiAKIHZvaWQgV2ViQW5pbWF0aW9uOjp1cGRhdGVGaW5pc2hlZFN0YXRlKERpZFNl
ZWsgZGlkU2VlaywgU3luY2hyb25vdXNseU5vdGlmeSBzeW5jaHJvbm91c2x5Tm90aWZ5KQpAQCAt
OTYyLDggKzk2Miw4IEBAIHZvaWQgV2ViQW5pbWF0aW9uOjpmaW5pc2hOb3RpZmljYXRpb25TdGVw
cygpCiAgICAgLy8gICAgT3RoZXJ3aXNlLCBxdWV1ZSBhIHRhc2sgdG8gZGlzcGF0Y2ggZmluaXNo
RXZlbnQgYXQgYW5pbWF0aW9uLiBUaGUgdGFzayBzb3VyY2UgZm9yIHRoaXMgdGFzayBpcyB0aGUg
RE9NIG1hbmlwdWxhdGlvbiB0YXNrIHNvdXJjZS4KICAgICBlbnF1ZXVlQW5pbWF0aW9uUGxheWJh
Y2tFdmVudChldmVudE5hbWVzKCkuZmluaXNoRXZlbnQsIGN1cnJlbnRUaW1lKCksIG1fdGltZWxp
bmUgPyBtX3RpbWVsaW5lLT5jdXJyZW50VGltZSgpIDogc3RkOjpudWxsb3B0KTsKIAotICAgIGlm
IChpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpKSB7Ci0gICAgICAgIGlmIChSZWZQdHIgdGFy
Z2V0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkudGFyZ2V0KCkpIHsKKyAg
ICBpZiAoYXV0byBrZXlmcmFtZUVmZmVjdCA9IGR5bmFtaWNEb3duY2FzdDxLZXlmcmFtZUVmZmVj
dD4obV9lZmZlY3QuZ2V0KCkpKSB7CisgICAgICAgIGlmIChSZWZQdHIgdGFyZ2V0ID0ga2V5ZnJh
bWVFZmZlY3QtPnRhcmdldCgpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IHRhcmdl
dC0+ZG9jdW1lbnQoKS5wYWdlKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xp
ZW50KCkuYW5pbWF0aW9uRGlkRmluaXNoRm9yRWxlbWVudCgqdGFyZ2V0KTsKICAgICAgICAgfQpA
QCAtMTI4Nyw4ICsxMjg3LDggQEAgdm9pZCBXZWJBbmltYXRpb246OnJlc29sdmUoUmVuZGVyU3R5
bGUmIHRhcmdldFN0eWxlLCBjb25zdCBTdHlsZTo6UmVzb2x1dGlvbkNvbnQKICAgICAgICAgdXBk
YXRlRmluaXNoZWRTdGF0ZShEaWRTZWVrOjpObywgU3luY2hyb25vdXNseU5vdGlmeTo6WWVzKTsK
ICAgICBtX3Nob3VsZFNraXBVcGRhdGluZ0ZpbmlzaGVkU3RhdGVXaGVuUmVzb2x2aW5nID0gZmFs
c2U7CiAKLSAgICBpZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0KSkKLSAgICAgICAgZG93
bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkuYXBwbHkodGFyZ2V0U3R5bGUsIHJlc29s
dXRpb25Db250ZXh0LCBzdGFydFRpbWUpOworICAgIGlmIChhdXRvIGtleWZyYW1lRWZmZWN0ID0g
ZHluYW1pY0Rvd25jYXN0PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdC5nZXQoKSkpCisgICAgICAg
IGtleWZyYW1lRWZmZWN0LT5hcHBseSh0YXJnZXRTdHlsZSwgcmVzb2x1dGlvbkNvbnRleHQsIHN0
YXJ0VGltZSk7CiB9CiAKIHZvaWQgV2ViQW5pbWF0aW9uOjpzZXRTdXNwZW5kZWQoYm9vbCBpc1N1
c3BlbmRlZCkKQEAgLTE0MTcsMTEgKzE0MTcsMTAgQEAgdm9pZCBXZWJBbmltYXRpb246OnBlcnNp
c3QoKQogICAgIGF1dG8gcHJldmlvdXNSZXBsYWNlU3RhdGUgPSBzdGQ6OmV4Y2hhbmdlKG1fcmVw
bGFjZVN0YXRlLCBSZXBsYWNlU3RhdGU6OlBlcnNpc3RlZCk7CiAKICAgICBpZiAocHJldmlvdXNS
ZXBsYWNlU3RhdGUgPT0gUmVwbGFjZVN0YXRlOjpSZW1vdmVkICYmIG1fdGltZWxpbmUpIHsKLSAg
ICAgICAgaWYgKGlzPEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdCkpIHsKLSAgICAgICAgICAgIGF1
dG8mIGtleWZyYW1lRWZmZWN0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCk7
Ci0gICAgICAgICAgICBhdXRvIHN0eWxlYWJsZSA9IGtleWZyYW1lRWZmZWN0LnRhcmdldFN0eWxl
YWJsZSgpOworICAgICAgICBpZiAoYXV0byBrZXlmcmFtZUVmZmVjdCA9IGR5bmFtaWNEb3duY2Fz
dDxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QuZ2V0KCkpKSB7CisgICAgICAgICAgICBhdXRvIHN0
eWxlYWJsZSA9IGtleWZyYW1lRWZmZWN0LT50YXJnZXRTdHlsZWFibGUoKTsKICAgICAgICAgICAg
IHN0eWxlYWJsZS0+YW5pbWF0aW9uV2FzQWRkZWQoKnRoaXMpOwotICAgICAgICAgICAgc3R5bGVh
YmxlLT5lbnN1cmVLZXlmcmFtZUVmZmVjdFN0YWNrKCkuYWRkRWZmZWN0KGtleWZyYW1lRWZmZWN0
KTsKKyAgICAgICAgICAgIHN0eWxlYWJsZS0+ZW5zdXJlS2V5ZnJhbWVFZmZlY3RTdGFjaygpLmFk
ZEVmZmVjdCgqa2V5ZnJhbWVFZmZlY3QpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQzMSw3
ICsxNDMwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViQW5pbWF0aW9uOjpjb21taXRTdHlsZXMo
KQogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy93ZWItYW5pbWF0aW9ucy0xLyNjb21t
aXQtY29tcHV0ZWQtc3R5bGVzCiAKICAgICAvLyAxLiBMZXQgdGFyZ2V0cyBiZSB0aGUgc2V0IG9m
IGFsbCBlZmZlY3QgdGFyZ2V0cyBmb3IgYW5pbWF0aW9uIGVmZmVjdHMgYXNzb2NpYXRlZCB3aXRo
IGFuaW1hdGlvbi4KLSAgICBhdXRvKiBlZmZlY3QgPSBpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZl
Y3QpID8gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKSA6IG51bGxwdHI7
CisgICAgYXV0byogZWZmZWN0ID0gZHluYW1pY0Rvd25jYXN0PEtleWZyYW1lRWZmZWN0PihtX2Vm
ZmVjdC5nZXQoKSk7CiAgICAgYXV0byogdGFyZ2V0ID0gZWZmZWN0ID8gZWZmZWN0LT50YXJnZXQo
KSA6IG51bGxwdHI7CiAKICAgICAvLyAyLiBGb3IgZWFjaCB0YXJnZXQgaW4gdGFyZ2V0czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGM4
NzdkMjdiNjk4NGYzN2Y5ZGNjYzAzMjc0YmYxNjY4Mjk3ZTUwMTYuLjA1OWRmZWE2OWE4NWQ1NmQz
ZDRhM2RmNDNiNjFhYmI4ODc0MDkwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgSlNFdmVudExp
c3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0CiAgICAgICAgIGlmICghd2luZG93LT53cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNw
bGF5ZWRJbkZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICh3YXNDcmVh
dGVkRnJvbU1hcmt1cCgpKSB7Ci0gICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZXZlbnQu
dGFyZ2V0KCktPmlzTm9kZSgpICYmICFkb3duY2FzdDxOb2RlPigqZXZlbnQudGFyZ2V0KCkpLmlz
RG9jdW1lbnROb2RlKCkgJiYgaXM8RWxlbWVudD4oKmV2ZW50LnRhcmdldCgpKSA/IGRvd25jYXN0
PEVsZW1lbnQ+KGV2ZW50LnRhcmdldCgpKSA6IG51bGxwdHI7CisgICAgICAgICAgICBFbGVtZW50
KiBlbGVtZW50ID0gZXZlbnQudGFyZ2V0KCktPmlzTm9kZSgpICYmICFkb3duY2FzdDxOb2RlPigq
ZXZlbnQudGFyZ2V0KCkpLmlzRG9jdW1lbnROb2RlKCkgPyBkeW5hbWljRG93bmNhc3Q8RWxlbWVu
dD4oKmV2ZW50LnRhcmdldCgpKSA6IG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93SW5saW5lRXZlbnRI
YW5kbGVycyhzb3VyY2VVUkwoKS5zdHJpbmcoKSwgc291cmNlUG9zaXRpb24oKS5tX2xpbmUsIGNv
ZGUoKSwgZWxlbWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCmlu
ZGV4IGFiZjE4ZDg5YjY3YTY2MmI3ODFhYzYzODc2NzIzYzUzNDU1MzgxZTYuLmQ3YzY4MTg0YzYw
NzEzNDBmMmI2OGRiZWZiNTdhYmFhZjRhNTRiMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCkBAIC04OCwxNSArODgsMTIgQEAg
c3RhdGljIGlubGluZSBib29sIGlzQ2xvbmVJblNoYWRvd1RyZWVPZlNWR1VzZUVsZW1lbnQoTm9k
ZSYgb3JpZ2luYWxOb2RlLCBFdmVudFQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0
byYgbm9kZSA9IGRvd25jYXN0PE5vZGU+KGV2ZW50VGFyZ2V0KTsKLSAgICBpZiAoIWlzPFNWR0Vs
ZW1lbnQ+KG5vZGUpKQorICAgIGF1dG8qIGVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8U1ZHRWxl
bWVudD4obm9kZSk7CisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5jb3JyZXNwb25kaW5n
RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBlbGVtZW50ID0g
ZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZSk7Ci0gICAgaWYgKCFlbGVtZW50LmNvcnJlc3BvbmRp
bmdFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChlbGVtZW50
LmlzSW5TaGFkb3dUcmVlKCkpOwotICAgIHJldHVybiAmb3JpZ2luYWxOb2RlID09IGVsZW1lbnQu
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKTsKKyAgICBBU1NFUlQoZWxlbWVudC0+aXNJblNoYWRvd1Ry
ZWUoKSk7CisgICAgcmV0dXJuICZvcmlnaW5hbE5vZGUgPT0gZWxlbWVudC0+Y29ycmVzcG9uZGlu
Z0VsZW1lbnQoKTsKIH0KIAogLy8gVGhpcyBpcyB0byBoZWxwIGZpbmQgdGhlIHVuZGVybHlpbmcg
Y2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzI0MzE0MDI3Pi4KQEAgLTEzMSw3ICsxMjgsNyBAQCBK
U09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgZXhlYwogICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9vcmlnaW5hbE5v
ZGUgJiYgIW1fb3JpZ2luYWxOb2RlLT5pc0RvY3VtZW50Tm9kZSgpICYmIGlzPEVsZW1lbnQ+KCpt
X29yaWdpbmFsTm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihtX29yaWdpbmFsTm9kZS5nZXQoKSkg
OiBudWxscHRyOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBtX29yaWdpbmFsTm9kZSAmJiAhbV9v
cmlnaW5hbE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgPyBkeW5hbWljRG93bmNhc3Q8RWxlbWVudD4o
bV9vcmlnaW5hbE5vZGUuZ2V0KCkpIDogbnVsbHB0cjsKICAgICBpZiAoIWRvY3VtZW50LmNvbnRl
bnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0lubGluZUV2ZW50SGFuZGxlcnMobV9zb3VyY2VVUkwu
c3RyaW5nKCksIG1fc291cmNlUG9zaXRpb24ubV9saW5lLCBtX2NvZGUsIGVsZW1lbnQpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNw
cAppbmRleCBiYjI0OWM4NmYzYzE3NjBhZjE2ZTVjMDI3MjdjMDljNWU3OTNlYTg1Li5mOGE5MTg3
NzM0Y2RiMGQ5Mzc4ODliYmJlMjRmYzFlOGFkYTNmNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmNwcApAQCAtMzU1LDcgKzM1NSw3IEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNl
bGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyCiAKICAgICBpZiAocmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCkKICAgICAgICAgcmVzb2x2
ZUFuZEFzc2lnbkdlbmVyaWNGYW1pbHkoKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBpczxE
b2N1bWVudD4obV9jb250ZXh0KSA/ICZkb3duY2FzdDxEb2N1bWVudD4oKm1fY29udGV4dCkgOiBu
dWxscHRyOworICAgIGF1dG8qIGRvY3VtZW50ID0gZHluYW1pY0Rvd25jYXN0PERvY3VtZW50Piht
X2NvbnRleHQuZ2V0KCkpOwogICAgIGF1dG8qIGZhY2UgPSBtX2Nzc0ZvbnRGYWNlU2V0LT5mb250
RmFjZShmb250RGVzY3JpcHRpb25Gb3JMb29rdXAtPmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCksIGZh
bWlseUZvckxvb2t1cCk7CiAgICAgaWYgKGZhY2UpIHsKICAgICAgICAgaWYgKGRvY3VtZW50ICYm
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAppbmRleCBkYmM2N2Q3
YTEzNTU5NjRiYjM4NWM1NTBjMmIxOTJiZmM5ODI5ZGVlLi5mNDYxOGVmMDI0YTk3OWZkMjUyY2Nj
NDdmYTZmODA2Y2Q5MzA4MDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBA
IC0yNjgsNyArMjY4LDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IENTU1N0eWxlU2hlZXQ6Omlu
c2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1bnNpZ24KICAgICBpZiAoIXJ1bGUp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAgUnVsZU11
dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzLCBSdWxlSW5zZXJ0aW9uLCBpczxTdHlsZVJ1
bGVLZXlmcmFtZXM+KCpydWxlKSA/IGRvd25jYXN0PFN0eWxlUnVsZUtleWZyYW1lcz4ocnVsZS5n
ZXQoKSkgOiBudWxscHRyKTsKKyAgICBSdWxlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRo
aXMsIFJ1bGVJbnNlcnRpb24sIGR5bmFtaWNEb3duY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpy
dWxlKSk7CiAKICAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRlbnRzLmdldCgpLndyYXBwZXJJbnNl
cnRSdWxlKHJ1bGUucmVsZWFzZU5vbk51bGwoKSwgaW5kZXgpOwogICAgIGlmICghc3VjY2VzcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9BdHRyLmNwcAppbmRleCBiN2QwZTFkN2ZmN2FiYjgxYjM0NzcxN2ZlOGUzZjBhN2M1MTdk
YTM0Li4xMmM0MDI2ZDdiNzUyZTE0ZTEwOTEwZDJjNmFlMGY4MjE2YWVhNzk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0
dHIuY3BwCkBAIC0xMTIsMTAgKzExMiwxMSBAQCBDU1NTdHlsZURlY2xhcmF0aW9uKiBBdHRyOjpz
dHlsZSgpCiB7CiAgICAgLy8gVGhpcyBpcyBub3QgcGFydCBvZiB0aGUgRE9NIEFQSSwgYW5kIHRo
ZXJlZm9yZSBub3QgYXZhaWxhYmxlIHRvIHdlYnBhZ2VzLiBIb3dldmVyLCBXZWJLaXQgU1BJCiAg
ICAgLy8gbGV0cyBjbGllbnRzIHVzZSB0aGlzIHZpYSB0aGUgT2JqZWN0aXZlLUMgYW5kIEphdmFT
Y3JpcHQgYmluZGluZ3MuCi0gICAgaWYgKCFpczxTdHlsZWRFbGVtZW50PihtX2VsZW1lbnQpKQor
ICAgIGF1dG8gc3R5bGVkRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxTdHlsZWRFbGVtZW50Piht
X2VsZW1lbnQpOworICAgIGlmICghc3R5bGVkRWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgbV9zdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAg
IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCptX2VsZW1lbnQpLmNvbGxlY3RQcmVzZW50YXRpb25h
bEhpbnRzRm9yQXR0cmlidXRlKHF1YWxpZmllZE5hbWUoKSwgdmFsdWUoKSwgKm1fc3R5bGUpOwor
ICAgIHN0eWxlZEVsZW1lbnQtPmNvbGxlY3RQcmVzZW50YXRpb25hbEhpbnRzRm9yQXR0cmlidXRl
KHF1YWxpZmllZE5hbWUoKSwgdmFsdWUoKSwgKm1fc3R5bGUpOwogICAgIHJldHVybiAmbV9zdHls
ZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQnJvYWRjYXN0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQnJv
YWRjYXN0Q2hhbm5lbC5jcHAKaW5kZXggNjMyOWRlYTU3YTE4N2ZmMjU5Nzc3MGY4ZTRjYWE2NWJl
OTQ1ZDVkNS4uZTc2MjUzY2Q2NDhiNDk4MDFmOWMzNDI1NjZmNzQ2YjRlMjljNzMzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Jyb2FkY2FzdENoYW5uZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ccm9hZGNhc3RDaGFubmVsLmNwcApAQCAtMTA4LDggKzEwOCw4IEBAIHZv
aWQgQnJvYWRjYXN0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6ZW5zdXJlT25NYWluVGhyZWFk
KEZ1bmN0aW9uPHZvaWQoRG9jdW1lCiAgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKTsKIAogICAgIFJlZiBwcm90ZWN0ZWRUaGlzIHsgKnRoaXMgfTsKLSAgICBpZiAoaXM8RG9j
dW1lbnQ+KCpjb250ZXh0KSkKLSAgICAgICAgdGFzayhkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpKTsKKyAgICBpZiAoYXV0byBkb2N1bWVudCA9IGR5bmFtaWNEb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpKQorICAgICAgICB0YXNrKCpkb2N1bWVudCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqY29udGV4dCkudGhyZWFkKCkud29ya2VyTG9h
ZGVyUHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90
ZWN0ZWRUaGlzKSwgdGFzayA9IFdURk1vdmUodGFzayldKGF1dG8mIGNvbnRleHQpIHsKICAgICAg
ICAgICAgIHRhc2soZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpKTsKQEAgLTI2NSw4ICsyNjUs
OCBAQCBib29sIEJyb2FkY2FzdENoYW5uZWw6OmlzRWxpZ2libGVGb3JNZXNzYWdpbmcoKSBjb25z
dAogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlz
PERvY3VtZW50PigqY29udGV4dCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpLmlzRnVsbHlBY3RpdmUoKTsKKyAgICBpZiAoYXV0byBkb2N1bWVudCA9IGR5bmFt
aWNEb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpKQorICAgICAgICByZXR1cm4gZG9jdW1lbnQt
PmlzRnVsbHlBY3RpdmUoKTsKIAogICAgIHJldHVybiAhZG93bmNhc3Q8V29ya2VyR2xvYmFsU2Nv
cGU+KCpjb250ZXh0KS5pc0Nsb3NpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcAppbmRleCBmODIxNzY2YjUxMjUwYmNkNmEzODUzMjk3NGJlNjIwMjExMmY5M2M0Li5iYTMx
MTkwYzRkNDIzZTc3NzllNWNkN2JlZjA1YzEwMmY4ZmRjZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuY3BwCkBAIC0xMTksOCArMTE5LDggQEAgdW5zaWduZWQgQ2hhcmFjdGVyRGF0
YTo6cGFyc2VyQXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgb2Zmc2V0
LAogICAgICAgICBtX2RhdGEuYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldCwg
Y2hhcmFjdGVyTGVuZ3RoTGltaXQpOwogCiAgICAgQVNTRVJUKCFyZW5kZXJlcigpIHx8IGlzPFRl
eHQ+KCp0aGlzKSk7Ci0gICAgaWYgKGlzPFRleHQ+KCp0aGlzKSkKLSAgICAgICAgZG93bmNhc3Q8
VGV4dD4oKnRoaXMpLnVwZGF0ZVJlbmRlcmVyQWZ0ZXJDb250ZW50Q2hhbmdlKG9sZExlbmd0aCwg
MCk7CisgICAgaWYgKGF1dG8gdGV4dCA9IGR5bmFtaWNEb3duY2FzdDxUZXh0PigqdGhpcykpCisg
ICAgICAgIHRleHQtPnVwZGF0ZVJlbmRlcmVyQWZ0ZXJDb250ZW50Q2hhbmdlKG9sZExlbmd0aCwg
MCk7CiAKICAgICBub3RpZnlQYXJlbnRBZnRlckNoYW5nZShjaGlsZENoYW5nZSk7CiAKQEAgLTIw
NywxMSArMjA3LDExIEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZShjb25z
dCBTdHJpbmcmIG5ld0RhdGEsIHVuc2lnbmVkIG9mZnNldE9mUmVwCiAgICAgICAgIGRvY3VtZW50
KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgbmV3TGVuZ3RoKTsK
IAogICAgIEFTU0VSVCghcmVuZGVyZXIoKSB8fCBpczxUZXh0PigqdGhpcykpOwotICAgIGlmIChp
czxUZXh0PigqdGhpcykpCi0gICAgICAgIGRvd25jYXN0PFRleHQ+KCp0aGlzKS51cGRhdGVSZW5k
ZXJlckFmdGVyQ29udGVudENoYW5nZShvZmZzZXRPZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoKTsK
KyAgICBpZiAoYXV0byB0ZXh0ID0gZHluYW1pY0Rvd25jYXN0PFRleHQ+KCp0aGlzKSkKKyAgICAg
ICAgdGV4dC0+dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2Uob2Zmc2V0T2ZSZXBsYWNl
ZERhdGEsIG9sZExlbmd0aCk7CiAKLSAgICBpZiAoaXM8UHJvY2Vzc2luZ0luc3RydWN0aW9uPigq
dGhpcykpCi0gICAgICAgIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKnRoaXMpLmNo
ZWNrU3R5bGVTaGVldCgpOworICAgIGlmIChhdXRvIHByb2Nlc3NpbmdJbnRydWN0aW9uID0gZHlu
YW1pY0Rvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKnRoaXMpKQorICAgICAgICBwcm9j
ZXNzaW5nSW50cnVjdGlvbi0+Y2hlY2tTdHlsZVNoZWV0KCk7CiAKICAgICBpZiAoZG9jdW1lbnQo
KS5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnRleHRX
YXNSZXBsYWNlZCh0aGlzLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoLCBuZXdMZW5n
dGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKaW5kZXggMzZhNDkyNTQwN2U5MTNjY2Nh
NzNlOTBkZTAzMmFiNWZiODc3NGE0Ny4uNTIwMDNkN2MxZGRlZDk3YjlhN2UwODhjMzkzMjkxOGQ2
NjQwODRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCkBAIC03Miw4ICs3Miw4IEBA
IHByaXZhdGU6CiAKIGlubGluZSB1bnNpZ25lZCBOb2RlOjpsZW5ndGgoKSBjb25zdAogewotICAg
IGlmIChpczxDaGFyYWN0ZXJEYXRhPigqdGhpcykpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxD
aGFyYWN0ZXJEYXRhPigqdGhpcykubGVuZ3RoKCk7CisgICAgaWYgKGF1dG8gY2hhcmFjdGVyRGF0
YSA9IGR5bmFtaWNEb3duY2FzdDxDaGFyYWN0ZXJEYXRhPigqdGhpcykpCisgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJEYXRhLT5sZW5ndGgoKTsKICAgICByZXR1cm4gY291bnRDaGlsZE5vZGVzKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVBbmNlc3Rv
ckl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVy
YXRvci5oCmluZGV4IGM2NjFiY2U1YzhmYzJmYWRlNmMxODY0MjU1ZjNkZGFjODA0NzBmMDcuLjg5
YTY4ZTA0YzI5YmEyZmMwYzcyMWMwZGNiZjZhYWY1YzkwOThlNmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaApAQCAtNzIsOCArNzIs
OCBAQCBpbmxpbmUgQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvciYgQ29tcG9zZWRUcmVlQW5j
ZXN0b3JJdGVyYXRvcjo6dHJhdmVyc2VQYXJlbgogICAgICAgICBtX2N1cnJlbnQgPSBudWxscHRy
OwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQotICAgIGlmIChpczxTaGFkb3dSb290Pigq
cGFyZW50KSkgewotICAgICAgICBtX2N1cnJlbnQgPSBkb3duY2FzdDxTaGFkb3dSb290PigqcGFy
ZW50KS5ob3N0KCk7CisgICAgaWYgKGF1dG8gc2hhZG93Um9vdCA9IGR5bmFtaWNEb3duY2FzdDxT
aGFkb3dSb290PigqcGFyZW50KSkgeworICAgICAgICBtX2N1cnJlbnQgPSBzaGFkb3dSb290LT5o
b3N0KCk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAgICAgaWYgKCFpczxFbGVtZW50
PigqcGFyZW50KSkgewpAQCAtMTAwLDEwICsxMDAsMTAgQEAgcHVibGljOgogCiAgICAgaXRlcmF0
b3IgYmVnaW4oKQogICAgIHsKLSAgICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KG1fbm9kZSkpCi0g
ICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKmRvd25jYXN0PFNoYWRvd1Jvb3Q+KG1fbm9kZSku
aG9zdCgpKTsKLSAgICAgICAgaWYgKGlzPFBzZXVkb0VsZW1lbnQ+KG1fbm9kZSkpCi0gICAgICAg
ICAgICByZXR1cm4gaXRlcmF0b3IoKmRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KG1fbm9kZSkuaG9z
dEVsZW1lbnQoKSk7CisgICAgICAgIGlmIChhdXRvIHNoYWRvd1Jvb3QgPSBkeW5hbWljRG93bmNh
c3Q8U2hhZG93Um9vdD4obV9ub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqc2hh
ZG93Um9vdC0+aG9zdCgpKTsKKyAgICAgICAgaWYgKGF1dG8gcHNldWRvRWxlbWVudCA9IGR5bmFt
aWNEb3duY2FzdDxQc2V1ZG9FbGVtZW50PihtX25vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yKCpwc2V1ZG9FbGVtZW50LT5ob3N0RWxlbWVudCgpKTsKICAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yKG1fbm9kZSkudHJhdmVyc2VQYXJlbnQoKTsKICAgICB9CiAgICAgaXRlcmF0b3IgZW5k
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUl0ZXJhdG9yLmgKaW5kZXggY2M0ZjIw
MjU2ZjVlY2ZlNzZmMWJhNjE1NThkNjZmMmYyYTM1MDM1My4uNjIyMDYxZjQ1NmQ4YjBkNjY0MjQ5
OTZkMzM4MTM2ZTY3MzRkNjdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBv
c2VkVHJlZUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUl0
ZXJhdG9yLmgKQEAgLTIyNCw4ICsyMjQsOCBAQCBpbmxpbmUgTm9kZSogZmlyc3RDaGlsZEluQ29t
cG9zZWRUcmVlSWdub3JpbmdVc2VyQWdlbnRTaGFkb3coTm9kZSYgbm9kZSkKIHsKICAgICBpZiAo
YXV0byogc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3RJZ25vcmluZ1VzZXJBZ2VudFNoYWRvdyhub2Rl
KSkKICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmZpcnN0Q2hpbGQoKTsKLSAgICBpZiAoaXM8
SFRNTFNsb3RFbGVtZW50Pihub2RlKSkgewotICAgICAgICBpZiAoYXV0byogYXNzaWduZWROb2Rl
cyA9IGRvd25jYXN0PEhUTUxTbG90RWxlbWVudD4obm9kZSkuYXNzaWduZWROb2RlcygpKQorICAg
IGlmIChhdXRvIHNsb3QgPSBkeW5hbWljRG93bmNhc3Q8SFRNTFNsb3RFbGVtZW50Pihub2RlKSkg
eworICAgICAgICBpZiAoYXV0byogYXNzaWduZWROb2RlcyA9IHNsb3QtPmFzc2lnbmVkTm9kZXMo
KSkKICAgICAgICAgICAgIHJldHVybiBhc3NpZ25lZE5vZGVzLT5hdCgwKS5nZXQoKTsKICAgICB9
CiAgICAgcmV0dXJuIG5vZGUuZmlyc3RDaGlsZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuY3BwCmluZGV4IDJjMjcyYzdlZWRjMzQxMjUyOThjYzQ3ZjMyNzk0MDU2ZmQyYzY2ZWMuLjMw
ZjU3ZDdkZTlmMmY0NDZkYjdhNGIxMjVjNThiOGNiMjExZTA4MjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAKQEAgLTE4MCw4ICsxODAsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
Q29udGFpbmVyTm9kZTo6cmVtb3ZlTm9kZVdpdGhTY3JpcHRBc3NlcnRpb24oTm9kZSYgY2hpbGRU
b1JlbQogICAgICAgICAvLyBGSVhNRTogTWVyZ2UgdGhlc2UgdHdvIGNvZGUgcGF0aHMuIEl0J3Mg
YSBidWcgaW4gdGhlIHBhcnNlciBub3QgdG8gdXBkYXRlIGNvbm5lY3RlZFN1YmZyYW1lQ291bnQg
aW4gdGltZS4KICAgICAgICAgZGlzY29ubmVjdFN1YmZyYW1lc0lmTmVlZGVkKCp0aGlzLCBEZXNj
ZW5kYW50c09ubHkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChpczxDb250YWluZXJOb2Rl
PihjaGlsZFRvUmVtb3ZlKSkKLSAgICAgICAgICAgIGRpc2Nvbm5lY3RTdWJmcmFtZXNJZk5lZWRl
ZChkb3duY2FzdDxDb250YWluZXJOb2RlPihjaGlsZFRvUmVtb3ZlKSwgUm9vdEFuZERlc2NlbmRh
bnRzKTsKKyAgICAgICAgaWYgKGF1dG8gY29udGFpbmVyQ2hpbGQgPSBkeW5hbWljRG93bmNhc3Q8
Q29udGFpbmVyTm9kZT4oY2hpbGRUb1JlbW92ZSkpCisgICAgICAgICAgICBkaXNjb25uZWN0U3Vi
ZnJhbWVzSWZOZWVkZWQoKmNvbnRhaW5lckNoaWxkLCBSb290QW5kRGVzY2VuZGFudHMpOwogICAg
IH0KIAogICAgIGlmIChjaGlsZFRvUmVtb3ZlLnBhcmVudE5vZGUoKSAhPSB0aGlzKQpAQCAtMjc4
LDI1ICsyNzgsMjQgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBleGVjdXRlTm9kZUluc2Vy
dGlvbldpdGhTY3JpcHRBc3NlcnRpb24oQ29udGFpbmVyTm9kZSYKIAogRXhjZXB0aW9uT3I8dm9p
ZD4gQ29udGFpbmVyTm9kZTo6cmVtb3ZlU2VsZk9yQ2hpbGROb2Rlc0Zvckluc2VydGlvbihOb2Rl
JiBjaGlsZCwgTm9kZVZlY3RvciYgbm9kZXNGb3JJbnNlcnRpb24pCiB7Ci0gICAgaWYgKCFpczxE
b2N1bWVudEZyYWdtZW50PihjaGlsZCkpIHsKLSAgICAgICAgbm9kZXNGb3JJbnNlcnRpb24uYXBw
ZW5kKGNoaWxkKTsKLSAgICAgICAgUmVmUHRyIG9sZFBhcmVudCA9IGNoaWxkLnBhcmVudE5vZGUo
KTsKLSAgICAgICAgaWYgKCFvbGRQYXJlbnQpCisgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBkeW5h
bWljRG93bmNhc3Q8RG9jdW1lbnRGcmFnbWVudD4oY2hpbGQpKSB7CisgICAgICAgIGlmICghZnJh
Z21lbnQtPmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
IHJldHVybiBvbGRQYXJlbnQtPnJlbW92ZUNoaWxkKGNoaWxkKTsKLSAgICB9CiAKLSAgICBhdXRv
JiBmcmFnbWVudCA9IGRvd25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KGNoaWxkKTsKLSAgICBpZiAo
IWZyYWdtZW50Lmhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
YXV0byByZW1vdmVkQ2hpbGROb2RlcyA9IGZyYWdtZW50LT5yZW1vdmVBbGxDaGlsZHJlbldpdGhT
Y3JpcHRBc3NlcnRpb24oQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFuZ2U6OlNvdXJjZTo6QVBJKTsK
KyAgICAgICAgbm9kZXNGb3JJbnNlcnRpb24uc3dhcChyZW1vdmVkQ2hpbGROb2Rlcyk7CiAKLSAg
ICBhdXRvIHJlbW92ZWRDaGlsZE5vZGVzID0gZnJhZ21lbnQucmVtb3ZlQWxsQ2hpbGRyZW5XaXRo
U2NyaXB0QXNzZXJ0aW9uKENvbnRhaW5lck5vZGU6OkNoaWxkQ2hhbmdlOjpTb3VyY2U6OkFQSSk7
Ci0gICAgbm9kZXNGb3JJbnNlcnRpb24uc3dhcChyZW1vdmVkQ2hpbGROb2Rlcyk7CisgICAgICAg
IGZyYWdtZW50LT5yZWJ1aWxkU1ZHRXh0ZW5zaW9uc0VsZW1lbnRzSWZOZWNlc3NhcnkoKTsKKyAg
ICAgICAgZnJhZ21lbnQtPmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKIAotICAgIGZy
YWdtZW50LnJlYnVpbGRTVkdFeHRlbnNpb25zRWxlbWVudHNJZk5lY2Vzc2FyeSgpOwotICAgIGZy
YWdtZW50LmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CiAKLSAgICByZXR1cm4geyB9OworICAgIG5vZGVzRm9ySW5zZXJ0aW9uLmFwcGVu
ZChjaGlsZCk7CisgICAgUmVmUHRyIG9sZFBhcmVudCA9IGNoaWxkLnBhcmVudE5vZGUoKTsKKyAg
ICBpZiAoIW9sZFBhcmVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gb2xkUGFy
ZW50LT5yZW1vdmVDaGlsZChjaGlsZCk7CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIG11
c3QgZ2V0IGEgbmV3IG5hbWUuCkBAIC0zMTUsMTQgKzMxNCwxNCBAQCB2b2lkIENvbnRhaW5lck5v
ZGU6OnJlbW92ZURldGFjaGVkQ2hpbGRyZW4oKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJv
eVJlbmRlclRyZWVJZk5lZWRlZChOb2RlJiBjaGlsZCkKIHsKLSAgICBib29sIGlzRWxlbWVudCA9
IGlzPEVsZW1lbnQ+KGNoaWxkKTsKLSAgICBhdXRvIGhhc0Rpc3BsYXlDb250ZW50cyA9IGlzRWxl
bWVudCAmJiBkb3duY2FzdDxFbGVtZW50PihjaGlsZCkuaGFzRGlzcGxheUNvbnRlbnRzKCk7Cisg
ICAgYXV0byBjaGlsZEFzRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihjaGlsZCk7
CisgICAgYXV0byBoYXNEaXNwbGF5Q29udGVudHMgPSBjaGlsZEFzRWxlbWVudCAmJiBjaGlsZEFz
RWxlbWVudC0+aGFzRGlzcGxheUNvbnRlbnRzKCk7CiAgICAgaWYgKCFjaGlsZC5yZW5kZXJlcigp
ICYmICFoYXNEaXNwbGF5Q29udGVudHMpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNFbGVt
ZW50KQotICAgICAgICBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcnMoZG93bmNh
c3Q8RWxlbWVudD4oY2hpbGQpKTsKLSAgICBlbHNlIGlmIChpczxUZXh0PihjaGlsZCkpCi0gICAg
ICAgIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVyKGRvd25jYXN0PFRleHQ+KGNo
aWxkKSk7CisgICAgaWYgKGNoaWxkQXNFbGVtZW50KQorICAgICAgICBSZW5kZXJUcmVlVXBkYXRl
cjo6dGVhckRvd25SZW5kZXJlcnMoKmNoaWxkQXNFbGVtZW50KTsKKyAgICBlbHNlIGlmIChhdXRv
IHRleHQgPSBkeW5hbWljRG93bmNhc3Q8VGV4dD4oY2hpbGQpKQorICAgICAgICBSZW5kZXJUcmVl
VXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcigqdGV4dCk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9k
ZTo6dGFrZUFsbENoaWxkcmVuRnJvbShDb250YWluZXJOb2RlKiBvbGRQYXJlbnQpCkBAIC0zNjcs
OCArMzY2LDggQEAgc3RhdGljIGJvb2wgY29udGFpbnNJbmNsdWRpbmdIb3N0RWxlbWVudHMoY29u
c3QgTm9kZSYgcG9zc2libGVBbmNlc3RvciwgY29uc3QgTm8KICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBjdXJyZW50Tm9kZS0+
cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAoIXBhcmVudCkgewotICAgICAgICAgICAgaWYgKGlz
PFNoYWRvd1Jvb3Q+KGN1cnJlbnROb2RlKSkKLSAgICAgICAgICAgICAgICBwYXJlbnQgPSBkb3du
Y2FzdDxTaGFkb3dSb290PihjdXJyZW50Tm9kZSktPmhvc3QoKTsKKyAgICAgICAgICAgIGlmIChh
dXRvIHNoYWRvd1Jvb3QgPSBkeW5hbWljRG93bmNhc3Q8U2hhZG93Um9vdD4oY3VycmVudE5vZGUp
KQorICAgICAgICAgICAgICAgIHBhcmVudCA9IHNoYWRvd1Jvb3QtPmhvc3QoKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKGlzPERvY3VtZW50RnJhZ21lbnQ+KCpjdXJyZW50Tm9kZSkgJiYgZG93bmNh
c3Q8RG9jdW1lbnRGcmFnbWVudD4oKmN1cnJlbnROb2RlKS5pc1RlbXBsYXRlQ29udGVudCgpKQog
ICAgICAgICAgICAgICAgIHBhcmVudCA9IHN0YXRpY19jYXN0PGNvbnN0IFRlbXBsYXRlQ29udGVu
dERvY3VtZW50RnJhZ21lbnQqPihjdXJyZW50Tm9kZSktPmhvc3QoKTsKICAgICAgICAgfQpAQCAt
NDAxLDggKzQwMCw4IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gY2hlY2tBY2Nl
cHRDaGlsZChDb250YWluZXJOb2RlJiBuZXdQYXJlbnQsIE5vZGUmCiAgICAgaWYgKHNob3VsZFZh
bGlkYXRlQ2hpbGRQYXJlbnQgPT0gU2hvdWxkVmFsaWRhdGVDaGlsZFBhcmVudDo6WWVzICYmIHJl
ZkNoaWxkICYmIHJlZkNoaWxkLT5wYXJlbnROb2RlKCkgIT0gJm5ld1BhcmVudCkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAotICAgIGlmIChpczxEb2N1bWVu
dD4obmV3UGFyZW50KSkgewotICAgICAgICBpZiAoIWRvd25jYXN0PERvY3VtZW50PihuZXdQYXJl
bnQpLmNhbkFjY2VwdENoaWxkKG5ld0NoaWxkLCByZWZDaGlsZCwgb3BlcmF0aW9uKSkKKyAgICBp
ZiAoYXV0byBuZXdQYXJlbnREb2N1bWVudCA9IGR5bmFtaWNEb3duY2FzdDxEb2N1bWVudD4obmV3
UGFyZW50KSkgeworICAgICAgICBpZiAoIW5ld1BhcmVudERvY3VtZW50LT5jYW5BY2NlcHRDaGls
ZChuZXdDaGlsZCwgcmVmQ2hpbGQsIG9wZXJhdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAgfSBlbHNlIGlmICghaXNDaGls
ZFR5cGVBbGxvd2VkKG5ld1BhcmVudCwgbmV3Q2hpbGQpKQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
aAppbmRleCBmMTU1NDAxNGI2ZmQ2MzA3ZWE1MmM4YjQwMzQwODgwN2YyNzcxNTNmLi4xY2NjNjhm
NDQ0ZDkxM2FmY2JhODdkM2I0ZmYyMTIzYTcwZGY3NGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmgKQEAgLTE5NCwzMCArMTk0LDI2IEBAIGlubGluZSBDb250YWluZXJOb2RlOjpDb250
YWluZXJOb2RlKERvY3VtZW50JiBkb2N1bWVudCwgQ29uc3RydWN0aW9uVHlwZSB0eXBlKQogCiBp
bmxpbmUgdW5zaWduZWQgTm9kZTo6Y291bnRDaGlsZE5vZGVzKCkgY29uc3QKIHsKLSAgICBpZiAo
IWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICBh
dXRvKiBjb250YWluZXJOb2RlID0gZHluYW1pY0Rvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlz
KTsKKyAgICByZXR1cm4gY29udGFpbmVyTm9kZSA/IGNvbnRhaW5lck5vZGUtPmNvdW50Q2hpbGRO
b2RlcygpIDogMDsKIH0KIAogaW5saW5lIE5vZGUqIE5vZGU6OnRyYXZlcnNlVG9DaGlsZEF0KHVu
c2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKnRoaXMp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZG93bmNhc3Q8Q29udGFpbmVy
Tm9kZT4oKnRoaXMpLnRyYXZlcnNlVG9DaGlsZEF0KGluZGV4KTsKKyAgICBhdXRvKiBjb250YWlu
ZXJOb2RlID0gZHluYW1pY0Rvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKTsKKyAgICByZXR1
cm4gY29udGFpbmVyTm9kZSA/IGNvbnRhaW5lck5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KGluZGV4
KSA6IG51bGxwdHI7CiB9CiAKIGlubGluZSBOb2RlKiBOb2RlOjpmaXJzdENoaWxkKCkgY29uc3QK
IHsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS5maXJzdENo
aWxkKCk7CisgICAgYXV0byogY29udGFpbmVyTm9kZSA9IGR5bmFtaWNEb3duY2FzdDxDb250YWlu
ZXJOb2RlPigqdGhpcyk7CisgICAgcmV0dXJuIGNvbnRhaW5lck5vZGUgPyBjb250YWluZXJOb2Rl
LT5maXJzdENoaWxkKCkgOiBudWxscHRyOwogfQogCiBpbmxpbmUgTm9kZSogTm9kZTo6bGFzdENo
aWxkKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0
aGlzKS5sYXN0Q2hpbGQoKTsKKyAgICBhdXRvKiBjb250YWluZXJOb2RlID0gZHluYW1pY0Rvd25j
YXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKTsKKyAgICByZXR1cm4gY29udGFpbmVyTm9kZSA/IGNv
bnRhaW5lck5vZGUtPmxhc3RDaGlsZCgpIDogbnVsbHB0cjsKIH0KIAogaW5saW5lIE5vZGUmIE5v
ZGU6OnJvb3ROb2RlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGE3MDI2M2Iw
YmRhY2I5ZTQzZmRlZDVlNmY0YzdkMGQ0ZDc3Y2Y1ZWMuLjc4Y2FhYWU3ZDljNzIzNjIwNzY4YTQ0
N2ZlYzI4ZThiODVjMTdiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDcwLDEyICs0
NzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZE5hbWVQYXJ0KFVDaGFyMzIgYykKIAog
c3RhdGljIFdpZGdldCogd2lkZ2V0Rm9yRWxlbWVudChFbGVtZW50KiBmb2N1c2VkRWxlbWVudCkK
IHsKLSAgICBpZiAoIWZvY3VzZWRFbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBhdXRvKiByZW5kZXJlciA9IGZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlmICgh
aXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCpyZW5kZXJlcikud2lkZ2V0KCk7CisgICAg
YXV0byogcmVuZGVyZXIgPSBmb2N1c2VkRWxlbWVudCA/IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJX
aWRnZXQ+KGZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcigpKSA6IG51bGxwdHI7CisgICAgcmV0dXJu
IHJlbmRlcmVyID8gcmVuZGVyZXItPndpZGdldCgpIDogbnVsbHB0cjsKIH0KIAogc3RhdGljIGJv
b2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhjb25zdCBFbGVtZW50JiBlbGVtZW50KQpAQCAtODk1LDEz
ICs4OTEsMTMgQEAgdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlDYWNoZSgpCiAgICAgbV9h
Y2Nlc3NLZXlDYWNoZSA9IG1ha2VVbmlxdWU8SGFzaE1hcDxTdHJpbmcsIFdlYWtQdHI8RWxlbWVu
dD4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+KFt0aGlzXSB7CiAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBXZWFrUHRyPEVsZW1lbnQ+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1hcDsK
ICAgICAgICAgZm9yIChhdXRvJiBub2RlIDogY29tcG9zZWRUcmVlRGVzY2VuZGFudHMoKnRoaXMp
KSB7Ci0gICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICAgICAgYXV0
byBlbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOworICAgICAgICAgICAg
aWYgKCFlbGVtZW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXV0
byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwotICAgICAgICAgICAgYXV0byYg
a2V5ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFjY2Vzc2tleUF0
dHIpOworICAgICAgICAgICAgYXV0byYga2V5ID0gZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihhY2Nlc3NrZXlBdHRyKTsKICAgICAgICAgICAgIGlmIChrZXkuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbWFwLmFkZChrZXks
IGVsZW1lbnQpOworICAgICAgICAgICAgbWFwLmFkZChrZXksICplbGVtZW50KTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gbWFwOwogICAgIH0oKSk7CkBAIC00NDk5LDcgKzQ0OTUsNyBAQCB2
b2lkIERvY3VtZW50OjphZGp1c3RGb2N1c2VkTm9kZU9uTm9kZVJlbW92YWwoTm9kZSYgbm9kZSwg
Tm9kZVJlbW92YWwgbm9kZVJlbW92YQogICAgIGlmIChpc05vZGVJblN1YnRyZWUoKmZvY3VzZWRF
bGVtZW50LCBub2RlLCBub2RlUmVtb3ZhbCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBhdm9pZCBzeW5jaHJvbm91c2x5IHVwZGF0aW5nIHRoZSBzdHlsZSBpbnNpZGUgc2V0Rm9jdXNl
ZEVsZW1lbnQuCiAgICAgICAgIC8vIEZJWE1FOiBPYmplY3QgZWxlbWVudHMgc2hvdWxkIGF2b2lk
IGxvYWRpbmcgYSBmcmFtZSBzeW5jaHJvbm91c2x5IGluIGEgcG9zdCBzdHlsZSByZWNhbGMgY2Fs
bGJhY2suCi0gICAgICAgIFN1YmZyYW1lTG9hZGluZ0Rpc2FibGVyIGRpc2FibGVyKGlzPENvbnRh
aW5lck5vZGU+KG5vZGUpID8gJmRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5vZGUpIDogbnVsbHB0
cik7CisgICAgICAgIFN1YmZyYW1lTG9hZGluZ0Rpc2FibGVyIGRpc2FibGVyKGR5bmFtaWNEb3du
Y2FzdDxDb250YWluZXJOb2RlPihub2RlKSk7CiAgICAgICAgIHNldEZvY3VzZWRFbGVtZW50KG51
bGxwdHIsIHsgeyB9LCB7IH0sIEZvY3VzUmVtb3ZhbEV2ZW50c01vZGU6OkRvTm90RGlzcGF0Y2gs
IHsgfSwgeyB9IH0pOwogICAgICAgICAvLyBTZXQgdGhlIGZvY3VzIG5hdmlnYXRpb24gc3RhcnRp
bmcgbm9kZSB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHNvIHRoYXQKICAgICAgICAg
Ly8gd2UgY2FuIGZhbGxiYWNrIHRvIHRoZSBzaWJsaW5ncyBvciBwYXJlbnQgbm9kZSBmb3IgdGhl
IG5leHQgc2VhcmNoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDVkMjUwNzcwY2VjZDJiZjZk
NDQwMTA5YTY2NmM0ZmRmNTNlMGU1MTAuLjUxMzA0ODU1YWZiNmVhYTNlM2ZiZDk0OGFkMDRhNjk2
YzMxNTI1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTIyOTYsNyArMjI5Niw3IEBAIE5v
ZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2Vz
dG9yKEluc2VydGlvblR5cGUgaW5zCiAKICAgICBib29sIGJlY29tZUNvbm5lY3RlZCA9IGluc2Vy
dGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudDsKICAgICBUcmVlU2NvcGUqIG5ld1Njb3BlID0g
JnBhcmVudE9mSW5zZXJ0ZWRUcmVlLnRyZWVTY29wZSgpOwotICAgIEhUTUxEb2N1bWVudCogbmV3
RG9jdW1lbnQgPSBiZWNvbWVDb25uZWN0ZWQgJiYgaXM8SFRNTERvY3VtZW50PihuZXdTY29wZS0+
ZG9jdW1lbnRTY29wZSgpKSA/ICZkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG5ld1Njb3BlLT5kb2N1
bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBuZXdEb2N1bWVudCA9IGJlY29tZUNv
bm5lY3RlZCA/IGR5bmFtaWNEb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG5ld1Njb3BlLT5kb2N1bWVu
dFNjb3BlKCkpIDogbnVsbHB0cjsKICAgICBpZiAoIWluc2VydGlvblR5cGUudHJlZVNjb3BlQ2hh
bmdlZCkKICAgICAgICAgbmV3U2NvcGUgPSBudWxscHRyOwogCkBAIC0yMzU4LDcgKzIzNTgsNyBA
QCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5
cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcgogICAgIGlmIChvbGRQYXJlbnRPZlJlbW92ZWRUcmVl
LmlzSW5UcmVlU2NvcGUoKSkgewogICAgICAgICBUcmVlU2NvcGUqIG9sZFNjb3BlID0gJm9sZFBh
cmVudE9mUmVtb3ZlZFRyZWUudHJlZVNjb3BlKCk7CiAgICAgICAgIERvY3VtZW50KiBvbGREb2N1
bWVudCA9IHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCA/ICZvbGRTY29wZS0+
ZG9jdW1lbnRTY29wZSgpIDogbnVsbHB0cjsKLSAgICAgICAgSFRNTERvY3VtZW50KiBvbGRIVE1M
RG9jdW1lbnQgPSBvbGREb2N1bWVudCAmJiBpczxIVE1MRG9jdW1lbnQ+KCpvbGREb2N1bWVudCkg
PyAmZG93bmNhc3Q8SFRNTERvY3VtZW50Pigqb2xkRG9jdW1lbnQpIDogbnVsbHB0cjsKKyAgICAg
ICAgYXV0byogb2xkSFRNTERvY3VtZW50ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxEb2N1bWVudD4o
b2xkRG9jdW1lbnQpOwogICAgICAgICBpZiAoIXJlbW92YWxUeXBlLnRyZWVTY29wZUNoYW5nZWQp
CiAgICAgICAgICAgICBvbGRTY29wZSA9IG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50SW5saW5lcy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRJ
bmxpbmVzLmgKaW5kZXggODYwYzA0OTE2MTE0Y2ZlNDY0YTQ3MDJmZmE3MWQxOGYxMjk3YzFmZC4u
M2Y4NTdhNjQzM2Q2ZTFiMmIzMzJjMGY2OTMzZjU3NDQwNDRmZWY4OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRJbmxpbmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRJbmxpbmVzLmgKQEAgLTYxLDggKzYxLDcgQEAgaW5saW5lIE5hbWVkTm9kZU1hcCog
Tm9kZTo6YXR0cmlidXRlcygpIGNvbnN0CiAKIGlubGluZSBFbGVtZW50KiBOb2RlOjpwYXJlbnRF
bGVtZW50KCkgY29uc3QKIHsKLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2Rl
KCk7Ci0gICAgcmV0dXJuIGlzPEVsZW1lbnQ+KHBhcmVudCkgPyBkb3duY2FzdDxFbGVtZW50Pihw
YXJlbnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KHBh
cmVudE5vZGUoKSk7CiB9CiAKIGlubGluZSBjb25zdCBFbGVtZW50KiBFbGVtZW50Ojpyb290RWxl
bWVudCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRj
aGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDM5
OTEyMTRlYzE0M2QzODRiNjhiYWY2NTU5OWMyOWY3NjY1MzY2ZWIuLjBlZmZlMDY1NjJkMmIwZTQ4
OTRmMGQ3YWMyOTQ5ZmFlODUwYjBkMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
RXZlbnQoTm9kZSYgbm9kZSwgRXZlbnQmIGV2ZW50KQogICAgIElucHV0RWxlbWVudENsaWNrU3Rh
dGUgY2xpY2tIYW5kbGluZ1N0YXRlOwogCiAgICAgYm9vbCBpc0FjdGl2YXRpb25FdmVudCA9IGV2
ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudDsKLSAgICBSZWZQdHI8SFRNTElu
cHV0RWxlbWVudD4gaW5wdXRGb3JMZWdhY3lQcmVBY3RpdmF0aW9uQmVoYXZpb3IgPSBpczxIVE1M
SW5wdXRFbGVtZW50Pihub2RlKSA/ICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSA6
IG51bGxwdHI7CisgICAgUmVmUHRyIGlucHV0Rm9yTGVnYWN5UHJlQWN0aXZhdGlvbkJlaGF2aW9y
ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpOwogICAgIGlmICghaW5w
dXRGb3JMZWdhY3lQcmVBY3RpdmF0aW9uQmVoYXZpb3IgJiYgaXNBY3RpdmF0aW9uRXZlbnQgJiYg
ZXZlbnQuYnViYmxlcygpKQogICAgICAgICBpbnB1dEZvckxlZ2FjeVByZUFjdGl2YXRpb25CZWhh
dmlvciA9IGZpbmRJbnB1dEVsZW1lbnRJbkV2ZW50UGF0aChldmVudFBhdGgpOwogICAgIGlmIChp
bnB1dEZvckxlZ2FjeVByZUFjdGl2YXRpb25CZWhhdmlvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50
LmNwcAppbmRleCBkYWMzZTA4OGQ5YTVkM2I3Njg3ZDRkYjFjZWZiMmQ1ZWI4YjBlMGYyLi41OWQz
OWFiMTljNGFmOGJmYTIyOGE2NWRlNmU1MWEzZjNiMzQ3MGQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNl
RXZlbnQuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgUmVmUHRyPE5vZGU+IE1vdXNlRXZlbnQ6OnRv
RWxlbWVudCgpIGNvbnN0CiAgICAgICAgIHRhcmdldCA9IHJlbGF0ZWRUYXJnZXQoKTsKICAgICBl
bHNlCiAgICAgICAgIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwotICAgIHJldHVybiBpczxOb2Rl
Pih0YXJnZXQpID8gJmRvd25jYXN0PE5vZGU+KCp0YXJnZXQpIDogbnVsbHB0cjsKKyAgICByZXR1
cm4gZHluYW1pY0Rvd25jYXN0PE5vZGU+KHRhcmdldCk7CiB9CiAKIFJlZlB0cjxOb2RlPiBNb3Vz
ZUV2ZW50Ojpmcm9tRWxlbWVudCgpIGNvbnN0CkBAIC0yMTQsNyArMjE0LDcgQEAgUmVmUHRyPE5v
ZGU+IE1vdXNlRXZlbnQ6OmZyb21FbGVtZW50KCkgY29uc3QKICAgICAgICAgdGFyZ2V0ID0gdGhp
cy0+dGFyZ2V0KCk7CiAgICAgZWxzZQogICAgICAgICB0YXJnZXQgPSByZWxhdGVkVGFyZ2V0KCk7
Ci0gICAgcmV0dXJuIGlzPE5vZGU+KHRhcmdldCkgPyAmZG93bmNhc3Q8Tm9kZT4oKnRhcmdldCkg
OiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8Tm9kZT4odGFyZ2V0KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDUxZTBhY2EzNDQ0
OWZjM2MzZDY1OWIyNjRjZjg4NWFiMzNmN2Y4Y2QuLjk2MjgxODAzNjFjNzQzZGQ3NGFmMGFhMzJk
YjQ1OGY0ZDZiYTdiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTgwMSwxNCArODAxLDEyIEBAIE5v
ZGU6OkVkaXRhYmlsaXR5IE5vZGU6OmNvbXB1dGVFZGl0YWJpbGl0eShVc2VyU2VsZWN0QWxsVHJl
YXRtZW50IHRyZWF0bWVudCwgU2hvCiAKIFJlbmRlckJveCogTm9kZTo6cmVuZGVyQm94KCkgY29u
c3QKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAg
ICByZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcikgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpOwogfQogCiBSZW5kZXJCb3hNb2RlbE9iamVjdCogTm9kZTo6cmVuZGVyQm94
TW9kZWxPYmplY3QoKSBjb25zdAogewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOwotICAgIHJldHVybiBpczxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVy
ZXIpID8gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKSA6IG51bGxwdHI7
CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVy
ZXIoKSk7CiB9CiAgICAgCiBMYXlvdXRSZWN0IE5vZGU6OnJlbmRlclJlY3QoYm9vbCogaXNSZXBs
YWNlZCkKQEAgLTExNDgsOCArMTE0Niw3IEBAIEVsZW1lbnQqIE5vZGU6OnNoYWRvd0hvc3QoKSBj
b25zdAogCiBTaGFkb3dSb290KiBOb2RlOjpjb250YWluaW5nU2hhZG93Um9vdCgpIGNvbnN0CiB7
Ci0gICAgQ29udGFpbmVyTm9kZSYgcm9vdCA9IHRyZWVTY29wZSgpLnJvb3ROb2RlKCk7Ci0gICAg
cmV0dXJuIGlzPFNoYWRvd1Jvb3Q+KHJvb3QpID8gZG93bmNhc3Q8U2hhZG93Um9vdD4oJnJvb3Qp
IDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFNoYWRvd1Jvb3Q+KHRyZWVT
Y29wZSgpLnJvb3ROb2RlKCkpOwogfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKQEAgLTE2NDMsOCAr
MTY0MCw4IEBAIHVuc2lnbmVkIHNob3J0IE5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKE5v
ZGUmIG90aGVyTm9kZSkKICAgICBpZiAoJm90aGVyTm9kZSA9PSB0aGlzKQogICAgICAgICByZXR1
cm4gRE9DVU1FTlRfUE9TSVRJT05fRVFVSVZBTEVOVDsKICAgICAKLSAgICBBdHRyKiBhdHRyMSA9
IGlzPEF0dHI+KCp0aGlzKSA/IGRvd25jYXN0PEF0dHI+KHRoaXMpIDogbnVsbHB0cjsKLSAgICBB
dHRyKiBhdHRyMiA9IGlzPEF0dHI+KG90aGVyTm9kZSkgPyAmZG93bmNhc3Q8QXR0cj4ob3RoZXJO
b2RlKSA6IG51bGxwdHI7CisgICAgYXV0byogYXR0cjEgPSBkeW5hbWljRG93bmNhc3Q8QXR0cj4o
KnRoaXMpOworICAgIGF1dG8qIGF0dHIyID0gZHluYW1pY0Rvd25jYXN0PEF0dHI+KG90aGVyTm9k
ZSk7CiAgICAgCiAgICAgTm9kZSogc3RhcnQxID0gYXR0cjEgPyBhdHRyMS0+b3duZXJFbGVtZW50
KCkgOiB0aGlzOwogICAgIE5vZGUqIHN0YXJ0MiA9IGF0dHIyID8gYXR0cjItPm93bmVyRWxlbWVu
dCgpIDogJm90aGVyTm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDlhNTEyZWZlN2M5
YzAxZWY4MjAxMmNiNDNmOWI2MTE1NTg5NjdhMmEuLmQ1ODdiOGJjNjhiMjJmMGZmNGRhMDNjZDg5
MjNjM2M2N2E4MzIxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMTg1LDcgKzE4NSw3
IEBAIFRleHQqIFBvc2l0aW9uOjpjb250YWluZXJUZXh0KCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KGFuY2hvclR5cGUoKSkgewogICAgIGNhc2UgUG9zaXRpb25Jc09mZnNldEluQW5jaG9yOgotICAg
ICAgICByZXR1cm4gbV9hbmNob3JOb2RlICYmIGlzPFRleHQ+KCptX2FuY2hvck5vZGUpID8gZG93
bmNhc3Q8VGV4dD4obV9hbmNob3JOb2RlLmdldCgpKSA6IG51bGxwdHI7CisgICAgICAgIHJldHVy
biBkeW5hbWljRG93bmNhc3Q8VGV4dD4obV9hbmNob3JOb2RlLmdldCgpKTsKICAgICBjYXNlIFBv
c2l0aW9uSXNCZWZvcmVBbmNob3I6CiAgICAgY2FzZSBQb3NpdGlvbklzQWZ0ZXJBbmNob3I6CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Rl
eHROb2RlVHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNh
bC5jcHAKaW5kZXggYjc4Y2E3OTBjZDc3MmUyNWU3NTcxYjI3YTM2ZjM3Mjk4ZDc5ODg0ZC4uNzc2
YzJjYjc2NDBkYzE2NzE5NzY4ZDNhYTIzMmFlMzc3MWQ2YTU1MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgU3RyaW5nIGNvbnRl
bnRzQXNTdHJpbmcoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdCkKIAogU3RyaW5nIGNvbnRlbnRz
QXNTdHJpbmcoY29uc3QgTm9kZSYgcm9vdCkKIHsKLSAgICBpZiAoaXM8VGV4dD4ocm9vdCkpCi0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxUZXh0Pihyb290KS5kYXRhKCk7Ci0gICAgaWYgKGlzPENv
bnRhaW5lck5vZGU+KHJvb3QpKQotICAgICAgICByZXR1cm4gY29udGVudHNBc1N0cmluZyhkb3du
Y2FzdDxDb250YWluZXJOb2RlPihyb290KSk7CisgICAgaWYgKGF1dG8gdGV4dCA9IGR5bmFtaWNE
b3duY2FzdDxUZXh0Pihyb290KSkKKyAgICAgICAgcmV0dXJuIHRleHQtPmRhdGEoKTsKKyAgICBp
ZiAoYXV0byBjb250YWluZXJOb2RlID0gZHluYW1pY0Rvd25jYXN0PENvbnRhaW5lck5vZGU+KHJv
b3QpKQorICAgICAgICByZXR1cm4gY29udGVudHNBc1N0cmluZygqY29udGFpbmVyTm9kZSk7CiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
VHJlZVNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCmluZGV4IDhm
NmM0N2Y4Y2Q2OGVmZmEwOTkyNDZjMDAxMDUyNjU5MmFiNGViNjMuLmUyOTY3NjEzMzQ2Y2ExYTdk
ZmZlMzczMzNjMGVmNmQ1NTQ0ZWUzZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCkBAIC00
MTQsOCArNDE0LDggQEAgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gVHJlZVNjb3BlOjplbGVtZW50
c0Zyb21Qb2ludChkb3VibGUgY2xpZW50WCwgZG91YmxlIGNsaWUKICAgICAgICAgaWYgKCFub2Rl
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGlzPFBzZXVkb0VsZW1lbnQ+
KG5vZGUpKQotICAgICAgICAgICAgbm9kZSA9IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpub2Rl
KS5ob3N0RWxlbWVudCgpOworICAgICAgICBpZiAoYXV0byBwc2V1ZG9FbGVtZW50ID0gZHluYW1p
Y0Rvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCpub2RlKSkKKyAgICAgICAgICAgIG5vZGUgPSBwc2V1
ZG9FbGVtZW50LT5ob3N0RWxlbWVudCgpOwogCiAgICAgICAgIC8vIFBydW5lIGR1cGxpY2F0ZSBl
bnRyaWVzLiBBIHBzZXVkbyA6OmJlZm9yZSBjb250ZW50IGFib3ZlIGl0cyBwYXJlbnQKICAgICAg
ICAgLy8gbm9kZSBzaG91bGQgb25seSByZXN1bHQgaW4gb25lIGVudHJ5LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oCmluZGV4IDZi
Y2Q1YzQwYTgyMmFjZmQ3MTllYjEzZTY0ZjNjNjBlMGU1Yjk2ZjAuLmU0MGJlZjQzZGU2YjFhNGU0
MTJiYzJiNWY5NWUwNDU2M2ZmMmE3ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
eXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
VHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgKQEAgLTE3MCw4ICsxNzAsOCBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVt
ZW50VHlwZT4gRWxlbWVudERlcwogdGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IEVsZW1lbnREZXNjZW5kYW50UmFuZ2U8
RWxlbWVudFR5cGU+Ojpmcm9tKEVsZW1lbnQmIGRlc2NlbmRhbnQpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGRlc2NlbmRhbnQuaXNEZXNjZW5kYW50T2YobV9yb290KSk7Ci0gICAgaWYgKGlzPEVsZW1l
bnRUeXBlPihkZXNjZW5kYW50KSkKLSAgICAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRl
cmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgZG93bmNhc3Q8RWxlbWVudFR5cGU+KCZkZXNjZW5k
YW50KSk7CisgICAgaWYgKGF1dG8gZGVzY2VuZGFudEVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8
RWxlbWVudFR5cGU+KGRlc2NlbmRhbnQpKQorICAgICAgICByZXR1cm4gRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBkZXNjZW5kYW50RWxlbWVudCk7CiAgICAg
RWxlbWVudFR5cGUqIG5leHQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KGRlc2NlbmRh
bnQsICZtX3Jvb3QpOwogICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1l
bnRUeXBlPihtX3Jvb3QsIG5leHQpOwogfQpAQCAtMjA3LDggKzIwNyw4IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIEVsZW1lbnRUeXBlPiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBl
PiBJbmNsdXNpdmVFCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudERlc2Nl
bmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gSW5jbHVzaXZlRWxlbWVudERlc2NlbmRhbnRSYW5n
ZTxFbGVtZW50VHlwZT46OmZyb20oRWxlbWVudCYgZGVzY2VuZGFudCkgY29uc3QKIHsKICAgICBB
U1NFUlQoJm1fcm9vdCA9PSAmZGVzY2VuZGFudCB8fCBkZXNjZW5kYW50LmlzRGVzY2VuZGFudE9m
KG1fcm9vdCkpOwotICAgIGlmIChpczxFbGVtZW50VHlwZT4oZGVzY2VuZGFudCkpCi0gICAgICAg
IHJldHVybiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIGRv
d25jYXN0PEVsZW1lbnRUeXBlPigmZGVzY2VuZGFudCkpOworICAgIGlmIChhdXRvIGVsZW1lbnRE
ZXNjZW5kYW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnRUeXBlPihkZXNjZW5kYW50KSkKKyAg
ICAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9v
dCwgJmVsZW1lbnREZXNjZW5kYW50KTsKICAgICBFbGVtZW50VHlwZSogbmV4dCA9IFRyYXZlcnNh
bDxFbGVtZW50VHlwZT46Om5leHQoZGVzY2VuZGFudCwgJm1fcm9vdCk7CiAgICAgcmV0dXJuIEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgbmV4dCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKaW5kZXggMTMxNTkxYmI0OThiNDc5
ZmYwMDBlYjg3ODc2YTcyM2MyYWZhZTdlZS4uYzU4N2M0ZWMwZWU4NzM2YTk3ZDU1NzA5NWY1MzRi
NmQ0ZDg1YjFkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3Rh
dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcApAQCAt
NzEsMTAgKzcxLDEwIEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9y
QWxsTGlua3MoKQogCiBpbmxpbmUgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2hhcmVkU3RyaW5nSGFz
aD4gbGlua0hhc2hGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYg
KGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKLSAgICBpZiAo
aXM8U1ZHQUVsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHQUVs
ZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFzaCgpOworICAgIGlmIChhdXRvIGFuY2hvciA9
IGR5bmFtaWNEb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgIHJl
dHVybiBhbmNob3ItPnZpc2l0ZWRMaW5rSGFzaCgpOworICAgIGlmIChhdXRvIGFuY2hvciA9IGR5
bmFtaWNEb3duY2FzdDxTVkdBRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgIHJldHVybiBhbmNo
b3ItPnZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdl
UG9ydENoYW5uZWxQcm92aWRlci5jcHAKaW5kZXggZmM1MTNlZTFjODRiN2JiOGU0OTZhM2E3MGE0
MTY0ODA2MDAzYTc5Zi4uMzQxYzAzY2VmM2RlM2E0YzhjNDZlNDUwNTI4YTZhM2M1MGMzNTBiYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENo
YW5uZWxQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9N
ZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKQEAgLTU3LDExICs1NywxMSBAQCB2b2lkIE1l
c3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpzZXRTaGFyZWRQcm92aWRlcihNZXNzYWdlUG9ydENo
YW5uZWxQcm92aWRlciYgcAogCiBNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlciYgTWVzc2FnZVBv
cnRDaGFubmVsUHJvdmlkZXI6OmZyb21Db250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpCiB7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkKLSAgICAgICAgcmV0dXJu
IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5tZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcigp
OworICAgIGlmIChhdXRvIGRvY3VtZW50ID0gZHluYW1pY0Rvd25jYXN0PERvY3VtZW50Pihjb250
ZXh0KSkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tZXNzYWdlUG9ydENoYW5uZWxQcm92aWRl
cigpOwogCi0gICAgaWYgKGlzPFdvcmtsZXRHbG9iYWxTY29wZT4oY29udGV4dCkpCi0gICAgICAg
IHJldHVybiBkb3duY2FzdDxXb3JrbGV0R2xvYmFsU2NvcGU+KGNvbnRleHQpLm1lc3NhZ2VQb3J0
Q2hhbm5lbFByb3ZpZGVyKCk7CisgICAgaWYgKGF1dG8gd29ya2xldFNjb3BlID0gZHluYW1pY0Rv
d25jYXN0PFdvcmtsZXRHbG9iYWxTY29wZT4oY29udGV4dCkpCisgICAgICAgIHJldHVybiB3b3Jr
bGV0U2NvcGUtPm1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyKCk7CiAKICAgICByZXR1cm4gZG93
bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpLm1lc3NhZ2VQb3J0Q2hhbm5lbFByb3Zp
ZGVyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCA5ODBkZGU4NTFmMTA3
MjNkNzhmNjYxOTg0MjczMjQ4ZjdhMGZhNWM0Li43ZDlkNTliZTFjMTUyZjA5ODVmNWY1MThiYjlm
Y2NlNTZmODdiYzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTMyMSw4ICsz
MjEsNyBAQCBib29sIGlzSW5saW5lKGNvbnN0IE5vZGUqIG5vZGUpCiAvLyBrbm93aW5nIGFib3V0
IHRoZXNlIGtpbmRzIG9mIHNwZWNpYWwgY2FzZXMuCiBFbGVtZW50KiBlbmNsb3NpbmdCbG9jayhO
b2RlKiBub2RlLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkKIHsKLSAgICBOb2Rl
KiBlbmNsb3NpbmdOb2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUobm9kZSksIGlzQmxvY2ssIHJ1bGUpOwotICAgIHJldHVybiBpczxFbGVtZW50Pihl
bmNsb3NpbmdOb2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGVuY2xvc2luZ05vZGUpIDogbnVsbHB0
cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KGVuY2xvc2luZ05vZGVPZlR5
cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBpc0Jsb2NrLCBydWxlKSk7CiB9
CiAKIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91
cEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNw
cAppbmRleCAzOTg5ZDdlN2RlNTUwNzJiMjQyZThlMzQwNTQxN2ZmNjY5MDdiMjc3Li45ZjNhNjEx
NDljMDEwZDhkZTcyNTA1YjA3N2ZhMjBjZTFiMWYzMGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKQEAgLTE1NSw4ICsxNTUsNyBAQCBTdHJpbmcgSFRN
TE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBMYWJlbFRleHQoKSBjb25zdAogICAgIAogSFRNTFNlbGVj
dEVsZW1lbnQqIEhUTUxPcHRHcm91cEVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0
CiB7Ci0gICAgYXV0byogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwotICAgIHJldHVybiBpczxIVE1M
U2VsZWN0RWxlbWVudD4ocGFyZW50KSA/IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PihwYXJl
bnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PEhUTUxTZWxlY3RFbGVt
ZW50PihwYXJlbnROb2RlKCkpOwogfQogCiBib29sIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmFjY2Vz
c0tleUFjdGlvbihib29sKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5jcHAKaW5kZXggODJjMzg5ZTkzY2JhOGQ0NmRiMDRlNWI2ZTI0NDhkM2M3NTY5Y2M3
MS4uOTFkZDkwZjM3NTQzMDU3ZTcwMzcyNDVjYmU4ODU4OGY0OTQyNzZlNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC03NCw3ICs3NCw3
IEBAIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6On5IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KCkKIFJl
bmRlckVtYmVkZGVkT2JqZWN0KiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW5kZXJFbWJlZGRl
ZE9iamVjdCgpIGNvbnN0CiB7CiAgICAgLy8gSFRNTE9iamVjdEVsZW1lbnQgYW5kIEhUTUxFbWJl
ZEVsZW1lbnQgbWF5IHJldHVybiBhcmJpdHJhcnkgcmVuZGVyZXJzIHdoZW4gdXNpbmcgZmFsbGJh
Y2sgY29udGVudC4KLSAgICByZXR1cm4gaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVy
KCkpID8gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKCkpIDogbnVsbHB0
cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5k
ZXJlcigpKTsKIH0KIAogYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojppc0ltYWdlVHlwZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCmluZGV4IGExYmUxMTUwNWIwZDVmNWYyMzQyN2E0ZjE4NmI2OWM3Y2Vh
M2ZlOGQuLmI4YjVmYjY1YWNmNDEyZTkzMjI1MjQ1YTQxYTVkODE4MTU1NWQ2ODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCkBAIC03OTQsNyArNzk0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZShDYW4KICAg
ICBib29sIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKICAgICBIb3N0V2luZG93
KiBob3N0V2luZG93ID0gbnVsbHB0cjsKIAotICAgIGF1dG8qIGNhbnZhc0VsZW1lbnQgPSBpczxI
VE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSA/ICZkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4o
Y2FudmFzKSA6IG51bGxwdHI7CisgICAgYXV0byogY2FudmFzRWxlbWVudCA9IGR5bmFtaWNEb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKTsKIAogICAgIGlmIChjYW52YXNFbGVtZW50
KSB7CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNhbnZhc0VsZW1lbnQtPmRvY3VtZW50
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmljYXRpb24uY3BwCmluZGV4IDNjMTk3MTUwN2Jl
MzI5ZmM5NjNmMjQ3YjdhNGIwODMzNDYyMDY3MTUuLjUzMWQyNGM0M2VmYjE0YTI3ODY0ZmY1Zjk2
MGUyMTA5OTBjNWRjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmlj
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmljYXRpb24uY3BwCkBA
IC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGlu
ZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLAogICAgIGZvciAodW5zaWdu
ZWQgaW5saW5lQm94SW5kZXggPSAwOyBpbmxpbmVCb3hJbmRleCA8IGlubGluZUJveGVzLnNpemUo
KSAmJiBib3hJbmRleCA8IGJveGVzLnNpemUoKTsgKytpbmxpbmVCb3hJbmRleCkgewogICAgICAg
ICBhdXRvJiBib3ggPSBib3hlc1tib3hJbmRleF07CiAgICAgICAgIGF1dG8qIGlubGluZUJveCA9
IGlubGluZUJveGVzW2lubGluZUJveEluZGV4XTsKLSAgICAgICAgYXV0byogaW5saW5lVGV4dEJv
eCA9IGlzPFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g+KGlubGluZUJveCkgPyBkb3duY2Fz
dDxXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpIDogbnVsbHB0cjsKKyAg
ICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9IGR5bmFtaWNEb3duY2FzdDxXZWJDb3JlOjpMZWdh
Y3lJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpOwogICAgICAgICBib29sIG1hdGNoaW5nUnVucyA9
IGlubGluZVRleHRCb3ggPyBjaGVja0Zvck1hdGNoaW5nVGV4dFJ1bnMoYm94LCAqaW5saW5lVGV4
dEJveCkgOiBjaGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoYm94LCAqaW5saW5lQm94KTsKIAog
ICAgICAgICBpZiAoIW1hdGNoaW5nUnVucykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9z
Y3JvbGxDb250cm9sbGVyLmNwcAppbmRleCBiMDBjNTE4MmFmMjk1MTM0NmE3ZTYyZDlkYmY5OTI1
NjE3MWEyOGJlLi4zNDRjZGZiMzg5MWExNzMyYTUwMzg3NWFkZmEzMTgyYzUyMmRlOTQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcApAQCAtMTM2LDcg
KzEzNiw3IEBAIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUF1dG9zY3JvbGxSZW5k
ZXJlcigpCiAKICAgICB3aGlsZSAocmVuZGVyZXIgJiYgIShpczxSZW5kZXJCb3g+KCpyZW5kZXJl
cikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmNhbkF1dG9zY3JvbGwoKSkpCiAg
ICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwotICAgIG1fYXV0b3Njcm9sbFJl
bmRlcmVyID0gaXM8UmVuZGVyQm94PihyZW5kZXJlcikgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKSA6IG51bGxwdHI7CisgICAgbV9hdXRvc2Nyb2xsUmVuZGVyZXIgPSBkeW5hbWljRG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CiB9CiAKIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xs
ZXI6OnVwZGF0ZURyYWdBbmREcm9wKE5vZGUqIGRyb3BUYXJnZXROb2RlLCBjb25zdCBJbnRQb2lu
dCYgZXZlbnRQb3NpdGlvbiwgV2FsbFRpbWUgZXZlbnRUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVy
LmNwcAppbmRleCA4ODkwNTJlM2E0NTJlMjU2ZTM4NzgyMzg2N2UzYmI3OGQ1MDU3NDZkLi42NDVi
Njk5ZDExMmYxMTQ1ZTQxMzA5YmRlNTIxNWMxYjBiNmVlNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRp
bWVyLmNwcApAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgRE9NVGltZXI6OmZpcmVkKCkKICAgICAg
ICAgbmVzdGVkVGltZXJzLT5zdGFydFRyYWNraW5nKCk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9D
SEFOR0VfT0JTRVJWRVIpCi0gICAgQ29udGVudENoYW5nZU9ic2VydmVyOjpET01UaW1lclNjb3Bl
IG9ic2VydmluZ1Njb3BlKGlzPERvY3VtZW50Pihjb250ZXh0KSA/ICZkb3duY2FzdDxEb2N1bWVu
dD4oY29udGV4dCkgOiBudWxscHRyLCAqdGhpcyk7CisgICAgQ29udGVudENoYW5nZU9ic2VydmVy
OjpET01UaW1lclNjb3BlIG9ic2VydmluZ1Njb3BlKGR5bmFtaWNEb3duY2FzdDxEb2N1bWVudD4o
Y29udGV4dCksICp0aGlzKTsKICNlbmRpZgogICAgIG1fYWN0aW9uLT5leGVjdXRlKGNvbnRleHQp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDEzOTk1Njg5MzE5
ZDk0MGJhM2JmOWQ0YjQyOGQyNzJhNmEzNWE0MDIuLmQ0N2YyYjFmNmU3ZWJjYjk5ZTJiMDIyNThj
MmM5MDI5ZDQxMjQ5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBA
IC0zNDUsNyArMzQ1LDcgQEAgc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGFzRmlsZUlucHV0KE5v
ZGUmIG5vZGUpCiAgICAgLy8gSWYgdGhpcyBpcyBhIGJ1dHRvbiBpbnNpZGUgb2YgdGhlIGEgZmls
ZSBpbnB1dCwgbW92ZSB1cCB0byB0aGUgZmlsZSBpbnB1dC4KICAgICBpZiAoaW5wdXRFbGVtZW50
LT5pc1RleHRCdXR0b24oKSAmJiBpczxTaGFkb3dSb290PihpbnB1dEVsZW1lbnQtPnRyZWVTY29w
ZSgpLnJvb3ROb2RlKCkpKSB7CiAgICAgICAgIGF1dG8mIGhvc3QgPSAqZG93bmNhc3Q8U2hhZG93
Um9vdD4oaW5wdXRFbGVtZW50LT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKS5ob3N0KCk7Ci0gICAg
ICAgIGlucHV0RWxlbWVudCA9IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGhvc3QpID8gJmRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KGhvc3QpIDogbnVsbHB0cjsKKyAgICAgICAgaW5wdXRFbGVtZW50
ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGhvc3QpOwogICAgIH0KIAogICAg
IHJldHVybiBpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5pc0ZpbGVVcGxvYWQoKSA/IGlu
cHV0RWxlbWVudCA6IG51bGxwdHI7CkBAIC01MDQsOCArNTA0LDggQEAgc3RkOjpvcHRpb25hbDxE
cmFnT3BlcmF0aW9uPiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9uRm9yTG9hZChjb25zdCBEcmFn
RGF0YSYgZHIKICAgICBib29sIHBsdWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzID0gZmFsc2U7CiAK
ICAgICBpZiAoaXM8UGx1Z2luRG9jdW1lbnQ+KGRvY3VtZW50KSkgewotICAgICAgICBjb25zdCBX
aWRnZXQqIHdpZGdldCA9IGRvd25jYXN0PFBsdWdpbkRvY3VtZW50PigqZG9jdW1lbnQpLnBsdWdp
bldpZGdldCgpOwotICAgICAgICBjb25zdCBQbHVnaW5WaWV3QmFzZSogcGx1Z2luVmlldyA9IGlz
PFBsdWdpblZpZXdCYXNlPih3aWRnZXQpID8gZG93bmNhc3Q8UGx1Z2luVmlld0Jhc2U+KHdpZGdl
dCkgOiBudWxscHRyOworICAgICAgICBhdXRvKiB3aWRnZXQgPSBkb3duY2FzdDxQbHVnaW5Eb2N1
bWVudD4oKmRvY3VtZW50KS5wbHVnaW5XaWRnZXQoKTsKKyAgICAgICAgYXV0byogcGx1Z2luVmll
dyA9IGR5bmFtaWNEb3duY2FzdDxQbHVnaW5WaWV3QmFzZT4od2lkZ2V0KTsKIAogICAgICAgICBp
ZiAocGx1Z2luVmlldykKICAgICAgICAgICAgIHBsdWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzID0g
cGx1Z2luVmlldy0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCA2ZGZlMGRkM2VhNGRhM2ExZjVmMGY2Yzc5ZDZk
MWEzYmYwMGMzMTU5Li45ZTk3ZGQ1ZjY4OWU2YTFhOTBjOTA2OTQ0NWRjM2Y0YjhjNDVlODQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgRHJh
Z0ltYWdlUmVmIGZpdERyYWdJbWFnZVRvTWF4U2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0
IEludFNpemUmIGxheW91dFNpemUKIAogc3RydWN0IFNjb3BlZE5vZGVEcmFnRW5hYmxlciB7CiAg
ICAgU2NvcGVkTm9kZURyYWdFbmFibGVyKEZyYW1lJiBmcmFtZSwgTm9kZSYgbm9kZSkKLSAgICAg
ICAgOiBlbGVtZW50KGlzPEVsZW1lbnQ+KG5vZGUpID8gJmRvd25jYXN0PEVsZW1lbnQ+KG5vZGUp
IDogbnVsbHB0cikKKyAgICAgICAgOiBlbGVtZW50KGR5bmFtaWNEb3duY2FzdDxFbGVtZW50Pihu
b2RlKSkKICAgICB7CiAgICAgICAgIGlmIChlbGVtZW50KQogICAgICAgICAgICAgZWxlbWVudC0+
c2V0QmVpbmdEcmFnZ2VkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9T
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQppbmRleCAyYTRjOTFiNTM2OWZlYzU4ZDljOWQ5
NGU5ZmI0MjQ2ZDNjYmVmOTM4Li5lNjFhM2E3ZmNjOTYzNzk4ZjY4OThjMDEyN2JkNzRiYjMzMGJm
N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQy5tbQpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0
ZUFWRk9iakM6OnNldENETVNlc3Npb24oQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyogc2Vz
CiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRDRE1JbnN0YW5jZShDRE1JbnN0
YW5jZSogaW5zdGFuY2UpCiB7CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgSEFWRShB
VkNPTlRFTlRLRVlTRVNTSU9OKQotICAgIGF1dG8qIGZwc0luc3RhbmNlID0gaXM8Q0RNSW5zdGFu
Y2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakM+KGluc3RhbmNlKSA/IGRvd25jYXN0PENETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDPihpbnN0YW5jZSkgOiBudWxscHRyOworICAgIGF1
dG8qIGZwc0luc3RhbmNlID0gZHluYW1pY0Rvd25jYXN0PENETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDPihpbnN0YW5jZSk7CiAgICAgaWYgKGZwc0luc3RhbmNlID09IG1fY2RtSW5z
dGFuY2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCmluZGV4IDJjZGRlZGIxNWVmMGFlNDg3ODNjYzFjYTdi
MzQ0ZmIwMjQzNDUwMmUuLjdiNDZmMzk4YmQxMmE4OWVhNTlmZDc2YjY1OTI2YTI4NDE4Mzg1NGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5j
cHAKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OmNvbXB1dGVM
b2dpY2FsQm94SGVpZ2h0cyhMZWdhY3lSb290SW5saW5lQm94JiByb290Qm94LAogICAgICAgICBp
ZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsgLy8gUG9zaXRpb25lZCBwbGFjZWhvbGRlcnMgZG9uJ3QgYWZmZWN0IGNhbGN1
bGF0aW9ucy4KICAgICAgICAgCi0gICAgICAgIExlZ2FjeUlubGluZUZsb3dCb3gqIGlubGluZUZs
b3dCb3ggPSBpczxMZWdhY3lJbmxpbmVGbG93Qm94PigqY2hpbGQpID8gZG93bmNhc3Q8TGVnYWN5
SW5saW5lRmxvd0JveD4oY2hpbGQpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0byogaW5saW5lRmxv
d0JveCA9IGR5bmFtaWNEb3duY2FzdDxMZWdhY3lJbmxpbmVGbG93Qm94PigqY2hpbGQpOwogICAg
ICAgICAKICAgICAgICAgYm9vbCBhZmZlY3RzQXNjZW50ID0gZmFsc2U7CiAgICAgICAgIGJvb2wg
YWZmZWN0c0Rlc2NlbnQgPSBmYWxzZTsKQEAgLTY2Nyw3ICs2NjcsNyBAQCBzdGF0aWMgdm9pZCBw
bGFjZUNoaWxkSW5saW5lQm94ZXNJbkJsb2NrRGlyZWN0aW9uKExlZ2FjeUlubGluZUZsb3dCb3gm
IGlubGluZUJveAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBM
ZWdhY3lJbmxpbmVGbG93Qm94KiBpbmxpbmVGbG93Qm94ID0gaXM8TGVnYWN5SW5saW5lRmxvd0Jv
eD4oKmNoaWxkKSA/IGRvd25jYXN0PExlZ2FjeUlubGluZUZsb3dCb3g+KGNoaWxkKSA6IG51bGxw
dHI7CisgICAgICAgIGF1dG8qIGlubGluZUZsb3dCb3ggPSBkeW5hbWljRG93bmNhc3Q8TGVnYWN5
SW5saW5lRmxvd0JveD4oKmNoaWxkKTsKICAgICAgICAgYm9vbCBjaGlsZEFmZmVjdHNUb3BCb3R0
b21Qb3MgPSB0cnVlOwogCiAgICAgICAgIGlmIChjaGlsZC0+dmVydGljYWxBbGlnbigpID09IFZl
cnRpY2FsQWxpZ246OlRvcCAmJiB2ZXJ0aWNhbEFsaWduQXBwbGllcyhjaGlsZC0+cmVuZGVyZXIo
KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4
IDNlN2UwY2NlMTU5MjA0M2E4ZWIxNDk5MDg0MDYyNjA3OTA0Y2Y0ZjAuLjg0MmJlMWIzMjlmMmI2
N2MxYTg3ZjU0MWI4MTJjNzFjZDliNTliNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbywKICAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGQsIGxvZ2ljYWxUb3BFc3Rp
bWF0ZSwgQXBwbHlMYXlvdXREZWx0YSk7CiAgICAgZXN0aW1hdGVGcmFnbWVudFJhbmdlRm9yQm94
Q2hpbGQoY2hpbGQpOwogCi0gICAgUmVuZGVyQmxvY2tGbG93KiBjaGlsZEJsb2NrRmxvdyA9IGlz
PFJlbmRlckJsb2NrRmxvdz4oY2hpbGQpID8gJmRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oY2hp
bGQpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBjaGlsZEJsb2NrRmxvdyA9IGR5bmFtaWNEb3duY2Fz
dDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKTsKICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dpdGhG
bG9hdHMgPSBmYWxzZTsKICAgICBpZiAobG9naWNhbFRvcEVzdGltYXRlICE9IG9sZExvZ2ljYWxU
b3AgJiYgIWNoaWxkLmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxv
Y2tGbG93LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxv
YXRzID0gdHJ1ZTsKQEAgLTk5Myw3ICs5OTMsNyBAQCBSZW5kZXJCbG9ja0Zsb3c6Ok1hcmdpblZh
bHVlcyBSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpblZhbHVlc0ZvckNoaWxkKFJlbmRlckJveCYgYwog
ICAgIExheW91dFVuaXQgYmVmb3JlTWFyZ2luOwogICAgIExheW91dFVuaXQgYWZ0ZXJNYXJnaW47
CiAKLSAgICBSZW5kZXJCbG9ja0Zsb3cqIGNoaWxkUmVuZGVyQmxvY2sgPSBpczxSZW5kZXJCbG9j
a0Zsb3c+KGNoaWxkKSA/ICZkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKSA6IG51bGxw
dHI7CisgICAgYXV0byogY2hpbGRSZW5kZXJCbG9jayA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJC
bG9ja0Zsb3c+KGNoaWxkKTsKICAgICAKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSBzYW1l
IGRpcmVjdGlvbmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBqdXN0IHJldHVybiBpdHMKICAg
ICAvLyBtYXJnaW5zIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KQEAgLTE0NzEsNyArMTQ3MSw3IEBA
IExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94JiBj
aGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsCiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojph
ZGp1c3RCbG9ja0NoaWxkRm9yUGFnaW5hdGlvbihMYXlvdXRVbml0IGxvZ2ljYWxUb3BBZnRlckNs
ZWFyLCBMYXlvdXRVbml0IGVzdGltYXRlV2l0aG91dFBhZ2luYXRpb24sIFJlbmRlckJveCYgY2hp
bGQsIGJvb2wgYXRCZWZvcmVTaWRlT2ZCbG9jaykKIHsKLSAgICBSZW5kZXJCbG9jayogY2hpbGRS
ZW5kZXJCbG9jayA9IGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KGNoaWxkKSA6IG51bGxwdHI7CisgICAgYXV0byogY2hpbGRSZW5kZXJCbG9jayA9IGR5bmFt
aWNEb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpOwogCiAgICAgaWYgKGVzdGltYXRlV2l0aG91
dFBhZ2luYXRpb24gIT0gbG9naWNhbFRvcEFmdGVyQ2xlYXIpIHsKICAgICAgICAgLy8gT3VyIGd1
ZXNzIHByaW9yIHRvIHBhZ2luYXRpb24gbW92ZW1lbnQgd2FzIHdyb25nLiBCZWZvcmUgd2UgYXR0
ZW1wdCB0byBwYWdpbmF0ZSwgbGV0J3MgdHJ5IGFnYWluIGF0IHRoZSBuZXcKQEAgLTI0OTYsNyAr
MjQ5Niw3IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAg
ICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQgdGhhdCBpcyBtYWtp
bmcgdXMgbW92ZSBkb3duIGZ1cnRoZXIuCiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgYW4gdW5z
cGxpdHRhYmxlIGNoaWxkIGNhbid0IGFsc28gaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQsIHNvIHRo
aXMKICAgICAgICAgICAgIC8vIGlzIGV4Y2x1c2l2ZSB3aXRoIHRoZSBjYXNlIGFib3ZlLgotICAg
ICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSBpczxSZW5kZXJCbG9jaz4oY2hpbGRC
b3gpID8gJmRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZEJveCkgOiBudWxscHRyOworICAgICAg
ICAgICAgYXV0byogY2hpbGRCbG9jayA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hp
bGRCb3gpOwogICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2sgJiYgY2hpbGRCbG9jay0+cGFnaW5h
dGlvblN0cnV0KCkpIHsKICAgICAgICAgICAgICAgICBuZXdMb2dpY2FsVG9wICs9IGNoaWxkQmxv
Y2stPnBhZ2luYXRpb25TdHJ1dCgpOwogICAgICAgICAgICAgICAgIGNoaWxkQmxvY2stPnNldFBh
Z2luYXRpb25TdHJ1dCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5k
ZXggYzI4MWM2MzliZGI3NzIxYTUwODBiZTA4OGJhYWI5YjYwZWE4YzcxNy4uNTVmOGRmMzNiYzNk
ZTVkZWZhOGZiNThkZDc3YTk0NmNmZjgxNjYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKQEAgLTEwNTcsNyArMTA1Nyw3IEBAIFJlbmRlckJveCogUmVuZGVyQm94Ojpm
aW5kQXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgICAgIHJl
bmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogICAgIH0KIAotICAgIHJldHVybiBpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpIDogbnVsbHB0
cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpOwogfQog
CiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZTc5ZTBmZDcwNWNk
YWQ3MWJiMWVjZDQyNjAyNGM2Y2YxODAyNTQ2NC4uMjYzYzVkYzlmZWM0YTk1NTI3NDVhZGIxMTNi
YWRlN2ViNjA3ZDkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmNwcApAQCAtMjE2Nyw3ICsyMTY3LDcgQEAgYm9vbCBSZW5kZXJFbGVtZW50OjpjaGVja0ZvclJl
cGFpbnREdXJpbmdMYXlvdXQoKSBjb25zdAogCiBJbWFnZU9yaWVudGF0aW9uIFJlbmRlckVsZW1l
bnQ6OmltYWdlT3JpZW50YXRpb24oKSBjb25zdAogewotICAgIGF1dG8qIGltYWdlRWxlbWVudCA9
IGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVt
ZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBpbWFnZUVsZW1lbnQgPSBkeW5h
bWljRG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKTsKICAgICByZXR1cm4gKGlt
YWdlRWxlbWVudCAmJiAhaW1hZ2VFbGVtZW50LT5hbGxvd3NPcmllbnRhdGlvbk92ZXJyaWRlKCkp
ID8gSW1hZ2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpIDogc3R5bGUo
KS5pbWFnZU9yaWVudGF0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCmluZGV4IDg3ODVmMjI5OWM4MGQzOTQ2
ZThmZmQyMTY2MmQwMjkyMTk0NjMxZjcuLjg3NTA2OTNiZDJhNjg4YmU5NGU4YTcwOWQ3YmQ0NmNi
NjM0M2QyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcApAQCAtMjQzLDggKzI0Myw3IEBAIFZpc2libGVQb3NpdGlvbiBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2lu
dCYsIGNvCiBIVE1MSW5wdXRFbGVtZW50KiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBsb2Fk
QnV0dG9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaW5wdXRFbGVtZW50KCkuc2hhZG93Um9vdCgp
KTsKLSAgICBOb2RlKiBidXR0b25Ob2RlID0gaW5wdXRFbGVtZW50KCkuc2hhZG93Um9vdCgpLT5m
aXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGJ1dHRvbk5vZGUp
ID8gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oYnV0dG9uTm9kZSkgOiBudWxscHRyOworICAg
IHJldHVybiBkeW5hbWljRG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oaW5wdXRFbGVtZW50KCku
c2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCkpOwogfQogCiBTdHJpbmcgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OmJ1dHRvblZhbHVlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCmluZGV4IGY5MjEzZTJmMzU3MTQ4ZjE0MGM0ZDQxMGQwZTExNDE3ZDc2ZjBiOTIuLjA1
MDBmODk1ZmUwZjgzNWEyNGFhMWU3YzMxNTM2MGQyZmVkODRlOGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQgUmVuZGVy
SW1hZ2U6OnVwZGF0ZUlubmVyQ29udGVudFJlY3QoKQogICAgIEludFNpemUgY29udGFpbmVyU2l6
ZShyZXBsYWNlZENvbnRlbnRSZWN0KCkuc2l6ZSgpKTsKICAgICBpZiAoIWNvbnRhaW5lclNpemUu
aXNFbXB0eSgpKSB7CiAgICAgICAgIFVSTCBpbWFnZVNvdXJjZVVSTDsKLSAgICAgICAgaWYgKEhU
TUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1l
bnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cikK
KyAgICAgICAgaWYgKGF1dG8qIGltYWdlRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MSW1h
Z2VFbGVtZW50PihlbGVtZW50KCkpKQogICAgICAgICAgICAgaW1hZ2VTb3VyY2VVUkwgPSBkb2N1
bWVudCgpLmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC0+aW1hZ2VTb3VyY2VVUkwoKSk7CiAgICAg
ICAgIGltYWdlUmVzb3VyY2UoKS5zZXRDb250YWluZXJDb250ZXh0KGNvbnRhaW5lclNpemUsIGlt
YWdlU291cmNlVVJMKTsKICAgICB9CkBAIC02NjYsNyArNjY2LDcgQEAgSW1hZ2VEcmF3UmVzdWx0
IFJlbmRlckltYWdlOjpwYWludEludG9SZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBG
bG9hdFJlY3QKICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
SW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwogCi0gICAgSFRNTEltYWdlRWxlbWVudCogaW1h
Z2VFbGVtZW50ID0gaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA/IGRvd25jYXN0PEhU
TUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgOiBudWxscHRyOworICAgIGF1dG8qIGltYWdlRWxl
bWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpOwogCiAg
ICAgLy8gRklYTUU6IERvY3VtZW50IHdoZW4gaW1hZ2UgIT0gaW1nLmdldCgpLgogICAgIEltYWdl
KiBpbWFnZSA9IGltYWdlUmVzb3VyY2UoKS5pbWFnZSgpLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBkNGQ3YzVjNDQyNmM1OTJjN2EzNWY2N2M1
ZmQyMjA4NjJhZTcyZjY4Li42YTlhMzkxMDAzZjJlMDA4YjJhZWFjZjc3ZjI0Zjg3YWQzZWE1MjFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtMjAzLDcg
KzIwMyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiBib29sIFJlbmRlcklubGluZTo6bWF5
QWZmZWN0TGF5b3V0KCkgY29uc3QKIHsKICAgICBhdXRvKiBwYXJlbnRTdHlsZSA9ICZwYXJlbnQo
KS0+c3R5bGUoKTsKLSAgICBSZW5kZXJJbmxpbmUqIHBhcmVudFJlbmRlcklubGluZSA9IGlzPFJl
bmRlcklubGluZT4oKnBhcmVudCgpKSA/IGRvd25jYXN0PFJlbmRlcklubGluZT4ocGFyZW50KCkp
IDogbnVsbHB0cjsKKyAgICBhdXRvKiBwYXJlbnRSZW5kZXJJbmxpbmUgPSBkeW5hbWljRG93bmNh
c3Q8UmVuZGVySW5saW5lPigqcGFyZW50KCkpOwogICAgIGF1dG8gaGFzSGFyZExpbmVCcmVha0No
aWxkT25seSA9IGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCkgPT0gbGFzdENoaWxkKCkgJiYg
Zmlyc3RDaGlsZCgpLT5pc0JSKCk7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1lbnQoKS5p
bk5vUXVpcmtzTW9kZSgpOwogICAgIGF1dG8gbWF5QWZmZWN0TGF5b3V0ID0gKHBhcmVudFJlbmRl
cklubGluZSAmJiBwYXJlbnRSZW5kZXJJbmxpbmUtPm1heUFmZmVjdExheW91dCgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAyYjA0NTFhZWNiNjEwOWIwYTJkYzhl
NGI4NWE3MDMyYzQyOTIzZWFmLi40YzUwMzVlMDYwYTU4ZGUxOTVlMjlhNzY4OWJlYjIzZDgyOTcy
ZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMTY5LDcgKzE2
OSw3IEBAIHB1YmxpYzoKIAogICAgIFBhZ2UmIHBhZ2UoKSBjb25zdCB7IHJldHVybiByZW5kZXJl
cigpLnBhZ2UoKTsgfQogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotICAgIFJlbmRlckJveCogcmVuZGVyQm94KCkgY29u
c3QgeyByZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSA/ICZkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsgfQorICAgIFJlbmRlckJveCogcmVuZGVyQm94KCkg
Y29uc3QgeyByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7IH0K
IAogICAgIFJlbmRlckxheWVyKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQog
ICAgIFJlbmRlckxheWVyKiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZp
b3VzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJv
eExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNw
cAppbmRleCA2ZTEzZjNhYTM0YTI0ODhmNjUwNjIxNTQyOTc3NWZiZjI2NTE3NDdjLi4zOTgxYjAx
NmMyMWIyZWZkMGU1NGMxMjRjNDBjMWUyMjRiMzQ3MmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lk
IFJlbmRlckxpbmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChSZW5kZXJCb3hN
b2RlbE9iamVjdCYgY29udGFpbgogICAgIGlmICghY29udGFpbmVyLnBhcmVudCgpIHx8IChpczxS
ZW5kZXJCbG9ja0Zsb3c+KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLnNlbGZOZWVkc0xheW91dCgp
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVySW5saW5lKiBpbmxpbmVDb250YWluZXIg
PSBpczxSZW5kZXJJbmxpbmU+KGNvbnRhaW5lcikgPyAmZG93bmNhc3Q8UmVuZGVySW5saW5lPihj
b250YWluZXIpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBpbmxpbmVDb250YWluZXIgPSBkeW5hbWlj
RG93bmNhc3Q8UmVuZGVySW5saW5lPihjb250YWluZXIpOwogICAgIExlZ2FjeUlubGluZUJveCog
Zmlyc3RCb3ggPSBpbmxpbmVDb250YWluZXIgPyBpbmxpbmVDb250YWluZXItPmZpcnN0TGluZUJv
eCgpIDogZmlyc3RMaW5lQm94KCk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGZpcnN0IGxpbmUg
Ym94LCB0aGVuIGp1c3QgYmFpbCBlYXJseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwCmluZGV4IGFlMjgyMmM2ZWRlYTY5NmMwOGQ2YjM5MTU1NWY3YzUyMzZi
NjQyZjguLjViZGRlMjJkODY4OWIzYjVhNTQ1MzVkNDdiY2NiNDg4ZmU1NTIyZmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcApAQCAtMjEwLDcgKzIxMCw3
IEBAIHVuc2lnbmVkIFJlbmRlckxpc3RJdGVtOjppdGVtQ291bnRGb3JPcmRlcmVkTGlzdChjb25z
dCBIVE1MT0xpc3RFbGVtZW50JiBsaXN0KQogdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlVmFs
dWVOb3coKSBjb25zdAogewogICAgIGF1dG8qIGxpc3QgPSBlbmNsb3NpbmdMaXN0KCp0aGlzKTsK
LSAgICBhdXRvKiBvcmRlcmVkTGlzdCA9IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpID8gZG93
bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkgOiBudWxscHRyOworICAgIGF1dG8qIG9yZGVy
ZWRMaXN0ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpOwogCiAgICAg
Ly8gVGhlIHN0YXJ0IGl0ZW0gaXMgZWl0aGVyIHRoZSBjbG9zZXN0IGl0ZW0gYmVmb3JlIHRoaXMg
b25lIGluIHRoZSBsaXN0IHRoYXQgYWxyZWFkeSBoYXMgYSB2YWx1ZSwKICAgICAvLyBvciB0aGUg
Zmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBpZiBub25lIGhhdmUgYmVmb3JlIHRoaXMgaGF2ZSB2YWx1
ZXMgeWV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA1
MDQ1MDI0ODhkODRkYTkxNWE0ZDIxMDc3ZThjOGNhOWE5ZmZlNGNiLi44Mzc3YWFmMTg3ZTg4ZDNm
Y2JhZTNmODczOGE4NTM5YWNlZGVmZmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcApAQCAtMTc4MSw3ICsxNzgxLDcgQEAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IFJlbmRlck9iamVjdDo6b2Zmc2V0UGFyZW50KCkgY29uc3QKICAgICAgICAgY3VycmVudCA9IGN1
cnJlbnQtPnBhcmVudCgpOwogICAgIH0KIAotICAgIHJldHVybiBpczxSZW5kZXJCb3hNb2RlbE9i
amVjdD4oY3VycmVudCkgPyBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oY3VycmVudCkg
OiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmpl
Y3Q+KGN1cnJlbnQpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVW
aXNpYmxlUG9zaXRpb24oaW50IG9mZnNldCwgQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAppbmRleCA4MjU3Mzc2OGJm
NDZkMGVkMTI2MWU2OTJmNjU2YmFmMWQ2YjE5YjIyLi5mM2EzMDE1ZGVjYjdlZmE2OWRhNmEwZjE3
NjU1YTRlOGI5ZjEyOTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNvbC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCBSZW5kZXJUYWJsZSogUmVuZGVyVGFibGVDb2w6
OnRhYmxlKCkgY29uc3QKICAgICBhdXRvIHRhYmxlID0gcGFyZW50KCk7CiAgICAgaWYgKHRhYmxl
ICYmICFpczxSZW5kZXJUYWJsZT4oKnRhYmxlKSkKICAgICAgICAgdGFibGUgPSB0YWJsZS0+cGFy
ZW50KCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRlclRhYmxlPih0YWJsZSkgPyBkb3duY2FzdDxSZW5k
ZXJUYWJsZT4odGFibGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJl
bmRlclRhYmxlPih0YWJsZSk7CiB9CiAKIFJlbmRlclRhYmxlQ29sKiBSZW5kZXJUYWJsZUNvbDo6
ZW5jbG9zaW5nQ29sdW1uR3JvdXAoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDAwZjU3MjQzYzU1ZDYxZWZhMjk2MTI0ZWIzYjc4
M2VlNGYxZWEwOGYuLjM4Njc3ZWZjYTcyNDg4NWViM2YzZmFmNzFiYTFmYWE5NGIxNGY1YWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ3
Myw3ICs0NzMsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sCiB2b2lkIHdyaXRlRGVidWdJbmZv
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgT3B0aW9uU2V0PFJl
bmRlckFzVGV4dEZsYWc+IGJlaGF2aW9yKQogewogICAgIGlmIChiZWhhdmlvci5jb250YWlucyhS
ZW5kZXJBc1RleHRGbGFnOjpTaG93SURBbmRDbGFzcykpIHsKLSAgICAgICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSBpczxFbGVtZW50PihvYmplY3Qubm9kZSgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+
KG9iamVjdC5ub2RlKCkpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9
IGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihvYmplY3Qubm9kZSgpKSkgewogICAgICAgICAgICAg
aWYgKGVsZW1lbnQtPmhhc0lEKCkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBpZD1cIiIgPDwg
ZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA8PCAiXCIiOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5jcHAKaW5kZXggNjBmZmIxNzA2NWMzMGI3OTQzYjkzZThjZmE3NTI1NDI5
MmMwYmRmOC4uMTdkZjkxZDZjZjA0NjFlN2E4MzBlMzA0NDZlNmFiNzQ5OWI2YmViYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtMzk5LDcgKzM5OSw3IEBAIHZv
aWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmKQogICAgIEVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IGRvY3Vt
ZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKFJlbmRlckVsZW1lbnQqIHJvb3RSZW5k
ZXJlciA9IGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC0+cmVuZGVyZXIoKSA6IG51
bGxwdHIpIHsKICAgICAgICAgLy8gVGhlIGRvY3VtZW50IGVsZW1lbnQncyByZW5kZXJlciBpcyBj
dXJyZW50bHkgZm9yY2VkIHRvIGJlIGEgYmxvY2ssIGJ1dCBtYXkgbm90IGFsd2F5cyBiZS4KLSAg
ICAgICAgUmVuZGVyQm94KiByb290Qm94ID0gaXM8UmVuZGVyQm94Pigqcm9vdFJlbmRlcmVyKSA/
IGRvd25jYXN0PFJlbmRlckJveD4ocm9vdFJlbmRlcmVyKSA6IG51bGxwdHI7CisgICAgICAgIGF1
dG8qIHJvb3RCb3ggPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94Pigqcm9vdFJlbmRlcmVyKTsK
ICAgICAgICAgcm9vdEZpbGxzVmlld3BvcnQgPSByb290Qm94ICYmICFyb290Qm94LT54KCkgJiYg
IXJvb3RCb3gtPnkoKSAmJiByb290Qm94LT53aWR0aCgpID49IHdpZHRoKCkgJiYgcm9vdEJveC0+
aGVpZ2h0KCkgPj0gaGVpZ2h0KCk7CiAgICAgICAgIHJvb3RPYnNjdXJlc0JhY2tncm91bmQgPSBy
ZW5kZXJlck9ic2N1cmVzQmFja2dyb3VuZCgqcm9vdFJlbmRlcmVyKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCmluZGV4IDFhZmMx
ZTBhYTUwMTIxNjQ5ZTczYTJiYmYyMDI5YjRhMjczYTZjNDkuLmZiZTk2MjA1YTcwNDY5ODcxN2I3
YjU0ZWQ4YmUzNjRjNDdjYmY2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
ZWxlY3Rpb25SYW5nZURhdGEuY3BwCkBAIC03NCw4ICs3NCw3IEBAIHN0YXRpYyBib29sIGlzVmFs
aWRSZW5kZXJlckZvclNlbGVjdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25z
dCBSZW5kCiAKIHN0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgYXV0byogY29udGFpbmluZ0Jsb2Nr
ID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRlclZpZXc+
KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmluZ0Jsb2NrOworICAgIHJldHVy
biBkeW5hbWljRG93bmNhc3Q8UmVuZGVyVmlldz4ocmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCkp
OwogfQogCiBzdGF0aWMgU2VsZWN0aW9uQ29udGV4dCBjb2xsZWN0U2VsZWN0aW9uRGF0YShjb25z
dCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRl
ci5jcHAKaW5kZXggNDM3Yzk5OTdmZGJjZDMzNTMxYmQwOTk1MzU4ODY2ODU0MzAyOGI1Yy4uNjhj
NjI3OTgzMjAyODcyZjRjZGY5YWVmMzkwODgwZmI1ZTBlMzYzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCkBA
IC02MjUsNyArNjI1LDcgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6bm9ybWFsaXplVHJlZUFm
dGVyU3R5bGVDaGFuZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFIKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJs
b2NrRmxvdz4oKm5ld1BhcmVudCkubXVsdGlDb2x1bW5GbG93KCktPnNwYW5uZXJNYXAoKS5jb250
YWlucygmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikpKTsKICAgICAgICAgICAgICAgICAg
ICAgbmV3RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+
KCpuZXdQYXJlbnQpLm11bHRpQ29sdW1uRmxvdygpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3cgIT0gY3VycmVudEVu
Y2xvc2luZ0ZyYWdtZW50ICYmIGlzPFJlbmRlck11bHRpQ29sdW1uRmxvdz4obmV3RW5jbG9zaW5n
RnJhZ21lbnRlZEZsb3cpID8gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93PihuZXdFbmNs
b3NpbmdGcmFnbWVudGVkRmxvdykgOiBudWxscHRyOworICAgICAgICAgICAgICAgIHJldHVybiBu
ZXdFbmNsb3NpbmdGcmFnbWVudGVkRmxvdyAhPSBjdXJyZW50RW5jbG9zaW5nRnJhZ21lbnQgPyBk
eW5hbWljRG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93PihuZXdFbmNsb3NpbmdGcmFnbWVu
dGVkRmxvdykgOiBudWxscHRyOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGlmIChhdXRv
KiBuZXdFbmNsb3NpbmdNdWx0aUNvbHVtbiA9IG5ld011bHRpQ29sdW1uRm9yUmVuZGVyZXIoKSkg
ewogICAgICAgICAgICAgICAgIC8vIExldCB0aGUgZnJhZ21lbnRlZCBmbG93IGtub3cgdGhhdCBp
dCBoYXMgYSBuZXcgaW4tZmxvdyBkZXNjZW5kYW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKaW5kZXggZTFiZWEw
Y2MyZDI3Mzc3YjNlNzFiMzBlYjJjMWY2ZjI4MjdiYjlmZi4uMzkwNGRhNDk0NDc3NTc0OGNiMjdk
ZjVkMTEwZDI5YWM5NzY5ZmY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCkBAIC02NSw3ICs2NSw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlclRyZWVVcGRhdGVyOjpQYXJlbnQ6OlBhcmVudChD
b250YWluZXJOb2RlJiByb290KQotICAgIDogZWxlbWVudChpczxEb2N1bWVudD4ocm9vdCkgPyBu
dWxscHRyIDogZG93bmNhc3Q8RWxlbWVudD4oJnJvb3QpKQorICAgIDogZWxlbWVudChkeW5hbWlj
RG93bmNhc3Q8RWxlbWVudD4ocm9vdCkpCiAgICAgLCByZW5kZXJUcmVlUG9zaXRpb24oUmVuZGVy
VHJlZVBvc2l0aW9uKCpyb290LnJlbmRlcmVyKCkpKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvQ2hpbGRDaGFuZ2VJbnZhbGlkYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL0NoaWxkQ2hhbmdlSW52YWxpZGF0aW9uLmgKaW5kZXggYWM2ODliYzM1N2NiZWEwNzQ2
MjYyYzUwZGJlODk3Njg4NGU4NDZhNC4uODY3MWZmYWNmZTdhNTgzMjA1Yzk2YzEwMDA0MjYyNzM2
NDU2YjdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2hpbGRDaGFuZ2VJbnZh
bGlkYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9DaGlsZENoYW5nZUludmFsaWRh
dGlvbi5oCkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiB9OwogCiBpbmxpbmUgQ2hpbGRDaGFu
Z2VJbnZhbGlkYXRpb246OkNoaWxkQ2hhbmdlSW52YWxpZGF0aW9uKENvbnRhaW5lck5vZGUmIGNv
bnRhaW5lciwgY29uc3QgQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFuZ2UmIGNoaWxkQ2hhbmdlKQot
ICAgIDogbV9wYXJlbnRFbGVtZW50KGlzPEVsZW1lbnQ+KGNvbnRhaW5lcikgPyBkb3duY2FzdDxF
bGVtZW50PigmY29udGFpbmVyKSA6IG51bGxwdHIpCisgICAgOiBtX3BhcmVudEVsZW1lbnQoZHlu
YW1pY0Rvd25jYXN0PEVsZW1lbnQ+KGNvbnRhaW5lcikpCiAgICAgLCBtX2NoaWxkQ2hhbmdlKGNo
aWxkQ2hhbmdlKQogICAgICwgbV9pc0VuYWJsZWQobV9wYXJlbnRFbGVtZW50ID8gbV9wYXJlbnRF
bGVtZW50LT5uZWVkc1N0eWxlSW52YWxpZGF0aW9uKCkgOiBmYWxzZSkKICAgICAsIG1fbmVlZHNI
YXNJbnZhbGlkYXRpb24obV9pc0VuYWJsZWQgJiYgU2NvcGU6OmZvck5vZGUoKm1fcGFyZW50RWxl
bWVudCkudXNlc0hhc1BzZXVkb0NsYXNzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5j
cHAKaW5kZXggYjNiNmI1Yzg0OTE1MjFiNDdhNzc4ZWZhZjViOTQ5OWY4NjIwNzZiNS4uNTMwZmYx
YjA3YWEyZjkyY2QzNDg2NDE0NTVhOWI1MDA4MzJmNmZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdT
VkdFbGVtZW50LmNwcApAQCAtNTcyLDE0ICs1NzIsMTIgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1NW
R0VsZW1lbnQ6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2
aWUKIAogU1ZHVmlld0VsZW1lbnQqIFNWR1NWR0VsZW1lbnQ6OmZpbmRWaWV3QW5jaG9yKFN0cmlu
Z1ZpZXcgZnJhZ21lbnRJZGVudGlmaWVyKSBjb25zdAogewotICAgIGF1dG8qIGFuY2hvckVsZW1l
bnQgPSBkb2N1bWVudCgpLmZpbmRBbmNob3IoZnJhZ21lbnRJZGVudGlmaWVyKTsKLSAgICByZXR1
cm4gaXM8U1ZHVmlld0VsZW1lbnQ+KGFuY2hvckVsZW1lbnQpID8gZG93bmNhc3Q8U1ZHVmlld0Vs
ZW1lbnQ+KGFuY2hvckVsZW1lbnQpOiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNh
c3Q8U1ZHVmlld0VsZW1lbnQ+KGRvY3VtZW50KCkuZmluZEFuY2hvcihmcmFnbWVudElkZW50aWZp
ZXIpKTsKIH0KIAogU1ZHU1ZHRWxlbWVudCogU1ZHU1ZHRWxlbWVudDo6ZmluZFJvb3RBbmNob3Io
Y29uc3QgU1ZHVmlld0VsZW1lbnQqIHZpZXdFbGVtZW50KSBjb25zdAogewotICAgIGF1dG8qIHZp
ZXdwb3J0RWxlbWVudCA9IFNWR0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCh2aWV3
RWxlbWVudCk7Ci0gICAgcmV0dXJuIGlzPFNWR1NWR0VsZW1lbnQ+KHZpZXdwb3J0RWxlbWVudCkg
PyBkb3duY2FzdDxTVkdTVkdFbGVtZW50Pih2aWV3cG9ydEVsZW1lbnQpIDogbnVsbHB0cjsKKyAg
ICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFNWR1NWR0VsZW1lbnQ+KFNWR0xvY2F0YWJsZTo6bmVh
cmVzdFZpZXdwb3J0RWxlbWVudCh2aWV3RWxlbWVudCkpOwogfQogCiBTVkdTVkdFbGVtZW50KiBT
VkdTVkdFbGVtZW50OjpmaW5kUm9vdEFuY2hvcihTdHJpbmdWaWV3IGZyYWdtZW50SWRlbnRpZmll
cikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAzNWE2NmUwOTVl
NzVhMTM0NzljN2IxYzU2MmNlMTE5MWFiMWVlMTk0Li43ZDhhZDc5ZjhlNTQ4ZWZmNjkzMDA4YmRh
NTZhOWIyNDI1OTNhYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC05
NTcsMTUgKzk1NywxMyBAQCBzdGF0aWMgSW1hZ2UqIGltYWdlRnJvbUltYWdlRWxlbWVudChIVE1M
SW1hZ2VFbGVtZW50JiBlbGVtZW50KQogCiBzdGF0aWMgQml0bWFwSW1hZ2UqIGJpdG1hcEltYWdl
RnJvbUltYWdlRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQogewotICAgIGF1dG8q
IGltYWdlID0gaW1hZ2VGcm9tSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwotICAgIHJldHVybiBpbWFn
ZSAmJiBpczxCaXRtYXBJbWFnZT4oaW1hZ2UpID8gJmRvd25jYXN0PEJpdG1hcEltYWdlPigqaW1h
Z2UpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PEJpdG1hcEltYWdlPihp
bWFnZUZyb21JbWFnZUVsZW1lbnQoZWxlbWVudCkpOwogfQogCiAjaWYgVVNFKENHKQogc3RhdGlj
IFBERkRvY3VtZW50SW1hZ2UqIHBkZkRvY3VtZW50SW1hZ2VGcm9tSW1hZ2VFbGVtZW50KEhUTUxJ
bWFnZUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgYXV0byogaW1hZ2UgPSBpbWFnZUZyb21JbWFn
ZUVsZW1lbnQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGltYWdlICYmIGlzPFBERkRvY3VtZW50SW1h
Z2U+KGltYWdlKSA/ICZkb3duY2FzdDxQREZEb2N1bWVudEltYWdlPigqaW1hZ2UpIDogbnVsbHB0
cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFBERkRvY3VtZW50SW1hZ2U+KGltYWdlRnJv
bUltYWdlRWxlbWVudChlbGVtZW50KSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIu
Y3BwCmluZGV4IGY4YjE1MmQ2NTA3ZWUwM2FmNjQxOWIzMmQxOWVmZjUzZWFhNjVlZTIuLmVmNDk4
OTNmMTNjOWM0OWM1ZDBiNThkNDI3YjE1Mzc2ZTA0NjFlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdl
ci5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjpkaWRF
bnRlckZ1bGxTY3JlZW4oKQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgKFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKICAgICBhdXRvKiBjdXJy
ZW50UGxheWJhY2tDb250cm9sc0VsZW1lbnQgPSBtX3BhZ2UtPnBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXIoKS5jdXJyZW50UGxheWJhY2tDb250cm9sc0VsZW1lbnQoKTsKLSAgICBzZXRQSVBTdGFuZGJ5
RWxlbWVudChpczxIVE1MVmlkZW9FbGVtZW50PihjdXJyZW50UGxheWJhY2tDb250cm9sc0VsZW1l
bnQpID8gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oY3VycmVudFBsYXliYWNrQ29udHJvbHNF
bGVtZW50KSA6IG51bGxwdHIpOworICAgIHNldFBJUFN0YW5kYnlFbGVtZW50KGR5bmFtaWNEb3du
Y2FzdDxIVE1MVmlkZW9FbGVtZW50PihjdXJyZW50UGxheWJhY2tDb250cm9sc0VsZW1lbnQpKTsK
ICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggNmY0MjhhYWVlZGEyNjkzNmI1ZTZiZmJlZGY2
MmRjODRmN2Q3NTgwZi4uNzJiYzQ4OTEzYmNlODlkOTRmOGE1ZGE4YjJmZTJjNWQ5ZmEwYTNjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFn
ZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dl
YlBhZ2VDb2NvYS5tbQpAQCAtMjU2LDggKzI1Niw3IEBAIFdlYlBheW1lbnRDb29yZGluYXRvciog
V2ViUGFnZTo6cGF5bWVudENvb3JkaW5hdG9yKCkKIHsKICAgICBpZiAoIW1fcGFnZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byYgY2xpZW50ID0gbV9wYWdlLT5wYXltZW50Q29v
cmRpbmF0b3IoKS5jbGllbnQoKTsKLSAgICByZXR1cm4gaXM8V2ViUGF5bWVudENvb3JkaW5hdG9y
PihjbGllbnQpID8gZG93bmNhc3Q8V2ViUGF5bWVudENvb3JkaW5hdG9yPigmY2xpZW50KSA6IG51
bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxXZWJQYXltZW50Q29vcmRpbmF0b3I+
KG1fcGFnZS0+cGF5bWVudENvb3JkaW5hdG9yKCkuY2xpZW50KCkpOwogfQogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCmlu
ZGV4IDYzNTViNmY5MDMxODAwNTVjYjYwN2E4MGJlNzcwMTM4NGQ4OGRkN2EuLjIyZTU1N2NhNjEz
ZGY5NjkyMTY0NTRlMzQ1MmU0YzJmODhkM2I3YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtMjY4LDkgKzI2OCw4IEBAIC0g
KGludClzdHJ1Y3R1cmFsQ29tcGxleGl0eUNvbnRyaWJ1dGlvbgogICAgICAgICB9IGVsc2UgaWYg
KGlzPFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSB8fCAoaXM8UmVuZGVyQmxv
Y2s+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5l
Q29udGludWF0aW9uKCkpKSB7CiAgICAgICAgICAgICBCT09MIG5vQ29zdCA9IE5POwogICAgICAg
ICAgICAgaWYgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSkgewotICAgICAgICAgICAgICAgIFJl
bmRlckJveCYgYXNCb3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94KCk7Ci0gICAgICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBhc0JveC5wYXJlbnQoKTsKLSAgICAgICAgICAgICAg
ICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IGlzPFJlbmRlckJveD4ocGFyZW50KSA/IGRv
d25jYXN0PFJlbmRlckJveD4ocGFyZW50KSA6IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYXV0
byYgYXNCb3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94KCk7CisgICAgICAgICAgICAgICAgYXV0
byogcGFyZW50UmVuZGVyQm94ID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4oYXNCb3gucGFy
ZW50KCkpOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJCb3ggJiYgYXNCb3gud2lk
dGgoKSA9PSBwYXJlbnRSZW5kZXJCb3gtPndpZHRoKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
bm9Db3N0ID0gWUVTOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KaW5kZXggMzhk
N2U1MzJkNmVhYTBjYWMzODg2MmYzZTBlMTY5ZmUyODEyNzdmMS4uM2RiMjQ4OGQ2MGVjNDFiMDgx
ZjdhOTE3ZDBlMjYxYjI3ZTYyNGEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KQEAgLTMwMSw3ICszMDEs
NyBAQCAtIChET01FbGVtZW50ICopZWxlbWVudFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgaW5G
b3JtOihET01FbGVtZW50ICopZm9ybQogc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgRWxlbWVudCog
bm9kZSA9IGNvcmUoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5v
ZGUpID8gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4obm9kZSkgOiBudWxscHRyOworICAgIHJl
dHVybiBkeW5hbWljRG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4obm9kZSk7CiB9CiAKIC0gKEJP
T0wpZWxlbWVudERvZXNBdXRvQ29tcGxldGU6KERPTUVsZW1lbnQgKillbGVtZW50Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449271</attachid>
            <date>2022-01-15 14:36:45 -0800</date>
            <delta_ts>2022-01-15 15:03:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235259-20220115143644.patch</filename>
            <type>text/plain</type>
            <size>81984</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDYxNGUzMjY5OGYzZTJjMGVmY2ZhMmI0
NjJjZjQwYzI0NDNhZGNjNWMuLjVkMzRhNGM3Yzk0ZTJiMjk5NDdkOGZkYzg4YjdiMTdlMDUyNjU0
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDEtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgZHluYW1pY0Rvd25jYXN0PD4oKSBmb3Ig
Y29udmVuaWVuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNTI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IEludHJvZHVjZSBkeW5hbWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5jZS4gSXQgY2FuIHJl
c3VsdCBpbiBtb3JlIGNvbmNpc2UgY29kZSBmb3IgdGhlIGNvbW1vbiBwYXR0ZXJuCisgICAgICAg
IHdoZXJlIHdlIGNhbGwgYGlzPFQ+KHgpYCBhbmQgdGhlbiBgZG93bmNhc3Q8VD4oeClgLgorCisg
ICAgICAgICogd3RmL1R5cGVDYXN0cy5oOgorICAgICAgICAoV1RGOjpkeW5hbWljRG93bmNhc3Qp
OgorCiAyMDIyLTAxLTE0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IFdURjo6VVVJRCdzIHBvdGVudGlhbCBjb2xsaXNpb24gd2l0aCBlbXB0eSBhbmQg
ZGVsZXRlZCB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1N2Q5ZTBlMGFjNDg0ODcxODUwYTBjN2UzZjY2
MTAwYWU0MGUxODlmLi40Y2FiMzBjNmE1ODQ3MGIzNjQ5YTU3NDA4YjZmMzc0NGExZDkxN2ZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU3IEBACisyMDIyLTAxLTE0ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIGR5bmFtaWNEb3duY2FzdDw+KCkg
Zm9yIGNvbnZlbmllbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzUyNTkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBTdGFydCBhZG9wdGluZyBkeW5hbWljRG93bmNhc3Q8PigpLgorCisgICAgICAgICogYW5p
bWF0aW9uL1dlYkFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246
OnNldFRpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6d2lsbENoYW5n
ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6dGltaW5nRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6aW52YWxpZGF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246OmZpbmlzaE5vdGlmaWNhdGlvblN0ZXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6cmVzb2x2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJBbmltYXRpb246OnBlcnNpc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQW5p
bWF0aW9uOjpjb21taXRTdHlsZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzQ2xvbmVJblNoYWRvd1RyZWVPZlNWR1VzZUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24gY29u
c3QpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KToKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjppbnNl
cnRSdWxlKToKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRy
OjpzdHlsZSk6CisgICAgICAgICogZG9tL0Jyb2FkY2FzdENoYW5uZWwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QnJvYWRjYXN0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6ZW5zdXJlT25NYWlu
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkJyb2FkY2FzdENoYW5uZWw6OmlzRWxpZ2libGVG
b3JNZXNzYWdpbmcgY29uc3QpOgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZSk6CisgICAgICAgICog
ZG9tL0NoYXJhY3RlckRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omxlbmd0aCBjb25z
dCk6CisgICAgICAgICogZG9tL0NvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3I6OnRyYXZlcnNlUGFyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2VkVHJlZUFuY2VzdG9yQWRhcHRlcjo6YmVnaW4p
OgorICAgICAgICAqIGRvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Zmlyc3RDaGlsZEluQ29tcG9zZWRUcmVlSWdub3JpbmdVc2VyQWdlbnRTaGFkb3cpOgorICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6OnJlbW92ZU5vZGVXaXRoU2NyaXB0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRhaW5lck5vZGU6OnJlbW92ZVNlbGZPckNoaWxkTm9kZXNGb3JJbnNlcnRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6ZGVzdHJveVJlbmRlclRyZWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpjb250YWluc0luY2x1ZGluZ0hvc3RFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpj
aGVja0FjY2VwdENoaWxkKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Y291bnRDaGlsZE5vZGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OnRyYXZlcnNlVG9DaGlsZEF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmZpcnN0Q2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bGFzdENoaWxk
IGNvbnN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d2lkZ2V0Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YnVpbGRBY2Nl
c3NLZXlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRqdXN0Rm9jdXNlZE5v
ZGVPbk5vZGVSZW1vdmFsKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKiBkb20vRWxlbWVudElu
bGluZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBhcmVudEVsZW1lbnQgY29uc3QpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50Ojp0b0VsZW1lbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TW91c2VFdmVudDo6ZnJvbUVsZW1lbnQgY29uc3QpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbmRlckJveCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW5kZXJCb3hNb2RlbE9iamVjdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb250YWluaW5nU2hhZG93Um9vdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbik6CisgICAgICAgICog
ZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpjb250YWluZXJU
ZXh0IGNvbnN0KToKKyAgICAgICAgKiBkb20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dE5vZGVUcmF2ZXJzYWw6OmNvbnRlbnRzQXNTdHJpbmcpOgorICAgICAg
ICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjplbGVt
ZW50c0Zyb21Qb2ludCk6CisgICAgICAgICogZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERlc2NlbmRhbnRSYW5nZTxFbGVtZW50
VHlwZT46OmZyb20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5jbHVzaXZlRWxlbWVudERl
c2NlbmRhbnRSYW5nZTxFbGVtZW50VHlwZT46OmZyb20gY29uc3QpOgorICAgICAgICAqIGRvbS9W
aXNpdGVkTGlua1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmtIYXNoRm9yRWxlbWVu
dCk6CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6ZnJv
bUNvbnRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjplbmNsb3NpbmdCbG9jayk6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Om93bmVyU2VsZWN0
RWxlbWVudCBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbmRlckVtYmVk
ZGVkT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNyZWF0ZSk6CisgICAgICAgICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlv
bklmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1dG9zY3JvbGxDb250cm9sbGVyOjp1cGRhdGVBdXRvc2Nyb2xsUmVu
ZGVyZXIpOgorICAgICAgICAqIHBhZ2UvRE9NVGltZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RE9NVGltZXI6OmZpcmVkKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFzRmlsZUlucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250
cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkTm9kZURyYWdFbmFibGVyOjpTY29wZWROb2Rl
RHJhZ0VuYWJsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNldENETUluc3RhbmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJ
bmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaWdodHMpOgorICAgICAgICAoV2ViQ29y
ZTo6cGxhY2VDaGlsZElubGluZUJveGVzSW5CbG9ja0RpcmVjdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tG
bG93OjptYXJnaW5WYWx1ZXNGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpmaW5k
QXV0b3Njcm9sbGFibGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmltYWdlT3JpZW50YXRpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9uIGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySW1hZ2U6OnVwZGF0ZUlubmVyQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjptYXlBZmZlY3RM
YXlvdXQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlbmRlckJveCBjb25zdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
bmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVt
Ojp1cGRhdGVWYWx1ZU5vdyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9mZnNldFBhcmVudCBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ29sOjp0YWJsZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVEZWJ1Z0luZm8p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9T
ZWxlY3Rpb25SYW5nZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbmluZ0Jsb2Nr
QmVsb3dWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6Om5vcm1hbGl6ZVRy
ZWVBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZVVwZGF0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OlBh
cmVudDo6UGFyZW50KToKKyAgICAgICAgKiBzdHlsZS9DaGlsZENoYW5nZUludmFsaWRhdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNoaWxkQ2hhbmdlSW52YWxpZGF0aW9uOjpDaGls
ZENoYW5nZUludmFsaWRhdGlvbik6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6ZmluZFZpZXdBbmNob3IgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6ZmluZFJvb3RBbmNob3IgY29uc3QpOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJpdG1h
cEltYWdlRnJvbUltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwZGZEb2N1bWVudElt
YWdlRnJvbUltYWdlRWxlbWVudCk6CisKIDIwMjItMDEtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBXaGVuIGluc2VydGluZyBhIHNlbGVjdGVkIDxvcHRpb24+
IGluIGEgPHNlbGVjdD4gZWxlbWVudCwgaXRzIHNlbGVjdGVkIHN0YXRlIHNob3VsZCByZW1haW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggODMwNTRhMjNlNGZhMTExZjdhZTQwMDFlN2MxNWJmMTNiZWYyZTZhMC4uNzJk
ODU5ZjI0ZDRjYTRmNThiY2MzODJiNWJkZWViOTQzZDJkYjIwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAyMi0wMS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisg
ICAgICAgIEludHJvZHVjZSBkeW5hbWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5jZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjU5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgU3RhcnQgYWRvcHRpbmcg
ZHluYW1pY0Rvd25jYXN0PD4oKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvRnVsbFNjcmVlbi9X
ZWJGdWxsU2NyZWVuTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5N
YW5hZ2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBheW1l
bnRDb29yZGluYXRvcik6CisKIDIwMjItMDEtMTQgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT046ICBBUktpdCBleGFtcGxlIGxvYWRzIGEgcGFnZSBm
dWxsIG9mIHJhbmRvbSBzeW1ib2xzIGluc3RlYWQgb2YgYSAzRCBtb2RlbApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCmluZGV4IGQyNTNjZThjZDIxNGY3MjI5MGUxMDQ2MmM4MTc1NWJkYWRmNjdh
MDUuLjllMTU1ZGI0OWZhODMyZWZjMjMxZjg3MjAxZjk2NjI3YWZhOGUyM2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMS0xNCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjZSBkeW5hbWljRG93bmNh
c3Q8PigpIGZvciBjb252ZW5pZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM1MjU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgU3RhcnQgYWRvcHRpbmcgZHluYW1pY0Rvd25jYXN0PD4oKS4KKworICAgICAg
ICAqIERPTS9ET01VSUtpdEV4dGVuc2lvbnMubW06CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50
IHN0cnVjdHVyYWxDb21wbGV4aXR5Q29udHJpYnV0aW9uXSk6CisgICAgICAgICogV2ViVmlldy9X
ZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgIChpbnB1dEVsZW1lbnRGcm9tRE9NRWxl
bWVudCk6CisKIDIwMjItMDEtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGEgZmV3IE9iamVjdGl2ZS1DIG9iamVjdCBsZWFrcyBkdWUgdG8g
ZWFybHkgcmV0dXJucyBpbiBgaW5pdGAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1R5cGVD
YXN0cy5oIGIvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKaW5kZXggYmRkY2E4N2VlOGVlYWVk
MzIzZGQwM2FhY2Y0NWMzMDIxOTQ5YzBkNS4uMWMyN2RmOTcyOWY3ZmZiMjAzYzBiMzdiNDg0ZmYy
ZDEyNjM2NjMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKKysrIGIv
U291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKQEAgLTg4LDYgKzg4LDIxIEBAIGlubGluZSBtYXRj
aF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4qIGRvd25jYXN0KFNvdXJjZSogc291cmNlKQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxtYXRjaF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4q
Pihzb3VyY2UpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJj
ZT4KK2lubGluZSBtYXRjaF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4qIGR5bmFtaWNEb3du
Y2FzdChTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3NhbWVf
djxTb3VyY2UsIFRhcmdldD4sICJVbm5lY2Vzc2FyeSBjYXN0IHRvIHNhbWUgdHlwZSIpOworICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8U291cmNlLCBUYXJnZXQ+LCAiU2hvdWxk
IGJlIGEgZG93bmNhc3QiKTsKKyAgICByZXR1cm4gaXM8VGFyZ2V0Pihzb3VyY2UpID8gJnN0YXRp
Y19jYXN0PG1hdGNoX2NvbnN0bmVzc190PFNvdXJjZSwgVGFyZ2V0PiY+KHNvdXJjZSkgOiBudWxs
cHRyOworfQordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+Citpbmxp
bmUgbWF0Y2hfY29uc3RuZXNzX3Q8U291cmNlLCBUYXJnZXQ+KiBkeW5hbWljRG93bmNhc3QoU291
cmNlKiBzb3VyY2UpCit7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19zYW1lX3Y8U291cmNl
LCBUYXJnZXQ+LCAiVW5uZWNlc3NhcnkgY2FzdCB0byBzYW1lIHR5cGUiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PFNvdXJjZSwgVGFyZ2V0PiwgIlNob3VsZCBiZSBhIGRv
d25jYXN0Iik7CisgICAgcmV0dXJuIGlzPFRhcmdldD4oc291cmNlKSA/IHN0YXRpY19jYXN0PG1h
dGNoX2NvbnN0bmVzc190PFNvdXJjZSwgVGFyZ2V0Pio+KHNvdXJjZSkgOiBudWxscHRyOworfQor
CiAvLyBBZGQgc3VwcG9ydCBmb3IgdHlwZSBjaGVja2luZyAvIGNhc3RpbmcgdXNpbmcgaXM8Pigp
IC8gZG93bmNhc3Q8PigpIGhlbHBlcnMgZm9yIGEgc3BlY2lmaWMgY2xhc3MuCiAjZGVmaW5lIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oQ2xhc3NOYW1lKSBcCiBuYW1lc3BhY2UgV1RGIHsg
XApAQCAtMTIwLDMgKzEzNSw0IEBAIGlubGluZSBib29sIGlzKGNvbnN0IHN0ZDo6dW5pcXVlX3B0
cjxBcmdUeXBlLCBEZWxldGVyPiYgc291cmNlKQogdXNpbmcgV1RGOjpUeXBlQ2FzdFRyYWl0czsK
IHVzaW5nIFdURjo6aXM7CiB1c2luZyBXVEY6OmRvd25jYXN0OwordXNpbmcgV1RGOjpkeW5hbWlj
RG93bmNhc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCmluZGV4
IDA1ZTRhZTBkMTM4ZmFiZDI5YWU1YTJiMDQ0ZDRhNjgxNGQ3N2ZhNWUuLmYyMGJiY2ZkY2Q0NDY1
MGYxNTBjZWI3ZTBmMjNmZjgwMzAzN2NmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9X
ZWJBbmltYXRpb24uY3BwCkBAIC0yNDQsOCArMjQ0LDggQEAgdm9pZCBXZWJBbmltYXRpb246OnNl
dFRpbWVsaW5lKFJlZlB0cjxBbmltYXRpb25UaW1lbGluZT4mJiB0aW1lbGluZSkKICAgICBpZiAo
bV9zdGFydFRpbWUpCiAgICAgICAgIG1faG9sZFRpbWUgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBp
ZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0KSkgewotICAgICAgICBpZiAoYXV0byB0YXJn
ZXQgPSBkb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QuZ2V0KCkpLT50YXJnZXRTdHls
ZWFibGUoKSkgeworICAgIGlmIChhdXRvIGtleWZyYW1lRWZmZWN0ID0gZHluYW1pY0Rvd25jYXN0
PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdC5nZXQoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8gdGFy
Z2V0ID0ga2V5ZnJhbWVFZmZlY3QtPnRhcmdldFN0eWxlYWJsZSgpKSB7CiAgICAgICAgICAgICAv
LyBJbiB0aGUgY2FzZSBvZiBhIGRlY2xhcmF0aXZlIGFuaW1hdGlvbiwgd2UgZG9uJ3Qgd2FudCB0
byByZW1vdmUgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSByZWxldmFudCBtYXBzIGJlY2F1c2UKICAg
ICAgICAgICAgIC8vIHdoaWxlIHRoZSB0aW1lbGluZSB3YXMgc2V0IHZpYSB0aGUgQVBJLCB0aGUg
ZWxlbWVudCBzdGlsbCBoYXMgYSB0cmFuc2l0aW9uIG9yIGFuaW1hdGlvbiBzZXQgdXAgYW5kIHdl
IG11c3QKICAgICAgICAgICAgIC8vIG5vdCBicmVhayB0aGUgcmVsYXRpb25zaGlwLgpAQCAtNzI1
LDggKzcyNSw4IEBAIHZvaWQgV2ViQW5pbWF0aW9uOjpjYW5jZWwoKQogCiB2b2lkIFdlYkFuaW1h
dGlvbjo6d2lsbENoYW5nZVJlbmRlcmVyKCkKIHsKLSAgICBpZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+
KG1fZWZmZWN0KSkKLSAgICAgICAgZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCku
d2lsbENoYW5nZVJlbmRlcmVyKCk7CisgICAgaWYgKGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5h
bWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKSkKKyAgICAgICAga2V5
ZnJhbWVFZmZlY3QtPndpbGxDaGFuZ2VSZW5kZXJlcigpOwogfQogCiB2b2lkIFdlYkFuaW1hdGlv
bjo6ZW5xdWV1ZUFuaW1hdGlvblBsYXliYWNrRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgdHlwZSwg
c3RkOjpvcHRpb25hbDxTZWNvbmRzPiBjdXJyZW50VGltZSwgc3RkOjpvcHRpb25hbDxTZWNvbmRz
PiB0aW1lbGluZVRpbWUpCkBAIC04MzgsOSArODM4LDkgQEAgdm9pZCBXZWJBbmltYXRpb246OnRp
bWluZ0RpZENoYW5nZShEaWRTZWVrIGRpZFNlZWssIFN5bmNocm9ub3VzbHlOb3RpZnkgc3luY2hy
b24KICAgICBtX3Nob3VsZFNraXBVcGRhdGluZ0ZpbmlzaGVkU3RhdGVXaGVuUmVzb2x2aW5nID0g
ZmFsc2U7CiAgICAgdXBkYXRlRmluaXNoZWRTdGF0ZShkaWRTZWVrLCBzeW5jaHJvbm91c2x5Tm90
aWZ5KTsKIAotICAgIGlmIChpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpKSB7CisgICAgaWYg
KGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5hbWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KG1f
ZWZmZWN0LmdldCgpKSkgewogICAgICAgICB1cGRhdGVSZWxldmFuY2UoKTsKLSAgICAgICAgZG93
bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkuYW5pbWF0aW9uVGltaW5nRGlkQ2hhbmdl
KCk7CisgICAgICAgIGtleWZyYW1lRWZmZWN0LT5hbmltYXRpb25UaW1pbmdEaWRDaGFuZ2UoKTsK
ICAgICB9CiAKICAgICBpZiAoc2lsZW50bHkgPT0gU2lsZW50bHk6Ok5vICYmIG1fdGltZWxpbmUp
CkBAIC04NDksOCArODQ5LDggQEAgdm9pZCBXZWJBbmltYXRpb246OnRpbWluZ0RpZENoYW5nZShE
aWRTZWVrIGRpZFNlZWssIFN5bmNocm9ub3VzbHlOb3RpZnkgc3luY2hyb24KIAogdm9pZCBXZWJB
bmltYXRpb246OmludmFsaWRhdGVFZmZlY3QoKQogewotICAgIGlmICghaXNFZmZlY3RJbnZhbGlk
YXRpb25TdXNwZW5kZWQoKSAmJiBpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpKQotICAgICAg
ICBkb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4oKm1fZWZmZWN0KS5pbnZhbGlkYXRlKCk7CisgICAg
aWYgKGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5hbWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+
KG1fZWZmZWN0LmdldCgpKTsgIWlzRWZmZWN0SW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgJiYga2V5
ZnJhbWVFZmZlY3QpCisgICAgICAgIGtleWZyYW1lRWZmZWN0LT5pbnZhbGlkYXRlKCk7CiB9CiAK
IHZvaWQgV2ViQW5pbWF0aW9uOjp1cGRhdGVGaW5pc2hlZFN0YXRlKERpZFNlZWsgZGlkU2Vlaywg
U3luY2hyb25vdXNseU5vdGlmeSBzeW5jaHJvbm91c2x5Tm90aWZ5KQpAQCAtOTYyLDggKzk2Miw4
IEBAIHZvaWQgV2ViQW5pbWF0aW9uOjpmaW5pc2hOb3RpZmljYXRpb25TdGVwcygpCiAgICAgLy8g
ICAgT3RoZXJ3aXNlLCBxdWV1ZSBhIHRhc2sgdG8gZGlzcGF0Y2ggZmluaXNoRXZlbnQgYXQgYW5p
bWF0aW9uLiBUaGUgdGFzayBzb3VyY2UgZm9yIHRoaXMgdGFzayBpcyB0aGUgRE9NIG1hbmlwdWxh
dGlvbiB0YXNrIHNvdXJjZS4KICAgICBlbnF1ZXVlQW5pbWF0aW9uUGxheWJhY2tFdmVudChldmVu
dE5hbWVzKCkuZmluaXNoRXZlbnQsIGN1cnJlbnRUaW1lKCksIG1fdGltZWxpbmUgPyBtX3RpbWVs
aW5lLT5jdXJyZW50VGltZSgpIDogc3RkOjpudWxsb3B0KTsKIAotICAgIGlmIChpczxLZXlmcmFt
ZUVmZmVjdD4obV9lZmZlY3QpKSB7Ci0gICAgICAgIGlmIChSZWZQdHIgdGFyZ2V0ID0gZG93bmNh
c3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkudGFyZ2V0KCkpIHsKKyAgICBpZiAoYXV0byBr
ZXlmcmFtZUVmZmVjdCA9IGR5bmFtaWNEb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3Qu
Z2V0KCkpKSB7CisgICAgICAgIGlmIChSZWZQdHIgdGFyZ2V0ID0ga2V5ZnJhbWVFZmZlY3QtPnRh
cmdldCgpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IHRhcmdldC0+ZG9jdW1lbnQo
KS5wYWdlKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYW5pbWF0
aW9uRGlkRmluaXNoRm9yRWxlbWVudCgqdGFyZ2V0KTsKICAgICAgICAgfQpAQCAtMTI4Nyw4ICsx
Mjg3LDggQEAgdm9pZCBXZWJBbmltYXRpb246OnJlc29sdmUoUmVuZGVyU3R5bGUmIHRhcmdldFN0
eWxlLCBjb25zdCBTdHlsZTo6UmVzb2x1dGlvbkNvbnQKICAgICAgICAgdXBkYXRlRmluaXNoZWRT
dGF0ZShEaWRTZWVrOjpObywgU3luY2hyb25vdXNseU5vdGlmeTo6WWVzKTsKICAgICBtX3Nob3Vs
ZFNraXBVcGRhdGluZ0ZpbmlzaGVkU3RhdGVXaGVuUmVzb2x2aW5nID0gZmFsc2U7CiAKLSAgICBp
ZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0KSkKLSAgICAgICAgZG93bmNhc3Q8S2V5ZnJh
bWVFZmZlY3Q+KCptX2VmZmVjdCkuYXBwbHkodGFyZ2V0U3R5bGUsIHJlc29sdXRpb25Db250ZXh0
LCBzdGFydFRpbWUpOworICAgIGlmIChhdXRvIGtleWZyYW1lRWZmZWN0ID0gZHluYW1pY0Rvd25j
YXN0PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdC5nZXQoKSkpCisgICAgICAgIGtleWZyYW1lRWZm
ZWN0LT5hcHBseSh0YXJnZXRTdHlsZSwgcmVzb2x1dGlvbkNvbnRleHQsIHN0YXJ0VGltZSk7CiB9
CiAKIHZvaWQgV2ViQW5pbWF0aW9uOjpzZXRTdXNwZW5kZWQoYm9vbCBpc1N1c3BlbmRlZCkKQEAg
LTE0MTcsMTEgKzE0MTcsMTAgQEAgdm9pZCBXZWJBbmltYXRpb246OnBlcnNpc3QoKQogICAgIGF1
dG8gcHJldmlvdXNSZXBsYWNlU3RhdGUgPSBzdGQ6OmV4Y2hhbmdlKG1fcmVwbGFjZVN0YXRlLCBS
ZXBsYWNlU3RhdGU6OlBlcnNpc3RlZCk7CiAKICAgICBpZiAocHJldmlvdXNSZXBsYWNlU3RhdGUg
PT0gUmVwbGFjZVN0YXRlOjpSZW1vdmVkICYmIG1fdGltZWxpbmUpIHsKLSAgICAgICAgaWYgKGlz
PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGtleWZyYW1l
RWZmZWN0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCk7Ci0gICAgICAgICAg
ICBhdXRvIHN0eWxlYWJsZSA9IGtleWZyYW1lRWZmZWN0LnRhcmdldFN0eWxlYWJsZSgpOworICAg
ICAgICBpZiAoYXV0byBrZXlmcmFtZUVmZmVjdCA9IGR5bmFtaWNEb3duY2FzdDxLZXlmcmFtZUVm
ZmVjdD4obV9lZmZlY3QuZ2V0KCkpKSB7CisgICAgICAgICAgICBhdXRvIHN0eWxlYWJsZSA9IGtl
eWZyYW1lRWZmZWN0LT50YXJnZXRTdHlsZWFibGUoKTsKICAgICAgICAgICAgIHN0eWxlYWJsZS0+
YW5pbWF0aW9uV2FzQWRkZWQoKnRoaXMpOwotICAgICAgICAgICAgc3R5bGVhYmxlLT5lbnN1cmVL
ZXlmcmFtZUVmZmVjdFN0YWNrKCkuYWRkRWZmZWN0KGtleWZyYW1lRWZmZWN0KTsKKyAgICAgICAg
ICAgIHN0eWxlYWJsZS0+ZW5zdXJlS2V5ZnJhbWVFZmZlY3RTdGFjaygpLmFkZEVmZmVjdCgqa2V5
ZnJhbWVFZmZlY3QpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQzMSw3ICsxNDMwLDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gV2ViQW5pbWF0aW9uOjpjb21taXRTdHlsZXMoKQogICAgIC8vIGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy93ZWItYW5pbWF0aW9ucy0xLyNjb21taXQtY29tcHV0ZWQt
c3R5bGVzCiAKICAgICAvLyAxLiBMZXQgdGFyZ2V0cyBiZSB0aGUgc2V0IG9mIGFsbCBlZmZlY3Qg
dGFyZ2V0cyBmb3IgYW5pbWF0aW9uIGVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIGFuaW1hdGlvbi4K
LSAgICBhdXRvKiBlZmZlY3QgPSBpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpID8gZG93bmNh
c3Q8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKSA6IG51bGxwdHI7CisgICAgYXV0byog
ZWZmZWN0ID0gZHluYW1pY0Rvd25jYXN0PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdC5nZXQoKSk7
CiAgICAgYXV0byogdGFyZ2V0ID0gZWZmZWN0ID8gZWZmZWN0LT50YXJnZXQoKSA6IG51bGxwdHI7
CiAKICAgICAvLyAyLiBGb3IgZWFjaCB0YXJnZXQgaW4gdGFyZ2V0czoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGM4NzdkMjdiNjk4NGYz
N2Y5ZGNjYzAzMjc0YmYxNjY4Mjk3ZTUwMTYuLjA1OWRmZWE2OWE4NWQ1NmQzZDRhM2RmNDNiNjFh
YmI4ODc0MDkwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5k
bGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0CiAg
ICAgICAgIGlmICghd2luZG93LT53cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1l
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICh3YXNDcmVhdGVkRnJvbU1hcmt1
cCgpKSB7Ci0gICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZXZlbnQudGFyZ2V0KCktPmlz
Tm9kZSgpICYmICFkb3duY2FzdDxOb2RlPigqZXZlbnQudGFyZ2V0KCkpLmlzRG9jdW1lbnROb2Rl
KCkgJiYgaXM8RWxlbWVudD4oKmV2ZW50LnRhcmdldCgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGV2
ZW50LnRhcmdldCgpKSA6IG51bGxwdHI7CisgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0g
ZXZlbnQudGFyZ2V0KCktPmlzTm9kZSgpICYmICFkb3duY2FzdDxOb2RlPigqZXZlbnQudGFyZ2V0
KCkpLmlzRG9jdW1lbnROb2RlKCkgPyBkeW5hbWljRG93bmNhc3Q8RWxlbWVudD4oKmV2ZW50LnRh
cmdldCgpKSA6IG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93SW5saW5lRXZlbnRIYW5kbGVycyhzb3Vy
Y2VVUkwoKS5zdHJpbmcoKSwgc291cmNlUG9zaXRpb24oKS5tX2xpbmUsIGNvZGUoKSwgZWxlbWVu
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGFiZjE4ZDg5
YjY3YTY2MmI3ODFhYzYzODc2NzIzYzUzNDU1MzgxZTYuLjY5Mjg1NTY4ZTZmZWU1Y2M5NTEzYWM3
NTZlMTljYWYyY2EwYjlmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCkBAIC04NCwxOSArODQsMTIgQEAgSlNMYXp5RXZlbnRM
aXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0ZW5lcihDcmVhdGlvbkFyZ3VtZW50cyYmIGFyZ3VtZW50
cywgY29uc3QgVVIKICNpZiBBU1NFUlRfRU5BQkxFRAogc3RhdGljIGlubGluZSBib29sIGlzQ2xv
bmVJblNoYWRvd1RyZWVPZlNWR1VzZUVsZW1lbnQoTm9kZSYgb3JpZ2luYWxOb2RlLCBFdmVudFRh
cmdldCYgZXZlbnRUYXJnZXQpCiB7Ci0gICAgaWYgKCFldmVudFRhcmdldC5pc05vZGUoKSkKKyAg
ICBhdXRvKiBlbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PFNWR0VsZW1lbnQ+KGV2ZW50VGFyZ2V0
KTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG5vZGUgPSBkb3duY2FzdDxOb2Rl
PihldmVudFRhcmdldCk7Ci0gICAgaWYgKCFpczxTVkdFbGVtZW50Pihub2RlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+
KG5vZGUpOwotICAgIGlmICghZWxlbWVudC5jb3JyZXNwb25kaW5nRWxlbWVudCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoZWxlbWVudC5pc0luU2hhZG93VHJlZSgpKTsK
LSAgICByZXR1cm4gJm9yaWdpbmFsTm9kZSA9PSBlbGVtZW50LmNvcnJlc3BvbmRpbmdFbGVtZW50
KCk7CisgICAgQVNTRVJUKGVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCkpOworICAgIHJldHVybiAm
b3JpZ2luYWxOb2RlID09IGVsZW1lbnQtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCk7CiB9CiAKIC8v
IFRoaXMgaXMgdG8gaGVscCBmaW5kIHRoZSB1bmRlcmx5aW5nIGNhdXNlIG9mIDxyZGFyOi8vcHJv
YmxlbS8yNDMxNDAyNz4uCkBAIC0xMzEsNyArMTI0LDcgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50
TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGV4
ZWMKICAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IG1fb3JpZ2luYWxOb2RlICYmICFtX29yaWdpbmFsTm9k
ZS0+aXNEb2N1bWVudE5vZGUoKSAmJiBpczxFbGVtZW50PigqbV9vcmlnaW5hbE5vZGUpID8gZG93
bmNhc3Q8RWxlbWVudD4obV9vcmlnaW5hbE5vZGUuZ2V0KCkpIDogbnVsbHB0cjsKKyAgICBhdXRv
KiBlbGVtZW50ID0gIGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihtX29yaWdpbmFsTm9kZS5nZXQo
KSk7CiAgICAgaWYgKCFkb2N1bWVudC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dJbmxp
bmVFdmVudEhhbmRsZXJzKG1fc291cmNlVVJMLnN0cmluZygpLCBtX3NvdXJjZVBvc2l0aW9uLm1f
bGluZSwgbV9jb2RlLCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggYmIyNDljODZmM2MxNzYwYWYxNmU1
YzAyNzI3YzA5YzVlNzkzZWE4NS4uZjhhOTE4NzczNGNkYjBkOTM3ODg5YmJiZTI0ZmMxZThhZGEz
ZjU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTM1NSw3ICsz
NTUsNyBAQCBGb250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcgogCiAgICAgaWYgKHJlc29sdmVHZW5lcmlj
RmFtaWx5Rmlyc3QpCiAgICAgICAgIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFtaWx5KCk7Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaXM8RG9jdW1lbnQ+KG1fY29udGV4dCkgPyAmZG93bmNh
c3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBkb2N1bWVudCA9
IGR5bmFtaWNEb3duY2FzdDxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKTsKICAgICBhdXRvKiBm
YWNlID0gbV9jc3NGb250RmFjZVNldC0+Zm9udEZhY2UoZm9udERlc2NyaXB0aW9uRm9yTG9va3Vw
LT5mb250U2VsZWN0aW9uUmVxdWVzdCgpLCBmYW1pbHlGb3JMb29rdXApOwogICAgIGlmIChmYWNl
KSB7CiAgICAgICAgIGlmIChkb2N1bWVudCAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTaGVldC5jcHAKaW5kZXggZGJjNjdkN2ExMzU1OTY0YmIzODVjNTUwYzJiMTkyYmZjOTgy
OWRlZS4uZjQ2MThlZjAyNGE5NzlmZDI1MmNjYzQ3ZmE2ZjgwNmNkOTMwODA1ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApAQCAtMjY4LDcgKzI2OCw3IEBAIEV4Y2VwdGlvbk9y
PHVuc2lnbmVkPiBDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZVN0
cmluZywgdW5zaWduCiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKIAotICAgIFJ1bGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhp
cywgUnVsZUluc2VydGlvbiwgaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkgPyBkb3duY2Fz
dDxTdHlsZVJ1bGVLZXlmcmFtZXM+KHJ1bGUuZ2V0KCkpIDogbnVsbHB0cik7CisgICAgUnVsZU11
dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzLCBSdWxlSW5zZXJ0aW9uLCBkeW5hbWljRG93
bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkpOwogCiAgICAgYm9vbCBzdWNjZXNzID0g
bV9jb250ZW50cy5nZXQoKS53cmFwcGVySW5zZXJ0UnVsZShydWxlLnJlbGVhc2VOb25OdWxsKCks
IGluZGV4KTsKICAgICBpZiAoIXN1Y2Nlc3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQXR0ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKaW5kZXggYjdkMGUxZDdm
ZjdhYmI4MWIzNDc3MTdmZThlM2YwYTdjNTE3ZGEzNC4uMTJjNDAyNmQ3Yjc1MmUxNGUxMDkxMGQy
YzZhZTBmODIxNmFlYTc5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcApAQCAtMTEyLDEwICsxMTIsMTEgQEAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogQXR0cjo6c3R5bGUoKQogewogICAgIC8vIFRoaXMgaXMgbm90
IHBhcnQgb2YgdGhlIERPTSBBUEksIGFuZCB0aGVyZWZvcmUgbm90IGF2YWlsYWJsZSB0byB3ZWJw
YWdlcy4gSG93ZXZlciwgV2ViS2l0IFNQSQogICAgIC8vIGxldHMgY2xpZW50cyB1c2UgdGhpcyB2
aWEgdGhlIE9iamVjdGl2ZS1DIGFuZCBKYXZhU2NyaXB0IGJpbmRpbmdzLgotICAgIGlmICghaXM8
U3R5bGVkRWxlbWVudD4obV9lbGVtZW50KSkKKyAgICBhdXRvIHN0eWxlZEVsZW1lbnQgPSBkeW5h
bWljRG93bmNhc3Q8U3R5bGVkRWxlbWVudD4obV9lbGVtZW50KTsKKyAgICBpZiAoIXN0eWxlZEVs
ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIG1fc3R5bGUgPSBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICBkb3duY2FzdDxTdHlsZWRFbGVtZW50PigqbV9l
bGVtZW50KS5jb2xsZWN0UHJlc2VudGF0aW9uYWxIaW50c0ZvckF0dHJpYnV0ZShxdWFsaWZpZWRO
YW1lKCksIHZhbHVlKCksICptX3N0eWxlKTsKKyAgICBzdHlsZWRFbGVtZW50LT5jb2xsZWN0UHJl
c2VudGF0aW9uYWxIaW50c0ZvckF0dHJpYnV0ZShxdWFsaWZpZWROYW1lKCksIHZhbHVlKCksICpt
X3N0eWxlKTsKICAgICByZXR1cm4gJm1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24o
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Jyb2FkY2FzdENoYW5uZWwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Jyb2FkY2FzdENoYW5uZWwuY3BwCmluZGV4IDYzMjlk
ZWE1N2ExODdmZjI1OTc3NzBmOGU0Y2FhNjViZTk0NWQ1ZDUuLmU3NjI1M2NkNjQ4YjQ5ODAxZjlj
MzQyNTY2Zjc0NmI0ZTI5YzczMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ccm9h
ZGNhc3RDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQnJvYWRjYXN0Q2hhbm5l
bC5jcHAKQEAgLTEwOCw4ICsxMDgsOCBAQCB2b2lkIEJyb2FkY2FzdENoYW5uZWw6Ok1haW5UaHJl
YWRCcmlkZ2U6OmVuc3VyZU9uTWFpblRocmVhZChGdW5jdGlvbjx2b2lkKERvY3VtZQogICAgIEFT
U0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKICAgICBSZWYgcHJvdGVjdGVkVGhp
cyB7ICp0aGlzIH07Ci0gICAgaWYgKGlzPERvY3VtZW50PigqY29udGV4dCkpCi0gICAgICAgIHRh
c2soZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KSk7CisgICAgaWYgKGF1dG8gZG9jdW1lbnQg
PSBkeW5hbWljRG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KSkKKyAgICAgICAgdGFzaygqZG9j
dW1lbnQpOwogICAgIGVsc2UgewogICAgICAgICBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4o
KmNvbnRleHQpLnRocmVhZCgpLndvcmtlckxvYWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihb
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRhc2sgPSBXVEZNb3ZlKHRh
c2spXShhdXRvJiBjb250ZXh0KSB7CiAgICAgICAgICAgICB0YXNrKGRvd25jYXN0PERvY3VtZW50
Pihjb250ZXh0KSk7CkBAIC0yNjUsOCArMjY1LDggQEAgYm9vbCBCcm9hZGNhc3RDaGFubmVsOjpp
c0VsaWdpYmxlRm9yTWVzc2FnaW5nKCkgY29uc3QKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KS5pc0Z1bGx5QWN0aXZlKCk7Cisg
ICAgaWYgKGF1dG8gZG9jdW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KSkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5pc0Z1bGx5QWN0aXZlKCk7CiAKICAgICByZXR1
cm4gIWRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqY29udGV4dCkuaXNDbG9zaW5nKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggZjgyMTc2NmI1MTI1MGJjZDZh
Mzg1MzI5NzRiZTYyMDIxMTJmOTNjNC4uYmEzMTE5MGM0ZDQyM2U3Nzc5ZTVjZDdiZWYwNWMxMDJm
OGZkY2ZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAtMTE5LDggKzEx
OSw4IEBAIHVuc2lnbmVkIENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNldCwKICAgICAgICAgbV9kYXRhLmFwcGVuZChzdHJp
bmcuY2hhcmFjdGVyczE2KCkgKyBvZmZzZXQsIGNoYXJhY3Rlckxlbmd0aExpbWl0KTsKIAogICAg
IEFTU0VSVCghcmVuZGVyZXIoKSB8fCBpczxUZXh0PigqdGhpcykpOwotICAgIGlmIChpczxUZXh0
PigqdGhpcykpCi0gICAgICAgIGRvd25jYXN0PFRleHQ+KCp0aGlzKS51cGRhdGVSZW5kZXJlckFm
dGVyQ29udGVudENoYW5nZShvbGRMZW5ndGgsIDApOworICAgIGlmIChhdXRvIHRleHQgPSBkeW5h
bWljRG93bmNhc3Q8VGV4dD4oKnRoaXMpKQorICAgICAgICB0ZXh0LT51cGRhdGVSZW5kZXJlckFm
dGVyQ29udGVudENoYW5nZShvbGRMZW5ndGgsIDApOwogCiAgICAgbm90aWZ5UGFyZW50QWZ0ZXJD
aGFuZ2UoY2hpbGRDaGFuZ2UpOwogCkBAIC0yMDcsMTEgKzIwNywxMSBAQCB2b2lkIENoYXJhY3Rl
ckRhdGE6OnNldERhdGFBbmRVcGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25lZCBv
ZmZzZXRPZlJlcAogICAgICAgICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0
T2ZSZXBsYWNlZERhdGEsIG5ld0xlbmd0aCk7CiAKICAgICBBU1NFUlQoIXJlbmRlcmVyKCkgfHwg
aXM8VGV4dD4oKnRoaXMpKTsKLSAgICBpZiAoaXM8VGV4dD4oKnRoaXMpKQotICAgICAgICBkb3du
Y2FzdDxUZXh0PigqdGhpcykudXBkYXRlUmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2Uob2Zmc2V0
T2ZSZXBsYWNlZERhdGEsIG9sZExlbmd0aCk7CisgICAgaWYgKGF1dG8gdGV4dCA9IGR5bmFtaWNE
b3duY2FzdDxUZXh0PigqdGhpcykpCisgICAgICAgIHRleHQtPnVwZGF0ZVJlbmRlcmVyQWZ0ZXJD
b250ZW50Q2hhbmdlKG9mZnNldE9mUmVwbGFjZWREYXRhLCBvbGRMZW5ndGgpOwogCi0gICAgaWYg
KGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKnRoaXMpKQotICAgICAgICBkb3duY2FzdDxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24+KCp0aGlzKS5jaGVja1N0eWxlU2hlZXQoKTsKKyAgICBpZiAoYXV0
byBwcm9jZXNzaW5nSW50cnVjdGlvbiA9IGR5bmFtaWNEb3duY2FzdDxQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24+KCp0aGlzKSkKKyAgICAgICAgcHJvY2Vzc2luZ0ludHJ1Y3Rpb24tPmNoZWNrU3R5bGVT
aGVldCgpOwogCiAgICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgZG9jdW1lbnQo
KS5mcmFtZSgpLT5zZWxlY3Rpb24oKS50ZXh0V2FzUmVwbGFjZWQodGhpcywgb2Zmc2V0T2ZSZXBs
YWNlZERhdGEsIG9sZExlbmd0aCwgbmV3TGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0
YS5oCmluZGV4IDM2YTQ5MjU0MDdlOTEzY2NjYTczZTkwZGUwMzJhYjVmYjg3NzRhNDcuLjUyMDAz
ZDdjMWRkZWQ5N2I5YTdlMDg4YzM5MzI5MThkNjY0MDg0YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuaApAQCAtNzIsOCArNzIsOCBAQCBwcml2YXRlOgogCiBpbmxpbmUgdW5zaWduZWQg
Tm9kZTo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKnRoaXMp
KQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKnRoaXMpLmxlbmd0aCgp
OworICAgIGlmIChhdXRvIGNoYXJhY3RlckRhdGEgPSBkeW5hbWljRG93bmNhc3Q8Q2hhcmFjdGVy
RGF0YT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyRGF0YS0+bGVuZ3RoKCk7CiAg
ICAgcmV0dXJuIGNvdW50Q2hpbGROb2RlcygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaAppbmRleCBjNjYxYmNlNWM4ZmMyZmFk
ZTZjMTg2NDI1NWYzZGRhYzgwNDcwZjA3Li44OWE2OGUwNGMyOWJhMmZjMGM3MjFjMGRjYmY2YWFm
NWM5MDk4ZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRUcmVlQW5j
ZXN0b3JJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVBbmNl
c3Rvckl0ZXJhdG9yLmgKQEAgLTcyLDggKzcyLDggQEAgaW5saW5lIENvbXBvc2VkVHJlZUFuY2Vz
dG9ySXRlcmF0b3ImIENvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3I6OnRyYXZlcnNlUGFyZW4K
ICAgICAgICAgbV9jdXJyZW50ID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
IH0KLSAgICBpZiAoaXM8U2hhZG93Um9vdD4oKnBhcmVudCkpIHsKLSAgICAgICAgbV9jdXJyZW50
ID0gZG93bmNhc3Q8U2hhZG93Um9vdD4oKnBhcmVudCkuaG9zdCgpOworICAgIGlmIChhdXRvIHNo
YWRvd1Jvb3QgPSBkeW5hbWljRG93bmNhc3Q8U2hhZG93Um9vdD4oKnBhcmVudCkpIHsKKyAgICAg
ICAgbV9jdXJyZW50ID0gc2hhZG93Um9vdC0+aG9zdCgpOwogICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgfQogICAgIGlmICghaXM8RWxlbWVudD4oKnBhcmVudCkpIHsKQEAgLTEwMCwxMCArMTAw
LDEwIEBAIHB1YmxpYzoKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkKICAgICB7Ci0gICAgICAgIGlm
IChpczxTaGFkb3dSb290PihtX25vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCpk
b3duY2FzdDxTaGFkb3dSb290PihtX25vZGUpLmhvc3QoKSk7Ci0gICAgICAgIGlmIChpczxQc2V1
ZG9FbGVtZW50PihtX25vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCpkb3duY2Fz
dDxQc2V1ZG9FbGVtZW50PihtX25vZGUpLmhvc3RFbGVtZW50KCkpOworICAgICAgICBpZiAoYXV0
byBzaGFkb3dSb290ID0gZHluYW1pY0Rvd25jYXN0PFNoYWRvd1Jvb3Q+KG1fbm9kZSkpCisgICAg
ICAgICAgICByZXR1cm4gaXRlcmF0b3IoKnNoYWRvd1Jvb3QtPmhvc3QoKSk7CisgICAgICAgIGlm
IChhdXRvIHBzZXVkb0VsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8UHNldWRvRWxlbWVudD4obV9u
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqcHNldWRvRWxlbWVudC0+aG9zdEVs
ZW1lbnQoKSk7CiAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX25vZGUpLnRyYXZlcnNlUGFyZW50
KCk7CiAgICAgfQogICAgIGl0ZXJhdG9yIGVuZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3Nl
ZFRyZWVJdGVyYXRvci5oCmluZGV4IGNjNGYyMDI1NmY1ZWNmZTc2ZjFiYTYxNTU4ZDY2ZjJmMmEz
NTAzNTMuLjYyMjA2MWY0NTZkOGIwZDY2NDI0OTk2ZDMzODEzNmU2NzM0ZDY3ZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oCkBAIC0yMjQsOCArMjI0LDggQEAg
aW5saW5lIE5vZGUqIGZpcnN0Q2hpbGRJbkNvbXBvc2VkVHJlZUlnbm9yaW5nVXNlckFnZW50U2hh
ZG93KE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKGF1dG8qIHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290
SWdub3JpbmdVc2VyQWdlbnRTaGFkb3cobm9kZSkpCiAgICAgICAgIHJldHVybiBzaGFkb3dSb290
LT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKGlzPEhUTUxTbG90RWxlbWVudD4obm9kZSkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIGFzc2lnbmVkTm9kZXMgPSBkb3duY2FzdDxIVE1MU2xvdEVsZW1lbnQ+
KG5vZGUpLmFzc2lnbmVkTm9kZXMoKSkKKyAgICBpZiAoYXV0byBzbG90ID0gZHluYW1pY0Rvd25j
YXN0PEhUTUxTbG90RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGFzc2lnbmVk
Tm9kZXMgPSBzbG90LT5hc3NpZ25lZE5vZGVzKCkpCiAgICAgICAgICAgICByZXR1cm4gYXNzaWdu
ZWROb2Rlcy0+YXQoMCkuZ2V0KCk7CiAgICAgfQogICAgIHJldHVybiBub2RlLmZpcnN0Q2hpbGQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAppbmRleCAyYzI3MmM3ZWVkYzM0MTI1
Mjk4Y2M0N2YzMjc5NDA1NmZkMmM2NmVjLi4zMGY1N2Q3ZGU5ZjJmNDQ2ZGI3YTRiMTI1YzU4Yjhj
YjIxMWUwODI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC0xODAsOCAr
MTgwLDggQEAgQUxXQVlTX0lOTElORSBib29sIENvbnRhaW5lck5vZGU6OnJlbW92ZU5vZGVXaXRo
U2NyaXB0QXNzZXJ0aW9uKE5vZGUmIGNoaWxkVG9SZW0KICAgICAgICAgLy8gRklYTUU6IE1lcmdl
IHRoZXNlIHR3byBjb2RlIHBhdGhzLiBJdCdzIGEgYnVnIGluIHRoZSBwYXJzZXIgbm90IHRvIHVw
ZGF0ZSBjb25uZWN0ZWRTdWJmcmFtZUNvdW50IGluIHRpbWUuCiAgICAgICAgIGRpc2Nvbm5lY3RT
dWJmcmFtZXNJZk5lZWRlZCgqdGhpcywgRGVzY2VuZGFudHNPbmx5KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoaXM8Q29udGFpbmVyTm9kZT4oY2hpbGRUb1JlbW92ZSkpCi0gICAgICAgICAg
ICBkaXNjb25uZWN0U3ViZnJhbWVzSWZOZWVkZWQoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oY2hp
bGRUb1JlbW92ZSksIFJvb3RBbmREZXNjZW5kYW50cyk7CisgICAgICAgIGlmIChhdXRvIGNvbnRh
aW5lckNoaWxkID0gZHluYW1pY0Rvd25jYXN0PENvbnRhaW5lck5vZGU+KGNoaWxkVG9SZW1vdmUp
KQorICAgICAgICAgICAgZGlzY29ubmVjdFN1YmZyYW1lc0lmTmVlZGVkKCpjb250YWluZXJDaGls
ZCwgUm9vdEFuZERlc2NlbmRhbnRzKTsKICAgICB9CiAKICAgICBpZiAoY2hpbGRUb1JlbW92ZS5w
YXJlbnROb2RlKCkgIT0gdGhpcykKQEAgLTI3OCwyNSArMjc4LDI0IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQgZXhlY3V0ZU5vZGVJbnNlcnRpb25XaXRoU2NyaXB0QXNzZXJ0aW9uKENvbnRh
aW5lck5vZGUmCiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENvbnRhaW5lck5vZGU6OnJlbW92ZVNlbGZP
ckNoaWxkTm9kZXNGb3JJbnNlcnRpb24oTm9kZSYgY2hpbGQsIE5vZGVWZWN0b3ImIG5vZGVzRm9y
SW5zZXJ0aW9uKQogewotICAgIGlmICghaXM8RG9jdW1lbnRGcmFnbWVudD4oY2hpbGQpKSB7Ci0g
ICAgICAgIG5vZGVzRm9ySW5zZXJ0aW9uLmFwcGVuZChjaGlsZCk7Ci0gICAgICAgIFJlZlB0ciBv
bGRQYXJlbnQgPSBjaGlsZC5wYXJlbnROb2RlKCk7Ci0gICAgICAgIGlmICghb2xkUGFyZW50KQor
ICAgIGlmIChhdXRvIGZyYWdtZW50ID0gZHluYW1pY0Rvd25jYXN0PERvY3VtZW50RnJhZ21lbnQ+
KGNoaWxkKSkgeworICAgICAgICBpZiAoIWZyYWdtZW50LT5oYXNDaGlsZE5vZGVzKCkpCiAgICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4gb2xkUGFyZW50LT5yZW1vdmVDaGls
ZChjaGlsZCk7Ci0gICAgfQogCi0gICAgYXV0byYgZnJhZ21lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dEZyYWdtZW50PihjaGlsZCk7Ci0gICAgaWYgKCFmcmFnbWVudC5oYXNDaGlsZE5vZGVzKCkpCi0g
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGF1dG8gcmVtb3ZlZENoaWxkTm9kZXMgPSBmcmFn
bWVudC0+cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENvbnRhaW5lck5vZGU6
OkNoaWxkQ2hhbmdlOjpTb3VyY2U6OkFQSSk7CisgICAgICAgIG5vZGVzRm9ySW5zZXJ0aW9uLnN3
YXAocmVtb3ZlZENoaWxkTm9kZXMpOwogCi0gICAgYXV0byByZW1vdmVkQ2hpbGROb2RlcyA9IGZy
YWdtZW50LnJlbW92ZUFsbENoaWxkcmVuV2l0aFNjcmlwdEFzc2VydGlvbihDb250YWluZXJOb2Rl
OjpDaGlsZENoYW5nZTo6U291cmNlOjpBUEkpOwotICAgIG5vZGVzRm9ySW5zZXJ0aW9uLnN3YXAo
cmVtb3ZlZENoaWxkTm9kZXMpOworICAgICAgICBmcmFnbWVudC0+cmVidWlsZFNWR0V4dGVuc2lv
bnNFbGVtZW50c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGZyYWdtZW50LT5kaXNwYXRjaFN1YnRy
ZWVNb2RpZmllZEV2ZW50KCk7CiAKLSAgICBmcmFnbWVudC5yZWJ1aWxkU1ZHRXh0ZW5zaW9uc0Vs
ZW1lbnRzSWZOZWNlc3NhcnkoKTsKLSAgICBmcmFnbWVudC5kaXNwYXRjaFN1YnRyZWVNb2RpZmll
ZEV2ZW50KCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQogCi0gICAgcmV0dXJuIHsgfTsK
KyAgICBub2Rlc0Zvckluc2VydGlvbi5hcHBlbmQoY2hpbGQpOworICAgIFJlZlB0ciBvbGRQYXJl
bnQgPSBjaGlsZC5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFvbGRQYXJlbnQpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgcmV0dXJuIG9sZFBhcmVudC0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwogfQog
CiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBtdXN0IGdldCBhIG5ldyBuYW1lLgpAQCAtMzE1LDE0
ICszMTQsMTQgQEAgdm9pZCBDb250YWluZXJOb2RlOjpyZW1vdmVEZXRhY2hlZENoaWxkcmVuKCkK
IAogc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lSZW5kZXJUcmVlSWZOZWVkZWQoTm9kZSYgY2hp
bGQpCiB7Ci0gICAgYm9vbCBpc0VsZW1lbnQgPSBpczxFbGVtZW50PihjaGlsZCk7Ci0gICAgYXV0
byBoYXNEaXNwbGF5Q29udGVudHMgPSBpc0VsZW1lbnQgJiYgZG93bmNhc3Q8RWxlbWVudD4oY2hp
bGQpLmhhc0Rpc3BsYXlDb250ZW50cygpOworICAgIGF1dG8gY2hpbGRBc0VsZW1lbnQgPSBkeW5h
bWljRG93bmNhc3Q8RWxlbWVudD4oY2hpbGQpOworICAgIGF1dG8gaGFzRGlzcGxheUNvbnRlbnRz
ID0gY2hpbGRBc0VsZW1lbnQgJiYgY2hpbGRBc0VsZW1lbnQtPmhhc0Rpc3BsYXlDb250ZW50cygp
OwogICAgIGlmICghY2hpbGQucmVuZGVyZXIoKSAmJiAhaGFzRGlzcGxheUNvbnRlbnRzKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKGlzRWxlbWVudCkKLSAgICAgICAgUmVuZGVyVHJlZVVwZGF0
ZXI6OnRlYXJEb3duUmVuZGVyZXJzKGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkKSk7Ci0gICAgZWxz
ZSBpZiAoaXM8VGV4dD4oY2hpbGQpKQotICAgICAgICBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRv
d25SZW5kZXJlcihkb3duY2FzdDxUZXh0PihjaGlsZCkpOworICAgIGlmIChjaGlsZEFzRWxlbWVu
dCkKKyAgICAgICAgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKCpjaGlsZEFz
RWxlbWVudCk7CisgICAgZWxzZSBpZiAoYXV0byB0ZXh0ID0gZHluYW1pY0Rvd25jYXN0PFRleHQ+
KGNoaWxkKSkKKyAgICAgICAgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXIoKnRl
eHQpOwogfQogCiB2b2lkIENvbnRhaW5lck5vZGU6OnRha2VBbGxDaGlsZHJlbkZyb20oQ29udGFp
bmVyTm9kZSogb2xkUGFyZW50KQpAQCAtMzY3LDggKzM2Niw4IEBAIHN0YXRpYyBib29sIGNvbnRh
aW5zSW5jbHVkaW5nSG9zdEVsZW1lbnRzKGNvbnN0IE5vZGUmIHBvc3NpYmxlQW5jZXN0b3IsIGNv
bnN0IE5vCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY29uc3QgQ29udGFpbmVy
Tm9kZSogcGFyZW50ID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKCFw
YXJlbnQpIHsKLSAgICAgICAgICAgIGlmIChpczxTaGFkb3dSb290PihjdXJyZW50Tm9kZSkpCi0g
ICAgICAgICAgICAgICAgcGFyZW50ID0gZG93bmNhc3Q8U2hhZG93Um9vdD4oY3VycmVudE5vZGUp
LT5ob3N0KCk7CisgICAgICAgICAgICBpZiAoYXV0byBzaGFkb3dSb290ID0gZHluYW1pY0Rvd25j
YXN0PFNoYWRvd1Jvb3Q+KGN1cnJlbnROb2RlKSkKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBz
aGFkb3dSb290LT5ob3N0KCk7CiAgICAgICAgICAgICBlbHNlIGlmIChpczxEb2N1bWVudEZyYWdt
ZW50PigqY3VycmVudE5vZGUpICYmIGRvd25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KCpjdXJyZW50
Tm9kZSkuaXNUZW1wbGF0ZUNvbnRlbnQoKSkKICAgICAgICAgICAgICAgICBwYXJlbnQgPSBzdGF0
aWNfY2FzdDxjb25zdCBUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50Kj4oY3VycmVudE5v
ZGUpLT5ob3N0KCk7CiAgICAgICAgIH0KQEAgLTQwMSw4ICs0MDAsOCBAQCBzdGF0aWMgaW5saW5l
IEV4Y2VwdGlvbk9yPHZvaWQ+IGNoZWNrQWNjZXB0Q2hpbGQoQ29udGFpbmVyTm9kZSYgbmV3UGFy
ZW50LCBOb2RlJgogICAgIGlmIChzaG91bGRWYWxpZGF0ZUNoaWxkUGFyZW50ID09IFNob3VsZFZh
bGlkYXRlQ2hpbGRQYXJlbnQ6OlllcyAmJiByZWZDaGlsZCAmJiByZWZDaGlsZC0+cGFyZW50Tm9k
ZSgpICE9ICZuZXdQYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVy
cm9yIH07CiAKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KG5ld1BhcmVudCkpIHsKLSAgICAgICAgaWYg
KCFkb3duY2FzdDxEb2N1bWVudD4obmV3UGFyZW50KS5jYW5BY2NlcHRDaGlsZChuZXdDaGlsZCwg
cmVmQ2hpbGQsIG9wZXJhdGlvbikpCisgICAgaWYgKGF1dG8gbmV3UGFyZW50RG9jdW1lbnQgPSBk
eW5hbWljRG93bmNhc3Q8RG9jdW1lbnQ+KG5ld1BhcmVudCkpIHsKKyAgICAgICAgaWYgKCFuZXdQ
YXJlbnREb2N1bWVudC0+Y2FuQWNjZXB0Q2hpbGQobmV3Q2hpbGQsIHJlZkNoaWxkLCBvcGVyYXRp
b24pKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJv
ciB9OwogICAgIH0gZWxzZSBpZiAoIWlzQ2hpbGRUeXBlQWxsb3dlZChuZXdQYXJlbnQsIG5ld0No
aWxkKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJvciB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKaW5kZXggZjE1NTQwMTRiNmZkNjMwN2VhNTJj
OGI0MDM0MDg4MDdmMjc3MTUzZi4uMWNjYzY4ZjQ0NGQ5MTNhZmNiYTg3ZDNiNGZmMjEyM2E3MGRm
NzRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCkBAIC0xOTQsMzAgKzE5NCwyNiBA
QCBpbmxpbmUgQ29udGFpbmVyTm9kZTo6Q29udGFpbmVyTm9kZShEb2N1bWVudCYgZG9jdW1lbnQs
IENvbnN0cnVjdGlvblR5cGUgdHlwZSkKIAogaW5saW5lIHVuc2lnbmVkIE5vZGU6OmNvdW50Q2hp
bGROb2RlcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqdGhpcykpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhp
cykuY291bnRDaGlsZE5vZGVzKCk7CisgICAgYXV0byogY29udGFpbmVyTm9kZSA9IGR5bmFtaWNE
b3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcyk7CisgICAgcmV0dXJuIGNvbnRhaW5lck5vZGUg
PyBjb250YWluZXJOb2RlLT5jb3VudENoaWxkTm9kZXMoKSA6IDA7CiB9CiAKIGlubGluZSBOb2Rl
KiBOb2RlOjp0cmF2ZXJzZVRvQ2hpbGRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBp
ZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS50cmF2ZXJzZVRvQ2hpbGRB
dChpbmRleCk7CisgICAgYXV0byogY29udGFpbmVyTm9kZSA9IGR5bmFtaWNEb3duY2FzdDxDb250
YWluZXJOb2RlPigqdGhpcyk7CisgICAgcmV0dXJuIGNvbnRhaW5lck5vZGUgPyBjb250YWluZXJO
b2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChpbmRleCkgOiBudWxscHRyOwogfQogCiBpbmxpbmUgTm9k
ZSogTm9kZTo6Zmlyc3RDaGlsZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2Rl
PigqdGhpcykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBkb3duY2FzdDxD
b250YWluZXJOb2RlPigqdGhpcykuZmlyc3RDaGlsZCgpOworICAgIGF1dG8qIGNvbnRhaW5lck5v
ZGUgPSBkeW5hbWljRG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnRoaXMpOworICAgIHJldHVybiBj
b250YWluZXJOb2RlID8gY29udGFpbmVyTm9kZS0+Zmlyc3RDaGlsZCgpIDogbnVsbHB0cjsKIH0K
IAogaW5saW5lIE5vZGUqIE5vZGU6Omxhc3RDaGlsZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpczxD
b250YWluZXJOb2RlPigqdGhpcykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcykubGFzdENoaWxkKCk7CisgICAgYXV0byog
Y29udGFpbmVyTm9kZSA9IGR5bmFtaWNEb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcyk7Cisg
ICAgcmV0dXJuIGNvbnRhaW5lck5vZGUgPyBjb250YWluZXJOb2RlLT5sYXN0Q2hpbGQoKSA6IG51
bGxwdHI7CiB9CiAKIGlubGluZSBOb2RlJiBOb2RlOjpyb290Tm9kZSgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAppbmRleCBhNzAyNjNiMGJkYWNiOWU0M2ZkZWQ1ZTZmNGM3ZDBkNGQ3N2Nm
NWVjLi43OGNhYWFlN2Q5YzcyMzYyMDc2OGE0NDdmZWMyOGU4Yjg1YzE3YjcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTQ3MCwxMiArNDcwLDggQEAgc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWROYW1lUGFydChVQ2hhcjMyIGMpCiAKIHN0YXRpYyBXaWRnZXQqIHdpZGdldEZvckVsZW1l
bnQoRWxlbWVudCogZm9jdXNlZEVsZW1lbnQpCiB7Ci0gICAgaWYgKCFmb2N1c2VkRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byogcmVuZGVyZXIgPSBmb2N1c2VkRWxl
bWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0
PigqcmVuZGVyZXIpLndpZGdldCgpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZm9jdXNlZEVsZW1l
bnQgPyBkeW5hbWljRG93bmNhc3Q8UmVuZGVyV2lkZ2V0Pihmb2N1c2VkRWxlbWVudC0+cmVuZGVy
ZXIoKSkgOiBudWxscHRyOworICAgIHJldHVybiByZW5kZXJlciA/IHJlbmRlcmVyLT53aWRnZXQo
KSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0aW5nRm9jdXMoY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKQEAgLTg5NSwxMyArODkxLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OmJ1
aWxkQWNjZXNzS2V5Q2FjaGUoKQogICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBtYWtlVW5pcXVlPEhh
c2hNYXA8U3RyaW5nLCBXZWFrUHRyPEVsZW1lbnQ+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
PihbdGhpc10gewogICAgICAgICBIYXNoTWFwPFN0cmluZywgV2Vha1B0cjxFbGVtZW50PiwgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYgbm9kZSA6IGNv
bXBvc2VkVHJlZURlc2NlbmRhbnRzKCp0aGlzKSkgewotICAgICAgICAgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKKyAgICAgICAgICAgIGF1dG8gZWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
Pihub2RlKTsKLSAgICAgICAgICAgIGF1dG8mIGtleSA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihhY2Nlc3NrZXlBdHRyKTsKKyAgICAgICAgICAgIGF1dG8mIGtleSA9
IGVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7
CiAgICAgICAgICAgICBpZiAoa2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG1hcC5hZGQoa2V5LCBlbGVtZW50KTsKKyAgICAgICAgICAgIG1hcC5h
ZGQoa2V5LCAqZWxlbWVudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1hcDsKICAgICB9
KCkpOwpAQCAtNDQ5OSw3ICs0NDk1LDcgQEAgdm9pZCBEb2N1bWVudDo6YWRqdXN0Rm9jdXNlZE5v
ZGVPbk5vZGVSZW1vdmFsKE5vZGUmIG5vZGUsIE5vZGVSZW1vdmFsIG5vZGVSZW1vdmEKICAgICBp
ZiAoaXNOb2RlSW5TdWJ0cmVlKCpmb2N1c2VkRWxlbWVudCwgbm9kZSwgbm9kZVJlbW92YWwpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXZvaWQgc3luY2hyb25vdXNseSB1cGRhdGlu
ZyB0aGUgc3R5bGUgaW5zaWRlIHNldEZvY3VzZWRFbGVtZW50LgogICAgICAgICAvLyBGSVhNRTog
T2JqZWN0IGVsZW1lbnRzIHNob3VsZCBhdm9pZCBsb2FkaW5nIGEgZnJhbWUgc3luY2hyb25vdXNs
eSBpbiBhIHBvc3Qgc3R5bGUgcmVjYWxjIGNhbGxiYWNrLgotICAgICAgICBTdWJmcmFtZUxvYWRp
bmdEaXNhYmxlciBkaXNhYmxlcihpczxDb250YWluZXJOb2RlPihub2RlKSA/ICZkb3duY2FzdDxD
b250YWluZXJOb2RlPihub2RlKSA6IG51bGxwdHIpOworICAgICAgICBTdWJmcmFtZUxvYWRpbmdE
aXNhYmxlciBkaXNhYmxlcihkeW5hbWljRG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkpOwog
ICAgICAgICBzZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCB7IHsgfSwgeyB9LCBGb2N1c1JlbW92
YWxFdmVudHNNb2RlOjpEb05vdERpc3BhdGNoLCB7IH0sIHsgfSB9KTsKICAgICAgICAgLy8gU2V0
IHRoZSBmb2N1cyBuYXZpZ2F0aW9uIHN0YXJ0aW5nIG5vZGUgdG8gdGhlIHByZXZpb3VzIGZvY3Vz
ZWQgZWxlbWVudCBzbyB0aGF0CiAgICAgICAgIC8vIHdlIGNhbiBmYWxsYmFjayB0byB0aGUgc2li
bGluZ3Mgb3IgcGFyZW50IG5vZGUgZm9yIHRoZSBuZXh0IHNlYXJjaC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCA1ZDI1MDc3MGNlY2QyYmY2ZDQ0MDEwOWE2NjZjNGZkZjUzZTBlNTEwLi41MTMw
NDg1NWFmYjZlYWEzZTNmYmQ5NDhhZDA0YTY5NmMzMTUyNWEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC0yMjk2LDcgKzIyOTYsNyBAQCBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3Vs
dCBFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBlIGlucwogCiAgICAg
Ym9vbCBiZWNvbWVDb25uZWN0ZWQgPSBpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQ7
CiAgICAgVHJlZVNjb3BlKiBuZXdTY29wZSA9ICZwYXJlbnRPZkluc2VydGVkVHJlZS50cmVlU2Nv
cGUoKTsKLSAgICBIVE1MRG9jdW1lbnQqIG5ld0RvY3VtZW50ID0gYmVjb21lQ29ubmVjdGVkICYm
IGlzPEhUTUxEb2N1bWVudD4obmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgPyAmZG93bmNhc3Q8
SFRNTERvY3VtZW50PihuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA6IG51bGxwdHI7CisgICAg
YXV0byogbmV3RG9jdW1lbnQgPSBiZWNvbWVDb25uZWN0ZWQgPyBkeW5hbWljRG93bmNhc3Q8SFRN
TERvY3VtZW50PihuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA6IG51bGxwdHI7CiAgICAgaWYg
KCFpbnNlcnRpb25UeXBlLnRyZWVTY29wZUNoYW5nZWQpCiAgICAgICAgIG5ld1Njb3BlID0gbnVs
bHB0cjsKIApAQCAtMjM1OCw3ICsyMzU4LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFu
Y2VzdG9yKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAg
ICBpZiAob2xkUGFyZW50T2ZSZW1vdmVkVHJlZS5pc0luVHJlZVNjb3BlKCkpIHsKICAgICAgICAg
VHJlZVNjb3BlKiBvbGRTY29wZSA9ICZvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLnRyZWVTY29wZSgp
OwogICAgICAgICBEb2N1bWVudCogb2xkRG9jdW1lbnQgPSByZW1vdmFsVHlwZS5kaXNjb25uZWN0
ZWRGcm9tRG9jdW1lbnQgPyAmb2xkU2NvcGUtPmRvY3VtZW50U2NvcGUoKSA6IG51bGxwdHI7Ci0g
ICAgICAgIEhUTUxEb2N1bWVudCogb2xkSFRNTERvY3VtZW50ID0gb2xkRG9jdW1lbnQgJiYgaXM8
SFRNTERvY3VtZW50Pigqb2xkRG9jdW1lbnQpID8gJmRvd25jYXN0PEhUTUxEb2N1bWVudD4oKm9s
ZERvY3VtZW50KSA6IG51bGxwdHI7CisgICAgICAgIGF1dG8qIG9sZEhUTUxEb2N1bWVudCA9IGR5
bmFtaWNEb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG9sZERvY3VtZW50KTsKICAgICAgICAgaWYgKCFy
ZW1vdmFsVHlwZS50cmVlU2NvcGVDaGFuZ2VkKQogICAgICAgICAgICAgb2xkU2NvcGUgPSBudWxs
cHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudElubGluZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50SW5saW5lcy5oCmluZGV4IDg2MGMwNDkxNjExNGNm
ZTQ2NGE0NzAyZmZhNzFkMThmMTI5N2MxZmQuLjNmODU3YTY0MzNkNmUxYjJiMzMyYzBmNjkzM2Y1
NzQ0MDQ0ZmVmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50SW5saW5l
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50SW5saW5lcy5oCkBAIC02MSw4ICs2
MSw3IEBAIGlubGluZSBOYW1lZE5vZGVNYXAqIE5vZGU6OmF0dHJpYnV0ZXMoKSBjb25zdAogCiBp
bmxpbmUgRWxlbWVudCogTm9kZTo6cGFyZW50RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgQ29udGFp
bmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwotICAgIHJldHVybiBpczxFbGVtZW50Pihw
YXJlbnQpID8gZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50KSA6IG51bGxwdHI7CisgICAgcmV0dXJu
IGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihwYXJlbnROb2RlKCkpOwogfQogCiBpbmxpbmUgY29u
c3QgRWxlbWVudCogRWxlbWVudDo6cm9vdEVsZW1lbnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCAzOTkxMjE0ZWMxNDNkMzg0YjY4YmFmNjU1OTljMjlm
NzY2NTM2NmViLi4wZWZmZTA2NTYyZDJiMGU0ODk0ZjBkN2FjMjk0OWZhZTg1MGIwZDM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUmIG5vZGUsIEV2ZW50JiBldmVu
dCkKICAgICBJbnB1dEVsZW1lbnRDbGlja1N0YXRlIGNsaWNrSGFuZGxpbmdTdGF0ZTsKIAogICAg
IGJvb2wgaXNBY3RpdmF0aW9uRXZlbnQgPSBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNs
aWNrRXZlbnQ7Ci0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0Rm9yTGVnYWN5UHJl
QWN0aXZhdGlvbkJlaGF2aW9yID0gaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkgPyAmZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4obm9kZSkgOiBudWxscHRyOworICAgIFJlZlB0ciBpbnB1dEZv
ckxlZ2FjeVByZUFjdGl2YXRpb25CZWhhdmlvciA9IGR5bmFtaWNEb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50Pihub2RlKTsKICAgICBpZiAoIWlucHV0Rm9yTGVnYWN5UHJlQWN0aXZhdGlvbkJlaGF2
aW9yICYmIGlzQWN0aXZhdGlvbkV2ZW50ICYmIGV2ZW50LmJ1YmJsZXMoKSkKICAgICAgICAgaW5w
dXRGb3JMZWdhY3lQcmVBY3RpdmF0aW9uQmVoYXZpb3IgPSBmaW5kSW5wdXRFbGVtZW50SW5FdmVu
dFBhdGgoZXZlbnRQYXRoKTsKICAgICBpZiAoaW5wdXRGb3JMZWdhY3lQcmVBY3RpdmF0aW9uQmVo
YXZpb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggZGFjM2UwODhkOWE1ZDNiNzY4
N2Q0ZGIxY2VmYjJkNWViOGIwZTBmMi4uNTlkMzlhYjE5YzRhZjhiZmEyMjhhNjVkZTZlNTFhM2Yz
YjM0NzBkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAtMjAzLDcgKzIwMyw3IEBA
IFJlZlB0cjxOb2RlPiBNb3VzZUV2ZW50Ojp0b0VsZW1lbnQoKSBjb25zdAogICAgICAgICB0YXJn
ZXQgPSByZWxhdGVkVGFyZ2V0KCk7CiAgICAgZWxzZQogICAgICAgICB0YXJnZXQgPSB0aGlzLT50
YXJnZXQoKTsKLSAgICByZXR1cm4gaXM8Tm9kZT4odGFyZ2V0KSA/ICZkb3duY2FzdDxOb2RlPigq
dGFyZ2V0KSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxOb2RlPih0YXJn
ZXQpOwogfQogCiBSZWZQdHI8Tm9kZT4gTW91c2VFdmVudDo6ZnJvbUVsZW1lbnQoKSBjb25zdApA
QCAtMjE0LDcgKzIxNCw3IEBAIFJlZlB0cjxOb2RlPiBNb3VzZUV2ZW50Ojpmcm9tRWxlbWVudCgp
IGNvbnN0CiAgICAgICAgIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGVsc2UKICAgICAg
ICAgdGFyZ2V0ID0gcmVsYXRlZFRhcmdldCgpOwotICAgIHJldHVybiBpczxOb2RlPih0YXJnZXQp
ID8gJmRvd25jYXN0PE5vZGU+KCp0YXJnZXQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1p
Y0Rvd25jYXN0PE5vZGU+KHRhcmdldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAppbmRleCA1MWUwYWNhMzQ0NDlmYzNjM2Q2NTliMjY0Y2Y4ODVhYjMzZjdmOGNk
Li45NjI4MTgwMzYxYzc0M2RkNzRhZjBhYTMyZGI0NThmNGQ2YmE3YjNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCkBAIC04MDEsMTQgKzgwMSwxMiBAQCBOb2RlOjpFZGl0YWJpbGl0eSBOb2RlOjpjb21wdXRl
RWRpdGFiaWxpdHkoVXNlclNlbGVjdEFsbFRyZWF0bWVudCB0cmVhdG1lbnQsIFNobwogCiBSZW5k
ZXJCb3gqIE5vZGU6OnJlbmRlckJveCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVy
ZXIpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikgOiBudWxscHRyOworICAgIHJldHVy
biBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKIH0KIAogUmVuZGVyQm94
TW9kZWxPYmplY3QqIE5vZGU6OnJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3QKIHsKLSAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICByZXR1cm4gaXM8
UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlckJveE1vZGVs
T2JqZWN0PihyZW5kZXJlcikgOiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8
UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpOwogfQogICAgIAogTGF5b3V0UmVjdCBO
b2RlOjpyZW5kZXJSZWN0KGJvb2wqIGlzUmVwbGFjZWQpCkBAIC0xMTQ4LDggKzExNDYsNyBAQCBF
bGVtZW50KiBOb2RlOjpzaGFkb3dIb3N0KCkgY29uc3QKIAogU2hhZG93Um9vdCogTm9kZTo6Y29u
dGFpbmluZ1NoYWRvd1Jvb3QoKSBjb25zdAogewotICAgIENvbnRhaW5lck5vZGUmIHJvb3QgPSB0
cmVlU2NvcGUoKS5yb290Tm9kZSgpOwotICAgIHJldHVybiBpczxTaGFkb3dSb290Pihyb290KSA/
IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCZyb290KSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFt
aWNEb3duY2FzdDxTaGFkb3dSb290Pih0cmVlU2NvcGUoKS5yb290Tm9kZSgpKTsKIH0KIAogI2lm
IEFTU0VSVF9FTkFCTEVECkBAIC0xNjQzLDggKzE2NDAsOCBAQCB1bnNpZ25lZCBzaG9ydCBOb2Rl
Ojpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbihOb2RlJiBvdGhlck5vZGUpCiAgICAgaWYgKCZvdGhl
ck5vZGUgPT0gdGhpcykKICAgICAgICAgcmV0dXJuIERPQ1VNRU5UX1BPU0lUSU9OX0VRVUlWQUxF
TlQ7CiAgICAgCi0gICAgQXR0ciogYXR0cjEgPSBpczxBdHRyPigqdGhpcykgPyBkb3duY2FzdDxB
dHRyPih0aGlzKSA6IG51bGxwdHI7Ci0gICAgQXR0ciogYXR0cjIgPSBpczxBdHRyPihvdGhlck5v
ZGUpID8gJmRvd25jYXN0PEF0dHI+KG90aGVyTm9kZSkgOiBudWxscHRyOworICAgIGF1dG8qIGF0
dHIxID0gZHluYW1pY0Rvd25jYXN0PEF0dHI+KCp0aGlzKTsKKyAgICBhdXRvKiBhdHRyMiA9IGR5
bmFtaWNEb3duY2FzdDxBdHRyPihvdGhlck5vZGUpOwogICAgIAogICAgIE5vZGUqIHN0YXJ0MSA9
IGF0dHIxID8gYXR0cjEtPm93bmVyRWxlbWVudCgpIDogdGhpczsKICAgICBOb2RlKiBzdGFydDIg
PSBhdHRyMiA/IGF0dHIyLT5vd25lckVsZW1lbnQoKSA6ICZvdGhlck5vZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmNwcAppbmRleCA5YTUxMmVmZTdjOWMwMWVmODIwMTJjYjQzZjliNjExNTU4OTY3YTJh
Li5kNTg3YjhiYzY4YjIyZjBmZjRkYTAzY2Q4OTIzYzNjNjdhODMyMTI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBUZXh0KiBQb3NpdGlvbjo6Y29udGFpbmVy
VGV4dCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhbmNob3JUeXBlKCkpIHsKICAgICBjYXNlIFBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoKLSAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSAmJiBp
czxUZXh0PigqbV9hbmNob3JOb2RlKSA/IGRvd25jYXN0PFRleHQ+KG1fYW5jaG9yTm9kZS5nZXQo
KSkgOiBudWxscHRyOworICAgICAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFRleHQ+KG1fYW5j
aG9yTm9kZS5nZXQoKSk7CiAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQW5jaG9yOgogICAgIGNh
c2UgUG9zaXRpb25Jc0FmdGVyQW5jaG9yOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwCmluZGV4IGI3OGNhNzkwY2Q3NzJlMjVl
NzU3MWIyN2EzNmYzNzI5OGQ3OTg4NGQuLjc3NmMyY2I3NjQwZGMxNjcxOTc2OGQzYWEyMzJhZTM3
NzFkNmE1NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNh
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmNwcApAQCAt
NDcsMTAgKzQ3LDEwIEBAIFN0cmluZyBjb250ZW50c0FzU3RyaW5nKGNvbnN0IENvbnRhaW5lck5v
ZGUmIHJvb3QpCiAKIFN0cmluZyBjb250ZW50c0FzU3RyaW5nKGNvbnN0IE5vZGUmIHJvb3QpCiB7
Ci0gICAgaWYgKGlzPFRleHQ+KHJvb3QpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dD4o
cm9vdCkuZGF0YSgpOwotICAgIGlmIChpczxDb250YWluZXJOb2RlPihyb290KSkKLSAgICAgICAg
cmV0dXJuIGNvbnRlbnRzQXNTdHJpbmcoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocm9vdCkpOwor
ICAgIGlmIChhdXRvIHRleHQgPSBkeW5hbWljRG93bmNhc3Q8VGV4dD4ocm9vdCkpCisgICAgICAg
IHJldHVybiB0ZXh0LT5kYXRhKCk7CisgICAgaWYgKGF1dG8gY29udGFpbmVyTm9kZSA9IGR5bmFt
aWNEb3duY2FzdDxDb250YWluZXJOb2RlPihyb290KSkKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRz
QXNTdHJpbmcoKmNvbnRhaW5lck5vZGUpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlLmNwcAppbmRleCA4ZjZjNDdmOGNkNjhlZmZhMDk5MjQ2YzAwMTA1MjY1
OTJhYjRlYjYzLi5lMjk2NzYxMzM0NmNhMWE3ZGZmZTM3MzMzYzBlZjZkNTU0NGVlM2Q3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVNjb3BlLmNwcApAQCAtNDE0LDggKzQxNCw4IEBAIFZlY3RvcjxSZWZQdHI8
RWxlbWVudD4+IFRyZWVTY29wZTo6ZWxlbWVudHNGcm9tUG9pbnQoZG91YmxlIGNsaWVudFgsIGRv
dWJsZSBjbGllCiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGlmIChpczxQc2V1ZG9FbGVtZW50Pihub2RlKSkKLSAgICAgICAgICAgIG5vZGUgPSBk
b3duY2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKTsKKyAgICAgICAgaWYg
KGF1dG8gcHNldWRvRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9k
ZSkpCisgICAgICAgICAgICBub2RlID0gcHNldWRvRWxlbWVudC0+aG9zdEVsZW1lbnQoKTsKIAog
ICAgICAgICAvLyBQcnVuZSBkdXBsaWNhdGUgZW50cmllcy4gQSBwc2V1ZG8gOjpiZWZvcmUgY29u
dGVudCBhYm92ZSBpdHMgcGFyZW50CiAgICAgICAgIC8vIG5vZGUgc2hvdWxkIG9ubHkgcmVzdWx0
IGluIG9uZSBlbnRyeS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UeXBlZEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UeXBlZEVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3IuaAppbmRleCA2YmNkNWM0MGE4MjJhY2ZkNzE5ZWIxM2U2NGYzYzYw
ZTBlNWI5NmYwLi5jMzEzYzJjYzBiOTFlNTllZGI2ODcxYjY0NmYwODEwYjM0MDk3MjUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
ci5oCkBAIC0xNzAsOCArMTcwLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IEVsZW1lbnREZXMKIHRlbXBsYXRl
PHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRU
eXBlPiBFbGVtZW50RGVzY2VuZGFudFJhbmdlPEVsZW1lbnRUeXBlPjo6ZnJvbShFbGVtZW50JiBk
ZXNjZW5kYW50KSBjb25zdAogewogICAgIEFTU0VSVChkZXNjZW5kYW50LmlzRGVzY2VuZGFudE9m
KG1fcm9vdCkpOwotICAgIGlmIChpczxFbGVtZW50VHlwZT4oZGVzY2VuZGFudCkpCi0gICAgICAg
IHJldHVybiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIGRv
d25jYXN0PEVsZW1lbnRUeXBlPigmZGVzY2VuZGFudCkpOworICAgIGlmIChhdXRvIGRlc2NlbmRh
bnRFbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnRUeXBlPihkZXNjZW5kYW50KSkKKyAg
ICAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9v
dCwgZGVzY2VuZGFudEVsZW1lbnQpOwogICAgIEVsZW1lbnRUeXBlKiBuZXh0ID0gVHJhdmVyc2Fs
PEVsZW1lbnRUeXBlPjo6bmV4dChkZXNjZW5kYW50LCAmbV9yb290KTsKICAgICByZXR1cm4gRWxl
bWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBuZXh0KTsKIH0KQEAg
LTIwNyw4ICsyMDcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gSW5jbHVzaXZlRQogdGVtcGxhdGU8dHlwZW5h
bWUgRWxlbWVudFR5cGU+IEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IElu
Y2x1c2l2ZUVsZW1lbnREZXNjZW5kYW50UmFuZ2U8RWxlbWVudFR5cGU+Ojpmcm9tKEVsZW1lbnQm
IGRlc2NlbmRhbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCZtX3Jvb3QgPT0gJmRlc2NlbmRhbnQg
fHwgZGVzY2VuZGFudC5pc0Rlc2NlbmRhbnRPZihtX3Jvb3QpKTsKLSAgICBpZiAoaXM8RWxlbWVu
dFR5cGU+KGRlc2NlbmRhbnQpKQotICAgICAgICByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBkb3duY2FzdDxFbGVtZW50VHlwZT4oJmRlc2NlbmRh
bnQpKTsKKyAgICBpZiAoYXV0byBkZXNjZW5kYW50RWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxF
bGVtZW50VHlwZT4oZGVzY2VuZGFudCkpCisgICAgICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIGRlc2NlbmRhbnRFbGVtZW50KTsKICAgICBF
bGVtZW50VHlwZSogbmV4dCA9IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5leHQoZGVzY2VuZGFu
dCwgJm1fcm9vdCk7CiAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVu
dFR5cGU+KG1fcm9vdCwgbmV4dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
VmlzaXRlZExpbmtTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0
ZS5jcHAKaW5kZXggMTMxNTkxYmI0OThiNDc5ZmYwMDBlYjg3ODc2YTcyM2MyYWZhZTdlZS4uYzU4
N2M0ZWMwZWU4NzM2YTk3ZDU1NzA5NWY1MzRiNmQ0ZDg1YjFkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9WaXNpdGVkTGlua1N0YXRlLmNwcApAQCAtNzEsMTAgKzcxLDEwIEBAIHZvaWQgVmlzaXRlZExp
bmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKQogCiBpbmxpbmUgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8U2hhcmVkU3RyaW5nSGFzaD4gbGlua0hhc2hGb3JFbGVtZW50KGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50
KSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KS52
aXNpdGVkTGlua0hhc2goKTsKLSAgICBpZiAoaXM8U1ZHQUVsZW1lbnQ+KGVsZW1lbnQpKQotICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHQUVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFz
aCgpOworICAgIGlmIChhdXRvIGFuY2hvciA9IGR5bmFtaWNEb3duY2FzdDxIVE1MQW5jaG9yRWxl
bWVudD4oZWxlbWVudCkpCisgICAgICAgIHJldHVybiBhbmNob3ItPnZpc2l0ZWRMaW5rSGFzaCgp
OworICAgIGlmIChhdXRvIGFuY2hvciA9IGR5bmFtaWNEb3duY2FzdDxTVkdBRWxlbWVudD4oZWxl
bWVudCkpCisgICAgICAgIHJldHVybiBhbmNob3ItPnZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9t
ZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKaW5kZXgg
ZmM1MTNlZTFjODRiN2JiOGU0OTZhM2E3MGE0MTY0ODA2MDAzYTc5Zi4uMzQxYzAzY2VmM2RlM2E0
YzhjNDZlNDUwNTI4YTZhM2M1MGMzNTBiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAK
QEAgLTU3LDExICs1NywxMSBAQCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpzZXRT
aGFyZWRQcm92aWRlcihNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlciYgcAogCiBNZXNzYWdlUG9y
dENoYW5uZWxQcm92aWRlciYgTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6OmZyb21Db250ZXh0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGlzPERvY3VtZW50
Pihjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5t
ZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcigpOworICAgIGlmIChhdXRvIGRvY3VtZW50ID0gZHlu
YW1pY0Rvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50
LT5tZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcigpOwogCi0gICAgaWYgKGlzPFdvcmtsZXRHbG9i
YWxTY29wZT4oY29udGV4dCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxXb3JrbGV0R2xvYmFs
U2NvcGU+KGNvbnRleHQpLm1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyKCk7CisgICAgaWYgKGF1
dG8gd29ya2xldFNjb3BlID0gZHluYW1pY0Rvd25jYXN0PFdvcmtsZXRHbG9iYWxTY29wZT4oY29u
dGV4dCkpCisgICAgICAgIHJldHVybiB3b3JrbGV0U2NvcGUtPm1lc3NhZ2VQb3J0Q2hhbm5lbFBy
b3ZpZGVyKCk7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRl
eHQpLm1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmNwcAppbmRleCA5ODBkZGU4NTFmMTA3MjNkNzhmNjYxOTg0MjczMjQ4ZjdhMGZhNWM0Li43
ZDlkNTliZTFjMTUyZjA5ODVmNWY1MThiYjlmY2NlNTZmODdiYzlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAKQEAgLTMyMSw4ICszMjEsNyBAQCBib29sIGlzSW5saW5lKGNvbnN0IE5v
ZGUqIG5vZGUpCiAvLyBrbm93aW5nIGFib3V0IHRoZXNlIGtpbmRzIG9mIHNwZWNpYWwgY2FzZXMu
CiBFbGVtZW50KiBlbmNsb3NpbmdCbG9jayhOb2RlKiBub2RlLCBFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgcnVsZSkKIHsKLSAgICBOb2RlKiBlbmNsb3NpbmdOb2RlID0gZW5jbG9zaW5nTm9k
ZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIGlzQmxvY2ssIHJ1bGUp
OwotICAgIHJldHVybiBpczxFbGVtZW50PihlbmNsb3NpbmdOb2RlKSA/IGRvd25jYXN0PEVsZW1l
bnQ+KGVuY2xvc2luZ05vZGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0
PEVsZW1lbnQ+KGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KG5vZGUpLCBpc0Jsb2NrLCBydWxlKSk7CiB9CiAKIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAppbmRleCAzOTg5ZDdlN2RlNTUwNzJiMjQyZThl
MzQwNTQxN2ZmNjY5MDdiMjc3Li45ZjNhNjExNDljMDEwZDhkZTcyNTA1YjA3N2ZhMjBjZTFiMWYz
MGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKQEAg
LTE1NSw4ICsxNTUsNyBAQCBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBMYWJlbFRl
eHQoKSBjb25zdAogICAgIAogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRHcm91cEVsZW1lbnQ6
Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgYXV0byogcGFyZW50ID0gcGFyZW50
Tm9kZSgpOwotICAgIHJldHVybiBpczxIVE1MU2VsZWN0RWxlbWVudD4ocGFyZW50KSA/IGRvd25j
YXN0PEhUTUxTZWxlY3RFbGVtZW50PihwYXJlbnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHlu
YW1pY0Rvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PihwYXJlbnROb2RlKCkpOwogfQogCiBib29s
IEhUTUxPcHRHcm91cEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5kZXggODJjMzg5ZTkzY2Jh
OGQ0NmRiMDRlNWI2ZTI0NDhkM2M3NTY5Y2M3MS4uOTFkZDkwZjM3NTQzMDU3ZTcwMzcyNDVjYmU4
ODU4OGY0OTQyNzZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQuY3BwCkBAIC03NCw3ICs3NCw3IEBAIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6On5I
VE1MUGx1Z0luSW1hZ2VFbGVtZW50KCkKIFJlbmRlckVtYmVkZGVkT2JqZWN0KiBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpyZW5kZXJFbWJlZGRlZE9iamVjdCgpIGNvbnN0CiB7CiAgICAgLy8gSFRN
TE9iamVjdEVsZW1lbnQgYW5kIEhUTUxFbWJlZEVsZW1lbnQgbWF5IHJldHVybiBhcmJpdHJhcnkg
cmVuZGVyZXJzIHdoZW4gdXNpbmcgZmFsbGJhY2sgY29udGVudC4KLSAgICByZXR1cm4gaXM8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRP
YmplY3Q+KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0
PFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcigpKTsKIH0KIAogYm9vbCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50Ojppc0ltYWdlVHlwZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IGExYmUxMTUw
NWIwZDVmNWYyMzQyN2E0ZjE4NmI2OWM3Y2VhM2ZlOGQuLmI4YjVmYjY1YWNmNDEyZTkzMjI1MjQ1
YTQxYTVkODE4MTU1NWQ2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC03OTQsNyArNzk0LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNyZWF0ZShDYW4KICAgICBib29sIGlzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24gPSBmYWxzZTsKICAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gbnVsbHB0cjsKIAotICAg
IGF1dG8qIGNhbnZhc0VsZW1lbnQgPSBpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSA/ICZk
b3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSA6IG51bGxwdHI7CisgICAgYXV0byog
Y2FudmFzRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFz
KTsKIAogICAgIGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVu
dCA9IGNhbnZhc0VsZW1lbnQtPmRvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmlj
YXRpb24uY3BwCmluZGV4IDNjMTk3MTUwN2JlMzI5ZmM5NjNmMjQ3YjdhNGIwODMzNDYyMDY3MTUu
LjUzMWQyNGM0M2VmYjE0YTI3ODY0ZmY1Zjk2MGUyMTA5OTBjNWRjMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9WZXJpZmljYXRpb24uY3BwCkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGJvb2wg
b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVh
bSYgc3RyZWFtLAogICAgIGZvciAodW5zaWduZWQgaW5saW5lQm94SW5kZXggPSAwOyBpbmxpbmVC
b3hJbmRleCA8IGlubGluZUJveGVzLnNpemUoKSAmJiBib3hJbmRleCA8IGJveGVzLnNpemUoKTsg
KytpbmxpbmVCb3hJbmRleCkgewogICAgICAgICBhdXRvJiBib3ggPSBib3hlc1tib3hJbmRleF07
CiAgICAgICAgIGF1dG8qIGlubGluZUJveCA9IGlubGluZUJveGVzW2lubGluZUJveEluZGV4XTsK
LSAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9IGlzPFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g+KGlubGluZUJveCkgPyBkb3duY2FzdDxXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94
PihpbmxpbmVCb3gpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9IGR5
bmFtaWNEb3duY2FzdDxXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpOwog
ICAgICAgICBib29sIG1hdGNoaW5nUnVucyA9IGlubGluZVRleHRCb3ggPyBjaGVja0Zvck1hdGNo
aW5nVGV4dFJ1bnMoYm94LCAqaW5saW5lVGV4dEJveCkgOiBjaGVja0Zvck1hdGNoaW5nTm9uVGV4
dFJ1bnMoYm94LCAqaW5saW5lQm94KTsKIAogICAgICAgICBpZiAoIW1hdGNoaW5nUnVucykgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcAppbmRleCBiMDBj
NTE4MmFmMjk1MTM0NmE3ZTYyZDlkYmY5OTI1NjE3MWEyOGJlLi4zNDRjZGZiMzg5MWExNzMyYTUw
Mzg3NWFkZmEzMTgyYzUyMmRlOTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1
dG9zY3JvbGxDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3Jv
bGxDb250cm9sbGVyLmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgQXV0b3Njcm9sbENvbnRy
b2xsZXI6OnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpCiAKICAgICB3aGlsZSAocmVuZGVyZXIg
JiYgIShpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVu
ZGVyZXIpLmNhbkF1dG9zY3JvbGwoKSkpCiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBh
cmVudCgpOwotICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyID0gaXM8UmVuZGVyQm94PihyZW5kZXJl
cikgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKSA6IG51bGxwdHI7CisgICAgbV9hdXRv
c2Nyb2xsUmVuZGVyZXIgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CiB9
CiAKIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xsZXI6OnVwZGF0ZURyYWdBbmREcm9wKE5vZGUqIGRy
b3BUYXJnZXROb2RlLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3NpdGlvbiwgV2FsbFRpbWUgZXZl
bnRUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAppbmRleCA4ODkwNTJlM2E0NTJlMjU2ZTM4
NzgyMzg2N2UzYmI3OGQ1MDU3NDZkLi42NDViNjk5ZDExMmYxMTQ1ZTQxMzA5YmRlNTIxNWMxYjBi
NmVlNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcApAQCAtMzMyLDcgKzMzMiw3IEBAIHZv
aWQgRE9NVGltZXI6OmZpcmVkKCkKICAgICAgICAgbmVzdGVkVGltZXJzLT5zdGFydFRyYWNraW5n
KCk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9DSEFOR0VfT0JTRVJWRVIpCi0gICAgQ29udGVudENo
YW5nZU9ic2VydmVyOjpET01UaW1lclNjb3BlIG9ic2VydmluZ1Njb3BlKGlzPERvY3VtZW50Pihj
b250ZXh0KSA/ICZkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkgOiBudWxscHRyLCAqdGhpcyk7
CisgICAgQ29udGVudENoYW5nZU9ic2VydmVyOjpET01UaW1lclNjb3BlIG9ic2VydmluZ1Njb3Bl
KGR5bmFtaWNEb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksICp0aGlzKTsKICNlbmRpZgogICAg
IG1fYWN0aW9uLT5leGVjdXRlKGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwCmluZGV4IDEzOTk1Njg5MzE5ZDk0MGJhM2JmOWQ0YjQyOGQyNzJhNmEzNWE0MDIu
LmEwMjkyZTg5Yzk5MzQ4OGQ5NDljMDZiZGEwZDFlNDExZWQyODE5NTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0zNDMsOSArMzQzLDkgQEAgc3RhdGljIEhUTUxJ
bnB1dEVsZW1lbnQqIGFzRmlsZUlucHV0KE5vZGUmIG5vZGUpCiAgICAgYXV0byogaW5wdXRFbGVt
ZW50ID0gJmRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpOwogCiAgICAgLy8gSWYgdGhp
cyBpcyBhIGJ1dHRvbiBpbnNpZGUgb2YgdGhlIGEgZmlsZSBpbnB1dCwgbW92ZSB1cCB0byB0aGUg
ZmlsZSBpbnB1dC4KLSAgICBpZiAoaW5wdXRFbGVtZW50LT5pc1RleHRCdXR0b24oKSAmJiBpczxT
aGFkb3dSb290PihpbnB1dEVsZW1lbnQtPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpKSB7Ci0gICAg
ICAgIGF1dG8mIGhvc3QgPSAqZG93bmNhc3Q8U2hhZG93Um9vdD4oaW5wdXRFbGVtZW50LT50cmVl
U2NvcGUoKS5yb290Tm9kZSgpKS5ob3N0KCk7Ci0gICAgICAgIGlucHV0RWxlbWVudCA9IGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KGhvc3QpID8gJmRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGhvc3Qp
IDogbnVsbHB0cjsKKyAgICBpZiAoaW5wdXRFbGVtZW50LT5pc1RleHRCdXR0b24oKSkgeworICAg
ICAgICBpZiAoYXV0byBzaGFkb3dSb290ID0gaW5wdXRFbGVtZW50LT5jb250YWluaW5nU2hhZG93
Um9vdCgpKQorICAgICAgICAgICAgaW5wdXRFbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KHNoYWRvd1Jvb3QtPmhvc3QoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGlu
cHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzRmlsZVVwbG9hZCgpID8gaW5wdXRFbGVtZW50
IDogbnVsbHB0cjsKQEAgLTUwMiwxMiArNTAyLDggQEAgc3RkOjpvcHRpb25hbDxEcmFnT3BlcmF0
aW9uPiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9uRm9yTG9hZChjb25zdCBEcmFnRGF0YSYgZHIK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBv
aW50KGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCkpOwogCiAgICAgYm9vbCBwbHVnaW5Eb2N1bWVu
dEFjY2VwdHNEcmFncyA9IGZhbHNlOwotCi0gICAgaWYgKGlzPFBsdWdpbkRvY3VtZW50Pihkb2N1
bWVudCkpIHsKLSAgICAgICAgY29uc3QgV2lkZ2V0KiB3aWRnZXQgPSBkb3duY2FzdDxQbHVnaW5E
b2N1bWVudD4oKmRvY3VtZW50KS5wbHVnaW5XaWRnZXQoKTsKLSAgICAgICAgY29uc3QgUGx1Z2lu
Vmlld0Jhc2UqIHBsdWdpblZpZXcgPSBpczxQbHVnaW5WaWV3QmFzZT4od2lkZ2V0KSA/IGRvd25j
YXN0PFBsdWdpblZpZXdCYXNlPih3aWRnZXQpIDogbnVsbHB0cjsKLQotICAgICAgICBpZiAocGx1
Z2luVmlldykKKyAgICBpZiAoYXV0byogcGx1Z2luRG9jdW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8
UGx1Z2luRG9jdW1lbnQ+KGRvY3VtZW50KSkgeworICAgICAgICBpZiAoYXV0byogcGx1Z2luVmll
dyA9IGR5bmFtaWNEb3duY2FzdDxQbHVnaW5WaWV3QmFzZT4ocGx1Z2luRG9jdW1lbnQtPnBsdWdp
bldpZGdldCgpKSkKICAgICAgICAgICAgIHBsdWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzID0gcGx1
Z2luVmlldy0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCk7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCA2ZGZlMGRkM2VhNGRhM2ExZjVmMGY2
Yzc5ZDZkMWEzYmYwMGMzMTU5Li45ZTk3ZGQ1ZjY4OWU2YTFhOTBjOTA2OTQ0NWRjM2Y0YjhjNDVl
ODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAgLTgwLDcgKzgwLDcg
QEAgRHJhZ0ltYWdlUmVmIGZpdERyYWdJbWFnZVRvTWF4U2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2Us
IGNvbnN0IEludFNpemUmIGxheW91dFNpemUKIAogc3RydWN0IFNjb3BlZE5vZGVEcmFnRW5hYmxl
ciB7CiAgICAgU2NvcGVkTm9kZURyYWdFbmFibGVyKEZyYW1lJiBmcmFtZSwgTm9kZSYgbm9kZSkK
LSAgICAgICAgOiBlbGVtZW50KGlzPEVsZW1lbnQ+KG5vZGUpID8gJmRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUpIDogbnVsbHB0cikKKyAgICAgICAgOiBlbGVtZW50KGR5bmFtaWNEb3duY2FzdDxFbGVt
ZW50Pihub2RlKSkKICAgICB7CiAgICAgICAgIGlmIChlbGVtZW50KQogICAgICAgICAgICAgZWxl
bWVudC0+c2V0QmVpbmdEcmFnZ2VkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQppbmRleCAyYTRjOTFiNTM2OWZlYzU4
ZDljOWQ5NGU5ZmI0MjQ2ZDNjYmVmOTM4Li5lNjFhM2E3ZmNjOTYzNzk4ZjY4OThjMDEyN2JkNzRi
YjMzMGJmN2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQy5tbQpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgU291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakM6OnNldENETVNlc3Npb24oQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2Jq
Qyogc2VzCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRDRE1JbnN0YW5jZShD
RE1JbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
SEFWRShBVkNPTlRFTlRLRVlTRVNTSU9OKQotICAgIGF1dG8qIGZwc0luc3RhbmNlID0gaXM8Q0RN
SW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakM+KGluc3RhbmNlKSA/IGRvd25jYXN0PENE
TUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDPihpbnN0YW5jZSkgOiBudWxscHRyOwor
ICAgIGF1dG8qIGZwc0luc3RhbmNlID0gZHluYW1pY0Rvd25jYXN0PENETUluc3RhbmNlRmFpclBs
YXlTdHJlYW1pbmdBVkZPYmpDPihpbnN0YW5jZSk7CiAgICAgaWYgKGZwc0luc3RhbmNlID09IG1f
Y2RtSW5zdGFuY2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCmluZGV4IDJjZGRlZGIxNWVmMGFlNDg3ODNj
YzFjYTdiMzQ0ZmIwMjQzNDUwMmUuLjdiNDZmMzk4YmQxMmE4OWVhNTlmZDc2YjY1OTI2YTI4NDE4
Mzg1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVG
bG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxv
d0JveC5jcHAKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OmNv
bXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhMZWdhY3lSb290SW5saW5lQm94JiByb290Qm94LAogICAg
ICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsgLy8gUG9zaXRpb25lZCBwbGFjZWhvbGRlcnMgZG9uJ3QgYWZmZWN0
IGNhbGN1bGF0aW9ucy4KICAgICAgICAgCi0gICAgICAgIExlZ2FjeUlubGluZUZsb3dCb3gqIGlu
bGluZUZsb3dCb3ggPSBpczxMZWdhY3lJbmxpbmVGbG93Qm94PigqY2hpbGQpID8gZG93bmNhc3Q8
TGVnYWN5SW5saW5lRmxvd0JveD4oY2hpbGQpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0byogaW5s
aW5lRmxvd0JveCA9IGR5bmFtaWNEb3duY2FzdDxMZWdhY3lJbmxpbmVGbG93Qm94PigqY2hpbGQp
OwogICAgICAgICAKICAgICAgICAgYm9vbCBhZmZlY3RzQXNjZW50ID0gZmFsc2U7CiAgICAgICAg
IGJvb2wgYWZmZWN0c0Rlc2NlbnQgPSBmYWxzZTsKQEAgLTY2Nyw3ICs2NjcsNyBAQCBzdGF0aWMg
dm9pZCBwbGFjZUNoaWxkSW5saW5lQm94ZXNJbkJsb2NrRGlyZWN0aW9uKExlZ2FjeUlubGluZUZs
b3dCb3gmIGlubGluZUJveAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAg
ICAgICBMZWdhY3lJbmxpbmVGbG93Qm94KiBpbmxpbmVGbG93Qm94ID0gaXM8TGVnYWN5SW5saW5l
Rmxvd0JveD4oKmNoaWxkKSA/IGRvd25jYXN0PExlZ2FjeUlubGluZUZsb3dCb3g+KGNoaWxkKSA6
IG51bGxwdHI7CisgICAgICAgIGF1dG8qIGlubGluZUZsb3dCb3ggPSBkeW5hbWljRG93bmNhc3Q8
TGVnYWN5SW5saW5lRmxvd0JveD4oKmNoaWxkKTsKICAgICAgICAgYm9vbCBjaGlsZEFmZmVjdHNU
b3BCb3R0b21Qb3MgPSB0cnVlOwogCiAgICAgICAgIGlmIChjaGlsZC0+dmVydGljYWxBbGlnbigp
ID09IFZlcnRpY2FsQWxpZ246OlRvcCAmJiB2ZXJ0aWNhbEFsaWduQXBwbGllcyhjaGlsZC0+cmVu
ZGVyZXIoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
CmluZGV4IDNlN2UwY2NlMTU5MjA0M2E4ZWIxNDk5MDg0MDYyNjA3OTA0Y2Y0ZjAuLjg0MmJlMWIz
MjlmMmI2N2MxYTg3ZjU0MWI4MTJjNzFjZDliNTliNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTWFyZ2luSW5m
byYgbWFyZ2luSW5mbywKICAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGQsIGxvZ2ljYWxU
b3BFc3RpbWF0ZSwgQXBwbHlMYXlvdXREZWx0YSk7CiAgICAgZXN0aW1hdGVGcmFnbWVudFJhbmdl
Rm9yQm94Q2hpbGQoY2hpbGQpOwogCi0gICAgUmVuZGVyQmxvY2tGbG93KiBjaGlsZEJsb2NrRmxv
dyA9IGlzPFJlbmRlckJsb2NrRmxvdz4oY2hpbGQpID8gJmRvd25jYXN0PFJlbmRlckJsb2NrRmxv
dz4oY2hpbGQpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBjaGlsZEJsb2NrRmxvdyA9IGR5bmFtaWNE
b3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKTsKICAgICBib29sIG1hcmtEZXNjZW5kYW50
c1dpdGhGbG9hdHMgPSBmYWxzZTsKICAgICBpZiAobG9naWNhbFRvcEVzdGltYXRlICE9IG9sZExv
Z2ljYWxUb3AgJiYgIWNoaWxkLmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93ICYmIGNo
aWxkQmxvY2tGbG93LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJrRGVzY2VuZGFudHNX
aXRoRmxvYXRzID0gdHJ1ZTsKQEAgLTk5Myw3ICs5OTMsNyBAQCBSZW5kZXJCbG9ja0Zsb3c6Ok1h
cmdpblZhbHVlcyBSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpblZhbHVlc0ZvckNoaWxkKFJlbmRlckJv
eCYgYwogICAgIExheW91dFVuaXQgYmVmb3JlTWFyZ2luOwogICAgIExheW91dFVuaXQgYWZ0ZXJN
YXJnaW47CiAKLSAgICBSZW5kZXJCbG9ja0Zsb3cqIGNoaWxkUmVuZGVyQmxvY2sgPSBpczxSZW5k
ZXJCbG9ja0Zsb3c+KGNoaWxkKSA/ICZkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKSA6
IG51bGxwdHI7CisgICAgYXV0byogY2hpbGRSZW5kZXJCbG9jayA9IGR5bmFtaWNEb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKTsKICAgICAKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRo
ZSBzYW1lIGRpcmVjdGlvbmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBqdXN0IHJldHVybiBp
dHMKICAgICAvLyBtYXJnaW5zIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KQEAgLTE0NzEsNyArMTQ3
MSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUFmdGVyQnJlYWsoUmVuZGVy
Qm94JiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsCiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2tG
bG93OjphZGp1c3RCbG9ja0NoaWxkRm9yUGFnaW5hdGlvbihMYXlvdXRVbml0IGxvZ2ljYWxUb3BB
ZnRlckNsZWFyLCBMYXlvdXRVbml0IGVzdGltYXRlV2l0aG91dFBhZ2luYXRpb24sIFJlbmRlckJv
eCYgY2hpbGQsIGJvb2wgYXRCZWZvcmVTaWRlT2ZCbG9jaykKIHsKLSAgICBSZW5kZXJCbG9jayog
Y2hpbGRSZW5kZXJCbG9jayA9IGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyAmZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7CisgICAgYXV0byogY2hpbGRSZW5kZXJCbG9jayA9
IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpOwogCiAgICAgaWYgKGVzdGltYXRl
V2l0aG91dFBhZ2luYXRpb24gIT0gbG9naWNhbFRvcEFmdGVyQ2xlYXIpIHsKICAgICAgICAgLy8g
T3VyIGd1ZXNzIHByaW9yIHRvIHBhZ2luYXRpb24gbW92ZW1lbnQgd2FzIHdyb25nLiBCZWZvcmUg
d2UgYXR0ZW1wdCB0byBwYWdpbmF0ZSwgbGV0J3MgdHJ5IGFnYWluIGF0IHRoZSBuZXcKQEAgLTI0
OTYsNyArMjQ5Niw3IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0cygp
CiAgICAgICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQgdGhhdCBp
cyBtYWtpbmcgdXMgbW92ZSBkb3duIGZ1cnRoZXIuCiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
YW4gdW5zcGxpdHRhYmxlIGNoaWxkIGNhbid0IGFsc28gaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQs
IHNvIHRoaXMKICAgICAgICAgICAgIC8vIGlzIGV4Y2x1c2l2ZSB3aXRoIHRoZSBjYXNlIGFib3Zl
LgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSBpczxSZW5kZXJCbG9jaz4o
Y2hpbGRCb3gpID8gJmRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZEJveCkgOiBudWxscHRyOwor
ICAgICAgICAgICAgYXV0byogY2hpbGRCbG9jayA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCbG9j
az4oY2hpbGRCb3gpOwogICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2sgJiYgY2hpbGRCbG9jay0+
cGFnaW5hdGlvblN0cnV0KCkpIHsKICAgICAgICAgICAgICAgICBuZXdMb2dpY2FsVG9wICs9IGNo
aWxkQmxvY2stPnBhZ2luYXRpb25TdHJ1dCgpOwogICAgICAgICAgICAgICAgIGNoaWxkQmxvY2st
PnNldFBhZ2luYXRpb25TdHJ1dCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKaW5kZXggYzI4MWM2MzliZGI3NzIxYTUwODBiZTA4OGJhYWI5YjYwZWE4YzcxNy4uNTVmOGRm
MzNiYzNkZTVkZWZhOGZiNThkZDc3YTk0NmNmZjgxNjYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKQEAgLTEwNTcsNyArMTA1Nyw3IEBAIFJlbmRlckJveCogUmVuZGVy
Qm94OjpmaW5kQXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAg
ICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogICAgIH0KIAotICAgIHJldHVybiBp
czxSZW5kZXJCb3g+KHJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpIDog
bnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIp
OwogfQogCiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZTc5ZTBm
ZDcwNWNkYWQ3MWJiMWVjZDQyNjAyNGM2Y2YxODAyNTQ2NC4uMjYzYzVkYzlmZWM0YTk1NTI3NDVh
ZGIxMTNiYWRlN2ViNjA3ZDkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcApAQCAtMjE2Nyw3ICsyMTY3LDcgQEAgYm9vbCBSZW5kZXJFbGVtZW50OjpjaGVj
a0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSBjb25zdAogCiBJbWFnZU9yaWVudGF0aW9uIFJlbmRl
ckVsZW1lbnQ6OmltYWdlT3JpZW50YXRpb24oKSBjb25zdAogewotICAgIGF1dG8qIGltYWdlRWxl
bWVudCA9IGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgPyBkb3duY2FzdDxIVE1MSW1h
Z2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBpbWFnZUVsZW1lbnQg
PSBkeW5hbWljRG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKTsKICAgICByZXR1
cm4gKGltYWdlRWxlbWVudCAmJiAhaW1hZ2VFbGVtZW50LT5hbGxvd3NPcmllbnRhdGlvbk92ZXJy
aWRlKCkpID8gSW1hZ2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpIDog
c3R5bGUoKS5pbWFnZU9yaWVudGF0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCmluZGV4IDg3ODVmMjI5OWM4
MGQzOTQ2ZThmZmQyMTY2MmQwMjkyMTk0NjMxZjcuLjg3NTA2OTNiZDJhNjg4YmU5NGU4YTcwOWQ3
YmQ0NmNiNjM0M2QyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpbGVVcGxvYWRDb250cm9sLmNwcApAQCAtMjQzLDggKzI0Myw3IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlv
dXRQb2ludCYsIGNvCiBIVE1MSW5wdXRFbGVtZW50KiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
dXBsb2FkQnV0dG9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaW5wdXRFbGVtZW50KCkuc2hhZG93
Um9vdCgpKTsKLSAgICBOb2RlKiBidXR0b25Ob2RlID0gaW5wdXRFbGVtZW50KCkuc2hhZG93Um9v
dCgpLT5maXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGJ1dHRv
bk5vZGUpID8gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oYnV0dG9uTm9kZSkgOiBudWxscHRy
OworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oaW5wdXRFbGVt
ZW50KCkuc2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCkpOwogfQogCiBTdHJpbmcgUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OmJ1dHRvblZhbHVlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2UuY3BwCmluZGV4IGY5MjEzZTJmMzU3MTQ4ZjE0MGM0ZDQxMGQwZTExNDE3ZDc2ZjBi
OTIuLjA1MDBmODk1ZmUwZjgzNWEyNGFhMWU3YzMxNTM2MGQyZmVkODRlOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQg
UmVuZGVySW1hZ2U6OnVwZGF0ZUlubmVyQ29udGVudFJlY3QoKQogICAgIEludFNpemUgY29udGFp
bmVyU2l6ZShyZXBsYWNlZENvbnRlbnRSZWN0KCkuc2l6ZSgpKTsKICAgICBpZiAoIWNvbnRhaW5l
clNpemUuaXNFbXB0eSgpKSB7CiAgICAgICAgIFVSTCBpbWFnZVNvdXJjZVVSTDsKLSAgICAgICAg
aWYgKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IGlzPEhUTUxJbWFnZUVsZW1lbnQ+
KGVsZW1lbnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVs
bHB0cikKKyAgICAgICAgaWYgKGF1dG8qIGltYWdlRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpKQogICAgICAgICAgICAgaW1hZ2VTb3VyY2VVUkwg
PSBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC0+aW1hZ2VTb3VyY2VVUkwoKSk7
CiAgICAgICAgIGltYWdlUmVzb3VyY2UoKS5zZXRDb250YWluZXJDb250ZXh0KGNvbnRhaW5lclNp
emUsIGltYWdlU291cmNlVVJMKTsKICAgICB9CkBAIC02NjYsNyArNjY2LDcgQEAgSW1hZ2VEcmF3
UmVzdWx0IFJlbmRlckltYWdlOjpwYWludEludG9SZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBGbG9hdFJlY3QKICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwogCi0gICAgSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2VFbGVtZW50ID0gaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA/IGRvd25j
YXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgOiBudWxscHRyOworICAgIGF1dG8qIGlt
YWdlRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkp
OwogCiAgICAgLy8gRklYTUU6IERvY3VtZW50IHdoZW4gaW1hZ2UgIT0gaW1nLmdldCgpLgogICAg
IEltYWdlKiBpbWFnZSA9IGltYWdlUmVzb3VyY2UoKS5pbWFnZSgpLmdldCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBkNGQ3YzVjNDQyNmM1OTJjN2Ez
NWY2N2M1ZmQyMjA4NjJhZTcyZjY4Li42YTlhMzkxMDAzZjJlMDA4YjJhZWFjZjc3ZjI0Zjg3YWQz
ZWE1MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAt
MjAzLDcgKzIwMyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiBib29sIFJlbmRlcklubGlu
ZTo6bWF5QWZmZWN0TGF5b3V0KCkgY29uc3QKIHsKICAgICBhdXRvKiBwYXJlbnRTdHlsZSA9ICZw
YXJlbnQoKS0+c3R5bGUoKTsKLSAgICBSZW5kZXJJbmxpbmUqIHBhcmVudFJlbmRlcklubGluZSA9
IGlzPFJlbmRlcklubGluZT4oKnBhcmVudCgpKSA/IGRvd25jYXN0PFJlbmRlcklubGluZT4ocGFy
ZW50KCkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBwYXJlbnRSZW5kZXJJbmxpbmUgPSBkeW5hbWlj
RG93bmNhc3Q8UmVuZGVySW5saW5lPigqcGFyZW50KCkpOwogICAgIGF1dG8gaGFzSGFyZExpbmVC
cmVha0NoaWxkT25seSA9IGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCkgPT0gbGFzdENoaWxk
KCkgJiYgZmlyc3RDaGlsZCgpLT5pc0JSKCk7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1l
bnQoKS5pbk5vUXVpcmtzTW9kZSgpOwogICAgIGF1dG8gbWF5QWZmZWN0TGF5b3V0ID0gKHBhcmVu
dFJlbmRlcklubGluZSAmJiBwYXJlbnRSZW5kZXJJbmxpbmUtPm1heUFmZmVjdExheW91dCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAyYjA0NTFhZWNiNjEwOWIw
YTJkYzhlNGI4NWE3MDMyYzQyOTIzZWFmLi40YzUwMzVlMDYwYTU4ZGUxOTVlMjlhNzY4OWJlYjIz
ZDgyOTcyZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMTY5
LDcgKzE2OSw3IEBAIHB1YmxpYzoKIAogICAgIFBhZ2UmIHBhZ2UoKSBjb25zdCB7IHJldHVybiBy
ZW5kZXJlcigpLnBhZ2UoKTsgfQogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotICAgIFJlbmRlckJveCogcmVuZGVyQm94
KCkgY29uc3QgeyByZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSA/ICZkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsgfQorICAgIFJlbmRlckJveCogcmVuZGVy
Qm94KCkgY29uc3QgeyByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIo
KSk7IH0KIAogICAgIFJlbmRlckxheWVyKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVu
dDsgfQogICAgIFJlbmRlckxheWVyKiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBt
X3ByZXZpb3VzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGluZUJveExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hM
aXN0LmNwcAppbmRleCA2ZTEzZjNhYTM0YTI0ODhmNjUwNjIxNTQyOTc3NWZiZjI2NTE3NDdjLi4z
OTgxYjAxNmMyMWIyZWZkMGU1NGMxMjRjNDBjMWUyMjRiMzQ3MmE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKQEAgLTMxMCw3ICszMTAsNyBA
QCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChSZW5k
ZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbgogICAgIGlmICghY29udGFpbmVyLnBhcmVudCgpIHx8
IChpczxSZW5kZXJCbG9ja0Zsb3c+KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLnNlbGZOZWVkc0xh
eW91dCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVySW5saW5lKiBpbmxpbmVDb250
YWluZXIgPSBpczxSZW5kZXJJbmxpbmU+KGNvbnRhaW5lcikgPyAmZG93bmNhc3Q8UmVuZGVySW5s
aW5lPihjb250YWluZXIpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBpbmxpbmVDb250YWluZXIgPSBk
eW5hbWljRG93bmNhc3Q8UmVuZGVySW5saW5lPihjb250YWluZXIpOwogICAgIExlZ2FjeUlubGlu
ZUJveCogZmlyc3RCb3ggPSBpbmxpbmVDb250YWluZXIgPyBpbmxpbmVDb250YWluZXItPmZpcnN0
TGluZUJveCgpIDogZmlyc3RMaW5lQm94KCk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGZpcnN0
IGxpbmUgYm94LCB0aGVuIGp1c3QgYmFpbCBlYXJseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCmluZGV4IGFlMjgyMmM2ZWRlYTY5NmMwOGQ2YjM5MTU1NWY3
YzUyMzZiNjQyZjguLjViZGRlMjJkODY4OWIzYjVhNTQ1MzVkNDdiY2NiNDg4ZmU1NTIyZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcApAQCAtMjEwLDcg
KzIxMCw3IEBAIHVuc2lnbmVkIFJlbmRlckxpc3RJdGVtOjppdGVtQ291bnRGb3JPcmRlcmVkTGlz
dChjb25zdCBIVE1MT0xpc3RFbGVtZW50JiBsaXN0KQogdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBk
YXRlVmFsdWVOb3coKSBjb25zdAogewogICAgIGF1dG8qIGxpc3QgPSBlbmNsb3NpbmdMaXN0KCp0
aGlzKTsKLSAgICBhdXRvKiBvcmRlcmVkTGlzdCA9IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3Qp
ID8gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkgOiBudWxscHRyOworICAgIGF1dG8q
IG9yZGVyZWRMaXN0ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpOwog
CiAgICAgLy8gVGhlIHN0YXJ0IGl0ZW0gaXMgZWl0aGVyIHRoZSBjbG9zZXN0IGl0ZW0gYmVmb3Jl
IHRoaXMgb25lIGluIHRoZSBsaXN0IHRoYXQgYWxyZWFkeSBoYXMgYSB2YWx1ZSwKICAgICAvLyBv
ciB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBpZiBub25lIGhhdmUgYmVmb3JlIHRoaXMgaGF2
ZSB2YWx1ZXMgeWV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApp
bmRleCA1MDQ1MDI0ODhkODRkYTkxNWE0ZDIxMDc3ZThjOGNhOWE5ZmZlNGNiLi44Mzc3YWFmMTg3
ZTg4ZDNmY2JhZTNmODczOGE4NTM5YWNlZGVmZmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTc4MSw3ICsxNzgxLDcgQEAgUmVuZGVyQm94TW9kZWxP
YmplY3QqIFJlbmRlck9iamVjdDo6b2Zmc2V0UGFyZW50KCkgY29uc3QKICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnBhcmVudCgpOwogICAgIH0KIAotICAgIHJldHVybiBpczxSZW5kZXJCb3hN
b2RlbE9iamVjdD4oY3VycmVudCkgPyBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oY3Vy
cmVudCkgOiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94TW9k
ZWxPYmplY3Q+KGN1cnJlbnQpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0Ojpj
cmVhdGVWaXNpYmxlUG9zaXRpb24oaW50IG9mZnNldCwgQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAppbmRleCA4MjU3
Mzc2OGJmNDZkMGVkMTI2MWU2OTJmNjU2YmFmMWQ2YjE5YjIyLi5mM2EzMDE1ZGVjYjdlZmE2OWRh
NmEwZjE3NjU1YTRlOGI5ZjEyOTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCBSZW5kZXJUYWJsZSogUmVuZGVyVGFi
bGVDb2w6OnRhYmxlKCkgY29uc3QKICAgICBhdXRvIHRhYmxlID0gcGFyZW50KCk7CiAgICAgaWYg
KHRhYmxlICYmICFpczxSZW5kZXJUYWJsZT4oKnRhYmxlKSkKICAgICAgICAgdGFibGUgPSB0YWJs
ZS0+cGFyZW50KCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRlclRhYmxlPih0YWJsZSkgPyBkb3duY2Fz
dDxSZW5kZXJUYWJsZT4odGFibGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25j
YXN0PFJlbmRlclRhYmxlPih0YWJsZSk7CiB9CiAKIFJlbmRlclRhYmxlQ29sKiBSZW5kZXJUYWJs
ZUNvbDo6ZW5jbG9zaW5nQ29sdW1uR3JvdXAoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDAwZjU3MjQzYzU1ZDYxZWZhMjk2MTI0
ZWIzYjc4M2VlNGYxZWEwOGYuLjM4Njc3ZWZjYTcyNDg4NWViM2YzZmFmNzFiYTFmYWE5NGIxNGY1
YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAK
QEAgLTQ3Myw3ICs0NzMsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2Jq
ZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sCiB2b2lkIHdyaXRlRGVi
dWdJbmZvKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgT3B0aW9u
U2V0PFJlbmRlckFzVGV4dEZsYWc+IGJlaGF2aW9yKQogewogICAgIGlmIChiZWhhdmlvci5jb250
YWlucyhSZW5kZXJBc1RleHRGbGFnOjpTaG93SURBbmRDbGFzcykpIHsKLSAgICAgICAgaWYgKEVs
ZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50PihvYmplY3Qubm9kZSgpKSA/IGRvd25jYXN0PEVs
ZW1lbnQ+KG9iamVjdC5ub2RlKCkpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoYXV0byogZWxl
bWVudCA9IGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihvYmplY3Qubm9kZSgpKSkgewogICAgICAg
ICAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBpZD1c
IiIgPDwgZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA8PCAiXCIiOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggNjBmZmIxNzA2NWMzMGI3OTQzYjkzZThjZmE3
NTI1NDI5MmMwYmRmOC4uMTdkZjkxZDZjZjA0NjFlN2E4MzBlMzA0NDZlNmFiNzQ5OWI2YmViYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtMzk5LDcgKzM5OSw3
IEBAIHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQogICAgIEVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9
IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKFJlbmRlckVsZW1lbnQqIHJv
b3RSZW5kZXJlciA9IGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC0+cmVuZGVyZXIo
KSA6IG51bGxwdHIpIHsKICAgICAgICAgLy8gVGhlIGRvY3VtZW50IGVsZW1lbnQncyByZW5kZXJl
ciBpcyBjdXJyZW50bHkgZm9yY2VkIHRvIGJlIGEgYmxvY2ssIGJ1dCBtYXkgbm90IGFsd2F5cyBi
ZS4KLSAgICAgICAgUmVuZGVyQm94KiByb290Qm94ID0gaXM8UmVuZGVyQm94Pigqcm9vdFJlbmRl
cmVyKSA/IGRvd25jYXN0PFJlbmRlckJveD4ocm9vdFJlbmRlcmVyKSA6IG51bGxwdHI7CisgICAg
ICAgIGF1dG8qIHJvb3RCb3ggPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94Pigqcm9vdFJlbmRl
cmVyKTsKICAgICAgICAgcm9vdEZpbGxzVmlld3BvcnQgPSByb290Qm94ICYmICFyb290Qm94LT54
KCkgJiYgIXJvb3RCb3gtPnkoKSAmJiByb290Qm94LT53aWR0aCgpID49IHdpZHRoKCkgJiYgcm9v
dEJveC0+aGVpZ2h0KCkgPj0gaGVpZ2h0KCk7CiAgICAgICAgIHJvb3RPYnNjdXJlc0JhY2tncm91
bmQgPSByZW5kZXJlck9ic2N1cmVzQmFja2dyb3VuZCgqcm9vdFJlbmRlcmVyKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCmluZGV4
IDFhZmMxZTBhYTUwMTIxNjQ5ZTczYTJiYmYyMDI5YjRhMjczYTZjNDkuLmZiZTk2MjA1YTcwNDY5
ODcxN2I3YjU0ZWQ4YmUzNjRjNDdjYmY2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCkBAIC03NCw4ICs3NCw3IEBAIHN0YXRpYyBib29s
IGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
LCBjb25zdCBSZW5kCiAKIHN0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrQmVsb3dW
aWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgYXV0byogY29udGFpbmlu
Z0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRl
clZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmluZ0Jsb2NrOworICAg
IHJldHVybiBkeW5hbWljRG93bmNhc3Q8UmVuZGVyVmlldz4ocmVuZGVyZXIuY29udGFpbmluZ0Js
b2NrKCkpOwogfQogCiBzdGF0aWMgU2VsZWN0aW9uQ29udGV4dCBjb2xsZWN0U2VsZWN0aW9uRGF0
YShjb25zdCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVl
QnVpbGRlci5jcHAKaW5kZXggNDM3Yzk5OTdmZGJjZDMzNTMxYmQwOTk1MzU4ODY2ODU0MzAyOGI1
Yy4uNjhjNjI3OTgzMjAyODcyZjRjZGY5YWVmMzkwODgwZmI1ZTBlMzYzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIu
Y3BwCkBAIC02MjUsNyArNjI1LDcgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6bm9ybWFsaXpl
VHJlZUFmdGVyU3R5bGVDaGFuZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFIKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJl
bmRlckJsb2NrRmxvdz4oKm5ld1BhcmVudCkubXVsdGlDb2x1bW5GbG93KCktPnNwYW5uZXJNYXAo
KS5jb250YWlucygmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikpKTsKICAgICAgICAgICAg
ICAgICAgICAgbmV3RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9j
a0Zsb3c+KCpuZXdQYXJlbnQpLm11bHRpQ29sdW1uRmxvdygpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gbmV3RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3cgIT0gY3Vy
cmVudEVuY2xvc2luZ0ZyYWdtZW50ICYmIGlzPFJlbmRlck11bHRpQ29sdW1uRmxvdz4obmV3RW5j
bG9zaW5nRnJhZ21lbnRlZEZsb3cpID8gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93Pihu
ZXdFbmNsb3NpbmdGcmFnbWVudGVkRmxvdykgOiBudWxscHRyOworICAgICAgICAgICAgICAgIHJl
dHVybiBuZXdFbmNsb3NpbmdGcmFnbWVudGVkRmxvdyAhPSBjdXJyZW50RW5jbG9zaW5nRnJhZ21l
bnQgPyBkeW5hbWljRG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93PihuZXdFbmNsb3NpbmdG
cmFnbWVudGVkRmxvdykgOiBudWxscHRyOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGlm
IChhdXRvKiBuZXdFbmNsb3NpbmdNdWx0aUNvbHVtbiA9IG5ld011bHRpQ29sdW1uRm9yUmVuZGVy
ZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIExldCB0aGUgZnJhZ21lbnRlZCBmbG93IGtub3cg
dGhhdCBpdCBoYXMgYSBuZXcgaW4tZmxvdyBkZXNjZW5kYW50LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKaW5kZXgg
ZTFiZWEwY2MyZDI3Mzc3YjNlNzFiMzBlYjJjMWY2ZjI4MjdiYjlmZi4uMzkwNGRhNDk0NDc3NTc0
OGNiMjdkZjVkMTEwZDI5YWM5NzY5ZmY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCkBAIC02NSw3ICs2NSw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlclRyZWVVcGRhdGVyOjpQYXJlbnQ6OlBh
cmVudChDb250YWluZXJOb2RlJiByb290KQotICAgIDogZWxlbWVudChpczxEb2N1bWVudD4ocm9v
dCkgPyBudWxscHRyIDogZG93bmNhc3Q8RWxlbWVudD4oJnJvb3QpKQorICAgIDogZWxlbWVudChk
eW5hbWljRG93bmNhc3Q8RWxlbWVudD4ocm9vdCkpCiAgICAgLCByZW5kZXJUcmVlUG9zaXRpb24o
UmVuZGVyVHJlZVBvc2l0aW9uKCpyb290LnJlbmRlcmVyKCkpKQogewogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvQ2hpbGRDaGFuZ2VJbnZhbGlkYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL0NoaWxkQ2hhbmdlSW52YWxpZGF0aW9uLmgKaW5kZXggYWM2ODliYzM1N2Ni
ZWEwNzQ2MjYyYzUwZGJlODk3Njg4NGU4NDZhNC4uODY3MWZmYWNmZTdhNTgzMjA1Yzk2YzEwMDA0
MjYyNzM2NDU2YjdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2hpbGRDaGFu
Z2VJbnZhbGlkYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9DaGlsZENoYW5nZUlu
dmFsaWRhdGlvbi5oCkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiB9OwogCiBpbmxpbmUgQ2hp
bGRDaGFuZ2VJbnZhbGlkYXRpb246OkNoaWxkQ2hhbmdlSW52YWxpZGF0aW9uKENvbnRhaW5lck5v
ZGUmIGNvbnRhaW5lciwgY29uc3QgQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFuZ2UmIGNoaWxkQ2hh
bmdlKQotICAgIDogbV9wYXJlbnRFbGVtZW50KGlzPEVsZW1lbnQ+KGNvbnRhaW5lcikgPyBkb3du
Y2FzdDxFbGVtZW50PigmY29udGFpbmVyKSA6IG51bGxwdHIpCisgICAgOiBtX3BhcmVudEVsZW1l
bnQoZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KGNvbnRhaW5lcikpCiAgICAgLCBtX2NoaWxkQ2hh
bmdlKGNoaWxkQ2hhbmdlKQogICAgICwgbV9pc0VuYWJsZWQobV9wYXJlbnRFbGVtZW50ID8gbV9w
YXJlbnRFbGVtZW50LT5uZWVkc1N0eWxlSW52YWxpZGF0aW9uKCkgOiBmYWxzZSkKICAgICAsIG1f
bmVlZHNIYXNJbnZhbGlkYXRpb24obV9pc0VuYWJsZWQgJiYgU2NvcGU6OmZvck5vZGUoKm1fcGFy
ZW50RWxlbWVudCkudXNlc0hhc1BzZXVkb0NsYXNzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaApp
bmRleCA5N2U2MDg2OTk4MzM4OTQ5OTMyYjIxYjI4NGM5NTU5MDBkOTBkYTZkLi4yZDNhMzMxZThl
ODI1NGU2N2YwYzY3NjJjZDIwNTMyM2ZhOTYwY2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgK
QEAgLTI0NSw2ICsyNDUsNyBAQCBpbmxpbmUgU1ZHRWxlbWVudDo6SW5zdGFuY2VVcGRhdGVCbG9j
a2VyOjp+SW5zdGFuY2VVcGRhdGVCbG9ja2VyKCkKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTVkdFbGVtZW50KQorICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpFdmVudFRhcmdldCYgZXZlbnRUYXJnZXQp
IHsgcmV0dXJuIGV2ZW50VGFyZ2V0LmlzTm9kZSgpICYmIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNv
cmU6Ok5vZGUmPihldmVudFRhcmdldCkuaXNTVkdFbGVtZW50KCk7IH0KICAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc1NWR0Vs
ZW1lbnQoKTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAKaW5kZXggYjNiNmI1Yzg0OTE1MjFiNDdhNzc4ZWZhZjViOTQ5OWY4
NjIwNzZiNS4uNTMwZmYxYjA3YWEyZjkyY2QzNDg2NDE0NTVhOWI1MDA4MzJmNmZhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAtNTcyLDE0ICs1NzIsMTIgQEAgQWZmaW5l
VHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmll
d1dpZHRoLCBmbG9hdCB2aWUKIAogU1ZHVmlld0VsZW1lbnQqIFNWR1NWR0VsZW1lbnQ6OmZpbmRW
aWV3QW5jaG9yKFN0cmluZ1ZpZXcgZnJhZ21lbnRJZGVudGlmaWVyKSBjb25zdAogewotICAgIGF1
dG8qIGFuY2hvckVsZW1lbnQgPSBkb2N1bWVudCgpLmZpbmRBbmNob3IoZnJhZ21lbnRJZGVudGlm
aWVyKTsKLSAgICByZXR1cm4gaXM8U1ZHVmlld0VsZW1lbnQ+KGFuY2hvckVsZW1lbnQpID8gZG93
bmNhc3Q8U1ZHVmlld0VsZW1lbnQ+KGFuY2hvckVsZW1lbnQpOiBudWxscHRyOworICAgIHJldHVy
biBkeW5hbWljRG93bmNhc3Q8U1ZHVmlld0VsZW1lbnQ+KGRvY3VtZW50KCkuZmluZEFuY2hvcihm
cmFnbWVudElkZW50aWZpZXIpKTsKIH0KIAogU1ZHU1ZHRWxlbWVudCogU1ZHU1ZHRWxlbWVudDo6
ZmluZFJvb3RBbmNob3IoY29uc3QgU1ZHVmlld0VsZW1lbnQqIHZpZXdFbGVtZW50KSBjb25zdAog
ewotICAgIGF1dG8qIHZpZXdwb3J0RWxlbWVudCA9IFNWR0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdw
b3J0RWxlbWVudCh2aWV3RWxlbWVudCk7Ci0gICAgcmV0dXJuIGlzPFNWR1NWR0VsZW1lbnQ+KHZp
ZXdwb3J0RWxlbWVudCkgPyBkb3duY2FzdDxTVkdTVkdFbGVtZW50Pih2aWV3cG9ydEVsZW1lbnQp
IDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFNWR1NWR0VsZW1lbnQ+KFNW
R0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCh2aWV3RWxlbWVudCkpOwogfQogCiBT
VkdTVkdFbGVtZW50KiBTVkdTVkdFbGVtZW50OjpmaW5kUm9vdEFuY2hvcihTdHJpbmdWaWV3IGZy
YWdtZW50SWRlbnRpZmllcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApp
bmRleCAzNWE2NmUwOTVlNzVhMTM0NzljN2IxYzU2MmNlMTE5MWFiMWVlMTk0Li43ZDhhZDc5Zjhl
NTQ4ZWZmNjkzMDA4YmRhNTZhOWIyNDI1OTNhYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCkBAIC05NTcsMTUgKzk1NywxMyBAQCBzdGF0aWMgSW1hZ2UqIGltYWdlRnJvbUlt
YWdlRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQogCiBzdGF0aWMgQml0bWFwSW1h
Z2UqIGJpdG1hcEltYWdlRnJvbUltYWdlRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50
KQogewotICAgIGF1dG8qIGltYWdlID0gaW1hZ2VGcm9tSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwot
ICAgIHJldHVybiBpbWFnZSAmJiBpczxCaXRtYXBJbWFnZT4oaW1hZ2UpID8gJmRvd25jYXN0PEJp
dG1hcEltYWdlPigqaW1hZ2UpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0
PEJpdG1hcEltYWdlPihpbWFnZUZyb21JbWFnZUVsZW1lbnQoZWxlbWVudCkpOwogfQogCiAjaWYg
VVNFKENHKQogc3RhdGljIFBERkRvY3VtZW50SW1hZ2UqIHBkZkRvY3VtZW50SW1hZ2VGcm9tSW1h
Z2VFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgYXV0byogaW1hZ2Ug
PSBpbWFnZUZyb21JbWFnZUVsZW1lbnQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGltYWdlICYmIGlz
PFBERkRvY3VtZW50SW1hZ2U+KGltYWdlKSA/ICZkb3duY2FzdDxQREZEb2N1bWVudEltYWdlPigq
aW1hZ2UpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFBERkRvY3VtZW50
SW1hZ2U+KGltYWdlRnJvbUltYWdlRWxlbWVudChlbGVtZW50KSk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVl
bk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVs
bFNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IGY4YjE1MmQ2NTA3ZWUwM2FmNjQxOWIzMmQxOWVmZjUz
ZWFhNjVlZTIuLmVmNDk4OTNmMTNjOWM0OWM1ZDBiNThkNDI3YjE1Mzc2ZTA0NjFlMWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5N
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJG
dWxsU2NyZWVuTWFuYWdlci5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4oKQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkK
ICAgICBhdXRvKiBjdXJyZW50UGxheWJhY2tDb250cm9sc0VsZW1lbnQgPSBtX3BhZ2UtPnBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIoKS5jdXJyZW50UGxheWJhY2tDb250cm9sc0VsZW1lbnQoKTsKLSAg
ICBzZXRQSVBTdGFuZGJ5RWxlbWVudChpczxIVE1MVmlkZW9FbGVtZW50PihjdXJyZW50UGxheWJh
Y2tDb250cm9sc0VsZW1lbnQpID8gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oY3VycmVudFBs
YXliYWNrQ29udHJvbHNFbGVtZW50KSA6IG51bGxwdHIpOworICAgIHNldFBJUFN0YW5kYnlFbGVt
ZW50KGR5bmFtaWNEb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PihjdXJyZW50UGxheWJhY2tDb250
cm9sc0VsZW1lbnQpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggNmY0MjhhYWVlZGEy
NjkzNmI1ZTZiZmJlZGY2MmRjODRmN2Q3NTgwZi4uNzJiYzQ4OTEzYmNlODlkOTRmOGE1ZGE4YjJm
ZTJjNWQ5ZmEwYTNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMjU2LDggKzI1Niw3IEBAIFdlYlBheW1l
bnRDb29yZGluYXRvciogV2ViUGFnZTo6cGF5bWVudENvb3JkaW5hdG9yKCkKIHsKICAgICBpZiAo
IW1fcGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byYgY2xpZW50ID0gbV9w
YWdlLT5wYXltZW50Q29vcmRpbmF0b3IoKS5jbGllbnQoKTsKLSAgICByZXR1cm4gaXM8V2ViUGF5
bWVudENvb3JkaW5hdG9yPihjbGllbnQpID8gZG93bmNhc3Q8V2ViUGF5bWVudENvb3JkaW5hdG9y
PigmY2xpZW50KSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxXZWJQYXlt
ZW50Q29vcmRpbmF0b3I+KG1fcGFnZS0+cGF5bWVudENvb3JkaW5hdG9yKCkuY2xpZW50KCkpOwog
fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01V
SUtpdEV4dGVuc2lvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRF
eHRlbnNpb25zLm1tCmluZGV4IDYzNTViNmY5MDMxODAwNTVjYjYwN2E4MGJlNzcwMTM4NGQ4OGRk
N2EuLmI4NDkxMDllNjA4MTJmYmJkYTdiZWYwNGJkM2FmMzkzNGQzNWY4ZTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtMjY3
LDEzICsyNjcsMTAgQEAgLSAoaW50KXN0cnVjdHVyYWxDb21wbGV4aXR5Q29udHJpYnV0aW9uCiAg
ICAgICAgICAgICByZXN1bHQgPSAwOwogICAgICAgICB9IGVsc2UgaWYgKGlzPFdlYkNvcmU6OlJl
bmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSB8fCAoaXM8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikg
JiYgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5lQ29udGludWF0aW9uKCkp
KSB7CiAgICAgICAgICAgICBCT09MIG5vQ29zdCA9IE5POwotICAgICAgICAgICAgaWYgKGlzPFJl
bmRlckJveD4oKnJlbmRlcmVyKSkgewotICAgICAgICAgICAgICAgIFJlbmRlckJveCYgYXNCb3gg
PSByZW5kZXJlci0+ZW5jbG9zaW5nQm94KCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiBwYXJlbnQgPSBhc0JveC5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIHBh
cmVudFJlbmRlckJveCA9IGlzPFJlbmRlckJveD4ocGFyZW50KSA/IGRvd25jYXN0PFJlbmRlckJv
eD4ocGFyZW50KSA6IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudFJlbmRlckJv
eCAmJiBhc0JveC53aWR0aCgpID09IHBhcmVudFJlbmRlckJveC0+d2lkdGgoKSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8gcmVuZGVyQm94ID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4oKnJl
bmRlcmVyKSkgeworICAgICAgICAgICAgICAgIGF1dG8qIHBhcmVudFJlbmRlckJveCA9IGR5bmFt
aWNEb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlckJveC5wYXJlbnQoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudFJlbmRlckJveCAmJiByZW5kZXJCb3gud2lkdGgoKSA9PSBwYXJlbnRSZW5k
ZXJCb3gtPndpZHRoKCkpCiAgICAgICAgICAgICAgICAgICAgIG5vQ29zdCA9IFlFUzsKLSAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXN1bHQgPSAobm9Db3N0
ID8gMCA6IDEpOwogICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5oYXNUcmFuc2Zvcm0oKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVw
cmVzZW50YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxS
ZXByZXNlbnRhdGlvbi5tbQppbmRleCAzOGQ3ZTUzMmQ2ZWFhMGNhYzM4ODYyZjNlMGUxNjlmZTI4
MTI3N2YxLi4zZGIyNDg4ZDYwZWM0MWIwODFmN2E5MTdkMGUyNjFiMjdlNjI0YTI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNl
bnRhdGlvbi5tbQpAQCAtMzAxLDcgKzMwMSw3IEBAIC0gKERPTUVsZW1lbnQgKillbGVtZW50V2l0
aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpbkZvcm06KERPTUVsZW1lbnQgKilmb3JtCiBzdGF0aWMg
SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBFbGVtZW50KiBub2RlID0gY29yZShlbGVtZW50KTsKLSAgICByZXR1
cm4gaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkgPyBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
Pihub2RlKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50Pihub2RlKTsKIH0KIAogLSAoQk9PTCllbGVtZW50RG9lc0F1dG9Db21wbGV0ZTooRE9N
RWxlbWVudCAqKWVsZW1lbnQK
</data>
<flag name="commit-queue"
          id="475309"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449272</attachid>
            <date>2022-01-15 14:51:15 -0800</date>
            <delta_ts>2022-01-15 17:34:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235259-20220115145114.patch</filename>
            <type>text/plain</type>
            <size>81923</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDYxNGUzMjY5OGYzZTJjMGVmY2ZhMmI0
NjJjZjQwYzI0NDNhZGNjNWMuLjVkMzRhNGM3Yzk0ZTJiMjk5NDdkOGZkYzg4YjdiMTdlMDUyNjU0
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDEtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgZHluYW1pY0Rvd25jYXN0PD4oKSBmb3Ig
Y29udmVuaWVuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNTI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IEludHJvZHVjZSBkeW5hbWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5jZS4gSXQgY2FuIHJl
c3VsdCBpbiBtb3JlIGNvbmNpc2UgY29kZSBmb3IgdGhlIGNvbW1vbiBwYXR0ZXJuCisgICAgICAg
IHdoZXJlIHdlIGNhbGwgYGlzPFQ+KHgpYCBhbmQgdGhlbiBgZG93bmNhc3Q8VD4oeClgLgorCisg
ICAgICAgICogd3RmL1R5cGVDYXN0cy5oOgorICAgICAgICAoV1RGOjpkeW5hbWljRG93bmNhc3Qp
OgorCiAyMDIyLTAxLTE0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IFdURjo6VVVJRCdzIHBvdGVudGlhbCBjb2xsaXNpb24gd2l0aCBlbXB0eSBhbmQg
ZGVsZXRlZCB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1N2Q5ZTBlMGFjNDg0ODcxODUwYTBjN2UzZjY2
MTAwYWU0MGUxODlmLi40Y2FiMzBjNmE1ODQ3MGIzNjQ5YTU3NDA4YjZmMzc0NGExZDkxN2ZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU3IEBACisyMDIyLTAxLTE0ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIGR5bmFtaWNEb3duY2FzdDw+KCkg
Zm9yIGNvbnZlbmllbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzUyNTkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBTdGFydCBhZG9wdGluZyBkeW5hbWljRG93bmNhc3Q8PigpLgorCisgICAgICAgICogYW5p
bWF0aW9uL1dlYkFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246
OnNldFRpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6d2lsbENoYW5n
ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6dGltaW5nRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6aW52YWxpZGF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246OmZpbmlzaE5vdGlmaWNhdGlvblN0ZXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6cmVzb2x2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJBbmltYXRpb246OnBlcnNpc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQW5p
bWF0aW9uOjpjb21taXRTdHlsZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzQ2xvbmVJblNoYWRvd1RyZWVPZlNWR1VzZUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24gY29u
c3QpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KToKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjppbnNl
cnRSdWxlKToKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRy
OjpzdHlsZSk6CisgICAgICAgICogZG9tL0Jyb2FkY2FzdENoYW5uZWwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QnJvYWRjYXN0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6ZW5zdXJlT25NYWlu
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkJyb2FkY2FzdENoYW5uZWw6OmlzRWxpZ2libGVG
b3JNZXNzYWdpbmcgY29uc3QpOgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZSk6CisgICAgICAgICog
ZG9tL0NoYXJhY3RlckRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omxlbmd0aCBjb25z
dCk6CisgICAgICAgICogZG9tL0NvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3I6OnRyYXZlcnNlUGFyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2VkVHJlZUFuY2VzdG9yQWRhcHRlcjo6YmVnaW4p
OgorICAgICAgICAqIGRvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Zmlyc3RDaGlsZEluQ29tcG9zZWRUcmVlSWdub3JpbmdVc2VyQWdlbnRTaGFkb3cpOgorICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6OnJlbW92ZU5vZGVXaXRoU2NyaXB0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRhaW5lck5vZGU6OnJlbW92ZVNlbGZPckNoaWxkTm9kZXNGb3JJbnNlcnRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6ZGVzdHJveVJlbmRlclRyZWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpjb250YWluc0luY2x1ZGluZ0hvc3RFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpj
aGVja0FjY2VwdENoaWxkKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Y291bnRDaGlsZE5vZGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OnRyYXZlcnNlVG9DaGlsZEF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmZpcnN0Q2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bGFzdENoaWxk
IGNvbnN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d2lkZ2V0Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YnVpbGRBY2Nl
c3NLZXlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRqdXN0Rm9jdXNlZE5v
ZGVPbk5vZGVSZW1vdmFsKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKiBkb20vRWxlbWVudElu
bGluZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBhcmVudEVsZW1lbnQgY29uc3QpOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50Ojp0b0VsZW1lbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TW91c2VFdmVudDo6ZnJvbUVsZW1lbnQgY29uc3QpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbmRlckJveCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW5kZXJCb3hNb2RlbE9iamVjdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb250YWluaW5nU2hhZG93Um9vdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbik6CisgICAgICAgICog
ZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpjb250YWluZXJU
ZXh0IGNvbnN0KToKKyAgICAgICAgKiBkb20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dE5vZGVUcmF2ZXJzYWw6OmNvbnRlbnRzQXNTdHJpbmcpOgorICAgICAg
ICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjplbGVt
ZW50c0Zyb21Qb2ludCk6CisgICAgICAgICogZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERlc2NlbmRhbnRSYW5nZTxFbGVtZW50
VHlwZT46OmZyb20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5jbHVzaXZlRWxlbWVudERl
c2NlbmRhbnRSYW5nZTxFbGVtZW50VHlwZT46OmZyb20gY29uc3QpOgorICAgICAgICAqIGRvbS9W
aXNpdGVkTGlua1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmtIYXNoRm9yRWxlbWVu
dCk6CisgICAgICAgICogZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6ZnJv
bUNvbnRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjplbmNsb3NpbmdCbG9jayk6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Om93bmVyU2VsZWN0
RWxlbWVudCBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbmRlckVtYmVk
ZGVkT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNyZWF0ZSk6CisgICAgICAgICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlv
bklmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1dG9zY3JvbGxDb250cm9sbGVyOjp1cGRhdGVBdXRvc2Nyb2xsUmVu
ZGVyZXIpOgorICAgICAgICAqIHBhZ2UvRE9NVGltZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RE9NVGltZXI6OmZpcmVkKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFzRmlsZUlucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250
cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkTm9kZURyYWdFbmFibGVyOjpTY29wZWROb2Rl
RHJhZ0VuYWJsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNldENETUluc3RhbmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJ
bmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaWdodHMpOgorICAgICAgICAoV2ViQ29y
ZTo6cGxhY2VDaGlsZElubGluZUJveGVzSW5CbG9ja0RpcmVjdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tG
bG93OjptYXJnaW5WYWx1ZXNGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpmaW5k
QXV0b3Njcm9sbGFibGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmltYWdlT3JpZW50YXRpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9uIGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySW1hZ2U6OnVwZGF0ZUlubmVyQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjptYXlBZmZlY3RM
YXlvdXQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlbmRlckJveCBjb25zdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
bmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVt
Ojp1cGRhdGVWYWx1ZU5vdyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9mZnNldFBhcmVudCBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ29sOjp0YWJsZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVEZWJ1Z0luZm8p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9T
ZWxlY3Rpb25SYW5nZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbmluZ0Jsb2Nr
QmVsb3dWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6Om5vcm1hbGl6ZVRy
ZWVBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZVVwZGF0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OlBh
cmVudDo6UGFyZW50KToKKyAgICAgICAgKiBzdHlsZS9DaGlsZENoYW5nZUludmFsaWRhdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNoaWxkQ2hhbmdlSW52YWxpZGF0aW9uOjpDaGls
ZENoYW5nZUludmFsaWRhdGlvbik6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6ZmluZFZpZXdBbmNob3IgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6ZmluZFJvb3RBbmNob3IgY29uc3QpOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJpdG1h
cEltYWdlRnJvbUltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwZGZEb2N1bWVudElt
YWdlRnJvbUltYWdlRWxlbWVudCk6CisKIDIwMjItMDEtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBXaGVuIGluc2VydGluZyBhIHNlbGVjdGVkIDxvcHRpb24+
IGluIGEgPHNlbGVjdD4gZWxlbWVudCwgaXRzIHNlbGVjdGVkIHN0YXRlIHNob3VsZCByZW1haW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggODMwNTRhMjNlNGZhMTExZjdhZTQwMDFlN2MxNWJmMTNiZWYyZTZhMC4uNzJk
ODU5ZjI0ZDRjYTRmNThiY2MzODJiNWJkZWViOTQzZDJkYjIwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAyMi0wMS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisg
ICAgICAgIEludHJvZHVjZSBkeW5hbWljRG93bmNhc3Q8PigpIGZvciBjb252ZW5pZW5jZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjU5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgU3RhcnQgYWRvcHRpbmcg
ZHluYW1pY0Rvd25jYXN0PD4oKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvRnVsbFNjcmVlbi9X
ZWJGdWxsU2NyZWVuTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5N
YW5hZ2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBheW1l
bnRDb29yZGluYXRvcik6CisKIDIwMjItMDEtMTQgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT046ICBBUktpdCBleGFtcGxlIGxvYWRzIGEgcGFnZSBm
dWxsIG9mIHJhbmRvbSBzeW1ib2xzIGluc3RlYWQgb2YgYSAzRCBtb2RlbApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCmluZGV4IGQyNTNjZThjZDIxNGY3MjI5MGUxMDQ2MmM4MTc1NWJkYWRmNjdh
MDUuLjllMTU1ZGI0OWZhODMyZWZjMjMxZjg3MjAxZjk2NjI3YWZhOGUyM2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMS0xNCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjZSBkeW5hbWljRG93bmNh
c3Q8PigpIGZvciBjb252ZW5pZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM1MjU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgU3RhcnQgYWRvcHRpbmcgZHluYW1pY0Rvd25jYXN0PD4oKS4KKworICAgICAg
ICAqIERPTS9ET01VSUtpdEV4dGVuc2lvbnMubW06CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50
IHN0cnVjdHVyYWxDb21wbGV4aXR5Q29udHJpYnV0aW9uXSk6CisgICAgICAgICogV2ViVmlldy9X
ZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgIChpbnB1dEVsZW1lbnRGcm9tRE9NRWxl
bWVudCk6CisKIDIwMjItMDEtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGEgZmV3IE9iamVjdGl2ZS1DIG9iamVjdCBsZWFrcyBkdWUgdG8g
ZWFybHkgcmV0dXJucyBpbiBgaW5pdGAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1R5cGVD
YXN0cy5oIGIvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKaW5kZXggYmRkY2E4N2VlOGVlYWVk
MzIzZGQwM2FhY2Y0NWMzMDIxOTQ5YzBkNS4uMWMyN2RmOTcyOWY3ZmZiMjAzYzBiMzdiNDg0ZmYy
ZDEyNjM2NjMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKKysrIGIv
U291cmNlL1dURi93dGYvVHlwZUNhc3RzLmgKQEAgLTg4LDYgKzg4LDIxIEBAIGlubGluZSBtYXRj
aF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4qIGRvd25jYXN0KFNvdXJjZSogc291cmNlKQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxtYXRjaF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4q
Pihzb3VyY2UpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJj
ZT4KK2lubGluZSBtYXRjaF9jb25zdG5lc3NfdDxTb3VyY2UsIFRhcmdldD4qIGR5bmFtaWNEb3du
Y2FzdChTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3NhbWVf
djxTb3VyY2UsIFRhcmdldD4sICJVbm5lY2Vzc2FyeSBjYXN0IHRvIHNhbWUgdHlwZSIpOworICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8U291cmNlLCBUYXJnZXQ+LCAiU2hvdWxk
IGJlIGEgZG93bmNhc3QiKTsKKyAgICByZXR1cm4gaXM8VGFyZ2V0Pihzb3VyY2UpID8gJnN0YXRp
Y19jYXN0PG1hdGNoX2NvbnN0bmVzc190PFNvdXJjZSwgVGFyZ2V0PiY+KHNvdXJjZSkgOiBudWxs
cHRyOworfQordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+Citpbmxp
bmUgbWF0Y2hfY29uc3RuZXNzX3Q8U291cmNlLCBUYXJnZXQ+KiBkeW5hbWljRG93bmNhc3QoU291
cmNlKiBzb3VyY2UpCit7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19zYW1lX3Y8U291cmNl
LCBUYXJnZXQ+LCAiVW5uZWNlc3NhcnkgY2FzdCB0byBzYW1lIHR5cGUiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PFNvdXJjZSwgVGFyZ2V0PiwgIlNob3VsZCBiZSBhIGRv
d25jYXN0Iik7CisgICAgcmV0dXJuIGlzPFRhcmdldD4oc291cmNlKSA/IHN0YXRpY19jYXN0PG1h
dGNoX2NvbnN0bmVzc190PFNvdXJjZSwgVGFyZ2V0Pio+KHNvdXJjZSkgOiBudWxscHRyOworfQor
CiAvLyBBZGQgc3VwcG9ydCBmb3IgdHlwZSBjaGVja2luZyAvIGNhc3RpbmcgdXNpbmcgaXM8Pigp
IC8gZG93bmNhc3Q8PigpIGhlbHBlcnMgZm9yIGEgc3BlY2lmaWMgY2xhc3MuCiAjZGVmaW5lIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oQ2xhc3NOYW1lKSBcCiBuYW1lc3BhY2UgV1RGIHsg
XApAQCAtMTIwLDMgKzEzNSw0IEBAIGlubGluZSBib29sIGlzKGNvbnN0IHN0ZDo6dW5pcXVlX3B0
cjxBcmdUeXBlLCBEZWxldGVyPiYgc291cmNlKQogdXNpbmcgV1RGOjpUeXBlQ2FzdFRyYWl0czsK
IHVzaW5nIFdURjo6aXM7CiB1c2luZyBXVEY6OmRvd25jYXN0OwordXNpbmcgV1RGOjpkeW5hbWlj
RG93bmNhc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCmluZGV4
IDA1ZTRhZTBkMTM4ZmFiZDI5YWU1YTJiMDQ0ZDRhNjgxNGQ3N2ZhNWUuLmYyMGJiY2ZkY2Q0NDY1
MGYxNTBjZWI3ZTBmMjNmZjgwMzAzN2NmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9X
ZWJBbmltYXRpb24uY3BwCkBAIC0yNDQsOCArMjQ0LDggQEAgdm9pZCBXZWJBbmltYXRpb246OnNl
dFRpbWVsaW5lKFJlZlB0cjxBbmltYXRpb25UaW1lbGluZT4mJiB0aW1lbGluZSkKICAgICBpZiAo
bV9zdGFydFRpbWUpCiAgICAgICAgIG1faG9sZFRpbWUgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBp
ZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0KSkgewotICAgICAgICBpZiAoYXV0byB0YXJn
ZXQgPSBkb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QuZ2V0KCkpLT50YXJnZXRTdHls
ZWFibGUoKSkgeworICAgIGlmIChhdXRvIGtleWZyYW1lRWZmZWN0ID0gZHluYW1pY0Rvd25jYXN0
PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdC5nZXQoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8gdGFy
Z2V0ID0ga2V5ZnJhbWVFZmZlY3QtPnRhcmdldFN0eWxlYWJsZSgpKSB7CiAgICAgICAgICAgICAv
LyBJbiB0aGUgY2FzZSBvZiBhIGRlY2xhcmF0aXZlIGFuaW1hdGlvbiwgd2UgZG9uJ3Qgd2FudCB0
byByZW1vdmUgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSByZWxldmFudCBtYXBzIGJlY2F1c2UKICAg
ICAgICAgICAgIC8vIHdoaWxlIHRoZSB0aW1lbGluZSB3YXMgc2V0IHZpYSB0aGUgQVBJLCB0aGUg
ZWxlbWVudCBzdGlsbCBoYXMgYSB0cmFuc2l0aW9uIG9yIGFuaW1hdGlvbiBzZXQgdXAgYW5kIHdl
IG11c3QKICAgICAgICAgICAgIC8vIG5vdCBicmVhayB0aGUgcmVsYXRpb25zaGlwLgpAQCAtNzI1
LDggKzcyNSw4IEBAIHZvaWQgV2ViQW5pbWF0aW9uOjpjYW5jZWwoKQogCiB2b2lkIFdlYkFuaW1h
dGlvbjo6d2lsbENoYW5nZVJlbmRlcmVyKCkKIHsKLSAgICBpZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+
KG1fZWZmZWN0KSkKLSAgICAgICAgZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCku
d2lsbENoYW5nZVJlbmRlcmVyKCk7CisgICAgaWYgKGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5h
bWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKSkKKyAgICAgICAga2V5
ZnJhbWVFZmZlY3QtPndpbGxDaGFuZ2VSZW5kZXJlcigpOwogfQogCiB2b2lkIFdlYkFuaW1hdGlv
bjo6ZW5xdWV1ZUFuaW1hdGlvblBsYXliYWNrRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgdHlwZSwg
c3RkOjpvcHRpb25hbDxTZWNvbmRzPiBjdXJyZW50VGltZSwgc3RkOjpvcHRpb25hbDxTZWNvbmRz
PiB0aW1lbGluZVRpbWUpCkBAIC04MzgsOSArODM4LDkgQEAgdm9pZCBXZWJBbmltYXRpb246OnRp
bWluZ0RpZENoYW5nZShEaWRTZWVrIGRpZFNlZWssIFN5bmNocm9ub3VzbHlOb3RpZnkgc3luY2hy
b24KICAgICBtX3Nob3VsZFNraXBVcGRhdGluZ0ZpbmlzaGVkU3RhdGVXaGVuUmVzb2x2aW5nID0g
ZmFsc2U7CiAgICAgdXBkYXRlRmluaXNoZWRTdGF0ZShkaWRTZWVrLCBzeW5jaHJvbm91c2x5Tm90
aWZ5KTsKIAotICAgIGlmIChpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpKSB7CisgICAgaWYg
KGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5hbWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KG1f
ZWZmZWN0LmdldCgpKSkgewogICAgICAgICB1cGRhdGVSZWxldmFuY2UoKTsKLSAgICAgICAgZG93
bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkuYW5pbWF0aW9uVGltaW5nRGlkQ2hhbmdl
KCk7CisgICAgICAgIGtleWZyYW1lRWZmZWN0LT5hbmltYXRpb25UaW1pbmdEaWRDaGFuZ2UoKTsK
ICAgICB9CiAKICAgICBpZiAoc2lsZW50bHkgPT0gU2lsZW50bHk6Ok5vICYmIG1fdGltZWxpbmUp
CkBAIC04NDksOCArODQ5LDggQEAgdm9pZCBXZWJBbmltYXRpb246OnRpbWluZ0RpZENoYW5nZShE
aWRTZWVrIGRpZFNlZWssIFN5bmNocm9ub3VzbHlOb3RpZnkgc3luY2hyb24KIAogdm9pZCBXZWJB
bmltYXRpb246OmludmFsaWRhdGVFZmZlY3QoKQogewotICAgIGlmICghaXNFZmZlY3RJbnZhbGlk
YXRpb25TdXNwZW5kZWQoKSAmJiBpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpKQotICAgICAg
ICBkb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4oKm1fZWZmZWN0KS5pbnZhbGlkYXRlKCk7CisgICAg
aWYgKGF1dG8ga2V5ZnJhbWVFZmZlY3QgPSBkeW5hbWljRG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+
KG1fZWZmZWN0LmdldCgpKTsgIWlzRWZmZWN0SW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgJiYga2V5
ZnJhbWVFZmZlY3QpCisgICAgICAgIGtleWZyYW1lRWZmZWN0LT5pbnZhbGlkYXRlKCk7CiB9CiAK
IHZvaWQgV2ViQW5pbWF0aW9uOjp1cGRhdGVGaW5pc2hlZFN0YXRlKERpZFNlZWsgZGlkU2Vlaywg
U3luY2hyb25vdXNseU5vdGlmeSBzeW5jaHJvbm91c2x5Tm90aWZ5KQpAQCAtOTYyLDggKzk2Miw4
IEBAIHZvaWQgV2ViQW5pbWF0aW9uOjpmaW5pc2hOb3RpZmljYXRpb25TdGVwcygpCiAgICAgLy8g
ICAgT3RoZXJ3aXNlLCBxdWV1ZSBhIHRhc2sgdG8gZGlzcGF0Y2ggZmluaXNoRXZlbnQgYXQgYW5p
bWF0aW9uLiBUaGUgdGFzayBzb3VyY2UgZm9yIHRoaXMgdGFzayBpcyB0aGUgRE9NIG1hbmlwdWxh
dGlvbiB0YXNrIHNvdXJjZS4KICAgICBlbnF1ZXVlQW5pbWF0aW9uUGxheWJhY2tFdmVudChldmVu
dE5hbWVzKCkuZmluaXNoRXZlbnQsIGN1cnJlbnRUaW1lKCksIG1fdGltZWxpbmUgPyBtX3RpbWVs
aW5lLT5jdXJyZW50VGltZSgpIDogc3RkOjpudWxsb3B0KTsKIAotICAgIGlmIChpczxLZXlmcmFt
ZUVmZmVjdD4obV9lZmZlY3QpKSB7Ci0gICAgICAgIGlmIChSZWZQdHIgdGFyZ2V0ID0gZG93bmNh
c3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCkudGFyZ2V0KCkpIHsKKyAgICBpZiAoYXV0byBr
ZXlmcmFtZUVmZmVjdCA9IGR5bmFtaWNEb3duY2FzdDxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3Qu
Z2V0KCkpKSB7CisgICAgICAgIGlmIChSZWZQdHIgdGFyZ2V0ID0ga2V5ZnJhbWVFZmZlY3QtPnRh
cmdldCgpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IHRhcmdldC0+ZG9jdW1lbnQo
KS5wYWdlKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYW5pbWF0
aW9uRGlkRmluaXNoRm9yRWxlbWVudCgqdGFyZ2V0KTsKICAgICAgICAgfQpAQCAtMTI4Nyw4ICsx
Mjg3LDggQEAgdm9pZCBXZWJBbmltYXRpb246OnJlc29sdmUoUmVuZGVyU3R5bGUmIHRhcmdldFN0
eWxlLCBjb25zdCBTdHlsZTo6UmVzb2x1dGlvbkNvbnQKICAgICAgICAgdXBkYXRlRmluaXNoZWRT
dGF0ZShEaWRTZWVrOjpObywgU3luY2hyb25vdXNseU5vdGlmeTo6WWVzKTsKICAgICBtX3Nob3Vs
ZFNraXBVcGRhdGluZ0ZpbmlzaGVkU3RhdGVXaGVuUmVzb2x2aW5nID0gZmFsc2U7CiAKLSAgICBp
ZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0KSkKLSAgICAgICAgZG93bmNhc3Q8S2V5ZnJh
bWVFZmZlY3Q+KCptX2VmZmVjdCkuYXBwbHkodGFyZ2V0U3R5bGUsIHJlc29sdXRpb25Db250ZXh0
LCBzdGFydFRpbWUpOworICAgIGlmIChhdXRvIGtleWZyYW1lRWZmZWN0ID0gZHluYW1pY0Rvd25j
YXN0PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdC5nZXQoKSkpCisgICAgICAgIGtleWZyYW1lRWZm
ZWN0LT5hcHBseSh0YXJnZXRTdHlsZSwgcmVzb2x1dGlvbkNvbnRleHQsIHN0YXJ0VGltZSk7CiB9
CiAKIHZvaWQgV2ViQW5pbWF0aW9uOjpzZXRTdXNwZW5kZWQoYm9vbCBpc1N1c3BlbmRlZCkKQEAg
LTE0MTcsMTEgKzE0MTcsMTAgQEAgdm9pZCBXZWJBbmltYXRpb246OnBlcnNpc3QoKQogICAgIGF1
dG8gcHJldmlvdXNSZXBsYWNlU3RhdGUgPSBzdGQ6OmV4Y2hhbmdlKG1fcmVwbGFjZVN0YXRlLCBS
ZXBsYWNlU3RhdGU6OlBlcnNpc3RlZCk7CiAKICAgICBpZiAocHJldmlvdXNSZXBsYWNlU3RhdGUg
PT0gUmVwbGFjZVN0YXRlOjpSZW1vdmVkICYmIG1fdGltZWxpbmUpIHsKLSAgICAgICAgaWYgKGlz
PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGtleWZyYW1l
RWZmZWN0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCptX2VmZmVjdCk7Ci0gICAgICAgICAg
ICBhdXRvIHN0eWxlYWJsZSA9IGtleWZyYW1lRWZmZWN0LnRhcmdldFN0eWxlYWJsZSgpOworICAg
ICAgICBpZiAoYXV0byBrZXlmcmFtZUVmZmVjdCA9IGR5bmFtaWNEb3duY2FzdDxLZXlmcmFtZUVm
ZmVjdD4obV9lZmZlY3QuZ2V0KCkpKSB7CisgICAgICAgICAgICBhdXRvIHN0eWxlYWJsZSA9IGtl
eWZyYW1lRWZmZWN0LT50YXJnZXRTdHlsZWFibGUoKTsKICAgICAgICAgICAgIHN0eWxlYWJsZS0+
YW5pbWF0aW9uV2FzQWRkZWQoKnRoaXMpOwotICAgICAgICAgICAgc3R5bGVhYmxlLT5lbnN1cmVL
ZXlmcmFtZUVmZmVjdFN0YWNrKCkuYWRkRWZmZWN0KGtleWZyYW1lRWZmZWN0KTsKKyAgICAgICAg
ICAgIHN0eWxlYWJsZS0+ZW5zdXJlS2V5ZnJhbWVFZmZlY3RTdGFjaygpLmFkZEVmZmVjdCgqa2V5
ZnJhbWVFZmZlY3QpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQzMSw3ICsxNDMwLDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gV2ViQW5pbWF0aW9uOjpjb21taXRTdHlsZXMoKQogICAgIC8vIGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy93ZWItYW5pbWF0aW9ucy0xLyNjb21taXQtY29tcHV0ZWQt
c3R5bGVzCiAKICAgICAvLyAxLiBMZXQgdGFyZ2V0cyBiZSB0aGUgc2V0IG9mIGFsbCBlZmZlY3Qg
dGFyZ2V0cyBmb3IgYW5pbWF0aW9uIGVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIGFuaW1hdGlvbi4K
LSAgICBhdXRvKiBlZmZlY3QgPSBpczxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpID8gZG93bmNh
c3Q8S2V5ZnJhbWVFZmZlY3Q+KG1fZWZmZWN0LmdldCgpKSA6IG51bGxwdHI7CisgICAgYXV0byog
ZWZmZWN0ID0gZHluYW1pY0Rvd25jYXN0PEtleWZyYW1lRWZmZWN0PihtX2VmZmVjdC5nZXQoKSk7
CiAgICAgYXV0byogdGFyZ2V0ID0gZWZmZWN0ID8gZWZmZWN0LT50YXJnZXQoKSA6IG51bGxwdHI7
CiAKICAgICAvLyAyLiBGb3IgZWFjaCB0YXJnZXQgaW4gdGFyZ2V0czoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGM4NzdkMjdiNjk4NGYz
N2Y5ZGNjYzAzMjc0YmYxNjY4Mjk3ZTUwMTYuLjA1OWRmZWE2OWE4NWQ1NmQzZDRhM2RmNDNiNjFh
YmI4ODc0MDkwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5k
bGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0CiAg
ICAgICAgIGlmICghd2luZG93LT53cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1l
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICh3YXNDcmVhdGVkRnJvbU1hcmt1
cCgpKSB7Ci0gICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZXZlbnQudGFyZ2V0KCktPmlz
Tm9kZSgpICYmICFkb3duY2FzdDxOb2RlPigqZXZlbnQudGFyZ2V0KCkpLmlzRG9jdW1lbnROb2Rl
KCkgJiYgaXM8RWxlbWVudD4oKmV2ZW50LnRhcmdldCgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGV2
ZW50LnRhcmdldCgpKSA6IG51bGxwdHI7CisgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0g
ZXZlbnQudGFyZ2V0KCktPmlzTm9kZSgpICYmICFkb3duY2FzdDxOb2RlPigqZXZlbnQudGFyZ2V0
KCkpLmlzRG9jdW1lbnROb2RlKCkgPyBkeW5hbWljRG93bmNhc3Q8RWxlbWVudD4oKmV2ZW50LnRh
cmdldCgpKSA6IG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93SW5saW5lRXZlbnRIYW5kbGVycyhzb3Vy
Y2VVUkwoKS5zdHJpbmcoKSwgc291cmNlUG9zaXRpb24oKS5tX2xpbmUsIGNvZGUoKSwgZWxlbWVu
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGFiZjE4ZDg5
YjY3YTY2MmI3ODFhYzYzODc2NzIzYzUzNDU1MzgxZTYuLjY5Mjg1NTY4ZTZmZWU1Y2M5NTEzYWM3
NTZlMTljYWYyY2EwYjlmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCkBAIC04NCwxOSArODQsMTIgQEAgSlNMYXp5RXZlbnRM
aXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0ZW5lcihDcmVhdGlvbkFyZ3VtZW50cyYmIGFyZ3VtZW50
cywgY29uc3QgVVIKICNpZiBBU1NFUlRfRU5BQkxFRAogc3RhdGljIGlubGluZSBib29sIGlzQ2xv
bmVJblNoYWRvd1RyZWVPZlNWR1VzZUVsZW1lbnQoTm9kZSYgb3JpZ2luYWxOb2RlLCBFdmVudFRh
cmdldCYgZXZlbnRUYXJnZXQpCiB7Ci0gICAgaWYgKCFldmVudFRhcmdldC5pc05vZGUoKSkKKyAg
ICBhdXRvKiBlbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PFNWR0VsZW1lbnQ+KGV2ZW50VGFyZ2V0
KTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG5vZGUgPSBkb3duY2FzdDxOb2Rl
PihldmVudFRhcmdldCk7Ci0gICAgaWYgKCFpczxTVkdFbGVtZW50Pihub2RlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+
KG5vZGUpOwotICAgIGlmICghZWxlbWVudC5jb3JyZXNwb25kaW5nRWxlbWVudCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoZWxlbWVudC5pc0luU2hhZG93VHJlZSgpKTsK
LSAgICByZXR1cm4gJm9yaWdpbmFsTm9kZSA9PSBlbGVtZW50LmNvcnJlc3BvbmRpbmdFbGVtZW50
KCk7CisgICAgQVNTRVJUKGVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCkpOworICAgIHJldHVybiAm
b3JpZ2luYWxOb2RlID09IGVsZW1lbnQtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCk7CiB9CiAKIC8v
IFRoaXMgaXMgdG8gaGVscCBmaW5kIHRoZSB1bmRlcmx5aW5nIGNhdXNlIG9mIDxyZGFyOi8vcHJv
YmxlbS8yNDMxNDAyNz4uCkBAIC0xMzEsNyArMTI0LDcgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50
TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGV4
ZWMKICAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IG1fb3JpZ2luYWxOb2RlICYmICFtX29yaWdpbmFsTm9k
ZS0+aXNEb2N1bWVudE5vZGUoKSAmJiBpczxFbGVtZW50PigqbV9vcmlnaW5hbE5vZGUpID8gZG93
bmNhc3Q8RWxlbWVudD4obV9vcmlnaW5hbE5vZGUuZ2V0KCkpIDogbnVsbHB0cjsKKyAgICBhdXRv
KiBlbGVtZW50ID0gIGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihtX29yaWdpbmFsTm9kZS5nZXQo
KSk7CiAgICAgaWYgKCFkb2N1bWVudC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dJbmxp
bmVFdmVudEhhbmRsZXJzKG1fc291cmNlVVJMLnN0cmluZygpLCBtX3NvdXJjZVBvc2l0aW9uLm1f
bGluZSwgbV9jb2RlLCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggYmIyNDljODZmM2MxNzYwYWYxNmU1
YzAyNzI3YzA5YzVlNzkzZWE4NS4uZjhhOTE4NzczNGNkYjBkOTM3ODg5YmJiZTI0ZmMxZThhZGEz
ZjU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTM1NSw3ICsz
NTUsNyBAQCBGb250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcgogCiAgICAgaWYgKHJlc29sdmVHZW5lcmlj
RmFtaWx5Rmlyc3QpCiAgICAgICAgIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFtaWx5KCk7Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaXM8RG9jdW1lbnQ+KG1fY29udGV4dCkgPyAmZG93bmNh
c3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBkb2N1bWVudCA9
IGR5bmFtaWNEb3duY2FzdDxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKTsKICAgICBhdXRvKiBm
YWNlID0gbV9jc3NGb250RmFjZVNldC0+Zm9udEZhY2UoZm9udERlc2NyaXB0aW9uRm9yTG9va3Vw
LT5mb250U2VsZWN0aW9uUmVxdWVzdCgpLCBmYW1pbHlGb3JMb29rdXApOwogICAgIGlmIChmYWNl
KSB7CiAgICAgICAgIGlmIChkb2N1bWVudCAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTaGVldC5jcHAKaW5kZXggZGJjNjdkN2ExMzU1OTY0YmIzODVjNTUwYzJiMTkyYmZjOTgy
OWRlZS4uZjQ2MThlZjAyNGE5NzlmZDI1MmNjYzQ3ZmE2ZjgwNmNkOTMwODA1ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApAQCAtMjY4LDcgKzI2OCw3IEBAIEV4Y2VwdGlvbk9y
PHVuc2lnbmVkPiBDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZVN0
cmluZywgdW5zaWduCiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKIAotICAgIFJ1bGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhp
cywgUnVsZUluc2VydGlvbiwgaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkgPyBkb3duY2Fz
dDxTdHlsZVJ1bGVLZXlmcmFtZXM+KHJ1bGUuZ2V0KCkpIDogbnVsbHB0cik7CisgICAgUnVsZU11
dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzLCBSdWxlSW5zZXJ0aW9uLCBkeW5hbWljRG93
bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkpOwogCiAgICAgYm9vbCBzdWNjZXNzID0g
bV9jb250ZW50cy5nZXQoKS53cmFwcGVySW5zZXJ0UnVsZShydWxlLnJlbGVhc2VOb25OdWxsKCks
IGluZGV4KTsKICAgICBpZiAoIXN1Y2Nlc3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQXR0ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKaW5kZXggYjdkMGUxZDdm
ZjdhYmI4MWIzNDc3MTdmZThlM2YwYTdjNTE3ZGEzNC4uMTJjNDAyNmQ3Yjc1MmUxNGUxMDkxMGQy
YzZhZTBmODIxNmFlYTc5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcApAQCAtMTEyLDEwICsxMTIsMTEgQEAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogQXR0cjo6c3R5bGUoKQogewogICAgIC8vIFRoaXMgaXMgbm90
IHBhcnQgb2YgdGhlIERPTSBBUEksIGFuZCB0aGVyZWZvcmUgbm90IGF2YWlsYWJsZSB0byB3ZWJw
YWdlcy4gSG93ZXZlciwgV2ViS2l0IFNQSQogICAgIC8vIGxldHMgY2xpZW50cyB1c2UgdGhpcyB2
aWEgdGhlIE9iamVjdGl2ZS1DIGFuZCBKYXZhU2NyaXB0IGJpbmRpbmdzLgotICAgIGlmICghaXM8
U3R5bGVkRWxlbWVudD4obV9lbGVtZW50KSkKKyAgICBhdXRvIHN0eWxlZEVsZW1lbnQgPSBkeW5h
bWljRG93bmNhc3Q8U3R5bGVkRWxlbWVudD4obV9lbGVtZW50KTsKKyAgICBpZiAoIXN0eWxlZEVs
ZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIG1fc3R5bGUgPSBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICBkb3duY2FzdDxTdHlsZWRFbGVtZW50PigqbV9l
bGVtZW50KS5jb2xsZWN0UHJlc2VudGF0aW9uYWxIaW50c0ZvckF0dHJpYnV0ZShxdWFsaWZpZWRO
YW1lKCksIHZhbHVlKCksICptX3N0eWxlKTsKKyAgICBzdHlsZWRFbGVtZW50LT5jb2xsZWN0UHJl
c2VudGF0aW9uYWxIaW50c0ZvckF0dHJpYnV0ZShxdWFsaWZpZWROYW1lKCksIHZhbHVlKCksICpt
X3N0eWxlKTsKICAgICByZXR1cm4gJm1fc3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24o
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Jyb2FkY2FzdENoYW5uZWwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Jyb2FkY2FzdENoYW5uZWwuY3BwCmluZGV4IDYzMjlk
ZWE1N2ExODdmZjI1OTc3NzBmOGU0Y2FhNjViZTk0NWQ1ZDUuLmU3NjI1M2NkNjQ4YjQ5ODAxZjlj
MzQyNTY2Zjc0NmI0ZTI5YzczMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ccm9h
ZGNhc3RDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQnJvYWRjYXN0Q2hhbm5l
bC5jcHAKQEAgLTEwOCw4ICsxMDgsOCBAQCB2b2lkIEJyb2FkY2FzdENoYW5uZWw6Ok1haW5UaHJl
YWRCcmlkZ2U6OmVuc3VyZU9uTWFpblRocmVhZChGdW5jdGlvbjx2b2lkKERvY3VtZQogICAgIEFT
U0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKICAgICBSZWYgcHJvdGVjdGVkVGhp
cyB7ICp0aGlzIH07Ci0gICAgaWYgKGlzPERvY3VtZW50PigqY29udGV4dCkpCi0gICAgICAgIHRh
c2soZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KSk7CisgICAgaWYgKGF1dG8gZG9jdW1lbnQg
PSBkeW5hbWljRG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KSkKKyAgICAgICAgdGFzaygqZG9j
dW1lbnQpOwogICAgIGVsc2UgewogICAgICAgICBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4o
KmNvbnRleHQpLnRocmVhZCgpLndvcmtlckxvYWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihb
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRhc2sgPSBXVEZNb3ZlKHRh
c2spXShhdXRvJiBjb250ZXh0KSB7CiAgICAgICAgICAgICB0YXNrKGRvd25jYXN0PERvY3VtZW50
Pihjb250ZXh0KSk7CkBAIC0yNjUsOCArMjY1LDggQEAgYm9vbCBCcm9hZGNhc3RDaGFubmVsOjpp
c0VsaWdpYmxlRm9yTWVzc2FnaW5nKCkgY29uc3QKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KS5pc0Z1bGx5QWN0aXZlKCk7Cisg
ICAgaWYgKGF1dG8gZG9jdW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KSkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5pc0Z1bGx5QWN0aXZlKCk7CiAKICAgICByZXR1
cm4gIWRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqY29udGV4dCkuaXNDbG9zaW5nKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggZjgyMTc2NmI1MTI1MGJjZDZh
Mzg1MzI5NzRiZTYyMDIxMTJmOTNjNC4uYmEzMTE5MGM0ZDQyM2U3Nzc5ZTVjZDdiZWYwNWMxMDJm
OGZkY2ZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAtMTE5LDggKzEx
OSw4IEBAIHVuc2lnbmVkIENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNldCwKICAgICAgICAgbV9kYXRhLmFwcGVuZChzdHJp
bmcuY2hhcmFjdGVyczE2KCkgKyBvZmZzZXQsIGNoYXJhY3Rlckxlbmd0aExpbWl0KTsKIAogICAg
IEFTU0VSVCghcmVuZGVyZXIoKSB8fCBpczxUZXh0PigqdGhpcykpOwotICAgIGlmIChpczxUZXh0
PigqdGhpcykpCi0gICAgICAgIGRvd25jYXN0PFRleHQ+KCp0aGlzKS51cGRhdGVSZW5kZXJlckFm
dGVyQ29udGVudENoYW5nZShvbGRMZW5ndGgsIDApOworICAgIGlmIChhdXRvIHRleHQgPSBkeW5h
bWljRG93bmNhc3Q8VGV4dD4oKnRoaXMpKQorICAgICAgICB0ZXh0LT51cGRhdGVSZW5kZXJlckFm
dGVyQ29udGVudENoYW5nZShvbGRMZW5ndGgsIDApOwogCiAgICAgbm90aWZ5UGFyZW50QWZ0ZXJD
aGFuZ2UoY2hpbGRDaGFuZ2UpOwogCkBAIC0yMDcsMTEgKzIwNywxMSBAQCB2b2lkIENoYXJhY3Rl
ckRhdGE6OnNldERhdGFBbmRVcGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25lZCBv
ZmZzZXRPZlJlcAogICAgICAgICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0
T2ZSZXBsYWNlZERhdGEsIG5ld0xlbmd0aCk7CiAKICAgICBBU1NFUlQoIXJlbmRlcmVyKCkgfHwg
aXM8VGV4dD4oKnRoaXMpKTsKLSAgICBpZiAoaXM8VGV4dD4oKnRoaXMpKQotICAgICAgICBkb3du
Y2FzdDxUZXh0PigqdGhpcykudXBkYXRlUmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2Uob2Zmc2V0
T2ZSZXBsYWNlZERhdGEsIG9sZExlbmd0aCk7CisgICAgaWYgKGF1dG8gdGV4dCA9IGR5bmFtaWNE
b3duY2FzdDxUZXh0PigqdGhpcykpCisgICAgICAgIHRleHQtPnVwZGF0ZVJlbmRlcmVyQWZ0ZXJD
b250ZW50Q2hhbmdlKG9mZnNldE9mUmVwbGFjZWREYXRhLCBvbGRMZW5ndGgpOwogCi0gICAgaWYg
KGlzPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oKnRoaXMpKQotICAgICAgICBkb3duY2FzdDxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24+KCp0aGlzKS5jaGVja1N0eWxlU2hlZXQoKTsKKyAgICBpZiAoYXV0
byBwcm9jZXNzaW5nSW50cnVjdGlvbiA9IGR5bmFtaWNEb3duY2FzdDxQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24+KCp0aGlzKSkKKyAgICAgICAgcHJvY2Vzc2luZ0ludHJ1Y3Rpb24tPmNoZWNrU3R5bGVT
aGVldCgpOwogCiAgICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgZG9jdW1lbnQo
KS5mcmFtZSgpLT5zZWxlY3Rpb24oKS50ZXh0V2FzUmVwbGFjZWQodGhpcywgb2Zmc2V0T2ZSZXBs
YWNlZERhdGEsIG9sZExlbmd0aCwgbmV3TGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0
YS5oCmluZGV4IDM2YTQ5MjU0MDdlOTEzY2NjYTczZTkwZGUwMzJhYjVmYjg3NzRhNDcuLjUyMDAz
ZDdjMWRkZWQ5N2I5YTdlMDg4YzM5MzI5MThkNjY0MDg0YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuaApAQCAtNzIsOCArNzIsOCBAQCBwcml2YXRlOgogCiBpbmxpbmUgdW5zaWduZWQg
Tm9kZTo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKnRoaXMp
KQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKnRoaXMpLmxlbmd0aCgp
OworICAgIGlmIChhdXRvIGNoYXJhY3RlckRhdGEgPSBkeW5hbWljRG93bmNhc3Q8Q2hhcmFjdGVy
RGF0YT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyRGF0YS0+bGVuZ3RoKCk7CiAg
ICAgcmV0dXJuIGNvdW50Q2hpbGROb2RlcygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaAppbmRleCBjNjYxYmNlNWM4ZmMyZmFk
ZTZjMTg2NDI1NWYzZGRhYzgwNDcwZjA3Li44OWE2OGUwNGMyOWJhMmZjMGM3MjFjMGRjYmY2YWFm
NWM5MDk4ZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRUcmVlQW5j
ZXN0b3JJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVBbmNl
c3Rvckl0ZXJhdG9yLmgKQEAgLTcyLDggKzcyLDggQEAgaW5saW5lIENvbXBvc2VkVHJlZUFuY2Vz
dG9ySXRlcmF0b3ImIENvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3I6OnRyYXZlcnNlUGFyZW4K
ICAgICAgICAgbV9jdXJyZW50ID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
IH0KLSAgICBpZiAoaXM8U2hhZG93Um9vdD4oKnBhcmVudCkpIHsKLSAgICAgICAgbV9jdXJyZW50
ID0gZG93bmNhc3Q8U2hhZG93Um9vdD4oKnBhcmVudCkuaG9zdCgpOworICAgIGlmIChhdXRvIHNo
YWRvd1Jvb3QgPSBkeW5hbWljRG93bmNhc3Q8U2hhZG93Um9vdD4oKnBhcmVudCkpIHsKKyAgICAg
ICAgbV9jdXJyZW50ID0gc2hhZG93Um9vdC0+aG9zdCgpOwogICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgfQogICAgIGlmICghaXM8RWxlbWVudD4oKnBhcmVudCkpIHsKQEAgLTEwMCwxMCArMTAw
LDEwIEBAIHB1YmxpYzoKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkKICAgICB7Ci0gICAgICAgIGlm
IChpczxTaGFkb3dSb290PihtX25vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCpk
b3duY2FzdDxTaGFkb3dSb290PihtX25vZGUpLmhvc3QoKSk7Ci0gICAgICAgIGlmIChpczxQc2V1
ZG9FbGVtZW50PihtX25vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCpkb3duY2Fz
dDxQc2V1ZG9FbGVtZW50PihtX25vZGUpLmhvc3RFbGVtZW50KCkpOworICAgICAgICBpZiAoYXV0
byBzaGFkb3dSb290ID0gZHluYW1pY0Rvd25jYXN0PFNoYWRvd1Jvb3Q+KG1fbm9kZSkpCisgICAg
ICAgICAgICByZXR1cm4gaXRlcmF0b3IoKnNoYWRvd1Jvb3QtPmhvc3QoKSk7CisgICAgICAgIGlm
IChhdXRvIHBzZXVkb0VsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8UHNldWRvRWxlbWVudD4obV9u
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigqcHNldWRvRWxlbWVudC0+aG9zdEVs
ZW1lbnQoKSk7CiAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX25vZGUpLnRyYXZlcnNlUGFyZW50
KCk7CiAgICAgfQogICAgIGl0ZXJhdG9yIGVuZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3Nl
ZFRyZWVJdGVyYXRvci5oCmluZGV4IGNjNGYyMDI1NmY1ZWNmZTc2ZjFiYTYxNTU4ZDY2ZjJmMmEz
NTAzNTMuLjYyMjA2MWY0NTZkOGIwZDY2NDI0OTk2ZDMzODEzNmU2NzM0ZDY3ZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oCkBAIC0yMjQsOCArMjI0LDggQEAg
aW5saW5lIE5vZGUqIGZpcnN0Q2hpbGRJbkNvbXBvc2VkVHJlZUlnbm9yaW5nVXNlckFnZW50U2hh
ZG93KE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKGF1dG8qIHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290
SWdub3JpbmdVc2VyQWdlbnRTaGFkb3cobm9kZSkpCiAgICAgICAgIHJldHVybiBzaGFkb3dSb290
LT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKGlzPEhUTUxTbG90RWxlbWVudD4obm9kZSkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIGFzc2lnbmVkTm9kZXMgPSBkb3duY2FzdDxIVE1MU2xvdEVsZW1lbnQ+
KG5vZGUpLmFzc2lnbmVkTm9kZXMoKSkKKyAgICBpZiAoYXV0byBzbG90ID0gZHluYW1pY0Rvd25j
YXN0PEhUTUxTbG90RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGFzc2lnbmVk
Tm9kZXMgPSBzbG90LT5hc3NpZ25lZE5vZGVzKCkpCiAgICAgICAgICAgICByZXR1cm4gYXNzaWdu
ZWROb2Rlcy0+YXQoMCkuZ2V0KCk7CiAgICAgfQogICAgIHJldHVybiBub2RlLmZpcnN0Q2hpbGQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAppbmRleCAyYzI3MmM3ZWVkYzM0MTI1
Mjk4Y2M0N2YzMjc5NDA1NmZkMmM2NmVjLi4zMGY1N2Q3ZGU5ZjJmNDQ2ZGI3YTRiMTI1YzU4Yjhj
YjIxMWUwODI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC0xODAsOCAr
MTgwLDggQEAgQUxXQVlTX0lOTElORSBib29sIENvbnRhaW5lck5vZGU6OnJlbW92ZU5vZGVXaXRo
U2NyaXB0QXNzZXJ0aW9uKE5vZGUmIGNoaWxkVG9SZW0KICAgICAgICAgLy8gRklYTUU6IE1lcmdl
IHRoZXNlIHR3byBjb2RlIHBhdGhzLiBJdCdzIGEgYnVnIGluIHRoZSBwYXJzZXIgbm90IHRvIHVw
ZGF0ZSBjb25uZWN0ZWRTdWJmcmFtZUNvdW50IGluIHRpbWUuCiAgICAgICAgIGRpc2Nvbm5lY3RT
dWJmcmFtZXNJZk5lZWRlZCgqdGhpcywgRGVzY2VuZGFudHNPbmx5KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoaXM8Q29udGFpbmVyTm9kZT4oY2hpbGRUb1JlbW92ZSkpCi0gICAgICAgICAg
ICBkaXNjb25uZWN0U3ViZnJhbWVzSWZOZWVkZWQoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oY2hp
bGRUb1JlbW92ZSksIFJvb3RBbmREZXNjZW5kYW50cyk7CisgICAgICAgIGlmIChhdXRvIGNvbnRh
aW5lckNoaWxkID0gZHluYW1pY0Rvd25jYXN0PENvbnRhaW5lck5vZGU+KGNoaWxkVG9SZW1vdmUp
KQorICAgICAgICAgICAgZGlzY29ubmVjdFN1YmZyYW1lc0lmTmVlZGVkKCpjb250YWluZXJDaGls
ZCwgUm9vdEFuZERlc2NlbmRhbnRzKTsKICAgICB9CiAKICAgICBpZiAoY2hpbGRUb1JlbW92ZS5w
YXJlbnROb2RlKCkgIT0gdGhpcykKQEAgLTI3OCwyNSArMjc4LDI0IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQgZXhlY3V0ZU5vZGVJbnNlcnRpb25XaXRoU2NyaXB0QXNzZXJ0aW9uKENvbnRh
aW5lck5vZGUmCiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENvbnRhaW5lck5vZGU6OnJlbW92ZVNlbGZP
ckNoaWxkTm9kZXNGb3JJbnNlcnRpb24oTm9kZSYgY2hpbGQsIE5vZGVWZWN0b3ImIG5vZGVzRm9y
SW5zZXJ0aW9uKQogewotICAgIGlmICghaXM8RG9jdW1lbnRGcmFnbWVudD4oY2hpbGQpKSB7Ci0g
ICAgICAgIG5vZGVzRm9ySW5zZXJ0aW9uLmFwcGVuZChjaGlsZCk7Ci0gICAgICAgIFJlZlB0ciBv
bGRQYXJlbnQgPSBjaGlsZC5wYXJlbnROb2RlKCk7Ci0gICAgICAgIGlmICghb2xkUGFyZW50KQor
ICAgIGlmIChhdXRvIGZyYWdtZW50ID0gZHluYW1pY0Rvd25jYXN0PERvY3VtZW50RnJhZ21lbnQ+
KGNoaWxkKSkgeworICAgICAgICBpZiAoIWZyYWdtZW50LT5oYXNDaGlsZE5vZGVzKCkpCiAgICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4gb2xkUGFyZW50LT5yZW1vdmVDaGls
ZChjaGlsZCk7Ci0gICAgfQogCi0gICAgYXV0byYgZnJhZ21lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dEZyYWdtZW50PihjaGlsZCk7Ci0gICAgaWYgKCFmcmFnbWVudC5oYXNDaGlsZE5vZGVzKCkpCi0g
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGF1dG8gcmVtb3ZlZENoaWxkTm9kZXMgPSBmcmFn
bWVudC0+cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENvbnRhaW5lck5vZGU6
OkNoaWxkQ2hhbmdlOjpTb3VyY2U6OkFQSSk7CisgICAgICAgIG5vZGVzRm9ySW5zZXJ0aW9uLnN3
YXAocmVtb3ZlZENoaWxkTm9kZXMpOwogCi0gICAgYXV0byByZW1vdmVkQ2hpbGROb2RlcyA9IGZy
YWdtZW50LnJlbW92ZUFsbENoaWxkcmVuV2l0aFNjcmlwdEFzc2VydGlvbihDb250YWluZXJOb2Rl
OjpDaGlsZENoYW5nZTo6U291cmNlOjpBUEkpOwotICAgIG5vZGVzRm9ySW5zZXJ0aW9uLnN3YXAo
cmVtb3ZlZENoaWxkTm9kZXMpOworICAgICAgICBmcmFnbWVudC0+cmVidWlsZFNWR0V4dGVuc2lv
bnNFbGVtZW50c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGZyYWdtZW50LT5kaXNwYXRjaFN1YnRy
ZWVNb2RpZmllZEV2ZW50KCk7CiAKLSAgICBmcmFnbWVudC5yZWJ1aWxkU1ZHRXh0ZW5zaW9uc0Vs
ZW1lbnRzSWZOZWNlc3NhcnkoKTsKLSAgICBmcmFnbWVudC5kaXNwYXRjaFN1YnRyZWVNb2RpZmll
ZEV2ZW50KCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQogCi0gICAgcmV0dXJuIHsgfTsK
KyAgICBub2Rlc0Zvckluc2VydGlvbi5hcHBlbmQoY2hpbGQpOworICAgIFJlZlB0ciBvbGRQYXJl
bnQgPSBjaGlsZC5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFvbGRQYXJlbnQpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgcmV0dXJuIG9sZFBhcmVudC0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwogfQog
CiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBtdXN0IGdldCBhIG5ldyBuYW1lLgpAQCAtMzE1LDE0
ICszMTQsMTQgQEAgdm9pZCBDb250YWluZXJOb2RlOjpyZW1vdmVEZXRhY2hlZENoaWxkcmVuKCkK
IAogc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lSZW5kZXJUcmVlSWZOZWVkZWQoTm9kZSYgY2hp
bGQpCiB7Ci0gICAgYm9vbCBpc0VsZW1lbnQgPSBpczxFbGVtZW50PihjaGlsZCk7Ci0gICAgYXV0
byBoYXNEaXNwbGF5Q29udGVudHMgPSBpc0VsZW1lbnQgJiYgZG93bmNhc3Q8RWxlbWVudD4oY2hp
bGQpLmhhc0Rpc3BsYXlDb250ZW50cygpOworICAgIGF1dG8gY2hpbGRBc0VsZW1lbnQgPSBkeW5h
bWljRG93bmNhc3Q8RWxlbWVudD4oY2hpbGQpOworICAgIGF1dG8gaGFzRGlzcGxheUNvbnRlbnRz
ID0gY2hpbGRBc0VsZW1lbnQgJiYgY2hpbGRBc0VsZW1lbnQtPmhhc0Rpc3BsYXlDb250ZW50cygp
OwogICAgIGlmICghY2hpbGQucmVuZGVyZXIoKSAmJiAhaGFzRGlzcGxheUNvbnRlbnRzKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKGlzRWxlbWVudCkKLSAgICAgICAgUmVuZGVyVHJlZVVwZGF0
ZXI6OnRlYXJEb3duUmVuZGVyZXJzKGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkKSk7Ci0gICAgZWxz
ZSBpZiAoaXM8VGV4dD4oY2hpbGQpKQotICAgICAgICBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRv
d25SZW5kZXJlcihkb3duY2FzdDxUZXh0PihjaGlsZCkpOworICAgIGlmIChjaGlsZEFzRWxlbWVu
dCkKKyAgICAgICAgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKCpjaGlsZEFz
RWxlbWVudCk7CisgICAgZWxzZSBpZiAoYXV0byB0ZXh0ID0gZHluYW1pY0Rvd25jYXN0PFRleHQ+
KGNoaWxkKSkKKyAgICAgICAgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXIoKnRl
eHQpOwogfQogCiB2b2lkIENvbnRhaW5lck5vZGU6OnRha2VBbGxDaGlsZHJlbkZyb20oQ29udGFp
bmVyTm9kZSogb2xkUGFyZW50KQpAQCAtMzY3LDggKzM2Niw4IEBAIHN0YXRpYyBib29sIGNvbnRh
aW5zSW5jbHVkaW5nSG9zdEVsZW1lbnRzKGNvbnN0IE5vZGUmIHBvc3NpYmxlQW5jZXN0b3IsIGNv
bnN0IE5vCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY29uc3QgQ29udGFpbmVy
Tm9kZSogcGFyZW50ID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKCFw
YXJlbnQpIHsKLSAgICAgICAgICAgIGlmIChpczxTaGFkb3dSb290PihjdXJyZW50Tm9kZSkpCi0g
ICAgICAgICAgICAgICAgcGFyZW50ID0gZG93bmNhc3Q8U2hhZG93Um9vdD4oY3VycmVudE5vZGUp
LT5ob3N0KCk7CisgICAgICAgICAgICBpZiAoYXV0byBzaGFkb3dSb290ID0gZHluYW1pY0Rvd25j
YXN0PFNoYWRvd1Jvb3Q+KGN1cnJlbnROb2RlKSkKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBz
aGFkb3dSb290LT5ob3N0KCk7CiAgICAgICAgICAgICBlbHNlIGlmIChpczxEb2N1bWVudEZyYWdt
ZW50PigqY3VycmVudE5vZGUpICYmIGRvd25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KCpjdXJyZW50
Tm9kZSkuaXNUZW1wbGF0ZUNvbnRlbnQoKSkKICAgICAgICAgICAgICAgICBwYXJlbnQgPSBzdGF0
aWNfY2FzdDxjb25zdCBUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50Kj4oY3VycmVudE5v
ZGUpLT5ob3N0KCk7CiAgICAgICAgIH0KQEAgLTQwMSw4ICs0MDAsOCBAQCBzdGF0aWMgaW5saW5l
IEV4Y2VwdGlvbk9yPHZvaWQ+IGNoZWNrQWNjZXB0Q2hpbGQoQ29udGFpbmVyTm9kZSYgbmV3UGFy
ZW50LCBOb2RlJgogICAgIGlmIChzaG91bGRWYWxpZGF0ZUNoaWxkUGFyZW50ID09IFNob3VsZFZh
bGlkYXRlQ2hpbGRQYXJlbnQ6OlllcyAmJiByZWZDaGlsZCAmJiByZWZDaGlsZC0+cGFyZW50Tm9k
ZSgpICE9ICZuZXdQYXJlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVy
cm9yIH07CiAKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KG5ld1BhcmVudCkpIHsKLSAgICAgICAgaWYg
KCFkb3duY2FzdDxEb2N1bWVudD4obmV3UGFyZW50KS5jYW5BY2NlcHRDaGlsZChuZXdDaGlsZCwg
cmVmQ2hpbGQsIG9wZXJhdGlvbikpCisgICAgaWYgKGF1dG8gbmV3UGFyZW50RG9jdW1lbnQgPSBk
eW5hbWljRG93bmNhc3Q8RG9jdW1lbnQ+KG5ld1BhcmVudCkpIHsKKyAgICAgICAgaWYgKCFuZXdQ
YXJlbnREb2N1bWVudC0+Y2FuQWNjZXB0Q2hpbGQobmV3Q2hpbGQsIHJlZkNoaWxkLCBvcGVyYXRp
b24pKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJv
ciB9OwogICAgIH0gZWxzZSBpZiAoIWlzQ2hpbGRUeXBlQWxsb3dlZChuZXdQYXJlbnQsIG5ld0No
aWxkKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJvciB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKaW5kZXggZjE1NTQwMTRiNmZkNjMwN2VhNTJj
OGI0MDM0MDg4MDdmMjc3MTUzZi4uMWNjYzY4ZjQ0NGQ5MTNhZmNiYTg3ZDNiNGZmMjEyM2E3MGRm
NzRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCkBAIC0xOTQsMzAgKzE5NCwyNiBA
QCBpbmxpbmUgQ29udGFpbmVyTm9kZTo6Q29udGFpbmVyTm9kZShEb2N1bWVudCYgZG9jdW1lbnQs
IENvbnN0cnVjdGlvblR5cGUgdHlwZSkKIAogaW5saW5lIHVuc2lnbmVkIE5vZGU6OmNvdW50Q2hp
bGROb2RlcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqdGhpcykpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhp
cykuY291bnRDaGlsZE5vZGVzKCk7CisgICAgYXV0byogY29udGFpbmVyTm9kZSA9IGR5bmFtaWNE
b3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcyk7CisgICAgcmV0dXJuIGNvbnRhaW5lck5vZGUg
PyBjb250YWluZXJOb2RlLT5jb3VudENoaWxkTm9kZXMoKSA6IDA7CiB9CiAKIGlubGluZSBOb2Rl
KiBOb2RlOjp0cmF2ZXJzZVRvQ2hpbGRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBp
ZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS50cmF2ZXJzZVRvQ2hpbGRB
dChpbmRleCk7CisgICAgYXV0byogY29udGFpbmVyTm9kZSA9IGR5bmFtaWNEb3duY2FzdDxDb250
YWluZXJOb2RlPigqdGhpcyk7CisgICAgcmV0dXJuIGNvbnRhaW5lck5vZGUgPyBjb250YWluZXJO
b2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChpbmRleCkgOiBudWxscHRyOwogfQogCiBpbmxpbmUgTm9k
ZSogTm9kZTo6Zmlyc3RDaGlsZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2Rl
PigqdGhpcykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBkb3duY2FzdDxD
b250YWluZXJOb2RlPigqdGhpcykuZmlyc3RDaGlsZCgpOworICAgIGF1dG8qIGNvbnRhaW5lck5v
ZGUgPSBkeW5hbWljRG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnRoaXMpOworICAgIHJldHVybiBj
b250YWluZXJOb2RlID8gY29udGFpbmVyTm9kZS0+Zmlyc3RDaGlsZCgpIDogbnVsbHB0cjsKIH0K
IAogaW5saW5lIE5vZGUqIE5vZGU6Omxhc3RDaGlsZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpczxD
b250YWluZXJOb2RlPigqdGhpcykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcykubGFzdENoaWxkKCk7CisgICAgYXV0byog
Y29udGFpbmVyTm9kZSA9IGR5bmFtaWNEb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcyk7Cisg
ICAgcmV0dXJuIGNvbnRhaW5lck5vZGUgPyBjb250YWluZXJOb2RlLT5sYXN0Q2hpbGQoKSA6IG51
bGxwdHI7CiB9CiAKIGlubGluZSBOb2RlJiBOb2RlOjpyb290Tm9kZSgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAppbmRleCBhNzAyNjNiMGJkYWNiOWU0M2ZkZWQ1ZTZmNGM3ZDBkNGQ3N2Nm
NWVjLi43OGNhYWFlN2Q5YzcyMzYyMDc2OGE0NDdmZWMyOGU4Yjg1YzE3YjcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTQ3MCwxMiArNDcwLDggQEAgc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWROYW1lUGFydChVQ2hhcjMyIGMpCiAKIHN0YXRpYyBXaWRnZXQqIHdpZGdldEZvckVsZW1l
bnQoRWxlbWVudCogZm9jdXNlZEVsZW1lbnQpCiB7Ci0gICAgaWYgKCFmb2N1c2VkRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byogcmVuZGVyZXIgPSBmb2N1c2VkRWxl
bWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4ocmVuZGVyZXIpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0
PigqcmVuZGVyZXIpLndpZGdldCgpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZm9jdXNlZEVsZW1l
bnQgPyBkeW5hbWljRG93bmNhc3Q8UmVuZGVyV2lkZ2V0Pihmb2N1c2VkRWxlbWVudC0+cmVuZGVy
ZXIoKSkgOiBudWxscHRyOworICAgIHJldHVybiByZW5kZXJlciA/IHJlbmRlcmVyLT53aWRnZXQo
KSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0aW5nRm9jdXMoY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKQEAgLTg5NSwxMyArODkxLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OmJ1
aWxkQWNjZXNzS2V5Q2FjaGUoKQogICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBtYWtlVW5pcXVlPEhh
c2hNYXA8U3RyaW5nLCBXZWFrUHRyPEVsZW1lbnQ+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
PihbdGhpc10gewogICAgICAgICBIYXNoTWFwPFN0cmluZywgV2Vha1B0cjxFbGVtZW50PiwgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYgbm9kZSA6IGNv
bXBvc2VkVHJlZURlc2NlbmRhbnRzKCp0aGlzKSkgewotICAgICAgICAgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKKyAgICAgICAgICAgIGF1dG8gZWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
Pihub2RlKTsKLSAgICAgICAgICAgIGF1dG8mIGtleSA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihhY2Nlc3NrZXlBdHRyKTsKKyAgICAgICAgICAgIGF1dG8mIGtleSA9
IGVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7
CiAgICAgICAgICAgICBpZiAoa2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG1hcC5hZGQoa2V5LCBlbGVtZW50KTsKKyAgICAgICAgICAgIG1hcC5h
ZGQoa2V5LCAqZWxlbWVudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1hcDsKICAgICB9
KCkpOwpAQCAtNDQ5OSw3ICs0NDk1LDcgQEAgdm9pZCBEb2N1bWVudDo6YWRqdXN0Rm9jdXNlZE5v
ZGVPbk5vZGVSZW1vdmFsKE5vZGUmIG5vZGUsIE5vZGVSZW1vdmFsIG5vZGVSZW1vdmEKICAgICBp
ZiAoaXNOb2RlSW5TdWJ0cmVlKCpmb2N1c2VkRWxlbWVudCwgbm9kZSwgbm9kZVJlbW92YWwpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXZvaWQgc3luY2hyb25vdXNseSB1cGRhdGlu
ZyB0aGUgc3R5bGUgaW5zaWRlIHNldEZvY3VzZWRFbGVtZW50LgogICAgICAgICAvLyBGSVhNRTog
T2JqZWN0IGVsZW1lbnRzIHNob3VsZCBhdm9pZCBsb2FkaW5nIGEgZnJhbWUgc3luY2hyb25vdXNs
eSBpbiBhIHBvc3Qgc3R5bGUgcmVjYWxjIGNhbGxiYWNrLgotICAgICAgICBTdWJmcmFtZUxvYWRp
bmdEaXNhYmxlciBkaXNhYmxlcihpczxDb250YWluZXJOb2RlPihub2RlKSA/ICZkb3duY2FzdDxD
b250YWluZXJOb2RlPihub2RlKSA6IG51bGxwdHIpOworICAgICAgICBTdWJmcmFtZUxvYWRpbmdE
aXNhYmxlciBkaXNhYmxlcihkeW5hbWljRG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkpOwog
ICAgICAgICBzZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCB7IHsgfSwgeyB9LCBGb2N1c1JlbW92
YWxFdmVudHNNb2RlOjpEb05vdERpc3BhdGNoLCB7IH0sIHsgfSB9KTsKICAgICAgICAgLy8gU2V0
IHRoZSBmb2N1cyBuYXZpZ2F0aW9uIHN0YXJ0aW5nIG5vZGUgdG8gdGhlIHByZXZpb3VzIGZvY3Vz
ZWQgZWxlbWVudCBzbyB0aGF0CiAgICAgICAgIC8vIHdlIGNhbiBmYWxsYmFjayB0byB0aGUgc2li
bGluZ3Mgb3IgcGFyZW50IG5vZGUgZm9yIHRoZSBuZXh0IHNlYXJjaC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCA1ZDI1MDc3MGNlY2QyYmY2ZDQ0MDEwOWE2NjZjNGZkZjUzZTBlNTEwLi41MTMw
NDg1NWFmYjZlYWEzZTNmYmQ5NDhhZDA0YTY5NmMzMTUyNWEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC0yMjk2LDcgKzIyOTYsNyBAQCBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3Vs
dCBFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBlIGlucwogCiAgICAg
Ym9vbCBiZWNvbWVDb25uZWN0ZWQgPSBpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQ7
CiAgICAgVHJlZVNjb3BlKiBuZXdTY29wZSA9ICZwYXJlbnRPZkluc2VydGVkVHJlZS50cmVlU2Nv
cGUoKTsKLSAgICBIVE1MRG9jdW1lbnQqIG5ld0RvY3VtZW50ID0gYmVjb21lQ29ubmVjdGVkICYm
IGlzPEhUTUxEb2N1bWVudD4obmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgPyAmZG93bmNhc3Q8
SFRNTERvY3VtZW50PihuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA6IG51bGxwdHI7CisgICAg
YXV0byogbmV3RG9jdW1lbnQgPSBiZWNvbWVDb25uZWN0ZWQgPyBkeW5hbWljRG93bmNhc3Q8SFRN
TERvY3VtZW50PihuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA6IG51bGxwdHI7CiAgICAgaWYg
KCFpbnNlcnRpb25UeXBlLnRyZWVTY29wZUNoYW5nZWQpCiAgICAgICAgIG5ld1Njb3BlID0gbnVs
bHB0cjsKIApAQCAtMjM1OCw3ICsyMzU4LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFu
Y2VzdG9yKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAg
ICBpZiAob2xkUGFyZW50T2ZSZW1vdmVkVHJlZS5pc0luVHJlZVNjb3BlKCkpIHsKICAgICAgICAg
VHJlZVNjb3BlKiBvbGRTY29wZSA9ICZvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLnRyZWVTY29wZSgp
OwogICAgICAgICBEb2N1bWVudCogb2xkRG9jdW1lbnQgPSByZW1vdmFsVHlwZS5kaXNjb25uZWN0
ZWRGcm9tRG9jdW1lbnQgPyAmb2xkU2NvcGUtPmRvY3VtZW50U2NvcGUoKSA6IG51bGxwdHI7Ci0g
ICAgICAgIEhUTUxEb2N1bWVudCogb2xkSFRNTERvY3VtZW50ID0gb2xkRG9jdW1lbnQgJiYgaXM8
SFRNTERvY3VtZW50Pigqb2xkRG9jdW1lbnQpID8gJmRvd25jYXN0PEhUTUxEb2N1bWVudD4oKm9s
ZERvY3VtZW50KSA6IG51bGxwdHI7CisgICAgICAgIGF1dG8qIG9sZEhUTUxEb2N1bWVudCA9IGR5
bmFtaWNEb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG9sZERvY3VtZW50KTsKICAgICAgICAgaWYgKCFy
ZW1vdmFsVHlwZS50cmVlU2NvcGVDaGFuZ2VkKQogICAgICAgICAgICAgb2xkU2NvcGUgPSBudWxs
cHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudElubGluZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50SW5saW5lcy5oCmluZGV4IDg2MGMwNDkxNjExNGNm
ZTQ2NGE0NzAyZmZhNzFkMThmMTI5N2MxZmQuLjNmODU3YTY0MzNkNmUxYjJiMzMyYzBmNjkzM2Y1
NzQ0MDQ0ZmVmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50SW5saW5l
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50SW5saW5lcy5oCkBAIC02MSw4ICs2
MSw3IEBAIGlubGluZSBOYW1lZE5vZGVNYXAqIE5vZGU6OmF0dHJpYnV0ZXMoKSBjb25zdAogCiBp
bmxpbmUgRWxlbWVudCogTm9kZTo6cGFyZW50RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgQ29udGFp
bmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwotICAgIHJldHVybiBpczxFbGVtZW50Pihw
YXJlbnQpID8gZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50KSA6IG51bGxwdHI7CisgICAgcmV0dXJu
IGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihwYXJlbnROb2RlKCkpOwogfQogCiBpbmxpbmUgY29u
c3QgRWxlbWVudCogRWxlbWVudDo6cm9vdEVsZW1lbnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCAzOTkxMjE0ZWMxNDNkMzg0YjY4YmFmNjU1OTljMjlm
NzY2NTM2NmViLi4wZWZmZTA2NTYyZDJiMGU0ODk0ZjBkN2FjMjk0OWZhZTg1MGIwZDM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUmIG5vZGUsIEV2ZW50JiBldmVu
dCkKICAgICBJbnB1dEVsZW1lbnRDbGlja1N0YXRlIGNsaWNrSGFuZGxpbmdTdGF0ZTsKIAogICAg
IGJvb2wgaXNBY3RpdmF0aW9uRXZlbnQgPSBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNs
aWNrRXZlbnQ7Ci0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0Rm9yTGVnYWN5UHJl
QWN0aXZhdGlvbkJlaGF2aW9yID0gaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkgPyAmZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4obm9kZSkgOiBudWxscHRyOworICAgIFJlZlB0ciBpbnB1dEZv
ckxlZ2FjeVByZUFjdGl2YXRpb25CZWhhdmlvciA9IGR5bmFtaWNEb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50Pihub2RlKTsKICAgICBpZiAoIWlucHV0Rm9yTGVnYWN5UHJlQWN0aXZhdGlvbkJlaGF2
aW9yICYmIGlzQWN0aXZhdGlvbkV2ZW50ICYmIGV2ZW50LmJ1YmJsZXMoKSkKICAgICAgICAgaW5w
dXRGb3JMZWdhY3lQcmVBY3RpdmF0aW9uQmVoYXZpb3IgPSBmaW5kSW5wdXRFbGVtZW50SW5FdmVu
dFBhdGgoZXZlbnRQYXRoKTsKICAgICBpZiAoaW5wdXRGb3JMZWdhY3lQcmVBY3RpdmF0aW9uQmVo
YXZpb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggZGFjM2UwODhkOWE1ZDNiNzY4
N2Q0ZGIxY2VmYjJkNWViOGIwZTBmMi4uNTlkMzlhYjE5YzRhZjhiZmEyMjhhNjVkZTZlNTFhM2Yz
YjM0NzBkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAtMjAzLDcgKzIwMyw3IEBA
IFJlZlB0cjxOb2RlPiBNb3VzZUV2ZW50Ojp0b0VsZW1lbnQoKSBjb25zdAogICAgICAgICB0YXJn
ZXQgPSByZWxhdGVkVGFyZ2V0KCk7CiAgICAgZWxzZQogICAgICAgICB0YXJnZXQgPSB0aGlzLT50
YXJnZXQoKTsKLSAgICByZXR1cm4gaXM8Tm9kZT4odGFyZ2V0KSA/ICZkb3duY2FzdDxOb2RlPigq
dGFyZ2V0KSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxOb2RlPih0YXJn
ZXQpOwogfQogCiBSZWZQdHI8Tm9kZT4gTW91c2VFdmVudDo6ZnJvbUVsZW1lbnQoKSBjb25zdApA
QCAtMjE0LDcgKzIxNCw3IEBAIFJlZlB0cjxOb2RlPiBNb3VzZUV2ZW50Ojpmcm9tRWxlbWVudCgp
IGNvbnN0CiAgICAgICAgIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGVsc2UKICAgICAg
ICAgdGFyZ2V0ID0gcmVsYXRlZFRhcmdldCgpOwotICAgIHJldHVybiBpczxOb2RlPih0YXJnZXQp
ID8gJmRvd25jYXN0PE5vZGU+KCp0YXJnZXQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1p
Y0Rvd25jYXN0PE5vZGU+KHRhcmdldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAppbmRleCA1MWUwYWNhMzQ0NDlmYzNjM2Q2NTliMjY0Y2Y4ODVhYjMzZjdmOGNk
Li45NjI4MTgwMzYxYzc0M2RkNzRhZjBhYTMyZGI0NThmNGQ2YmE3YjNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCkBAIC04MDEsMTQgKzgwMSwxMiBAQCBOb2RlOjpFZGl0YWJpbGl0eSBOb2RlOjpjb21wdXRl
RWRpdGFiaWxpdHkoVXNlclNlbGVjdEFsbFRyZWF0bWVudCB0cmVhdG1lbnQsIFNobwogCiBSZW5k
ZXJCb3gqIE5vZGU6OnJlbmRlckJveCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVy
ZXIpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikgOiBudWxscHRyOworICAgIHJldHVy
biBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKIH0KIAogUmVuZGVyQm94
TW9kZWxPYmplY3QqIE5vZGU6OnJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3QKIHsKLSAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICByZXR1cm4gaXM8
UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlckJveE1vZGVs
T2JqZWN0PihyZW5kZXJlcikgOiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8
UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpOwogfQogICAgIAogTGF5b3V0UmVjdCBO
b2RlOjpyZW5kZXJSZWN0KGJvb2wqIGlzUmVwbGFjZWQpCkBAIC0xMTQ4LDggKzExNDYsNyBAQCBF
bGVtZW50KiBOb2RlOjpzaGFkb3dIb3N0KCkgY29uc3QKIAogU2hhZG93Um9vdCogTm9kZTo6Y29u
dGFpbmluZ1NoYWRvd1Jvb3QoKSBjb25zdAogewotICAgIENvbnRhaW5lck5vZGUmIHJvb3QgPSB0
cmVlU2NvcGUoKS5yb290Tm9kZSgpOwotICAgIHJldHVybiBpczxTaGFkb3dSb290Pihyb290KSA/
IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCZyb290KSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFt
aWNEb3duY2FzdDxTaGFkb3dSb290Pih0cmVlU2NvcGUoKS5yb290Tm9kZSgpKTsKIH0KIAogI2lm
IEFTU0VSVF9FTkFCTEVECkBAIC0xNjQzLDggKzE2NDAsOCBAQCB1bnNpZ25lZCBzaG9ydCBOb2Rl
Ojpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbihOb2RlJiBvdGhlck5vZGUpCiAgICAgaWYgKCZvdGhl
ck5vZGUgPT0gdGhpcykKICAgICAgICAgcmV0dXJuIERPQ1VNRU5UX1BPU0lUSU9OX0VRVUlWQUxF
TlQ7CiAgICAgCi0gICAgQXR0ciogYXR0cjEgPSBpczxBdHRyPigqdGhpcykgPyBkb3duY2FzdDxB
dHRyPih0aGlzKSA6IG51bGxwdHI7Ci0gICAgQXR0ciogYXR0cjIgPSBpczxBdHRyPihvdGhlck5v
ZGUpID8gJmRvd25jYXN0PEF0dHI+KG90aGVyTm9kZSkgOiBudWxscHRyOworICAgIGF1dG8qIGF0
dHIxID0gZHluYW1pY0Rvd25jYXN0PEF0dHI+KCp0aGlzKTsKKyAgICBhdXRvKiBhdHRyMiA9IGR5
bmFtaWNEb3duY2FzdDxBdHRyPihvdGhlck5vZGUpOwogICAgIAogICAgIE5vZGUqIHN0YXJ0MSA9
IGF0dHIxID8gYXR0cjEtPm93bmVyRWxlbWVudCgpIDogdGhpczsKICAgICBOb2RlKiBzdGFydDIg
PSBhdHRyMiA/IGF0dHIyLT5vd25lckVsZW1lbnQoKSA6ICZvdGhlck5vZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmNwcAppbmRleCA5YTUxMmVmZTdjOWMwMWVmODIwMTJjYjQzZjliNjExNTU4OTY3YTJh
Li5kNTg3YjhiYzY4YjIyZjBmZjRkYTAzY2Q4OTIzYzNjNjdhODMyMTI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBUZXh0KiBQb3NpdGlvbjo6Y29udGFpbmVy
VGV4dCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhbmNob3JUeXBlKCkpIHsKICAgICBjYXNlIFBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoKLSAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSAmJiBp
czxUZXh0PigqbV9hbmNob3JOb2RlKSA/IGRvd25jYXN0PFRleHQ+KG1fYW5jaG9yTm9kZS5nZXQo
KSkgOiBudWxscHRyOworICAgICAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFRleHQ+KG1fYW5j
aG9yTm9kZS5nZXQoKSk7CiAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQW5jaG9yOgogICAgIGNh
c2UgUG9zaXRpb25Jc0FmdGVyQW5jaG9yOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwCmluZGV4IGI3OGNhNzkwY2Q3NzJlMjVl
NzU3MWIyN2EzNmYzNzI5OGQ3OTg4NGQuLjc3NmMyY2I3NjQwZGMxNjcxOTc2OGQzYWEyMzJhZTM3
NzFkNmE1NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNh
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmNwcApAQCAt
NDcsMTAgKzQ3LDEwIEBAIFN0cmluZyBjb250ZW50c0FzU3RyaW5nKGNvbnN0IENvbnRhaW5lck5v
ZGUmIHJvb3QpCiAKIFN0cmluZyBjb250ZW50c0FzU3RyaW5nKGNvbnN0IE5vZGUmIHJvb3QpCiB7
Ci0gICAgaWYgKGlzPFRleHQ+KHJvb3QpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dD4o
cm9vdCkuZGF0YSgpOwotICAgIGlmIChpczxDb250YWluZXJOb2RlPihyb290KSkKLSAgICAgICAg
cmV0dXJuIGNvbnRlbnRzQXNTdHJpbmcoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocm9vdCkpOwor
ICAgIGlmIChhdXRvIHRleHQgPSBkeW5hbWljRG93bmNhc3Q8VGV4dD4ocm9vdCkpCisgICAgICAg
IHJldHVybiB0ZXh0LT5kYXRhKCk7CisgICAgaWYgKGF1dG8gY29udGFpbmVyTm9kZSA9IGR5bmFt
aWNEb3duY2FzdDxDb250YWluZXJOb2RlPihyb290KSkKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRz
QXNTdHJpbmcoKmNvbnRhaW5lck5vZGUpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlLmNwcAppbmRleCA4ZjZjNDdmOGNkNjhlZmZhMDk5MjQ2YzAwMTA1MjY1
OTJhYjRlYjYzLi5lMjk2NzYxMzM0NmNhMWE3ZGZmZTM3MzMzYzBlZjZkNTU0NGVlM2Q3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVNjb3BlLmNwcApAQCAtNDE0LDggKzQxNCw4IEBAIFZlY3RvcjxSZWZQdHI8
RWxlbWVudD4+IFRyZWVTY29wZTo6ZWxlbWVudHNGcm9tUG9pbnQoZG91YmxlIGNsaWVudFgsIGRv
dWJsZSBjbGllCiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGlmIChpczxQc2V1ZG9FbGVtZW50Pihub2RlKSkKLSAgICAgICAgICAgIG5vZGUgPSBk
b3duY2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKTsKKyAgICAgICAgaWYg
KGF1dG8gcHNldWRvRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9k
ZSkpCisgICAgICAgICAgICBub2RlID0gcHNldWRvRWxlbWVudC0+aG9zdEVsZW1lbnQoKTsKIAog
ICAgICAgICAvLyBQcnVuZSBkdXBsaWNhdGUgZW50cmllcy4gQSBwc2V1ZG8gOjpiZWZvcmUgY29u
dGVudCBhYm92ZSBpdHMgcGFyZW50CiAgICAgICAgIC8vIG5vZGUgc2hvdWxkIG9ubHkgcmVzdWx0
IGluIG9uZSBlbnRyeS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UeXBlZEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UeXBlZEVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3IuaAppbmRleCA2YmNkNWM0MGE4MjJhY2ZkNzE5ZWIxM2U2NGYzYzYw
ZTBlNWI5NmYwLi5jMzEzYzJjYzBiOTFlNTllZGI2ODcxYjY0NmYwODEwYjM0MDk3MjUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
ci5oCkBAIC0xNzAsOCArMTcwLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IEVsZW1lbnREZXMKIHRlbXBsYXRl
PHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRU
eXBlPiBFbGVtZW50RGVzY2VuZGFudFJhbmdlPEVsZW1lbnRUeXBlPjo6ZnJvbShFbGVtZW50JiBk
ZXNjZW5kYW50KSBjb25zdAogewogICAgIEFTU0VSVChkZXNjZW5kYW50LmlzRGVzY2VuZGFudE9m
KG1fcm9vdCkpOwotICAgIGlmIChpczxFbGVtZW50VHlwZT4oZGVzY2VuZGFudCkpCi0gICAgICAg
IHJldHVybiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIGRv
d25jYXN0PEVsZW1lbnRUeXBlPigmZGVzY2VuZGFudCkpOworICAgIGlmIChhdXRvIGRlc2NlbmRh
bnRFbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnRUeXBlPihkZXNjZW5kYW50KSkKKyAg
ICAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9v
dCwgZGVzY2VuZGFudEVsZW1lbnQpOwogICAgIEVsZW1lbnRUeXBlKiBuZXh0ID0gVHJhdmVyc2Fs
PEVsZW1lbnRUeXBlPjo6bmV4dChkZXNjZW5kYW50LCAmbV9yb290KTsKICAgICByZXR1cm4gRWxl
bWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBuZXh0KTsKIH0KQEAg
LTIwNyw4ICsyMDcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gSW5jbHVzaXZlRQogdGVtcGxhdGU8dHlwZW5h
bWUgRWxlbWVudFR5cGU+IEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IElu
Y2x1c2l2ZUVsZW1lbnREZXNjZW5kYW50UmFuZ2U8RWxlbWVudFR5cGU+Ojpmcm9tKEVsZW1lbnQm
IGRlc2NlbmRhbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCZtX3Jvb3QgPT0gJmRlc2NlbmRhbnQg
fHwgZGVzY2VuZGFudC5pc0Rlc2NlbmRhbnRPZihtX3Jvb3QpKTsKLSAgICBpZiAoaXM8RWxlbWVu
dFR5cGU+KGRlc2NlbmRhbnQpKQotICAgICAgICByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBkb3duY2FzdDxFbGVtZW50VHlwZT4oJmRlc2NlbmRh
bnQpKTsKKyAgICBpZiAoYXV0byBkZXNjZW5kYW50RWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxF
bGVtZW50VHlwZT4oZGVzY2VuZGFudCkpCisgICAgICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIGRlc2NlbmRhbnRFbGVtZW50KTsKICAgICBF
bGVtZW50VHlwZSogbmV4dCA9IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5leHQoZGVzY2VuZGFu
dCwgJm1fcm9vdCk7CiAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVu
dFR5cGU+KG1fcm9vdCwgbmV4dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
VmlzaXRlZExpbmtTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0
ZS5jcHAKaW5kZXggMTMxNTkxYmI0OThiNDc5ZmYwMDBlYjg3ODc2YTcyM2MyYWZhZTdlZS4uYzU4
N2M0ZWMwZWU4NzM2YTk3ZDU1NzA5NWY1MzRiNmQ0ZDg1YjFkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9WaXNpdGVkTGlua1N0YXRlLmNwcApAQCAtNzEsMTAgKzcxLDEwIEBAIHZvaWQgVmlzaXRlZExp
bmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKQogCiBpbmxpbmUgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8U2hhcmVkU3RyaW5nSGFzaD4gbGlua0hhc2hGb3JFbGVtZW50KGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50
KSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KS52
aXNpdGVkTGlua0hhc2goKTsKLSAgICBpZiAoaXM8U1ZHQUVsZW1lbnQ+KGVsZW1lbnQpKQotICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHQUVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5rSGFz
aCgpOworICAgIGlmIChhdXRvIGFuY2hvciA9IGR5bmFtaWNEb3duY2FzdDxIVE1MQW5jaG9yRWxl
bWVudD4oZWxlbWVudCkpCisgICAgICAgIHJldHVybiBhbmNob3ItPnZpc2l0ZWRMaW5rSGFzaCgp
OworICAgIGlmIChhdXRvIGFuY2hvciA9IGR5bmFtaWNEb3duY2FzdDxTVkdBRWxlbWVudD4oZWxl
bWVudCkpCisgICAgICAgIHJldHVybiBhbmNob3ItPnZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9t
ZXNzYWdlcG9ydHMvTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKaW5kZXgg
ZmM1MTNlZTFjODRiN2JiOGU0OTZhM2E3MGE0MTY0ODA2MDAzYTc5Zi4uMzQxYzAzY2VmM2RlM2E0
YzhjNDZlNDUwNTI4YTZhM2M1MGMzNTBiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL21lc3NhZ2Vwb3J0cy9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAK
QEAgLTU3LDExICs1NywxMSBAQCB2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpzZXRT
aGFyZWRQcm92aWRlcihNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlciYgcAogCiBNZXNzYWdlUG9y
dENoYW5uZWxQcm92aWRlciYgTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6OmZyb21Db250ZXh0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGlzPERvY3VtZW50
Pihjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5t
ZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcigpOworICAgIGlmIChhdXRvIGRvY3VtZW50ID0gZHlu
YW1pY0Rvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50
LT5tZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcigpOwogCi0gICAgaWYgKGlzPFdvcmtsZXRHbG9i
YWxTY29wZT4oY29udGV4dCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxXb3JrbGV0R2xvYmFs
U2NvcGU+KGNvbnRleHQpLm1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyKCk7CisgICAgaWYgKGF1
dG8gd29ya2xldFNjb3BlID0gZHluYW1pY0Rvd25jYXN0PFdvcmtsZXRHbG9iYWxTY29wZT4oY29u
dGV4dCkpCisgICAgICAgIHJldHVybiB3b3JrbGV0U2NvcGUtPm1lc3NhZ2VQb3J0Q2hhbm5lbFBy
b3ZpZGVyKCk7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRl
eHQpLm1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmNwcAppbmRleCA5ODBkZGU4NTFmMTA3MjNkNzhmNjYxOTg0MjczMjQ4ZjdhMGZhNWM0Li43
ZDlkNTliZTFjMTUyZjA5ODVmNWY1MThiYjlmY2NlNTZmODdiYzlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAKQEAgLTMyMSw4ICszMjEsNyBAQCBib29sIGlzSW5saW5lKGNvbnN0IE5v
ZGUqIG5vZGUpCiAvLyBrbm93aW5nIGFib3V0IHRoZXNlIGtpbmRzIG9mIHNwZWNpYWwgY2FzZXMu
CiBFbGVtZW50KiBlbmNsb3NpbmdCbG9jayhOb2RlKiBub2RlLCBFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgcnVsZSkKIHsKLSAgICBOb2RlKiBlbmNsb3NpbmdOb2RlID0gZW5jbG9zaW5nTm9k
ZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIGlzQmxvY2ssIHJ1bGUp
OwotICAgIHJldHVybiBpczxFbGVtZW50PihlbmNsb3NpbmdOb2RlKSA/IGRvd25jYXN0PEVsZW1l
bnQ+KGVuY2xvc2luZ05vZGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0
PEVsZW1lbnQ+KGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KG5vZGUpLCBpc0Jsb2NrLCBydWxlKSk7CiB9CiAKIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAppbmRleCAzOTg5ZDdlN2RlNTUwNzJiMjQyZThl
MzQwNTQxN2ZmNjY5MDdiMjc3Li45ZjNhNjExNDljMDEwZDhkZTcyNTA1YjA3N2ZhMjBjZTFiMWYz
MGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKQEAg
LTE1NSw4ICsxNTUsNyBAQCBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBMYWJlbFRl
eHQoKSBjb25zdAogICAgIAogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRHcm91cEVsZW1lbnQ6
Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgYXV0byogcGFyZW50ID0gcGFyZW50
Tm9kZSgpOwotICAgIHJldHVybiBpczxIVE1MU2VsZWN0RWxlbWVudD4ocGFyZW50KSA/IGRvd25j
YXN0PEhUTUxTZWxlY3RFbGVtZW50PihwYXJlbnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHlu
YW1pY0Rvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PihwYXJlbnROb2RlKCkpOwogfQogCiBib29s
IEhUTUxPcHRHcm91cEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5kZXggODJjMzg5ZTkzY2Jh
OGQ0NmRiMDRlNWI2ZTI0NDhkM2M3NTY5Y2M3MS4uOTFkZDkwZjM3NTQzMDU3ZTcwMzcyNDVjYmU4
ODU4OGY0OTQyNzZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQuY3BwCkBAIC03NCw3ICs3NCw3IEBAIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6On5I
VE1MUGx1Z0luSW1hZ2VFbGVtZW50KCkKIFJlbmRlckVtYmVkZGVkT2JqZWN0KiBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpyZW5kZXJFbWJlZGRlZE9iamVjdCgpIGNvbnN0CiB7CiAgICAgLy8gSFRN
TE9iamVjdEVsZW1lbnQgYW5kIEhUTUxFbWJlZEVsZW1lbnQgbWF5IHJldHVybiBhcmJpdHJhcnkg
cmVuZGVyZXJzIHdoZW4gdXNpbmcgZmFsbGJhY2sgY29udGVudC4KLSAgICByZXR1cm4gaXM8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRP
YmplY3Q+KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0
PFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcigpKTsKIH0KIAogYm9vbCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50Ojppc0ltYWdlVHlwZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IGExYmUxMTUw
NWIwZDVmNWYyMzQyN2E0ZjE4NmI2OWM3Y2VhM2ZlOGQuLmI4YjVmYjY1YWNmNDEyZTkzMjI1MjQ1
YTQxYTVkODE4MTU1NWQ2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC03OTQsNyArNzk0LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNyZWF0ZShDYW4KICAgICBib29sIGlzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24gPSBmYWxzZTsKICAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gbnVsbHB0cjsKIAotICAg
IGF1dG8qIGNhbnZhc0VsZW1lbnQgPSBpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSA/ICZk
b3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSA6IG51bGxwdHI7CisgICAgYXV0byog
Y2FudmFzRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFz
KTsKIAogICAgIGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVu
dCA9IGNhbnZhc0VsZW1lbnQtPmRvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmlj
YXRpb24uY3BwCmluZGV4IDNjMTk3MTUwN2JlMzI5ZmM5NjNmMjQ3YjdhNGIwODMzNDYyMDY3MTUu
LjUzMWQyNGM0M2VmYjE0YTI3ODY0ZmY1Zjk2MGUyMTA5OTBjNWRjMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9WZXJpZmljYXRpb24uY3BwCkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGJvb2wg
b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVh
bSYgc3RyZWFtLAogICAgIGZvciAodW5zaWduZWQgaW5saW5lQm94SW5kZXggPSAwOyBpbmxpbmVC
b3hJbmRleCA8IGlubGluZUJveGVzLnNpemUoKSAmJiBib3hJbmRleCA8IGJveGVzLnNpemUoKTsg
KytpbmxpbmVCb3hJbmRleCkgewogICAgICAgICBhdXRvJiBib3ggPSBib3hlc1tib3hJbmRleF07
CiAgICAgICAgIGF1dG8qIGlubGluZUJveCA9IGlubGluZUJveGVzW2lubGluZUJveEluZGV4XTsK
LSAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9IGlzPFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g+KGlubGluZUJveCkgPyBkb3duY2FzdDxXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94
PihpbmxpbmVCb3gpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9IGR5
bmFtaWNEb3duY2FzdDxXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpOwog
ICAgICAgICBib29sIG1hdGNoaW5nUnVucyA9IGlubGluZVRleHRCb3ggPyBjaGVja0Zvck1hdGNo
aW5nVGV4dFJ1bnMoYm94LCAqaW5saW5lVGV4dEJveCkgOiBjaGVja0Zvck1hdGNoaW5nTm9uVGV4
dFJ1bnMoYm94LCAqaW5saW5lQm94KTsKIAogICAgICAgICBpZiAoIW1hdGNoaW5nUnVucykgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcAppbmRleCBiMDBj
NTE4MmFmMjk1MTM0NmE3ZTYyZDlkYmY5OTI1NjE3MWEyOGJlLi4zNDRjZGZiMzg5MWExNzMyYTUw
Mzg3NWFkZmEzMTgyYzUyMmRlOTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1
dG9zY3JvbGxDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3Jv
bGxDb250cm9sbGVyLmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgQXV0b3Njcm9sbENvbnRy
b2xsZXI6OnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpCiAKICAgICB3aGlsZSAocmVuZGVyZXIg
JiYgIShpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVu
ZGVyZXIpLmNhbkF1dG9zY3JvbGwoKSkpCiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBh
cmVudCgpOwotICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyID0gaXM8UmVuZGVyQm94PihyZW5kZXJl
cikgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKSA6IG51bGxwdHI7CisgICAgbV9hdXRv
c2Nyb2xsUmVuZGVyZXIgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CiB9
CiAKIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xsZXI6OnVwZGF0ZURyYWdBbmREcm9wKE5vZGUqIGRy
b3BUYXJnZXROb2RlLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3NpdGlvbiwgV2FsbFRpbWUgZXZl
bnRUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAppbmRleCA4ODkwNTJlM2E0NTJlMjU2ZTM4
NzgyMzg2N2UzYmI3OGQ1MDU3NDZkLi42NDViNjk5ZDExMmYxMTQ1ZTQxMzA5YmRlNTIxNWMxYjBi
NmVlNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcApAQCAtMzMyLDcgKzMzMiw3IEBAIHZv
aWQgRE9NVGltZXI6OmZpcmVkKCkKICAgICAgICAgbmVzdGVkVGltZXJzLT5zdGFydFRyYWNraW5n
KCk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9DSEFOR0VfT0JTRVJWRVIpCi0gICAgQ29udGVudENo
YW5nZU9ic2VydmVyOjpET01UaW1lclNjb3BlIG9ic2VydmluZ1Njb3BlKGlzPERvY3VtZW50Pihj
b250ZXh0KSA/ICZkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkgOiBudWxscHRyLCAqdGhpcyk7
CisgICAgQ29udGVudENoYW5nZU9ic2VydmVyOjpET01UaW1lclNjb3BlIG9ic2VydmluZ1Njb3Bl
KGR5bmFtaWNEb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksICp0aGlzKTsKICNlbmRpZgogICAg
IG1fYWN0aW9uLT5leGVjdXRlKGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwCmluZGV4IDEzOTk1Njg5MzE5ZDk0MGJhM2JmOWQ0YjQyOGQyNzJhNmEzNWE0MDIu
LmY0YjhjODc4ZGIwMGE4MGI3ZDA2NGNiMjUxNmMwNTMzZjFmM2FkZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0zNDMsMTAgKzM0Myw4IEBAIHN0YXRpYyBIVE1M
SW5wdXRFbGVtZW50KiBhc0ZpbGVJbnB1dChOb2RlJiBub2RlKQogICAgIGF1dG8qIGlucHV0RWxl
bWVudCA9ICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKIAogICAgIC8vIElmIHRo
aXMgaXMgYSBidXR0b24gaW5zaWRlIG9mIHRoZSBhIGZpbGUgaW5wdXQsIG1vdmUgdXAgdG8gdGhl
IGZpbGUgaW5wdXQuCi0gICAgaWYgKGlucHV0RWxlbWVudC0+aXNUZXh0QnV0dG9uKCkgJiYgaXM8
U2hhZG93Um9vdD4oaW5wdXRFbGVtZW50LT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKSkgewotICAg
ICAgICBhdXRvJiBob3N0ID0gKmRvd25jYXN0PFNoYWRvd1Jvb3Q+KGlucHV0RWxlbWVudC0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKSkuaG9zdCgpOwotICAgICAgICBpbnB1dEVsZW1lbnQgPSBpczxI
VE1MSW5wdXRFbGVtZW50Pihob3N0KSA/ICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihob3N0
KSA6IG51bGxwdHI7Ci0gICAgfQorICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzVGV4dEJ1dHRvbigp
KQorICAgICAgICBpbnB1dEVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oaW5wdXRFbGVtZW50LT5zaGFkb3dIb3N0KCkpOwogCiAgICAgcmV0dXJuIGlucHV0RWxlbWVu
dCAmJiBpbnB1dEVsZW1lbnQtPmlzRmlsZVVwbG9hZCgpID8gaW5wdXRFbGVtZW50IDogbnVsbHB0
cjsKIH0KQEAgLTUwMiwxMiArNTAwLDggQEAgc3RkOjpvcHRpb25hbDxEcmFnT3BlcmF0aW9uPiBE
cmFnQ29udHJvbGxlcjo6b3BlcmF0aW9uRm9yTG9hZChjb25zdCBEcmFnRGF0YSYgZHIKICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBvaW50KGRy
YWdEYXRhLmNsaWVudFBvc2l0aW9uKCkpOwogCiAgICAgYm9vbCBwbHVnaW5Eb2N1bWVudEFjY2Vw
dHNEcmFncyA9IGZhbHNlOwotCi0gICAgaWYgKGlzPFBsdWdpbkRvY3VtZW50Pihkb2N1bWVudCkp
IHsKLSAgICAgICAgY29uc3QgV2lkZ2V0KiB3aWRnZXQgPSBkb3duY2FzdDxQbHVnaW5Eb2N1bWVu
dD4oKmRvY3VtZW50KS5wbHVnaW5XaWRnZXQoKTsKLSAgICAgICAgY29uc3QgUGx1Z2luVmlld0Jh
c2UqIHBsdWdpblZpZXcgPSBpczxQbHVnaW5WaWV3QmFzZT4od2lkZ2V0KSA/IGRvd25jYXN0PFBs
dWdpblZpZXdCYXNlPih3aWRnZXQpIDogbnVsbHB0cjsKLQotICAgICAgICBpZiAocGx1Z2luVmll
dykKKyAgICBpZiAoYXV0byogcGx1Z2luRG9jdW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8UGx1Z2lu
RG9jdW1lbnQ+KGRvY3VtZW50KSkgeworICAgICAgICBpZiAoYXV0byogcGx1Z2luVmlldyA9IGR5
bmFtaWNEb3duY2FzdDxQbHVnaW5WaWV3QmFzZT4ocGx1Z2luRG9jdW1lbnQtPnBsdWdpbldpZGdl
dCgpKSkKICAgICAgICAgICAgIHBsdWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzID0gcGx1Z2luVmll
dy0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCk7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCA2ZGZlMGRkM2VhNGRhM2ExZjVmMGY2Yzc5ZDZk
MWEzYmYwMGMzMTU5Li45ZTk3ZGQ1ZjY4OWU2YTFhOTBjOTA2OTQ0NWRjM2Y0YjhjNDVlODQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgRHJh
Z0ltYWdlUmVmIGZpdERyYWdJbWFnZVRvTWF4U2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0
IEludFNpemUmIGxheW91dFNpemUKIAogc3RydWN0IFNjb3BlZE5vZGVEcmFnRW5hYmxlciB7CiAg
ICAgU2NvcGVkTm9kZURyYWdFbmFibGVyKEZyYW1lJiBmcmFtZSwgTm9kZSYgbm9kZSkKLSAgICAg
ICAgOiBlbGVtZW50KGlzPEVsZW1lbnQ+KG5vZGUpID8gJmRvd25jYXN0PEVsZW1lbnQ+KG5vZGUp
IDogbnVsbHB0cikKKyAgICAgICAgOiBlbGVtZW50KGR5bmFtaWNEb3duY2FzdDxFbGVtZW50Pihu
b2RlKSkKICAgICB7CiAgICAgICAgIGlmIChlbGVtZW50KQogICAgICAgICAgICAgZWxlbWVudC0+
c2V0QmVpbmdEcmFnZ2VkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9T
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQppbmRleCAyYTRjOTFiNTM2OWZlYzU4ZDljOWQ5
NGU5ZmI0MjQ2ZDNjYmVmOTM4Li5lNjFhM2E3ZmNjOTYzNzk4ZjY4OThjMDEyN2JkNzRiYjMzMGJm
N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQy5tbQpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0
ZUFWRk9iakM6OnNldENETVNlc3Npb24oQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyogc2Vz
CiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRDRE1JbnN0YW5jZShDRE1JbnN0
YW5jZSogaW5zdGFuY2UpCiB7CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgSEFWRShB
VkNPTlRFTlRLRVlTRVNTSU9OKQotICAgIGF1dG8qIGZwc0luc3RhbmNlID0gaXM8Q0RNSW5zdGFu
Y2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakM+KGluc3RhbmNlKSA/IGRvd25jYXN0PENETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDPihpbnN0YW5jZSkgOiBudWxscHRyOworICAgIGF1
dG8qIGZwc0luc3RhbmNlID0gZHluYW1pY0Rvd25jYXN0PENETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDPihpbnN0YW5jZSk7CiAgICAgaWYgKGZwc0luc3RhbmNlID09IG1fY2RtSW5z
dGFuY2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCmluZGV4IDJjZGRlZGIxNWVmMGFlNDg3ODNjYzFjYTdi
MzQ0ZmIwMjQzNDUwMmUuLjdiNDZmMzk4YmQxMmE4OWVhNTlmZDc2YjY1OTI2YTI4NDE4Mzg1NGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5j
cHAKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OmNvbXB1dGVM
b2dpY2FsQm94SGVpZ2h0cyhMZWdhY3lSb290SW5saW5lQm94JiByb290Qm94LAogICAgICAgICBp
ZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsgLy8gUG9zaXRpb25lZCBwbGFjZWhvbGRlcnMgZG9uJ3QgYWZmZWN0IGNhbGN1
bGF0aW9ucy4KICAgICAgICAgCi0gICAgICAgIExlZ2FjeUlubGluZUZsb3dCb3gqIGlubGluZUZs
b3dCb3ggPSBpczxMZWdhY3lJbmxpbmVGbG93Qm94PigqY2hpbGQpID8gZG93bmNhc3Q8TGVnYWN5
SW5saW5lRmxvd0JveD4oY2hpbGQpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0byogaW5saW5lRmxv
d0JveCA9IGR5bmFtaWNEb3duY2FzdDxMZWdhY3lJbmxpbmVGbG93Qm94PigqY2hpbGQpOwogICAg
ICAgICAKICAgICAgICAgYm9vbCBhZmZlY3RzQXNjZW50ID0gZmFsc2U7CiAgICAgICAgIGJvb2wg
YWZmZWN0c0Rlc2NlbnQgPSBmYWxzZTsKQEAgLTY2Nyw3ICs2NjcsNyBAQCBzdGF0aWMgdm9pZCBw
bGFjZUNoaWxkSW5saW5lQm94ZXNJbkJsb2NrRGlyZWN0aW9uKExlZ2FjeUlubGluZUZsb3dCb3gm
IGlubGluZUJveAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBM
ZWdhY3lJbmxpbmVGbG93Qm94KiBpbmxpbmVGbG93Qm94ID0gaXM8TGVnYWN5SW5saW5lRmxvd0Jv
eD4oKmNoaWxkKSA/IGRvd25jYXN0PExlZ2FjeUlubGluZUZsb3dCb3g+KGNoaWxkKSA6IG51bGxw
dHI7CisgICAgICAgIGF1dG8qIGlubGluZUZsb3dCb3ggPSBkeW5hbWljRG93bmNhc3Q8TGVnYWN5
SW5saW5lRmxvd0JveD4oKmNoaWxkKTsKICAgICAgICAgYm9vbCBjaGlsZEFmZmVjdHNUb3BCb3R0
b21Qb3MgPSB0cnVlOwogCiAgICAgICAgIGlmIChjaGlsZC0+dmVydGljYWxBbGlnbigpID09IFZl
cnRpY2FsQWxpZ246OlRvcCAmJiB2ZXJ0aWNhbEFsaWduQXBwbGllcyhjaGlsZC0+cmVuZGVyZXIo
KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4
IDNlN2UwY2NlMTU5MjA0M2E4ZWIxNDk5MDg0MDYyNjA3OTA0Y2Y0ZjAuLjg0MmJlMWIzMjlmMmI2
N2MxYTg3ZjU0MWI4MTJjNzFjZDliNTliNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbywKICAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGQsIGxvZ2ljYWxUb3BFc3Rp
bWF0ZSwgQXBwbHlMYXlvdXREZWx0YSk7CiAgICAgZXN0aW1hdGVGcmFnbWVudFJhbmdlRm9yQm94
Q2hpbGQoY2hpbGQpOwogCi0gICAgUmVuZGVyQmxvY2tGbG93KiBjaGlsZEJsb2NrRmxvdyA9IGlz
PFJlbmRlckJsb2NrRmxvdz4oY2hpbGQpID8gJmRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oY2hp
bGQpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBjaGlsZEJsb2NrRmxvdyA9IGR5bmFtaWNEb3duY2Fz
dDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKTsKICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dpdGhG
bG9hdHMgPSBmYWxzZTsKICAgICBpZiAobG9naWNhbFRvcEVzdGltYXRlICE9IG9sZExvZ2ljYWxU
b3AgJiYgIWNoaWxkLmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxv
Y2tGbG93LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxv
YXRzID0gdHJ1ZTsKQEAgLTk5Myw3ICs5OTMsNyBAQCBSZW5kZXJCbG9ja0Zsb3c6Ok1hcmdpblZh
bHVlcyBSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpblZhbHVlc0ZvckNoaWxkKFJlbmRlckJveCYgYwog
ICAgIExheW91dFVuaXQgYmVmb3JlTWFyZ2luOwogICAgIExheW91dFVuaXQgYWZ0ZXJNYXJnaW47
CiAKLSAgICBSZW5kZXJCbG9ja0Zsb3cqIGNoaWxkUmVuZGVyQmxvY2sgPSBpczxSZW5kZXJCbG9j
a0Zsb3c+KGNoaWxkKSA/ICZkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKSA6IG51bGxw
dHI7CisgICAgYXV0byogY2hpbGRSZW5kZXJCbG9jayA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJC
bG9ja0Zsb3c+KGNoaWxkKTsKICAgICAKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSBzYW1l
IGRpcmVjdGlvbmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBqdXN0IHJldHVybiBpdHMKICAg
ICAvLyBtYXJnaW5zIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KQEAgLTE0NzEsNyArMTQ3MSw3IEBA
IExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94JiBj
aGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsCiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojph
ZGp1c3RCbG9ja0NoaWxkRm9yUGFnaW5hdGlvbihMYXlvdXRVbml0IGxvZ2ljYWxUb3BBZnRlckNs
ZWFyLCBMYXlvdXRVbml0IGVzdGltYXRlV2l0aG91dFBhZ2luYXRpb24sIFJlbmRlckJveCYgY2hp
bGQsIGJvb2wgYXRCZWZvcmVTaWRlT2ZCbG9jaykKIHsKLSAgICBSZW5kZXJCbG9jayogY2hpbGRS
ZW5kZXJCbG9jayA9IGlzPFJlbmRlckJsb2NrPihjaGlsZCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KGNoaWxkKSA6IG51bGxwdHI7CisgICAgYXV0byogY2hpbGRSZW5kZXJCbG9jayA9IGR5bmFt
aWNEb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpOwogCiAgICAgaWYgKGVzdGltYXRlV2l0aG91
dFBhZ2luYXRpb24gIT0gbG9naWNhbFRvcEFmdGVyQ2xlYXIpIHsKICAgICAgICAgLy8gT3VyIGd1
ZXNzIHByaW9yIHRvIHBhZ2luYXRpb24gbW92ZW1lbnQgd2FzIHdyb25nLiBCZWZvcmUgd2UgYXR0
ZW1wdCB0byBwYWdpbmF0ZSwgbGV0J3MgdHJ5IGFnYWluIGF0IHRoZSBuZXcKQEAgLTI0OTYsNyAr
MjQ5Niw3IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAg
ICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQgdGhhdCBpcyBtYWtp
bmcgdXMgbW92ZSBkb3duIGZ1cnRoZXIuCiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgYW4gdW5z
cGxpdHRhYmxlIGNoaWxkIGNhbid0IGFsc28gaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQsIHNvIHRo
aXMKICAgICAgICAgICAgIC8vIGlzIGV4Y2x1c2l2ZSB3aXRoIHRoZSBjYXNlIGFib3ZlLgotICAg
ICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSBpczxSZW5kZXJCbG9jaz4oY2hpbGRC
b3gpID8gJmRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZEJveCkgOiBudWxscHRyOworICAgICAg
ICAgICAgYXV0byogY2hpbGRCbG9jayA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hp
bGRCb3gpOwogICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2sgJiYgY2hpbGRCbG9jay0+cGFnaW5h
dGlvblN0cnV0KCkpIHsKICAgICAgICAgICAgICAgICBuZXdMb2dpY2FsVG9wICs9IGNoaWxkQmxv
Y2stPnBhZ2luYXRpb25TdHJ1dCgpOwogICAgICAgICAgICAgICAgIGNoaWxkQmxvY2stPnNldFBh
Z2luYXRpb25TdHJ1dCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5k
ZXggYzI4MWM2MzliZGI3NzIxYTUwODBiZTA4OGJhYWI5YjYwZWE4YzcxNy4uNTVmOGRmMzNiYzNk
ZTVkZWZhOGZiNThkZDc3YTk0NmNmZjgxNjYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKQEAgLTEwNTcsNyArMTA1Nyw3IEBAIFJlbmRlckJveCogUmVuZGVyQm94Ojpm
aW5kQXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgICAgIHJl
bmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogICAgIH0KIAotICAgIHJldHVybiBpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpIDogbnVsbHB0
cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpOwogfQog
CiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZTc5ZTBmZDcwNWNk
YWQ3MWJiMWVjZDQyNjAyNGM2Y2YxODAyNTQ2NC4uMjYzYzVkYzlmZWM0YTk1NTI3NDVhZGIxMTNi
YWRlN2ViNjA3ZDkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmNwcApAQCAtMjE2Nyw3ICsyMTY3LDcgQEAgYm9vbCBSZW5kZXJFbGVtZW50OjpjaGVja0ZvclJl
cGFpbnREdXJpbmdMYXlvdXQoKSBjb25zdAogCiBJbWFnZU9yaWVudGF0aW9uIFJlbmRlckVsZW1l
bnQ6OmltYWdlT3JpZW50YXRpb24oKSBjb25zdAogewotICAgIGF1dG8qIGltYWdlRWxlbWVudCA9
IGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVt
ZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBpbWFnZUVsZW1lbnQgPSBkeW5h
bWljRG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKTsKICAgICByZXR1cm4gKGlt
YWdlRWxlbWVudCAmJiAhaW1hZ2VFbGVtZW50LT5hbGxvd3NPcmllbnRhdGlvbk92ZXJyaWRlKCkp
ID8gSW1hZ2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpIDogc3R5bGUo
KS5pbWFnZU9yaWVudGF0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCmluZGV4IDg3ODVmMjI5OWM4MGQzOTQ2
ZThmZmQyMTY2MmQwMjkyMTk0NjMxZjcuLjg3NTA2OTNiZDJhNjg4YmU5NGU4YTcwOWQ3YmQ0NmNi
NjM0M2QyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcApAQCAtMjQzLDggKzI0Myw3IEBAIFZpc2libGVQb3NpdGlvbiBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2lu
dCYsIGNvCiBIVE1MSW5wdXRFbGVtZW50KiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBsb2Fk
QnV0dG9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaW5wdXRFbGVtZW50KCkuc2hhZG93Um9vdCgp
KTsKLSAgICBOb2RlKiBidXR0b25Ob2RlID0gaW5wdXRFbGVtZW50KCkuc2hhZG93Um9vdCgpLT5m
aXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGJ1dHRvbk5vZGUp
ID8gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oYnV0dG9uTm9kZSkgOiBudWxscHRyOworICAg
IHJldHVybiBkeW5hbWljRG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oaW5wdXRFbGVtZW50KCku
c2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCkpOwogfQogCiBTdHJpbmcgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OmJ1dHRvblZhbHVlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCmluZGV4IGY5MjEzZTJmMzU3MTQ4ZjE0MGM0ZDQxMGQwZTExNDE3ZDc2ZjBiOTIuLjA1
MDBmODk1ZmUwZjgzNWEyNGFhMWU3YzMxNTM2MGQyZmVkODRlOGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQgUmVuZGVy
SW1hZ2U6OnVwZGF0ZUlubmVyQ29udGVudFJlY3QoKQogICAgIEludFNpemUgY29udGFpbmVyU2l6
ZShyZXBsYWNlZENvbnRlbnRSZWN0KCkuc2l6ZSgpKTsKICAgICBpZiAoIWNvbnRhaW5lclNpemUu
aXNFbXB0eSgpKSB7CiAgICAgICAgIFVSTCBpbWFnZVNvdXJjZVVSTDsKLSAgICAgICAgaWYgKEhU
TUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1l
bnQoKSkgPyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cikK
KyAgICAgICAgaWYgKGF1dG8qIGltYWdlRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MSW1h
Z2VFbGVtZW50PihlbGVtZW50KCkpKQogICAgICAgICAgICAgaW1hZ2VTb3VyY2VVUkwgPSBkb2N1
bWVudCgpLmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC0+aW1hZ2VTb3VyY2VVUkwoKSk7CiAgICAg
ICAgIGltYWdlUmVzb3VyY2UoKS5zZXRDb250YWluZXJDb250ZXh0KGNvbnRhaW5lclNpemUsIGlt
YWdlU291cmNlVVJMKTsKICAgICB9CkBAIC02NjYsNyArNjY2LDcgQEAgSW1hZ2VEcmF3UmVzdWx0
IFJlbmRlckltYWdlOjpwYWludEludG9SZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBG
bG9hdFJlY3QKICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
SW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwogCi0gICAgSFRNTEltYWdlRWxlbWVudCogaW1h
Z2VFbGVtZW50ID0gaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA/IGRvd25jYXN0PEhU
TUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgOiBudWxscHRyOworICAgIGF1dG8qIGltYWdlRWxl
bWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpOwogCiAg
ICAgLy8gRklYTUU6IERvY3VtZW50IHdoZW4gaW1hZ2UgIT0gaW1nLmdldCgpLgogICAgIEltYWdl
KiBpbWFnZSA9IGltYWdlUmVzb3VyY2UoKS5pbWFnZSgpLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBkNGQ3YzVjNDQyNmM1OTJjN2EzNWY2N2M1
ZmQyMjA4NjJhZTcyZjY4Li42YTlhMzkxMDAzZjJlMDA4YjJhZWFjZjc3ZjI0Zjg3YWQzZWE1MjFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtMjAzLDcg
KzIwMyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiBib29sIFJlbmRlcklubGluZTo6bWF5
QWZmZWN0TGF5b3V0KCkgY29uc3QKIHsKICAgICBhdXRvKiBwYXJlbnRTdHlsZSA9ICZwYXJlbnQo
KS0+c3R5bGUoKTsKLSAgICBSZW5kZXJJbmxpbmUqIHBhcmVudFJlbmRlcklubGluZSA9IGlzPFJl
bmRlcklubGluZT4oKnBhcmVudCgpKSA/IGRvd25jYXN0PFJlbmRlcklubGluZT4ocGFyZW50KCkp
IDogbnVsbHB0cjsKKyAgICBhdXRvKiBwYXJlbnRSZW5kZXJJbmxpbmUgPSBkeW5hbWljRG93bmNh
c3Q8UmVuZGVySW5saW5lPigqcGFyZW50KCkpOwogICAgIGF1dG8gaGFzSGFyZExpbmVCcmVha0No
aWxkT25seSA9IGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCkgPT0gbGFzdENoaWxkKCkgJiYg
Zmlyc3RDaGlsZCgpLT5pc0JSKCk7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1lbnQoKS5p
bk5vUXVpcmtzTW9kZSgpOwogICAgIGF1dG8gbWF5QWZmZWN0TGF5b3V0ID0gKHBhcmVudFJlbmRl
cklubGluZSAmJiBwYXJlbnRSZW5kZXJJbmxpbmUtPm1heUFmZmVjdExheW91dCgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAyYjA0NTFhZWNiNjEwOWIwYTJkYzhl
NGI4NWE3MDMyYzQyOTIzZWFmLi40YzUwMzVlMDYwYTU4ZGUxOTVlMjlhNzY4OWJlYjIzZDgyOTcy
ZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMTY5LDcgKzE2
OSw3IEBAIHB1YmxpYzoKIAogICAgIFBhZ2UmIHBhZ2UoKSBjb25zdCB7IHJldHVybiByZW5kZXJl
cigpLnBhZ2UoKTsgfQogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotICAgIFJlbmRlckJveCogcmVuZGVyQm94KCkgY29u
c3QgeyByZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSA/ICZkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsgfQorICAgIFJlbmRlckJveCogcmVuZGVyQm94KCkg
Y29uc3QgeyByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7IH0K
IAogICAgIFJlbmRlckxheWVyKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQog
ICAgIFJlbmRlckxheWVyKiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZp
b3VzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJv
eExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNw
cAppbmRleCA2ZTEzZjNhYTM0YTI0ODhmNjUwNjIxNTQyOTc3NWZiZjI2NTE3NDdjLi4zOTgxYjAx
NmMyMWIyZWZkMGU1NGMxMjRjNDBjMWUyMjRiMzQ3MmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lk
IFJlbmRlckxpbmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChSZW5kZXJCb3hN
b2RlbE9iamVjdCYgY29udGFpbgogICAgIGlmICghY29udGFpbmVyLnBhcmVudCgpIHx8IChpczxS
ZW5kZXJCbG9ja0Zsb3c+KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLnNlbGZOZWVkc0xheW91dCgp
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVySW5saW5lKiBpbmxpbmVDb250YWluZXIg
PSBpczxSZW5kZXJJbmxpbmU+KGNvbnRhaW5lcikgPyAmZG93bmNhc3Q8UmVuZGVySW5saW5lPihj
b250YWluZXIpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBpbmxpbmVDb250YWluZXIgPSBkeW5hbWlj
RG93bmNhc3Q8UmVuZGVySW5saW5lPihjb250YWluZXIpOwogICAgIExlZ2FjeUlubGluZUJveCog
Zmlyc3RCb3ggPSBpbmxpbmVDb250YWluZXIgPyBpbmxpbmVDb250YWluZXItPmZpcnN0TGluZUJv
eCgpIDogZmlyc3RMaW5lQm94KCk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGZpcnN0IGxpbmUg
Ym94LCB0aGVuIGp1c3QgYmFpbCBlYXJseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwCmluZGV4IGFlMjgyMmM2ZWRlYTY5NmMwOGQ2YjM5MTU1NWY3YzUyMzZi
NjQyZjguLjViZGRlMjJkODY4OWIzYjVhNTQ1MzVkNDdiY2NiNDg4ZmU1NTIyZmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcApAQCAtMjEwLDcgKzIxMCw3
IEBAIHVuc2lnbmVkIFJlbmRlckxpc3RJdGVtOjppdGVtQ291bnRGb3JPcmRlcmVkTGlzdChjb25z
dCBIVE1MT0xpc3RFbGVtZW50JiBsaXN0KQogdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlVmFs
dWVOb3coKSBjb25zdAogewogICAgIGF1dG8qIGxpc3QgPSBlbmNsb3NpbmdMaXN0KCp0aGlzKTsK
LSAgICBhdXRvKiBvcmRlcmVkTGlzdCA9IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpID8gZG93
bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkgOiBudWxscHRyOworICAgIGF1dG8qIG9yZGVy
ZWRMaXN0ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpOwogCiAgICAg
Ly8gVGhlIHN0YXJ0IGl0ZW0gaXMgZWl0aGVyIHRoZSBjbG9zZXN0IGl0ZW0gYmVmb3JlIHRoaXMg
b25lIGluIHRoZSBsaXN0IHRoYXQgYWxyZWFkeSBoYXMgYSB2YWx1ZSwKICAgICAvLyBvciB0aGUg
Zmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBpZiBub25lIGhhdmUgYmVmb3JlIHRoaXMgaGF2ZSB2YWx1
ZXMgeWV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA1
MDQ1MDI0ODhkODRkYTkxNWE0ZDIxMDc3ZThjOGNhOWE5ZmZlNGNiLi44Mzc3YWFmMTg3ZTg4ZDNm
Y2JhZTNmODczOGE4NTM5YWNlZGVmZmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcApAQCAtMTc4MSw3ICsxNzgxLDcgQEAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IFJlbmRlck9iamVjdDo6b2Zmc2V0UGFyZW50KCkgY29uc3QKICAgICAgICAgY3VycmVudCA9IGN1
cnJlbnQtPnBhcmVudCgpOwogICAgIH0KIAotICAgIHJldHVybiBpczxSZW5kZXJCb3hNb2RlbE9i
amVjdD4oY3VycmVudCkgPyBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oY3VycmVudCkg
OiBudWxscHRyOworICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmpl
Y3Q+KGN1cnJlbnQpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVW
aXNpYmxlUG9zaXRpb24oaW50IG9mZnNldCwgQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAppbmRleCA4MjU3Mzc2OGJm
NDZkMGVkMTI2MWU2OTJmNjU2YmFmMWQ2YjE5YjIyLi5mM2EzMDE1ZGVjYjdlZmE2OWRhNmEwZjE3
NjU1YTRlOGI5ZjEyOTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNvbC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCBSZW5kZXJUYWJsZSogUmVuZGVyVGFibGVDb2w6
OnRhYmxlKCkgY29uc3QKICAgICBhdXRvIHRhYmxlID0gcGFyZW50KCk7CiAgICAgaWYgKHRhYmxl
ICYmICFpczxSZW5kZXJUYWJsZT4oKnRhYmxlKSkKICAgICAgICAgdGFibGUgPSB0YWJsZS0+cGFy
ZW50KCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRlclRhYmxlPih0YWJsZSkgPyBkb3duY2FzdDxSZW5k
ZXJUYWJsZT4odGFibGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFJl
bmRlclRhYmxlPih0YWJsZSk7CiB9CiAKIFJlbmRlclRhYmxlQ29sKiBSZW5kZXJUYWJsZUNvbDo6
ZW5jbG9zaW5nQ29sdW1uR3JvdXAoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDAwZjU3MjQzYzU1ZDYxZWZhMjk2MTI0ZWIzYjc4
M2VlNGYxZWEwOGYuLjM4Njc3ZWZjYTcyNDg4NWViM2YzZmFmNzFiYTFmYWE5NGIxNGY1YWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ3
Myw3ICs0NzMsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sCiB2b2lkIHdyaXRlRGVidWdJbmZv
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgT3B0aW9uU2V0PFJl
bmRlckFzVGV4dEZsYWc+IGJlaGF2aW9yKQogewogICAgIGlmIChiZWhhdmlvci5jb250YWlucyhS
ZW5kZXJBc1RleHRGbGFnOjpTaG93SURBbmRDbGFzcykpIHsKLSAgICAgICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSBpczxFbGVtZW50PihvYmplY3Qubm9kZSgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+
KG9iamVjdC5ub2RlKCkpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9
IGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihvYmplY3Qubm9kZSgpKSkgewogICAgICAgICAgICAg
aWYgKGVsZW1lbnQtPmhhc0lEKCkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBpZD1cIiIgPDwg
ZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA8PCAiXCIiOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5jcHAKaW5kZXggNjBmZmIxNzA2NWMzMGI3OTQzYjkzZThjZmE3NTI1NDI5
MmMwYmRmOC4uMTdkZjkxZDZjZjA0NjFlN2E4MzBlMzA0NDZlNmFiNzQ5OWI2YmViYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtMzk5LDcgKzM5OSw3IEBAIHZv
aWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmKQogICAgIEVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IGRvY3Vt
ZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKFJlbmRlckVsZW1lbnQqIHJvb3RSZW5k
ZXJlciA9IGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC0+cmVuZGVyZXIoKSA6IG51
bGxwdHIpIHsKICAgICAgICAgLy8gVGhlIGRvY3VtZW50IGVsZW1lbnQncyByZW5kZXJlciBpcyBj
dXJyZW50bHkgZm9yY2VkIHRvIGJlIGEgYmxvY2ssIGJ1dCBtYXkgbm90IGFsd2F5cyBiZS4KLSAg
ICAgICAgUmVuZGVyQm94KiByb290Qm94ID0gaXM8UmVuZGVyQm94Pigqcm9vdFJlbmRlcmVyKSA/
IGRvd25jYXN0PFJlbmRlckJveD4ocm9vdFJlbmRlcmVyKSA6IG51bGxwdHI7CisgICAgICAgIGF1
dG8qIHJvb3RCb3ggPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94Pigqcm9vdFJlbmRlcmVyKTsK
ICAgICAgICAgcm9vdEZpbGxzVmlld3BvcnQgPSByb290Qm94ICYmICFyb290Qm94LT54KCkgJiYg
IXJvb3RCb3gtPnkoKSAmJiByb290Qm94LT53aWR0aCgpID49IHdpZHRoKCkgJiYgcm9vdEJveC0+
aGVpZ2h0KCkgPj0gaGVpZ2h0KCk7CiAgICAgICAgIHJvb3RPYnNjdXJlc0JhY2tncm91bmQgPSBy
ZW5kZXJlck9ic2N1cmVzQmFja2dyb3VuZCgqcm9vdFJlbmRlcmVyKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCmluZGV4IDFhZmMx
ZTBhYTUwMTIxNjQ5ZTczYTJiYmYyMDI5YjRhMjczYTZjNDkuLmZiZTk2MjA1YTcwNDY5ODcxN2I3
YjU0ZWQ4YmUzNjRjNDdjYmY2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
ZWxlY3Rpb25SYW5nZURhdGEuY3BwCkBAIC03NCw4ICs3NCw3IEBAIHN0YXRpYyBib29sIGlzVmFs
aWRSZW5kZXJlckZvclNlbGVjdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25z
dCBSZW5kCiAKIHN0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgYXV0byogY29udGFpbmluZ0Jsb2Nr
ID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRlclZpZXc+
KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmluZ0Jsb2NrOworICAgIHJldHVy
biBkeW5hbWljRG93bmNhc3Q8UmVuZGVyVmlldz4ocmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCkp
OwogfQogCiBzdGF0aWMgU2VsZWN0aW9uQ29udGV4dCBjb2xsZWN0U2VsZWN0aW9uRGF0YShjb25z
dCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRl
ci5jcHAKaW5kZXggNDM3Yzk5OTdmZGJjZDMzNTMxYmQwOTk1MzU4ODY2ODU0MzAyOGI1Yy4uNjhj
NjI3OTgzMjAyODcyZjRjZGY5YWVmMzkwODgwZmI1ZTBlMzYzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCkBA
IC02MjUsNyArNjI1LDcgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6bm9ybWFsaXplVHJlZUFm
dGVyU3R5bGVDaGFuZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFIKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJs
b2NrRmxvdz4oKm5ld1BhcmVudCkubXVsdGlDb2x1bW5GbG93KCktPnNwYW5uZXJNYXAoKS5jb250
YWlucygmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikpKTsKICAgICAgICAgICAgICAgICAg
ICAgbmV3RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+
KCpuZXdQYXJlbnQpLm11bHRpQ29sdW1uRmxvdygpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3cgIT0gY3VycmVudEVu
Y2xvc2luZ0ZyYWdtZW50ICYmIGlzPFJlbmRlck11bHRpQ29sdW1uRmxvdz4obmV3RW5jbG9zaW5n
RnJhZ21lbnRlZEZsb3cpID8gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93PihuZXdFbmNs
b3NpbmdGcmFnbWVudGVkRmxvdykgOiBudWxscHRyOworICAgICAgICAgICAgICAgIHJldHVybiBu
ZXdFbmNsb3NpbmdGcmFnbWVudGVkRmxvdyAhPSBjdXJyZW50RW5jbG9zaW5nRnJhZ21lbnQgPyBk
eW5hbWljRG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93PihuZXdFbmNsb3NpbmdGcmFnbWVu
dGVkRmxvdykgOiBudWxscHRyOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGlmIChhdXRv
KiBuZXdFbmNsb3NpbmdNdWx0aUNvbHVtbiA9IG5ld011bHRpQ29sdW1uRm9yUmVuZGVyZXIoKSkg
ewogICAgICAgICAgICAgICAgIC8vIExldCB0aGUgZnJhZ21lbnRlZCBmbG93IGtub3cgdGhhdCBp
dCBoYXMgYSBuZXcgaW4tZmxvdyBkZXNjZW5kYW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKaW5kZXggZTFiZWEw
Y2MyZDI3Mzc3YjNlNzFiMzBlYjJjMWY2ZjI4MjdiYjlmZi4uMzkwNGRhNDk0NDc3NTc0OGNiMjdk
ZjVkMTEwZDI5YWM5NzY5ZmY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCkBAIC02NSw3ICs2NSw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlclRyZWVVcGRhdGVyOjpQYXJlbnQ6OlBhcmVudChD
b250YWluZXJOb2RlJiByb290KQotICAgIDogZWxlbWVudChpczxEb2N1bWVudD4ocm9vdCkgPyBu
dWxscHRyIDogZG93bmNhc3Q8RWxlbWVudD4oJnJvb3QpKQorICAgIDogZWxlbWVudChkeW5hbWlj
RG93bmNhc3Q8RWxlbWVudD4ocm9vdCkpCiAgICAgLCByZW5kZXJUcmVlUG9zaXRpb24oUmVuZGVy
VHJlZVBvc2l0aW9uKCpyb290LnJlbmRlcmVyKCkpKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvQ2hpbGRDaGFuZ2VJbnZhbGlkYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL0NoaWxkQ2hhbmdlSW52YWxpZGF0aW9uLmgKaW5kZXggYWM2ODliYzM1N2NiZWEwNzQ2
MjYyYzUwZGJlODk3Njg4NGU4NDZhNC4uODY3MWZmYWNmZTdhNTgzMjA1Yzk2YzEwMDA0MjYyNzM2
NDU2YjdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2hpbGRDaGFuZ2VJbnZh
bGlkYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9DaGlsZENoYW5nZUludmFsaWRh
dGlvbi5oCkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiB9OwogCiBpbmxpbmUgQ2hpbGRDaGFu
Z2VJbnZhbGlkYXRpb246OkNoaWxkQ2hhbmdlSW52YWxpZGF0aW9uKENvbnRhaW5lck5vZGUmIGNv
bnRhaW5lciwgY29uc3QgQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFuZ2UmIGNoaWxkQ2hhbmdlKQot
ICAgIDogbV9wYXJlbnRFbGVtZW50KGlzPEVsZW1lbnQ+KGNvbnRhaW5lcikgPyBkb3duY2FzdDxF
bGVtZW50PigmY29udGFpbmVyKSA6IG51bGxwdHIpCisgICAgOiBtX3BhcmVudEVsZW1lbnQoZHlu
YW1pY0Rvd25jYXN0PEVsZW1lbnQ+KGNvbnRhaW5lcikpCiAgICAgLCBtX2NoaWxkQ2hhbmdlKGNo
aWxkQ2hhbmdlKQogICAgICwgbV9pc0VuYWJsZWQobV9wYXJlbnRFbGVtZW50ID8gbV9wYXJlbnRF
bGVtZW50LT5uZWVkc1N0eWxlSW52YWxpZGF0aW9uKCkgOiBmYWxzZSkKICAgICAsIG1fbmVlZHNI
YXNJbnZhbGlkYXRpb24obV9pc0VuYWJsZWQgJiYgU2NvcGU6OmZvck5vZGUoKm1fcGFyZW50RWxl
bWVudCkudXNlc0hhc1BzZXVkb0NsYXNzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAppbmRleCA5
N2U2MDg2OTk4MzM4OTQ5OTMyYjIxYjI4NGM5NTU5MDBkOTBkYTZkLi4yZDNhMzMxZThlODI1NGU2
N2YwYzY3NjJjZDIwNTMyM2ZhOTYwY2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKQEAgLTI0
NSw2ICsyNDUsNyBAQCBpbmxpbmUgU1ZHRWxlbWVudDo6SW5zdGFuY2VVcGRhdGVCbG9ja2VyOjp+
SW5zdGFuY2VVcGRhdGVCbG9ja2VyKCkKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTVkdFbGVtZW50KQorICAgIHN0YXRpYyBi
b29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpFdmVudFRhcmdldCYgZXZlbnRUYXJnZXQpIHsgcmV0
dXJuIGV2ZW50VGFyZ2V0LmlzTm9kZSgpICYmIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6Ok5v
ZGUmPihldmVudFRhcmdldCkuaXNTVkdFbGVtZW50KCk7IH0KICAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc1NWR0VsZW1lbnQo
KTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHAKaW5kZXggYjNiNmI1Yzg0OTE1MjFiNDdhNzc4ZWZhZjViOTQ5OWY4NjIwNzZi
NS4uNTMwZmYxYjA3YWEyZjkyY2QzNDg2NDE0NTVhOWI1MDA4MzJmNmZhNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAtNTcyLDE0ICs1NzIsMTIgQEAgQWZmaW5lVHJhbnNm
b3JtIFNWR1NWR0VsZW1lbnQ6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRo
LCBmbG9hdCB2aWUKIAogU1ZHVmlld0VsZW1lbnQqIFNWR1NWR0VsZW1lbnQ6OmZpbmRWaWV3QW5j
aG9yKFN0cmluZ1ZpZXcgZnJhZ21lbnRJZGVudGlmaWVyKSBjb25zdAogewotICAgIGF1dG8qIGFu
Y2hvckVsZW1lbnQgPSBkb2N1bWVudCgpLmZpbmRBbmNob3IoZnJhZ21lbnRJZGVudGlmaWVyKTsK
LSAgICByZXR1cm4gaXM8U1ZHVmlld0VsZW1lbnQ+KGFuY2hvckVsZW1lbnQpID8gZG93bmNhc3Q8
U1ZHVmlld0VsZW1lbnQ+KGFuY2hvckVsZW1lbnQpOiBudWxscHRyOworICAgIHJldHVybiBkeW5h
bWljRG93bmNhc3Q8U1ZHVmlld0VsZW1lbnQ+KGRvY3VtZW50KCkuZmluZEFuY2hvcihmcmFnbWVu
dElkZW50aWZpZXIpKTsKIH0KIAogU1ZHU1ZHRWxlbWVudCogU1ZHU1ZHRWxlbWVudDo6ZmluZFJv
b3RBbmNob3IoY29uc3QgU1ZHVmlld0VsZW1lbnQqIHZpZXdFbGVtZW50KSBjb25zdAogewotICAg
IGF1dG8qIHZpZXdwb3J0RWxlbWVudCA9IFNWR0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxl
bWVudCh2aWV3RWxlbWVudCk7Ci0gICAgcmV0dXJuIGlzPFNWR1NWR0VsZW1lbnQ+KHZpZXdwb3J0
RWxlbWVudCkgPyBkb3duY2FzdDxTVkdTVkdFbGVtZW50Pih2aWV3cG9ydEVsZW1lbnQpIDogbnVs
bHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFNWR1NWR0VsZW1lbnQ+KFNWR0xvY2F0
YWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCh2aWV3RWxlbWVudCkpOwogfQogCiBTVkdTVkdF
bGVtZW50KiBTVkdTVkdFbGVtZW50OjpmaW5kUm9vdEFuY2hvcihTdHJpbmdWaWV3IGZyYWdtZW50
SWRlbnRpZmllcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAz
NWE2NmUwOTVlNzVhMTM0NzljN2IxYzU2MmNlMTE5MWFiMWVlMTk0Li43ZDhhZDc5ZjhlNTQ4ZWZm
NjkzMDA4YmRhNTZhOWIyNDI1OTNhYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCkBAIC05NTcsMTUgKzk1NywxMyBAQCBzdGF0aWMgSW1hZ2UqIGltYWdlRnJvbUltYWdlRWxl
bWVudChIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQogCiBzdGF0aWMgQml0bWFwSW1hZ2UqIGJp
dG1hcEltYWdlRnJvbUltYWdlRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQogewot
ICAgIGF1dG8qIGltYWdlID0gaW1hZ2VGcm9tSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwotICAgIHJl
dHVybiBpbWFnZSAmJiBpczxCaXRtYXBJbWFnZT4oaW1hZ2UpID8gJmRvd25jYXN0PEJpdG1hcElt
YWdlPigqaW1hZ2UpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PEJpdG1h
cEltYWdlPihpbWFnZUZyb21JbWFnZUVsZW1lbnQoZWxlbWVudCkpOwogfQogCiAjaWYgVVNFKENH
KQogc3RhdGljIFBERkRvY3VtZW50SW1hZ2UqIHBkZkRvY3VtZW50SW1hZ2VGcm9tSW1hZ2VFbGVt
ZW50KEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgYXV0byogaW1hZ2UgPSBpbWFn
ZUZyb21JbWFnZUVsZW1lbnQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGltYWdlICYmIGlzPFBERkRv
Y3VtZW50SW1hZ2U+KGltYWdlKSA/ICZkb3duY2FzdDxQREZEb2N1bWVudEltYWdlPigqaW1hZ2Up
IDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PFBERkRvY3VtZW50SW1hZ2U+
KGltYWdlRnJvbUltYWdlRWxlbWVudChlbGVtZW50KSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVl
bk1hbmFnZXIuY3BwCmluZGV4IGY4YjE1MmQ2NTA3ZWUwM2FmNjQxOWIzMmQxOWVmZjUzZWFhNjVl
ZTIuLmVmNDk4OTNmMTNjOWM0OWM1ZDBiNThkNDI3YjE1Mzc2ZTA0NjFlMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2Ny
ZWVuTWFuYWdlci5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5h
Z2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4oKQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKICAgICBh
dXRvKiBjdXJyZW50UGxheWJhY2tDb250cm9sc0VsZW1lbnQgPSBtX3BhZ2UtPnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIoKS5jdXJyZW50UGxheWJhY2tDb250cm9sc0VsZW1lbnQoKTsKLSAgICBzZXRQ
SVBTdGFuZGJ5RWxlbWVudChpczxIVE1MVmlkZW9FbGVtZW50PihjdXJyZW50UGxheWJhY2tDb250
cm9sc0VsZW1lbnQpID8gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4oY3VycmVudFBsYXliYWNr
Q29udHJvbHNFbGVtZW50KSA6IG51bGxwdHIpOworICAgIHNldFBJUFN0YW5kYnlFbGVtZW50KGR5
bmFtaWNEb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PihjdXJyZW50UGxheWJhY2tDb250cm9sc0Vs
ZW1lbnQpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggNmY0MjhhYWVlZGEyNjkzNmI1
ZTZiZmJlZGY2MmRjODRmN2Q3NTgwZi4uNzJiYzQ4OTEzYmNlODlkOTRmOGE1ZGE4YjJmZTJjNWQ5
ZmEwYTNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29j
b2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMjU2LDggKzI1Niw3IEBAIFdlYlBheW1lbnRDb29y
ZGluYXRvciogV2ViUGFnZTo6cGF5bWVudENvb3JkaW5hdG9yKCkKIHsKICAgICBpZiAoIW1fcGFn
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byYgY2xpZW50ID0gbV9wYWdlLT5w
YXltZW50Q29vcmRpbmF0b3IoKS5jbGllbnQoKTsKLSAgICByZXR1cm4gaXM8V2ViUGF5bWVudENv
b3JkaW5hdG9yPihjbGllbnQpID8gZG93bmNhc3Q8V2ViUGF5bWVudENvb3JkaW5hdG9yPigmY2xp
ZW50KSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxXZWJQYXltZW50Q29v
cmRpbmF0b3I+KG1fcGFnZS0+cGF5bWVudENvb3JkaW5hdG9yKCkuY2xpZW50KCkpOwogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4
dGVuc2lvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNp
b25zLm1tCmluZGV4IDYzNTViNmY5MDMxODAwNTVjYjYwN2E4MGJlNzcwMTM4NGQ4OGRkN2EuLmE5
YWQ0OTk1MTUxNmFhMjQyOTY4ZWU3ZjU4NjlkZTZlZTJhODBlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtMjY3LDEzICsy
NjcsMTAgQEAgLSAoaW50KXN0cnVjdHVyYWxDb21wbGV4aXR5Q29udHJpYnV0aW9uCiAgICAgICAg
ICAgICByZXN1bHQgPSAwOwogICAgICAgICB9IGVsc2UgaWYgKGlzPFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdz4oKnJlbmRlcmVyKSB8fCAoaXM8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikgJiYgZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikuaW5saW5lQ29udGludWF0aW9uKCkpKSB7CiAg
ICAgICAgICAgICBCT09MIG5vQ29zdCA9IE5POwotICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJv
eD4oKnJlbmRlcmVyKSkgewotICAgICAgICAgICAgICAgIFJlbmRlckJveCYgYXNCb3ggPSByZW5k
ZXJlci0+ZW5jbG9zaW5nQm94KCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJl
bnQgPSBhc0JveC5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIHBhcmVudFJl
bmRlckJveCA9IGlzPFJlbmRlckJveD4ocGFyZW50KSA/IGRvd25jYXN0PFJlbmRlckJveD4ocGFy
ZW50KSA6IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudFJlbmRlckJveCAmJiBh
c0JveC53aWR0aCgpID09IHBhcmVudFJlbmRlckJveC0+d2lkdGgoKSkgeworICAgICAgICAgICAg
aWYgKGF1dG8gcmVuZGVyQm94ID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVy
KSkgeworICAgICAgICAgICAgICAgIGF1dG8qIHBhcmVudFJlbmRlckJveCA9IGR5bmFtaWNEb3du
Y2FzdDxSZW5kZXJCb3g+KHJlbmRlckJveC0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgIGlm
IChwYXJlbnRSZW5kZXJCb3ggJiYgcmVuZGVyQm94LT53aWR0aCgpID09IHBhcmVudFJlbmRlckJv
eC0+d2lkdGgoKSkKICAgICAgICAgICAgICAgICAgICAgbm9Db3N0ID0gWUVTOwotICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlc3VsdCA9IChub0Nvc3QgPyAw
IDogMSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmhhc1RyYW5zZm9ybSgpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNl
bnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJl
c2VudGF0aW9uLm1tCmluZGV4IDM4ZDdlNTMyZDZlYWEwY2FjMzg4NjJmM2UwZTE2OWZlMjgxMjc3
ZjEuLjNkYjI0ODhkNjBlYzQxYjA4MWY3YTkxN2QwZTI2MWIyN2U2MjRhMjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0
aW9uLm1tCkBAIC0zMDEsNyArMzAxLDcgQEAgLSAoRE9NRWxlbWVudCAqKWVsZW1lbnRXaXRoTmFt
ZTooTlNTdHJpbmcgKiluYW1lIGluRm9ybTooRE9NRWxlbWVudCAqKWZvcm0KIHN0YXRpYyBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50KiBlbGVt
ZW50KQogewogICAgIEVsZW1lbnQqIG5vZGUgPSBjb3JlKGVsZW1lbnQpOwotICAgIHJldHVybiBp
czxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSA/IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5v
ZGUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpOwogfQogCiAtIChCT09MKWVsZW1lbnREb2VzQXV0b0NvbXBsZXRlOihET01FbGVt
ZW50ICopZWxlbWVudAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>