<?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>174807</bug_id>
          
          <creation_ts>2017-07-24 18:55:16 -0700</creation_ts>
          <short_desc>Modernize NavigationAction code</short_desc>
          <delta_ts>2017-07-25 13:47:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>berto</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1331830</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-24 18:55:16 -0700</bug_when>
    <thetext>Modernize NavigationAction code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331832</commentid>
    <comment_count>1</comment_count>
      <attachid>316339</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-24 18:56:37 -0700</bug_when>
    <thetext>Created attachment 316339
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331870</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-24 21:32:50 -0700</bug_when>
    <thetext>Could someone get this building on Linux?  It&apos;s probably relatively trivial, but more than EWS iterations could reasonably do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331886</commentid>
    <comment_count>3</comment_count>
      <attachid>316339</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-24 22:46:48 -0700</bug_when>
    <thetext>Comment on attachment 316339
Patch

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

Broken build on GTK and WPE needs to be fixed.

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3660
&gt; +        Ref&lt;API::FrameInfo&gt; destinationFrameInfo = API::FrameInfo::create(*frame, frameSecurityOrigin.securityOrigin());

auto?

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3668
&gt; +        bool shouldOpenAppLinks = !m_shouldSuppressAppLinksInNextNavigationPolicyDecision &amp;&amp; (destinationFrameInfo-&gt;isMainFrame()) &amp;&amp; !hostsAreEqual(URL(ParsedURLString, m_mainFrame-&gt;url()), request.url()) &amp;&amp; navigationActionData.navigationType != WebCore::NavigationType::BackForward;

Remove the parentheses from around (destinationFrameInfo-&gt;isMainFrame()) please.

&gt; Source/WebKit/UIProcess/API/APINavigationAction.h:39
&gt; +    static Ref&lt;NavigationAction&gt; create(WebKit::NavigationActionData&amp;&amp; navigationActionData, API::FrameInfo* sourceFrame, API::FrameInfo* targetFrame, WebCore::ResourceRequest&amp;&amp; request, const WebCore::URL&amp; originalURL, bool shouldOpenAppLinks, RefPtr&lt;UserInitiatedAction&gt; userInitiatedAction)

Why is that last argument a RefPtr? It should just be a raw pointer, or maybe a RefPtr&amp;&amp;, but strange to have it just be RefPtr.

Should just be FrameInfo*, not API::FrameInfo*.

&gt; Source/WebKit/UIProcess/API/APINavigationAction.h:64
&gt; +    NavigationAction(WebKit::NavigationActionData&amp;&amp; navigationActionData, API::FrameInfo* sourceFrame, API::FrameInfo* targetFrame, WebCore::ResourceRequest&amp;&amp; request, const WebCore::URL&amp; originalURL, bool shouldOpenAppLinks, RefPtr&lt;UserInitiatedAction&gt; userInitiatedAction)

Ditto.

&gt; Source/WebKit/UIProcess/API/APINavigationClient.h:98
&gt; +    virtual void decidePolicyForNavigationAction(WebKit::WebPageProxy&amp;, Ref&lt;API::NavigationAction&gt;&amp;&amp;, Ref&lt;WebKit::WebFramePolicyListenerProxy&gt;&amp;&amp; listener, API::Object*)

No need for the API:: prefixes here.

&gt; Source/WebKit/UIProcess/API/APIUIClient.h:76
&gt; +    virtual RefPtr&lt;WebKit::WebPageProxy&gt; createNewPage(WebKit::WebPageProxy*, API::FrameInfo&amp;, WebCore::ResourceRequest&amp;&amp;, const WebCore::WindowFeatures&amp;, WebKit::NavigationActionData&amp;&amp;) { return nullptr; }
&gt; +    virtual void createNewPageAsync(WebKit::WebPageProxy*, API::FrameInfo&amp;, WebCore::ResourceRequest&amp;&amp;, const WebCore::WindowFeatures&amp;, WebKit::NavigationActionData&amp;&amp;, WTF::Function&lt;void(RefPtr&lt;WebKit::WebPageProxy&gt;)&gt;&amp;&amp; completionHandler) { }

No need for the API prefixes here.

Why does the completionHandler take a RefPtr? It should just take a raw pointer.

&gt; Source/WebKit/UIProcess/Cocoa/UIDelegate.h:85
&gt; +        RefPtr&lt;WebKit::WebPageProxy&gt; createNewPage(WebKit::WebPageProxy*, API::FrameInfo&amp;, WebCore::ResourceRequest&amp;&amp;, const WebCore::WindowFeatures&amp;, WebKit::NavigationActionData&amp;&amp;) override;
&gt; +        void createNewPageAsync(WebKit::WebPageProxy*, API::FrameInfo&amp;, WebCore::ResourceRequest&amp;&amp;, const WebCore::WindowFeatures&amp;, WebKit::NavigationActionData&amp;&amp;, WTF::Function&lt;void(RefPtr&lt;WebKit::WebPageProxy&gt;)&gt;&amp;&amp; completionHandler) final;
&gt; +        bool canCreateNewPageAsync() final;
&gt; +        RefPtr&lt;WebKit::WebPageProxy&gt; createNewPageCommon(WebKit::WebPageProxy*, API::FrameInfo&amp;, WebCore::ResourceRequest&amp;&amp;, const WebCore::WindowFeatures&amp;, WebKit::NavigationActionData&amp;&amp;, WTF::Function&lt;void(RefPtr&lt;WebKit::WebPageProxy&gt;)&gt;&amp;&amp; completionHandler);

Seems like the completion handler functions could just take a raw pointer, no need for RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331921</commentid>
    <comment_count>4</comment_count>
      <attachid>316363</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-25 04:48:20 -0700</bug_when>
    <thetext>Created attachment 316363
Patch to fix glib API build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331955</commentid>
    <comment_count>5</comment_count>
      <attachid>316367</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-25 09:45:59 -0700</bug_when>
    <thetext>Created attachment 316367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331959</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-25 09:47:40 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331978</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-25 10:06:03 -0700</bug_when>
    <thetext>&gt; &gt; +        RefPtr&lt;WebKit::WebPageProxy&gt; createNewPageCommon(WebKit::WebPageProxy*, API::FrameInfo&amp;, WebCore::ResourceRequest&amp;&amp;, const WebCore::WindowFeatures&amp;, WebKit::NavigationActionData&amp;&amp;, WTF::Function&lt;void(RefPtr&lt;WebKit::WebPageProxy&gt;)&gt;&amp;&amp; completionHandler);
&gt; 
&gt; Seems like the completion handler functions could just take a raw pointer,
&gt; no need for RefPtr.
I made them take a RefPtr&amp;&amp; instead of a raw pointer because the call sites give them the last use of a RefPtr and the caller eventually makes a RefPtr out of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331986</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-25 10:18:08 -0700</bug_when>
    <thetext>http://trac.webkit.org/r219871</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332069</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-25 13:47:14 -0700</bug_when>
    <thetext>http://trac.webkit.org/r219881</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316339</attachid>
            <date>2017-07-24 18:56:37 -0700</date>
            <delta_ts>2017-07-25 09:45:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174807-20170724185645.patch</filename>
            <type>text/plain</type>
            <size>44602</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTk4NTMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE3LTA3LTI0ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIE5h
dmlnYXRpb25BY3Rpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW9zdGx5IGp1c3QgdXNlIG1vcmUgbW92ZSBzZW1hbnRpY3MuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5oOgorICAgICAgICAoSVBDOjpjYWxsTWVt
YmVyRnVuY3Rpb25JbXBsKToKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSVVSTFJlcXVlc3QuaDoK
KyAgICAgICAgKiBTaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpOYXZpZ2F0aW9uOjpO
YXZpZ2F0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uaDoKKyAg
ICAgICAgKEFQSTo6TmF2aWdhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSU5hdmlnYXRpb25BY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmln
YXRpb25DbGllbnQuaDoKKyAgICAgICAgKEFQSTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQb2xp
Y3lDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50Lmg6CisgICAg
ICAgIChBUEk6OlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKEFQSTo6VUlDbGll
bnQ6OmNyZWF0ZU5ld1BhZ2VBc3luYyk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpjYW5DcmVh
dGVOZXdQYWdlQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgor
ICAgICAgICAoV0tQYWdlTG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV0tQYWdlTG9hZFVSTFJl
cXVlc3RXaXRoVXNlckRhdGEpOgorICAgICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKyAg
ICAgICAgKFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05h
dmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZp
Z2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9VSURlbGVnYXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6
Y3JlYXRlTmV3UGFnZUNvbW1vbik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xp
ZW50OjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OmNhbkNyZWF0ZU5ld1BhZ2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdlQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJ
bnNwZWN0b3JQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uU3RhdGUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGU6OmNyZWF0ZUxvYWRSZXF1ZXN0
TmF2aWdhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaDoKKwogMjAxNy0wNy0yNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TIFdLMl0gQ3Jhc2ggdW5kZXIgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjp1bmluc3RhbGxQYWdlT3ZlcmxheSB3aGVuIGRvaW5nIG11bHRpcGxlIGZpbmRz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5oCShyZXZp
c2lvbiAyMTk4NDEpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBjYWxsTWVtYmVyRnVuY3Rp
b24oQXJnc1R1cGxlJiYgYXJncwogdGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0
eXBlbmFtZSBSLCB0eXBlbmFtZSBBcmdzVHVwbGUsIHNpemVfdC4uLiBBcmdzSW5kZXg+CiB2b2lk
IGNhbGxNZW1iZXJGdW5jdGlvbkltcGwoQyogb2JqZWN0LCBNRiBmdW5jdGlvbiwgUmVmPFI+JiYg
ZGVsYXllZFJlcGx5LCBBcmdzVHVwbGUmJiBhcmdzLCBzdGQ6OmluZGV4X3NlcXVlbmNlPEFyZ3NJ
bmRleC4uLj4pCiB7Ci0gICAgKG9iamVjdC0+KmZ1bmN0aW9uKShzdGQ6OmdldDxBcmdzSW5kZXg+
KGFyZ3MpLi4uLCBXVEZNb3ZlKGRlbGF5ZWRSZXBseSkpOworICAgIChvYmplY3QtPipmdW5jdGlv
bikoc3RkOjpnZXQ8QXJnc0luZGV4PihzdGQ6OmZvcndhcmQ8QXJnc1R1cGxlPihhcmdzKSkuLi4s
IFdURk1vdmUoZGVsYXllZFJlcGx5KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVu
YW1lIE1GLCB0eXBlbmFtZSBSLCB0eXBlbmFtZSBBcmdzVHVwbGUsIHR5cGVuYW1lIEFyZ3NJbmRp
Y2llcyA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxzdGQ6OnR1cGxlX3NpemU8QXJnc1R1cGxl
Pjo6dmFsdWU+PgpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXZpZ2F0aW9uQWN0aW9u
RGF0YS5oCShyZXZpc2lvbiAyMTk4NDEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXZpZ2F0
aW9uQWN0aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOYXZpZ2F0aW9uQWN0
aW9uRGF0YV9oCi0jZGVmaW5lIE5hdmlnYXRpb25BY3Rpb25EYXRhX2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4K
QEAgLTUzLDUgKzUyLDMgQEAgc3RydWN0IE5hdmlnYXRpb25BY3Rpb25EYXRhIHsKIH07CiAKIH0K
LQotI2VuZGlmIC8vIE5hdmlnYXRpb25BY3Rpb25EYXRhX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9BUElVUkxSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9T
aGFyZWQvQVBJL0FQSVVSTFJlcXVlc3QuaAkocmV2aXNpb24gMjE5ODQxKQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvQVBJL0FQSVVSTFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCAr
MjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5k
ZWYgQVBJVVJMUmVxdWVzdF9oCi0jZGVmaW5lIEFQSVVSTFJlcXVlc3RfaAorI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVx
dWVzdC5oPgpAQCAtNTksNSArNTgsMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
QVBJCi0KLSNlbmRpZiAvLyBBUElVUkxSZXF1ZXN0X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAJKHJldmlzaW9uIDIxOTg0MSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzU4LDcgKzM1OCw3IEBAIHN0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3QKICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKIAogICAgIC8vIEFuZCBp
bnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgotICAgIHdlYkluc3BlY3RvclBy
b3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KHJlcXVlc3QpOworICAgIHdlYkluc3Bl
Y3RvclByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkp
OwogfQogCiBzdGF0aWMgdm9pZCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV0tQYWdl
UmVmIHBhZ2VSZWYsIFdLQXJyYXlSZWYgcHJvcG9zZWRNZW51UmVmLCBXS0FycmF5UmVmKiBuZXdN
ZW51UmVmLCBXS0hpdFRlc3RSZXN1bHRSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCopCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uU3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0ZS5jcHAJKHJl
dmlzaW9uIDIxOTg0MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25T
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDkgQEAgV2ViTmF2aWdhdGlvblN0
YXRlOjp+V2ViTmF2aWdhdGlvblN0YXRlKAogewogfQogCi1SZWY8QVBJOjpOYXZpZ2F0aW9uPiBX
ZWJOYXZpZ2F0aW9uU3RhdGU6OmNyZWF0ZUxvYWRSZXF1ZXN0TmF2aWdhdGlvbihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitSZWY8QVBJOjpOYXZpZ2F0aW9uPiBXZWJO
YXZpZ2F0aW9uU3RhdGU6OmNyZWF0ZUxvYWRSZXF1ZXN0TmF2aWdhdGlvbihXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJiByZXF1ZXN0KQogewotICAgIGF1dG8gbmF2aWdhdGlvbiA9IEFQSTo6TmF2
aWdhdGlvbjo6Y3JlYXRlKCp0aGlzLCByZXF1ZXN0KTsKKyAgICBhdXRvIG5hdmlnYXRpb24gPSBB
UEk6Ok5hdmlnYXRpb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShyZXF1ZXN0KSk7CiAKICAgICBt
X25hdmlnYXRpb25zLnNldChuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgbmF2aWdhdGlvbi5w
dHIoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25T
dGF0ZS5oCShyZXZpc2lvbiAyMTk4NDEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJO
YXZpZ2F0aW9uU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViTmF2aWdhdGlv
blN0YXRlX2gKLSNkZWZpbmUgV2ViTmF2aWdhdGlvblN0YXRlX2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CkBAIC00OCw3ICs0
Nyw3IEBAIHB1YmxpYzoKICAgICB+V2ViTmF2aWdhdGlvblN0YXRlKCk7CiAKICAgICBSZWY8QVBJ
OjpOYXZpZ2F0aW9uPiBjcmVhdGVCYWNrRm9yd2FyZE5hdmlnYXRpb24oKTsKLSAgICBSZWY8QVBJ
OjpOYXZpZ2F0aW9uPiBjcmVhdGVMb2FkUmVxdWVzdE5hdmlnYXRpb24oY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgUmVmPEFQSTo6TmF2aWdhdGlvbj4gY3JlYXRlTG9hZFJl
cXVlc3ROYXZpZ2F0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsKICAgICBSZWY8QVBJ
OjpOYXZpZ2F0aW9uPiBjcmVhdGVSZWxvYWROYXZpZ2F0aW9uKCk7CiAgICAgUmVmPEFQSTo6TmF2
aWdhdGlvbj4gY3JlYXRlTG9hZERhdGFOYXZpZ2F0aW9uKCk7CiAKQEAgLTY4LDUgKzY3LDMgQEAg
cHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViTmF2
aWdhdGlvblN0YXRlX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkocmV2aXNpb24gMjE5ODQxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE5LDI2ICs4MTksMjcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmFkZFBsYXRmb3JtTG9hZFBhcmFtZQogfQogI2VuZGlmCiAKLVJlZlB0cjxBUEk6
Ok5hdmlnYXRpb24+IFdlYlBhZ2VQcm94eTo6bG9hZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNob3VsZE9wZW5FeHRl
cm5hbFVSTHNQb2xpY3ksIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkKK1JlZlB0cjxBUEk6Ok5hdmln
YXRpb24+IFdlYlBhZ2VQcm94eTo6bG9hZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVz
dCwgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5LCBBUEk6Ok9iamVjdCogdXNlckRhdGEpCiB7CiAgICAgaWYgKG1faXNDbG9zZWQpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uID0gbV9uYXZpZ2F0aW9u
U3RhdGUtPmNyZWF0ZUxvYWRSZXF1ZXN0TmF2aWdhdGlvbihyZXF1ZXN0KTsKKyAgICBhdXRvIG5h
dmlnYXRpb24gPSBtX25hdmlnYXRpb25TdGF0ZS0+Y3JlYXRlTG9hZFJlcXVlc3ROYXZpZ2F0aW9u
KFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSk7CiAKICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV9w
YWdlTG9hZFN0YXRlLnRyYW5zYWN0aW9uKCk7CiAKLSAgICBtX3BhZ2VMb2FkU3RhdGUuc2V0UGVu
ZGluZ0FQSVJlcXVlc3RVUkwodHJhbnNhY3Rpb24sIHJlcXVlc3QudXJsKCkpOworICAgIGF1dG8g
dXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICBtX3BhZ2VMb2FkU3RhdGUuc2V0UGVuZGluZ0FQSVJl
cXVlc3RVUkwodHJhbnNhY3Rpb24sIHVybCk7CiAKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAg
ICAgcmVhdHRhY2hUb1dlYlByb2Nlc3MoKTsKIAogICAgIExvYWRQYXJhbWV0ZXJzIGxvYWRQYXJh
bWV0ZXJzOwogICAgIGxvYWRQYXJhbWV0ZXJzLm5hdmlnYXRpb25JRCA9IG5hdmlnYXRpb24tPm5h
dmlnYXRpb25JRCgpOwotICAgIGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QgPSByZXF1ZXN0OworICAg
IGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpOwogICAgIGxvYWRQYXJh
bWV0ZXJzLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSAodWludDY0X3Qpc2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeTsKICAgICBsb2FkUGFyYW1ldGVycy51c2VyRGF0YSA9IFVzZXJE
YXRhKHByb2Nlc3MoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhKS5nZXQoKSk7
Ci0gICAgYm9vbCBjcmVhdGVkRXh0ZW5zaW9uID0gbWF5YmVJbml0aWFsaXplU2FuZGJveEV4dGVu
c2lvbkhhbmRsZShyZXF1ZXN0LnVybCgpLCBsb2FkUGFyYW1ldGVycy5zYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICBib29sIGNyZWF0ZWRFeHRlbnNpb24gPSBtYXliZUluaXRpYWxpemVTYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKHVybCwgbG9hZFBhcmFtZXRlcnMuc2FuZGJveEV4dGVuc2lvbkhh
bmRsZSk7CiAgICAgaWYgKGNyZWF0ZWRFeHRlbnNpb24pCiAgICAgICAgIG1fcHJvY2Vzcy0+d2ls
bEFjcXVpcmVVbml2ZXJzYWxGaWxlUmVhZFNhbmRib3hFeHRlbnNpb24oKTsKICAgICBhZGRQbGF0
Zm9ybUxvYWRQYXJhbWV0ZXJzKGxvYWRQYXJhbWV0ZXJzKTsKQEAgLTM2MTcsNyArMzYxOCw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpmcmFtZURpZEJlY29tZUZyYW1lU2UKICAgICAgICAgbV9mcmFt
ZVNldExhcmdlc3RGcmFtZSA9IHZhbHVlID8gbV9tYWluRnJhbWUgOiAwOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbih1aW50NjRfdCBmcmFt
ZUlELCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIGZyYW1lU2VjdXJpdHlPcmlnaW4sIHVpbnQ2
NF90IG5hdmlnYXRpb25JRCwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbkRhdGEmIG5hdmlnYXRpb25B
Y3Rpb25EYXRhLCBjb25zdCBGcmFtZUluZm9EYXRhJiBvcmlnaW5hdGluZ0ZyYW1lSW5mb0RhdGEs
IHVpbnQ2NF90IG9yaWdpbmF0aW5nUGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCB1aW50
NjRfdCBsaXN0ZW5lcklELCBjb25zdCBVc2VyRGF0YSYgdXNlckRhdGEsIFJlZjxNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOjpEZWxheWVkUmVw
bHk+JiYgcmVwbHkpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbih1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIGZyYW1l
U2VjdXJpdHlPcmlnaW4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgTmF2aWdhdGlvbkFjdGlvbkRh
dGEmJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgb3JpZ2luYXRp
bmdGcmFtZUluZm9EYXRhLCB1aW50NjRfdCBvcmlnaW5hdGluZ1BhZ2VJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIFJlc291cmNlUmVxdWVzdCYmIHJl
cXVlc3QsIHVpbnQ2NF90IGxpc3RlbmVySUQsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSwgUmVm
PE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246
OkRlbGF5ZWRSZXBseT4mJiByZXBseSkKIHsKICAgICBQYWdlQ2xpZW50UHJvdGVjdG9yIHByb3Rl
Y3RvcihtX3BhZ2VDbGllbnQpOwogCkBAIC0zNjM1LDcgKzM2MzYsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhCiAgICAgbV9uZXdOYXZpZ2F0aW9uSUQgPSAwOwog
ICAgIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+IGxpc3RlbmVyID0gZnJhbWUtPnNl
dFVwUG9saWN5TGlzdGVuZXJQcm94eShsaXN0ZW5lcklEKTsKICAgICBpZiAoIW5hdmlnYXRpb25J
RCAmJiBmcmFtZS0+aXNNYWluRnJhbWUoKSkgewotICAgICAgICBhdXRvIG5hdmlnYXRpb24gPSBt
X25hdmlnYXRpb25TdGF0ZS0+Y3JlYXRlTG9hZFJlcXVlc3ROYXZpZ2F0aW9uKHJlcXVlc3QpOwor
ICAgICAgICBhdXRvIG5hdmlnYXRpb24gPSBtX25hdmlnYXRpb25TdGF0ZS0+Y3JlYXRlTG9hZFJl
cXVlc3ROYXZpZ2F0aW9uKFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSk7CiAgICAgICAgIG1fbmV3
TmF2aWdhdGlvbklEID0gbmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCk7CiAgICAgICAgIGxpc3Rl
bmVyLT5zZXROYXZpZ2F0aW9uKFdURk1vdmUobmF2aWdhdGlvbikpOwogICAgIH0KQEAgLTM2NTYs
MjYgKzM2NTcsMjYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYQog
ICAgIFdlYkZyYW1lUHJveHkqIG9yaWdpbmF0aW5nRnJhbWUgPSBtX3Byb2Nlc3MtPndlYkZyYW1l
KG9yaWdpbmF0aW5nRnJhbWVJbmZvRGF0YS5mcmFtZUlEKTsKIAogICAgIGlmIChtX25hdmlnYXRp
b25DbGllbnQpIHsKLSAgICAgICAgUmVmUHRyPEFQSTo6RnJhbWVJbmZvPiBkZXN0aW5hdGlvbkZy
YW1lSW5mbyA9IEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoKmZyYW1lLCBmcmFtZVNlY3VyaXR5T3Jp
Z2luLnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBSZWY8QVBJOjpGcmFtZUluZm8+IGRlc3Rp
bmF0aW9uRnJhbWVJbmZvID0gQVBJOjpGcmFtZUluZm86OmNyZWF0ZSgqZnJhbWUsIGZyYW1lU2Vj
dXJpdHlPcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgICAgIFJlZlB0cjxBUEk6OkZyYW1l
SW5mbz4gc291cmNlRnJhbWVJbmZvOwogICAgICAgICBpZiAoIWZyb21BUEkgJiYgb3JpZ2luYXRp
bmdGcmFtZSA9PSBmcmFtZSkKLSAgICAgICAgICAgIHNvdXJjZUZyYW1lSW5mbyA9IGRlc3RpbmF0
aW9uRnJhbWVJbmZvOworICAgICAgICAgICAgc291cmNlRnJhbWVJbmZvID0gZGVzdGluYXRpb25G
cmFtZUluZm8uY29weVJlZigpOwogICAgICAgICBlbHNlIGlmICghZnJvbUFQSSkKICAgICAgICAg
ICAgIHNvdXJjZUZyYW1lSW5mbyA9IEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUob3JpZ2luYXRpbmdG
cmFtZUluZm9EYXRhLCBvcmlnaW5hdGluZ1BhZ2VJRCA/IG1fcHJvY2Vzcy0+d2ViUGFnZShvcmln
aW5hdGluZ1BhZ2VJRCkgOiBudWxscHRyKTsKIAogICAgICAgICBhdXRvIHVzZXJJbml0aWF0ZWRB
Y3Rpdml0eSA9IG1fcHJvY2Vzcy0+dXNlckluaXRpYXRlZEFjdGl2aXR5KG5hdmlnYXRpb25BY3Rp
b25EYXRhLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKTsKLSAgICAgICAgYm9vbCBzaG91bGRP
cGVuQXBwTGlua3MgPSAhbV9zaG91bGRTdXBwcmVzc0FwcExpbmtzSW5OZXh0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uICYmICghZGVzdGluYXRpb25GcmFtZUluZm8gfHwgZGVzdGluYXRpb25GcmFt
ZUluZm8tPmlzTWFpbkZyYW1lKCkpICYmICFob3N0c0FyZUVxdWFsKFVSTChQYXJzZWRVUkxTdHJp
bmcsIG1fbWFpbkZyYW1lLT51cmwoKSksIHJlcXVlc3QudXJsKCkpICYmIG5hdmlnYXRpb25BY3Rp
b25EYXRhLm5hdmlnYXRpb25UeXBlICE9IFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpCYWNrRm9y
d2FyZDsKKyAgICAgICAgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MgPSAhbV9zaG91bGRTdXBwcmVz
c0FwcExpbmtzSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uICYmIChkZXN0aW5hdGlvbkZy
YW1lSW5mby0+aXNNYWluRnJhbWUoKSkgJiYgIWhvc3RzQXJlRXF1YWwoVVJMKFBhcnNlZFVSTFN0
cmluZywgbV9tYWluRnJhbWUtPnVybCgpKSwgcmVxdWVzdC51cmwoKSkgJiYgbmF2aWdhdGlvbkFj
dGlvbkRhdGEubmF2aWdhdGlvblR5cGUgIT0gV2ViQ29yZTo6TmF2aWdhdGlvblR5cGU6OkJhY2tG
b3J3YXJkOwogCi0gICAgICAgIGF1dG8gbmF2aWdhdGlvbkFjdGlvbiA9IEFQSTo6TmF2aWdhdGlv
bkFjdGlvbjo6Y3JlYXRlKG5hdmlnYXRpb25BY3Rpb25EYXRhLCBzb3VyY2VGcmFtZUluZm8uZ2V0
KCksIGRlc3RpbmF0aW9uRnJhbWVJbmZvLmdldCgpLCByZXF1ZXN0LCBvcmlnaW5hbFJlcXVlc3Qu
dXJsKCksIHNob3VsZE9wZW5BcHBMaW5rcywgV1RGTW92ZSh1c2VySW5pdGlhdGVkQWN0aXZpdHkp
KTsKKyAgICAgICAgYXV0byBuYXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9u
OjpjcmVhdGUoV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSksIHNvdXJjZUZyYW1lSW5mby5n
ZXQoKSwgZGVzdGluYXRpb25GcmFtZUluZm8ucHRyKCksIFdURk1vdmUocmVxdWVzdCksIG9yaWdp
bmFsUmVxdWVzdC51cmwoKSwgc2hvdWxkT3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVzZXJJbml0aWF0
ZWRBY3Rpdml0eSkpOwogCi0gICAgICAgIG1fbmF2aWdhdGlvbkNsaWVudC0+ZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbigqdGhpcywgbmF2aWdhdGlvbkFjdGlvbi5nZXQoKSwgV1RGTW92
ZShsaXN0ZW5lciksIG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0
YS5vYmplY3QoKSkuZ2V0KCkpOworICAgICAgICBtX25hdmlnYXRpb25DbGllbnQtPmRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24oKnRoaXMsIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiks
IFdURk1vdmUobGlzdGVuZXIpLCBtX3Byb2Nlc3MtPnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHMo
dXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9wb2xpY3lD
bGllbnQtPmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oKnRoaXMsIGZyYW1lLCBuYXZp
Z2F0aW9uQWN0aW9uRGF0YSwgb3JpZ2luYXRpbmdGcmFtZSwgb3JpZ2luYWxSZXF1ZXN0LCByZXF1
ZXN0LCBXVEZNb3ZlKGxpc3RlbmVyKSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmpl
Y3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CisgICAgICAgIG1fcG9saWN5Q2xpZW50LT5k
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCp0aGlzLCBmcmFtZSwgV1RGTW92ZShuYXZp
Z2F0aW9uQWN0aW9uRGF0YSksIG9yaWdpbmF0aW5nRnJhbWUsIG9yaWdpbmFsUmVxdWVzdCwgV1RG
TW92ZShyZXF1ZXN0KSwgV1RGTW92ZShsaXN0ZW5lciksIG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFu
ZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogCiAgICAgbV9zaG91bGRT
dXBwcmVzc0FwcExpbmtzSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uID0gZmFsc2U7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBmcmFtZVNlY3VyaXR5T3Jp
Z2luLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIHVp
bnQ2NF90IGxpc3RlbmVySUQsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odWludDY0X3QgZnJhbWVJRCwg
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBmcmFtZVNlY3VyaXR5T3JpZ2luLCBOYXZpZ2F0aW9u
QWN0aW9uRGF0YSYmIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1
ZXN0LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgdWludDY0X3QgbGlzdGVuZXJJRCwgY29uc3Qg
VXNlckRhdGEmIHVzZXJEYXRhKQogewogICAgIFBhZ2VDbGllbnRQcm90ZWN0b3IgcHJvdGVjdG9y
KG1fcGFnZUNsaWVudCk7CiAKQEAgLTM2OTIsNyArMzY5Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW4KIAogICAgICAgICBhdXRvIHVzZXJJbml0aWF0ZWRBY3Rp
dml0eSA9IG1fcHJvY2Vzcy0+dXNlckluaXRpYXRlZEFjdGl2aXR5KG5hdmlnYXRpb25BY3Rpb25E
YXRhLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKTsKICAgICAgICAgYm9vbCBzaG91bGRPcGVu
QXBwTGlua3MgPSAhaG9zdHNBcmVFcXVhbChVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX21haW5GcmFt
ZS0+dXJsKCkpLCByZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgYXV0byBuYXZpZ2F0aW9uQWN0aW9u
ID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUobmF2aWdhdGlvbkFjdGlvbkRhdGEsIHNv
dXJjZUZyYW1lSW5mby5nZXQoKSwgbnVsbHB0ciwgcmVxdWVzdCwgcmVxdWVzdC51cmwoKSwgc2hv
dWxkT3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVzZXJJbml0aWF0ZWRBY3Rpdml0eSkpOworICAgICAg
ICBhdXRvIG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShX
VEZNb3ZlKG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgc291cmNlRnJhbWVJbmZvLmdldCgpLCBudWxs
cHRyLCBXVEZNb3ZlKHJlcXVlc3QpLCByZXF1ZXN0LnVybCgpLCBzaG91bGRPcGVuQXBwTGlua3Ms
IFdURk1vdmUodXNlckluaXRpYXRlZEFjdGl2aXR5KSk7CiAKICAgICAgICAgbV9uYXZpZ2F0aW9u
Q2xpZW50LT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCp0aGlzLCBuYXZpZ2F0aW9u
QWN0aW9uLmdldCgpLCBXVEZNb3ZlKGxpc3RlbmVyKSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5k
bGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiAKQEAgLTM4MzIsNyArMzgz
Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUKIAogLy8gVUlD
bGllbnQKIAotdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZU5ld1BhZ2UoY29uc3QgRnJhbWVJbmZv
RGF0YSYgb3JpZ2luYXRpbmdGcmFtZUluZm9EYXRhLCB1aW50NjRfdCBvcmlnaW5hdGluZ1BhZ2VJ
RCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXaW5kb3dGZWF0dXJlcyYg
d2luZG93RmVhdHVyZXMsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0
aW9uRGF0YSwgUmVmUHRyPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2U6OkRl
bGF5ZWRSZXBseT4gcmVwbHkpCit2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlTmV3UGFnZShjb25z
dCBGcmFtZUluZm9EYXRhJiBvcmlnaW5hdGluZ0ZyYW1lSW5mb0RhdGEsIHVpbnQ2NF90IG9yaWdp
bmF0aW5nUGFnZUlELCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBXaW5kb3dGZWF0
dXJlcyYgd2luZG93RmVhdHVyZXMsIE5hdmlnYXRpb25BY3Rpb25EYXRhJiYgbmF2aWdhdGlvbkFj
dGlvbkRhdGEsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlOjpEZWxh
eWVkUmVwbHk+JiYgcmVwbHkpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyhtX3Byb2Nlc3MtPndlYkZy
YW1lKG9yaWdpbmF0aW5nRnJhbWVJbmZvRGF0YS5mcmFtZUlEKSk7CiAgICAgYXV0byBvcmlnaW5h
dGluZ0ZyYW1lSW5mbyA9IEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUob3JpZ2luYXRpbmdGcmFtZUlu
Zm9EYXRhLCBtX3Byb2Nlc3MtPndlYlBhZ2Uob3JpZ2luYXRpbmdQYWdlSUQpKTsKQEAgLTM4NTIs
MTAgKzM4NTMsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZU5ld1BhZ2UoY29uc3QgRgog
CiAgICAgfTsKIAotICAgIGlmIChtX3VpQ2xpZW50LT5jcmVhdGVOZXdQYWdlQXN5bmModGhpcywg
b3JpZ2luYXRpbmdGcmFtZUluZm8sIHJlcXVlc3QsIHdpbmRvd0ZlYXR1cmVzLCBuYXZpZ2F0aW9u
QWN0aW9uRGF0YSwgW2NvbXBsZXRpb25IYW5kbGVyXShSZWZQdHI8V2ViUGFnZVByb3h5PiBuZXdQ
YWdlKSB7IGNvbXBsZXRpb25IYW5kbGVyKG5ld1BhZ2UpOyB9KSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChtX3VpQ2xpZW50LT5jYW5DcmVhdGVOZXdQYWdlQXN5bmMoKSkgeworICAgICAgICBt
X3VpQ2xpZW50LT5jcmVhdGVOZXdQYWdlQXN5bmModGhpcywgb3JpZ2luYXRpbmdGcmFtZUluZm8s
IFdURk1vdmUocmVxdWVzdCksIHdpbmRvd0ZlYXR1cmVzLCBXVEZNb3ZlKG5hdmlnYXRpb25BY3Rp
b25EYXRhKSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KFJlZlB0cjxXZWJQYWdlUHJveHk+IG5ld1BhZ2UpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKG5ld1BhZ2UpOworICAgICAgICB9KTsKKyAgICB9CiAKLSAgICBSZWZQdHI8V2ViUGFn
ZVByb3h5PiBuZXdQYWdlID0gbV91aUNsaWVudC0+Y3JlYXRlTmV3UGFnZSh0aGlzLCBvcmlnaW5h
dGluZ0ZyYW1lSW5mbywgcmVxdWVzdCwgd2luZG93RmVhdHVyZXMsIG5hdmlnYXRpb25BY3Rpb25E
YXRhKTsKKyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBuZXdQYWdlID0gbV91aUNsaWVudC0+Y3Jl
YXRlTmV3UGFnZSh0aGlzLCBvcmlnaW5hdGluZ0ZyYW1lSW5mbywgV1RGTW92ZShyZXF1ZXN0KSwg
d2luZG93RmVhdHVyZXMsIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbkRhdGEpKTsKICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKG5ld1BhZ2UpKTsKIH0KICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMTk4NDEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDcg
KzM5MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsb3NlUGFnZShib29sIHN0b3BSZXNwb25zaXZl
bmVzc1RpbWVyKTsKIAogICAgIHZvaWQgYWRkUGxhdGZvcm1Mb2FkUGFyYW1ldGVycyhMb2FkUGFy
YW1ldGVycyYpOwotICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IGxvYWRSZXF1ZXN0KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3kgPSBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRB
bGxvd0V4dGVybmFsU2NoZW1lcywgQVBJOjpPYmplY3QqIHVzZXJEYXRhID0gbnVsbHB0cik7Cisg
ICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gbG9hZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiYsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBXZWJDb3Jl
OjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvd0V4dGVybmFsU2NoZW1l
cywgQVBJOjpPYmplY3QqIHVzZXJEYXRhID0gbnVsbHB0cik7CiAgICAgUmVmUHRyPEFQSTo6TmF2
aWdhdGlvbj4gbG9hZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlVVJMLCBjb25zdCBTdHJpbmcmIHJl
c291cmNlRGlyZWN0b3J5VVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEgPSBudWxscHRyKTsKICAg
ICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBsb2FkRGF0YShBUEk6OkRhdGEqLCBjb25zdCBTdHJp
bmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIGJhc2VV
UkwsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIpOwogICAgIFJlZlB0cjxBUEk6Ok5h
dmlnYXRpb24+IGxvYWRIVE1MU3RyaW5nKGNvbnN0IFN0cmluZyYgaHRtbFN0cmluZywgY29uc3Qg
U3RyaW5nJiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEgPSBudWxscHRyKTsKQEAgLTEy
NzYsOCArMTI3Niw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZERlc3Ryb3lOYXZpZ2F0aW9u
KHVpbnQ2NF90IG5hdmlnYXRpb25JRCk7CiAKLSAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24odWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiBmcmFtZVNlY3VyaXR5T3JpZ2luLCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0
IE5hdmlnYXRpb25BY3Rpb25EYXRhJiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIHVpbnQ2NF90IG9y
aWdpbmF0aW5nUGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFs
UmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgdWludDY0X3QgbGlzdGVu
ZXJJRCwgY29uc3QgVXNlckRhdGEmLCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjo6RGVsYXllZFJlcGx5PiYmKTsKLSAgICB2b2lkIGRl
Y2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbih1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIGZyYW1lU2VjdXJpdHlPcmlnaW4sIGNvbnN0IE5hdmln
YXRpb25BY3Rpb25EYXRhJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
U3RyaW5nJiBmcmFtZU5hbWUsIHVpbnQ2NF90IGxpc3RlbmVySUQsIGNvbnN0IFVzZXJEYXRhJik7
CisgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9yaWdp
biwgdWludDY0X3QgbmF2aWdhdGlvbklELCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmLCBjb25zdCBG
cmFtZUluZm9EYXRhJiwgdWludDY0X3Qgb3JpZ2luYXRpbmdQYWdlSUQsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmJiwgdWludDY0X3QgbGlzdGVuZXJJRCwgY29uc3QgVXNlckRhdGEmLCBSZWY8TWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjo6RGVsYXllZFJl
cGx5PiYmKTsKKyAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbih1aW50NjRf
dCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIGZyYW1lU2VjdXJp
dHlPcmlnaW4sIE5hdmlnYXRpb25BY3Rpb25EYXRhJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYmLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgdWludDY0X3QgbGlzdGVuZXJJRCwgY29uc3Qg
VXNlckRhdGEmKTsKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvclJlc3BvbnNlKHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9y
aWdpbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGJvb2wgY2FuU2hvd01JTUVUeXBlLCB1aW50NjRfdCBsaXN0ZW5lcklE
LCBjb25zdCBVc2VyRGF0YSYpOwogICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5j
KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJh
bWVTZWN1cml0eU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgY2FuU2hvd01JTUVUeXBlLCB1aW50NjRf
dCBsaXN0ZW5lcklELCBjb25zdCBVc2VyRGF0YSYsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmM6OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9p
ZCB1bmFibGVUb0ltcGxlbWVudFBvbGljeSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVXNlckRhdGEmKTsKQEAgLTEyOTEsNyArMTI5MSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoY29uc3QgU3RyaW5nJiB0
aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGZyYW1lSUQpOwogCiAgICAgLy8gVUkg
Y2xpZW50Ci0gICAgdm9pZCBjcmVhdGVOZXdQYWdlKGNvbnN0IEZyYW1lSW5mb0RhdGEmLCB1aW50
NjRfdCBvcmlnaW5hdGluZ1BhZ2VJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uRGF0
YSYsIFJlZlB0cjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlOjpEZWxheWVk
UmVwbHk+KTsKKyAgICB2b2lkIGNyZWF0ZU5ld1BhZ2UoY29uc3QgRnJhbWVJbmZvRGF0YSYsIHVp
bnQ2NF90IG9yaWdpbmF0aW5nUGFnZUlELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29u
c3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmLCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZTo6RGVsYXllZFJlcGx5PiYmKTsK
ICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQodWludDY0
X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3Ry
aW5nJiwgUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6RGVs
YXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHJ1bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYs
IFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6RGVsYXll
ZFJlcGx5PiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2
aWdhdGlvbi5jcHAJKHJldmlzaW9uIDIxOTg0MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQCBO
YXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYktpdDo6V2ViTmF2aWdhCiB7CiB9CiAKLU5hdmlnYXRp
b246Ok5hdmlnYXRpb24oV2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9u
KFdlYktpdDo6V2ViTmF2aWdhdGlvblN0YXRlJiBzdGF0ZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYgcmVxdWVzdCkKICAgICA6IG1fbmF2aWdhdGlvbklEKHN0YXRlLmdlbmVyYXRlTmF2aWdh
dGlvbklEKCkpCi0gICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKKyAgICAsIG1fcmVxdWVzdChXVEZN
b3ZlKHJlcXVlc3QpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJTmF2aWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElOYXZpZ2F0aW9uLmgJKHJldmlzaW9uIDIxOTg0MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEFQ
SU5hdmlnYXRpb25faAotI2RlZmluZSBBUElOYXZpZ2F0aW9uX2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3Qu
aD4KQEAgLTQzLDkgKzQyLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBOYXZpZ2F0aW9uKHN0YXRlKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJlZjxOYXZpZ2F0aW9u
PiBjcmVhdGUoV2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgc3RhdGljIFJlZjxOYXZpZ2F0aW9uPiBj
cmVhdGUoV2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJiByZXF1ZXN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TmF2aWdhdGlvbihzdGF0ZSwgcmVxdWVzdCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBOYXZpZ2F0aW9uKHN0YXRlLCBXVEZNb3ZlKHJlcXVlc3QpKSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+TmF2aWdhdGlvbigpOwpAQCAtNTYsMTMgKzU1LDEwIEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBOYXZpZ2F0aW9uKFdlYktpdDo6V2ViTmF2aWdhdGlvblN0YXRlJik7
Ci0gICAgZXhwbGljaXQgTmF2aWdhdGlvbihXZWJLaXQ6OldlYk5hdmlnYXRpb25TdGF0ZSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIGV4cGxpY2l0IE5hdmlnYXRpb24o
V2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGUmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7
CiAKICAgICB1aW50NjRfdCBtX25hdmlnYXRpb25JRDsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QgbV9yZXF1ZXN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCi0KLQotI2VuZGlmIC8v
IEFQSU5hdmlnYXRpb25faApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5h
dmlnYXRpb25BY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCShyZXZpc2lvbiAyMTk4NDEpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBBUElOYXZpZ2F0aW9uQWN0aW9uX2gKLSNkZWZpbmUgQVBJTmF2aWdhdGlvbkFj
dGlvbl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSUZyYW1lSW5mby5oIgogI2luY2x1
ZGUgIkFQSU9iamVjdC5oIgpAQCAtMzcsMjAgKzM2LDkgQEAgbmFtZXNwYWNlIEFQSSB7CiAKIGNs
YXNzIE5hdmlnYXRpb25BY3Rpb24gZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5
cGU6Ok5hdmlnYXRpb25BY3Rpb24+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5hdmlnYXRp
b25BY3Rpb24+IGNyZWF0ZShjb25zdCBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZp
Z2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1lLCBBUEk6OkZyYW1l
SW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hbFVSTCwgYm9vbCBzaG91bGRPcGVuQXBwTGlu
a3MsIFJlZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiB1c2VySW5pdGlhdGVkQWN0aW9uKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0
aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWUsIHRhcmdldEZyYW1lLCByZXF1ZXN0LCBvcmlnaW5h
bFVSTCwgc2hvdWxkT3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVzZXJJbml0aWF0ZWRBY3Rpb24pKSk7
Ci0gICAgfQotCi0gICAgTmF2aWdhdGlvbkFjdGlvbihjb25zdCBXZWJLaXQ6Ok5hdmlnYXRpb25B
Y3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZy
YW1lLCBBUEk6OkZyYW1lSW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hbFVSTCwgYm9vbCBz
aG91bGRPcGVuQXBwTGlua3MsIFJlZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiB1c2VySW5pdGlh
dGVkQWN0aW9uKQotICAgICAgICA6IG1fc291cmNlRnJhbWUoc291cmNlRnJhbWUpCi0gICAgICAg
ICwgbV90YXJnZXRGcmFtZSh0YXJnZXRGcmFtZSkKLSAgICAgICAgLCBtX3JlcXVlc3QocmVxdWVz
dCkKLSAgICAgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQotICAgICAgICAsIG1fc2hv
dWxkT3BlbkFwcExpbmtzKHNob3VsZE9wZW5BcHBMaW5rcykKLSAgICAgICAgLCBtX3VzZXJJbml0
aWF0ZWRBY3Rpb24oV1RGTW92ZSh1c2VySW5pdGlhdGVkQWN0aW9uKSkKLSAgICAgICAgLCBtX25h
dmlnYXRpb25BY3Rpb25EYXRhKG5hdmlnYXRpb25BY3Rpb25EYXRhKQorICAgIHN0YXRpYyBSZWY8
TmF2aWdhdGlvbkFjdGlvbj4gY3JlYXRlKFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmJiBu
YXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1lLCBBUEk6OkZy
YW1lSW5mbyogdGFyZ2V0RnJhbWUsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3Qs
IGNvbnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2luYWxVUkwsIGJvb2wgc2hvdWxkT3BlbkFwcExpbmtz
LCBSZWZQdHI8VXNlckluaXRpYXRlZEFjdGlvbj4gdXNlckluaXRpYXRlZEFjdGlvbikKICAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5hdmlnYXRpb25BY3Rpb24oV1RGTW92ZShu
YXZpZ2F0aW9uQWN0aW9uRGF0YSksIHNvdXJjZUZyYW1lLCB0YXJnZXRGcmFtZSwgV1RGTW92ZShy
ZXF1ZXN0KSwgb3JpZ2luYWxVUkwsIHNob3VsZE9wZW5BcHBMaW5rcywgV1RGTW92ZSh1c2VySW5p
dGlhdGVkQWN0aW9uKSkpOwogICAgIH0KIAogICAgIEZyYW1lSW5mbyogc291cmNlRnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lLmdldCgpOyB9CkBAIC03Myw2ICs2MSwxNyBAQCBw
dWJsaWM6CiAgICAgVXNlckluaXRpYXRlZEFjdGlvbiogdXNlckluaXRpYXRlZEFjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlckluaXRpYXRlZEFjdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgor
ICAgIE5hdmlnYXRpb25BY3Rpb24oV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmIG5hdmln
YXRpb25BY3Rpb25EYXRhLCBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUsIEFQSTo6RnJhbWVJ
bmZvKiB0YXJnZXRGcmFtZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgY29u
c3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hbFVSTCwgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MsIFJl
ZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiB1c2VySW5pdGlhdGVkQWN0aW9uKQorICAgICAgICA6
IG1fc291cmNlRnJhbWUoc291cmNlRnJhbWUpCisgICAgICAgICwgbV90YXJnZXRGcmFtZSh0YXJn
ZXRGcmFtZSkKKyAgICAgICAgLCBtX3JlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSkKKyAgICAgICAg
LCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQorICAgICAgICAsIG1fc2hvdWxkT3BlbkFwcExp
bmtzKHNob3VsZE9wZW5BcHBMaW5rcykKKyAgICAgICAgLCBtX3VzZXJJbml0aWF0ZWRBY3Rpb24o
V1RGTW92ZSh1c2VySW5pdGlhdGVkQWN0aW9uKSkKKyAgICAgICAgLCBtX25hdmlnYXRpb25BY3Rp
b25EYXRhKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbkRhdGEpKQorICAgIHsKKyAgICB9CisKICAg
ICBSZWZQdHI8RnJhbWVJbmZvPiBtX3NvdXJjZUZyYW1lOwogICAgIFJlZlB0cjxGcmFtZUluZm8+
IG1fdGFyZ2V0RnJhbWU7CiAKQEAgLTg3LDUgKzg2LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEFQSQotCi0jZW5kaWYgLy8gQVBJTmF2aWdhdGlvbkFjdGlvbl9oCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgJ
KHJldmlzaW9uIDIxOTg0MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZp
Z2F0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5G
cmFtZShjb25zdCBXZWJLaXQ6OlF1aWNrTG9va0RvY3VtZW50RGF0YSYpIHsgfQogI2VuZGlmCiAK
LSAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJLaXQ6
OldlYlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlvbkFjdGlvbiYsIFJlZjxXZWJLaXQ6OldlYkZy
YW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiBsaXN0ZW5lciwgQVBJOjpPYmplY3QqKQorICAgIHZp
cnR1YWwgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYktpdDo6V2ViUGFn
ZVByb3h5JiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgUmVmPFdlYktpdDo6V2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5PiYmIGxpc3RlbmVyLCBBUEk6Ok9iamVjdCopCiAgICAgewog
ICAgICAgICBsaXN0ZW5lci0+dXNlKHsgfSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSVBvbGljeUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElQb2xpY3lDbGllbnQuaAkocmV2aXNpb24gMjE5ODQxKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVBvbGljeUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBBUElQb2xpY3lDbGllbnRfaAotI2RlZmluZSBBUElQb2xpY3lDbGll
bnRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldl
YkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgpAQCAtNjgsNSArNjcsMyBAQCBwdWJsaWM6CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEFQSVBvbGljeUNsaWVudF9oCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAkocmV2aXNpb24g
MjE5ODQxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTcyLDggKzcyLDkgQEAgY2xhc3MgVUlDbGllbnQgewogcHVibGljOgog
ICAgIHZpcnR1YWwgflVJQ2xpZW50KCkgeyB9CiAKLSAgICB2aXJ0dWFsIFJlZlB0cjxXZWJLaXQ6
OldlYlBhZ2VQcm94eT4gY3JlYXRlTmV3UGFnZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIEFQSTo6
RnJhbWVJbmZvJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6V2luZG93RmVhdHVyZXMmLCBjb25zdCBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhJikg
eyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVOZXdQYWdlQXN5bmMo
V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6OkZyYW1lSW5mbyYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiwgY29uc3QgV2Vi
S2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYsIFdURjo6RnVuY3Rpb248dm9pZCAoUmVmUHRyPFdl
YktpdDo6V2ViUGFnZVByb3h5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IGNyZWF0ZU5ld1Bh
Z2UoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6OkZyYW1lSW5mbyYsIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYsIFdlYktpdDo6TmF2
aWdhdGlvbkFjdGlvbkRhdGEmJikgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVOZXdQYWdlQXN5bmMoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6OkZyYW1lSW5m
byYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0
dXJlcyYsIFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmJiwgV1RGOjpGdW5jdGlvbjx2b2lk
KFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgY2FuQ3JlYXRlTmV3UGFnZUFzeW5jKCkgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BhZ2UoV2ViS2l0OjpXZWJQYWdlUHJveHkqKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKFdlYktpdDo6V2Vi
UGFnZVByb3h5KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbihXZWJL
aXQ6OldlYlBhZ2VQcm94eSopIHsgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAyMTk4NDEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTIgKzE2NywxNCBAQCB2
b2lkIFdLUGFnZUxvYWRVUkxXaXRoVXNlckRhdGEoV0tQYWdlUmVmCiAKIHZvaWQgV0tQYWdlTG9h
ZFVSTFJlcXVlc3QoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLVVJMUmVxdWVzdFJlZiB1cmxSZXF1ZXN0
UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+bG9hZFJlcXVlc3QodG9JbXBsKHVybFJlcXVl
c3RSZWYpLT5yZXNvdXJjZVJlcXVlc3QoKSk7CisgICAgYXV0byByZXNvdXJjZVJlcXVlc3QgPSB0
b0ltcGwodXJsUmVxdWVzdFJlZiktPnJlc291cmNlUmVxdWVzdCgpOworICAgIHRvSW1wbChwYWdl
UmVmKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpKTsKIH0KIAogdm9pZCBX
S1BhZ2VMb2FkVVJMUmVxdWVzdFdpdGhVc2VyRGF0YShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tVUkxS
ZXF1ZXN0UmVmIHVybFJlcXVlc3RSZWYsIFdLVHlwZVJlZiB1c2VyRGF0YVJlZikKIHsKLSAgICB0
b0ltcGwocGFnZVJlZiktPmxvYWRSZXF1ZXN0KHRvSW1wbCh1cmxSZXF1ZXN0UmVmKS0+cmVzb3Vy
Y2VSZXF1ZXN0KCksIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93
LCB0b0ltcGwodXNlckRhdGFSZWYpKTsKKyAgICBhdXRvIHJlc291cmNlUmVxdWVzdCA9IHRvSW1w
bCh1cmxSZXF1ZXN0UmVmKS0+cmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgdG9JbXBsKHBhZ2VSZWYp
LT5sb2FkUmVxdWVzdChXVEZNb3ZlKHJlc291cmNlUmVxdWVzdCksIFNob3VsZE9wZW5FeHRlcm5h
bFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93LCB0b0ltcGwodXNlckRhdGFSZWYpKTsKIH0KIAog
dm9pZCBXS1BhZ2VMb2FkRmlsZShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tVUkxSZWYgZmlsZVVSTCwg
V0tVUkxSZWYgcmVzb3VyY2VEaXJlY3RvcnlVUkwpCkBAIC0xNTYzLDcgKzE1NjUsNyBAQCB2b2lk
IFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYgcGFnCiAgICAgICAgIH0KIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IGNyZWF0ZU5ld1BhZ2UoV2ViUGFn
ZVByb3h5KiBwYWdlLCBBUEk6OkZyYW1lSW5mbyYgc291cmNlRnJhbWVJbmZvLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRv
d0ZlYXR1cmVzLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRh
dGEpIG92ZXJyaWRlCisgICAgICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IGNyZWF0ZU5ld1BhZ2Uo
V2ViUGFnZVByb3h5KiBwYWdlLCBBUEk6OkZyYW1lSW5mbyYgc291cmNlRnJhbWVJbmZvLCBSZXNv
dXJjZVJlcXVlc3QmJiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW5k
b3dGZWF0dXJlcywgTmF2aWdhdGlvbkFjdGlvbkRhdGEmJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSkg
ZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fY2xpZW50LmNyZWF0ZU5ld1BhZ2Up
IHsKICAgICAgICAgICAgICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBwYWdlLT5jb25maWd1cmF0
aW9uKCkuY29weSgpOwpAQCAtMTU3MSw3ICsxNTczLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlD
bGllbnQoV0tQYWdlUmVmIHBhZwogCiAgICAgICAgICAgICAgICAgYXV0byB1c2VySW5pdGlhdGVk
QWN0aXZpdHkgPSBwYWdlLT5wcm9jZXNzKCkudXNlckluaXRpYXRlZEFjdGl2aXR5KG5hdmlnYXRp
b25BY3Rpb25EYXRhLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKTsKICAgICAgICAgICAgICAg
ICBib29sIHNob3VsZE9wZW5BcHBMaW5rcyA9ICFob3N0c0FyZUVxdWFsKHNvdXJjZUZyYW1lSW5m
by5yZXF1ZXN0KCkudXJsKCksIHJlc291cmNlUmVxdWVzdC51cmwoKSk7Ci0gICAgICAgICAgICAg
ICAgYXV0byBhcGlOYXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVh
dGUobmF2aWdhdGlvbkFjdGlvbkRhdGEsICZzb3VyY2VGcmFtZUluZm8sIG51bGxwdHIsIHJlc291
cmNlUmVxdWVzdCwgV2ViQ29yZTo6VVJMKCksIHNob3VsZE9wZW5BcHBMaW5rcywgdXNlckluaXRp
YXRlZEFjdGl2aXR5KTsKKyAgICAgICAgICAgICAgICBhdXRvIGFwaU5hdmlnYXRpb25BY3Rpb24g
PSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb25E
YXRhKSwgJnNvdXJjZUZyYW1lSW5mbywgbnVsbHB0ciwgV1RGTW92ZShyZXNvdXJjZVJlcXVlc3Qp
LCBXZWJDb3JlOjpVUkwoKSwgc2hvdWxkT3BlbkFwcExpbmtzLCB1c2VySW5pdGlhdGVkQWN0aXZp
dHkpOwogCiAgICAgICAgICAgICAgICAgYXV0byBhcGlXaW5kb3dGZWF0dXJlcyA9IEFQSTo6V2lu
ZG93RmVhdHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcyk7CiAKQEAgLTIxNTcsMTMgKzIxNTks
MTMgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChXS1BhZwogICAgICAgICB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBBUEk6Ok5hdmlnYXRpb25BY3Rpb24mIG5hdmlnYXRp
b25BY3Rpb24sIFJlZjxXZWJLaXQ6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiBsaXN0
ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQorICAgICAgICB2b2lkIGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8QVBJOjpO
YXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFJlZjxXZWJLaXQ6OldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eT4mJiBsaXN0ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBm
aW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pIHsKICAgICAgICAgICAgICAgICBsaXN0ZW5lci0+dXNlKHsgfSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9j
bGllbnQuZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbih0b0FQSSgmcGFnZSksIHRvQVBJ
KCZuYXZpZ2F0aW9uQWN0aW9uKSwgdG9BUEkobGlzdGVuZXIucHRyKCkpLCB0b0FQSSh1c2VyRGF0
YSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5kZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHRvQVBJKCZwYWdlKSwgdG9BUEkobmF2aWdhdGlv
bkFjdGlvbi5wdHIoKSksIHRvQVBJKGxpc3RlbmVyLnB0cigpKSwgdG9BUEkodXNlckRhdGEpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UoV2ViUGFnZVByb3h5JiBwYWdlLCBBUEk6Ok5h
dmlnYXRpb25SZXNwb25zZSYgbmF2aWdhdGlvblJlc3BvbnNlLCBSZWY8V2ViS2l0OjpXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHk+JiYgbGlzdGVuZXIsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkg
b3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25T
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmln
YXRpb25TdGF0ZS5oCShyZXZpc2lvbiAyMTk4NDEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3Vt
ZW50SW5NYWluRnJhbWUoY29uc3QgUXVpY2tMb29rRG9jdW1lbnREYXRhJikgb3ZlcnJpZGU7CiAj
ZW5kaWYKIAotICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV2Vi
UGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uQWN0aW9uJiwgUmVmPFdlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eT4mJiwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZTsKKyAgICAgICAg
dm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYlBhZ2VQcm94eSYsIFJlZjxB
UEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+
JiYsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlKFdlYlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlv
blJlc3BvbnNlJiwgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiwgQVBJOjpPYmpl
Y3QqIHVzZXJEYXRhKSBvdmVycmlkZTsKIAogICAgICAgICBOYXZpZ2F0aW9uU3RhdGUmIG1fbmF2
aWdhdGlvblN0YXRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdh
dGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L05hdmlnYXRpb25TdGF0ZS5tbQkocmV2aXNpb24gMjE5ODQxKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQs
MTYgKzMwNCwxNiBAQCBzdGF0aWMgdm9pZCB0cnlBcHBMaW5rKFJlZlB0cjxBUEk6Ok5hdmlnCiAj
ZW5kaWYKIH0KIAotdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHksIEFQ
STo6TmF2aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlvbkFjdGlvbiwgUmVmPFdlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eT4mJiBsaXN0ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQordm9pZCBO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb24oV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHksIFJlZjxBUEk6Ok5hdmlnYXRpb25B
Y3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94
eT4mJiBsaXN0ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQogewogICAgIFN0cmluZyBtYWlu
RnJhbWVVUkxTdHJpbmcgPSB3ZWJQYWdlUHJveHkubWFpbkZyYW1lKCktPnVybCgpOwogCiAgICAg
aWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lvbkhhbmRsZXIKICAgICAgICAg
JiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxlcldlYnNpdGVQb2xp
Y2llcykgewotICAgICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiBsb2NhbE5hdmln
YXRpb25BY3Rpb24gPSAmbmF2aWdhdGlvbkFjdGlvbjsKKyAgICAgICAgUmVmPEFQSTo6TmF2aWdh
dGlvbkFjdGlvbj4gbG9jYWxOYXZpZ2F0aW9uQWN0aW9uID0gbmF2aWdhdGlvbkFjdGlvbi5jb3B5
UmVmKCk7CiAgICAgICAgIFJlZlB0cjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+IGxvY2Fs
TGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKTsKIAotICAgICAgICB0cnlBcHBMaW5rKFdURk1v
dmUobG9jYWxOYXZpZ2F0aW9uQWN0aW9uKSwgbWFpbkZyYW1lVVJMU3RyaW5nLCBbd2ViUGFnZSA9
IFJlZlB0cjxXZWJQYWdlUHJveHk+KCZ3ZWJQYWdlUHJveHkpLCBsb2NhbExpc3RlbmVyLCBsb2Nh
bE5hdmlnYXRpb25BY3Rpb24gPSBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPigmbmF2aWdh
dGlvbkFjdGlvbildIChib29sIGZvbGxvd2VkTGlua1RvQXBwKSB7CisgICAgICAgIHRyeUFwcExp
bmsoV1RGTW92ZShsb2NhbE5hdmlnYXRpb25BY3Rpb24pLCBtYWluRnJhbWVVUkxTdHJpbmcsIFt3
ZWJQYWdlID0gUmVmUHRyPFdlYlBhZ2VQcm94eT4oJndlYlBhZ2VQcm94eSksIGxvY2FsTGlzdGVu
ZXIsIGxvY2FsTmF2aWdhdGlvbkFjdGlvbiA9IG5hdmlnYXRpb25BY3Rpb24uY29weVJlZigpXSAo
Ym9vbCBmb2xsb3dlZExpbmtUb0FwcCkgewogICAgICAgICAgICAgaWYgKGZvbGxvd2VkTGlua1Rv
QXBwKSB7CiAgICAgICAgICAgICAgICAgbG9jYWxMaXN0ZW5lci0+aWdub3JlKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50OjoKICAgICAKICAgICBSZWZQdHI8Q29tcGxldGlvbkhhbmRsZXJD
YWxsQ2hlY2tlcj4gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0
ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIGRlbGVnYXRlSGFzV2Vic2l0ZVBvbGljaWVzID8g
QHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246ZGVjaXNp
b25IYW5kbGVyOikgOiBAc2VsZWN0b3Iod2ViVmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uOmRlY2lzaW9uSGFuZGxlcjopKTsKICAgICAKLSAgICBhdXRvIGRlY2lzaW9uSGFuZGxl
cldpdGhQb2xpY2llcyA9IFtsb2NhbExpc3RlbmVyID0gUmVmUHRyPFdlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eT4oV1RGTW92ZShsaXN0ZW5lcikpLCBsb2NhbE5hdmlnYXRpb25BY3Rpb24gPSBS
ZWZQdHI8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPigmbmF2aWdhdGlvbkFjdGlvbiksIGNoZWNrZXIg
PSBXVEZNb3ZlKGNoZWNrZXIpLCBtYWluRnJhbWVVUkxTdHJpbmddKFdLTmF2aWdhdGlvbkFjdGlv
blBvbGljeSBhY3Rpb25Qb2xpY3ksIF9XS1dlYnNpdGVQb2xpY2llcyAqd2Vic2l0ZVBvbGljaWVz
KSBtdXRhYmxlIHsKKyAgICBhdXRvIGRlY2lzaW9uSGFuZGxlcldpdGhQb2xpY2llcyA9IFtsb2Nh
bExpc3RlbmVyID0gUmVmUHRyPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4oV1RGTW92ZShs
aXN0ZW5lcikpLCBsb2NhbE5hdmlnYXRpb25BY3Rpb24gPSBuYXZpZ2F0aW9uQWN0aW9uLmNvcHlS
ZWYoKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlciksIG1haW5GcmFtZVVSTFN0cmluZ10oV0tO
YXZpZ2F0aW9uQWN0aW9uUG9saWN5IGFjdGlvblBvbGljeSwgX1dLV2Vic2l0ZVBvbGljaWVzICp3
ZWJzaXRlUG9saWNpZXMpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlv
bkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNo
ZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzkzLDEyICszOTMsMTIgQEAg
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OgogICAgIH07CiAgICAgCiAg
ICAgaWYgKGRlbGVnYXRlSGFzV2Vic2l0ZVBvbGljaWVzKQotICAgICAgICBbKGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFw
cGVyKG5hdmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXJXaXRo
UG9saWNpZXNdOworICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5h
dmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRl
Y2lzaW9uSGFuZGxlcjpCbG9ja1B0cjx2b2lkKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSwgX1dL
V2Vic2l0ZVBvbGljaWVzICopPjo6ZnJvbUNhbGxhYmxlKFdURk1vdmUoZGVjaXNpb25IYW5kbGVy
V2l0aFBvbGljaWVzKSkuZ2V0KCldOwogICAgIGVsc2UgewotICAgICAgICBhdXRvIGRlY2lzaW9u
SGFuZGxlcldpdGhvdXRQb2xpY2llcyA9IFtkZWNpc2lvbkhhbmRsZXJXaXRoUG9saWNpZXNdIChX
S05hdmlnYXRpb25BY3Rpb25Qb2xpY3kgYWN0aW9uUG9saWN5KSBtdXRhYmxlIHsKKyAgICAgICAg
YXV0byBkZWNpc2lvbkhhbmRsZXJXaXRob3V0UG9saWNpZXMgPSBbZGVjaXNpb25IYW5kbGVyV2l0
aFBvbGljaWVzID0gV1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRoUG9saWNpZXMpXSAoV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5IGFjdGlvblBvbGljeSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBk
ZWNpc2lvbkhhbmRsZXJXaXRoUG9saWNpZXMoYWN0aW9uUG9saWN5LCBuaWwpOwogICAgICAgICB9
OwotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUu
bV93ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0
aW9uQWN0aW9uKSBkZWNpc2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyV2l0aG91dFBvbGljaWVz
XTsKKyAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRl
Lm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdh
dGlvbkFjdGlvbikgZGVjaXNpb25IYW5kbGVyOkJsb2NrUHRyPHZvaWQoV0tOYXZpZ2F0aW9uQWN0
aW9uUG9saWN5KT46OmZyb21DYWxsYWJsZShXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcldpdGhvdXRQ
b2xpY2llcykpLmdldCgpXTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1VJRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgJKHJldmlzaW9uIDIxOTg0MSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzksOSAr
NzksMTAgQEAgcHJpdmF0ZToKIAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIEFQSTo6VUlDbGll
bnQKLSAgICAgICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBjcmVhdGVOZXdQYWdlKFdl
YktpdDo6V2ViUGFnZVByb3h5KiwgQVBJOjpGcmFtZUluZm8mLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYsIGNvbnN0IFdlYktp
dDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBjcmVhdGVO
ZXdQYWdlQXN5bmMoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6OkZyYW1lSW5mbyYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVz
JiwgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYsIFdURjo6RnVuY3Rpb248dm9p
ZCAoUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92
ZXJyaWRlOwotICAgICAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IGNyZWF0ZU5ld1Bh
Z2VDb21tb24oV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6OkZyYW1lSW5mbyYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiwg
Y29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYsIFdURjo6RnVuY3Rpb248dm9pZCAo
UmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAg
ICAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IGNyZWF0ZU5ld1BhZ2UoV2ViS2l0OjpX
ZWJQYWdlUHJveHkqLCBBUEk6OkZyYW1lSW5mbyYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
LCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYsIFdlYktpdDo6TmF2aWdhdGlvbkFjdGlv
bkRhdGEmJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgY3JlYXRlTmV3UGFnZUFzeW5jKFdlYktp
dDo6V2ViUGFnZVByb3h5KiwgQVBJOjpGcmFtZUluZm8mLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmJiwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBXZWJLaXQ6Ok5hdmlnYXRpb25B
Y3Rpb25EYXRhJiYsIFdURjo6RnVuY3Rpb248dm9pZChSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJv
eHk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWw7CisgICAgICAgIGJvb2wgY2FuQ3JlYXRl
TmV3UGFnZUFzeW5jKCkgZmluYWw7CisgICAgICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94
eT4gY3JlYXRlTmV3UGFnZUNvbW1vbihXZWJLaXQ6OldlYlBhZ2VQcm94eSosIEFQSTo6RnJhbWVJ
bmZvJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0Zl
YXR1cmVzJiwgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwog
CiAgICAgICAgIHZvaWQgY2xvc2UoV2ViS2l0OjpXZWJQYWdlUHJveHkqKSBvdmVycmlkZTsKICAg
ICAgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV2ViS2l0OjpXZWJQYWdlUHJv
eHkqKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVs
ZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlE
ZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjE5ODQxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvVUlEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCw3IEBAIFVJ
RGVsZWdhdGU6OlVJQ2xpZW50Ojp+VUlDbGllbnQoKQogewogfQogCi1SZWZQdHI8V2ViS2l0OjpX
ZWJQYWdlUHJveHk+IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdlQ29tbW9uKFdl
YktpdDo6V2ViUGFnZVByb3h5KiBwYWdlLCBBUEk6OkZyYW1lSW5mbyYgc291cmNlRnJhbWVJbmZv
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6
OldpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9u
QWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIFdURjo6RnVuY3Rpb248dm9pZCAoUmVm
UHRyPFdlYktpdDo6V2ViUGFnZVByb3h5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCitSZWZQdHI8
V2ViS2l0OjpXZWJQYWdlUHJveHk+IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdl
Q29tbW9uKFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlLCBBUEk6OkZyYW1lSW5mbyYgc291cmNl
RnJhbWVJbmZvLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBXZWJD
b3JlOjpXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIFdlYktpdDo6TmF2aWdhdGlvbkFj
dGlvbkRhdGEmJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgV1RGOjpGdW5jdGlvbjx2b2lkKFJlZlB0
cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1
dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBBU1NFUlQo
ZGVsZWdhdGUpOwpAQCAtMTg0LDcgKzE4NCw3IEBAIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94
eT4gVUlEZWxlZ2F0ZToKIAogICAgIGF1dG8gdXNlckluaXRpYXRlZEFjdGl2aXR5ID0gcGFnZS0+
cHJvY2VzcygpLnVzZXJJbml0aWF0ZWRBY3Rpdml0eShuYXZpZ2F0aW9uQWN0aW9uRGF0YS51c2Vy
R2VzdHVyZVRva2VuSWRlbnRpZmllcik7CiAgICAgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MgPSAh
aG9zdHNBcmVFcXVhbChzb3VyY2VGcmFtZUluZm8ucmVxdWVzdCgpLnVybCgpLCByZXF1ZXN0LnVy
bCgpKTsKLSAgICBhdXRvIGFwaU5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rp
b246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgJnNvdXJjZUZyYW1lSW5mbywgbnVsbHB0
ciwgcmVxdWVzdCwgV2ViQ29yZTo6VVJMKCksIHNob3VsZE9wZW5BcHBMaW5rcywgdXNlckluaXRp
YXRlZEFjdGl2aXR5KTsKKyAgICBhdXRvIGFwaU5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmln
YXRpb25BY3Rpb246OmNyZWF0ZShXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgJnNvdXJj
ZUZyYW1lSW5mbywgbnVsbHB0ciwgV1RGTW92ZShyZXF1ZXN0KSwgV2ViQ29yZTo6VVJMKCksIHNo
b3VsZE9wZW5BcHBMaW5rcywgdXNlckluaXRpYXRlZEFjdGl2aXR5KTsKIAogICAgIGF1dG8gYXBp
V2luZG93RmVhdHVyZXMgPSBBUEk6OldpbmRvd0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVy
ZXMpOwogCkBAIC0yMjEsNyArMjIxLDcgQEAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBV
SURlbGVnYXRlOgogICAgIHJldHVybiB3ZWJWaWV3LT5fcGFnZS5nZXQoKTsKIH0KIAotUmVmUHRy
PFdlYktpdDo6V2ViUGFnZVByb3h5PiBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y3JlYXRlTmV3UGFn
ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSwgQVBJOjpGcmFtZUluZm8mIG9yaWdpbmF0aW5n
RnJhbWVJbmZvLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgY29uc3QgV2ViS2l0OjpO
YXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEpCitSZWZQdHI8V2ViUGFn
ZVByb3h5PiBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y3JlYXRlTmV3UGFnZShXZWJQYWdlUHJveHkq
IHBhZ2UsIEFQSTo6RnJhbWVJbmZvJiBvcmlnaW5hdGluZ0ZyYW1lSW5mbywgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmIHdp
bmRvd0ZlYXR1cmVzLCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmIG5hdmlnYXRpb25BY3Rpb25EYXRh
KQogewogICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDcmVh
dGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb25Gb3JOYXZpZ2F0aW9uQWN0aW9uV2luZG93RmVhdHVy
ZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjMwLDIxICsyMzAsMjQgQEAgUmVmUHRy
PFdlYktpdDo6V2ViUGFnZVByb3h5PiBVSURlbGVnYXRlOgogICAgIGlmICghZGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNyZWF0ZU5ld1BhZ2VDb21tb24o
cGFnZSwgb3JpZ2luYXRpbmdGcmFtZUluZm8sIHJlcXVlc3QsIHdpbmRvd0ZlYXR1cmVzLCBuYXZp
Z2F0aW9uQWN0aW9uRGF0YSwgbnVsbHB0cik7CisgICAgcmV0dXJuIGNyZWF0ZU5ld1BhZ2VDb21t
b24ocGFnZSwgb3JpZ2luYXRpbmdGcmFtZUluZm8sIFdURk1vdmUocmVxdWVzdCksIHdpbmRvd0Zl
YXR1cmVzLCBXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgbnVsbHB0cik7CiB9CiAKLWJv
b2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2VBc3luYyhXZWJLaXQ6OldlYlBh
Z2VQcm94eSogcGFnZSwgQVBJOjpGcmFtZUluZm8mIG9yaWdpbmF0aW5nRnJhbWVJbmZvLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OldpbmRv
d0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9u
RGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIFdURjo6RnVuY3Rpb248dm9pZCAoUmVmUHRyPFdl
YktpdDo6V2ViUGFnZVByb3h5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCitib29sIFVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpjYW5DcmVhdGVOZXdQYWdlQXN5bmMoKQogewotICAgIGlmICghbV91aURl
bGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3Vy
YXRpb25Gb3JOYXZpZ2F0aW9uQWN0aW9uV2luZG93RmVhdHVyZXNBc3luYykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0NyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rpb25XaW5k
b3dGZWF0dXJlc0FzeW5jCisgICAgICAgICYmIG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgp
OworfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgp
OwotICAgIGlmICghZGVsZWdhdGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKK3ZvaWQgVUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2VBc3luYyhXZWJQYWdlUHJveHkqIHBhZ2UsIEFQ
STo6RnJhbWVJbmZvJiBvcmlnaW5hdGluZ0ZyYW1lSW5mbywgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1
cmVzLCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoUmVmUHRyPFdlYlBhZ2VQcm94eT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIEFTU0VSVChjYW5DcmVhdGVOZXdQYWdlQXN5bmMoKSk7CisgICAgQVNTRVJUKG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q3JlYXRlV2ViVmlld1dpdGhDb25maWd1
cmF0aW9uRm9yTmF2aWdhdGlvbkFjdGlvbldpbmRvd0ZlYXR1cmVzQXN5bmMpOwogCi0gICAgY3Jl
YXRlTmV3UGFnZUNvbW1vbihwYWdlLCBvcmlnaW5hdGluZ0ZyYW1lSW5mbywgcmVxdWVzdCwgd2lu
ZG93RmVhdHVyZXMsIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgp
OworICAgIEFTU0VSVChkZWxlZ2F0ZSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBjcmVhdGVO
ZXdQYWdlQ29tbW9uKHBhZ2UsIG9yaWdpbmF0aW5nRnJhbWVJbmZvLCBXVEZNb3ZlKHJlcXVlc3Qp
LCB3aW5kb3dGZWF0dXJlcywgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVu
SmF2YVNjcmlwdEFsZXJ0KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcm
IG1lc3NhZ2UsIFdlYktpdDo6V2ViRnJhbWVQcm94eSogd2ViRnJhbWVQcm94eSwgY29uc3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbkRhdGEsIEZ1bmN0aW9uPHZv
aWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316363</attachid>
            <date>2017-07-25 04:48:20 -0700</date>
            <delta_ts>2017-07-25 09:45:58 -0700</delta_ts>
            <desc>Patch to fix glib API build</desc>
            <filename>wk-navigation-glib.diff</filename>
            <type>text/plain</type>
            <size>1573</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50
LmNwcAppbmRleCA2YzMwMjhhNDJlZC4uMjcwNjYwYmZiNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8V2ViUGFnZVByb3h5
PiBjcmVhdGVOZXdQYWdlKFdlYlBhZ2VQcm94eSosIEFQSTo6RnJhbWVJbmZvJiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6Oldp
bmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgY29uc3QgTmF2aWdhdGlvbkFjdGlvbkRhdGEm
IG5hdmlnYXRpb25BY3Rpb25EYXRhKSBvdmVycmlkZQorICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+
IGNyZWF0ZU5ld1BhZ2UoV2ViUGFnZVByb3h5KiwgQVBJOjpGcmFtZUluZm8mLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0Zl
YXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgTmF2aWdhdGlvbkFjdGlvbkRhdGEmJiBuYXZpZ2F0aW9u
QWN0aW9uRGF0YSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVx
dWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRVUklSZXF1ZXN0Q3JlYXRlRm9yUmVzb3Vy
Y2VSZXF1ZXN0KHJlc291cmNlUmVxdWVzdCkpOwogICAgICAgICBXZWJLaXROYXZpZ2F0aW9uQWN0
aW9uIG5hdmlnYXRpb25BY3Rpb24ocmVxdWVzdC5nZXQoKSwgbmF2aWdhdGlvbkFjdGlvbkRhdGEp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3
LmNwcAppbmRleCBkNjU3MTQxYmNjOS4uZjJmOGI2ODkzYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yNTA0LDcgKzI1
MDQsNyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19sb2FkX3JlcXVlc3QoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0VVJJUmVxdWVzdCogcmVxdQogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
c291cmNlUmVxdWVzdDsKICAgICB3ZWJraXRVUklSZXF1ZXN0R2V0UmVzb3VyY2VSZXF1ZXN0KHJl
cXVlc3QsIHJlc291cmNlUmVxdWVzdCk7Ci0gICAgZ2V0UGFnZSh3ZWJWaWV3KS5sb2FkUmVxdWVz
dChyZXNvdXJjZVJlcXVlc3QpOworICAgIGdldFBhZ2Uod2ViVmlldykubG9hZFJlcXVlc3QoV1RG
TW92ZShyZXNvdXJjZVJlcXVlc3QpKTsKIH0KIAogLyoqCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316367</attachid>
            <date>2017-07-25 09:45:59 -0700</date>
            <delta_ts>2017-07-25 09:46:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174807-20170725094558.patch</filename>
            <type>text/plain</type>
            <size>51534</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTk4NjMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE3LTA3LTI1ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIE5h
dmlnYXRpb25BY3Rpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgTW9zdGx5IGp1c3QgdXNlIG1vcmUgbW92ZSBzZW1hbnRpY3MuCisKKyAgICAgICAg
KiBQbGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5oOgorICAgICAgICAoSVBDOjpjYWxsTWVtYmVy
RnVuY3Rpb25JbXBsKToKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSVVSTFJlcXVlc3QuaDoKKyAg
ICAgICAgKiBTaGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpOYXZpZ2F0aW9uOjpOYXZp
Z2F0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uaDoKKyAgICAg
ICAgKEFQSTo6TmF2aWdhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQ
SU5hdmlnYXRpb25BY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRp
b25DbGllbnQuaDoKKyAgICAgICAgKEFQSTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQb2xpY3lD
bGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50Lmg6CisgICAgICAg
IChBUEk6OlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OmNyZWF0ZU5ld1BhZ2VBc3luYyk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpjYW5DcmVhdGVO
ZXdQYWdlQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAg
ICAgICAoV0tQYWdlTG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV0tQYWdlTG9hZFVSTFJlcXVl
c3RXaXRoVXNlckRhdGEpOgorICAgICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKyAgICAg
ICAgKFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvTmF2aWdhdGlvblN0YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmln
YXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9V
SURlbGVnYXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Y3Jl
YXRlTmV3UGFnZUNvbW1vbik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmNhbkNyZWF0ZU5ld1BhZ2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpjcmVhdGVOZXdQYWdlQXN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJbnNw
ZWN0b3JQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uU3RhdGUuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGU6OmNyZWF0ZUxvYWRSZXF1ZXN0TmF2
aWdhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0ZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKwogMjAxNy0wNy0yNCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJv
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQVNTRVJUSU9OIEZBSUxFRDogY2xpZW50IGlu
IFdlYktpdDo6SWNvbkRhdGFiYXNlOjpzZXRDbGllbnQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdlLmgJKHJldmlzaW9uIDIxOTg2MykKKysrIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsNyBAQCB2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihBcmdzVHVwbGUmJiBhcmdzCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUYsIHR5cGVuYW1lIFIsIHR5cGVuYW1lIEFyZ3NU
dXBsZSwgc2l6ZV90Li4uIEFyZ3NJbmRleD4KIHZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uSW1wbChD
KiBvYmplY3QsIE1GIGZ1bmN0aW9uLCBSZWY8Uj4mJiBkZWxheWVkUmVwbHksIEFyZ3NUdXBsZSYm
IGFyZ3MsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8QXJnc0luZGV4Li4uPikKIHsKLSAgICAob2JqZWN0
LT4qZnVuY3Rpb24pKHN0ZDo6Z2V0PEFyZ3NJbmRleD4oYXJncykuLi4sIFdURk1vdmUoZGVsYXll
ZFJlcGx5KSk7CisgICAgKG9iamVjdC0+KmZ1bmN0aW9uKShzdGQ6OmdldDxBcmdzSW5kZXg+KHN0
ZDo6Zm9yd2FyZDxBcmdzVHVwbGU+KGFyZ3MpKS4uLiwgV1RGTW92ZShkZWxheWVkUmVwbHkpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUYsIHR5cGVuYW1lIFIsIHR5cGVu
YW1lIEFyZ3NUdXBsZSwgdHlwZW5hbWUgQXJnc0luZGljaWVzID0gc3RkOjptYWtlX2luZGV4X3Nl
cXVlbmNlPHN0ZDo6dHVwbGVfc2l6ZTxBcmdzVHVwbGU+Ojp2YWx1ZT4+CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmgJKHJldmlzaW9uIDIxOTg2MykK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIE5hdmlnYXRpb25BY3Rpb25EYXRhX2gKLSNkZWZpbmUgTmF2aWdh
dGlvbkFjdGlvbkRhdGFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXZWJFdmVudC5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgpAQCAtNTMsNSArNTIsMyBAQCBzdHJ1Y3Qg
TmF2aWdhdGlvbkFjdGlvbkRhdGEgewogfTsKIAogfQotCi0jZW5kaWYgLy8gTmF2aWdhdGlvbkFj
dGlvbkRhdGFfaApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSVVSTFJlcXVlc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJVVJMUmVxdWVzdC5o
CShyZXZpc2lvbiAyMTk4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJVVJMUmVx
dWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBBUElVUkxSZXF1ZXN0X2gKLSNkZWZp
bmUgQVBJVVJMUmVxdWVzdF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CkBAIC01OSw1ICs1OCwzIEBA
IHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEFQSVVSTFJl
cXVlc3RfaApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclBy
b3h5LmNwcAkocmV2aXNpb24gMjE5ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
SW5zcGVjdG9yUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNyArMzU4LDcgQEAgc3Rh
dGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdAogICAgIHRvSW1wbChsaXN0ZW5l
clJlZiktPmlnbm9yZSgpOwogCiAgICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5z
cGVjdGVkIHBhZ2UuCi0gICAgd2ViSW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFBhZ2UoKS0+bG9h
ZFJlcXVlc3QocmVxdWVzdCk7CisgICAgd2ViSW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFBhZ2Uo
KS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldENv
bnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tBcnJheVJlZiBw
cm9wb3NlZE1lbnVSZWYsIFdLQXJyYXlSZWYqIG5ld01lbnVSZWYsIFdLSGl0VGVzdFJlc3VsdFJl
ZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYk5hdmlnYXRpb25TdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViTmF2aWdhdGlvblN0YXRlLmNwcAkocmV2aXNpb24gMjE5ODYzKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViTmF2aWdhdGlvblN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsOSArNDAsOSBAQCBXZWJOYXZpZ2F0aW9uU3RhdGU6On5XZWJOYXZpZ2F0aW9uU3RhdGUo
CiB7CiB9CiAKLVJlZjxBUEk6Ok5hdmlnYXRpb24+IFdlYk5hdmlnYXRpb25TdGF0ZTo6Y3JlYXRl
TG9hZFJlcXVlc3ROYXZpZ2F0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK1JlZjxBUEk6Ok5hdmlnYXRpb24+IFdlYk5hdmlnYXRpb25TdGF0ZTo6Y3JlYXRlTG9h
ZFJlcXVlc3ROYXZpZ2F0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCiB7
Ci0gICAgYXV0byBuYXZpZ2F0aW9uID0gQVBJOjpOYXZpZ2F0aW9uOjpjcmVhdGUoKnRoaXMsIHJl
cXVlc3QpOworICAgIGF1dG8gbmF2aWdhdGlvbiA9IEFQSTo6TmF2aWdhdGlvbjo6Y3JlYXRlKCp0
aGlzLCBXVEZNb3ZlKHJlcXVlc3QpKTsKIAogICAgIG1fbmF2aWdhdGlvbnMuc2V0KG5hdmlnYXRp
b24tPm5hdmlnYXRpb25JRCgpLCBuYXZpZ2F0aW9uLnB0cigpKTsKIApJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViTmF2aWdhdGlvblN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViTmF2aWdhdGlvblN0YXRlLmgJKHJldmlzaW9uIDIxOTg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBXZWJOYXZpZ2F0aW9uU3RhdGVfaAotI2RlZmluZSBXZWJOYXZp
Z2F0aW9uU3RhdGVfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KQEAgLTQ4LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIH5XZWJO
YXZpZ2F0aW9uU3RhdGUoKTsKIAogICAgIFJlZjxBUEk6Ok5hdmlnYXRpb24+IGNyZWF0ZUJhY2tG
b3J3YXJkTmF2aWdhdGlvbigpOwotICAgIFJlZjxBUEk6Ok5hdmlnYXRpb24+IGNyZWF0ZUxvYWRS
ZXF1ZXN0TmF2aWdhdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBS
ZWY8QVBJOjpOYXZpZ2F0aW9uPiBjcmVhdGVMb2FkUmVxdWVzdE5hdmlnYXRpb24oV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYpOwogICAgIFJlZjxBUEk6Ok5hdmlnYXRpb24+IGNyZWF0ZVJlbG9h
ZE5hdmlnYXRpb24oKTsKICAgICBSZWY8QVBJOjpOYXZpZ2F0aW9uPiBjcmVhdGVMb2FkRGF0YU5h
dmlnYXRpb24oKTsKIApAQCAtNjgsNSArNjcsMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJOYXZpZ2F0aW9uU3RhdGVfaApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyMTk4NjMpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MTksMjYgKzgxOSwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YWRkUGxhdGZvcm1Mb2Fk
UGFyYW1lCiB9CiAjZW5kaWYKIAotUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5
Ojpsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSwgQVBJOjpPYmpl
Y3QqIHVzZXJEYXRhKQorUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2Fk
UmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3ksIEFQSTo6T2JqZWN0KiB1c2VyRGF0
YSkKIHsKICAgICBpZiAobV9pc0Nsb3NlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBhdXRvIG5hdmlnYXRpb24gPSBtX25hdmlnYXRpb25TdGF0ZS0+Y3JlYXRlTG9hZFJlcXVlc3RO
YXZpZ2F0aW9uKHJlcXVlc3QpOworICAgIGF1dG8gbmF2aWdhdGlvbiA9IG1fbmF2aWdhdGlvblN0
YXRlLT5jcmVhdGVMb2FkUmVxdWVzdE5hdmlnYXRpb24oUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3Qp
KTsKIAogICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3RhdGUudHJhbnNhY3Rpb24o
KTsKIAotICAgIG1fcGFnZUxvYWRTdGF0ZS5zZXRQZW5kaW5nQVBJUmVxdWVzdFVSTCh0cmFuc2Fj
dGlvbiwgcmVxdWVzdC51cmwoKSk7CisgICAgYXV0byB1cmwgPSByZXF1ZXN0LnVybCgpOworICAg
IG1fcGFnZUxvYWRTdGF0ZS5zZXRQZW5kaW5nQVBJUmVxdWVzdFVSTCh0cmFuc2FjdGlvbiwgdXJs
KTsKIAogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZWF0dGFjaFRvV2ViUHJvY2Vzcygp
OwogCiAgICAgTG9hZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnM7CiAgICAgbG9hZFBhcmFtZXRl
cnMubmF2aWdhdGlvbklEID0gbmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCk7Ci0gICAgbG9hZFBh
cmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9
IFdURk1vdmUocmVxdWVzdCk7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeSA9ICh1aW50NjRfdClzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OwogICAg
IGxvYWRQYXJhbWV0ZXJzLnVzZXJEYXRhID0gVXNlckRhdGEocHJvY2VzcygpLnRyYW5zZm9ybU9i
amVjdHNUb0hhbmRsZXModXNlckRhdGEpLmdldCgpKTsKLSAgICBib29sIGNyZWF0ZWRFeHRlbnNp
b24gPSBtYXliZUluaXRpYWxpemVTYW5kYm94RXh0ZW5zaW9uSGFuZGxlKHJlcXVlc3QudXJsKCks
IGxvYWRQYXJhbWV0ZXJzLnNhbmRib3hFeHRlbnNpb25IYW5kbGUpOworICAgIGJvb2wgY3JlYXRl
ZEV4dGVuc2lvbiA9IG1heWJlSW5pdGlhbGl6ZVNhbmRib3hFeHRlbnNpb25IYW5kbGUodXJsLCBs
b2FkUGFyYW1ldGVycy5zYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBpZiAoY3JlYXRlZEV4
dGVuc2lvbikKICAgICAgICAgbV9wcm9jZXNzLT53aWxsQWNxdWlyZVVuaXZlcnNhbEZpbGVSZWFk
U2FuZGJveEV4dGVuc2lvbigpOwogICAgIGFkZFBsYXRmb3JtTG9hZFBhcmFtZXRlcnMobG9hZFBh
cmFtZXRlcnMpOwpAQCAtMzYxNyw3ICszNjE4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZyYW1l
RGlkQmVjb21lRnJhbWVTZQogICAgICAgICBtX2ZyYW1lU2V0TGFyZ2VzdEZyYW1lID0gdmFsdWUg
PyBtX21haW5GcmFtZSA6IDA7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2lu
RGF0YSYgZnJhbWVTZWN1cml0eU9yaWdpbiwgdWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBO
YXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIGNvbnN0IEZyYW1lSW5m
b0RhdGEmIG9yaWdpbmF0aW5nRnJhbWVJbmZvRGF0YSwgdWludDY0X3Qgb3JpZ2luYXRpbmdQYWdl
SUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIHVpbnQ2NF90IGxpc3RlbmVySUQsIGNvbnN0IFVz
ZXJEYXRhJiB1c2VyRGF0YSwgUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb246OkRlbGF5ZWRSZXBseT4mJiByZXBseSkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQs
IGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9yaWdpbiwgdWludDY0X3Qg
bmF2aWdhdGlvbklELCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmIG5hdmlnYXRpb25BY3Rpb25EYXRh
LCBjb25zdCBGcmFtZUluZm9EYXRhJiBvcmlnaW5hdGluZ0ZyYW1lSW5mb0RhdGEsIHVpbnQ2NF90
IG9yaWdpbmF0aW5nUGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdp
bmFsUmVxdWVzdCwgUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgdWludDY0X3QgbGlzdGVuZXJJ
RCwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhLCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQog
ewogICAgIFBhZ2VDbGllbnRQcm90ZWN0b3IgcHJvdGVjdG9yKG1fcGFnZUNsaWVudCk7CiAKQEAg
LTM2MzUsNyArMzYzNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZp
Z2EKICAgICBtX25ld05hdmlnYXRpb25JRCA9IDA7CiAgICAgUmVmPFdlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eT4gbGlzdGVuZXIgPSBmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KGxp
c3RlbmVySUQpOwogICAgIGlmICghbmF2aWdhdGlvbklEICYmIGZyYW1lLT5pc01haW5GcmFtZSgp
KSB7Ci0gICAgICAgIGF1dG8gbmF2aWdhdGlvbiA9IG1fbmF2aWdhdGlvblN0YXRlLT5jcmVhdGVM
b2FkUmVxdWVzdE5hdmlnYXRpb24ocmVxdWVzdCk7CisgICAgICAgIGF1dG8gbmF2aWdhdGlvbiA9
IG1fbmF2aWdhdGlvblN0YXRlLT5jcmVhdGVMb2FkUmVxdWVzdE5hdmlnYXRpb24oUmVzb3VyY2VS
ZXF1ZXN0KHJlcXVlc3QpKTsKICAgICAgICAgbV9uZXdOYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9u
LT5uYXZpZ2F0aW9uSUQoKTsKICAgICAgICAgbGlzdGVuZXItPnNldE5hdmlnYXRpb24oV1RGTW92
ZShuYXZpZ2F0aW9uKSk7CiAgICAgfQpAQCAtMzY1NiwyNiArMzY1NywyNiBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhCiAgICAgV2ViRnJhbWVQcm94eSogb3JpZ2lu
YXRpbmdGcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUob3JpZ2luYXRpbmdGcmFtZUluZm9EYXRh
LmZyYW1lSUQpOwogCiAgICAgaWYgKG1fbmF2aWdhdGlvbkNsaWVudCkgewotICAgICAgICBSZWZQ
dHI8QVBJOjpGcmFtZUluZm8+IGRlc3RpbmF0aW9uRnJhbWVJbmZvID0gQVBJOjpGcmFtZUluZm86
OmNyZWF0ZSgqZnJhbWUsIGZyYW1lU2VjdXJpdHlPcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSk7Cisg
ICAgICAgIGF1dG8gZGVzdGluYXRpb25GcmFtZUluZm8gPSBBUEk6OkZyYW1lSW5mbzo6Y3JlYXRl
KCpmcmFtZSwgZnJhbWVTZWN1cml0eU9yaWdpbi5zZWN1cml0eU9yaWdpbigpKTsKICAgICAgICAg
UmVmUHRyPEFQSTo6RnJhbWVJbmZvPiBzb3VyY2VGcmFtZUluZm87CiAgICAgICAgIGlmICghZnJv
bUFQSSAmJiBvcmlnaW5hdGluZ0ZyYW1lID09IGZyYW1lKQotICAgICAgICAgICAgc291cmNlRnJh
bWVJbmZvID0gZGVzdGluYXRpb25GcmFtZUluZm87CisgICAgICAgICAgICBzb3VyY2VGcmFtZUlu
Zm8gPSBkZXN0aW5hdGlvbkZyYW1lSW5mby5jb3B5UmVmKCk7CiAgICAgICAgIGVsc2UgaWYgKCFm
cm9tQVBJKQogICAgICAgICAgICAgc291cmNlRnJhbWVJbmZvID0gQVBJOjpGcmFtZUluZm86OmNy
ZWF0ZShvcmlnaW5hdGluZ0ZyYW1lSW5mb0RhdGEsIG9yaWdpbmF0aW5nUGFnZUlEID8gbV9wcm9j
ZXNzLT53ZWJQYWdlKG9yaWdpbmF0aW5nUGFnZUlEKSA6IG51bGxwdHIpOwogCiAgICAgICAgIGF1
dG8gdXNlckluaXRpYXRlZEFjdGl2aXR5ID0gbV9wcm9jZXNzLT51c2VySW5pdGlhdGVkQWN0aXZp
dHkobmF2aWdhdGlvbkFjdGlvbkRhdGEudXNlckdlc3R1cmVUb2tlbklkZW50aWZpZXIpOwotICAg
ICAgICBib29sIHNob3VsZE9wZW5BcHBMaW5rcyA9ICFtX3Nob3VsZFN1cHByZXNzQXBwTGlua3NJ
bk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gJiYgKCFkZXN0aW5hdGlvbkZyYW1lSW5mbyB8
fCBkZXN0aW5hdGlvbkZyYW1lSW5mby0+aXNNYWluRnJhbWUoKSkgJiYgIWhvc3RzQXJlRXF1YWwo
VVJMKFBhcnNlZFVSTFN0cmluZywgbV9tYWluRnJhbWUtPnVybCgpKSwgcmVxdWVzdC51cmwoKSkg
JiYgbmF2aWdhdGlvbkFjdGlvbkRhdGEubmF2aWdhdGlvblR5cGUgIT0gV2ViQ29yZTo6TmF2aWdh
dGlvblR5cGU6OkJhY2tGb3J3YXJkOworICAgICAgICBib29sIHNob3VsZE9wZW5BcHBMaW5rcyA9
ICFtX3Nob3VsZFN1cHByZXNzQXBwTGlua3NJbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24g
JiYgZGVzdGluYXRpb25GcmFtZUluZm8tPmlzTWFpbkZyYW1lKCkgJiYgIWhvc3RzQXJlRXF1YWwo
VVJMKFBhcnNlZFVSTFN0cmluZywgbV9tYWluRnJhbWUtPnVybCgpKSwgcmVxdWVzdC51cmwoKSkg
JiYgbmF2aWdhdGlvbkFjdGlvbkRhdGEubmF2aWdhdGlvblR5cGUgIT0gV2ViQ29yZTo6TmF2aWdh
dGlvblR5cGU6OkJhY2tGb3J3YXJkOwogCi0gICAgICAgIGF1dG8gbmF2aWdhdGlvbkFjdGlvbiA9
IEFQSTo6TmF2aWdhdGlvbkFjdGlvbjo6Y3JlYXRlKG5hdmlnYXRpb25BY3Rpb25EYXRhLCBzb3Vy
Y2VGcmFtZUluZm8uZ2V0KCksIGRlc3RpbmF0aW9uRnJhbWVJbmZvLmdldCgpLCByZXF1ZXN0LCBv
cmlnaW5hbFJlcXVlc3QudXJsKCksIHNob3VsZE9wZW5BcHBMaW5rcywgV1RGTW92ZSh1c2VySW5p
dGlhdGVkQWN0aXZpdHkpKTsKKyAgICAgICAgYXV0byBuYXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpO
YXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUoV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSksIHNv
dXJjZUZyYW1lSW5mby5nZXQoKSwgZGVzdGluYXRpb25GcmFtZUluZm8ucHRyKCksIFdURk1vdmUo
cmVxdWVzdCksIG9yaWdpbmFsUmVxdWVzdC51cmwoKSwgc2hvdWxkT3BlbkFwcExpbmtzLCBXVEZN
b3ZlKHVzZXJJbml0aWF0ZWRBY3Rpdml0eSkpOwogCi0gICAgICAgIG1fbmF2aWdhdGlvbkNsaWVu
dC0+ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbigqdGhpcywgbmF2aWdhdGlvbkFjdGlv
bi5nZXQoKSwgV1RGTW92ZShsaXN0ZW5lciksIG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1Rv
T2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOworICAgICAgICBtX25hdmlnYXRpb25D
bGllbnQtPmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oKnRoaXMsIFdURk1vdmUobmF2
aWdhdGlvbkFjdGlvbiksIFdURk1vdmUobGlzdGVuZXIpLCBtX3Byb2Nlc3MtPnRyYW5zZm9ybUhh
bmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgbV9wb2xpY3lDbGllbnQtPmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oKnRo
aXMsIGZyYW1lLCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgb3JpZ2luYXRpbmdGcmFtZSwgb3JpZ2lu
YWxSZXF1ZXN0LCByZXF1ZXN0LCBXVEZNb3ZlKGxpc3RlbmVyKSwgbV9wcm9jZXNzLT50cmFuc2Zv
cm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CisgICAgICAgIG1f
cG9saWN5Q2xpZW50LT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCp0aGlzLCBmcmFt
ZSwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSksIG9yaWdpbmF0aW5nRnJhbWUsIG9yaWdp
bmFsUmVxdWVzdCwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92ZShsaXN0ZW5lciksIG1fcHJvY2Vz
cy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwog
CiAgICAgbV9zaG91bGRTdXBwcmVzc0FwcExpbmtzSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uID0gZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdX
aW5kb3dBY3Rpb24odWludDY0X3QgZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBm
cmFtZVNlY3VyaXR5T3JpZ2luLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlv
bkFjdGlvbkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5n
JiBmcmFtZU5hbWUsIHVpbnQ2NF90IGxpc3RlbmVySUQsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0
YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBmcmFtZVNlY3VyaXR5T3Jp
Z2luLCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBSZXNvdXJj
ZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgdWludDY0X3QgbGlz
dGVuZXJJRCwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQogewogICAgIFBhZ2VDbGllbnRQcm90
ZWN0b3IgcHJvdGVjdG9yKG1fcGFnZUNsaWVudCk7CiAKQEAgLTM2OTIsNyArMzY5Myw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW4KIAogICAgICAgICBhdXRvIHVz
ZXJJbml0aWF0ZWRBY3Rpdml0eSA9IG1fcHJvY2Vzcy0+dXNlckluaXRpYXRlZEFjdGl2aXR5KG5h
dmlnYXRpb25BY3Rpb25EYXRhLnVzZXJHZXN0dXJlVG9rZW5JZGVudGlmaWVyKTsKICAgICAgICAg
Ym9vbCBzaG91bGRPcGVuQXBwTGlua3MgPSAhaG9zdHNBcmVFcXVhbChVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBtX21haW5GcmFtZS0+dXJsKCkpLCByZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgYXV0byBu
YXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUobmF2aWdhdGlv
bkFjdGlvbkRhdGEsIHNvdXJjZUZyYW1lSW5mby5nZXQoKSwgbnVsbHB0ciwgcmVxdWVzdCwgcmVx
dWVzdC51cmwoKSwgc2hvdWxkT3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVzZXJJbml0aWF0ZWRBY3Rp
dml0eSkpOworICAgICAgICBhdXRvIG5hdmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25B
Y3Rpb246OmNyZWF0ZShXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgc291cmNlRnJhbWVJ
bmZvLmdldCgpLCBudWxscHRyLCBXVEZNb3ZlKHJlcXVlc3QpLCByZXF1ZXN0LnVybCgpLCBzaG91
bGRPcGVuQXBwTGlua3MsIFdURk1vdmUodXNlckluaXRpYXRlZEFjdGl2aXR5KSk7CiAKICAgICAg
ICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCp0
aGlzLCBuYXZpZ2F0aW9uQWN0aW9uLmdldCgpLCBXVEZNb3ZlKGxpc3RlbmVyKSwgbV9wcm9jZXNz
LT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiAK
QEAgLTM4MzIsNyArMzgzMyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRVcGRhdGVIaXN0b3J5
VGl0bGUKIAogLy8gVUlDbGllbnQKIAotdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZU5ld1BhZ2Uo
Y29uc3QgRnJhbWVJbmZvRGF0YSYgb3JpZ2luYXRpbmdGcmFtZUluZm9EYXRhLCB1aW50NjRfdCBv
cmlnaW5hdGluZ1BhZ2VJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBX
aW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb25EYXRh
JiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgUmVmUHRyPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNy
ZWF0ZU5ld1BhZ2U6OkRlbGF5ZWRSZXBseT4gcmVwbHkpCit2b2lkIFdlYlBhZ2VQcm94eTo6Y3Jl
YXRlTmV3UGFnZShjb25zdCBGcmFtZUluZm9EYXRhJiBvcmlnaW5hdGluZ0ZyYW1lSW5mb0RhdGEs
IHVpbnQ2NF90IG9yaWdpbmF0aW5nUGFnZUlELCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBj
b25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIE5hdmlnYXRpb25BY3Rpb25EYXRh
JiYgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVh
dGVOZXdQYWdlOjpEZWxheWVkUmVwbHk+JiYgcmVwbHkpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyht
X3Byb2Nlc3MtPndlYkZyYW1lKG9yaWdpbmF0aW5nRnJhbWVJbmZvRGF0YS5mcmFtZUlEKSk7CiAg
ICAgYXV0byBvcmlnaW5hdGluZ0ZyYW1lSW5mbyA9IEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUob3Jp
Z2luYXRpbmdGcmFtZUluZm9EYXRhLCBtX3Byb2Nlc3MtPndlYlBhZ2Uob3JpZ2luYXRpbmdQYWdl
SUQpKTsKQEAgLTM4NTIsMTAgKzM4NTMsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNyZWF0ZU5l
d1BhZ2UoY29uc3QgRgogCiAgICAgfTsKIAotICAgIGlmIChtX3VpQ2xpZW50LT5jcmVhdGVOZXdQ
YWdlQXN5bmModGhpcywgb3JpZ2luYXRpbmdGcmFtZUluZm8sIHJlcXVlc3QsIHdpbmRvd0ZlYXR1
cmVzLCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgW2NvbXBsZXRpb25IYW5kbGVyXShSZWZQdHI8V2Vi
UGFnZVByb3h5PiBuZXdQYWdlKSB7IGNvbXBsZXRpb25IYW5kbGVyKG5ld1BhZ2UpOyB9KSkKLSAg
ICAgICAgcmV0dXJuOworICAgIGlmIChtX3VpQ2xpZW50LT5jYW5DcmVhdGVOZXdQYWdlQXN5bmMo
KSkgeworICAgICAgICBtX3VpQ2xpZW50LT5jcmVhdGVOZXdQYWdlQXN5bmModGhpcywgb3JpZ2lu
YXRpbmdGcmFtZUluZm8sIFdURk1vdmUocmVxdWVzdCksIHdpbmRvd0ZlYXR1cmVzLCBXVEZNb3Zl
KG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKFJlZlB0cjxXZWJQYWdlUHJveHk+IG5ld1BhZ2UpIHsKKyAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld1BhZ2UpOworICAgICAgICB9KTsKKyAgICB9CiAKLSAg
ICBSZWZQdHI8V2ViUGFnZVByb3h5PiBuZXdQYWdlID0gbV91aUNsaWVudC0+Y3JlYXRlTmV3UGFn
ZSh0aGlzLCBvcmlnaW5hdGluZ0ZyYW1lSW5mbywgcmVxdWVzdCwgd2luZG93RmVhdHVyZXMsIG5h
dmlnYXRpb25BY3Rpb25EYXRhKTsKKyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBuZXdQYWdlID0g
bV91aUNsaWVudC0+Y3JlYXRlTmV3UGFnZSh0aGlzLCBvcmlnaW5hdGluZ0ZyYW1lSW5mbywgV1RG
TW92ZShyZXF1ZXN0KSwgd2luZG93RmVhdHVyZXMsIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbkRh
dGEpKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG5ld1BhZ2UpKTsKIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMTk4
NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMzkxLDcgKzM5MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsb3NlUGFnZShib29s
IHN0b3BSZXNwb25zaXZlbmVzc1RpbWVyKTsKIAogICAgIHZvaWQgYWRkUGxhdGZvcm1Mb2FkUGFy
YW1ldGVycyhMb2FkUGFyYW1ldGVycyYpOwotICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IGxv
YWRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5OjpTaG91bGRBbGxvd0V4dGVybmFsU2NoZW1lcywgQVBJOjpPYmplY3QqIHVzZXJEYXRh
ID0gbnVsbHB0cik7CisgICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gbG9hZFJlcXVlc3QoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQ
b2xpY3kgPSBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxv
d0V4dGVybmFsU2NoZW1lcywgQVBJOjpPYmplY3QqIHVzZXJEYXRhID0gbnVsbHB0cik7CiAgICAg
UmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gbG9hZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlVVJMLCBj
b25zdCBTdHJpbmcmIHJlc291cmNlRGlyZWN0b3J5VVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEg
PSBudWxscHRyKTsKICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBsb2FkRGF0YShBUEk6OkRh
dGEqLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25z
dCBTdHJpbmcmIGJhc2VVUkwsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIpOwogICAg
IFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IGxvYWRIVE1MU3RyaW5nKGNvbnN0IFN0cmluZyYgaHRt
bFN0cmluZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEgPSBu
dWxscHRyKTsKQEAgLTEyNzYsOCArMTI3Niw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZERl
c3Ryb3lOYXZpZ2F0aW9uKHVpbnQ2NF90IG5hdmlnYXRpb25JRCk7CiAKLSAgICB2b2lkIGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24odWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBmcmFtZVNlY3VyaXR5T3JpZ2luLCB1aW50NjRfdCBuYXZp
Z2F0aW9uSUQsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb25EYXRhJiwgY29uc3QgRnJhbWVJbmZvRGF0
YSYsIHVpbnQ2NF90IG9yaWdpbmF0aW5nUGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
dWludDY0X3QgbGlzdGVuZXJJRCwgY29uc3QgVXNlckRhdGEmLCBSZWY8TWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjo6RGVsYXllZFJlcGx5PiYm
KTsKLSAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbih1aW50NjRfdCBmcmFt
ZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIGZyYW1lU2VjdXJpdHlPcmln
aW4sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb25EYXRhJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIHVpbnQ2NF90IGxpc3RlbmVySUQsIGNv
bnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJh
bWVTZWN1cml0eU9yaWdpbiwgdWludDY0X3QgbmF2aWdhdGlvbklELCBOYXZpZ2F0aW9uQWN0aW9u
RGF0YSYmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgdWludDY0X3Qgb3JpZ2luYXRpbmdQYWdlSUQs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmJiwgdWludDY0X3QgbGlzdGVuZXJJRCwgY29uc3QgVXNlckRhdGEm
LCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbjo6RGVsYXllZFJlcGx5PiYmKTsKKyAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5ld1dpbmRv
d0FjdGlvbih1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGEmIGZyYW1lU2VjdXJpdHlPcmlnaW4sIE5hdmlnYXRpb25BY3Rpb25EYXRhJiYsIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgdWludDY0X3QgbGlz
dGVuZXJJRCwgY29uc3QgVXNlckRhdGEmKTsKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvclJlc3Bv
bnNlKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYg
ZnJhbWVTZWN1cml0eU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgY2FuU2hvd01JTUVUeXBlLCB1aW50
NjRfdCBsaXN0ZW5lcklELCBjb25zdCBVc2VyRGF0YSYpOwogICAgIHZvaWQgZGVjaWRlUG9saWN5
Rm9yUmVzcG9uc2VTeW5jKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgY2FuU2hvd01J
TUVUeXBlLCB1aW50NjRfdCBsaXN0ZW5lcklELCBjb25zdCBVc2VyRGF0YSYsIFJlZjxNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmM6OkRlbGF5ZWRSZXBs
eT4mJik7CiAgICAgdm9pZCB1bmFibGVUb0ltcGxlbWVudFBvbGljeSh1aW50NjRfdCBmcmFtZUlE
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVXNlckRhdGEmKTsKQEAgLTEy
OTEsNyArMTI5MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUo
Y29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGZyYW1lSUQp
OwogCiAgICAgLy8gVUkgY2xpZW50Ci0gICAgdm9pZCBjcmVhdGVOZXdQYWdlKGNvbnN0IEZyYW1l
SW5mb0RhdGEmLCB1aW50NjRfdCBvcmlnaW5hdGluZ1BhZ2VJRCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBjb25zdCBOYXZp
Z2F0aW9uQWN0aW9uRGF0YSYsIFJlZlB0cjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVO
ZXdQYWdlOjpEZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGNyZWF0ZU5ld1BhZ2UoY29uc3QgRnJh
bWVJbmZvRGF0YSYsIHVpbnQ2NF90IG9yaWdpbmF0aW5nUGFnZUlELCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBOYXZpZ2F0aW9uQWN0
aW9uRGF0YSYmLCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZTo6RGVs
YXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAgdm9pZCBydW5KYXZhU2Ny
aXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiwgY29uc3QgU3RyaW5nJiwgUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFT
Y3JpcHRBbGVydDo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHJ1bkphdmFTY3JpcHRDb25m
aXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYs
IGNvbnN0IFN0cmluZyYsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0
Q29uZmlybTo6RGVsYXllZFJlcGx5PiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElOYXZpZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAJKHJldmlzaW9uIDIxOTg2MykKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsOSArMzUsOSBAQCBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYktpdDo6V2ViTmF2aWdhCiB7
CiB9CiAKLU5hdmlnYXRpb246Ok5hdmlnYXRpb24oV2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGUm
IHN0YXRlLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitOYXZpZ2F0
aW9uOjpOYXZpZ2F0aW9uKFdlYktpdDo6V2ViTmF2aWdhdGlvblN0YXRlJiBzdGF0ZSwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKICAgICA6IG1fbmF2aWdhdGlvbklEKHN0YXRl
LmdlbmVyYXRlTmF2aWdhdGlvbklEKCkpCi0gICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKKyAgICAs
IG1fcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmgJKHJldmlzaW9uIDIxOTg2MykKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIEFQSU5hdmlnYXRpb25faAotI2RlZmluZSBBUElOYXZpZ2F0aW9uX2gKKyNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZVJlcXVlc3QuaD4KQEAgLTQzLDkgKzQyLDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBOYXZpZ2F0aW9uKHN0YXRlKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IFJlZjxOYXZpZ2F0aW9uPiBjcmVhdGUoV2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRl
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgc3RhdGljIFJl
ZjxOYXZpZ2F0aW9uPiBjcmVhdGUoV2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgTmF2aWdhdGlvbihzdGF0ZSwgcmVxdWVzdCkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBOYXZpZ2F0aW9uKHN0YXRlLCBXVEZNb3ZlKHJlcXVlc3QpKSk7CiAg
ICAgfQogCiAgICAgdmlydHVhbCB+TmF2aWdhdGlvbigpOwpAQCAtNTYsMTMgKzU1LDEwIEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBOYXZpZ2F0aW9uKFdlYktpdDo6V2ViTmF2
aWdhdGlvblN0YXRlJik7Ci0gICAgZXhwbGljaXQgTmF2aWdhdGlvbihXZWJLaXQ6OldlYk5hdmln
YXRpb25TdGF0ZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIGV4cGxp
Y2l0IE5hdmlnYXRpb24oV2ViS2l0OjpXZWJOYXZpZ2F0aW9uU3RhdGUmLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJik7CiAKICAgICB1aW50NjRfdCBtX25hdmlnYXRpb25JRDsKICAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJ
Ci0KLQotI2VuZGlmIC8vIEFQSU5hdmlnYXRpb25faApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCShyZXZpc2lvbiAyMTk4NjMp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBBUElOYXZpZ2F0aW9uQWN0aW9uX2gKLSNkZWZpbmUg
QVBJTmF2aWdhdGlvbkFjdGlvbl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSUZyYW1l
SW5mby5oIgogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgpAQCAtMzcsMjAgKzM2LDkgQEAgbmFtZXNw
YWNlIEFQSSB7CiAKIGNsYXNzIE5hdmlnYXRpb25BY3Rpb24gZmluYWwgOiBwdWJsaWMgT2JqZWN0
SW1wbDxPYmplY3Q6OlR5cGU6Ok5hdmlnYXRpb25BY3Rpb24+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE5hdmlnYXRpb25BY3Rpb24+IGNyZWF0ZShjb25zdCBXZWJLaXQ6Ok5hdmlnYXRpb25B
Y3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZy
YW1lLCBBUEk6OkZyYW1lSW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hbFVSTCwgYm9vbCBz
aG91bGRPcGVuQXBwTGlua3MsIFJlZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiB1c2VySW5pdGlh
dGVkQWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmF2aWdhdGlv
bkFjdGlvbihuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgc291cmNlRnJhbWUsIHRhcmdldEZyYW1lLCBy
ZXF1ZXN0LCBvcmlnaW5hbFVSTCwgc2hvdWxkT3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVzZXJJbml0
aWF0ZWRBY3Rpb24pKSk7Ci0gICAgfQotCi0gICAgTmF2aWdhdGlvbkFjdGlvbihjb25zdCBXZWJL
aXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFt
ZUluZm8qIHNvdXJjZUZyYW1lLCBBUEk6OkZyYW1lSW5mbyogdGFyZ2V0RnJhbWUsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VVJMJiBvcmln
aW5hbFVSTCwgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MsIFJlZlB0cjxVc2VySW5pdGlhdGVkQWN0
aW9uPiB1c2VySW5pdGlhdGVkQWN0aW9uKQotICAgICAgICA6IG1fc291cmNlRnJhbWUoc291cmNl
RnJhbWUpCi0gICAgICAgICwgbV90YXJnZXRGcmFtZSh0YXJnZXRGcmFtZSkKLSAgICAgICAgLCBt
X3JlcXVlc3QocmVxdWVzdCkKLSAgICAgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQot
ICAgICAgICAsIG1fc2hvdWxkT3BlbkFwcExpbmtzKHNob3VsZE9wZW5BcHBMaW5rcykKLSAgICAg
ICAgLCBtX3VzZXJJbml0aWF0ZWRBY3Rpb24oV1RGTW92ZSh1c2VySW5pdGlhdGVkQWN0aW9uKSkK
LSAgICAgICAgLCBtX25hdmlnYXRpb25BY3Rpb25EYXRhKG5hdmlnYXRpb25BY3Rpb25EYXRhKQor
ICAgIHN0YXRpYyBSZWY8TmF2aWdhdGlvbkFjdGlvbj4gY3JlYXRlKFdlYktpdDo6TmF2aWdhdGlv
bkFjdGlvbkRhdGEmJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgQVBJOjpGcmFtZUluZm8qIHNvdXJj
ZUZyYW1lLCBBUEk6OkZyYW1lSW5mbyogdGFyZ2V0RnJhbWUsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2luYWxVUkwsIGJvb2wgc2hv
dWxkT3BlbkFwcExpbmtzLCBSZWZQdHI8VXNlckluaXRpYXRlZEFjdGlvbj4mJiB1c2VySW5pdGlh
dGVkQWN0aW9uKQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmF2aWdhdGlv
bkFjdGlvbihXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgc291cmNlRnJhbWUsIHRhcmdl
dEZyYW1lLCBXVEZNb3ZlKHJlcXVlc3QpLCBvcmlnaW5hbFVSTCwgc2hvdWxkT3BlbkFwcExpbmtz
LCBXVEZNb3ZlKHVzZXJJbml0aWF0ZWRBY3Rpb24pKSk7CiAgICAgfQogCiAgICAgRnJhbWVJbmZv
KiBzb3VyY2VGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRnJhbWUuZ2V0KCk7IH0KQEAg
LTczLDYgKzYxLDE3IEBAIHB1YmxpYzoKICAgICBVc2VySW5pdGlhdGVkQWN0aW9uKiB1c2VySW5p
dGlhdGVkQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2VySW5pdGlhdGVkQWN0aW9uLmdldCgp
OyB9CiAKIHByaXZhdGU6CisgICAgTmF2aWdhdGlvbkFjdGlvbihXZWJLaXQ6Ok5hdmlnYXRpb25B
Y3Rpb25EYXRhJiYgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VG
cmFtZSwgQVBJOjpGcmFtZUluZm8qIHRhcmdldEZyYW1lLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmJiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpVUkwmIG9yaWdpbmFsVVJMLCBib29sIHNob3Vs
ZE9wZW5BcHBMaW5rcywgUmVmUHRyPFVzZXJJbml0aWF0ZWRBY3Rpb24+JiYgdXNlckluaXRpYXRl
ZEFjdGlvbikKKyAgICAgICAgOiBtX3NvdXJjZUZyYW1lKHNvdXJjZUZyYW1lKQorICAgICAgICAs
IG1fdGFyZ2V0RnJhbWUodGFyZ2V0RnJhbWUpCisgICAgICAgICwgbV9yZXF1ZXN0KFdURk1vdmUo
cmVxdWVzdCkpCisgICAgICAgICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKKyAgICAgICAg
LCBtX3Nob3VsZE9wZW5BcHBMaW5rcyhzaG91bGRPcGVuQXBwTGlua3MpCisgICAgICAgICwgbV91
c2VySW5pdGlhdGVkQWN0aW9uKFdURk1vdmUodXNlckluaXRpYXRlZEFjdGlvbikpCisgICAgICAg
ICwgbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YShXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb25EYXRhKSkK
KyAgICB7CisgICAgfQorCiAgICAgUmVmUHRyPEZyYW1lSW5mbz4gbV9zb3VyY2VGcmFtZTsKICAg
ICBSZWZQdHI8RnJhbWVJbmZvPiBtX3RhcmdldEZyYW1lOwogCkBAIC04Nyw1ICs4NiwzIEBAIHBy
aXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEFQSU5hdmlnYXRp
b25BY3Rpb25faApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRp
b25DbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
TmF2aWdhdGlvbkNsaWVudC5oCShyZXZpc2lvbiAyMTk4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nywx
NiArNjcsMTYgQEAgY2xhc3MgTmF2aWdhdGlvbkNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+TmF2aWdhdGlvbkNsaWVudCgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UHJv
dmlzaW9uYWxOYXZpZ2F0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9u
KiwgQVBJOjpPYmplY3QqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgQVBJ
OjpOYXZpZ2F0aW9uKiwgQVBJOjpPYmplY3QqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGVy
Zm9ybUNsaWVudFJlZGlyZWN0Rm9yTmF2aWdhdGlvbihXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEFQ
STo6TmF2aWdhdGlvbiopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uV2l0aEVycm9yKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpXZWJGcmFt
ZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYs
IEFQSTo6T2JqZWN0KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExv
YWRJblN1YmZyYW1lV2l0aEVycm9yKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpXZWJG
cmFtZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgQVBJOjpOYXZp
Z2F0aW9uKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIEFQSTo6T2JqZWN0KikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdE5hdmlnYXRpb24oV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6Ok9iamVjdCopIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hEb2N1bWVudExvYWQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBBUEk6Ok5hdmln
YXRpb24qLCBBUEk6Ok9iamVjdCopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hOYXZp
Z2F0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uKiwgQVBJOjpPYmpl
Y3QqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbE5hdmlnYXRpb25XaXRoRXJyb3IoV2Vi
S2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBBUEk6Ok5hdmlnYXRp
b24qLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgQVBJOjpPYmplY3QqKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbihXZWJLaXQ6OldlYlBhZ2VQ
cm94eSYsIEFQSTo6TmF2aWdhdGlvbiosIFdlYktpdDo6U2FtZURvY3VtZW50TmF2aWdhdGlvblR5
cGUsIEFQSTo6T2JqZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9u
YWxOYXZpZ2F0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgTmF2aWdhdGlvbiosIE9iamVjdCop
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbE5hdmlnYXRpb24oV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBOYXZpZ2F0aW9uKiwgT2JqZWN0
KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdEZvck5hdmln
YXRpb24oV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBOYXZpZ2F0aW9uKikgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25XaXRoRXJyb3IoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBOYXZpZ2F0aW9uKiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYsIE9iamVjdCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZVdpdGhFcnJvcihXZWJLaXQ6OldlYlBhZ2VQcm94
eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YSYsIE5hdmlnYXRpb24qLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgT2JqZWN0
KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdE5hdmlnYXRpb24oV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBOYXZpZ2F0aW9uKiwgT2JqZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmlzaERvY3VtZW50TG9hZChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIE5hdmlnYXRpb24qLCBP
YmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTmF2aWdhdGlvbihXZWJLaXQ6
OldlYlBhZ2VQcm94eSYsIE5hdmlnYXRpb24qLCBPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbE5hdmlnYXRpb25XaXRoRXJyb3IoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJL
aXQ6OldlYkZyYW1lUHJveHkmLCBOYXZpZ2F0aW9uKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYsIE9iamVjdCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgTmF2aWdhdGlvbiosIFdlYktpdDo6U2FtZURv
Y3VtZW50TmF2aWdhdGlvblR5cGUsIE9iamVjdCopIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHJl
bmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2ViQ29yZTo6
TGF5b3V0TWlsZXN0b25lcykgeyB9CiAKQEAgLTk1LDE4ICs5NSwxOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1l
KGNvbnN0IFdlYktpdDo6UXVpY2tMb29rRG9jdW1lbnREYXRhJikgeyB9CiAjZW5kaWYKIAotICAg
IHZpcnR1YWwgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYktpdDo6V2Vi
UGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uQWN0aW9uJiwgUmVmPFdlYktpdDo6V2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lclByb3h5PiYmIGxpc3RlbmVyLCBBUEk6Ok9iamVjdCopCisgICAgdmlydHVh
bCB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBSZWY8TmF2aWdhdGlvbkFjdGlvbj4mJiwgUmVmPFdlYktpdDo6V2ViRnJhbWVQb2xpY3lM
aXN0ZW5lclByb3h5PiYmIGxpc3RlbmVyLCBPYmplY3QqKQogICAgIHsKICAgICAgICAgbGlzdGVu
ZXItPnVzZSh7IH0pOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uUmVzcG9uc2UoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBBUEk6Ok5hdmlnYXRpb25S
ZXNwb25zZSYsIFJlZjxXZWJLaXQ6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiBsaXN0
ZW5lciwgQVBJOjpPYmplY3QqKQorICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uUmVzcG9uc2UoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBOYXZpZ2F0aW9uUmVzcG9uc2Um
LCBSZWY8V2ViS2l0OjpXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYgbGlzdGVuZXIsIE9i
amVjdCopCiAgICAgewogICAgICAgICBsaXN0ZW5lci0+dXNlKHsgfSk7CiAgICAgfQogICAgIAog
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZpcnR1YWwgV2ViS2l0OjpQbHVn
aW5Nb2R1bGVMb2FkUG9saWN5IGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBXZWJLaXQ6OlBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgY3VycmVudFBsdWdpbkxv
YWRQb2xpY3ksIEFQSTo6RGljdGlvbmFyeSosIFdURjo6U3RyaW5nJikKKyAgICB2aXJ0dWFsIFdl
YktpdDo6UGx1Z2luTW9kdWxlTG9hZFBvbGljeSBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkKFdl
YktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGN1cnJl
bnRQbHVnaW5Mb2FkUG9saWN5LCBEaWN0aW9uYXJ5KiwgV1RGOjpTdHJpbmcmKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGN1cnJlbnRQbHVnaW5Mb2FkUG9saWN5OwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQb2xpY3lDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUG9saWN5Q2xpZW50LmgJKHJldmlzaW9uIDIx
OTg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQb2xpY3lDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQVBJUG9saWN5Q2xpZW50X2gKLSNkZWZpbmUgQVBJ
UG9saWN5Q2xpZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNp
bmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTY4LDUgKzY3LDMgQEAg
cHVibGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCi0KLSNlbmRpZiAvLyBBUElQb2xpY3lD
bGllbnRfaApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJ
KHJldmlzaW9uIDIxOTg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVSUNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw4ICs3Miw5IEBAIGNsYXNzIFVJQ2xpZW50IHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5VSUNsaWVudCgpIHsgfQogCi0gICAgdmlydHVhbCBSZWZQ
dHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IGNyZWF0ZU5ld1BhZ2UoV2ViS2l0OjpXZWJQYWdlUHJv
eHkqLCBBUEk6OkZyYW1lSW5mbyYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiwgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0
aW9uRGF0YSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlTmV3
UGFnZUFzeW5jKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgQVBJOjpGcmFtZUluZm8mLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYs
IGNvbnN0IFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmLCBXVEY6OkZ1bmN0aW9uPHZvaWQg
KFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBj
cmVhdGVOZXdQYWdlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgRnJhbWVJbmZvJiwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiwgV2ViS2l0
OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZU5ld1BhZ2VBc3luYyhXZWJLaXQ6OldlYlBhZ2VQcm94eSosIEZyYW1lSW5m
byYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0
dXJlcyYsIFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmJiwgV1RGOjpGdW5jdGlvbjx2b2lk
KFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsg
fQorICAgIHZpcnR1YWwgYm9vbCBjYW5DcmVhdGVOZXdQYWdlQXN5bmMoKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzaG93UGFnZShXZWJLaXQ6OldlYlBhZ2VQcm94eSopIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoV2ViS2l0OjpX
ZWJQYWdlUHJveHkqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKFdl
YktpdDo6V2ViUGFnZVByb3h5KikgeyB9CkBAIC05MCw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNv
bnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkqLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkIChj
b25zdCBXVEY6OlN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRpb25IYW5k
bGVyKFdURjo6U3RyaW5nKCkpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzVGV4dChX
ZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29u
c3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlm
aWVycywgQVBJOjpPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RS
ZXN1bHREYXRhJiwgV2ViS2l0OjpXZWJFdmVudDo6TW9kaWZpZXJzLCBPYmplY3QqKSB7IH0KICNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB2aXJ0dWFsIHZvaWQgdW5hdmFpbGFi
bGVQbHVnaW5CdXR0b25DbGlja2VkKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgV0tQbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbiwgQVBJOjpEaWN0aW9uYXJ5KikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIFdL
UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24sIERpY3Rpb25hcnkqKSB7IH0KICNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRz
RGlkTm90SGFuZGxlS2V5RXZlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTQ0LDcg
KzE0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuUnVuTW9kYWwoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBydW5Nb2RhbChXZWJLaXQ6OldlYlBh
Z2VQcm94eSopIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9h
ZHNGb2xkZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0
IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmLCBBUEk6OkRhdGEqKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihXZWJLaXQ6OldlYlBh
Z2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBX
VEY6OlN0cmluZyYsIERhdGEqKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwaW5uZWRTdGF0ZURp
ZENoYW5nZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYpIHsgfQogCkBAIC0xNzMsNyArMTc0LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlUG9pbnRlckxvY2soV2ViS2l0OjpXZWJQ
YWdlUHJveHkqKSB7IH0KICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIGRpZENsaWNrQXV0b0Zp
bGxCdXR0b24oV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBBUEk6Ok9iamVjdCopIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBkaWRDbGlja0F1dG9GaWxsQnV0dG9uKFdlYktpdDo6V2ViUGFnZVByb3h5Jiwg
T2JqZWN0KikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VPck1lZGlhRG9jdW1lbnRTaXpl
Q2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgeyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMjE5ODYzKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3
LDEyICsxNjcsMTQgQEAgdm9pZCBXS1BhZ2VMb2FkVVJMV2l0aFVzZXJEYXRhKFdLUGFnZVJlZgog
CiB2b2lkIFdLUGFnZUxvYWRVUkxSZXF1ZXN0KFdLUGFnZVJlZiBwYWdlUmVmLCBXS1VSTFJlcXVl
c3RSZWYgdXJsUmVxdWVzdFJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmxvYWRSZXF1ZXN0
KHRvSW1wbCh1cmxSZXF1ZXN0UmVmKS0+cmVzb3VyY2VSZXF1ZXN0KCkpOworICAgIGF1dG8gcmVz
b3VyY2VSZXF1ZXN0ID0gdG9JbXBsKHVybFJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVlc3QoKTsK
KyAgICB0b0ltcGwocGFnZVJlZiktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVzb3VyY2VSZXF1ZXN0
KSk7CiB9CiAKIHZvaWQgV0tQYWdlTG9hZFVSTFJlcXVlc3RXaXRoVXNlckRhdGEoV0tQYWdlUmVm
IHBhZ2VSZWYsIFdLVVJMUmVxdWVzdFJlZiB1cmxSZXF1ZXN0UmVmLCBXS1R5cGVSZWYgdXNlckRh
dGFSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5sb2FkUmVxdWVzdCh0b0ltcGwodXJsUmVx
dWVzdFJlZiktPnJlc291cmNlUmVxdWVzdCgpLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5
OjpTaG91bGROb3RBbGxvdywgdG9JbXBsKHVzZXJEYXRhUmVmKSk7CisgICAgYXV0byByZXNvdXJj
ZVJlcXVlc3QgPSB0b0ltcGwodXJsUmVxdWVzdFJlZiktPnJlc291cmNlUmVxdWVzdCgpOworICAg
IHRvSW1wbChwYWdlUmVmKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpLCBT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdywgdG9JbXBsKHVzZXJE
YXRhUmVmKSk7CiB9CiAKIHZvaWQgV0tQYWdlTG9hZEZpbGUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdL
VVJMUmVmIGZpbGVVUkwsIFdLVVJMUmVmIHJlc291cmNlRGlyZWN0b3J5VVJMKQpAQCAtMTU2Myw3
ICsxNTY1LDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBhZwogICAg
ICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBjcmVh
dGVOZXdQYWdlKFdlYlBhZ2VQcm94eSogcGFnZSwgQVBJOjpGcmFtZUluZm8mIHNvdXJjZUZyYW1l
SW5mbywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFdpbmRv
d0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgY29uc3QgTmF2aWdhdGlvbkFjdGlvbkRhdGEmIG5h
dmlnYXRpb25BY3Rpb25EYXRhKSBvdmVycmlkZQorICAgICAgICBSZWZQdHI8V2ViUGFnZVByb3h5
PiBjcmVhdGVOZXdQYWdlKFdlYlBhZ2VQcm94eSogcGFnZSwgQVBJOjpGcmFtZUluZm8mIHNvdXJj
ZUZyYW1lSW5mbywgUmVzb3VyY2VSZXF1ZXN0JiYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBXaW5k
b3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIE5hdmlnYXRpb25BY3Rpb25EYXRhJiYgbmF2aWdh
dGlvbkFjdGlvbkRhdGEpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX2NsaWVu
dC5jcmVhdGVOZXdQYWdlKSB7CiAgICAgICAgICAgICAgICAgYXV0byBjb25maWd1cmF0aW9uID0g
cGFnZS0+Y29uZmlndXJhdGlvbigpLmNvcHkoKTsKQEAgLTE1NzEsNyArMTU3Myw3IEBAIHZvaWQg
V0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKIAogICAgICAgICAgICAgICAgIGF1
dG8gdXNlckluaXRpYXRlZEFjdGl2aXR5ID0gcGFnZS0+cHJvY2VzcygpLnVzZXJJbml0aWF0ZWRB
Y3Rpdml0eShuYXZpZ2F0aW9uQWN0aW9uRGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik7
CiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MgPSAhaG9zdHNBcmVFcXVh
bChzb3VyY2VGcmFtZUluZm8ucmVxdWVzdCgpLnVybCgpLCByZXNvdXJjZVJlcXVlc3QudXJsKCkp
OwotICAgICAgICAgICAgICAgIGF1dG8gYXBpTmF2aWdhdGlvbkFjdGlvbiA9IEFQSTo6TmF2aWdh
dGlvbkFjdGlvbjo6Y3JlYXRlKG5hdmlnYXRpb25BY3Rpb25EYXRhLCAmc291cmNlRnJhbWVJbmZv
LCBudWxscHRyLCByZXNvdXJjZVJlcXVlc3QsIFdlYkNvcmU6OlVSTCgpLCBzaG91bGRPcGVuQXBw
TGlua3MsIHVzZXJJbml0aWF0ZWRBY3Rpdml0eSk7CisgICAgICAgICAgICAgICAgYXV0byBhcGlO
YXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUoV1RGTW92ZShu
YXZpZ2F0aW9uQWN0aW9uRGF0YSksICZzb3VyY2VGcmFtZUluZm8sIG51bGxwdHIsIFdURk1vdmUo
cmVzb3VyY2VSZXF1ZXN0KSwgV2ViQ29yZTo6VVJMKCksIHNob3VsZE9wZW5BcHBMaW5rcywgV1RG
TW92ZSh1c2VySW5pdGlhdGVkQWN0aXZpdHkpKTsKIAogICAgICAgICAgICAgICAgIGF1dG8gYXBp
V2luZG93RmVhdHVyZXMgPSBBUEk6OldpbmRvd0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVy
ZXMpOwogCkBAIC0yMTU3LDEzICsyMTU5LDEzIEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRp
b25DbGllbnQoV0tQYWcKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgQVBJOjpO
YXZpZ2F0aW9uQWN0aW9uJiBuYXZpZ2F0aW9uQWN0aW9uLCBSZWY8V2ViS2l0OjpXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk+JiYgbGlzdGVuZXIsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3Zl
cnJpZGUKKyAgICAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYlBh
Z2VQcm94eSYgcGFnZSwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZ2F0aW9uQWN0
aW9uLCBSZWY8V2ViS2l0OjpXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYgbGlzdGVuZXIs
IEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KCFtX2NsaWVudC5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKSB7CiAgICAgICAgICAg
ICAgICAgbGlzdGVuZXItPnVzZSh7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fY2xpZW50LmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24odG9BUEkoJnBhZ2UpLCB0b0FQSSgmbmF2aWdhdGlvbkFjdGlvbiksIHRvQVBJKGxpc3Rl
bmVyLnB0cigpKSwgdG9BUEkodXNlckRhdGEpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwor
ICAgICAgICAgICAgbV9jbGllbnQuZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbih0b0FQ
SSgmcGFnZSksIHRvQVBJKG5hdmlnYXRpb25BY3Rpb24ucHRyKCkpLCB0b0FQSShsaXN0ZW5lci5w
dHIoKSksIHRvQVBJKHVzZXJEYXRhKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlKFdl
YlBhZ2VQcm94eSYgcGFnZSwgQVBJOjpOYXZpZ2F0aW9uUmVzcG9uc2UmIG5hdmlnYXRpb25SZXNw
b25zZSwgUmVmPFdlYktpdDo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiYmIGxpc3RlbmVy
LCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwCShyZXZpc2lvbiAy
MTk4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRVSUNsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBjcmVhdGVOZXdQYWdlKFdlYlBhZ2VQ
cm94eSosIEFQSTo6RnJhbWVJbmZvJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0
dXJlcywgY29uc3QgTmF2aWdhdGlvbkFjdGlvbkRhdGEmIG5hdmlnYXRpb25BY3Rpb25EYXRhKSBv
dmVycmlkZQorICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IGNyZWF0ZU5ld1BhZ2UoV2ViUGFnZVBy
b3h5KiwgQVBJOjpGcmFtZUluZm8mLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXNvdXJj
ZVJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywg
TmF2aWdhdGlvbkFjdGlvbkRhdGEmJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSkgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1Jl
Zih3ZWJraXRVUklSZXF1ZXN0Q3JlYXRlRm9yUmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlUmVxdWVz
dCkpOwogICAgICAgICBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uIG5hdmlnYXRpb25BY3Rpb24ocmVx
dWVzdC5nZXQoKSwgbmF2aWdhdGlvbkFjdGlvbkRhdGEpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAJKHJldmlzaW9uIDIx
OTg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTA0LDcgKzI1MDQsNyBAQCB2b2lkIHdlYmtpdF93ZWJf
dmlld19sb2FkX3JlcXVlc3QoV2ViS2l0CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VS
ZXF1ZXN0OwogICAgIHdlYmtpdFVSSVJlcXVlc3RHZXRSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCwg
cmVzb3VyY2VSZXF1ZXN0KTsKLSAgICBnZXRQYWdlKHdlYlZpZXcpLmxvYWRSZXF1ZXN0KHJlc291
cmNlUmVxdWVzdCk7CisgICAgZ2V0UGFnZSh3ZWJWaWV3KS5sb2FkUmVxdWVzdChXVEZNb3ZlKHJl
c291cmNlUmVxdWVzdCkpOwogfQogCiAvKioKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCShyZXZpc2lvbiAyMTk4NjMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE1LDcgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZGlkRmluaXNoTG9h
ZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUoY29uc3QgUXVpY2tMb29rRG9jdW1lbnRE
YXRhJikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24oV2ViUGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uQWN0aW9uJiwgUmVm
PFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBv
dmVycmlkZTsKKyAgICAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdl
YlBhZ2VQcm94eSYsIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYsIFJlZjxXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk+JiYsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAg
ICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlKFdlYlBhZ2VQcm94
eSYsIEFQSTo6TmF2aWdhdGlvblJlc3BvbnNlJiwgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eT4mJiwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZTsKIAogICAgICAgICBOYXZp
Z2F0aW9uU3RhdGUmIG1fbmF2aWdhdGlvblN0YXRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkocmV2aXNpb24gMjE5ODYzKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDQsMTYgKzMwNCwxNiBAQCBzdGF0aWMgdm9pZCB0cnlBcHBMaW5rKFJl
ZlB0cjxBUEk6Ok5hdmlnCiAjZW5kaWYKIH0KIAotdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV2ViUGFnZVByb3h5
JiB3ZWJQYWdlUHJveHksIEFQSTo6TmF2aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlvbkFjdGlvbiwg
UmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiBsaXN0ZW5lciwgQVBJOjpPYmplY3Qq
IHVzZXJEYXRhKQordm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHksIFJl
ZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgUmVmPFdlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eT4mJiBsaXN0ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQog
ewogICAgIFN0cmluZyBtYWluRnJhbWVVUkxTdHJpbmcgPSB3ZWJQYWdlUHJveHkubWFpbkZyYW1l
KCktPnVybCgpOwogCiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lv
bkhhbmRsZXIKICAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lzaW9u
SGFuZGxlcldlYnNpdGVQb2xpY2llcykgewotICAgICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9u
QWN0aW9uPiBsb2NhbE5hdmlnYXRpb25BY3Rpb24gPSAmbmF2aWdhdGlvbkFjdGlvbjsKKyAgICAg
ICAgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4gbG9jYWxOYXZpZ2F0aW9uQWN0aW9uID0gbmF2
aWdhdGlvbkFjdGlvbi5jb3B5UmVmKCk7CiAgICAgICAgIFJlZlB0cjxXZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHk+IGxvY2FsTGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKTsKIAotICAgICAg
ICB0cnlBcHBMaW5rKFdURk1vdmUobG9jYWxOYXZpZ2F0aW9uQWN0aW9uKSwgbWFpbkZyYW1lVVJM
U3RyaW5nLCBbd2ViUGFnZSA9IFJlZlB0cjxXZWJQYWdlUHJveHk+KCZ3ZWJQYWdlUHJveHkpLCBs
b2NhbExpc3RlbmVyLCBsb2NhbE5hdmlnYXRpb25BY3Rpb24gPSBSZWZQdHI8QVBJOjpOYXZpZ2F0
aW9uQWN0aW9uPigmbmF2aWdhdGlvbkFjdGlvbildIChib29sIGZvbGxvd2VkTGlua1RvQXBwKSB7
CisgICAgICAgIHRyeUFwcExpbmsoV1RGTW92ZShsb2NhbE5hdmlnYXRpb25BY3Rpb24pLCBtYWlu
RnJhbWVVUkxTdHJpbmcsIFt3ZWJQYWdlID0gUmVmUHRyPFdlYlBhZ2VQcm94eT4oJndlYlBhZ2VQ
cm94eSksIGxvY2FsTGlzdGVuZXIsIGxvY2FsTmF2aWdhdGlvbkFjdGlvbiA9IG5hdmlnYXRpb25B
Y3Rpb24uY29weVJlZigpXSAoYm9vbCBmb2xsb3dlZExpbmtUb0FwcCkgewogICAgICAgICAgICAg
aWYgKGZvbGxvd2VkTGlua1RvQXBwKSB7CiAgICAgICAgICAgICAgICAgbG9jYWxMaXN0ZW5lci0+
aWdub3JlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzUzLDcgKzM1Myw3IEBAIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjoKICAgICAKICAgICBSZWZQdHI8
Q29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcj4gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVy
Q2FsbENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIGRlbGVnYXRlSGFz
V2Vic2l0ZVBvbGljaWVzID8gQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOikgOiBAc2VsZWN0b3Iod2ViVmlldzpkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjopKTsKICAgICAKLSAgICBh
dXRvIGRlY2lzaW9uSGFuZGxlcldpdGhQb2xpY2llcyA9IFtsb2NhbExpc3RlbmVyID0gUmVmUHRy
PFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4oV1RGTW92ZShsaXN0ZW5lcikpLCBsb2NhbE5h
dmlnYXRpb25BY3Rpb24gPSBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPigmbmF2aWdhdGlv
bkFjdGlvbiksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBtYWluRnJhbWVVUkxTdHJpbmdd
KFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSBhY3Rpb25Qb2xpY3ksIF9XS1dlYnNpdGVQb2xpY2ll
cyAqd2Vic2l0ZVBvbGljaWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvIGRlY2lzaW9uSGFuZGxlcldp
dGhQb2xpY2llcyA9IFtsb2NhbExpc3RlbmVyID0gUmVmUHRyPFdlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eT4oV1RGTW92ZShsaXN0ZW5lcikpLCBsb2NhbE5hdmlnYXRpb25BY3Rpb24gPSBuYXZp
Z2F0aW9uQWN0aW9uLmNvcHlSZWYoKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlciksIG1haW5G
cmFtZVVSTFN0cmluZ10oV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5IGFjdGlvblBvbGljeSwgX1dL
V2Vic2l0ZVBvbGljaWVzICp3ZWJzaXRlUG9saWNpZXMpIG11dGFibGUgewogICAgICAgICBpZiAo
Y2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAt
MzkzLDEyICszOTMsMTIgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OgogICAgIH07CiAgICAgCiAgICAgaWYgKGRlbGVnYXRlSGFzV2Vic2l0ZVBvbGljaWVzKQotICAg
ICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0
ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFuZGxlcjpk
ZWNpc2lvbkhhbmRsZXJXaXRoUG9saWNpZXNdOworICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25T
dGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5h
dmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFuZGxlcjpCbG9ja1B0cjx2b2lkKFdLTmF2aWdhdGlv
bkFjdGlvblBvbGljeSwgX1dLV2Vic2l0ZVBvbGljaWVzICopPjo6ZnJvbUNhbGxhYmxlKFdURk1v
dmUoZGVjaXNpb25IYW5kbGVyV2l0aFBvbGljaWVzKSkuZ2V0KCldOwogICAgIGVsc2UgewotICAg
ICAgICBhdXRvIGRlY2lzaW9uSGFuZGxlcldpdGhvdXRQb2xpY2llcyA9IFtkZWNpc2lvbkhhbmRs
ZXJXaXRoUG9saWNpZXNdIChXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kgYWN0aW9uUG9saWN5KSBt
dXRhYmxlIHsKKyAgICAgICAgYXV0byBkZWNpc2lvbkhhbmRsZXJXaXRob3V0UG9saWNpZXMgPSBb
ZGVjaXNpb25IYW5kbGVyV2l0aFBvbGljaWVzID0gV1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRo
UG9saWNpZXMpXSAoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5IGFjdGlvblBvbGljeSkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBkZWNpc2lvbkhhbmRsZXJXaXRoUG9saWNpZXMoYWN0aW9uUG9saWN5
LCBuaWwpOwogICAgICAgICB9OwotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBkZWNpc2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5k
bGVyV2l0aG91dFBvbGljaWVzXTsKKyAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgZGVjaXNpb25IYW5kbGVyOkJsb2NrUHRyPHZv
aWQoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KT46OmZyb21DYWxsYWJsZShXVEZNb3ZlKGRlY2lz
aW9uSGFuZGxlcldpdGhvdXRQb2xpY2llcykpLmdldCgpXTsKICAgICB9CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgJKHJldmlzaW9uIDIxOTg2
MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksOSArNzksMTAgQEAgcHJpdmF0ZToKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIC8vIEFQSTo6VUlDbGllbnQKLSAgICAgICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5
PiBjcmVhdGVOZXdQYWdlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgQVBJOjpGcmFtZUluZm8mLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0
dXJlcyYsIGNvbnN0IFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmKSBvdmVycmlkZTsKLSAg
ICAgICAgYm9vbCBjcmVhdGVOZXdQYWdlQXN5bmMoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6
OkZyYW1lSW5mbyYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNv
cmU6OldpbmRvd0ZlYXR1cmVzJiwgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYs
IFdURjo6RnVuY3Rpb248dm9pZCAoUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5Pik+JiYgY29t
cGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlOwotICAgICAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdl
UHJveHk+IGNyZWF0ZU5ld1BhZ2VDb21tb24oV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6OkZy
YW1lSW5mbyYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6
OldpbmRvd0ZlYXR1cmVzJiwgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYsIFdU
Rjo6RnVuY3Rpb248dm9pZCAoUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5Pik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpOworICAgICAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IGNyZWF0
ZU5ld1BhZ2UoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6OkZyYW1lSW5mbyYsIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYsIFdlYktp
dDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgY3JlYXRl
TmV3UGFnZUFzeW5jKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgQVBJOjpGcmFtZUluZm8mLCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBX
ZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhJiYsIFdURjo6RnVuY3Rpb248dm9pZChSZWZQdHI8
V2ViS2l0OjpXZWJQYWdlUHJveHk+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbDsKKyAg
ICAgICAgYm9vbCBjYW5DcmVhdGVOZXdQYWdlQXN5bmMoKSBmaW5hbDsKKyAgICAgICAgUmVmUHRy
PFdlYktpdDo6V2ViUGFnZVByb3h5PiBjcmVhdGVOZXdQYWdlQ29tbW9uKFdlYktpdDo6V2ViUGFn
ZVByb3h5KiwgQVBJOjpGcmFtZUluZm8mLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29u
c3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRh
JiYsIFdURjo6RnVuY3Rpb248dm9pZChSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKIAogICAgICAgICB2b2lkIGNsb3NlKFdlYktpdDo6V2ViUGFn
ZVByb3h5Kikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKFdlYktpdDo6V2ViUGFnZVByb3h5Kikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0JKHJldmlzaW9uIDIxOTg2MykKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE3NCw3ICsxNzQsNyBAQCBVSURlbGVnYXRlOjpVSUNsaWVudDo6flVJQ2xpZW50KCkKIHsK
IH0KIAotUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBVSURlbGVnYXRlOjpVSUNsaWVudDo6
Y3JlYXRlTmV3UGFnZUNvbW1vbihXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSwgQVBJOjpGcmFt
ZUluZm8mIHNvdXJjZUZyYW1lSW5mbywgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIGNv
bnN0IFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGEmIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4pPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQorUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBVSURlbGVnYXRlOjpV
SUNsaWVudDo6Y3JlYXRlTmV3UGFnZUNvbW1vbihXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSwg
QVBJOjpGcmFtZUluZm8mIHNvdXJjZUZyYW1lSW5mbywgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVz
LCBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhJiYgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIFdU
Rjo6RnVuY3Rpb248dm9pZChSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZS5nZXQoKTsKICAgICBBU1NFUlQoZGVsZWdhdGUpOwpAQCAtMTg0LDcgKzE4NCw3IEBAIFJl
ZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gVUlEZWxlZ2F0ZToKIAogICAgIGF1dG8gdXNlcklu
aXRpYXRlZEFjdGl2aXR5ID0gcGFnZS0+cHJvY2VzcygpLnVzZXJJbml0aWF0ZWRBY3Rpdml0eShu
YXZpZ2F0aW9uQWN0aW9uRGF0YS51c2VyR2VzdHVyZVRva2VuSWRlbnRpZmllcik7CiAgICAgYm9v
bCBzaG91bGRPcGVuQXBwTGlua3MgPSAhaG9zdHNBcmVFcXVhbChzb3VyY2VGcmFtZUluZm8ucmVx
dWVzdCgpLnVybCgpLCByZXF1ZXN0LnVybCgpKTsKLSAgICBhdXRvIGFwaU5hdmlnYXRpb25BY3Rp
b24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSwg
JnNvdXJjZUZyYW1lSW5mbywgbnVsbHB0ciwgcmVxdWVzdCwgV2ViQ29yZTo6VVJMKCksIHNob3Vs
ZE9wZW5BcHBMaW5rcywgdXNlckluaXRpYXRlZEFjdGl2aXR5KTsKKyAgICBhdXRvIGFwaU5hdmln
YXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShXVEZNb3ZlKG5hdmln
YXRpb25BY3Rpb25EYXRhKSwgJnNvdXJjZUZyYW1lSW5mbywgbnVsbHB0ciwgV1RGTW92ZShyZXF1
ZXN0KSwgV2ViQ29yZTo6VVJMKCksIHNob3VsZE9wZW5BcHBMaW5rcywgV1RGTW92ZSh1c2VySW5p
dGlhdGVkQWN0aXZpdHkpKTsKIAogICAgIGF1dG8gYXBpV2luZG93RmVhdHVyZXMgPSBBUEk6Oldp
bmRvd0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVyZXMpOwogCkBAIC0yMjEsNyArMjIxLDcg
QEAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBVSURlbGVnYXRlOgogICAgIHJldHVybiB3
ZWJWaWV3LT5fcGFnZS5nZXQoKTsKIH0KIAotUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBV
SURlbGVnYXRlOjpVSUNsaWVudDo6Y3JlYXRlTmV3UGFnZShXZWJLaXQ6OldlYlBhZ2VQcm94eSog
cGFnZSwgQVBJOjpGcmFtZUluZm8mIG9yaWdpbmF0aW5nRnJhbWVJbmZvLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVz
JiB3aW5kb3dGZWF0dXJlcywgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2
aWdhdGlvbkFjdGlvbkRhdGEpCitSZWZQdHI8V2ViUGFnZVByb3h5PiBVSURlbGVnYXRlOjpVSUNs
aWVudDo6Y3JlYXRlTmV3UGFnZShXZWJQYWdlUHJveHkqIHBhZ2UsIEFQSTo6RnJhbWVJbmZvJiBv
cmlnaW5hdGluZ0ZyYW1lSW5mbywgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwg
Y29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBOYXZpZ2F0aW9u
QWN0aW9uRGF0YSYmIG5hdmlnYXRpb25BY3Rpb25EYXRhKQogewogICAgIGlmICghbV91aURlbGVn
YXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRp
b25Gb3JOYXZpZ2F0aW9uQWN0aW9uV2luZG93RmVhdHVyZXMpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMjMwLDIxICsyMzAsMjQgQEAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBV
SURlbGVnYXRlOgogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmV0dXJuIGNyZWF0ZU5ld1BhZ2VDb21tb24ocGFnZSwgb3JpZ2luYXRpbmdGcmFtZUlu
Zm8sIHJlcXVlc3QsIHdpbmRvd0ZlYXR1cmVzLCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgbnVsbHB0
cik7CisgICAgcmV0dXJuIGNyZWF0ZU5ld1BhZ2VDb21tb24ocGFnZSwgb3JpZ2luYXRpbmdGcmFt
ZUluZm8sIFdURk1vdmUocmVxdWVzdCksIHdpbmRvd0ZlYXR1cmVzLCBXVEZNb3ZlKG5hdmlnYXRp
b25BY3Rpb25EYXRhKSwgbnVsbHB0cik7CiB9CiAKLWJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmNyZWF0ZU5ld1BhZ2VBc3luYyhXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSwgQVBJOjpGcmFt
ZUluZm8mIG9yaWdpbmF0aW5nRnJhbWVJbmZvLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJl
cywgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRh
dGEsIFdURjo6RnVuY3Rpb248dm9pZCAoUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5Pik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCitib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjYW5DcmVhdGVO
ZXdQYWdlQXN5bmMoKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb25Gb3JOYXZpZ2F0aW9uQWN0aW9u
V2luZG93RmVhdHVyZXNBc3luYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NyZWF0ZVdlYlZpZXdXaXRoQ29u
ZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rpb25XaW5kb3dGZWF0dXJlc0FzeW5jCisgICAgICAg
ICYmIG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworfQogCi0gICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOwotICAgIGlmICghZGVsZWdhdGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKK3ZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5l
d1BhZ2VBc3luYyhXZWJQYWdlUHJveHkqIHBhZ2UsIEFQSTo6RnJhbWVJbmZvJiBvcmlnaW5hdGlu
Z0ZyYW1lSW5mbywgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgY29uc3QgV2Vi
Q29yZTo6V2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBOYXZpZ2F0aW9uQWN0aW9uRGF0
YSYmIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBXVEY6OkZ1bmN0aW9uPHZvaWQoUmVmUHRyPFdlYlBh
Z2VQcm94eT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKGNhbkNyZWF0
ZU5ld1BhZ2VBc3luYygpKTsKKyAgICBBU1NFUlQobV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb25Gb3JOYXZpZ2F0aW9uQWN0
aW9uV2luZG93RmVhdHVyZXNBc3luYyk7CiAKLSAgICBjcmVhdGVOZXdQYWdlQ29tbW9uKHBhZ2Us
IG9yaWdpbmF0aW5nRnJhbWVJbmZvLCByZXF1ZXN0LCB3aW5kb3dGZWF0dXJlcywgbmF2aWdhdGlv
bkFjdGlvbkRhdGEsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgQVNTRVJUKGRlbGVnYXRl
KTsKIAotICAgIHJldHVybiB0cnVlOworICAgIGNyZWF0ZU5ld1BhZ2VDb21tb24ocGFnZSwgb3Jp
Z2luYXRpbmdGcmFtZUluZm8sIFdURk1vdmUocmVxdWVzdCksIHdpbmRvd0ZlYXR1cmVzLCBXVEZN
b3ZlKG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQoV2ViS2l0
OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgV2ViS2l0OjpXZWJG
cmFtZVByb3h5KiB3ZWJGcmFtZVByb3h5LCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGEmIHNlY3VyaXR5T3JpZ2luRGF0YSwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikK
</data>

          </attachment>
      

    </bug>

</bugzilla>