<?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>21918</bug_id>
          
          <creation_ts>2008-10-27 21:14:15 -0700</creation_ts>
          <short_desc>A JavaScript Exception abstraction</short_desc>
          <delta_ts>2008-12-04 14:39:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>mrowe</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>96836</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-10-27 21:14:15 -0700</bug_when>
    <thetext>To improve separation of concerns, an abstraction can be introduced to pass and query exception information in DOM manipulation code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96837</commentid>
    <comment_count>1</comment_count>
      <attachid>24705</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-10-27 21:19:29 -0700</bug_when>
    <thetext>Created attachment 24705
ExceptionContext patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96838</commentid>
    <comment_count>2</comment_count>
      <attachid>24705</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-10-27 22:51:06 -0700</bug_when>
    <thetext>Comment on attachment 24705
ExceptionContext patch

I really don&apos;t like this -- you&apos;re making inline functions no longer be inline, and are increasing the verbosity of a fairly standard concept (eg. methods that taken an execution context). In terms of code style ExceptionCaptcher class is only used in V8, yet is being included behind an ifdef in the &quot;cross platform&quot; part of the header.

At the very least ExceptionCapther should be in its own file, rather than creating new files which already have traces of ifdef hell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96872</commentid>
    <comment_count>3</comment_count>
      <attachid>24718</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-10-28 09:16:36 -0700</bug_when>
    <thetext>Created attachment 24718
Removed ExceptionCatcher, added inlines

You know, I woke up this morning and had exact same thought about ExceptionCatcher. Here&apos;s an updated patch, with it removed. I also added &quot;inline&quot; to all ExceptionContext methods, and hope that the compiler will agree with me that they are simple enough to be treated as such.

Let me know whatcha think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97102</commentid>
    <comment_count>4</comment_count>
      <attachid>24718</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-29 23:46:29 -0700</bug_when>
    <thetext>Comment on attachment 24718
Removed ExceptionCatcher, added inlines

&gt; +
&gt; +#include &lt;wtf/Noncopyable.h&gt;
&gt; +#include &quot;ScriptController.h&quot;
These should be sorted.

&gt; +
&gt; +typedef JSC::JSValue* JSException;
No JSException is being defined for V8 here.  I don&apos;t really see the point of this typedef since JSException is never used.

&gt; +#if USE(V8)
&gt; +class ExceptionCatcher;
What does an ExceptionCatcher do?  Why is necessary to store both it and the exception.

&gt; +    ExceptionContext(Node*);
&gt; +#if USE(V8)
&gt; +    ExceptionContext();
How is this empty constructor used.  Perhaps a link to the corresponding Chromium code would help.

&gt; +    bool hadException();
&gt; +    JSException exception() const;
This method seems to be unused.
&gt; +
&gt; +    // Returns a non-exception code object.
&gt; +    static JSException noException();
As does this one.

&gt; +
&gt; +private:
&gt; +#if USE(V8)
&gt; +    friend class ExceptionCatcher;
&gt; +    void setException(JSException exception) { m_exception = exception; }
&gt; +    void setExceptionCatcher(ExceptionCatcher*);
&gt; +    JSException m_exception;
&gt; +    ExceptionCatcher* m_exceptionCatcher;
&gt; +#elif USE(JSC)
&gt; +    JSC::ExecState* m_exec;
&gt; +#endif

This is a lot of engine specific code.  Can this be abstracted better?

It also seems like this is something that should work with other bindings as well.  So that a Objective-C NodeFilter could store a thrown exception as well.

r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97125</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-10-30 09:44:43 -0700</bug_when>
    <thetext>Sam, thanks for the irc conversation -- I think I have a pretty good idea on how to make this simpler and less engine-dependent. Patch coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97415</commentid>
    <comment_count>6</comment_count>
      <attachid>24847</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-11-02 10:12:47 -0800</bug_when>
    <thetext>Created attachment 24847
Platform independence with magic headers

Re-worked the patch to get rid of #ifdefs by using magic headers. This can also now be done with one big #ifdef at the top of ExceptionContext.h, but I took the scenic route, because it allows for more flexibility for other platforms to incorporate exception-carrying goodness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97417</commentid>
    <comment_count>7</comment_count>
      <attachid>24849</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-11-02 10:23:55 -0800</bug_when>
    <thetext>Created attachment 24849
Platform independence with magic headers

Cleaned up log entry, reordered project file, added ExceptionContextData.h to WebCore.vcproj</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97418</commentid>
    <comment_count>8</comment_count>
      <attachid>24847</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-11-02 10:25:36 -0800</bug_when>
    <thetext>Comment on attachment 24847
Platform independence with magic headers

Oops, forgot to obsolete the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97419</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-11-02 10:55:33 -0800</bug_when>
    <thetext>Also, corresponding Chromium reviews:

http://codereview.chromium.org/9018
http://codereview.chromium.org/9019
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97463</commentid>
    <comment_count>10</comment_count>
      <attachid>24849</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-03 09:30:27 -0800</bug_when>
    <thetext>Comment on attachment 24849
Platform independence with magic headers

&gt; --- /dev/null
&gt; +++ b/WebCore/dom/ExceptionContext.cpp
&gt; @@ -0,0 +1,39 @@
&gt; +/*
&gt; + * Copyright (C) 2008 Google Inc.
&gt; + * Copyright (C) 2008 Apple Inc. All rights reserved.
&gt; + *
&gt; + * This library is free software; you can redistribute it and/or
&gt; + * modify it under the terms of the GNU Library General Public
&gt; + * License as published by the Free Software Foundation; either
&gt; + * version 2 of the License, or (at your option) any later version.
&gt; + *
&gt; + * This library is distributed in the hope that it will be useful,
&gt; + * but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; + * Library General Public License for more details.
&gt; + *
&gt; + * You should have received a copy of the GNU Library General Public License
&gt; + * along with this library; see the file COPYING.LIB.  If not, write to
&gt; + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; + * Boston, MA 02110-1301, USA.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;ExceptionContext.h&quot;
&gt; +
&gt; +#include &quot;JSDOMBinding.h&quot;
&gt; +#include &quot;Node.h&quot;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +ExceptionContext::ExceptionContext(Node* node)
&gt; +    : m_data(execStateFromNode(node))
&gt; +{
&gt; +}
&gt; +
&gt; +bool ExceptionContext::hadException()
&gt; +{
&gt; +    return m_data-&gt;hadException();
&gt; +}
&gt; +
&gt; +}  // namespace WebCore

I don&apos;t understand this source file. It&apos;s in the &quot;dom&quot; directory, but it has JavaScriptCore-specific JavaScript code in it, calling execStateFromNode. How does that work?

I think the name ExceptionContext is a little misleading. To be clear, ExecState* is not an &quot;exception&quot; context for JavaScriptCore. It&apos;s more than that. It&apos;s both the context needed to execute more JavaScript code, and also, almost incidentally, a way to return the JavaScript exception to the caller. If we only wanted to give a way to return the JavaScript exception, we could just use an out parameter with a place to put the exception, but that wouldn&apos;t suffice because JavaScript execution requires more context than that. The comments in this new ExceptionContext class seem to be vague on this point, and the class name too.

&gt; +        ExceptionContext(Node* node);

It seems pretty mysterious what this constructor would do. I know, but only because I designed the old code, that this is going to figure out the correct JavaScript execution context given a DOM node. But if the class really was just an &quot;exception context&quot;, then you wouldn&apos;t need this argument. I also don&apos;t think that providing this as a constructor for an exception context is good encapsulation; it&apos;s more about how the DOM uses JavaScript than it is about the JavaScript machinery itself.

&gt; +        ExceptionContext(ExceptionContextData data) : m_data(data) {}

If ExecutionContext is going to be more than just a single ExceptionContextData, then I would think that it&apos;s a hidden implementation detail what ExceptionContextData is, and there shouldn&apos;t be a public constructor that takes one of them. If we&apos;re really going to make it public that ExceptionContextData is all that&apos;s inside an ExceptionContext, then I don&apos;t understand why we need both the ExceptionContext and ExceptionContextData types. Also if ExceptionContextData is any non-trivial object, I think we&apos;d want to pass const ExceptionContextData&amp;.

&gt; +        ~ExceptionContext() {}

This definition of the constructor should be omitted. The compiler will do the same thing if you don&apos;t declare a constructor at all.

&gt; +        ExceptionContextData data() const { return m_data; }
&gt; +        void setData(ExceptionContextData data) { m_data = data; }

Same comments apply here as in the constructor. I see no value added by the ExceptionContext class if it&apos;s just a holder for a single ExceptionContextData. Seems over-engineered. A typedef for ExecState* would accomplish the same thing.

Unless there&apos;s future plan for putting more into ExceptionContext I suggest just using typedef ExecState ExceptionContext; adding another class here isn&apos;t adding additional value.

I&apos;m going to say review- on this. I understand the need to make this code JavaScript-engine-independent, but I think it can be done either more simply than this, or in a more complete way.

A great patch would also make some progress on addressing the issue of propagating exceptions from languages other than JavaScript, such as Objective-C; but I guess I&apos;m not asking for that since I don&apos;t really see how to solve that problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99708</commentid>
    <comment_count>11</comment_count>
      <attachid>25364</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-11-21 14:59:02 -0800</bug_when>
    <thetext>Created attachment 25364
ScriptState (concept only)

I would like to get this right, so please bear with me.

It looks like for the purposes of carrying the exception information, we actually need only the non-CallFramey members of JSC::ExecState: the hadException(), exception() and friends. So, perhaps the right solution would be to introduce a ScriptState abstraction, which only exposes these methods?

See the attachment. There, I just typedef&apos;d ScriptState, but potentially, it seems logical to have it as a separate class with a callFrame() method, which then gives you the actual CallFrame info, i.e.:

  Script State --(has a)--&gt; Script CallFrame 

Does this make better sense? I plead for guidance and thought-sharing. I don&apos;t mind the hazing :)

Is the general direction that JSC::ExecState would eventually become JSC::CallFrame and at some point shed the globalData accessors?

In the context of Chromium, it would perfect to have a non JSC-specific class, which can be passed through WebCore to NodeFilter, NodeIterator, et al. and store exception information.

I don&apos;t know much about non-JS bindings, but would be happy to hear any ideas as well. It seems we need cover scenarios with Non-JS node filter, as well as JS-originated node filter, but non-JS iteration calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100173</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-24 23:20:27 -0800</bug_when>
    <thetext>&gt; ScriptState (concept only)

Concept seems reasonable to me.

Did you forget to attach ScriptState.h?

&gt; Is the general direction that JSC::ExecState would eventually become
&gt; JSC::CallFrame and at some point shed the globalData accessors?

ExecState is CallFrame today. Global data is accessed through the CallFrame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100241</commentid>
    <comment_count>13</comment_count>
      <attachid>25490</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-11-25 11:10:36 -0800</bug_when>
    <thetext>Created attachment 25490
Added ScriptState.h

Sorry, added ScriptState (see updated patch). I am currently trying to hack on MiniBrowser to introduce myself to the wondrous way of Objective-C in order to better understand how ScriptState could be used for carrying exception information across binding boundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100464</commentid>
    <comment_count>14</comment_count>
      <attachid>25541</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-11-26 15:31:53 -0800</bug_when>
    <thetext>Created attachment 25541
Script Patch v3 (with project changes)

I updated the patch with XCode and VC project changes. I think this is ready for review (no longer work-in-progress).

As the next step, I am working on making ScriptState more meaningful by introducing it into Obj-C bindings, drawing inspiration from eseidel&apos;s work on https://bugs.webkit.org/show_bug.cgi?id=18234.

But that&apos;s a whole &apos;nother story (and bug filed). 

BTW, if you know of any other bugs that deal with carrying exception information across binding boundaries, please let me know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100471</commentid>
    <comment_count>15</comment_count>
      <attachid>25541</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-26 15:57:41 -0800</bug_when>
    <thetext>Comment on attachment 25541
Script Patch v3 (with project changes)

ScriptState.h is in attachment 25490, but not attachment 25491. I&apos;m ready to r+, but it could be confusing to land, so please provide a final patch that includes all the project changes and ScriptState.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100486</commentid>
    <comment_count>16</comment_count>
      <attachid>25543</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-11-26 16:37:34 -0800</bug_when>
    <thetext>Created attachment 25543
ScriptState v4 (with ScriptState.h!)

git FAIL. Apparently, there&apos;s a big difference between &quot;git diff&quot; and &quot;git diff master&quot;!

Proper patch attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100487</commentid>
    <comment_count>17</comment_count>
      <attachid>25544</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-11-26 16:46:12 -0800</bug_when>
    <thetext>Created attachment 25544
ScriptState v4.1 (with ScriptState.h!)

There was a weird compatibility flag in the XCode project. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100946</commentid>
    <comment_count>18</comment_count>
      <attachid>25544</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-01 19:38:56 -0800</bug_when>
    <thetext>Comment on attachment 25544
ScriptState v4.1 (with ScriptState.h!)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101042</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-12-02 12:29:07 -0800</bug_when>
    <thetext>project file changes didn&apos;t apply cleanly. will look at this again in a bit.  dglazkov needs teh commit bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101366</commentid>
    <comment_count>20</comment_count>
      <attachid>25747</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-04 12:23:34 -0800</bug_when>
    <thetext>Created attachment 25747
ScriptState v5 (rebased to trunk)

Rebased to trunk for ease of landing. I am assuming since it&apos;s already r+&apos;d, it&apos;s just a matter of landing, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101367</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-12-04 12:26:38 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=25747) [review]
&gt; ScriptState v5 (rebased to trunk)
&gt; 
&gt; Rebased to trunk for ease of landing. I am assuming since it&apos;s already r+&apos;d,
&gt; it&apos;s just a matter of landing, right?

Yes, just needs landing.  I&apos;ll do that this afternoon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101376</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-12-04 12:52:32 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/bindings/js/JSDOMBinding.cpp
	M	WebCore/bindings/js/JSDOMBinding.h
	M	WebCore/bindings/js/JSNodeFilterCondition.h
	M	WebCore/dom/NodeFilter.cpp
	M	WebCore/dom/NodeFilter.h
	M	WebCore/dom/NodeFilterCondition.cpp
	M	WebCore/dom/NodeFilterCondition.h
	M	WebCore/dom/NodeIterator.cpp
	M	WebCore/dom/NodeIterator.h
	M	WebCore/dom/Traversal.cpp
	M	WebCore/dom/Traversal.h
	M	WebCore/dom/TreeWalker.cpp
	M	WebCore/dom/TreeWalker.h
Committed r39003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101397</commentid>
    <comment_count>23</comment_count>
      <attachid>25747</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-04 14:39:01 -0800</bug_when>
    <thetext>Comment on attachment 25747
ScriptState v5 (rebased to trunk)

Yes, that&apos;s right. No review needed for rebasing this. Next time you can just attach the newer patch with a comment -- you don&apos;t even *really* need to set the review flag.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24705</attachid>
            <date>2008-10-27 21:19:29 -0700</date>
            <delta_ts>2008-10-28 09:16:36 -0700</delta_ts>
            <desc>ExceptionContext patch</desc>
            <filename>ec.diff</filename>
            <type>text/plain</type>
            <size>34838</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGUwMjI4NS4uNTJkOWVlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAwOC0xMC0yNyAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBFeGNlcHRpb25Db250ZXh0LCBhbiBhYnN0
cmFjdGlvbiB3aGljaCBjYXJyaWVzIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiwKKyAgICAgICAgcHJv
ZHVjZWQgYnkgSmF2YVNjcmlwdC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05v
ZGVGaWx0ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjphY2Nl
cHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVJdGVyYXRvcjo6bmV4dE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdh
bGtlcjo6cGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6OmZpcnN0
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpKU1RyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpK
U1RyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxr
ZXI6Om5leHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9PYmpDTm9kZUZpbHRlckNvbmRpdGlv
bi5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok9iakNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHRO
b2RlKToKKyAgICAgICAgKiBkb20vRXhjZXB0aW9uQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RXhjZXB0aW9uQ29udGV4dDo6RXhjZXB0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0OjpoYWRFeGNlcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RXhjZXB0aW9uQ29udGV4dDo6bm9FeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RXhjZXB0aW9uQ29udGV4dDo6ZXhjZXB0aW9uKToKKyAgICAgICAgKiBkb20vRXhjZXB0aW9uQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2VwdGlvbkNvbnRleHQ6OkV4Y2Vw
dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RXhjZXB0aW9uQ29udGV4dDo6ZXhlYyk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0Ojp+RXhjZXB0aW9uQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0OjpzZXRFeGNlcHRpb24pOgorICAg
ICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVGaWx0ZXI6
OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmg6CisgICAgICAgICogZG9t
L05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUZpbHRlckNv
bmRpdGlvbjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogZG9tL05vZGVGaWx0ZXJDb25kaXRpb24u
aDoKKyAgICAgICAgKiBkb20vTm9kZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVJdGVyYXRvcjo6bmV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpw
cmV2aW91c05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuaDoKKyAgICAgICAgKiBk
b20vVHJhdmVyc2FsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYXZlcnNhbDo6YWNjZXB0Tm9k
ZSk6CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5oOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnBhcmVudE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpsYXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cHJl
dmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6Om5leHRTaWJsaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0Tm9kZSk6CisgICAgICAgICogZG9tL1RyZWVXYWxr
ZXIuaDoKKwogMjAwOC0xMC0yNyAgS2V2aW4gV2F0dGVycyAgPGtldmlud2F0dGVyc0BnbWFpbC5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2V2aW4gT2xsaXZpZXIuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA0ZjE5
ZjllLi42ZGNjOWFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTY1Niw2ICs2NTYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkJhc2UuaCBcCiAJV2ViQ29yZS9kb20vRXhjZXB0
aW9uQ29kZS5jcHAgXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaCBcCisJV2ViQ29yZS9k
b20vRXhjZXB0aW9uQ29udGV4dC5jcHAgXAorCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQu
aCBcCiAJV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAgXAogCVdlYkNvcmUvZG9tL0tleWJv
YXJkRXZlbnQuaCBcCiAJV2ViQ29yZS9kb20vTWFwcGVkQXR0cmlidXRlLmNwcCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmOGRj
NjQyLi43MDc2ZjYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS5wcm8KQEAgLTUzNyw2ICs1MzcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20v
RXZlbnRUYXJnZXROb2RlLmNwcCBcCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwIFwKICAgICBk
b20vRXhjZXB0aW9uQ29kZS5jcHAgXAorICAgIGRvbS9FeGNlcHRpb25Db250ZXh0LmNwcCBcCiAg
ICAgZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKICAgICBkb20vTWFwcGVkQXR0cmlidXRlLmNwcCBc
CiAgICAgZG9tL01lc3NhZ2VDaGFubmVsLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCBiMjE1NTdhLi5jYjEzYTcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTEwNzAyLDYgKzEwNzAyLDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxFeGNlcHRpb25Db250ZXh0LmNw
cCINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2Vf
UEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+
DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZG9tXEV4Y2VwdGlvbkNvbnRleHQuaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxFeGNlcHRpb25Db2Rl
LmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdkNWYzYzAuLmJhMGU3YWQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODYsNiArNDg2LDggQEAK
IAkJMzdBQ0NGNjkwREE0MTRFNzAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0FDQ0U2MjBEQTJBQTk2
MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCAqLzsgfTsKIAkJMzdGODE4RkQwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2Uu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThG
QzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovOyB9OworCQk0MTE1
MDM2MDBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTE1MDM1RTBFQjJCRTcxMDA5N0E5
QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgKi87IH07CisJCTQxMTUwMzYxMEVCMkJFNzEwMDk3
QTlCRCAvKiBFeGNlcHRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTE1MDM1RjBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29u
dGV4dC5oICovOyB9OwogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAq
LzsgfTsKIAkJNDQxNTI5MkYwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQx
NTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwICovOyB9
OwogCQk0NDFCMDU1NjBDRDc3OUI2MDA3QzFGMTggLyogRE9NQ1NTU3R5bGVTaGVldFByaXZhdGUu
aCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0MjlBQUVBMENCODREQzcwMDc2NDdDNSAvKiBET01DU1NTdHlsZVNoZWV0UHJpdmF0
ZS5oICovOyB9OwpAQCAtNTIzMSw2ICs1MjMzLDggQEAKIAkJMzdBQ0NFNjIwREEyQUE5NjAwODlF
NjAyIC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGb250RGVzY3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29y
ZVVSTFJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29yZVVSTFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTE1
MDM1RTBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25Db250ZXh0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDExNTAzNUYwRUIyQkU3MTAwOTdBOUJEIC8qIEV4Y2VwdGlv
bkNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBD
NEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0MTUyOTJEMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDI5QUFFQTBD
Qjg0REM3MDA3NjQ3QzUgLyogRE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzkwMyw2ICsxMzkwNyw4IEBACiAJCQkJQkM2MEQ4RjEw
RDJBMTFFMDAwQjk5MThGIC8qIEV4Y2VwdGlvbkJhc2UuaCAqLywKIAkJCQk5MzgzMUI1NjBEMDg3
RDYwMDBFNUM5ODQgLyogRXhjZXB0aW9uQ29kZS5jcHAgKi8sCiAJCQkJOTM1RkJDRjEwOUJBMTQz
QjAwRTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCAqLywKKwkJCQk0MTE1MDM1RTBFQjJCRTcxMDA5
N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgKi8sCisJCQkJNDExNTAzNUYwRUIyQkU3MTAw
OTdBOUJEIC8qIEV4Y2VwdGlvbkNvbnRleHQuaCAqLywKIAkJCQk4NTAzMUIyRDBBNDRFRkM3MDBG
OTkyRTAgLyogS2V5Ym9hcmRFdmVudC5jcHAgKi8sCiAJCQkJODUwMzFCMkUwQTQ0RUZDNzAwRjk5
MkUwIC8qIEtleWJvYXJkRXZlbnQuaCAqLywKIAkJCQkxNENGN0MyMDA5RjcxMTA2MDBFQjM2NjUg
LyogS2V5Ym9hcmRFdmVudC5pZGwgKi8sCkBAIC0xNjE1NCw2ICsxNjE2MCw3IEBACiAJCQkJQkNG
RjY0OTIwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aFNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxQzM2QzAzMEVCMDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDNzA1MjEwRUIxODE1NjAwQjkwQUQ4IC8qIEF0b21pY1N0cmluZ0hhc2gu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQxMTUwMzYxMEVCMkJFNzEwMDk3QTlCRCAvKiBFeGNlcHRp
b25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MDM5LDYgKzE4MDQ2LDcgQEAKIAkJCQlC
Q0U2NUJFQTBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRTY1RDMyMEVBRDEyMTEwMDdFNDUzMyAvKiBUaGVtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMUMzNkNCRDBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNDExNTAzNjAwRUIyQkU3MTAwOTdBOUJEIC8qIEV4Y2VwdGlvbkNvbnRl
eHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHAKaW5kZXggYjQ2NTExNS4uOTc3NGE4YiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTm9kZUZpbHRlckNvbmRpdGlvbi5oIgogCisj
aW5jbHVkZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1
ZGUgIkpTTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKQEAgLTQyLDcgKzQz
LDcgQEAgdm9pZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmsoKQogICAgICAgICBtX2ZpbHRl
ci0+bWFyaygpOwogfQogCi1zaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIGZpbHRlck5vZGUpIGNvbnN0CitzaG9ydCBKU05v
ZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoRXhjZXB0aW9uQ29udGV4dCogY29udGV4dCwg
Tm9kZSogZmlsdGVyTm9kZSkgY29uc3QKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAKQEAg
LTUxLDYgKzUyLDcgQEAgc2hvcnQgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBOb2RlKiBmaWx0ZXJOb2RlKQogICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBU
OwogCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBjb250ZXh0LT5leGVjKCk7CiAgICAvLyBU
aGUgZXhlYyBhcmd1bWVudCBoZXJlIHNob3VsZCBvbmx5IGJlIG51bGwgaWYgdGhpcyB3YXMgY2Fs
bGVkIGZyb20gYQogICAgLy8gbm9uLUphdmFTY3JpcHQgbGFuZ3VhZ2UsIGFuZCB0aGlzIGlzIGEg
SmF2YVNjcmlwdCBmaWx0ZXIsIGFuZCB0aGUgZG9jdW1lbnQKICAgIC8vIGluIHF1ZXN0aW9uIGlz
IG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIGZyYW1lLiBJbiB0aGF0IGNhc2UsIHdlJ3JlIGdvaW5n
IHRvCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlv
bi5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAppbmRleCBj
MDQ5NTQyLi45MmEwNWQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZh
dGU6CiAgICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihKU0M6OkpTVmFsdWUqIGZpbHRlcik7
CiAKLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9k
ZSopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoRXhjZXB0aW9uQ29u
dGV4dCosIE5vZGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAogICAg
ICAgICBKU0M6OkpTVmFsdWUqIG1fZmlsdGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDdXN0b20uY3BwCmluZGV4IDM1MTA2MmIuLjE2ZDRlZDEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJKU05vZGVGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJKU05vZGVGaWx0
ZXJDb25kaXRpb24uaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCkBAIC00Myw3ICs0NCw4IEBA
IHZvaWQgSlNOb2RlRmlsdGVyOjptYXJrKCkKIAogSlNWYWx1ZSogSlNOb2RlRmlsdGVyOjphY2Nl
cHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgaW1wbCgpLT5hY2NlcHROb2RlKGV4ZWMsIHRvTm9kZShhcmdzLmF0
KGV4ZWMsIDApKSkpOworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChleGVjKTsKKyAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgaW1wbCgpLT5hY2NlcHROb2RlKCZjb250ZXh0LCB0b05vZGUo
YXJncy5hdChleGVjLCAwKSkpKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVG
aWx0ZXIoSlNWYWx1ZSogdmFsdWUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0
b3JDdXN0b20uY3BwCmluZGV4IDQ0NWM4Y2IuLjhhYTFkZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNOb2RlSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJOb2RlLmgi
CiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgpAQCAtNDAsNyArNDEsOCBAQCB2b2lkIEpTTm9kZUl0
ZXJhdG9yOjptYXJrKCkKIEpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPm5leHROb2RlKGV4ZWMsIGVjKTsK
KyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQoZXhlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5v
ZGUgPSBpbXBsKCktPm5leHROb2RlKCZjb250ZXh0LCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwpAQCAtNTUsNyArNTcsOCBAQCBKU1ZhbHVlKiBKU05vZGVJdGVyYXRvcjo6bmV4dE5vZGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogSlNWYWx1ZSogSlNOb2RlSXRl
cmF0b3I6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBp
bXBsKCktPnByZXZpb3VzTm9kZShleGVjLCBlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250
ZXh0KGV4ZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05vZGUo
JmNvbnRleHQsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKaW5kZXggOTgyMmUxYS4uYTVmYzIzZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcApAQCAtMjAsNiArMjAsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVHJlZVdhbGtlci5oIgogCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUg
Ik5vZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCkBAIC0zOSw3ICs0MCw4IEBAIHZvaWQg
SlNUcmVlV2Fsa2VyOjptYXJrKCkKICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cGFyZW50
Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgTm9kZSog
bm9kZSA9IGltcGwoKS0+cGFyZW50Tm9kZShleGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNv
bnRleHQoZXhlYyk7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+cGFyZW50Tm9kZSgmY29udGV4
dCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKQEAgLTQ3LDcgKzQ5LDggQEAg
SlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgTm9kZSogbm9kZSA9
IGltcGwoKS0+Zmlyc3RDaGlsZChleGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQo
ZXhlYyk7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+Zmlyc3RDaGlsZCgmY29udGV4dCk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKQEAgLTU1LDcgKzU4LDggQEAgSlNWYWx1
ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgp
LT5sYXN0Q2hpbGQoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOwor
ICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPmxhc3RDaGlsZCgmY29udGV4dCk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKQEAgLTYzLDcgKzY3LDggQEAgSlNWYWx1ZSogSlNUcmVl
V2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dFNp
YmxpbmcoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOworICAgIE5v
ZGUqIG5vZGUgPSBpbXBsKCktPm5leHRTaWJsaW5nKCZjb250ZXh0KTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVy
biB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNzEsNyArNzYsOCBAQCBKU1ZhbHVlKiBKU1RyZWVXYWxr
ZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKICAg
ICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2
aW91c1NpYmxpbmcoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOwor
ICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzU2libGluZygmY29udGV4dCk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKQEAgLTc5LDE1ICs4NSwxNyBAQCBKU1ZhbHVl
KiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiAgICAgCiBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgTm9kZSogbm9kZSA9
IGltcGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMpOworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4
dChleGVjKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05vZGUoJmNvbnRleHQp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CiB9Ci0gICAgCisKIEpTVmFsdWUq
IEpTVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPm5leHROb2RlKGV4ZWMpOworICAgIEV4
Y2VwdGlvbkNvbnRleHQgY29udGV4dChleGVjKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5u
ZXh0Tm9kZSgmY29udGV4dCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9PYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKaW5kZXgg
ZTEzNmJjNC4uNDJmNDM0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNO
b2RlRmlsdGVyQ29uZGl0aW9uLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2Rl
RmlsdGVyQ29uZGl0aW9uLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgRXhjZXB0aW9uQ29udGV4dDsKIAogICAgIGNs
YXNzIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIE5vZGVGaWx0ZXJDb25kaXRpb24g
ewogICAgIHB1YmxpYzoKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbihmaWx0
ZXIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShKU0M6
OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHRO
b2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbihpZCA8RE9NTm9kZUZpbHRlcj4gZmlsdGVyKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29uZGl0aW9u
Lm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tCmlu
ZGV4IDk4MmNmZTAuLjBiOGJmZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9P
YmpDTm9kZUZpbHRlckNvbmRpdGlvbi5tbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL29iamMvT2Jq
Q05vZGVGaWx0ZXJDb25kaXRpb24ubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIk9iakNO
b2RlRmlsdGVyQ29uZGl0aW9uLmgiCiAKICNpbXBvcnQgIkRPTU5vZGVGaWx0ZXIuaCIKKyNpbXBv
cnQgIkV4Y2VwdGlvbkNvbnRleHQuaCIKICNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2lt
cG9ydCAiTm9kZUZpbHRlci5oIgogCkBAIC0zNyw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgT2JqQ05vZGVGaWx0ZXJDb25kaXRp
b246OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiwgTm9kZSogbm9kZSkgY29uc3QKK3Nob3J0IE9iakNO
b2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKiBu
b2RlKSBjb25zdAogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6
OkZJTFRFUl9SRUpFQ1Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Db250ZXh0
LmNwcCBiL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmEwOWFjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Rv
bS9FeGNlcHRpb25Db250ZXh0LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29udGV4dC5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiTm9k
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4Y2VwdGlvbkNvbnRleHQ6OkV4Y2VwdGlv
bkNvbnRleHQoTm9kZSogbm9kZSkKKyAgICA6IG1fZXhlYyhleGVjU3RhdGVGcm9tTm9kZShub2Rl
KSkKK3sKK30KKworYm9vbCBFeGNlcHRpb25Db250ZXh0OjpoYWRFeGNlcHRpb24oKQoreworICAg
IHJldHVybiBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpOworfQorCitKU0V4Y2VwdGlvbiBFeGNlcHRp
b25Db250ZXh0Ojpub0V4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTRXhjZXB0
aW9uIEV4Y2VwdGlvbkNvbnRleHQ6OmV4Y2VwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
ZXhlYy0+ZXhjZXB0aW9uKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Db250ZXh0LmggYi9XZWJDb3JlL2RvbS9FeGNlcHRp
b25Db250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlMGNhMgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQuaApAQCAtMCww
ICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEV4
Y2VwdGlvbkNvbnRleHRfaAorI2RlZmluZSBFeGNlcHRpb25Db250ZXh0X2gKKworI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKworI2lm
IFVTRShKU0MpCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKwordHlwZWRl
ZiBKU0M6OkpTVmFsdWUqIEpTRXhjZXB0aW9uOworI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBOb2RlOworI2lmIFVTRShWOCkKK2NsYXNzIEV4Y2VwdGlvbkNhdGNoZXI7
CisjZW5kaWYKKworLy8gUHJvdmlkZXMgY29udGV4dCBvZiBhbiBleGNlcHRpb24uIFRoaXMgY2xh
c3MgaXMgYW4gYWJzdHJhY3Rpb24gb2YgSlNDJ3MKKy8vIEV4ZWNTdGF0ZS4gSW4gVjgsIGl0cyBw
dXJwb3NlIGlzIHRvIGNhcnJ5IGFsb25nIHRoZSBleGNlcHRpb25zIGNhcHR1cmVkCisvLyBieSB0
aGUgRXhjZXB0aW9uQ2F0Y2hlci4KK2NsYXNzIEV4Y2VwdGlvbkNvbnRleHQgOiBOb25jb3B5YWJs
ZSB7CitwdWJsaWM6CisgICAgRXhjZXB0aW9uQ29udGV4dChOb2RlKik7CisjaWYgVVNFKFY4KQor
ICAgIEV4Y2VwdGlvbkNvbnRleHQoKTsKKyNlbGlmIFVTRShKU0MpCisgICAgRXhjZXB0aW9uQ29u
dGV4dChKU0M6OkV4ZWNTdGF0ZSogZXhlYykgOiBtX2V4ZWMoZXhlYykge30KKyAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYygpIGNvbnN0IHsgcmV0dXJuIG1fZXhlYzsgfQorI2VuZGlmCisgICAgfkV4
Y2VwdGlvbkNvbnRleHQoKSB7fQorCisgICAgYm9vbCBoYWRFeGNlcHRpb24oKTsKKyAgICBKU0V4
Y2VwdGlvbiBleGNlcHRpb24oKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgYSBub24tZXhjZXB0
aW9uIGNvZGUgb2JqZWN0LgorICAgIHN0YXRpYyBKU0V4Y2VwdGlvbiBub0V4Y2VwdGlvbigpOwor
Citwcml2YXRlOgorI2lmIFVTRShWOCkKKyAgICBmcmllbmQgY2xhc3MgRXhjZXB0aW9uQ2F0Y2hl
cjsKKyAgICB2b2lkIHNldEV4Y2VwdGlvbihKU0V4Y2VwdGlvbiBleGNlcHRpb24pIHsgbV9leGNl
cHRpb24gPSBleGNlcHRpb247IH0KKyAgICB2b2lkIHNldEV4Y2VwdGlvbkNhdGNoZXIoRXhjZXB0
aW9uQ2F0Y2hlciopOworICAgIEpTRXhjZXB0aW9uIG1fZXhjZXB0aW9uOworICAgIEV4Y2VwdGlv
bkNhdGNoZXIqIG1fZXhjZXB0aW9uQ2F0Y2hlcjsKKyNlbGlmIFVTRShKU0MpCisgICAgSlNDOjpF
eGVjU3RhdGUqIG1fZXhlYzsKKyNlbmRpZgorfTsKKworI2lmIFVTRShWOCkKKy8vIEEgd3JhcHBl
ciBhcm91bmQgdjg6OlRyeUNhdGNoIGhlbHBlciBpbiBvcmRlciB0byBmYWNpbGl0YXRlIHVwZGF0
aW5nCisvLyBFeGNlcHRpb25Db250ZXh0IHdpdGggdGhlIGxhdGVzdCBleGNlcHRpb25zIHRoYXQg
bWF5IGhhdmUgb2NjdXJyZWQuCitjbGFzcyBFeGNlcHRpb25DYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICBFeGNlcHRpb25DYXRjaGVyKEV4Y2VwdGlvbkNvbnRleHQqKTsKKyAgICB+RXhjZXB0aW9uQ2F0
Y2hlcigpOworICAgIHZvaWQgdXBkYXRlQ29udGV4dCgpOworICAgIHZvaWQgZGV0YWNoQ29udGV4
dCgpOworCitwcml2YXRlOgorICAgIEV4Y2VwdGlvbkNvbnRleHQqIG1fY29udGV4dDsKKyAgICB2
ODo6VHJ5Q2F0Y2ggbV9jYXRjaGVyOworfTsKKyNlbmRpZgorCit9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgIC8vICFkZWZpbmVkKEV4Y2VwdGlvbkNvbnRleHRfaCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5j
cHAKaW5kZXggMDY5Zjg5OC4uN2UwZmI1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZp
bHRlci5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKQEAgLTI1LDE3ICsyNSwy
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSA8
a2pzL0V4ZWNTdGF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXNob3J0IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVjLCBO
b2RlKiBub2RlKSBjb25zdAorc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGNlcHRpb25D
b250ZXh0KiBleGVjLCBOb2RlKiBub2RlKSBjb25zdAogewogICAgIC8vIGNhc3QgdG8gc2hvcnQg
c2lsZW5jZXMgImVudW1lcmFsIGFuZCBub24tZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJu
aW5nCiAgICAgcmV0dXJuIG1fY29uZGl0aW9uID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUoZXhl
Yywgbm9kZSkgOiBzdGF0aWNfY2FzdDxzaG9ydD4oRklMVEVSX0FDQ0VQVCk7CiB9CiAKK3Nob3J0
IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBFeGNlcHRp
b25Db250ZXh0IGNvbnRleHQobm9kZSk7CisgICAgcmV0dXJuIGFjY2VwdE5vZGUoJmNvbnRleHQs
IG5vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9Ob2RlRmlsdGVyLmggYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKaW5kZXggNDdkMGE0
YS4uZWFkN2EwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCisrKyBiL1dl
YkNvcmUvZG9tL05vZGVGaWx0ZXIuaApAQCAtMjUsMTMgKzI1LDE0IEBACiAjaWZuZGVmIE5vZGVG
aWx0ZXJfaAogI2RlZmluZSBOb2RlRmlsdGVyX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIk5vZGVGaWx0ZXJDb25kaXRpb24uaCIKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CisgICAgY2xhc3MgRXhjZXB0aW9uQ29udGV4dDsKKwogICAgIGNsYXNzIE5vZGVGaWx0ZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxOb2RlRmlsdGVyPiB7CiAgICAgcHVibGljOgogICAgICAgICAvKioK
QEAgLTcxLDExICs3MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE5vZGVGaWx0ZXIoY29uZGl0aW9uKSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAg
ICAgICBzaG9ydCBhY2NlcHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKikgY29uc3Q7CiAg
ICAgICAgIHZvaWQgbWFyaygpIHsgbV9jb25kaXRpb24tPm1hcmsoKTsgfTsKIAogICAgICAgICAv
LyBGb3Igbm9uLUpTIGJpbmRpbmdzLiBTaWxlbnRseSBpZ25vcmVzIHRoZSBKYXZhU2NyaXB0IGV4
Y2VwdGlvbiBpZiBhbnkuCi0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29u
c3QgeyByZXR1cm4gYWNjZXB0Tm9kZShleGVjU3RhdGVGcm9tTm9kZShub2RlKSwgbm9kZSk7IH0K
KyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiBub2RlKSBjb25zdDsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIE5vZGVGaWx0ZXIoUGFzc1JlZlB0cjxOb2RlRmlsdGVyQ29uZGl0aW9uPiBj
b25kaXRpb24pIDogbV9jb25kaXRpb24oY29uZGl0aW9uKSB7IH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNv
bmRpdGlvbi5jcHAKaW5kZXggNzQ2NzdiNy4uZTQyMTQ5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9k
b20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNv
bmRpdGlvbi5jcHAKQEAgLTI3LDExICsyNywxMSBAQAogCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5o
IgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXNob3J0
IE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0
CitjbGFzcyBFeGNlcHRpb25Db250ZXh0OworCitzaG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9uOjph
Y2NlcHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKikgY29uc3QKIHsKICAgICByZXR1cm4g
Tm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05v
ZGVGaWx0ZXJDb25kaXRpb24uaCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaApp
bmRleCA2ZmNkZmE4Li40YWZkZGE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVy
Q29uZGl0aW9uLmgKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCkBAIC0y
NywxOCArMjcsMTUgQEAKIAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLW5hbWVzcGFj
ZSBKU0MgewotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CisgICAgY2xhc3MgRXhjZXB0aW9uQ29udGV4dDsKICAgICBjbGFzcyBOb2RlOwogCiAgICAgY2xh
c3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVGaWx0ZXJDb25k
aXRpb24+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRp
b24oKSB7IH0KLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRl
KiwgTm9kZSopIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEV4
Y2VwdGlvbkNvbnRleHQqLCBOb2RlKikgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
bWFyaygpIHsgfQogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRv
ci5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCmluZGV4IGJhZDEzMDMuLmVkZTMy
ZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vTm9kZUl0ZXJhdG9yLmNwcApAQCAtMjUsMTMgKzI1LDExIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlIDxranMvRXhlY1N0
YXRlLmg+CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIK
IAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOb2RlSXRl
cmF0b3I6Ok5vZGVQb2ludGVyOjpOb2RlUG9pbnRlcigpCkBAIC04Niw3ICs4NCw3IEBAIE5vZGVJ
dGVyYXRvcjo6fk5vZGVJdGVyYXRvcigpCiAgICAgcm9vdCgpLT5kb2N1bWVudCgpLT5kZXRhY2hO
b2RlSXRlcmF0b3IodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpu
ZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxO
b2RlPiBOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CkBAIC0xMTUsNyArMTEzLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBOb2Rl
SXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0
ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykK
K1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29u
dGV4dCogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsK
ICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKQEAgLTIyNiw1ICsyMjQsMTYgQEAgdm9p
ZCBOb2RlSXRlcmF0b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKE5vZGUqIHJlbW92ZWROb2RlLCBO
b2RlUG9pbnRlciYgcmVmZXJlbmMKICAgICB9CiB9CiAKK1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0
ZXJhdG9yOjpuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBFeGNlcHRpb25Db250
ZXh0IGNvbnRleHQocmVmZXJlbmNlTm9kZSgpKTsKKyAgICByZXR1cm4gbmV4dE5vZGUoJmNvbnRl
eHQsIGVjKTsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9k
ZShFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQocmVm
ZXJlbmNlTm9kZSgpKTsKKyAgICByZXR1cm4gcHJldmlvdXNOb2RlKCZjb250ZXh0LCBlYyk7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVJ
dGVyYXRvci5oIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKaW5kZXggODQyZTcxZC4uYzUz
YTAxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKKysrIGIvV2ViQ29y
ZS9kb20vTm9kZUl0ZXJhdG9yLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpZm5kZWYgTm9kZUl0ZXJh
dG9yX2gKICNkZWZpbmUgTm9kZUl0ZXJhdG9yX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJUcmF2ZXJzYWwuaCIKICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMzMsNiArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKyAgICBjbGFzcyBFeGNlcHRpb25Db250ZXh0OworCiAgICAgdHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKIAogICAgIGNsYXNzIE5vZGVJdGVyYXRvciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE5vZGVJdGVyYXRvcj4sIHB1YmxpYyBUcmF2ZXJzYWwgewpAQCAtNDMsOCArNDQsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KICAgICAgICAgfk5vZGVJdGVyYXRvcigpOwog
Ci0gICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gcHJldmlvdXNOb2RlKEpTQzo6
RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5l
eHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NS
ZWZQdHI8Tm9kZT4gcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgICAgIHZvaWQgZGV0YWNoKCk7CiAKICAgICAgICAgTm9kZSogcmVmZXJlbmNlTm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlTm9kZS5ub2RlLmdldCgpOyB9CkBAIC01NCw4
ICs1NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBub2RlV2lsbEJlUmVt
b3ZlZChOb2RlKik7CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkg
aWdub3JlcyB0aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBQYXNzUmVm
UHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBuZXh0Tm9kZShl
eGVjU3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KLSAgICAgICAgUGFzc1Jl
ZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZp
b3VzTm9kZShleGVjU3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAg
ICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAg
IFBhc3NSZWZQdHI8Tm9kZT4gcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIE5vZGVJdGVyYXRvcihQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25l
ZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJl
ZmVyZW5jZXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmNwcCBiL1dlYkNv
cmUvZG9tL1RyYXZlcnNhbC5jcHAKaW5kZXggYzJjOTFkNC4uMDVmYzg4ZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vVHJhdmVyc2FsLmNwcAorKysgYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3Bw
CkBAIC0yNSwxMSArMjUsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUcmF2
ZXJzYWwuaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRyYXZlcnNhbDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4g
bm9kZUZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQpAQCAtNDAsNyArMzksNyBA
QCBUcmF2ZXJzYWw6OlRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCB1bnNpZ25l
ZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPAogewogfQogCi1zaG9ydCBUcmF2ZXJzYWw6OmFjY2Vw
dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKSBjb25zdAorc2hvcnQgVHJhdmVyc2Fs
OjphY2NlcHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CiB7
CiAgICAgLy8gRklYTUU6IFRvIGhhbmRsZSBYTUwgcHJvcGVybHkgd2Ugd291bGQgaGF2ZSB0byBj
aGVjayBtX2V4cGFuZEVudGl0eVJlZmVyZW5jZXMuCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L1RyYXZlcnNhbC5oIGIvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKaW5kZXggNmU4NzEwMy4uMmFi
MGY0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKKysrIGIvV2ViQ29yZS9k
b20vVHJhdmVyc2FsLmgKQEAgLTI4LDEyICsyOCw5IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNz
IEV4ZWNTdGF0ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgRXhjZXB0
aW9uQ29udGV4dDsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vZGVGaWx0ZXI7CiAKQEAg
LTQ2LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAg
ICAgICBUcmF2ZXJzYWwoUGFzc1JlZlB0cjxOb2RlPiwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFz
c1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSAgICAg
ICAgc2hvcnQgYWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKKyAgICAg
ICAgc2hvcnQgYWNjZXB0Tm9kZShFeGNlcHRpb25Db250ZXh0KiwgTm9kZSopIGNvbnN0OwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKaW5k
ZXggNjZmYzhkMi4uYjI4Y2NiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5j
cHAKKysrIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKQEAgLTI1LDE0ICsyNSwxMiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRyZWVXYWxrZXIuaCIKIAotI2luY2x1ZGUg
PGtqcy9FeGVjU3RhdGUuaD4KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
Q29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogVHJlZVdhbGtlcjo6VHJlZVdhbGtlcihQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2Rl
LCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IGZpbHRlciwgYm9v
bCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQpAQCAtNTYsNyArNTQsNyBAQCBpbmxpbmUgTm9kZSog
VHJlZVdhbGtlcjo6c2V0Q3VycmVudChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCiAgICAgcmV0dXJu
IG1fY3VycmVudC5nZXQoKTsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShFeGVj
U3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4Y2VwdGlvbkNvbnRl
eHQqIGV4ZWMpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgd2hp
bGUgKG5vZGUgIT0gcm9vdCgpKSB7CkBAIC03Miw3ICs3MCw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6
OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBU
cmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6
OmZpcnN0Q2hpbGQoRXhjZXB0aW9uQ29udGV4dCogZXhlYykKIHsKICAgICBmb3IgKFJlZlB0cjxO
b2RlPiBub2RlID0gbV9jdXJyZW50LT5maXJzdENoaWxkKCk7IG5vZGU7ICkgewogICAgICAgICBz
aG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKQEAg
LTEwNSw3ICsxMDMsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4
ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZChFeGNlcHRpb25Db250
ZXh0KiBleGVjKQogewogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmxh
c3RDaGlsZCgpOyBub2RlOyApIHsKICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFj
Y2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7CkBAIC0xMzgsNyArMTM2LDcgQEAgTm9kZSogVHJl
ZVdhbGtlcjo6bGFzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gMDsKIH0KIAot
Tm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUq
IFRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhFeGNlcHRpb25Db250ZXh0KiBleGVjKQogewog
ICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIGlmIChub2RlID09IHJvb3Qo
KSkKQEAgLTE3NCw3ICsxNzIsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmco
RXhlY1N0YXRlKiBleGVjKQogICAgIH0KIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxp
bmcoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoRXhjZXB0
aW9uQ29udGV4dCogZXhlYykKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsK
ICAgICBpZiAobm9kZSA9PSByb290KCkpCkBAIC0yMTAsNyArMjA4LDcgQEAgTm9kZSogVHJlZVdh
bGtlcjo6bmV4dFNpYmxpbmcoRXhlY1N0YXRlKiBleGVjKQogICAgIH0KIH0KIAotTm9kZSogVHJl
ZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6
OnByZXZpb3VzTm9kZShFeGNlcHRpb25Db250ZXh0KiBleGVjKQogewogICAgIFJlZlB0cjxOb2Rl
PiBub2RlID0gbV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9IHJvb3QoKSkgewpAQCAtMjQ5
LDcgKzI0Nyw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6Om5leHROb2RlKEV4ZWNT
dGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6Om5leHROb2RlKEV4Y2VwdGlvbkNvbnRleHQq
IGV4ZWMpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiBDaGlsZHJlbjoK
QEAgLTI3Niw0ICsyNzQsNDYgQEAgQ2hpbGRyZW46CiAgICAgcmV0dXJuIDA7CiB9CiAKK05vZGUq
IFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoKQoreworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4
dChtX2N1cnJlbnQuZ2V0KCkpOworICAgIHJldHVybiBwYXJlbnROb2RlKCZjb250ZXh0KTsKK30K
KworTm9kZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZCgpCit7CisgICAgRXhjZXB0aW9uQ29udGV4
dCBjb250ZXh0KG1fY3VycmVudC5nZXQoKSk7CisgICAgcmV0dXJuIGZpcnN0Q2hpbGQoJmNvbnRl
eHQpOworfQorCitOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoKQoreworICAgIEV4Y2VwdGlv
bkNvbnRleHQgY29udGV4dChtX2N1cnJlbnQuZ2V0KCkpOworICAgIHJldHVybiBsYXN0Q2hpbGQo
JmNvbnRleHQpOworfQorCitOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoKQorewor
ICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChtX2N1cnJlbnQuZ2V0KCkpOworICAgIHJldHVy
biBwcmV2aW91c1NpYmxpbmcoJmNvbnRleHQpOworfQorCitOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0
U2libGluZygpCit7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KG1fY3VycmVudC5nZXQo
KSk7CisgICAgcmV0dXJuIG5leHRTaWJsaW5nKCZjb250ZXh0KTsKK30KKworTm9kZSogVHJlZVdh
bGtlcjo6cHJldmlvdXNOb2RlKCkKK3sKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQobV9j
dXJyZW50LmdldCgpKTsKKyAgICByZXR1cm4gcHJldmlvdXNOb2RlKCZjb250ZXh0KTsKK30KKwor
Tm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoKQoreworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29u
dGV4dChtX2N1cnJlbnQuZ2V0KCkpOworICAgIHJldHVybiBuZXh0Tm9kZSgmY29udGV4dCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyZWVX
YWxrZXIuaCBiL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaAppbmRleCAzNDhmZjk0Li41Y2M1ZjI1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgKKysrIGIvV2ViQ29yZS9kb20v
VHJlZVdhbGtlci5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIFRyZWVXYWxrZXJfaAogI2Rl
ZmluZSBUcmVlV2Fsa2VyX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAi
VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ1LDIyICs0NSwy
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50LmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0Q3VycmVudE5v
ZGUoUGFzc1JlZlB0cjxOb2RlPiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIE5vZGUqIHBh
cmVudE5vZGUoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogZmlyc3RDaGlsZChKU0M6
OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoSlNDOjpFeGVjU3RhdGUqKTsK
LSAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAg
IE5vZGUqIG5leHRTaWJsaW5nKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIHByZXZp
b3VzTm9kZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBuZXh0Tm9kZShKU0M6OkV4
ZWNTdGF0ZSopOworICAgICAgICBOb2RlKiBwYXJlbnROb2RlKEV4Y2VwdGlvbkNvbnRleHQqKTsK
KyAgICAgICAgTm9kZSogZmlyc3RDaGlsZChFeGNlcHRpb25Db250ZXh0Kik7CisgICAgICAgIE5v
ZGUqIGxhc3RDaGlsZChFeGNlcHRpb25Db250ZXh0Kik7CisgICAgICAgIE5vZGUqIHByZXZpb3Vz
U2libGluZyhFeGNlcHRpb25Db250ZXh0Kik7CisgICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKEV4
Y2VwdGlvbkNvbnRleHQqKTsKKyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNv
bnRleHQqKTsKKyAgICAgICAgTm9kZSogbmV4dE5vZGUoRXhjZXB0aW9uQ29udGV4dCopOwogCiAg
ICAgICAgIC8vIEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFT
Y3JpcHQgZXhjZXB0aW9uIGlmIGFueS4KLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpIHsgcmV0
dXJuIHBhcmVudE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAg
ICAgICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoZXhlY1N0YXRlRnJv
bU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbGFzdENoaWxkKCkgeyBy
ZXR1cm4gbGFzdENoaWxkKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0g
ICAgICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIHsgcmV0dXJuIHByZXZpb3VzU2libGluZyhl
eGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBuZXh0
U2libGluZygpIHsgcmV0dXJuIG5leHRTaWJsaW5nKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVu
dC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgcmV0dXJuIHByZXZp
b3VzTm9kZShleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBO
b2RlKiBuZXh0Tm9kZSgpIHsgcmV0dXJuIG5leHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3Vy
cmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKTsKKyAgICAgICAgTm9k
ZSogZmlyc3RDaGlsZCgpOworICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoKTsKKyAgICAgICAgTm9k
ZSogcHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKCk7CisgICAg
ICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpOworICAgICAgICBOb2RlKiBuZXh0Tm9kZSgpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgVHJlZVdhbGtlcihQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25l
ZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJl
ZmVyZW5jZXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24718</attachid>
            <date>2008-10-28 09:16:36 -0700</date>
            <delta_ts>2008-11-02 10:12:47 -0800</delta_ts>
            <desc>Removed ExceptionCatcher, added inlines</desc>
            <filename>ec.diff</filename>
            <type>text/plain</type>
            <size>34433</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGUwMjI4NS4uNTJkOWVlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAwOC0xMC0yNyAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBFeGNlcHRpb25Db250ZXh0LCBhbiBhYnN0
cmFjdGlvbiB3aGljaCBjYXJyaWVzIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiwKKyAgICAgICAgcHJv
ZHVjZWQgYnkgSmF2YVNjcmlwdC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05v
ZGVGaWx0ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjphY2Nl
cHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVJdGVyYXRvcjo6bmV4dE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdh
bGtlcjo6cGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6OmZpcnN0
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpKU1RyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpK
U1RyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxr
ZXI6Om5leHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9PYmpDTm9kZUZpbHRlckNvbmRpdGlv
bi5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok9iakNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHRO
b2RlKToKKyAgICAgICAgKiBkb20vRXhjZXB0aW9uQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RXhjZXB0aW9uQ29udGV4dDo6RXhjZXB0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0OjpoYWRFeGNlcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RXhjZXB0aW9uQ29udGV4dDo6bm9FeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RXhjZXB0aW9uQ29udGV4dDo6ZXhjZXB0aW9uKToKKyAgICAgICAgKiBkb20vRXhjZXB0aW9uQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2VwdGlvbkNvbnRleHQ6OkV4Y2Vw
dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RXhjZXB0aW9uQ29udGV4dDo6ZXhlYyk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0Ojp+RXhjZXB0aW9uQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0OjpzZXRFeGNlcHRpb24pOgorICAg
ICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVGaWx0ZXI6
OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmg6CisgICAgICAgICogZG9t
L05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUZpbHRlckNv
bmRpdGlvbjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogZG9tL05vZGVGaWx0ZXJDb25kaXRpb24u
aDoKKyAgICAgICAgKiBkb20vTm9kZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVJdGVyYXRvcjo6bmV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpw
cmV2aW91c05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuaDoKKyAgICAgICAgKiBk
b20vVHJhdmVyc2FsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYXZlcnNhbDo6YWNjZXB0Tm9k
ZSk6CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5oOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnBhcmVudE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpsYXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cHJl
dmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6Om5leHRTaWJsaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0Tm9kZSk6CisgICAgICAgICogZG9tL1RyZWVXYWxr
ZXIuaDoKKwogMjAwOC0xMC0yNyAgS2V2aW4gV2F0dGVycyAgPGtldmlud2F0dGVyc0BnbWFpbC5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2V2aW4gT2xsaXZpZXIuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA0ZjE5
ZjllLi42ZGNjOWFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTY1Niw2ICs2NTYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkJhc2UuaCBcCiAJV2ViQ29yZS9kb20vRXhjZXB0
aW9uQ29kZS5jcHAgXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaCBcCisJV2ViQ29yZS9k
b20vRXhjZXB0aW9uQ29udGV4dC5jcHAgXAorCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQu
aCBcCiAJV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAgXAogCVdlYkNvcmUvZG9tL0tleWJv
YXJkRXZlbnQuaCBcCiAJV2ViQ29yZS9kb20vTWFwcGVkQXR0cmlidXRlLmNwcCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmOGRj
NjQyLi43MDc2ZjYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS5wcm8KQEAgLTUzNyw2ICs1MzcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20v
RXZlbnRUYXJnZXROb2RlLmNwcCBcCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwIFwKICAgICBk
b20vRXhjZXB0aW9uQ29kZS5jcHAgXAorICAgIGRvbS9FeGNlcHRpb25Db250ZXh0LmNwcCBcCiAg
ICAgZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKICAgICBkb20vTWFwcGVkQXR0cmlidXRlLmNwcCBc
CiAgICAgZG9tL01lc3NhZ2VDaGFubmVsLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCBiMjE1NTdhLi5jYjEzYTcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTEwNzAyLDYgKzEwNzAyLDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxFeGNlcHRpb25Db250ZXh0LmNw
cCINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2Vf
UEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+
DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZG9tXEV4Y2VwdGlvbkNvbnRleHQuaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxFeGNlcHRpb25Db2Rl
LmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdkNWYzYzAuLmJhMGU3YWQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODYsNiArNDg2LDggQEAK
IAkJMzdBQ0NGNjkwREE0MTRFNzAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0FDQ0U2MjBEQTJBQTk2
MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCAqLzsgfTsKIAkJMzdGODE4RkQwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2Uu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThG
QzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovOyB9OworCQk0MTE1
MDM2MDBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTE1MDM1RTBFQjJCRTcxMDA5N0E5
QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgKi87IH07CisJCTQxMTUwMzYxMEVCMkJFNzEwMDk3
QTlCRCAvKiBFeGNlcHRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTE1MDM1RjBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29u
dGV4dC5oICovOyB9OwogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAq
LzsgfTsKIAkJNDQxNTI5MkYwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQx
NTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwICovOyB9
OwogCQk0NDFCMDU1NjBDRDc3OUI2MDA3QzFGMTggLyogRE9NQ1NTU3R5bGVTaGVldFByaXZhdGUu
aCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0MjlBQUVBMENCODREQzcwMDc2NDdDNSAvKiBET01DU1NTdHlsZVNoZWV0UHJpdmF0
ZS5oICovOyB9OwpAQCAtNTIzMSw2ICs1MjMzLDggQEAKIAkJMzdBQ0NFNjIwREEyQUE5NjAwODlF
NjAyIC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGb250RGVzY3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29y
ZVVSTFJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29yZVVSTFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTE1
MDM1RTBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25Db250ZXh0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDExNTAzNUYwRUIyQkU3MTAwOTdBOUJEIC8qIEV4Y2VwdGlv
bkNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBD
NEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0MTUyOTJEMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDI5QUFFQTBD
Qjg0REM3MDA3NjQ3QzUgLyogRE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzkwMyw2ICsxMzkwNyw4IEBACiAJCQkJQkM2MEQ4RjEw
RDJBMTFFMDAwQjk5MThGIC8qIEV4Y2VwdGlvbkJhc2UuaCAqLywKIAkJCQk5MzgzMUI1NjBEMDg3
RDYwMDBFNUM5ODQgLyogRXhjZXB0aW9uQ29kZS5jcHAgKi8sCiAJCQkJOTM1RkJDRjEwOUJBMTQz
QjAwRTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCAqLywKKwkJCQk0MTE1MDM1RTBFQjJCRTcxMDA5
N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgKi8sCisJCQkJNDExNTAzNUYwRUIyQkU3MTAw
OTdBOUJEIC8qIEV4Y2VwdGlvbkNvbnRleHQuaCAqLywKIAkJCQk4NTAzMUIyRDBBNDRFRkM3MDBG
OTkyRTAgLyogS2V5Ym9hcmRFdmVudC5jcHAgKi8sCiAJCQkJODUwMzFCMkUwQTQ0RUZDNzAwRjk5
MkUwIC8qIEtleWJvYXJkRXZlbnQuaCAqLywKIAkJCQkxNENGN0MyMDA5RjcxMTA2MDBFQjM2NjUg
LyogS2V5Ym9hcmRFdmVudC5pZGwgKi8sCkBAIC0xNjE1NCw2ICsxNjE2MCw3IEBACiAJCQkJQkNG
RjY0OTIwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aFNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxQzM2QzAzMEVCMDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDNzA1MjEwRUIxODE1NjAwQjkwQUQ4IC8qIEF0b21pY1N0cmluZ0hhc2gu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQxMTUwMzYxMEVCMkJFNzEwMDk3QTlCRCAvKiBFeGNlcHRp
b25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MDM5LDYgKzE4MDQ2LDcgQEAKIAkJCQlC
Q0U2NUJFQTBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRTY1RDMyMEVBRDEyMTEwMDdFNDUzMyAvKiBUaGVtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMUMzNkNCRDBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNDExNTAzNjAwRUIyQkU3MTAwOTdBOUJEIC8qIEV4Y2VwdGlvbkNvbnRl
eHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHAKaW5kZXggYjQ2NTExNS4uOTc3NGE4YiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTm9kZUZpbHRlckNvbmRpdGlvbi5oIgogCisj
aW5jbHVkZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1
ZGUgIkpTTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKQEAgLTQyLDcgKzQz
LDcgQEAgdm9pZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmsoKQogICAgICAgICBtX2ZpbHRl
ci0+bWFyaygpOwogfQogCi1zaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIGZpbHRlck5vZGUpIGNvbnN0CitzaG9ydCBKU05v
ZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoRXhjZXB0aW9uQ29udGV4dCogY29udGV4dCwg
Tm9kZSogZmlsdGVyTm9kZSkgY29uc3QKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAKQEAg
LTUxLDYgKzUyLDcgQEAgc2hvcnQgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBOb2RlKiBmaWx0ZXJOb2RlKQogICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBU
OwogCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBjb250ZXh0LT5leGVjKCk7CiAgICAvLyBU
aGUgZXhlYyBhcmd1bWVudCBoZXJlIHNob3VsZCBvbmx5IGJlIG51bGwgaWYgdGhpcyB3YXMgY2Fs
bGVkIGZyb20gYQogICAgLy8gbm9uLUphdmFTY3JpcHQgbGFuZ3VhZ2UsIGFuZCB0aGlzIGlzIGEg
SmF2YVNjcmlwdCBmaWx0ZXIsIGFuZCB0aGUgZG9jdW1lbnQKICAgIC8vIGluIHF1ZXN0aW9uIGlz
IG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIGZyYW1lLiBJbiB0aGF0IGNhc2UsIHdlJ3JlIGdvaW5n
IHRvCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlv
bi5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAppbmRleCBj
MDQ5NTQyLi45MmEwNWQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZh
dGU6CiAgICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihKU0M6OkpTVmFsdWUqIGZpbHRlcik7
CiAKLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9k
ZSopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoRXhjZXB0aW9uQ29u
dGV4dCosIE5vZGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAogICAg
ICAgICBKU0M6OkpTVmFsdWUqIG1fZmlsdGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDdXN0b20uY3BwCmluZGV4IDM1MTA2MmIuLjE2ZDRlZDEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJKU05vZGVGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJKU05vZGVGaWx0
ZXJDb25kaXRpb24uaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCkBAIC00Myw3ICs0NCw4IEBA
IHZvaWQgSlNOb2RlRmlsdGVyOjptYXJrKCkKIAogSlNWYWx1ZSogSlNOb2RlRmlsdGVyOjphY2Nl
cHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgaW1wbCgpLT5hY2NlcHROb2RlKGV4ZWMsIHRvTm9kZShhcmdzLmF0
KGV4ZWMsIDApKSkpOworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChleGVjKTsKKyAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgaW1wbCgpLT5hY2NlcHROb2RlKCZjb250ZXh0LCB0b05vZGUo
YXJncy5hdChleGVjLCAwKSkpKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVG
aWx0ZXIoSlNWYWx1ZSogdmFsdWUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0
b3JDdXN0b20uY3BwCmluZGV4IDQ0NWM4Y2IuLjhhYTFkZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNOb2RlSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJOb2RlLmgi
CiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgpAQCAtNDAsNyArNDEsOCBAQCB2b2lkIEpTTm9kZUl0
ZXJhdG9yOjptYXJrKCkKIEpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPm5leHROb2RlKGV4ZWMsIGVjKTsK
KyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQoZXhlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5v
ZGUgPSBpbXBsKCktPm5leHROb2RlKCZjb250ZXh0LCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwpAQCAtNTUsNyArNTcsOCBAQCBKU1ZhbHVlKiBKU05vZGVJdGVyYXRvcjo6bmV4dE5vZGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogSlNWYWx1ZSogSlNOb2RlSXRl
cmF0b3I6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBp
bXBsKCktPnByZXZpb3VzTm9kZShleGVjLCBlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250
ZXh0KGV4ZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05vZGUo
JmNvbnRleHQsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKaW5kZXggOTgyMmUxYS4uYTVmYzIzZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcApAQCAtMjAsNiArMjAsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVHJlZVdhbGtlci5oIgogCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUg
Ik5vZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCkBAIC0zOSw3ICs0MCw4IEBAIHZvaWQg
SlNUcmVlV2Fsa2VyOjptYXJrKCkKICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cGFyZW50
Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgTm9kZSog
bm9kZSA9IGltcGwoKS0+cGFyZW50Tm9kZShleGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNv
bnRleHQoZXhlYyk7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+cGFyZW50Tm9kZSgmY29udGV4
dCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKQEAgLTQ3LDcgKzQ5LDggQEAg
SlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgTm9kZSogbm9kZSA9
IGltcGwoKS0+Zmlyc3RDaGlsZChleGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQo
ZXhlYyk7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+Zmlyc3RDaGlsZCgmY29udGV4dCk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKQEAgLTU1LDcgKzU4LDggQEAgSlNWYWx1
ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgp
LT5sYXN0Q2hpbGQoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOwor
ICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPmxhc3RDaGlsZCgmY29udGV4dCk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKQEAgLTYzLDcgKzY3LDggQEAgSlNWYWx1ZSogSlNUcmVl
V2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dFNp
YmxpbmcoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOworICAgIE5v
ZGUqIG5vZGUgPSBpbXBsKCktPm5leHRTaWJsaW5nKCZjb250ZXh0KTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVy
biB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNzEsNyArNzYsOCBAQCBKU1ZhbHVlKiBKU1RyZWVXYWxr
ZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKICAg
ICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2
aW91c1NpYmxpbmcoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOwor
ICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzU2libGluZygmY29udGV4dCk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKQEAgLTc5LDE1ICs4NSwxNyBAQCBKU1ZhbHVl
KiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiAgICAgCiBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgTm9kZSogbm9kZSA9
IGltcGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMpOworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4
dChleGVjKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05vZGUoJmNvbnRleHQp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CiB9Ci0gICAgCisKIEpTVmFsdWUq
IEpTVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPm5leHROb2RlKGV4ZWMpOworICAgIEV4
Y2VwdGlvbkNvbnRleHQgY29udGV4dChleGVjKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5u
ZXh0Tm9kZSgmY29udGV4dCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9PYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKaW5kZXgg
ZTEzNmJjNC4uNDJmNDM0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNO
b2RlRmlsdGVyQ29uZGl0aW9uLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2Rl
RmlsdGVyQ29uZGl0aW9uLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgRXhjZXB0aW9uQ29udGV4dDsKIAogICAgIGNs
YXNzIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIE5vZGVGaWx0ZXJDb25kaXRpb24g
ewogICAgIHB1YmxpYzoKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbihmaWx0
ZXIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShKU0M6
OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHRO
b2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbihpZCA8RE9NTm9kZUZpbHRlcj4gZmlsdGVyKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29uZGl0aW9u
Lm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tCmlu
ZGV4IDk4MmNmZTAuLjBiOGJmZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9P
YmpDTm9kZUZpbHRlckNvbmRpdGlvbi5tbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL29iamMvT2Jq
Q05vZGVGaWx0ZXJDb25kaXRpb24ubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIk9iakNO
b2RlRmlsdGVyQ29uZGl0aW9uLmgiCiAKICNpbXBvcnQgIkRPTU5vZGVGaWx0ZXIuaCIKKyNpbXBv
cnQgIkV4Y2VwdGlvbkNvbnRleHQuaCIKICNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2lt
cG9ydCAiTm9kZUZpbHRlci5oIgogCkBAIC0zNyw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgT2JqQ05vZGVGaWx0ZXJDb25kaXRp
b246OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiwgTm9kZSogbm9kZSkgY29uc3QKK3Nob3J0IE9iakNO
b2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKiBu
b2RlKSBjb25zdAogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6
OkZJTFRFUl9SRUpFQ1Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Db250ZXh0
LmNwcCBiL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmEwOWFjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Rv
bS9FeGNlcHRpb25Db250ZXh0LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29udGV4dC5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiTm9k
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4Y2VwdGlvbkNvbnRleHQ6OkV4Y2VwdGlv
bkNvbnRleHQoTm9kZSogbm9kZSkKKyAgICA6IG1fZXhlYyhleGVjU3RhdGVGcm9tTm9kZShub2Rl
KSkKK3sKK30KKworYm9vbCBFeGNlcHRpb25Db250ZXh0OjpoYWRFeGNlcHRpb24oKQoreworICAg
IHJldHVybiBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpOworfQorCitKU0V4Y2VwdGlvbiBFeGNlcHRp
b25Db250ZXh0Ojpub0V4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTRXhjZXB0
aW9uIEV4Y2VwdGlvbkNvbnRleHQ6OmV4Y2VwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
ZXhlYy0+ZXhjZXB0aW9uKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Db250ZXh0LmggYi9XZWJDb3JlL2RvbS9FeGNlcHRp
b25Db250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmOGEyZQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQuaApAQCAtMCww
ICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEV4
Y2VwdGlvbkNvbnRleHRfaAorI2RlZmluZSBFeGNlcHRpb25Db250ZXh0X2gKKworI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKworI2lm
IFVTRShKU0MpCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKwordHlwZWRl
ZiBKU0M6OkpTVmFsdWUqIEpTRXhjZXB0aW9uOworI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBOb2RlOworI2lmIFVTRShWOCkKK2NsYXNzIEV4Y2VwdGlvbkNhdGNoZXI7
CisjZW5kaWYKKworLy8gUHJvdmlkZXMgY29udGV4dCBvZiBhbiBleGNlcHRpb24uIFRoaXMgY2xh
c3MgaXMgYW4gYWJzdHJhY3Rpb24gb2YgSlNDJ3MKKy8vIEV4ZWNTdGF0ZS4gSW4gVjgsIGl0cyBw
dXJwb3NlIGlzIHRvIGNhcnJ5IGFsb25nIHRoZSBleGNlcHRpb25zIGNhcHR1cmVkCisvLyBieSB0
aGUgRXhjZXB0aW9uQ2F0Y2hlci4KK2NsYXNzIEV4Y2VwdGlvbkNvbnRleHQgOiBOb25jb3B5YWJs
ZSB7CitwdWJsaWM6CisgICAgRXhjZXB0aW9uQ29udGV4dChOb2RlKik7CisjaWYgVVNFKFY4KQor
ICAgIEV4Y2VwdGlvbkNvbnRleHQoKTsKKyNlbGlmIFVTRShKU0MpCisgICAgRXhjZXB0aW9uQ29u
dGV4dChKU0M6OkV4ZWNTdGF0ZSogZXhlYykgOiBtX2V4ZWMoZXhlYykge30KKyAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYygpIGNvbnN0IHsgcmV0dXJuIG1fZXhlYzsgfQorI2VuZGlmCisgICAgfkV4
Y2VwdGlvbkNvbnRleHQoKSB7fQorCisgICAgYm9vbCBoYWRFeGNlcHRpb24oKTsKKyAgICBKU0V4
Y2VwdGlvbiBleGNlcHRpb24oKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgYSBub24tZXhjZXB0
aW9uIGNvZGUgb2JqZWN0LgorICAgIHN0YXRpYyBKU0V4Y2VwdGlvbiBub0V4Y2VwdGlvbigpOwor
Citwcml2YXRlOgorI2lmIFVTRShWOCkKKyAgICBmcmllbmQgY2xhc3MgRXhjZXB0aW9uQ2F0Y2hl
cjsKKyAgICB2b2lkIHNldEV4Y2VwdGlvbihKU0V4Y2VwdGlvbiBleGNlcHRpb24pIHsgbV9leGNl
cHRpb24gPSBleGNlcHRpb247IH0KKyAgICB2b2lkIHNldEV4Y2VwdGlvbkNhdGNoZXIoRXhjZXB0
aW9uQ2F0Y2hlciopOworICAgIEpTRXhjZXB0aW9uIG1fZXhjZXB0aW9uOworICAgIEV4Y2VwdGlv
bkNhdGNoZXIqIG1fZXhjZXB0aW9uQ2F0Y2hlcjsKKyNlbGlmIFVTRShKU0MpCisgICAgSlNDOjpF
eGVjU3RhdGUqIG1fZXhlYzsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgIC8vICFkZWZpbmVkKEV4Y2VwdGlvbkNvbnRleHRfaCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKaW5k
ZXggMDY5Zjg5OC4uN2UwZmI1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5j
cHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKQEAgLTI1LDE3ICsyNSwyMSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSA8a2pzL0V4
ZWNTdGF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXNob3J0IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVjLCBOb2RlKiBu
b2RlKSBjb25zdAorc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGNlcHRpb25Db250ZXh0
KiBleGVjLCBOb2RlKiBub2RlKSBjb25zdAogewogICAgIC8vIGNhc3QgdG8gc2hvcnQgc2lsZW5j
ZXMgImVudW1lcmFsIGFuZCBub24tZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJuaW5nCiAg
ICAgcmV0dXJuIG1fY29uZGl0aW9uID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUoZXhlYywgbm9k
ZSkgOiBzdGF0aWNfY2FzdDxzaG9ydD4oRklMVEVSX0FDQ0VQVCk7CiB9CiAKK3Nob3J0IE5vZGVG
aWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBFeGNlcHRpb25Db250
ZXh0IGNvbnRleHQobm9kZSk7CisgICAgcmV0dXJuIGFjY2VwdE5vZGUoJmNvbnRleHQsIG5vZGUp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9O
b2RlRmlsdGVyLmggYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKaW5kZXggNDdkMGE0YS4uZWFk
N2EwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCisrKyBiL1dlYkNvcmUv
ZG9tL05vZGVGaWx0ZXIuaApAQCAtMjUsMTMgKzI1LDE0IEBACiAjaWZuZGVmIE5vZGVGaWx0ZXJf
aAogI2RlZmluZSBOb2RlRmlsdGVyX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIk5vZGVGaWx0ZXJDb25kaXRpb24uaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAg
Y2xhc3MgRXhjZXB0aW9uQ29udGV4dDsKKwogICAgIGNsYXNzIE5vZGVGaWx0ZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxOb2RlRmlsdGVyPiB7CiAgICAgcHVibGljOgogICAgICAgICAvKioKQEAgLTcx
LDExICs3MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE5vZGVGaWx0ZXIoY29uZGl0aW9uKSk7CiAgICAgICAgIH0KIAotICAgICAgICBz
aG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAgICAgICBz
aG9ydCBhY2NlcHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKikgY29uc3Q7CiAgICAgICAg
IHZvaWQgbWFyaygpIHsgbV9jb25kaXRpb24tPm1hcmsoKTsgfTsKIAogICAgICAgICAvLyBGb3Ig
bm9uLUpTIGJpbmRpbmdzLiBTaWxlbnRseSBpZ25vcmVzIHRoZSBKYXZhU2NyaXB0IGV4Y2VwdGlv
biBpZiBhbnkuCi0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyBy
ZXR1cm4gYWNjZXB0Tm9kZShleGVjU3RhdGVGcm9tTm9kZShub2RlKSwgbm9kZSk7IH0KKyAgICAg
ICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiBub2RlKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIE5vZGVGaWx0ZXIoUGFzc1JlZlB0cjxOb2RlRmlsdGVyQ29uZGl0aW9uPiBjb25kaXRp
b24pIDogbV9jb25kaXRpb24oY29uZGl0aW9uKSB7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L05vZGVGaWx0ZXJDb25kaXRpb24uY3BwIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlv
bi5jcHAKaW5kZXggNzQ2NzdiNy4uZTQyMTQ5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlv
bi5jcHAKQEAgLTI3LDExICsyNywxMSBAQAogCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogCi11
c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXNob3J0IE5vZGVG
aWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0CitjbGFz
cyBFeGNlcHRpb25Db250ZXh0OworCitzaG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHRO
b2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKikgY29uc3QKIHsKICAgICByZXR1cm4gTm9kZUZp
bHRlcjo6RklMVEVSX0FDQ0VQVDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVGaWx0
ZXJDb25kaXRpb24uaCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAppbmRleCA2
ZmNkZmE4Li40YWZkZGE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0
aW9uLmgKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCkBAIC0yNywxOCAr
MjcsMTUgQEAKIAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLW5hbWVzcGFjZSBKU0Mg
ewotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAg
Y2xhc3MgRXhjZXB0aW9uQ29udGV4dDsKICAgICBjbGFzcyBOb2RlOwogCiAgICAgY2xhc3MgTm9k
ZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVGaWx0ZXJDb25kaXRpb24+
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRpb24oKSB7
IH0KLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9k
ZSopIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEV4Y2VwdGlv
bkNvbnRleHQqLCBOb2RlKikgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygp
IHsgfQogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAg
Yi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCmluZGV4IGJhZDEzMDMuLmVkZTMyZDAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKKysrIGIvV2ViQ29yZS9kb20v
Tm9kZUl0ZXJhdG9yLmNwcApAQCAtMjUsMTMgKzI1LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCiAKLSNpbmNsdWRlIDxranMvRXhlY1N0YXRlLmg+
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAotdXNp
bmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOb2RlSXRlcmF0b3I6
Ok5vZGVQb2ludGVyOjpOb2RlUG9pbnRlcigpCkBAIC04Niw3ICs4NCw3IEBAIE5vZGVJdGVyYXRv
cjo6fk5vZGVJdGVyYXRvcigpCiAgICAgcm9vdCgpLT5kb2N1bWVudCgpLT5kZXRhY2hOb2RlSXRl
cmF0b3IodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9k
ZShFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxOb2RlPiBO
b2RlSXRlcmF0b3I6Om5leHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIGlmIChtX2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7CkBAIC0xMTUsNyArMTEzLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0
b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9y
OjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NS
ZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29udGV4dCog
ZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKQEAgLTIyNiw1ICsyMjQsMTYgQEAgdm9pZCBOb2Rl
SXRlcmF0b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKE5vZGUqIHJlbW92ZWROb2RlLCBOb2RlUG9p
bnRlciYgcmVmZXJlbmMKICAgICB9CiB9CiAKK1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9y
OjpuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBFeGNlcHRpb25Db250ZXh0IGNv
bnRleHQocmVmZXJlbmNlTm9kZSgpKTsKKyAgICByZXR1cm4gbmV4dE5vZGUoJmNvbnRleHQsIGVj
KTsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQocmVmZXJlbmNl
Tm9kZSgpKTsKKyAgICByZXR1cm4gcHJldmlvdXNOb2RlKCZjb250ZXh0LCBlYyk7Cit9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRv
ci5oIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKaW5kZXggODQyZTcxZC4uYzUzYTAxMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKKysrIGIvV2ViQ29yZS9kb20v
Tm9kZUl0ZXJhdG9yLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpZm5kZWYgTm9kZUl0ZXJhdG9yX2gK
ICNkZWZpbmUgTm9kZUl0ZXJhdG9yX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJUcmF2ZXJzYWwuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgpAQCAtMzMsNiArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKyAgICBjbGFzcyBFeGNlcHRpb25Db250ZXh0OworCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKIAogICAgIGNsYXNzIE5vZGVJdGVyYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPE5v
ZGVJdGVyYXRvcj4sIHB1YmxpYyBUcmF2ZXJzYWwgewpAQCAtNDMsOCArNDQsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIH0KICAgICAgICAgfk5vZGVJdGVyYXRvcigpOwogCi0gICAg
ICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gcHJldmlvdXNOb2RlKEpTQzo6RXhlY1N0
YXRlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2Rl
KEV4Y2VwdGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8
Tm9kZT4gcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgICAgIHZvaWQgZGV0YWNoKCk7CiAKICAgICAgICAgTm9kZSogcmVmZXJlbmNlTm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlTm9kZS5ub2RlLmdldCgpOyB9CkBAIC01NCw4ICs1NSw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChO
b2RlKik7CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3Jl
cyB0aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBQYXNzUmVmUHRyPE5v
ZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBuZXh0Tm9kZShleGVjU3Rh
dGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxO
b2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZpb3VzTm9k
ZShleGVjU3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAgICAgUGFz
c1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIFBhc3NS
ZWZQdHI8Tm9kZT4gcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIE5vZGVJdGVyYXRvcihQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0
VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5j
ZXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmNwcCBiL1dlYkNvcmUvZG9t
L1RyYXZlcnNhbC5jcHAKaW5kZXggYzJjOTFkNC4uMDVmYzg4ZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vVHJhdmVyc2FsLmNwcAorKysgYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCkBAIC0y
NSwxMSArMjUsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUcmF2ZXJzYWwu
aCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAj
aW5jbHVkZSAiTm9kZUZpbHRlci5oIgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFRyYXZlcnNhbDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4gcm9v
dE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gbm9kZUZp
bHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQpAQCAtNDAsNyArMzksNyBAQCBUcmF2
ZXJzYWw6OlRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0
VG9TaG93LCBQYXNzUmVmUHRyPAogewogfQogCi1zaG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUo
RXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKSBjb25zdAorc2hvcnQgVHJhdmVyc2FsOjphY2Nl
cHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAg
Ly8gRklYTUU6IFRvIGhhbmRsZSBYTUwgcHJvcGVybHkgd2Ugd291bGQgaGF2ZSB0byBjaGVjayBt
X2V4cGFuZEVudGl0eVJlZmVyZW5jZXMuCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyYXZl
cnNhbC5oIGIvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKaW5kZXggNmU4NzEwMy4uMmFiMGY0YSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKKysrIGIvV2ViQ29yZS9kb20vVHJh
dmVyc2FsLmgKQEAgLTI4LDEyICsyOCw5IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEV4ZWNT
dGF0ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgRXhjZXB0aW9uQ29u
dGV4dDsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vZGVGaWx0ZXI7CiAKQEAgLTQ2LDcg
KzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBU
cmF2ZXJzYWwoUGFzc1JlZlB0cjxOb2RlPiwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0
cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSAgICAgICAgc2hv
cnQgYWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKKyAgICAgICAgc2hv
cnQgYWNjZXB0Tm9kZShFeGNlcHRpb25Db250ZXh0KiwgTm9kZSopIGNvbnN0OwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL1RyZWVXYWxrZXIuY3BwIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKaW5kZXggNjZm
YzhkMi4uYjI4Y2NiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKKysr
IGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKQEAgLTI1LDE0ICsyNSwxMiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRyZWVXYWxrZXIuaCIKIAotI2luY2x1ZGUgPGtqcy9F
eGVjU3RhdGUuaD4KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiQ29udGFp
bmVyTm9kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogVHJlZVdhbGtlcjo6VHJlZVdhbGtlcihQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCB1bnNp
Z25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IGZpbHRlciwgYm9vbCBleHBh
bmRFbnRpdHlSZWZlcmVuY2VzKQpAQCAtNTYsNyArNTQsNyBAQCBpbmxpbmUgTm9kZSogVHJlZVdh
bGtlcjo6c2V0Q3VycmVudChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCiAgICAgcmV0dXJuIG1fY3Vy
cmVudC5nZXQoKTsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShFeGVjU3RhdGUq
IGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4Y2VwdGlvbkNvbnRleHQqIGV4
ZWMpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgd2hpbGUgKG5v
ZGUgIT0gcm9vdCgpKSB7CkBAIC03Miw3ICs3MCw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OnBhcmVu
dE5vZGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fs
a2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6OmZpcnN0
Q2hpbGQoRXhjZXB0aW9uQ29udGV4dCogZXhlYykKIHsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBu
b2RlID0gbV9jdXJyZW50LT5maXJzdENoaWxkKCk7IG5vZGU7ICkgewogICAgICAgICBzaG9ydCBh
Y2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKQEAgLTEwNSw3
ICsxMDMsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4ZWNTdGF0
ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZChFeGNlcHRpb25Db250ZXh0KiBl
eGVjKQogewogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmxhc3RDaGls
ZCgpOyBub2RlOyApIHsKICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5v
ZGUoZXhlYywgbm9kZS5nZXQoKSk7CkBAIC0xMzgsNyArMTM2LDcgQEAgTm9kZSogVHJlZVdhbGtl
cjo6bGFzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSog
VHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVX
YWxrZXI6OnByZXZpb3VzU2libGluZyhFeGNlcHRpb25Db250ZXh0KiBleGVjKQogewogICAgIFJl
ZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIGlmIChub2RlID09IHJvb3QoKSkKQEAg
LTE3NCw3ICsxNzIsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0
YXRlKiBleGVjKQogICAgIH0KIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoRXhl
Y1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoRXhjZXB0aW9uQ29u
dGV4dCogZXhlYykKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICBp
ZiAobm9kZSA9PSByb290KCkpCkBAIC0yMTAsNyArMjA4LDcgQEAgTm9kZSogVHJlZVdhbGtlcjo6
bmV4dFNpYmxpbmcoRXhlY1N0YXRlKiBleGVjKQogICAgIH0KIH0KIAotTm9kZSogVHJlZVdhbGtl
cjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6OnByZXZp
b3VzTm9kZShFeGNlcHRpb25Db250ZXh0KiBleGVjKQogewogICAgIFJlZlB0cjxOb2RlPiBub2Rl
ID0gbV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9IHJvb3QoKSkgewpAQCAtMjQ5LDcgKzI0
Nyw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6Om5leHROb2RlKEV4ZWNTdGF0ZSog
ZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6Om5leHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMp
CiB7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiBDaGlsZHJlbjoKQEAgLTI3
Niw0ICsyNzQsNDYgQEAgQ2hpbGRyZW46CiAgICAgcmV0dXJuIDA7CiB9CiAKK05vZGUqIFRyZWVX
YWxrZXI6OnBhcmVudE5vZGUoKQoreworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChtX2N1
cnJlbnQuZ2V0KCkpOworICAgIHJldHVybiBwYXJlbnROb2RlKCZjb250ZXh0KTsKK30KKworTm9k
ZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZCgpCit7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250
ZXh0KG1fY3VycmVudC5nZXQoKSk7CisgICAgcmV0dXJuIGZpcnN0Q2hpbGQoJmNvbnRleHQpOwor
fQorCitOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoKQoreworICAgIEV4Y2VwdGlvbkNvbnRl
eHQgY29udGV4dChtX2N1cnJlbnQuZ2V0KCkpOworICAgIHJldHVybiBsYXN0Q2hpbGQoJmNvbnRl
eHQpOworfQorCitOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoKQoreworICAgIEV4
Y2VwdGlvbkNvbnRleHQgY29udGV4dChtX2N1cnJlbnQuZ2V0KCkpOworICAgIHJldHVybiBwcmV2
aW91c1NpYmxpbmcoJmNvbnRleHQpOworfQorCitOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGlu
ZygpCit7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KG1fY3VycmVudC5nZXQoKSk7Cisg
ICAgcmV0dXJuIG5leHRTaWJsaW5nKCZjb250ZXh0KTsKK30KKworTm9kZSogVHJlZVdhbGtlcjo6
cHJldmlvdXNOb2RlKCkKK3sKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQobV9jdXJyZW50
LmdldCgpKTsKKyAgICByZXR1cm4gcHJldmlvdXNOb2RlKCZjb250ZXh0KTsKK30KKworTm9kZSog
VHJlZVdhbGtlcjo6bmV4dE5vZGUoKQoreworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dCht
X2N1cnJlbnQuZ2V0KCkpOworICAgIHJldHVybiBuZXh0Tm9kZSgmY29udGV4dCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIu
aCBiL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaAppbmRleCAzNDhmZjk0Li41Y2M1ZjI1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgKKysrIGIvV2ViQ29yZS9kb20vVHJlZVdh
bGtlci5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIFRyZWVXYWxrZXJfaAogI2RlZmluZSBU
cmVlV2Fsa2VyX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAiVHJhdmVy
c2FsLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ1LDIyICs0NSwyMiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJyZW50LmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0Q3VycmVudE5vZGUoUGFz
c1JlZlB0cjxOb2RlPiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIE5vZGUqIHBhcmVudE5v
ZGUoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogZmlyc3RDaGlsZChKU0M6OkV4ZWNT
dGF0ZSopOwotICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAg
ICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUq
IG5leHRTaWJsaW5nKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzTm9k
ZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBuZXh0Tm9kZShKU0M6OkV4ZWNTdGF0
ZSopOworICAgICAgICBOb2RlKiBwYXJlbnROb2RlKEV4Y2VwdGlvbkNvbnRleHQqKTsKKyAgICAg
ICAgTm9kZSogZmlyc3RDaGlsZChFeGNlcHRpb25Db250ZXh0Kik7CisgICAgICAgIE5vZGUqIGxh
c3RDaGlsZChFeGNlcHRpb25Db250ZXh0Kik7CisgICAgICAgIE5vZGUqIHByZXZpb3VzU2libGlu
ZyhFeGNlcHRpb25Db250ZXh0Kik7CisgICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKEV4Y2VwdGlv
bkNvbnRleHQqKTsKKyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvbnRleHQq
KTsKKyAgICAgICAgTm9kZSogbmV4dE5vZGUoRXhjZXB0aW9uQ29udGV4dCopOwogCiAgICAgICAg
IC8vIEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFTY3JpcHQg
ZXhjZXB0aW9uIGlmIGFueS4KLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpIHsgcmV0dXJuIHBh
cmVudE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAg
Tm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoZXhlY1N0YXRlRnJvbU5vZGUo
bV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbGFzdENoaWxkKCkgeyByZXR1cm4g
bGFzdENoaWxkKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAg
IE5vZGUqIHByZXZpb3VzU2libGluZygpIHsgcmV0dXJuIHByZXZpb3VzU2libGluZyhleGVjU3Rh
dGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBuZXh0U2libGlu
ZygpIHsgcmV0dXJuIG5leHRTaWJsaW5nKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQo
KSkpOyB9Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgcmV0dXJuIHByZXZpb3VzTm9k
ZShleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBu
ZXh0Tm9kZSgpIHsgcmV0dXJuIG5leHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5n
ZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKTsKKyAgICAgICAgTm9kZSogZmly
c3RDaGlsZCgpOworICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoKTsKKyAgICAgICAgTm9kZSogcHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKCk7CisgICAgICAgIE5v
ZGUqIHByZXZpb3VzTm9kZSgpOworICAgICAgICBOb2RlKiBuZXh0Tm9kZSgpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgVHJlZVdhbGtlcihQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0
VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5j
ZXMpOwo=
</data>
<flag name="review"
          id="11302"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24847</attachid>
            <date>2008-11-02 10:12:47 -0800</date>
            <delta_ts>2008-11-02 10:25:36 -0800</delta_ts>
            <desc>Platform independence with magic headers</desc>
            <filename>ec3.diff</filename>
            <type>text/plain</type>
            <size>34486</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGUwMjI4NS4uNTJkOWVlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAwOC0xMC0yNyAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBFeGNlcHRpb25Db250ZXh0LCBhbiBhYnN0
cmFjdGlvbiB3aGljaCBjYXJyaWVzIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiwKKyAgICAgICAgcHJv
ZHVjZWQgYnkgSmF2YVNjcmlwdC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05v
ZGVGaWx0ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjphY2Nl
cHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVJdGVyYXRvcjo6bmV4dE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdh
bGtlcjo6cGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6OmZpcnN0
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpKU1RyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpK
U1RyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxr
ZXI6Om5leHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmg6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9PYmpDTm9kZUZpbHRlckNvbmRpdGlv
bi5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok9iakNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHRO
b2RlKToKKyAgICAgICAgKiBkb20vRXhjZXB0aW9uQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RXhjZXB0aW9uQ29udGV4dDo6RXhjZXB0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0OjpoYWRFeGNlcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RXhjZXB0aW9uQ29udGV4dDo6bm9FeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RXhjZXB0aW9uQ29udGV4dDo6ZXhjZXB0aW9uKToKKyAgICAgICAgKiBkb20vRXhjZXB0aW9uQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV4Y2VwdGlvbkNvbnRleHQ6OkV4Y2Vw
dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RXhjZXB0aW9uQ29udGV4dDo6ZXhlYyk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0Ojp+RXhjZXB0aW9uQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0OjpzZXRFeGNlcHRpb24pOgorICAg
ICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVGaWx0ZXI6
OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmg6CisgICAgICAgICogZG9t
L05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUZpbHRlckNv
bmRpdGlvbjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogZG9tL05vZGVGaWx0ZXJDb25kaXRpb24u
aDoKKyAgICAgICAgKiBkb20vTm9kZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVJdGVyYXRvcjo6bmV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpw
cmV2aW91c05vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuaDoKKyAgICAgICAgKiBk
b20vVHJhdmVyc2FsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYXZlcnNhbDo6YWNjZXB0Tm9k
ZSk6CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5oOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnBhcmVudE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpsYXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cHJl
dmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6Om5leHRTaWJsaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0Tm9kZSk6CisgICAgICAgICogZG9tL1RyZWVXYWxr
ZXIuaDoKKwogMjAwOC0xMC0yNyAgS2V2aW4gV2F0dGVycyAgPGtldmlud2F0dGVyc0BnbWFpbC5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2V2aW4gT2xsaXZpZXIuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA0ZjE5
ZjllLi42ZGNjOWFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTY1Niw2ICs2NTYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkJhc2UuaCBcCiAJV2ViQ29yZS9kb20vRXhjZXB0
aW9uQ29kZS5jcHAgXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaCBcCisJV2ViQ29yZS9k
b20vRXhjZXB0aW9uQ29udGV4dC5jcHAgXAorCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQu
aCBcCiAJV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAgXAogCVdlYkNvcmUvZG9tL0tleWJv
YXJkRXZlbnQuaCBcCiAJV2ViQ29yZS9kb20vTWFwcGVkQXR0cmlidXRlLmNwcCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmOGRj
NjQyLi43MDc2ZjYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS5wcm8KQEAgLTUzNyw2ICs1MzcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20v
RXZlbnRUYXJnZXROb2RlLmNwcCBcCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwIFwKICAgICBk
b20vRXhjZXB0aW9uQ29kZS5jcHAgXAorICAgIGRvbS9FeGNlcHRpb25Db250ZXh0LmNwcCBcCiAg
ICAgZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKICAgICBkb20vTWFwcGVkQXR0cmlidXRlLmNwcCBc
CiAgICAgZG9tL01lc3NhZ2VDaGFubmVsLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCBiMjE1NTdhLi5jYjEzYTcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTEwNzAyLDYgKzEwNzAyLDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxFeGNlcHRpb25Db250ZXh0LmNw
cCINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2Vf
UEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+
DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZG9tXEV4Y2VwdGlvbkNvbnRleHQuaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxFeGNlcHRpb25Db2Rl
LmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdkNWYzYzAuLjAyOTc2MjkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODYsNiArNDg2LDkgQEAK
IAkJMzdBQ0NGNjkwREE0MTRFNzAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0FDQ0U2MjBEQTJBQTk2
MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCAqLzsgfTsKIAkJMzdGODE4RkQwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2Uu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThG
QzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovOyB9OworCQk0MTE1
MDM2MDBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTE1MDM1RTBFQjJCRTcxMDA5N0E5
QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgKi87IH07CisJCTQxMTUwMzYxMEVCMkJFNzEwMDk3
QTlCRCAvKiBFeGNlcHRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTE1MDM1RjBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29u
dGV4dC5oICovOyB9OworCQk0MTg2NTc5NTBFQkQ0RTcyMDA3MzAyRDIgLyogRXhjZXB0aW9uQ29u
dGV4dERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxODY1Nzk0MEVCRDRFNzIwMDczMDJEMiAvKiBFeGNlcHRpb25Db250ZXh0RGF0YS5oICovOyB9
OwogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5MkMw
RTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsgfTsKIAkJNDQx
NTI5MkYwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5MkQwRTFBRThB
MDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwICovOyB9OwogCQk0NDFCMDU1
NjBDRDc3OUI2MDA3QzFGMTggLyogRE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaCBpbiBDb3B5IEdl
bmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MjlB
QUVBMENCODREQzcwMDc2NDdDNSAvKiBET01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oICovOyB9OwpA
QCAtNTIzMSw2ICs1MjM0LDkgQEAKIAkJMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZvbnRE
ZXNjcmlwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250
RGVzY3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Y4MThGQjBE
NjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJl
c3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTE1MDM1RTBFQjJCRTcx
MDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFeGNlcHRpb25Db250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDExNTAzNUYwRUIyQkU3MTAwOTdBOUJEIC8qIEV4Y2VwdGlvbkNvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uQ29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTg2NTc5NDBFQkQ0RTcyMDA3MzAyRDIgLyogRXhj
ZXB0aW9uQ29udGV4dERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhj
ZXB0aW9uQ29udGV4dERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5
MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyRDBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDQyOUFBRUEwQ0I4NERDNzAwNzY0N0M1IC8qIERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01DU1NTdHlsZVNoZWV0UHJpdmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4OTAsNiArMTI4OTYsNyBAQAog
CQkJCTY1NDg4RDZBMERENUE4M0QwMDlEODNCMiAvKiBTdHJpbmdTb3VyY2VQcm92aWRlci5oICov
LAogCQkJCUJDNjA5MDFEMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFyZ2V0LmggKi8sCiAJ
CQkJQkM2MDkwMUUwRTkxQjhFQzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJnZXQuY3BwICovLAorCQkJ
CTQxODY1Nzk0MEVCRDRFNzIwMDczMDJEMiAvKiBFeGNlcHRpb25Db250ZXh0RGF0YS5oICovLAog
CQkJKTsKIAkJCXBhdGggPSBqczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMzkw
Myw2ICsxMzkxMCw4IEBACiAJCQkJQkM2MEQ4RjEwRDJBMTFFMDAwQjk5MThGIC8qIEV4Y2VwdGlv
bkJhc2UuaCAqLywKIAkJCQk5MzgzMUI1NjBEMDg3RDYwMDBFNUM5ODQgLyogRXhjZXB0aW9uQ29k
ZS5jcHAgKi8sCiAJCQkJOTM1RkJDRjEwOUJBMTQzQjAwRTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUu
aCAqLywKKwkJCQk0MTE1MDM1RTBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5j
cHAgKi8sCisJCQkJNDExNTAzNUYwRUIyQkU3MTAwOTdBOUJEIC8qIEV4Y2VwdGlvbkNvbnRleHQu
aCAqLywKIAkJCQk4NTAzMUIyRDBBNDRFRkM3MDBGOTkyRTAgLyogS2V5Ym9hcmRFdmVudC5jcHAg
Ki8sCiAJCQkJODUwMzFCMkUwQTQ0RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuaCAqLywK
IAkJCQkxNENGN0MyMDA5RjcxMTA2MDBFQjM2NjUgLyogS2V5Ym9hcmRFdmVudC5pZGwgKi8sCkBA
IC0xNjE1NCw2ICsxNjE2Myw4IEBACiAJCQkJQkNGRjY0OTIwRUFEMTVDMjAwQzFENkY3IC8qIExl
bmd0aFNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzM2QzAzMEVCMDc2RDYwMDc0MTBCQyAv
KiBKU0RPTUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzA1MjEwRUIxODE1
NjAwQjkwQUQ4IC8qIEF0b21pY1N0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovLAorCQkJCTQxMTUw
MzYxMEVCMkJFNzEwMDk3QTlCRCAvKiBFeGNlcHRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk0MTg2NTc5NTBFQkQ0RTcyMDA3MzAyRDIgLyogRXhjZXB0aW9uQ29udGV4dERhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMTgwMzksNiArMTgwNTAsNyBAQAogCQkJCUJDRTY1QkVBMEVBQ0RG
MTYwMDdFNDUzMyAvKiBMZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNjVEMzIwRUFE
MTIxMTAwN0U0NTMzIC8qIFRoZW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQzM2Q0JEMEVC
MDgwNjIwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0MTE1MDM2MDBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNw
cAppbmRleCBiNDY1MTE1Li45MDQ1NGY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVGaWx0ZXJDb25kaXRpb24uY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgiCiAKKyNpbmNsdWRlICJFeGNl
cHRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNOb2RlRmls
dGVyLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgpAQCAtNDIsNyArNDMsNyBAQCB2b2lkIEpT
Tm9kZUZpbHRlckNvbmRpdGlvbjo6bWFyaygpCiAgICAgICAgIG1fZmlsdGVyLT5tYXJrKCk7CiB9
CiAKLXNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkgY29uc3QKK3Nob3J0IEpTTm9kZUZpbHRlckNvbmRp
dGlvbjo6YWNjZXB0Tm9kZShFeGNlcHRpb25Db250ZXh0KiBjb250ZXh0LCBOb2RlKiBmaWx0ZXJO
b2RlKSBjb25zdAogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKIApAQCAtNTEsNiArNTIsNyBA
QCBzaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIE5vZGUqIGZpbHRlck5vZGUpCiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CiAKKyAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IGNvbnRleHQtPmRhdGEoKTsKICAgIC8vIFRoZSBleGVjIGFyZ3Vt
ZW50IGhlcmUgc2hvdWxkIG9ubHkgYmUgbnVsbCBpZiB0aGlzIHdhcyBjYWxsZWQgZnJvbSBhCiAg
ICAvLyBub24tSmF2YVNjcmlwdCBsYW5ndWFnZSwgYW5kIHRoaXMgaXMgYSBKYXZhU2NyaXB0IGZp
bHRlciwgYW5kIHRoZSBkb2N1bWVudAogICAgLy8gaW4gcXVlc3Rpb24gaXMgbm90IGFzc29jaWF0
ZWQgd2l0aCB0aGUgZnJhbWUuIEluIHRoYXQgY2FzZSwgd2UncmUgZ29pbmcgdG8KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IGMwNDk1NDIuLjkyYTA1
ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9u
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaApAQCAt
MzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAg
SlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNWYWx1ZSogZmlsdGVyKTsKIAotICAgICAgICB2
aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBOb2RlKikgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShFeGNlcHRpb25Db250ZXh0KiwgTm9kZSop
IGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogCiAgICAgICAgIEpTQzo6SlNW
YWx1ZSogbV9maWx0ZXI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5j
cHAKaW5kZXggMzUxMDYyYi4uMTZkNGVkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
RmlsdGVyQ3VzdG9tLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkpTTm9kZUZpbHRlci5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTTm9kZUZpbHRlckNvbmRpdGlvbi5o
IgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKQEAgLTQzLDcgKzQ0LDggQEAgdm9pZCBKU05vZGVG
aWx0ZXI6Om1hcmsoKQogCiBKU1ZhbHVlKiBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVybiBqc051bWJlcihl
eGVjLCBpbXBsKCktPmFjY2VwdE5vZGUoZXhlYywgdG9Ob2RlKGFyZ3MuYXQoZXhlYywgMCkpKSk7
CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOworICAgIHJldHVybiBqc051bWJl
cihleGVjLCBpbXBsKCktPmFjY2VwdE5vZGUoJmNvbnRleHQsIHRvTm9kZShhcmdzLmF0KGV4ZWMs
IDApKSkpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU1ZhbHVl
KiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAK
aW5kZXggNDQ1YzhjYi4uOGFhMWRlYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVJdGVyYXRvckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJ
dGVyYXRvckN1c3RvbS5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU05vZGVJdGVyYXRvci5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29udGV4
dC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJO
b2RlRmlsdGVyLmgiCkBAIC00MCw3ICs0MSw4IEBAIHZvaWQgSlNOb2RlSXRlcmF0b3I6Om1hcmso
KQogSlNWYWx1ZSogSlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQ
dHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZXhlYywgZWMpOworICAgIEV4Y2VwdGlv
bkNvbnRleHQgY29udGV4dChleGVjKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+
bmV4dE5vZGUoJmNvbnRleHQsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC01NSw3
ICs1Nyw4IEBAIEpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiBKU1ZhbHVlKiBKU05vZGVJdGVyYXRvcjo6cHJldmlv
dXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+cHJldmlv
dXNOb2RlKGV4ZWMsIGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQoZXhlYyk7Cisg
ICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZSgmY29udGV4dCwgZWMp
OwogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fs
a2VyQ3VzdG9tLmNwcAppbmRleCA5ODIyZTFhLi5hNWZjMjNmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUcmVlV2Fsa2VyLmgiCiAKKyNpbmNsdWRlICJFeGNlcHRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2lu
Y2x1ZGUgIk5vZGVGaWx0ZXIuaCIKQEAgLTM5LDcgKzQwLDggQEAgdm9pZCBKU1RyZWVXYWxrZXI6
Om1hcmsoKQogICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgp
LT5wYXJlbnROb2RlKGV4ZWMpOworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChleGVjKTsK
KyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wYXJlbnROb2RlKCZjb250ZXh0KTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNDcsNyArNDksOCBAQCBKU1ZhbHVlKiBKU1Ry
ZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5maXJz
dENoaWxkKGV4ZWMpOworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChleGVjKTsKKyAgICBO
b2RlKiBub2RlID0gaW1wbCgpLT5maXJzdENoaWxkKCZjb250ZXh0KTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVy
biB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNTUsNyArNTgsOCBAQCBKU1ZhbHVlKiBKU1RyZWVXYWxr
ZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogICAg
IAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPmxhc3RDaGlsZChl
eGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQoZXhlYyk7CisgICAgTm9kZSogbm9k
ZSA9IGltcGwoKS0+bGFzdENoaWxkKCZjb250ZXh0KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiB0b0pTKGV4
ZWMsIG5vZGUpOwpAQCAtNjMsNyArNjcsOCBAQCBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Omxhc3RD
aGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiAgICAgCiBKU1ZhbHVl
KiBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5uZXh0U2libGluZyhleGVjKTsK
KyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQoZXhlYyk7CisgICAgTm9kZSogbm9kZSA9IGlt
cGwoKS0+bmV4dFNpYmxpbmcoJmNvbnRleHQpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywg
bm9kZSk7CkBAIC03MSw3ICs3Niw4IEBAIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bmV4dFNpYmxp
bmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogICAgIAogSlNWYWx1ZSog
SlNUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzU2libGluZyhl
eGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQoZXhlYyk7CisgICAgTm9kZSogbm9k
ZSA9IGltcGwoKS0+cHJldmlvdXNTaWJsaW5nKCZjb250ZXh0KTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiB0
b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNzksMTUgKzg1LDE3IEBAIEpTVmFsdWUqIEpTVHJlZVdhbGtl
cjo6cHJldmlvdXNTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
ICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2
aW91c05vZGUoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOworICAg
IE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZSgmY29udGV4dCk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0KLSAgICAKKwogSlNWYWx1ZSogSlNUcmVlV2Fsa2Vy
OjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
Tm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4
dCBjb250ZXh0KGV4ZWMpOworICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPm5leHROb2RlKCZjb250
ZXh0KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmggYi9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaAppbmRleCBlMTM2YmM0Li40MmY0
MzQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvT2JqQ05vZGVGaWx0ZXJDb25k
aXRpb24uaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL29iamMvT2JqQ05vZGVGaWx0ZXJDb25kaXRp
b24uaApAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
Tm9kZTsKKyAgICBjbGFzcyBFeGNlcHRpb25Db250ZXh0OwogCiAgICAgY2xhc3MgT2JqQ05vZGVG
aWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgTm9kZUZpbHRlckNvbmRpdGlvbiB7CiAgICAgcHVibGlj
OgpAQCAtNDQsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKGZpbHRlcikpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwg
Tm9kZSopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoRXhjZXB0aW9u
Q29udGV4dCosIE5vZGUqKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE9iakNOb2Rl
RmlsdGVyQ29uZGl0aW9uKGlkIDxET01Ob2RlRmlsdGVyPiBmaWx0ZXIpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0gYi9XZWJDb3Jl
L2JpbmRpbmdzL29iamMvT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0KaW5kZXggOTgyY2ZlMC4u
MGI4YmZlYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVy
Q29uZGl0aW9uLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9PYmpDTm9kZUZpbHRlckNv
bmRpdGlvbi5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiT2JqQ05vZGVGaWx0ZXJDb25k
aXRpb24uaCIKIAogI2ltcG9ydCAiRE9NTm9kZUZpbHRlci5oIgorI2ltcG9ydCAiRXhjZXB0aW9u
Q29udGV4dC5oIgogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJOb2RlRmls
dGVyLmgiCiAKQEAgLTM3LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zaG9ydCBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9k
ZShFeGVjU3RhdGUqLCBOb2RlKiBub2RlKSBjb25zdAorc2hvcnQgT2JqQ05vZGVGaWx0ZXJDb25k
aXRpb246OmFjY2VwdE5vZGUoRXhjZXB0aW9uQ29udGV4dCosIE5vZGUqIG5vZGUpIGNvbnN0CiB7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVD
VDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQuY3BwIGIvV2ViQ29y
ZS9kb20vRXhjZXB0aW9uQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzdhNjUyOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNv
bnRleHQuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29v
Z2xlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db250ZXh0Lmgi
CisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRXhjZXB0aW9uQ29udGV4dDo6RXhjZXB0aW9uQ29udGV4dChOb2Rl
KiBub2RlKQorICAgIDogbV9kYXRhKGV4ZWNTdGF0ZUZyb21Ob2RlKG5vZGUpKQoreworfQorCiti
b29sIEV4Y2VwdGlvbkNvbnRleHQ6OmhhZEV4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIG1fZGF0
YS0+aGFkRXhjZXB0aW9uKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Db250ZXh0LmggYi9XZWJDb3JlL2RvbS9FeGNlcHRp
b25Db250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkZjE0NQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQuaApAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEV4
Y2VwdGlvbkNvbnRleHRfaAorI2RlZmluZSBFeGNlcHRpb25Db250ZXh0X2gKKworI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvbnRleHREYXRhLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIE5vZGU7CisKKyAgICAvLyBQcm92aWRl
cyBjb250ZXh0IG9mIGFuIGV4Y2VwdGlvbi4gVGhpcyBjbGFzcyBzdXBwbGllcyBpbmZvcm1hdGlv
biBvbgorICAgIC8vIHdoZXRoZXIgYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBoYWQgb2NjdXJyZWQu
CisgICAgY2xhc3MgRXhjZXB0aW9uQ29udGV4dCA6IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEV4Y2VwdGlvbkNvbnRleHQoTm9kZSogbm9kZSk7CisgICAgICAgIEV4Y2VwdGlv
bkNvbnRleHQoRXhjZXB0aW9uQ29udGV4dERhdGEgZGF0YSkgOiBtX2RhdGEoZGF0YSkge30KKyAg
ICAgICAgfkV4Y2VwdGlvbkNvbnRleHQoKSB7fQorCisgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9u
KCk7CisgICAgICAgIEV4Y2VwdGlvbkNvbnRleHREYXRhIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGE7IH0KKyAgICAgICAgdm9pZCBzZXREYXRhKEV4Y2VwdGlvbkNvbnRleHREYXRhIGRhdGEp
IHsgbV9kYXRhID0gZGF0YTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgRXhjZXB0aW9uQ29u
dGV4dERhdGEgbV9kYXRhOworICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAgLy8gIWRlZmluZWQoRXhjZXB0aW9uQ29udGV4dF9oKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vTm9kZUZpbHRlci5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNwcAppbmRleCAw
NjlmODk4Li43ZTBmYjUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNwcAor
KysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNwcApAQCAtMjUsMTcgKzI1LDIxIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlIDxranMvRXhlY1N0
YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUp
IGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyOjphY2NlcHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqIGV4
ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgLy8gY2FzdCB0byBzaG9ydCBzaWxlbmNlcyAi
ZW51bWVyYWwgYW5kIG5vbi1lbnVtZXJhbCB0eXBlcyBpbiByZXR1cm4iIHdhcm5pbmcKICAgICBy
ZXR1cm4gbV9jb25kaXRpb24gPyBtX2NvbmRpdGlvbi0+YWNjZXB0Tm9kZShleGVjLCBub2RlKSA6
IHN0YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKIH0KIAorc2hvcnQgTm9kZUZpbHRl
cjo6YWNjZXB0Tm9kZShOb2RlKiBub2RlKSBjb25zdAoreworICAgIEV4Y2VwdGlvbkNvbnRleHQg
Y29udGV4dChub2RlKTsKKyAgICByZXR1cm4gYWNjZXB0Tm9kZSgmY29udGV4dCwgbm9kZSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVG
aWx0ZXIuaCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAppbmRleCA0N2QwYTRhLi5lYWQ3YTBj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKKysrIGIvV2ViQ29yZS9kb20v
Tm9kZUZpbHRlci5oCkBAIC0yNSwxMyArMjUsMTQgQEAKICNpZm5kZWYgTm9kZUZpbHRlcl9oCiAj
ZGVmaW5lIE5vZGVGaWx0ZXJfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiTm9kZUZpbHRlckNvbmRpdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFz
cyBFeGNlcHRpb25Db250ZXh0OworCiAgICAgY2xhc3MgTm9kZUZpbHRlciA6IHB1YmxpYyBSZWZD
b3VudGVkPE5vZGVGaWx0ZXI+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8qKgpAQCAtNzEsMTEg
KzcyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTm9kZUZpbHRlcihjb25kaXRpb24pKTsKICAgICAgICAgfQogCi0gICAgICAgIHNob3J0
IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBOb2RlKikgY29uc3Q7CisgICAgICAgIHNob3J0
IGFjY2VwdE5vZGUoRXhjZXB0aW9uQ29udGV4dCosIE5vZGUqKSBjb25zdDsKICAgICAgICAgdm9p
ZCBtYXJrKCkgeyBtX2NvbmRpdGlvbi0+bWFyaygpOyB9OwogCiAgICAgICAgIC8vIEZvciBub24t
SlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFTY3JpcHQgZXhjZXB0aW9uIGlm
IGFueS4KLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiBub2RlKSBjb25zdCB7IHJldHVy
biBhY2NlcHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG5vZGUpLCBub2RlKTsgfQorICAgICAgICBz
aG9ydCBhY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgTm9kZUZpbHRlcihQYXNzUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+IGNvbmRpdGlvbikg
OiBtX2NvbmRpdGlvbihjb25kaXRpb24pIHsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNw
cAppbmRleCA3NDY3N2I3Li5lNDIxNDkyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmls
dGVyQ29uZGl0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNw
cApAQCAtMjcsMTEgKzI3LDExIEBACiAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKLXVzaW5n
IG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRl
ckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqLCBOb2RlKikgY29uc3QKK2NsYXNzIEV4
Y2VwdGlvbkNvbnRleHQ7CisKK3Nob3J0IE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUo
RXhjZXB0aW9uQ29udGV4dCosIE5vZGUqKSBjb25zdAogewogICAgIHJldHVybiBOb2RlRmlsdGVy
OjpGSUxURVJfQUNDRVBUOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNv
bmRpdGlvbi5oIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IDZmY2Rm
YTguLjRhZmRkYTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24u
aAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgKQEAgLTI3LDE4ICsyNywx
NSBAQAogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci0g
ICAgY2xhc3MgRXhlY1N0YXRlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFz
cyBFeGNlcHRpb25Db250ZXh0OwogICAgIGNsYXNzIE5vZGU7CiAKICAgICBjbGFzcyBOb2RlRmls
dGVyQ29uZGl0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUZpbHRlckNvbmRpdGlvbj4gewog
ICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNvbmRpdGlvbigpIHsgfQot
ICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBOb2RlKikg
Y29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoRXhjZXB0aW9uQ29u
dGV4dCosIE5vZGUqKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCkgeyB9
CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcCBiL1dl
YkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKaW5kZXggYmFkMTMwMy4uZWRlMzJkMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2Rl
SXRlcmF0b3IuY3BwCkBAIC0yNSwxMyArMjUsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgPGtqcy9FeGVjU3RhdGUuaD4KICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogCi11c2luZyBu
YW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5vZGVJdGVyYXRvcjo6Tm9k
ZVBvaW50ZXI6Ok5vZGVQb2ludGVyKCkKQEAgLTg2LDcgKzg0LDcgQEAgTm9kZUl0ZXJhdG9yOjp+
Tm9kZUl0ZXJhdG9yKCkKICAgICByb290KCktPmRvY3VtZW50KCktPmRldGFjaE5vZGVJdGVyYXRv
cih0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4
ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPE5vZGU+IE5vZGVJ
dGVyYXRvcjo6bmV4dE5vZGUoRXhjZXB0aW9uQ29udGV4dCogZXhlYywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKQEAgLTExNSw3ICsxMTMsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6
bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6OnBy
ZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0
cjxOb2RlPiBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGNlcHRpb25Db250ZXh0KiBleGVj
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAobV9kZXRhY2hlZCkgewogICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMjI2LDUgKzIyNCwxNiBAQCB2b2lkIE5vZGVJdGVy
YXRvcjo6dXBkYXRlRm9yTm9kZVJlbW92YWwoTm9kZSogcmVtb3ZlZE5vZGUsIE5vZGVQb2ludGVy
JiByZWZlcmVuYwogICAgIH0KIH0KIAorUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6Om5l
eHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4
dChyZWZlcmVuY2VOb2RlKCkpOworICAgIHJldHVybiBuZXh0Tm9kZSgmY29udGV4dCwgZWMpOwor
fQorCitQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChyZWZlcmVuY2VOb2Rl
KCkpOworICAgIHJldHVybiBwcmV2aW91c05vZGUoJmNvbnRleHQsIGVjKTsKK30KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgg
Yi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAppbmRleCA4NDJlNzFkLi5jNTNhMDEwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAorKysgYi9XZWJDb3JlL2RvbS9Ob2Rl
SXRlcmF0b3IuaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBOb2RlSXRlcmF0b3JfaAogI2Rl
ZmluZSBOb2RlSXRlcmF0b3JfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgIlRyYXZlcnNhbC5oIgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CkBAIC0zMyw2ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
ICAgIGNsYXNzIEV4Y2VwdGlvbkNvbnRleHQ7CisKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwogCiAgICAgY2xhc3MgTm9kZUl0ZXJhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUl0
ZXJhdG9yPiwgcHVibGljIFRyYXZlcnNhbCB7CkBAIC00Myw4ICs0NCw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgfQogICAgICAgICB+Tm9kZUl0ZXJhdG9yKCk7CiAKLSAgICAgICAg
UGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoSlNDOjpFeGVjU3RhdGUq
LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUoRXhj
ZXB0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxOb2Rl
PiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAg
ICAgdm9pZCBkZXRhY2goKTsKIAogICAgICAgICBOb2RlKiByZWZlcmVuY2VOb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWZlcmVuY2VOb2RlLm5vZGUuZ2V0KCk7IH0KQEAgLTU0LDggKzU1LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUq
KTsKIAogICAgICAgICAvLyBGb3Igbm9uLUpTIGJpbmRpbmdzLiBTaWxlbnRseSBpZ25vcmVzIHRo
ZSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpZiBhbnkuCi0gICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4g
bmV4dE5vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG5leHROb2RlKGV4ZWNTdGF0ZUZy
b21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+
IHByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHJldmlvdXNOb2RlKGV4
ZWNTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQorICAgICAgICBQYXNzUmVm
UHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgUGFzc1JlZlB0
cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZUl0ZXJhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1No
b3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwIGIvV2ViQ29yZS9kb20vVHJh
dmVyc2FsLmNwcAppbmRleCBjMmM5MWQ0Li4wNWZjODhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9UcmF2ZXJzYWwuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAKQEAgLTI1LDEx
ICsyNSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRyYXZlcnNhbC5oIgog
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJOb2RlRmlsdGVyLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogVHJhdmVyc2FsOjpUcmF2ZXJzYWwoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9k
ZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiBub2RlRmlsdGVy
LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCkBAIC00MCw3ICszOSw3IEBAIFRyYXZlcnNh
bDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1No
b3csIFBhc3NSZWZQdHI8CiB7CiB9CiAKLXNob3J0IFRyYXZlcnNhbDo6YWNjZXB0Tm9kZShFeGVj
U3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5v
ZGUoRXhjZXB0aW9uQ29udGV4dCogZXhlYywgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBG
SVhNRTogVG8gaGFuZGxlIFhNTCBwcm9wZXJseSB3ZSB3b3VsZCBoYXZlIHRvIGNoZWNrIG1fZXhw
YW5kRW50aXR5UmVmZXJlbmNlcy4KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJhdmVyc2Fs
LmggYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAppbmRleCA2ZTg3MTAzLi4yYWIwZjRhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAorKysgYi9XZWJDb3JlL2RvbS9UcmF2ZXJz
YWwuaApAQCAtMjgsMTIgKzI4LDkgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgRXhlY1N0YXRl
OwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBFeGNlcHRpb25Db250ZXh0
OwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgTm9kZUZpbHRlcjsKIApAQCAtNDYsNyArNDMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFRyYXZl
cnNhbChQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5v
ZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwotICAgICAgICBzaG9ydCBh
Y2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAgICAgICBzaG9ydCBh
Y2NlcHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKikgY29uc3Q7CiAKICAgICBwcml2YXRl
OgogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9yb290OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
VHJlZVdhbGtlci5jcHAgYi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAppbmRleCA2NmZjOGQy
Li5iMjhjY2IxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAorKysgYi9X
ZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcApAQCAtMjUsMTQgKzI1LDEyIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVHJlZVdhbGtlci5oIgogCi0jaW5jbHVkZSA8a2pzL0V4ZWNT
dGF0ZS5oPgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJDb250YWluZXJO
b2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
bnRleHQuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBU
cmVlV2Fsa2VyOjpUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2lnbmVk
IHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gZmlsdGVyLCBib29sIGV4cGFuZEVu
dGl0eVJlZmVyZW5jZXMpCkBAIC01Niw3ICs1NCw3IEBAIGlubGluZSBOb2RlKiBUcmVlV2Fsa2Vy
OjpzZXRDdXJyZW50KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICByZXR1cm4gbV9jdXJyZW50
LmdldCgpOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhl
YykKK05vZGUqIFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhjZXB0aW9uQ29udGV4dCogZXhlYykK
IHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICB3aGlsZSAobm9kZSAh
PSByb290KCkpIHsKQEAgLTcyLDcgKzcwLDcgQEAgTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9k
ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6
OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGls
ZChFeGNlcHRpb25Db250ZXh0KiBleGVjKQogewogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUg
PSBtX2N1cnJlbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgKSB7CiAgICAgICAgIHNob3J0IGFjY2Vw
dE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwpAQCAtMTA1LDcgKzEw
Myw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQogICAg
IHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBl
eGVjKQorTm9kZSogVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMp
CiB7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudC0+bGFzdENoaWxkKCk7
IG5vZGU7ICkgewogICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShl
eGVjLCBub2RlLmdldCgpKTsKQEAgLTEzOCw3ICsxMzYsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjps
YXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVl
V2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtl
cjo6cHJldmlvdXNTaWJsaW5nKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMpCiB7CiAgICAgUmVmUHRy
PE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgaWYgKG5vZGUgPT0gcm9vdCgpKQpAQCAtMTc0
LDcgKzE3Miw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgfQogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3Rh
dGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGNlcHRpb25Db250ZXh0
KiBleGVjKQogewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIGlmIChu
b2RlID09IHJvb3QoKSkKQEAgLTIxMCw3ICsyMDgsNyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0
U2libGluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpw
cmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNO
b2RlKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBt
X2N1cnJlbnQ7CiAgICAgd2hpbGUgKG5vZGUgIT0gcm9vdCgpKSB7CkBAIC0yNDksNyArMjQ3LDcg
QEAgTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYykKICAgICBy
ZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVj
KQorTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhjZXB0aW9uQ29udGV4dCogZXhlYykKIHsK
ICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKIENoaWxkcmVuOgpAQCAtMjc2LDQg
KzI3NCw0NiBAQCBDaGlsZHJlbjoKICAgICByZXR1cm4gMDsKIH0KIAorTm9kZSogVHJlZVdhbGtl
cjo6cGFyZW50Tm9kZSgpCit7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KG1fY3VycmVu
dC5nZXQoKSk7CisgICAgcmV0dXJuIHBhcmVudE5vZGUoJmNvbnRleHQpOworfQorCitOb2RlKiBU
cmVlV2Fsa2VyOjpmaXJzdENoaWxkKCkKK3sKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQo
bV9jdXJyZW50LmdldCgpKTsKKyAgICByZXR1cm4gZmlyc3RDaGlsZCgmY29udGV4dCk7Cit9CisK
K05vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZCgpCit7CisgICAgRXhjZXB0aW9uQ29udGV4dCBj
b250ZXh0KG1fY3VycmVudC5nZXQoKSk7CisgICAgcmV0dXJuIGxhc3RDaGlsZCgmY29udGV4dCk7
Cit9CisKK05vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZygpCit7CisgICAgRXhjZXB0
aW9uQ29udGV4dCBjb250ZXh0KG1fY3VycmVudC5nZXQoKSk7CisgICAgcmV0dXJuIHByZXZpb3Vz
U2libGluZygmY29udGV4dCk7Cit9CisKK05vZGUqIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKCkK
K3sKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQobV9jdXJyZW50LmdldCgpKTsKKyAgICBy
ZXR1cm4gbmV4dFNpYmxpbmcoJmNvbnRleHQpOworfQorCitOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2
aW91c05vZGUoKQoreworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChtX2N1cnJlbnQuZ2V0
KCkpOworICAgIHJldHVybiBwcmV2aW91c05vZGUoJmNvbnRleHQpOworfQorCitOb2RlKiBUcmVl
V2Fsa2VyOjpuZXh0Tm9kZSgpCit7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KG1fY3Vy
cmVudC5nZXQoKSk7CisgICAgcmV0dXJuIG5leHROb2RlKCZjb250ZXh0KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oIGIv
V2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCmluZGV4IDM0OGZmOTQuLjVjYzVmMjUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaAorKysgYi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2Vy
LmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpZm5kZWYgVHJlZVdhbGtlcl9oCiAjZGVmaW5lIFRyZWVX
YWxrZXJfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDUsMjIgKzQ1LDIyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnQuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRDdXJyZW50Tm9kZShQYXNzUmVm
UHRyPE5vZGU+LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZShK
U0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBmaXJzdENoaWxkKEpTQzo6RXhlY1N0YXRl
Kik7Ci0gICAgICAgIE5vZGUqIGxhc3RDaGlsZChKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBO
b2RlKiBwcmV2aW91c1NpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogbmV4
dFNpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEpT
Qzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKik7
CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoRXhjZXB0aW9uQ29udGV4dCopOworICAgICAgICBO
b2RlKiBmaXJzdENoaWxkKEV4Y2VwdGlvbkNvbnRleHQqKTsKKyAgICAgICAgTm9kZSogbGFzdENo
aWxkKEV4Y2VwdGlvbkNvbnRleHQqKTsKKyAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKEV4
Y2VwdGlvbkNvbnRleHQqKTsKKyAgICAgICAgTm9kZSogbmV4dFNpYmxpbmcoRXhjZXB0aW9uQ29u
dGV4dCopOworICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29udGV4dCopOwor
ICAgICAgICBOb2RlKiBuZXh0Tm9kZShFeGNlcHRpb25Db250ZXh0Kik7CiAKICAgICAgICAgLy8g
Rm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlwdCBleGNl
cHRpb24gaWYgYW55LgotICAgICAgICBOb2RlKiBwYXJlbnROb2RlKCkgeyByZXR1cm4gcGFyZW50
Tm9kZShleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2Rl
KiBmaXJzdENoaWxkKCkgeyByZXR1cm4gZmlyc3RDaGlsZChleGVjU3RhdGVGcm9tTm9kZShtX2N1
cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoKSB7IHJldHVybiBsYXN0
Q2hpbGQoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9k
ZSogcHJldmlvdXNTaWJsaW5nKCkgeyByZXR1cm4gcHJldmlvdXNTaWJsaW5nKGV4ZWNTdGF0ZUZy
b21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKCkg
eyByZXR1cm4gbmV4dFNpYmxpbmcoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7
IH0KLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCkgeyByZXR1cm4gcHJldmlvdXNOb2RlKGV4
ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIG5leHRO
b2RlKCkgeyByZXR1cm4gbmV4dE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgp
KSk7IH0KKyAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpOworICAgICAgICBOb2RlKiBmaXJzdENo
aWxkKCk7CisgICAgICAgIE5vZGUqIGxhc3RDaGlsZCgpOworICAgICAgICBOb2RlKiBwcmV2aW91
c1NpYmxpbmcoKTsKKyAgICAgICAgTm9kZSogbmV4dFNpYmxpbmcoKTsKKyAgICAgICAgTm9kZSog
cHJldmlvdXNOb2RlKCk7CisgICAgICAgIE5vZGUqIG5leHROb2RlKCk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICBUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1No
b3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24849</attachid>
            <date>2008-11-02 10:23:55 -0800</date>
            <delta_ts>2008-11-21 14:59:02 -0800</delta_ts>
            <desc>Platform independence with magic headers</desc>
            <filename>ec3.diff</filename>
            <type>text/plain</type>
            <size>34555</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGUwMjI4NS4uOTg4MWE5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NSBAQAorMjAwOC0xMC0yNyAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBFeGNlcHRpb25Db250ZXh0LCBhbiBhYnN0
cmFjdGlvbiB3aGljaCBjYXJyaWVzIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiwKKyAgICAgICAgcHJv
ZHVjZWQgYnkgSmF2YVNjcmlwdC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9FeGNlcHRpb25Db250ZXh0RGF0YS5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVG
aWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9k
ZUZpbHRlckNvbmRpdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U05vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1Ry
ZWVXYWxrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpwYXJl
bnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJl
ZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtl
cjo6cHJldmlvdXNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6bmV4dE5v
ZGUpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6T2JqQ05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOgorICAg
ICAgICAqIGRvbS9FeGNlcHRpb25Db250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpFeGNlcHRpb25Db250ZXh0OjpFeGNlcHRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkV4Y2VwdGlvbkNvbnRleHQ6OmhhZEV4Y2VwdGlvbik6CisgICAgICAgICogZG9tL0V4Y2VwdGlv
bkNvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0OjpF
eGNlcHRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2VwdGlvbkNvbnRleHQ6OmRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6RXhjZXB0aW9uQ29udGV4dDo6c2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeGNlcHRpb25Db250ZXh0Ojp+RXhjZXB0aW9uQ29udGV4dCk6CisgICAg
ICAgICogZG9tL05vZGVGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUZpbHRlcjo6
YWNjZXB0Tm9kZSk6CisgICAgICAgICogZG9tL05vZGVGaWx0ZXIuaDoKKyAgICAgICAgKiBkb20v
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyQ29u
ZGl0aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5o
OgorICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6OnBy
ZXZpb3VzTm9kZSk6CisgICAgICAgICogZG9tL05vZGVJdGVyYXRvci5oOgorICAgICAgICAqIGRv
bS9UcmF2ZXJzYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhdmVyc2FsOjphY2NlcHROb2Rl
KToKKyAgICAgICAgKiBkb20vVHJhdmVyc2FsLmg6CisgICAgICAgICogZG9tL1RyZWVXYWxrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cGFyZW50Tm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVXYWxrZXI6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpwcmV2
aW91c1NpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKKyAgICAgICAgKiBkb20vVHJlZVdhbGtl
ci5oOgorCiAyMDA4LTEwLTI3ICBLZXZpbiBXYXR0ZXJzICA8a2V2aW53YXR0ZXJzQGdtYWlsLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZXZpbiBPbGxpdmllci4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDRmMTlm
OWUuLjZkY2M5YWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNjU2LDYgKzY1Niw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJV2ViQ29yZS9kb20vRXhjZXB0aW9uQmFzZS5oIFwKIAlXZWJDb3JlL2RvbS9FeGNlcHRp
b25Db2RlLmNwcCBcCiAJV2ViQ29yZS9kb20vRXhjZXB0aW9uQ29kZS5oIFwKKwlXZWJDb3JlL2Rv
bS9FeGNlcHRpb25Db250ZXh0LmNwcCBcCisJV2ViQ29yZS9kb20vRXhjZXB0aW9uQ29udGV4dC5o
IFwKIAlXZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcCBcCiAJV2ViQ29yZS9kb20vS2V5Ym9h
cmRFdmVudC5oIFwKIAlXZWJDb3JlL2RvbS9NYXBwZWRBdHRyaWJ1dGUuY3BwIFwKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGY4ZGM2
NDIuLjcwNzZmNjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtNTM3LDYgKzUzNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9F
dmVudFRhcmdldE5vZGUuY3BwIFwKICAgICBkb20vRXhjZXB0aW9uQmFzZS5jcHAgXAogICAgIGRv
bS9FeGNlcHRpb25Db2RlLmNwcCBcCisgICAgZG9tL0V4Y2VwdGlvbkNvbnRleHQuY3BwIFwKICAg
ICBkb20vS2V5Ym9hcmRFdmVudC5jcHAgXAogICAgIGRvbS9NYXBwZWRBdHRyaWJ1dGUuY3BwIFwK
ICAgICBkb20vTWVzc2FnZUNoYW5uZWwuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCmluZGV4IGIyMTU1N2EuLmNiMTNhNzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtMTA3MDIsNiArMTA3MDIsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXEV4Y2VwdGlvbkNvbnRleHQuY3Bw
Ig0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZV9Q
R098V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiDQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KKwkJCQkJLz4N
CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxkb21cRXhjZXB0aW9uQ29udGV4dC5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXEV4Y2VwdGlvbkNvZGUu
Y3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2Q1ZjNjMC4uMjJiOTQ2MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4Niw2ICs0ODYsOSBAQAog
CQkzN0FDQ0Y2OTBEQTQxNEU3MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QUNDRTYyMERBMkFBOTYw
MDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwICovOyB9OwogCQkzN0Y4MThGRDBENjU3NjA2
MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29y
ZVVSTFJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZD
MEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CisJCTQxMTUw
MzYwMEVCMkJFNzEwMDk3QTlCRCAvKiBFeGNlcHRpb25Db250ZXh0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMTUwMzVFMEVCMkJFNzEwMDk3QTlC
RCAvKiBFeGNlcHRpb25Db250ZXh0LmNwcCAqLzsgfTsKKwkJNDExNTAzNjEwRUIyQkU3MTAwOTdB
OUJEIC8qIEV4Y2VwdGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxMTUwMzVGMEVCMkJFNzEwMDk3QTlCRCAvKiBFeGNlcHRpb25Db250
ZXh0LmggKi87IH07CisJCTQxODY1Nzk1MEVCRDRFNzIwMDczMDJEMiAvKiBFeGNlcHRpb25Db250
ZXh0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDE4NjU3OTQwRUJENEU3MjAwNzMwMkQyIC8qIEV4Y2VwdGlvbkNvbnRleHREYXRhLmggKi87IH07
CiAJCTQ0MTUyOTJFMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDE1MjkyQzBF
MUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovOyB9OwogCQk0NDE1
MjkyRjBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDE1MjkyRDBFMUFFOEEw
MDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgKi87IH07CiAJCTQ0MUIwNTU2
MENENzc5QjYwMDdDMUYxOCAvKiBET01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQyOUFB
RUEwQ0I4NERDNzAwNzY0N0M1IC8qIERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmggKi87IH07CkBA
IC01MjMxLDYgKzUyMzQsOSBAQAogCQkzN0FDQ0U2MjBEQTJBQTk2MDA4OUU2MDIgLyogRm9udERl
c2NyaXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRE
ZXNjcmlwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RjgxOEZCMEQ2
NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2Uu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVVJMUmVz
cG9uc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMTUwMzVFMEVCMkJFNzEw
MDk3QTlCRCAvKiBFeGNlcHRpb25Db250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4Y2VwdGlvbkNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MTE1MDM1RjBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb25Db250ZXh0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxODY1Nzk0MEVCRDRFNzIwMDczMDJEMiAvKiBFeGNl
cHRpb25Db250ZXh0RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNl
cHRpb25Db250ZXh0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1Mjky
QzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MTUyOTJEMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NDI5QUFFQTBDQjg0REM3MDA3NjQ3QzUgLyogRE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUNTU1N0eWxlU2hlZXRQcml2YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjgzOCw2ICsxMjg0NCw3IEBACiAJ
CQkJOTNGOEIzMDYwQTMwMEZFQTAwRjYxQUI4IC8qIENvZGVHZW5lcmF0b3JKUy5wbSAqLywKIAkJ
CQkxNDMyRTg0ODBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmNwcCAqLywKIAkJCQkx
NDMyRTg0NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggKi8sCisJCQkJNDE4NjU3
OTQwRUJENEU3MjAwNzMwMkQyIC8qIEV4Y2VwdGlvbkNvbnRleHREYXRhLmggKi8sCiAJCQkJRTRF
RUZGQzYwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJ
RTRFRUZGQzcwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5oICovLAogCQkJ
CUUxMEI5M0MyMEI3M0MyOTEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAg
Ki8sCkBAIC0xMzkwMyw2ICsxMzkxMCw4IEBACiAJCQkJQkM2MEQ4RjEwRDJBMTFFMDAwQjk5MThG
IC8qIEV4Y2VwdGlvbkJhc2UuaCAqLywKIAkJCQk5MzgzMUI1NjBEMDg3RDYwMDBFNUM5ODQgLyog
RXhjZXB0aW9uQ29kZS5jcHAgKi8sCiAJCQkJOTM1RkJDRjEwOUJBMTQzQjAwRTIzMEIxIC8qIEV4
Y2VwdGlvbkNvZGUuaCAqLywKKwkJCQk0MTE1MDM1RTBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0
aW9uQ29udGV4dC5jcHAgKi8sCisJCQkJNDExNTAzNUYwRUIyQkU3MTAwOTdBOUJEIC8qIEV4Y2Vw
dGlvbkNvbnRleHQuaCAqLywKIAkJCQk4NTAzMUIyRDBBNDRFRkM3MDBGOTkyRTAgLyogS2V5Ym9h
cmRFdmVudC5jcHAgKi8sCiAJCQkJODUwMzFCMkUwQTQ0RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJk
RXZlbnQuaCAqLywKIAkJCQkxNENGN0MyMDA5RjcxMTA2MDBFQjM2NjUgLyogS2V5Ym9hcmRFdmVu
dC5pZGwgKi8sCkBAIC0xNjE1NCw2ICsxNjE2Myw4IEBACiAJCQkJQkNGRjY0OTIwRUFEMTVDMjAw
QzFENkY3IC8qIExlbmd0aFNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzM2QzAzMEVCMDc2
RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
NzA1MjEwRUIxODE1NjAwQjkwQUQ4IC8qIEF0b21pY1N0cmluZ0hhc2guaCBpbiBIZWFkZXJzICov
LAorCQkJCTQxMTUwMzYxMEVCMkJFNzEwMDk3QTlCRCAvKiBFeGNlcHRpb25Db250ZXh0LmggaW4g
SGVhZGVycyAqLywKKwkJCQk0MTg2NTc5NTBFQkQ0RTcyMDA3MzAyRDIgLyogRXhjZXB0aW9uQ29u
dGV4dERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTgwMzksNiArMTgwNTAsNyBAQAogCQkJCUJD
RTY1QkVBMEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFNjVEMzIwRUFEMTIxMTAwN0U0NTMzIC8qIFRoZW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxQzM2Q0JEMEVCMDgwNjIwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk0MTE1MDM2MDBFQjJCRTcxMDA5N0E5QkQgLyogRXhjZXB0aW9uQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVy
Q29uZGl0aW9uLmNwcAppbmRleCBiNDY1MTE1Li45MDQ1NGY1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgiCiAKKyNp
bmNsdWRlICJFeGNlcHRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVk
ZSAiSlNOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgpAQCAtNDIsNyArNDMs
NyBAQCB2b2lkIEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6bWFyaygpCiAgICAgICAgIG1fZmlsdGVy
LT5tYXJrKCk7CiB9CiAKLXNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkgY29uc3QKK3Nob3J0IEpTTm9k
ZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShFeGNlcHRpb25Db250ZXh0KiBjb250ZXh0LCBO
b2RlKiBmaWx0ZXJOb2RlKSBjb25zdAogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKIApAQCAt
NTEsNiArNTIsNyBAQCBzaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIGZpbHRlck5vZGUpCiAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7
CiAKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGNvbnRleHQtPmRhdGEoKTsKICAgIC8vIFRo
ZSBleGVjIGFyZ3VtZW50IGhlcmUgc2hvdWxkIG9ubHkgYmUgbnVsbCBpZiB0aGlzIHdhcyBjYWxs
ZWQgZnJvbSBhCiAgICAvLyBub24tSmF2YVNjcmlwdCBsYW5ndWFnZSwgYW5kIHRoaXMgaXMgYSBK
YXZhU2NyaXB0IGZpbHRlciwgYW5kIHRoZSBkb2N1bWVudAogICAgLy8gaW4gcXVlc3Rpb24gaXMg
bm90IGFzc29jaWF0ZWQgd2l0aCB0aGUgZnJhbWUuIEluIHRoYXQgY2FzZSwgd2UncmUgZ29pbmcg
dG8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9u
LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IGMw
NDk1NDIuLjkyYTA1ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmls
dGVyQ29uZGl0aW9uLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uaApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNWYWx1ZSogZmlsdGVyKTsK
IAotICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBOb2Rl
KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShFeGNlcHRpb25Db250
ZXh0KiwgTm9kZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogCiAgICAg
ICAgIEpTQzo6SlNWYWx1ZSogbV9maWx0ZXI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckN1c3RvbS5jcHAKaW5kZXggMzUxMDYyYi4uMTZkNGVkMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTm9kZUZpbHRlci5oIgogCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTTm9kZUZpbHRl
ckNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKQEAgLTQzLDcgKzQ0LDggQEAg
dm9pZCBKU05vZGVGaWx0ZXI6Om1hcmsoKQogCiBKU1ZhbHVlKiBKU05vZGVGaWx0ZXI6OmFjY2Vw
dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVy
biBqc051bWJlcihleGVjLCBpbXBsKCktPmFjY2VwdE5vZGUoZXhlYywgdG9Ob2RlKGFyZ3MuYXQo
ZXhlYywgMCkpKSk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOworICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBpbXBsKCktPmFjY2VwdE5vZGUoJmNvbnRleHQsIHRvTm9kZShh
cmdzLmF0KGV4ZWMsIDApKSkpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZp
bHRlcihKU1ZhbHVlKiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlSXRlcmF0b3JDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRv
ckN1c3RvbS5jcHAKaW5kZXggNDQ1YzhjYi4uOGFhMWRlYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJKU05vZGVJdGVyYXRvci5oIgogCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
ICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCkBAIC00MCw3ICs0MSw4IEBAIHZvaWQgSlNOb2RlSXRl
cmF0b3I6Om1hcmsoKQogSlNWYWx1ZSogSlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZXhlYywgZWMpOwor
ICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChleGVjKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9k
ZSA9IGltcGwoKS0+bmV4dE5vZGUoJmNvbnRleHQsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CkBAIC01NSw3ICs1Nyw4IEBAIEpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiBKU1ZhbHVlKiBKU05vZGVJdGVy
YXRvcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGlt
cGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMsIGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRl
eHQoZXhlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZSgm
Y29udGV4dCwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAppbmRleCA5ODIyZTFhLi5hNWZjMjNmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCkBAIC0yMCw2ICsyMCw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUcmVlV2Fsa2VyLmgiCiAKKyNpbmNs
dWRlICJFeGNlcHRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKQEAgLTM5LDcgKzQwLDggQEAgdm9pZCBK
U1RyZWVXYWxrZXI6Om1hcmsoKQogICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwYXJlbnRO
b2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBu
b2RlID0gaW1wbCgpLT5wYXJlbnROb2RlKGV4ZWMpOworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29u
dGV4dChleGVjKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wYXJlbnROb2RlKCZjb250ZXh0
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNDcsNyArNDksOCBAQCBK
U1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0g
aW1wbCgpLT5maXJzdENoaWxkKGV4ZWMpOworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChl
eGVjKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5maXJzdENoaWxkKCZjb250ZXh0KTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNTUsNyArNTgsOCBAQCBKU1ZhbHVl
KiBKU1RyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCkt
Pmxhc3RDaGlsZChleGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQoZXhlYyk7Cisg
ICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bGFzdENoaWxkKCZjb250ZXh0KTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJl
dHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNjMsNyArNjcsOCBAQCBKU1ZhbHVlKiBKU1RyZWVX
YWxrZXI6Omxhc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiAg
ICAgCiBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5uZXh0U2li
bGluZyhleGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQoZXhlYyk7CisgICAgTm9k
ZSogbm9kZSA9IGltcGwoKS0+bmV4dFNpYmxpbmcoJmNvbnRleHQpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJu
IHRvSlMoZXhlYywgbm9kZSk7CkBAIC03MSw3ICs3Niw4IEBAIEpTVmFsdWUqIEpTVHJlZVdhbGtl
cjo6bmV4dFNpYmxpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogICAg
IAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZp
b3VzU2libGluZyhleGVjKTsKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQoZXhlYyk7Cisg
ICAgTm9kZSogbm9kZSA9IGltcGwoKS0+cHJldmlvdXNTaWJsaW5nKCZjb250ZXh0KTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNzksMTUgKzg1LDE3IEBAIEpTVmFsdWUq
IEpTVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBOb2RlKiBub2RlID0g
aW1wbCgpLT5wcmV2aW91c05vZGUoZXhlYyk7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0
KGV4ZWMpOworICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZSgmY29udGV4dCk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0KLSAgICAKKwogSlNWYWx1ZSog
SlNUcmVlV2Fsa2VyOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7Ci0gICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZXhlYyk7CisgICAgRXhj
ZXB0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMpOworICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPm5l
eHROb2RlKCZjb250ZXh0KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL29iamMvT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaAppbmRleCBl
MTM2YmM0Li40MmY0MzQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvT2JqQ05v
ZGVGaWx0ZXJDb25kaXRpb24uaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL29iamMvT2JqQ05vZGVG
aWx0ZXJDb25kaXRpb24uaApAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBFeGNlcHRpb25Db250ZXh0OwogCiAgICAgY2xh
c3MgT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgTm9kZUZpbHRlckNvbmRpdGlvbiB7
CiAgICAgcHVibGljOgpAQCAtNDQsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKGZpbHRl
cikpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6
RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5v
ZGUoRXhjZXB0aW9uQ29udGV4dCosIE5vZGUqKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKGlkIDxET01Ob2RlRmlsdGVyPiBmaWx0ZXIpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24u
bW0gYi9XZWJDb3JlL2JpbmRpbmdzL29iamMvT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0KaW5k
ZXggOTgyY2ZlMC4uMGI4YmZlYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09i
akNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9PYmpD
Tm9kZUZpbHRlckNvbmRpdGlvbi5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiT2JqQ05v
ZGVGaWx0ZXJDb25kaXRpb24uaCIKIAogI2ltcG9ydCAiRE9NTm9kZUZpbHRlci5oIgorI2ltcG9y
dCAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1w
b3J0ICJOb2RlRmlsdGVyLmgiCiAKQEAgLTM3LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaG9ydCBPYmpDTm9kZUZpbHRlckNvbmRpdGlv
bjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqLCBOb2RlKiBub2RlKSBjb25zdAorc2hvcnQgT2JqQ05v
ZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoRXhjZXB0aW9uQ29udGV4dCosIE5vZGUqIG5v
ZGUpIGNvbnN0CiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6
RklMVEVSX1JFSkVDVDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRleHQu
Y3BwIGIvV2ViQ29yZS9kb20vRXhjZXB0aW9uQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzdhNjUyOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZG9t
L0V4Y2VwdGlvbkNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggR29vZ2xlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25Db250ZXh0LmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJOb2Rl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXhjZXB0aW9uQ29udGV4dDo6RXhjZXB0aW9u
Q29udGV4dChOb2RlKiBub2RlKQorICAgIDogbV9kYXRhKGV4ZWNTdGF0ZUZyb21Ob2RlKG5vZGUp
KQoreworfQorCitib29sIEV4Y2VwdGlvbkNvbnRleHQ6OmhhZEV4Y2VwdGlvbigpCit7CisgICAg
cmV0dXJuIG1fZGF0YS0+aGFkRXhjZXB0aW9uKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Db250ZXh0LmggYi9XZWJDb3Jl
L2RvbS9FeGNlcHRpb25Db250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uODVkZjE0NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvbnRl
eHQuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIEV4Y2VwdGlvbkNvbnRleHRfaAorI2RlZmluZSBFeGNlcHRpb25Db250ZXh0X2gK
KworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvbnRleHREYXRhLmgiCisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIE5vZGU7CisKKyAg
ICAvLyBQcm92aWRlcyBjb250ZXh0IG9mIGFuIGV4Y2VwdGlvbi4gVGhpcyBjbGFzcyBzdXBwbGll
cyBpbmZvcm1hdGlvbiBvbgorICAgIC8vIHdoZXRoZXIgYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBo
YWQgb2NjdXJyZWQuCisgICAgY2xhc3MgRXhjZXB0aW9uQ29udGV4dCA6IE5vbmNvcHlhYmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEV4Y2VwdGlvbkNvbnRleHQoTm9kZSogbm9kZSk7CisgICAg
ICAgIEV4Y2VwdGlvbkNvbnRleHQoRXhjZXB0aW9uQ29udGV4dERhdGEgZGF0YSkgOiBtX2RhdGEo
ZGF0YSkge30KKyAgICAgICAgfkV4Y2VwdGlvbkNvbnRleHQoKSB7fQorCisgICAgICAgIGJvb2wg
aGFkRXhjZXB0aW9uKCk7CisgICAgICAgIEV4Y2VwdGlvbkNvbnRleHREYXRhIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICAgICAgdm9pZCBzZXREYXRhKEV4Y2VwdGlvbkNvbnRl
eHREYXRhIGRhdGEpIHsgbV9kYXRhID0gZGF0YTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
RXhjZXB0aW9uQ29udGV4dERhdGEgbV9kYXRhOworICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAgLy8gIWRlZmluZWQoRXhjZXB0aW9uQ29udGV4dF9oKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVy
LmNwcAppbmRleCAwNjlmODk4Li43ZTBmYjUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2Rl
RmlsdGVyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNwcApAQCAtMjUsMTcgKzI1
LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogCisj
aW5jbHVkZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRl
IDxranMvRXhlY1N0YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqIGV4ZWMs
IE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyOjphY2NlcHROb2RlKEV4Y2VwdGlv
bkNvbnRleHQqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgLy8gY2FzdCB0byBzaG9y
dCBzaWxlbmNlcyAiZW51bWVyYWwgYW5kIG5vbi1lbnVtZXJhbCB0eXBlcyBpbiByZXR1cm4iIHdh
cm5pbmcKICAgICByZXR1cm4gbV9jb25kaXRpb24gPyBtX2NvbmRpdGlvbi0+YWNjZXB0Tm9kZShl
eGVjLCBub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKIH0KIAorc2hv
cnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShOb2RlKiBub2RlKSBjb25zdAoreworICAgIEV4Y2Vw
dGlvbkNvbnRleHQgY29udGV4dChub2RlKTsKKyAgICByZXR1cm4gYWNjZXB0Tm9kZSgmY29udGV4
dCwgbm9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL05vZGVGaWx0ZXIuaCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAppbmRleCA0N2Qw
YTRhLi5lYWQ3YTBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKKysrIGIv
V2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCkBAIC0yNSwxMyArMjUsMTQgQEAKICNpZm5kZWYgTm9k
ZUZpbHRlcl9oCiAjZGVmaW5lIE5vZGVGaWx0ZXJfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlckNvbmRpdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKyAgICBjbGFzcyBFeGNlcHRpb25Db250ZXh0OworCiAgICAgY2xhc3MgTm9kZUZpbHRlciA6
IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVGaWx0ZXI+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8q
KgpAQCAtNzEsMTEgKzcyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTm9kZUZpbHRlcihjb25kaXRpb24pKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBOb2RlKikgY29uc3Q7Cisg
ICAgICAgIHNob3J0IGFjY2VwdE5vZGUoRXhjZXB0aW9uQ29udGV4dCosIE5vZGUqKSBjb25zdDsK
ICAgICAgICAgdm9pZCBtYXJrKCkgeyBtX2NvbmRpdGlvbi0+bWFyaygpOyB9OwogCiAgICAgICAg
IC8vIEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFTY3JpcHQg
ZXhjZXB0aW9uIGlmIGFueS4KLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiBub2RlKSBj
b25zdCB7IHJldHVybiBhY2NlcHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG5vZGUpLCBub2RlKTsg
fQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0OwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgTm9kZUZpbHRlcihQYXNzUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+
IGNvbmRpdGlvbikgOiBtX2NvbmRpdGlvbihjb25kaXRpb24pIHsgfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVy
Q29uZGl0aW9uLmNwcAppbmRleCA3NDY3N2I3Li5lNDIxNDkyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVy
Q29uZGl0aW9uLmNwcApAQCAtMjcsMTEgKzI3LDExIEBACiAKICNpbmNsdWRlICJOb2RlRmlsdGVy
LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hv
cnQgTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqLCBOb2RlKikgY29u
c3QKK2NsYXNzIEV4Y2VwdGlvbkNvbnRleHQ7CisKK3Nob3J0IE5vZGVGaWx0ZXJDb25kaXRpb246
OmFjY2VwdE5vZGUoRXhjZXB0aW9uQ29udGV4dCosIE5vZGUqKSBjb25zdAogewogICAgIHJldHVy
biBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
Tm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5o
CmluZGV4IDZmY2RmYTguLjRhZmRkYTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVGaWx0
ZXJDb25kaXRpb24uaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgKQEAg
LTI3LDE4ICsyNywxNSBAQAogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAotbmFtZXNw
YWNlIEpTQyB7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKyAgICBjbGFzcyBFeGNlcHRpb25Db250ZXh0OwogICAgIGNsYXNzIE5vZGU7CiAKICAgICBj
bGFzcyBOb2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUZpbHRlckNv
bmRpdGlvbj4gewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNvbmRp
dGlvbigpIHsgfQotICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3Rh
dGUqLCBOb2RlKikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUo
RXhjZXB0aW9uQ29udGV4dCosIE5vZGUqKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBtYXJrKCkgeyB9CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJh
dG9yLmNwcCBiL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKaW5kZXggYmFkMTMwMy4uZWRl
MzJkMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAorKysgYi9XZWJD
b3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCkBAIC0yNSwxMyArMjUsMTEgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgPGtqcy9FeGVj
U3RhdGUuaD4KICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5o
IgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5vZGVJ
dGVyYXRvcjo6Tm9kZVBvaW50ZXI6Ok5vZGVQb2ludGVyKCkKQEAgLTg2LDcgKzg0LDcgQEAgTm9k
ZUl0ZXJhdG9yOjp+Tm9kZUl0ZXJhdG9yKCkKICAgICByb290KCktPmRvY3VtZW50KCktPmRldGFj
aE5vZGVJdGVyYXRvcih0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6
Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRy
PE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhjZXB0aW9uQ29udGV4dCogZXhlYywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKQEAgLTExNSw3ICsxMTMsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5v
ZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOb2Rl
SXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGNlcHRpb25D
b250ZXh0KiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAobV9kZXRhY2hlZCkg
ewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMjI2LDUgKzIyNCwxNiBAQCB2
b2lkIE5vZGVJdGVyYXRvcjo6dXBkYXRlRm9yTm9kZVJlbW92YWwoTm9kZSogcmVtb3ZlZE5vZGUs
IE5vZGVQb2ludGVyJiByZWZlcmVuYwogICAgIH0KIH0KIAorUGFzc1JlZlB0cjxOb2RlPiBOb2Rl
SXRlcmF0b3I6Om5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEV4Y2VwdGlvbkNv
bnRleHQgY29udGV4dChyZWZlcmVuY2VOb2RlKCkpOworICAgIHJldHVybiBuZXh0Tm9kZSgmY29u
dGV4dCwgZWMpOworfQorCitQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6cHJldmlvdXNO
b2RlKEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dChy
ZWZlcmVuY2VOb2RlKCkpOworICAgIHJldHVybiBwcmV2aW91c05vZGUoJmNvbnRleHQsIGVjKTsK
K30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9k
ZUl0ZXJhdG9yLmggYi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAppbmRleCA4NDJlNzFkLi5j
NTNhMDEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAorKysgYi9XZWJD
b3JlL2RvbS9Ob2RlSXRlcmF0b3IuaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBOb2RlSXRl
cmF0b3JfaAogI2RlZmluZSBOb2RlSXRlcmF0b3JfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgIlRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0zMyw2ICszMiw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorICAgIGNsYXNzIEV4Y2VwdGlvbkNvbnRleHQ7CisKICAgICB0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOwogCiAgICAgY2xhc3MgTm9kZUl0ZXJhdG9yIDogcHVibGljIFJlZkNv
dW50ZWQ8Tm9kZUl0ZXJhdG9yPiwgcHVibGljIFRyYXZlcnNhbCB7CkBAIC00Myw4ICs0NCw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAgICAgICB+Tm9kZUl0ZXJhdG9yKCk7
CiAKLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoSlND
OjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4g
bmV4dE5vZGUoRXhjZXB0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFz
c1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICAgICAgdm9pZCBkZXRhY2goKTsKIAogICAgICAgICBOb2RlKiByZWZlcmVuY2VO
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VOb2RlLm5vZGUuZ2V0KCk7IH0KQEAgLTU0
LDggKzU1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIG5vZGVXaWxsQmVS
ZW1vdmVkKE5vZGUqKTsKIAogICAgICAgICAvLyBGb3Igbm9uLUpTIGJpbmRpbmdzLiBTaWxlbnRs
eSBpZ25vcmVzIHRoZSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpZiBhbnkuCi0gICAgICAgIFBhc3NS
ZWZQdHI8Tm9kZT4gbmV4dE5vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG5leHROb2Rl
KGV4ZWNTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQotICAgICAgICBQYXNz
UmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHJl
dmlvdXNOb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQorICAg
ICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgTm9kZUl0ZXJhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2ln
bmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5
UmVmZXJlbmNlcyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwIGIvV2Vi
Q29yZS9kb20vVHJhdmVyc2FsLmNwcAppbmRleCBjMmM5MWQ0Li4wNWZjODhmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5j
cHAKQEAgLTI1LDExICsyNSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRy
YXZlcnNhbC5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIk5v
ZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVHJhdmVyc2FsOjpUcmF2ZXJzYWwoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVy
PiBub2RlRmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCkBAIC00MCw3ICszOSw3
IEBAIFRyYXZlcnNhbDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2ln
bmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8CiB7CiB9CiAKLXNob3J0IFRyYXZlcnNhbDo6YWNj
ZXB0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBUcmF2ZXJz
YWw6OmFjY2VwdE5vZGUoRXhjZXB0aW9uQ29udGV4dCogZXhlYywgTm9kZSogbm9kZSkgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogVG8gaGFuZGxlIFhNTCBwcm9wZXJseSB3ZSB3b3VsZCBoYXZlIHRv
IGNoZWNrIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlcy4KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vVHJhdmVyc2FsLmggYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAppbmRleCA2ZTg3MTAzLi4y
YWIwZjRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAorKysgYi9XZWJDb3Jl
L2RvbS9UcmF2ZXJzYWwuaApAQCAtMjgsMTIgKzI4LDkgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xh
c3MgRXhlY1N0YXRlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBFeGNl
cHRpb25Db250ZXh0OwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgTm9kZUZpbHRlcjsKIApA
QCAtNDYsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIFRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQ
YXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwotICAg
ICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAg
ICAgICBzaG9ydCBhY2NlcHROb2RlKEV4Y2VwdGlvbkNvbnRleHQqLCBOb2RlKikgY29uc3Q7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9yb290OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAgYi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcApp
bmRleCA2NmZjOGQyLi5iMjhjY2IxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2Vy
LmNwcAorKysgYi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcApAQCAtMjUsMTQgKzI1LDEyIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVHJlZVdhbGtlci5oIgogCi0jaW5jbHVk
ZSA8a2pzL0V4ZWNTdGF0ZS5oPgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJDb250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBUcmVlV2Fsa2VyOjpUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5v
ZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gZmlsdGVyLCBi
b29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCkBAIC01Niw3ICs1NCw3IEBAIGlubGluZSBOb2Rl
KiBUcmVlV2Fsa2VyOjpzZXRDdXJyZW50KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICByZXR1
cm4gbV9jdXJyZW50LmdldCgpOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4
ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhjZXB0aW9uQ29u
dGV4dCogZXhlYykKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICB3
aGlsZSAobm9kZSAhPSByb290KCkpIHsKQEAgLTcyLDcgKzcwLDcgQEAgTm9kZSogVHJlZVdhbGtl
cjo6cGFyZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUq
IFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtl
cjo6Zmlyc3RDaGlsZChFeGNlcHRpb25Db250ZXh0KiBleGVjKQogewogICAgIGZvciAoUmVmUHRy
PE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgKSB7CiAgICAgICAg
IHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwpA
QCAtMTA1LDcgKzEwMyw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRl
KiBleGVjKQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQo
RXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4Y2VwdGlvbkNv
bnRleHQqIGV4ZWMpCiB7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudC0+
bGFzdENoaWxkKCk7IG5vZGU7ICkgewogICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0g
YWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKQEAgLTEzOCw3ICsxMzYsNyBAQCBOb2RlKiBU
cmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiAwOwogfQog
Ci1Ob2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVjKQorTm9k
ZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMpCiB7
CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgaWYgKG5vZGUgPT0gcm9v
dCgpKQpAQCAtMTc0LDcgKzE3Miw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzU2libGlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2li
bGluZyhFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGNl
cHRpb25Db250ZXh0KiBleGVjKQogewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50
OwogICAgIGlmIChub2RlID09IHJvb3QoKSkKQEAgLTIxMCw3ICsyMDgsNyBAQCBOb2RlKiBUcmVl
V2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogfQogCi1Ob2RlKiBU
cmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtl
cjo6cHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvbnRleHQqIGV4ZWMpCiB7CiAgICAgUmVmUHRyPE5v
ZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgd2hpbGUgKG5vZGUgIT0gcm9vdCgpKSB7CkBAIC0y
NDksNyArMjQ3LDcgQEAgTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhl
Y1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhjZXB0aW9uQ29udGV4
dCogZXhlYykKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKIENoaWxkcmVu
OgpAQCAtMjc2LDQgKzI3NCw0NiBAQCBDaGlsZHJlbjoKICAgICByZXR1cm4gMDsKIH0KIAorTm9k
ZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZSgpCit7CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250
ZXh0KG1fY3VycmVudC5nZXQoKSk7CisgICAgcmV0dXJuIHBhcmVudE5vZGUoJmNvbnRleHQpOwor
fQorCitOb2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKCkKK3sKKyAgICBFeGNlcHRpb25Db250
ZXh0IGNvbnRleHQobV9jdXJyZW50LmdldCgpKTsKKyAgICByZXR1cm4gZmlyc3RDaGlsZCgmY29u
dGV4dCk7Cit9CisKK05vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZCgpCit7CisgICAgRXhjZXB0
aW9uQ29udGV4dCBjb250ZXh0KG1fY3VycmVudC5nZXQoKSk7CisgICAgcmV0dXJuIGxhc3RDaGls
ZCgmY29udGV4dCk7Cit9CisKK05vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZygpCit7
CisgICAgRXhjZXB0aW9uQ29udGV4dCBjb250ZXh0KG1fY3VycmVudC5nZXQoKSk7CisgICAgcmV0
dXJuIHByZXZpb3VzU2libGluZygmY29udGV4dCk7Cit9CisKK05vZGUqIFRyZWVXYWxrZXI6Om5l
eHRTaWJsaW5nKCkKK3sKKyAgICBFeGNlcHRpb25Db250ZXh0IGNvbnRleHQobV9jdXJyZW50Lmdl
dCgpKTsKKyAgICByZXR1cm4gbmV4dFNpYmxpbmcoJmNvbnRleHQpOworfQorCitOb2RlKiBUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUoKQoreworICAgIEV4Y2VwdGlvbkNvbnRleHQgY29udGV4dCht
X2N1cnJlbnQuZ2V0KCkpOworICAgIHJldHVybiBwcmV2aW91c05vZGUoJmNvbnRleHQpOworfQor
CitOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0Tm9kZSgpCit7CisgICAgRXhjZXB0aW9uQ29udGV4dCBj
b250ZXh0KG1fY3VycmVudC5nZXQoKSk7CisgICAgcmV0dXJuIG5leHROb2RlKCZjb250ZXh0KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJl
ZVdhbGtlci5oIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCmluZGV4IDM0OGZmOTQuLjVjYzVm
MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaAorKysgYi9XZWJDb3JlL2Rv
bS9UcmVlV2Fsa2VyLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpZm5kZWYgVHJlZVdhbGtlcl9oCiAj
ZGVmaW5lIFRyZWVXYWxrZXJfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRl
ICJUcmF2ZXJzYWwuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDUsMjIgKzQ1
LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnQuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRDdXJyZW50
Tm9kZShQYXNzUmVmUHRyPE5vZGU+LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgTm9kZSog
cGFyZW50Tm9kZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBmaXJzdENoaWxkKEpT
Qzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIGxhc3RDaGlsZChKU0M6OkV4ZWNTdGF0ZSop
OwotICAgICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAg
ICAgTm9kZSogbmV4dFNpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogcHJl
dmlvdXNOb2RlKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIG5leHROb2RlKEpTQzo6
RXhlY1N0YXRlKik7CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoRXhjZXB0aW9uQ29udGV4dCop
OworICAgICAgICBOb2RlKiBmaXJzdENoaWxkKEV4Y2VwdGlvbkNvbnRleHQqKTsKKyAgICAgICAg
Tm9kZSogbGFzdENoaWxkKEV4Y2VwdGlvbkNvbnRleHQqKTsKKyAgICAgICAgTm9kZSogcHJldmlv
dXNTaWJsaW5nKEV4Y2VwdGlvbkNvbnRleHQqKTsKKyAgICAgICAgTm9kZSogbmV4dFNpYmxpbmco
RXhjZXB0aW9uQ29udGV4dCopOworICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUoRXhjZXB0aW9u
Q29udGV4dCopOworICAgICAgICBOb2RlKiBuZXh0Tm9kZShFeGNlcHRpb25Db250ZXh0Kik7CiAK
ICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2
YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBOb2RlKiBwYXJlbnROb2RlKCkgeyBy
ZXR1cm4gcGFyZW50Tm9kZShleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQot
ICAgICAgICBOb2RlKiBmaXJzdENoaWxkKCkgeyByZXR1cm4gZmlyc3RDaGlsZChleGVjU3RhdGVG
cm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoKSB7
IHJldHVybiBsYXN0Q2hpbGQoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0K
LSAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgeyByZXR1cm4gcHJldmlvdXNTaWJsaW5n
KGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIG5l
eHRTaWJsaW5nKCkgeyByZXR1cm4gbmV4dFNpYmxpbmcoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJy
ZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCkgeyByZXR1cm4gcHJl
dmlvdXNOb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAg
IE5vZGUqIG5leHROb2RlKCkgeyByZXR1cm4gbmV4dE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobV9j
dXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpOworICAgICAgICBO
b2RlKiBmaXJzdENoaWxkKCk7CisgICAgICAgIE5vZGUqIGxhc3RDaGlsZCgpOworICAgICAgICBO
b2RlKiBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgTm9kZSogbmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCk7CisgICAgICAgIE5vZGUqIG5leHROb2RlKCk7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2ln
bmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5
UmVmZXJlbmNlcyk7Cg==
</data>
<flag name="review"
          id="11379"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25364</attachid>
            <date>2008-11-21 14:59:02 -0800</date>
            <delta_ts>2008-11-25 11:10:36 -0800</delta_ts>
            <desc>ScriptState (concept only)</desc>
            <filename>work-in-progress.patch</filename>
            <type>text/plain</type>
            <size>20740</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMzg2NzAp
CisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzg4MSw2ICsxMzg4MSwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0U3RhdGUuaCINCisJ
CQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxi
aW5kaW5nc1xqc1xTY3JpcHRWYWx1ZS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAzODY3MCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDky
LDcgKzQ5Miw3IEBAIEpTVmFsdWUqIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoRXgKICAg
ICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5h
bWUsIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKTsKIH0KIAotRXhlY1N0YXRlKiBleGVjU3RhdGVG
cm9tTm9kZShOb2RlKiBub2RlKQorU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUoTm9k
ZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAzODY3MCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxydW50aW1lL0xvb2t1
cC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgorI2luY2x1ZGUgIlNjcmlwdFN0
YXRlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMTgwLDcgKzE4MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB2b2lkIHByaW50RXJy
b3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogICAgIEpT
Qzo6SlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5
U2xvdCYpOwogCi0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Ob2RlKE5vZGUqKTsK
KyAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tTm9kZShOb2RlKik7CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
b25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5oCShyZXZpc2lvbiAzODY3MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlRmlsdGVyQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIEpTTm9kZUZpbHRlckNvbmRp
dGlvbihKU0M6OkpTVmFsdWUqIGZpbHRlcik7CiAKLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2Nl
cHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHNo
b3J0IGFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBtYXJrKCk7CiAKICAgICAgICAgSlNDOjpKU1ZhbHVlKiBtX2ZpbHRlcjsKSW5kZXg6
IFdlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05v
ZGVGaWx0ZXIuY3BwCShyZXZpc2lvbiAzODY3MCkKKysrIFdlYkNvcmUvZG9tL05vZGVGaWx0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMTMgQEAKICNpbmNsdWRlICJOb2RlRmls
dGVyLmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUp
IGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyOjphY2NlcHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwg
Tm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBjYXN0IHRvIHNob3J0IHNpbGVuY2VzICJlbnVt
ZXJhbCBhbmQgbm9uLWVudW1lcmFsIHR5cGVzIGluIHJldHVybiIgd2FybmluZwotICAgIHJldHVy
biBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHROb2RlKGV4ZWMsIG5vZGUpIDogc3Rh
dGljX2Nhc3Q8c2hvcnQ+KEZJTFRFUl9BQ0NFUFQpOworICAgIHJldHVybiBtX2NvbmRpdGlvbiA/
IG1fY29uZGl0aW9uLT5hY2NlcHROb2RlKHN0YXRlLCBub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0
PihGSUxURVJfQUNDRVBUKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9kb20vTm9kZUZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVGaWx0
ZXIuaAkocmV2aXNpb24gMzg2NzApCisrKyBXZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDExICs3MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVGaWx0ZXIoY29uZGl0aW9uKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNv
bnN0OworICAgICAgICBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNvbnN0
OwogICAgICAgICB2b2lkIG1hcmsoKSB7IG1fY29uZGl0aW9uLT5tYXJrKCk7IH07CiAKICAgICAg
ICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlw
dCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqIG5vZGUp
IGNvbnN0IHsgcmV0dXJuIGFjY2VwdE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobm9kZSksIG5vZGUp
OyB9CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4g
YWNjZXB0Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG5vZGUpLCBub2RlKTsgfQogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgTm9kZUZpbHRlcihQYXNzUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+
IGNvbmRpdGlvbikgOiBtX2NvbmRpdGlvbihjb25kaXRpb24pIHsgfQpJbmRleDogV2ViQ29yZS9k
b20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDM4NjcwKQorKysgV2ViQ29yZS9kb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNyw5IEBACiAK
ICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShF
eGVjU3RhdGUqLCBOb2RlKikgY29uc3QKK3Nob3J0IE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2Vw
dE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3QKIHsKICAgICByZXR1cm4gTm9kZUZpbHRl
cjo6RklMVEVSX0FDQ0VQVDsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgJKHJl
dmlzaW9uIDM4NjcwKQorKysgV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsOSBAQAogI2lmbmRlZiBOb2RlRmlsdGVyQ29uZGl0aW9u
X2gKICNkZWZpbmUgTm9kZUZpbHRlckNvbmRpdGlvbl9oCiAKKyNpbmNsdWRlICJTY3JpcHRTdGF0
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotICAg
IGNsYXNzIEV4ZWNTdGF0ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3Mg
Tm9kZTsKQEAgLTM4LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5v
ZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlRmlsdGVyQ29uZGl0aW9u
PiB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5Ob2RlRmlsdGVyQ29uZGl0aW9uKCkg
eyB9Ci0gICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5v
ZGUqKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRT
dGF0ZSosIE5vZGUqKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCkgeyB9
CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAzODY3MCkKKysrIFdl
YkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwx
MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5vZGVJdGVyYXRvci5oIgogCi0j
aW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgotCi11
c2luZyBuYW1lc3BhY2UgSlNDOworI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtODYsNyArODQsNyBAQCBOb2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0
b3IoKQogICAgIHJvb3QoKS0+ZG9jdW1lbnQoKS0+ZGV0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOwog
fQogCi1QYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBl
eGVjLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpu
ZXh0Tm9kZShTY3JpcHRTdGF0ZSogc3RhdGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlm
IChtX2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CkBAIC0xMDEs
OCArOTksOCBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoCiAgICAg
ICAgIC8vIEluIG90aGVyIHdvcmRzLCBGSUxURVJfUkVKRUNUIGRvZXMgbm90IHBhc3Mgb3ZlciBk
ZXNjZW5kYW50cwogICAgICAgICAvLyBvZiB0aGUgcmVqZWN0ZWQgbm9kZS4gSGVuY2UsIEZJTFRF
Ul9SRUpFQ1QgaXMgdGhlIHNhbWUgYXMgRklMVEVSX1NLSVAuCiAgICAgICAgIFJlZlB0cjxOb2Rl
PiBwcm92aXNpb25hbFJlc3VsdCA9IG1fY2FuZGlkYXRlTm9kZS5ub2RlOwotICAgICAgICBib29s
IG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUoZXhlYywgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0
KCkpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAgICAgIGlmIChleGVjICYmIGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2Vw
dE5vZGUoc3RhdGUsIHByb3Zpc2lvbmFsUmVzdWx0LmdldCgpKSA9PSBOb2RlRmlsdGVyOjpGSUxU
RVJfQUNDRVBUOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlV2FzQWNjZXB0ZWQpIHsKICAgICAg
ICAgICAgIG1fcmVmZXJlbmNlTm9kZSA9IG1fY2FuZGlkYXRlTm9kZTsKQEAgLTExNSw3ICsxMTMs
NyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoCiAgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpw
cmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQ
dHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUqIHN0YXRlLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAobV9kZXRhY2hlZCkgewogICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTMwLDggKzEyOCw4IEBAIFBhc3NSZWZQdHI8Tm9kZT4g
Tm9kZUl0ZXJhdG9yOjpwcmV2aW91c04KICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRF
Ul9SRUpFQ1QgZG9lcyBub3QgcGFzcyBvdmVyIGRlc2NlbmRhbnRzCiAgICAgICAgIC8vIG9mIHRo
ZSByZWplY3RlZCBub2RlLiBIZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxU
RVJfU0tJUC4KICAgICAgICAgUmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5k
aWRhdGVOb2RlLm5vZGU7Ci0gICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9k
ZShleGVjLCBwcm92aXNpb25hbFJlc3VsdC5nZXQoKSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FD
Q0VQVDsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShzdGF0ZSwgcHJvdmlzaW9uYWxSZXN1
bHQuZ2V0KCkpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CisgICAgICAgIGlmIChzdGF0
ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
aWYgKG5vZGVXYXNBY2NlcHRlZCkgewogICAgICAgICAgICAgbV9yZWZlcmVuY2VOb2RlID0gbV9j
YW5kaWRhdGVOb2RlOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDM4NjcwKQorKysgV2Vi
Q29yZS9kb20vTm9kZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAgICAgICAgIH5Ob2RlSXRlcmF0b3IoKTsK
IAotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShKU0M6
OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBu
ZXh0Tm9kZShTY3JpcHRTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0
cjxOb2RlPiBwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
ICAgIHZvaWQgZGV0YWNoKCk7CiAKICAgICAgICAgTm9kZSogcmVmZXJlbmNlTm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVmZXJlbmNlTm9kZS5ub2RlLmdldCgpOyB9CkBAIC01NCw4ICs1NCw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2Rl
Kik7CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0
aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+
IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBuZXh0Tm9kZShleGVjU3RhdGVG
cm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxOb2Rl
PiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShl
eGVjU3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAgICAgUGFzc1Jl
ZlB0cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gbmV4dE5vZGUo
c2NyaXB0U3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAgICAgUGFz
c1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHBy
ZXZpb3VzTm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgTm9kZUl0ZXJhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIHVu
c2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50
aXR5UmVmZXJlbmNlcyk7CkluZGV4OiBXZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAJKHJldmlzaW9uIDM4NjcwKQorKysgV2Vi
Q29yZS9kb20vVHJhdmVyc2FsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNiBAQAog
I2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKLXVzaW5nIG5hbWVz
cGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVHJhdmVyc2FsOjpUcmF2ZXJzYWwo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0
cjxOb2RlRmlsdGVyPiBub2RlRmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCkBA
IC00MCw3ICszOCw3IEBAIFRyYXZlcnNhbDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4gcm8K
IHsKIH0KIAotc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgTm9k
ZSogbm9kZSkgY29uc3QKK3Nob3J0IFRyYXZlcnNhbDo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSog
c3RhdGUsIE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRvIGhhbmRsZSBYTUwg
cHJvcGVybHkgd2Ugd291bGQgaGF2ZSB0byBjaGVjayBtX2V4cGFuZEVudGl0eVJlZmVyZW5jZXMu
CiAKQEAgLTUwLDcgKzQ4LDcgQEAgc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKEV4ZWNTdGF0
ZSogZQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1NLSVA7CiAgICAgaWYgKCFt
X2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAg
cmV0dXJuIG1fZmlsdGVyLT5hY2NlcHROb2RlKGV4ZWMsIG5vZGUpOworICAgIHJldHVybiBtX2Zp
bHRlci0+YWNjZXB0Tm9kZShzdGF0ZSwgbm9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvZG9tL1RyYXZlcnNhbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL1RyYXZlcnNhbC5oCShyZXZpc2lvbiAzODY3MCkKKysrIFdlYkNvcmUvZG9tL1RyYXZlcnNh
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTAgQEAKICNpZm5kZWYgVHJhdmVyc2Fs
X2gKICNkZWZpbmUgVHJhdmVyc2FsX2gKIAorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFj
ZSBKU0MgewotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgTm9kZTsKQEAgLTQ2LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBUcmF2ZXJzYWwoUGFzc1JlZlB0cjxOb2RlPiwgdW5z
aWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRp
dHlSZWZlcmVuY2VzKTsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSos
IE5vZGUqKSBjb25zdDsKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5v
ZGUqKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3Q7
CkluZGV4OiBXZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9UcmVlV2Fsa2VyLmNwcAkocmV2aXNpb24gMzg2NzApCisrKyBXZWJDb3JlL2RvbS9UcmVl
V2Fsa2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDEyIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVHJlZVdhbGtlci5oIgogCi0jaW5jbHVkZSA8aW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmg+CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkNv
bnRhaW5lck5vZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCisjaW5jbHVkZSAiU2NyaXB0
U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi11c2luZyBuYW1lc3BhY2Ug
SlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRyZWVXYWxrZXI6OlRyZWVXYWxrZXIoUGFz
c1JlZlB0cjxOb2RlPiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxO
b2RlRmlsdGVyPiBmaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKQEAgLTU2LDE1
ICs1NCwxNSBAQCBpbmxpbmUgTm9kZSogVHJlZVdhbGtlcjo6c2V0Q3VycmVudChQYXNzCiAgICAg
cmV0dXJuIG1fY3VycmVudC5nZXQoKTsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9k
ZShFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKFNjcmlwdFN0
YXRlKiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICB3
aGlsZSAobm9kZSAhPSByb290KCkpIHsKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHNo
b3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAg
ICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNj
ZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBp
ZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NF
UFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBAIC03
MiwxMSArNzAsMTEgQEAgTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShFeGVjU3RhdGUqIAog
ICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0
ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRl
KQogewogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmZpcnN0Q2hpbGQo
KTsgbm9kZTsgKSB7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2Rl
KGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUs
IG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3Vs
dCkgewogICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTA1
LDExICsxMDMsMTEgQEAgTm9kZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChFeGVjU3RhdGUqIAog
ICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRl
KiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6bGFzdENoaWxkKFNjcmlwdFN0YXRlKiBzdGF0ZSkK
IHsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50LT5sYXN0Q2hpbGQoKTsg
bm9kZTsgKSB7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4
ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5v
ZGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3VsdCkg
ewogICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTM4LDE1
ICsxMzYsMTUgQEAgTm9kZSogVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4ZWNTdGF0ZSogZQogICAg
IHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0
YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRl
KiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICBpZiAo
bm9kZSA9PSByb290KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHdoaWxlICgxKSB7CiAgICAg
ICAgIGZvciAoUmVmUHRyPE5vZGU+IHNpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsg
c2libGluZzsgKSB7Ci0gICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0
Tm9kZShleGVjLCBzaWJsaW5nLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFj
Y2VwdE5vZGUoc3RhdGUsIHNpYmxpbmcuZ2V0KCkpOworICAgICAgICAgICAgaWYgKHN0YXRlICYm
IHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAgICAgICAgIGNhc2Ug
Tm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDoKQEAgLTE2NiwyMyArMTY0LDIzIEBAIE5vZGUqIFRy
ZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3QKICAgICAgICAgbm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKICAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT0gcm9vdCgpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHRO
b2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3Rh
dGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0
ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykK
K05vZGUqIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKFNjcmlwdFN0YXRlKiBzdGF0ZSkKIHsKICAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICBpZiAobm9kZSA9PSByb290KCkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGZvciAoUmVmUHRy
PE5vZGU+IHNpYmxpbmcgPSBub2RlLT5uZXh0U2libGluZygpOyBzaWJsaW5nOyApIHsKLSAgICAg
ICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIHNpYmxpbmcu
Z2V0KCkpOwotICAgICAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgc2li
bGluZy5nZXQoKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgc3dpdGNoIChhY2Nl
cHROb2RlUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJf
QUNDRVBUOgpAQCAtMjAyLDI5ICsyMDAsMjkgQEAgTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxp
bmcoRXhlY1N0YXRlKgogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAg
ICBpZiAoIW5vZGUgfHwgbm9kZSA9PSByb290KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQo
KSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBz
aG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7Cisg
ICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklM
VEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KIAotTm9kZSogVHJl
ZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6
OnByZXZpb3VzTm9kZShTY3JpcHRTdGF0ZSogc3RhdGUpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG5v
ZGUgPSBtX2N1cnJlbnQ7CiAgICAgd2hpbGUgKG5vZGUgIT0gcm9vdCgpKSB7CiAgICAgICAgIHdo
aWxlIChOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewog
ICAgICAgICAgICAgbm9kZSA9IHByZXZpb3VzU2libGluZzsKLSAgICAgICAgICAgIHNob3J0IGFj
Y2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICAg
ICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBzaG9ydCBh
Y2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRl
cjo6RklMVEVSX1JFSkVDVCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IHdoaWxlIChOb2RlKiBsYXN0Q2hpbGQgPSBub2RlLT5sYXN0Q2hpbGQoKSkgewogICAgICAgICAg
ICAgICAgIG5vZGUgPSBsYXN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgYWNjZXB0Tm9kZVJlc3Vs
dCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4
ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgYWNjZXB0Tm9kZVJl
c3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGlm
IChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0
ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjQw
LDggKzIzOCw4IEBAIE5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUKICAg
ICAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgbm9kZSA9
IHBhcmVudDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhl
Yywgbm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9k
ZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9k
ZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiBzZXRDdXJyZW50KG5v
ZGUucmVsZWFzZSgpKTsKQEAgLTI0OSwxNCArMjQ3LDE0IEBAIE5vZGUqIFRyZWVXYWxrZXI6OnBy
ZXZpb3VzTm9kZShFeGVjU3RhdGUKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtl
cjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUo
U2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50
OwogQ2hpbGRyZW46CiAgICAgd2hpbGUgKE5vZGUqIGZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENo
aWxkKCkpIHsKICAgICAgICAgbm9kZSA9IGZpcnN0Q2hpbGQ7Ci0gICAgICAgIHNob3J0IGFjY2Vw
dE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAo
ZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJl
c3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUg
JiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAg
ICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBAIC0yNjUsOCArMjYz
LDggQEAgQ2hpbGRyZW46CiAgICAgfQogICAgIHdoaWxlIChOb2RlKiBuZXh0U2libGluZyA9IG5v
ZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcocm9vdCgpKSkgewogICAgICAgICBub2RlID0gbmV4dFNp
Ymxpbmc7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMs
IG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUu
Z2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2Rl
LnJlbGVhc2UoKSk7CkluZGV4OiBXZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCShyZXZpc2lvbiAzODY3MCkKKysrIFdlYkNvcmUv
ZG9tL1RyZWVXYWxrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMjIgKzQ1LDIyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnQuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRDdXJyZW50Tm9kZShQYXNzUmVm
UHRyPE5vZGU+LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZShK
U0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBmaXJzdENoaWxkKEpTQzo6RXhlY1N0YXRl
Kik7Ci0gICAgICAgIE5vZGUqIGxhc3RDaGlsZChKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBO
b2RlKiBwcmV2aW91c1NpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogbmV4
dFNpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEpT
Qzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKik7
CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoU2NyaXB0U3RhdGUqKTsKKyAgICAgICAgTm9kZSog
Zmlyc3RDaGlsZChTY3JpcHRTdGF0ZSopOworICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoU2NyaXB0
U3RhdGUqKTsKKyAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRlKik7Cisg
ICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIHBy
ZXZpb3VzTm9kZShTY3JpcHRTdGF0ZSopOworICAgICAgICBOb2RlKiBuZXh0Tm9kZShTY3JpcHRT
dGF0ZSopOwogCiAgICAgICAgIC8vIEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9y
ZXMgdGhlIEphdmFTY3JpcHQgZXhjZXB0aW9uIGlmIGFueS4KLSAgICAgICAgTm9kZSogcGFyZW50
Tm9kZSgpIHsgcmV0dXJuIHBhcmVudE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50Lmdl
dCgpKSk7IH0KLSAgICAgICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQo
ZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbGFz
dENoaWxkKCkgeyByZXR1cm4gbGFzdENoaWxkKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5n
ZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIHsgcmV0dXJuIHByZXZp
b3VzU2libGluZyhleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAg
ICBOb2RlKiBuZXh0U2libGluZygpIHsgcmV0dXJuIG5leHRTaWJsaW5nKGV4ZWNTdGF0ZUZyb21O
b2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsg
cmV0dXJuIHByZXZpb3VzTm9kZShleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsg
fQotICAgICAgICBOb2RlKiBuZXh0Tm9kZSgpIHsgcmV0dXJuIG5leHROb2RlKGV4ZWNTdGF0ZUZy
b21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKSB7
IHJldHVybiBwYXJlbnROb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7
IH0KKyAgICAgICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoc2NyaXB0
U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBsYXN0Q2hp
bGQoKSB7IHJldHVybiBsYXN0Q2hpbGQoc2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0
KCkpKTsgfQorICAgICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSB7IHJldHVybiBwcmV2aW91
c1NpYmxpbmcoc2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAg
ICBOb2RlKiBuZXh0U2libGluZygpIHsgcmV0dXJuIG5leHRTaWJsaW5nKHNjcmlwdFN0YXRlRnJv
bU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCkg
eyByZXR1cm4gcHJldmlvdXNOb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgp
KSk7IH0KKyAgICAgICAgTm9kZSogbmV4dE5vZGUoKSB7IHJldHVybiBuZXh0Tm9kZShzY3JpcHRT
dGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NS
ZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25490</attachid>
            <date>2008-11-25 11:10:36 -0800</date>
            <delta_ts>2008-11-26 15:31:53 -0800</delta_ts>
            <desc>Added ScriptState.h</desc>
            <filename>script-state.patch</filename>
            <type>text/plain</type>
            <size>24096</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMzg3NTIpCisrKyBXZWJDb3JlL2RvbS9O
b2RlSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTEgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgPGlu
dGVycHJldGVyL0NhbGxGcmFtZS5oPgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJTY3Jp
cHRTdGF0ZS5oIgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIE5vZGVJdGVyYXRvcjo6Tm9kZVBvaW50ZXI6Ok5vZGVQb2ludGVyKCkKQEAgLTg2LDcgKzg0
LDcgQEAKICAgICByb290KCktPmRvY3VtZW50KCktPmRldGFjaE5vZGVJdGVyYXRvcih0aGlzKTsK
IH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSog
ZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6
bmV4dE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAobV9kZXRhY2hlZCkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTAx
LDggKzk5LDggQEAKICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9l
cyBub3QgcGFzcyBvdmVyIGRlc2NlbmRhbnRzCiAgICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBu
b2RlLiBIZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KICAg
ICAgICAgUmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5kaWRhdGVOb2RlLm5v
ZGU7Ci0gICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShleGVjLCBwcm92
aXNpb25hbFJlc3VsdC5nZXQoKSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKLSAgICAg
ICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGJvb2wgbm9kZVdh
c0FjY2VwdGVkID0gYWNjZXB0Tm9kZShzdGF0ZSwgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCkpID09
IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGVXYXNB
Y2NlcHRlZCkgewogICAgICAgICAgICAgbV9yZWZlcmVuY2VOb2RlID0gbV9jYW5kaWRhdGVOb2Rl
OwpAQCAtMTE1LDcgKzExMyw3IEBACiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAK
LVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBl
eGVjLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpw
cmV2aW91c05vZGUoU2NyaXB0U3RhdGUqIHN0YXRlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBpZiAobV9kZXRhY2hlZCkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAt
MTMwLDggKzEyOCw4IEBACiAgICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCBGSUxURVJfUkVKRUNU
IGRvZXMgbm90IHBhc3Mgb3ZlciBkZXNjZW5kYW50cwogICAgICAgICAvLyBvZiB0aGUgcmVqZWN0
ZWQgbm9kZS4gSGVuY2UsIEZJTFRFUl9SRUpFQ1QgaXMgdGhlIHNhbWUgYXMgRklMVEVSX1NLSVAu
CiAgICAgICAgIFJlZlB0cjxOb2RlPiBwcm92aXNpb25hbFJlc3VsdCA9IG1fY2FuZGlkYXRlTm9k
ZS5ub2RlOwotICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUoZXhlYywg
cHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCkpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0g
ICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBib29sIG5v
ZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUoc3RhdGUsIHByb3Zpc2lvbmFsUmVzdWx0LmdldCgp
KSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOworICAgICAgICBpZiAoc3RhdGUgJiYgc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2Rl
V2FzQWNjZXB0ZWQpIHsKICAgICAgICAgICAgIG1fcmVmZXJlbmNlTm9kZSA9IG1fY2FuZGlkYXRl
Tm9kZTsKSW5kZXg6IFdlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9UcmVlV2Fsa2VyLmgJKHJldmlzaW9uIDM4NzUyKQorKysgV2ViQ29yZS9kb20vVHJl
ZVdhbGtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMiArNDUsMjIgQEAKICAgICAgICAgTm9k
ZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQuZ2V0KCk7IH0KICAgICAg
ICAgdm9pZCBzZXRDdXJyZW50Tm9kZShQYXNzUmVmUHRyPE5vZGU+LCBFeGNlcHRpb25Db2RlJik7
CiAKLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBO
b2RlKiBmaXJzdENoaWxkKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIGxhc3RDaGls
ZChKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoSlNDOjpF
eGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogbmV4dFNpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsK
LSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5v
ZGUqIG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUo
U2NyaXB0U3RhdGUqKTsKKyAgICAgICAgTm9kZSogZmlyc3RDaGlsZChTY3JpcHRTdGF0ZSopOwor
ICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoU2NyaXB0U3RhdGUqKTsKKyAgICAgICAgTm9kZSogcHJl
dmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKFNj
cmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZShTY3JpcHRTdGF0ZSopOwor
ICAgICAgICBOb2RlKiBuZXh0Tm9kZShTY3JpcHRTdGF0ZSopOwogCiAgICAgICAgIC8vIEZvciBu
b24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFTY3JpcHQgZXhjZXB0aW9u
IGlmIGFueS4KLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpIHsgcmV0dXJuIHBhcmVudE5vZGUo
ZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogZmly
c3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50
LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbGFzdENoaWxkKCkgeyByZXR1cm4gbGFzdENoaWxk
KGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIHBy
ZXZpb3VzU2libGluZygpIHsgcmV0dXJuIHByZXZpb3VzU2libGluZyhleGVjU3RhdGVGcm9tTm9k
ZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBuZXh0U2libGluZygpIHsgcmV0
dXJuIG5leHRTaWJsaW5nKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0g
ICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShleGVjU3Rh
dGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBuZXh0Tm9kZSgp
IHsgcmV0dXJuIG5leHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9
CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKSB7IHJldHVybiBwYXJlbnROb2RlKHNjcmlwdFN0
YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogZmlyc3RDaGls
ZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoc2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0
KCkpKTsgfQorICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoKSB7IHJldHVybiBsYXN0Q2hpbGQoc2Ny
aXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBwcmV2
aW91c1NpYmxpbmcoKSB7IHJldHVybiBwcmV2aW91c1NpYmxpbmcoc2NyaXB0U3RhdGVGcm9tTm9k
ZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBuZXh0U2libGluZygpIHsgcmV0
dXJuIG5leHRTaWJsaW5nKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0K
KyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCkgeyByZXR1cm4gcHJldmlvdXNOb2RlKHNjcmlw
dFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogbmV4dE5v
ZGUoKSB7IHJldHVybiBuZXh0Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQo
KSkpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9k
ZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhw
YW5kRW50aXR5UmVmZXJlbmNlcyk7CkluZGV4OiBXZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAkocmV2aXNpb24gMzg3NTIpCisrKyBX
ZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1LDEwIEBA
CiAjaWZuZGVmIFRyYXZlcnNhbF9oCiAjZGVmaW5lIFRyYXZlcnNhbF9oCiAKKyNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci19Ci0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIE5vZGU7CkBAIC00Niw3ICs0Myw3IEBACiAK
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+LCB1bnNp
Z25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0
eVJlZmVyZW5jZXMpOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwg
Tm9kZSopIGNvbnN0OworICAgICAgICBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9k
ZSopIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsK
SW5kZXg6IFdlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vVHJhdmVyc2FsLmNwcAkocmV2aXNpb24gMzg3NTIpCisrKyBXZWJDb3JlL2RvbS9UcmF2ZXJz
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSAiTm9kZS5o
IgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBUcmF2ZXJzYWw6OlRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+
IHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IG5v
ZGVGaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKQEAgLTQwLDcgKzM4LDcgQEAK
IHsKIH0KIAotc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgTm9k
ZSogbm9kZSkgY29uc3QKK3Nob3J0IFRyYXZlcnNhbDo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSog
c3RhdGUsIE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRvIGhhbmRsZSBYTUwg
cHJvcGVybHkgd2Ugd291bGQgaGF2ZSB0byBjaGVjayBtX2V4cGFuZEVudGl0eVJlZmVyZW5jZXMu
CiAKQEAgLTUwLDcgKzQ4LDcgQEAKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9T
S0lQOwogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxU
RVJfQUNDRVBUOwotICAgIHJldHVybiBtX2ZpbHRlci0+YWNjZXB0Tm9kZShleGVjLCBub2RlKTsK
KyAgICByZXR1cm4gbV9maWx0ZXItPmFjY2VwdE5vZGUoc3RhdGUsIG5vZGUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCShyZXZpc2lvbiAzODc1MikKKysrIFdl
YkNvcmUvZG9tL05vZGVGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTEgKzcxLDExIEBA
CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVGaWx0ZXIoY29uZGl0aW9uKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwg
Tm9kZSopIGNvbnN0OworICAgICAgICBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9k
ZSopIGNvbnN0OwogICAgICAgICB2b2lkIG1hcmsoKSB7IG1fY29uZGl0aW9uLT5tYXJrKCk7IH07
CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUg
SmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKE5v
ZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGFjY2VwdE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobm9k
ZSksIG5vZGUpOyB9CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3Qg
eyByZXR1cm4gYWNjZXB0Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG5vZGUpLCBub2RlKTsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgTm9kZUZpbHRlcihQYXNzUmVmUHRyPE5vZGVGaWx0ZXJD
b25kaXRpb24+IGNvbmRpdGlvbikgOiBtX2NvbmRpdGlvbihjb25kaXRpb24pIHsgfQpJbmRleDog
V2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDM4NzUyKQorKysgV2ViQ29y
ZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsy
Nyw5IEBACiAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNj
ZXB0Tm9kZShFeGVjU3RhdGUqLCBOb2RlKikgY29uc3QKK3Nob3J0IE5vZGVGaWx0ZXJDb25kaXRp
b246OmFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3QKIHsKICAgICByZXR1cm4g
Tm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVGaWx0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCShyZXZpc2lv
biAzODc1MikKKysrIFdlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxNiArMjYsMTMgQEAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKICNpbmNsdWRlICJO
b2RlLmgiCi0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CiAKLXVzaW5nIG5hbWVz
cGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlcjo6YWNj
ZXB0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBOb2RlRmls
dGVyOjphY2NlcHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKIHsK
ICAgICAvLyBjYXN0IHRvIHNob3J0IHNpbGVuY2VzICJlbnVtZXJhbCBhbmQgbm9uLWVudW1lcmFs
IHR5cGVzIGluIHJldHVybiIgd2FybmluZwotICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29u
ZGl0aW9uLT5hY2NlcHROb2RlKGV4ZWMsIG5vZGUpIDogc3RhdGljX2Nhc3Q8c2hvcnQ+KEZJTFRF
Ul9BQ0NFUFQpOworICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHRO
b2RlKHN0YXRlLCBub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vVHJlZVdhbGtlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAJKHJldmlzaW9uIDM4
NzUyKQorKysgV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDE0ICsyNSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRyZWVXYWxrZXIu
aCIKIAotI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZp
bHRlci5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBU
cmVlV2Fsa2VyOjpUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2lnbmVk
IHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gZmlsdGVyLCBib29sIGV4cGFuZEVu
dGl0eVJlZmVyZW5jZXMpCkBAIC01NiwxNSArNTQsMTUgQEAKICAgICByZXR1cm4gbV9jdXJyZW50
LmdldCgpOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhl
YykKK05vZGUqIFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQogewog
ICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9IHJv
b3QoKSkgewogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAo
IW5vZGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJl
c3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYm
IGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0g
YWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFj
Y2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAg
IHJldHVybiBzZXRDdXJyZW50KG5vZGUucmVsZWFzZSgpKTsKQEAgLTcyLDExICs3MCwxMSBAQAog
ICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0
ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRl
KQogewogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmZpcnN0Q2hpbGQo
KTsgbm9kZTsgKSB7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2Rl
KGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUs
IG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3Vs
dCkgewogICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTA1
LDExICsxMDMsMTEgQEAKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bGFz
dENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZChTY3Jp
cHRTdGF0ZSogc3RhdGUpCiB7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVu
dC0+bGFzdENoaWxkKCk7IG5vZGU7ICkgewotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0
ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzd2l0Y2ggKGFj
Y2VwdE5vZGVSZXN1bHQpIHsKICAgICAgICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklMVEVSX0FD
Q0VQVDoKQEAgLTEzOCwxNSArMTM2LDE1IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIFRy
ZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fs
a2VyOjpwcmV2aW91c1NpYmxpbmcoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxO
b2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIGlmIChub2RlID09IHJvb3QoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgZm9yIChSZWZQdHI8Tm9kZT4gc2li
bGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOyBzaWJsaW5nOyApIHsKLSAgICAgICAgICAg
IHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIHNpYmxpbmcuZ2V0KCkp
OwotICAgICAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgc2libGluZy5n
ZXQoKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgc3dpdGNoIChhY2NlcHROb2Rl
UmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBU
OgpAQCAtMTY2LDIzICsxNjQsMjMgQEAKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKICAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT0gcm9vdCgpKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMs
IG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUu
Z2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAK
LU5vZGUqIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRy
ZWVXYWxrZXI6Om5leHRTaWJsaW5nKFNjcmlwdFN0YXRlKiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8
Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICBpZiAobm9kZSA9PSByb290KCkpCiAgICAgICAg
IHJldHVybiAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IHNp
YmxpbmcgPSBub2RlLT5uZXh0U2libGluZygpOyBzaWJsaW5nOyApIHsKLSAgICAgICAgICAgIHNo
b3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIHNpYmxpbmcuZ2V0KCkpOwot
ICAgICAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgc2libGluZy5nZXQo
KSk7CisgICAgICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVz
dWx0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpA
QCAtMjAyLDI5ICsyMDAsMjkgQEAKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsK
ICAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT0gcm9vdCgpKQogICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5v
ZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0
KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0
ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKLU5v
ZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxO
b2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9IHJvb3QoKSkgewogICAg
ICAgICB3aGlsZSAoTm9kZSogcHJldmlvdXNTaWJsaW5nID0gbm9kZS0+cHJldmlvdXNTaWJsaW5n
KCkpIHsKICAgICAgICAgICAgIG5vZGUgPSBwcmV2aW91c1NpYmxpbmc7Ci0gICAgICAgICAgICBz
aG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAg
ICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
c2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOwor
ICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5v
ZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1QpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB3aGlsZSAoTm9kZSogbGFzdENoaWxkID0gbm9kZS0+bGFzdENoaWxkKCkpIHsKICAg
ICAgICAgICAgICAgICBub2RlID0gbGFzdENoaWxkOwotICAgICAgICAgICAgICAgIGFjY2VwdE5v
ZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgICAg
IGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGFjY2Vw
dE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBO
b2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTI0MCw4ICsyMzgsOCBAQAogICAgICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICBub2RlID0gcGFyZW50OwotICAgICAgICBzaG9ydCBhY2NlcHROb2Rl
UmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMg
JiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQg
PSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAo
YWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAg
ICAgcmV0dXJuIHNldEN1cnJlbnQobm9kZS5yZWxlYXNlKCkpOwpAQCAtMjQ5LDE0ICsyNDcsMTQg
QEAKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0
YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRl
KQogewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogQ2hpbGRyZW46CiAgICAg
d2hpbGUgKE5vZGUqIGZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCkpIHsKICAgICAgICAg
bm9kZSA9IGZpcnN0Q2hpbGQ7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUo
c3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVz
dWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0
Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBAIC0yNjUsOCArMjYzLDggQEAKICAgICB9CiAgICAg
d2hpbGUgKE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhyb290
KCkpKSB7CiAgICAgICAgIG5vZGUgPSBuZXh0U2libGluZzsKLSAgICAgICAgc2hvcnQgYWNjZXB0
Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChl
eGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVz
dWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSAm
JiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
aWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAg
ICAgICAgIHJldHVybiBzZXRDdXJyZW50KG5vZGUucmVsZWFzZSgpKTsKSW5kZXg6IFdlYkNvcmUv
ZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2Rl
RmlsdGVyQ29uZGl0aW9uLmgJKHJldmlzaW9uIDM4NzUyKQorKysgV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsOSBAQAogI2lmbmRl
ZiBOb2RlRmlsdGVyQ29uZGl0aW9uX2gKICNkZWZpbmUgTm9kZUZpbHRlckNvbmRpdGlvbl9oCiAK
KyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
LW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLX0KLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgTm9kZTsKQEAgLTM4LDcgKzM1LDcgQEAKICAgICBjbGFzcyBO
b2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUZpbHRlckNvbmRpdGlv
bj4gewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNvbmRpdGlvbigp
IHsgfQotICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBO
b2RlKikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0
U3RhdGUqLCBOb2RlKikgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpIHsg
fQogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5oCShyZXZpc2lvbiAzODc1MikKKysrIFdlYkNv
cmUvZG9tL05vZGVJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw4IEBACiAg
ICAgICAgIH0KICAgICAgICAgfk5vZGVJdGVyYXRvcigpOwogCi0gICAgICAgIFBhc3NSZWZQdHI8
Tm9kZT4gbmV4dE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgICAg
IFBhc3NSZWZQdHI8Tm9kZT4gcHJldmlvdXNOb2RlKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9u
Q29kZSYpOworICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKFNjcmlwdFN0YXRlKiwg
RXhjZXB0aW9uQ29kZSYpOworICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShT
Y3JpcHRTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBkZXRhY2goKTsKIAog
ICAgICAgICBOb2RlKiByZWZlcmVuY2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VO
b2RlLm5vZGUuZ2V0KCk7IH0KQEAgLTU0LDggKzU0LDggQEAKICAgICAgICAgdm9pZCBub2RlV2ls
bEJlUmVtb3ZlZChOb2RlKik7CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2ls
ZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBQ
YXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBuZXh0
Tm9kZShleGVjU3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KLSAgICAgICAg
UGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IHByZXZpb3VzTm9kZShleGVjU3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0K
KyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gbmV4dE5vZGUoc2NyaXB0U3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7
IH0KKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5v
ZGUoKSksIGVjKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgTm9kZUl0ZXJhdG9yKFBhc3NS
ZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4s
IGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzg3NTMpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDA4LTExLTI1
ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFNjcmlwdFN0YXRl
IGFic3RyYWN0aW9uIChhIHNpbXBsZSB0eXBlZGVmIGluaXRpYWxseSkKKyAgICAgICAgYXMgbWVh
bnMgb2YgY2FycnlpbmcgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGFjcm9zcyBiaW5kaW5ncyBib3Vu
ZGFyaWVzIAorICAgICAgICBhbmQgaW4gYSBzY3JpcHQgZW5naW5lLWluZGVwZW5kZW50IHdheS4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzY3JpcHRTdGF0ZUZyb21Ob2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBk
b20vTm9kZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyOjphY2NlcHRO
b2RlKToKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZUZpbHRlcjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogZG9tL05vZGVGaWx0ZXJDb25kaXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSk6
CisgICAgICAgICogZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaDoKKyAgICAgICAgKiBkb20vTm9k
ZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJdGVyYXRvcjo6bmV4dE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUpOgorICAgICAg
ICAqIGRvbS9Ob2RlSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJdGVyYXRvcjo6
bmV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUp
OgorICAgICAgICAqIGRvbS9UcmF2ZXJzYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhdmVy
c2FsOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vVHJhdmVyc2FsLmg6CisgICAgICAgICog
ZG9tL1RyZWVXYWxrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cGFyZW50
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtl
cjo6bmV4dFNpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cHJldmlvdXNO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKKyAgICAgICAg
KiBkb20vVHJlZVdhbGtlci5oOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cGFyZW50
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtl
cjo6bmV4dFNpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cHJldmlvdXNO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKKwogMjAwOC0x
MS0yNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5j
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcmlwdFN0YXRlX2gKKyNkZWZpbmUg
U2NyaXB0U3RhdGVfaAorCituYW1lc3BhY2UgSlNDIHsKKyAgICBjbGFzcyBFeGVjU3RhdGU7Cit9
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIFRoZSBpZGVhIGlzIHRvIGV4cG9zZSAi
c3RhdGUtbGlrZSIgbWV0aG9kcyAoaGFkRXhjZXB0aW9uLCBhbmQgYW55IG90aGVyCisgICAgLy8g
bWV0aG9kcyB3aGVyZSBFeGVjU3RhdGUganVzdCBkaXBzIGludG8gZ2xvYmFsRGF0YSkgb2YgSlND
OjpFeGVjU3RhdGUgYXMgYQorICAgIC8vIHNlcGFyYXRlIGFic3RyYWN0aW9uLgorICAgIC8vIEZv
ciBub3csIHRoZSBzZXBhcmF0aW9uIGlzIHB1cmVseSBieSBjb252ZW50aW9uLgorICAgIHR5cGVk
ZWYgSlNDOjpFeGVjU3RhdGUgU2NyaXB0U3RhdGU7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFNjcmlwdFN0YXRlX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0U3RhdGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJs
ZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDM4
NzUyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+
CisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xODAsNyArMTgxLDcgQEAKICAgICB2b2lkIHByaW50RXJy
b3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogICAgIEpT
Qzo6SlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5
U2xvdCYpOwogCi0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Ob2RlKE5vZGUqKTsK
KyAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tTm9kZShOb2RlKik7CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAko
cmV2aXNpb24gMzg3NTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5Miw3ICs0OTIsNyBAQAogICAgIHJldHVybiBuZXcgKGV4ZWMp
IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5j
VG9TdHJpbmcpOwogfQogCi1FeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUp
CitTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tTm9kZShOb2RlKiBub2RlKQogewogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgJKHJldmlzaW9uIDM4NzUyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQAogICAgIHByaXZhdGU6CiAgICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihKU0M6
OkpTVmFsdWUqIGZpbHRlcik7CiAKLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpT
Qzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2Vw
dE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBt
YXJrKCk7CiAKICAgICAgICAgSlNDOjpKU1ZhbHVlKiBtX2ZpbHRlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25541</attachid>
            <date>2008-11-26 15:31:53 -0800</date>
            <delta_ts>2008-11-26 16:37:34 -0800</delta_ts>
            <desc>Script Patch v3 (with project changes)</desc>
            <filename>script-state.patch</filename>
            <type>text/plain</type>
            <size>28221</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmI2ZDFiOS4uYTgyYTAxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAwOC0xMS0yNiAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBTY3JpcHRTdGF0ZSBhYnN0cmFjdGlvbiAo
aW5pdGlhbGx5LCBhIHNpbXBsZSB0eXBlZGVmKQorICAgICAgICBhcyBtZWFucyBvZiBjYXJyeWlu
ZyBleGNlcHRpb24gaW5mb3JtYXRpb24gYWNyb3NzIGJpbmRpbmdzIGJvdW5kYXJpZXMKKyAgICAg
ICAgYW5kIGluIGEgc2NyaXB0IGVuZ2luZS1pbmRlcGVuZGVudCB3YXkuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFN0YXRlRnJvbU5vZGUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5oOgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlRmls
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyOjphY2NlcHROb2RlKToKKyAgICAg
ICAgKiBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
RmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlckNv
bmRpdGlvbi5oOgorICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRl
cmF0b3I6OnByZXZpb3VzTm9kZSk6CisgICAgICAgICogZG9tL05vZGVJdGVyYXRvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZSk6CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUcmF2ZXJzYWw6OmFjY2VwdE5vZGUpOgorICAgICAgICAq
IGRvbS9UcmF2ZXJzYWwuaDoKKyAgICAgICAgKiBkb20vVHJlZVdhbGtlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVXYWxrZXI6OmZpcnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFz
dENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJl
ZVdhbGtlcjo6bmV4dE5vZGUpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmg6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVXYWxrZXI6OmZpcnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFz
dENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJl
ZVdhbGtlcjo6bmV4dE5vZGUpOgorCiAyMDA4LTExLTI1ICBEYXZpZCBMZXZpbiAgPGxldmluQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292Lgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOWY0NTM4Yi4uMzNmMWIwMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0xMzg4OSw2ICsxMzg4OSwx
MCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0U3RhdGUuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRTdHJp
bmcuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNjQyMWMwYi4uZmE1ZjAxMiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyOSw2ICs1MjksNyBAQAogCQkzN0Y4MThG
RDBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUg
LyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxS
ZXNwb25zZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07
CiAJCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkY0NUVGMEVEN0IzMTEwMDgy
MTVCNiAvKiBTY3JpcHRTdHJpbmcuaCAqLzsgfTsKKwkJNDFDNzYwQjEwRURFMDNEMzAwQzE2NTVG
IC8qIFNjcmlwdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDE1MjkyRTBFMUFF
OEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQwIC8q
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsgfTsKIAkJNDQxNTI5MkYwRTFBRThBMDAwQzRB
MkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwICovOyB9OwogCQk0NDFCMDU1NjBDRDc3OUI2MDA3QzFGMTgg
LyogRE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MjlBQUVBMENCODREQzcwMDc2NDdD
NSAvKiBET01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oICovOyB9OwpAQCAtNTMyOSw2ICs1MzMwLDcg
QEAKIAkJMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdl
YkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkQwRTFB
RThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MjlBQUVBMENCODREQzcwMDc2NDdDNSAvKiBET01D
U1NTdHlsZVNoZWV0UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTY3MDQsNyArNjcwNiw3IEBACiAJCTkzRUVDMUY3MDlDMjg3NzcwMEM1MTVEMSAvKiBXaGVlbEV2
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXaGVlbEV2ZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFRUMyNkUwOUMzMjE4MDAwQzUxNUQxIC8qIENhbnZhc1Bh
dHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzUGF0
dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjcwMDlDMzIxODgw
MEM1MTVEMSAvKiBDYW52YXNTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYW52YXNTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkz
RjE5QjE5MDgyNDVFNTkwMDFFOUFCQyAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsg
cGF0aCA9IEluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OworCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlz
dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJOTNGMTlCMUEw
ODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUlu
SW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3Jl
LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
ImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5bGliOyBwYXRoID0g
L3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsK
IAkJOTNGOEIzMDUwQTMwMEZFMTAwRjYxQUI4IC8qIENvZGVHZW5lcmF0b3IucG0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvci5wbTsgcGF0aCA9IHNjcmlw
dHMvQ29kZUdlbmVyYXRvci5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMDgx
LDYgKzEzMDgzLDcgQEAKIAkJCQk5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0NjggLyogU2NyaXB0Q29u
dHJvbGxlci5oICovLAogCQkJCUE4M0UxQzcyMEU0OTA0MkIwMDE0MEI5QyAvKiBTY3JpcHRDb250
cm9sbGVyTWFjLm1tICovLAogCQkJCTkzNENDMTA5MEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRT
b3VyY2VDb2RlLmggKi8sCisJCQkJNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0
YXRlLmggKi8sCiAJCQkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5o
ICovLAogCQkJCTkzNENDMERGMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgKi8s
CiAJCQkJOTM0Q0MwRTAwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggKi8sCkBAIC0x
NjQwNiw2ICsxNjQwOSw3IEBACiAJCQkJMDgwQUVDODQwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTElu
dHJpbnNpY0V2ZW50SGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgyMDNBQTAwRUQ4QzM1
MzAwQjhCNjFBIC8qIFdNTEFjY2Vzc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNEND
MTBBMEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMTY0NDcsNiArMTY0NTEsNyBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcg
LyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRD
b25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25m
aWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOworCQkJY29tcGF0aWJp
bGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAx
OwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHAKaW5kZXggNzRhY2JhNC4uYjZhM2I5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcApAQCAtNDkyLDcgKzQ5Miw3IEBAIEpTVmFsdWUqIG9iamVjdFRvU3RyaW5n
RnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMCwgcHJvcGVy
dHlOYW1lLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk7CiB9CiAKLUV4ZWNTdGF0ZSogZXhlY1N0
YXRlRnJvbU5vZGUoTm9kZSogbm9kZSkKK1NjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Ob2Rl
KE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oCmluZGV4IGNhZmNmNDQuLjI0ZWYyMDkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUv
Q29tcGxldGlvbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU0Z1bmN0aW9uLmg+CisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xODAsNyArMTgxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShG
cmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAgICAgSlNDOjpKU1ZhbHVlKiBvYmplY3RU
b1N0cmluZ0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CiAKLSAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlY1N0YXRlRnJvbU5vZGUoTm9kZSopOworICAgIFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZUZyb21Ob2RlKE5vZGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAppbmRleCBlMzlkMDk0
Li44YmEwOTAwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNv
bmRpdGlvbi5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9u
LmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAg
ICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihKU0M6OkpTVmFsdWUqIGZpbHRlcik7CiAKLSAg
ICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2Rl
KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKICAgICAgICAgSlNDOjpK
U1ZhbHVlKiBtX2ZpbHRlcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3Bw
IGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKaW5kZXggNTVlZDhlMi4uYzVkODU1YSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9k
ZUZpbHRlci5jcHAKQEAgLTI2LDE2ICsyNiwxMyBAQAogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIK
IAogI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaG9ydCBO
b2RlRmlsdGVyOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSogbm9kZSkgY29uc3QK
K3Nob3J0IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlLCBOb2RlKiBu
b2RlKSBjb25zdAogewogICAgIC8vIGNhc3QgdG8gc2hvcnQgc2lsZW5jZXMgImVudW1lcmFsIGFu
ZCBub24tZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJuaW5nCi0gICAgcmV0dXJuIG1fY29u
ZGl0aW9uID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUoZXhlYywgbm9kZSkgOiBzdGF0aWNfY2Fz
dDxzaG9ydD4oRklMVEVSX0FDQ0VQVCk7CisgICAgcmV0dXJuIG1fY29uZGl0aW9uID8gbV9jb25k
aXRpb24tPmFjY2VwdE5vZGUoc3RhdGUsIG5vZGUpIDogc3RhdGljX2Nhc3Q8c2hvcnQ+KEZJTFRF
Ul9BQ0NFUFQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9Ob2RlRmlsdGVyLmggYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKaW5kZXggNDdk
MGE0YS4uNDM1NjM1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCisrKyBi
L1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaApAQCAtNzEsMTEgKzcxLDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTm9kZUZpbHRlcihjb25k
aXRpb24pKTsKICAgICAgICAgfQogCi0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVj
U3RhdGUqLCBOb2RlKikgY29uc3Q7CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0U3Rh
dGUqLCBOb2RlKikgY29uc3Q7CiAgICAgICAgIHZvaWQgbWFyaygpIHsgbV9jb25kaXRpb24tPm1h
cmsoKTsgfTsKIAogICAgICAgICAvLyBGb3Igbm9uLUpTIGJpbmRpbmdzLiBTaWxlbnRseSBpZ25v
cmVzIHRoZSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpZiBhbnkuCi0gICAgICAgIHNob3J0IGFjY2Vw
dE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gYWNjZXB0Tm9kZShleGVjU3RhdGVGcm9t
Tm9kZShub2RlKSwgbm9kZSk7IH0KKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiBub2Rl
KSBjb25zdCB7IHJldHVybiBhY2NlcHROb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUobm9kZSksIG5v
ZGUpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBOb2RlRmlsdGVyKFBhc3NSZWZQdHI8Tm9k
ZUZpbHRlckNvbmRpdGlvbj4gY29uZGl0aW9uKSA6IG1fY29uZGl0aW9uKGNvbmRpdGlvbikgeyB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBiL1dlYkNv
cmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCmluZGV4IDc0Njc3YjcuLjFkMmUxZTEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCisrKyBiL1dlYkNv
cmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCkBAIC0yNywxMSArMjcsOSBAQAogCiAjaW5j
bHVkZSAiTm9kZUZpbHRlci5oIgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXNob3J0IE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoRXhlY1N0
YXRlKiwgTm9kZSopIGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2Rl
KFNjcmlwdFN0YXRlKiwgTm9kZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJ
TFRFUl9BQ0NFUFQ7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0
aW9uLmggYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgKaW5kZXggNmZjZGZhOC4u
Yzk0Y2M5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCisr
KyBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaApAQCAtMjUsMTIgKzI1LDkgQEAK
ICNpZm5kZWYgTm9kZUZpbHRlckNvbmRpdGlvbl9oCiAjZGVmaW5lIE5vZGVGaWx0ZXJDb25kaXRp
b25faAogCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci19Ci0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIE5vZGU7CkBAIC0zOCw3ICszNSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBOb2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8Tm9kZUZpbHRlckNvbmRpdGlvbj4gewogICAgIHB1YmxpYzoKICAgICAgICAgdmly
dHVhbCB+Tm9kZUZpbHRlckNvbmRpdGlvbigpIHsgfQotICAgICAgICB2aXJ0dWFsIHNob3J0IGFj
Y2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBOb2RlKikgY29uc3QgPSAwOworICAgICAgICB2aXJ0
dWFsIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3QgPSAwOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpIHsgfQogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL05vZGVJdGVyYXRvci5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCmlu
ZGV4IGVkYzBmMTEuLmFmMDdmNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRv
ci5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcApAQCAtMjUsMTIgKzI1LDEw
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCiAKLSNp
bmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCi0KLXVz
aW5nIG5hbWVzcGFjZSBKU0M7CisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04Niw3ICs4NCw3IEBAIE5vZGVJdGVyYXRvcjo6fk5vZGVJdGVyYXRv
cigpCiAgICAgcm9vdCgpLT5kb2N1bWVudCgpLT5kZXRhY2hOb2RlSXRlcmF0b3IodGhpcyk7CiB9
CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4
ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6Om5l
eHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYg
KG1fZGV0YWNoZWQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKQEAgLTEwMSw4
ICs5OSw4IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3Rh
dGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyBJbiBvdGhlciB3b3Jkcywg
RklMVEVSX1JFSkVDVCBkb2VzIG5vdCBwYXNzIG92ZXIgZGVzY2VuZGFudHMKICAgICAgICAgLy8g
b2YgdGhlIHJlamVjdGVkIG5vZGUuIEhlbmNlLCBGSUxURVJfUkVKRUNUIGlzIHRoZSBzYW1lIGFz
IEZJTFRFUl9TS0lQLgogICAgICAgICBSZWZQdHI8Tm9kZT4gcHJvdmlzaW9uYWxSZXN1bHQgPSBt
X2NhbmRpZGF0ZU5vZGUubm9kZTsKLSAgICAgICAgYm9vbCBub2RlV2FzQWNjZXB0ZWQgPSBhY2Nl
cHROb2RlKGV4ZWMsIHByb3Zpc2lvbmFsUmVzdWx0LmdldCgpKSA9PSBOb2RlRmlsdGVyOjpGSUxU
RVJfQUNDRVBUOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgYm9vbCBub2RlV2FzQWNjZXB0ZWQgPSBhY2NlcHROb2RlKHN0YXRlLCBwcm92aXNpb25h
bFJlc3VsdC5nZXQoKSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKKyAgICAgICAgaWYg
KHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBpZiAobm9kZVdhc0FjY2VwdGVkKSB7CiAgICAgICAgICAgICBtX3JlZmVyZW5jZU5vZGUg
PSBtX2NhbmRpZGF0ZU5vZGU7CkBAIC0xMTUsNyArMTEzLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBO
b2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9k
ZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBl
YykKK1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAobV9kZXRhY2hlZCkgewog
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTMwLDggKzEyOCw4IEBAIFBhc3NS
ZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpF
Q1QgZG9lcyBub3QgcGFzcyBvdmVyIGRlc2NlbmRhbnRzCiAgICAgICAgIC8vIG9mIHRoZSByZWpl
Y3RlZCBub2RlLiBIZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJ
UC4KICAgICAgICAgUmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5kaWRhdGVO
b2RlLm5vZGU7Ci0gICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShleGVj
LCBwcm92aXNpb25hbFJlc3VsdC5nZXQoKSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsK
LSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGJvb2wg
bm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShzdGF0ZSwgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0
KCkpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CisgICAgICAgIGlmIChzdGF0ZSAmJiBz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5v
ZGVXYXNBY2NlcHRlZCkgewogICAgICAgICAgICAgbV9yZWZlcmVuY2VOb2RlID0gbV9jYW5kaWRh
dGVOb2RlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmggYi9XZWJDb3Jl
L2RvbS9Ob2RlSXRlcmF0b3IuaAppbmRleCA4NDJlNzFkLi5kN2VlZTM2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3Iu
aApAQCAtNDMsOCArNDMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KICAgICAg
ICAgfk5vZGVJdGVyYXRvcigpOwogCi0gICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUo
SlNDOjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgICAgIFBhc3NSZWZQdHI8Tm9k
ZT4gcHJldmlvdXNOb2RlKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAg
ICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKFNjcmlwdFN0YXRlKiwgRXhjZXB0aW9uQ29kZSYp
OworICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShTY3JpcHRTdGF0ZSosIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBkZXRhY2goKTsKIAogICAgICAgICBOb2RlKiBy
ZWZlcmVuY2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VOb2RlLm5vZGUuZ2V0KCk7
IH0KQEAgLTU0LDggKzU0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIG5v
ZGVXaWxsQmVSZW1vdmVkKE5vZGUqKTsKIAogICAgICAgICAvLyBGb3Igbm9uLUpTIGJpbmRpbmdz
LiBTaWxlbnRseSBpZ25vcmVzIHRoZSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpZiBhbnkuCi0gICAg
ICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IG5leHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQotICAg
ICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gcHJldmlvdXNOb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVj
KTsgfQorICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBuZXh0Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSks
IGVjKTsgfQorICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gcHJldmlvdXNOb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUocmVmZXJl
bmNlTm9kZSgpKSwgZWMpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBOb2RlSXRlcmF0b3Io
UGFzc1JlZlB0cjxOb2RlPiwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmls
dGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL1RyYXZlcnNhbC5jcHAgYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCmluZGV4IGMyYzkx
ZDQuLjVkNTZkZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAKKysrIGIv
V2ViQ29yZS9kb20vVHJhdmVyc2FsLmNwcApAQCAtMjgsOCArMjgsNiBAQAogI2luY2x1ZGUgIk5v
ZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVHJhdmVyc2FsOjpUcmF2ZXJzYWwoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVy
PiBub2RlRmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCkBAIC00MCw3ICszOCw3
IEBAIFRyYXZlcnNhbDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2ln
bmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8CiB7CiB9CiAKLXNob3J0IFRyYXZlcnNhbDo6YWNj
ZXB0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBUcmF2ZXJz
YWw6OmFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBUbyBoYW5kbGUgWE1MIHByb3Blcmx5IHdlIHdvdWxkIGhhdmUgdG8gY2hl
Y2sgbV9leHBhbmRFbnRpdHlSZWZlcmVuY2VzLgogCkBAIC01MCw3ICs0OCw3IEBAIHNob3J0IFRy
YXZlcnNhbDo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfU0tJUDsKICAgICBpZiAoIW1fZmlsdGVy
KQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKLSAgICByZXR1cm4g
bV9maWx0ZXItPmFjY2VwdE5vZGUoZXhlYywgbm9kZSk7CisgICAgcmV0dXJuIG1fZmlsdGVyLT5h
Y2NlcHROb2RlKHN0YXRlLCBub2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmggYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwu
aAppbmRleCA2ZTg3MTAzLi5mYzQ0MDNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UcmF2ZXJz
YWwuaAorKysgYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaApAQCAtMjUsMTMgKzI1LDEwIEBACiAj
aWZuZGVmIFRyYXZlcnNhbF9oCiAjZGVmaW5lIFRyYXZlcnNhbF9oCiAKKyNpbmNsdWRlICJTY3Jp
cHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci19Ci0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIE5vZGU7CkBAIC00Niw3ICs0Myw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgVHJhdmVyc2FsKFBhc3NS
ZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4s
IGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUo
SlNDOjpFeGVjU3RhdGUqLCBOb2RlKikgY29uc3Q7CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGUo
U2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQ
dHI8Tm9kZT4gbV9yb290OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAg
Yi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAppbmRleCA5ODRkNmNiLi5kZTA2MzYzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9UcmVl
V2Fsa2VyLmNwcApAQCAtMjUsMTQgKzI1LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiVHJlZVdhbGtlci5oIgogCi0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIK
ICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFRyZWVXYWxrZXI6OlRyZWVXYWxrZXIoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiBmaWx0
ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKQEAgLTU2LDE1ICs1NCwxNSBAQCBpbmxp
bmUgTm9kZSogVHJlZVdhbGtlcjo6c2V0Q3VycmVudChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCiAg
ICAgcmV0dXJuIG1fY3VycmVudC5nZXQoKTsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50
Tm9kZShFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKFNjcmlw
dFN0YXRlKiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAg
ICB3aGlsZSAobm9kZSAhPSByb290KCkpIHsKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwot
ICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQg
YWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAg
ICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9B
Q0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBA
IC03MiwxMSArNzAsMTEgQEAgTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQo
RXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChTY3JpcHRTdGF0
ZSogc3RhdGUpCiB7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudC0+Zmly
c3RDaGlsZCgpOyBub2RlOyApIHsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFj
Y2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9k
ZShzdGF0ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgc3dpdGNoIChhY2NlcHRO
b2RlUmVzdWx0KSB7CiAgICAgICAgICAgICBjYXNlIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ6
CkBAIC0xMDUsMTEgKzEwMywxMSBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNT
dGF0ZSogZXhlYykKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bGFzdENo
aWxkKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZChTY3JpcHRT
dGF0ZSogc3RhdGUpCiB7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudC0+
bGFzdENoaWxkKCk7IG5vZGU7ICkgewotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0g
YWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHRO
b2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzd2l0Y2ggKGFjY2Vw
dE5vZGVSZXN1bHQpIHsKICAgICAgICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQ
VDoKQEAgLTEzOCwxNSArMTM2LDE1IEBAIE5vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6OnByZXZp
b3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1Np
YmxpbmcoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9j
dXJyZW50OwogICAgIGlmIChub2RlID09IHJvb3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
d2hpbGUgKDEpIHsKICAgICAgICAgZm9yIChSZWZQdHI8Tm9kZT4gc2libGluZyA9IG5vZGUtPnBy
ZXZpb3VzU2libGluZygpOyBzaWJsaW5nOyApIHsKLSAgICAgICAgICAgIHNob3J0IGFjY2VwdE5v
ZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIHNpYmxpbmcuZ2V0KCkpOwotICAgICAgICAgICAg
aWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBzaG9ydCBhY2Nl
cHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgc2libGluZy5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTY2LDIzICsx
NjQsMjMgQEAgTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEV4ZWNTdGF0ZSogZXhl
YykKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKCFub2Rl
IHx8IG5vZGUgPT0gcm9vdCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHNob3J0
IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAg
ICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0
Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAo
c3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQp
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6Om5l
eHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5n
KFNjcmlwdFN0YXRlKiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVu
dDsKICAgICBpZiAobm9kZSA9PSByb290KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHdoaWxl
ICgxKSB7CiAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IHNpYmxpbmcgPSBub2RlLT5uZXh0U2li
bGluZygpOyBzaWJsaW5nOyApIHsKLSAgICAgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQg
PSBhY2NlcHROb2RlKGV4ZWMsIHNpYmxpbmcuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGV4ZWMg
JiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVz
dWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgc2libGluZy5nZXQoKSk7CisgICAgICAgICAgICBpZiAo
c3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMjAyLDI5ICsyMDAsMjkgQEAg
Tm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZSA9PSBy
b290KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJl
c3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYm
IGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0g
YWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFj
Y2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4
ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShTY3JpcHRTdGF0
ZSogc3RhdGUpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgd2hp
bGUgKG5vZGUgIT0gcm9vdCgpKSB7CiAgICAgICAgIHdoaWxlIChOb2RlKiBwcmV2aW91c1NpYmxp
bmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgbm9kZSA9IHByZXZp
b3VzU2libGluZzsKLSAgICAgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHRO
b2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0
Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
aWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVCkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHdoaWxlIChOb2RlKiBsYXN0Q2hpbGQg
PSBub2RlLT5sYXN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgIG5vZGUgPSBsYXN0Q2hpbGQ7
Ci0gICAgICAgICAgICAgICAgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9k
ZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICAgICAgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUs
IG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAg
IGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjQwLDggKzIzOCw4IEBAIE5vZGUqIFRyZWVX
YWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGlmICghcGFyZW50
KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIG5vZGUgPSBwYXJlbnQ7Ci0gICAgICAg
IHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwot
ICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQg
YWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAg
ICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9B
Q0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBA
IC0yNDksMTQgKzI0NywxNCBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoRXhlY1N0
YXRlKiBleGVjKQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpuZXh0Tm9k
ZShFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0Tm9kZShTY3JpcHRTdGF0
ZSogc3RhdGUpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiBDaGlsZHJl
bjoKICAgICB3aGlsZSAoTm9kZSogZmlyc3RDaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKSkgewog
ICAgICAgICBub2RlID0gZmlyc3RDaGlsZDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3Vs
dCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNj
ZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2Vw
dE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJl
dHVybiBzZXRDdXJyZW50KG5vZGUucmVsZWFzZSgpKTsKQEAgLTI2NSw4ICsyNjMsOCBAQCBDaGls
ZHJlbjoKICAgICB9CiAgICAgd2hpbGUgKE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+dHJhdmVy
c2VOZXh0U2libGluZyhyb290KCkpKSB7CiAgICAgICAgIG5vZGUgPSBuZXh0U2libGluZzsKLSAg
ICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQo
KSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBz
aG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7Cisg
ICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklM
VEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiBzZXRDdXJyZW50KG5vZGUucmVsZWFzZSgp
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaCBiL1dlYkNvcmUvZG9tL1Ry
ZWVXYWxrZXIuaAppbmRleCAzNDhmZjk0Li5kMDZhY2I5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9UcmVlV2Fsa2VyLmgKKysrIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCkBAIC00NSwyMiAr
NDUsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEN1cnJl
bnROb2RlKFBhc3NSZWZQdHI8Tm9kZT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICBOb2Rl
KiBwYXJlbnROb2RlKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQo
SlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogbGFzdENoaWxkKEpTQzo6RXhlY1N0YXRl
Kik7Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzU2libGluZyhKU0M6OkV4ZWNTdGF0ZSopOwotICAg
ICAgICBOb2RlKiBuZXh0U2libGluZyhKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBw
cmV2aW91c05vZGUoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogbmV4dE5vZGUoSlND
OjpFeGVjU3RhdGUqKTsKKyAgICAgICAgTm9kZSogcGFyZW50Tm9kZShTY3JpcHRTdGF0ZSopOwor
ICAgICAgICBOb2RlKiBmaXJzdENoaWxkKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIGxh
c3RDaGlsZChTY3JpcHRTdGF0ZSopOworICAgICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoU2Ny
aXB0U3RhdGUqKTsKKyAgICAgICAgTm9kZSogbmV4dFNpYmxpbmcoU2NyaXB0U3RhdGUqKTsKKyAg
ICAgICAgTm9kZSogcHJldmlvdXNOb2RlKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIG5l
eHROb2RlKFNjcmlwdFN0YXRlKik7CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4g
U2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAg
ICBOb2RlKiBwYXJlbnROb2RlKCkgeyByZXR1cm4gcGFyZW50Tm9kZShleGVjU3RhdGVGcm9tTm9k
ZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBmaXJzdENoaWxkKCkgeyByZXR1
cm4gZmlyc3RDaGlsZChleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAg
ICAgICBOb2RlKiBsYXN0Q2hpbGQoKSB7IHJldHVybiBsYXN0Q2hpbGQoZXhlY1N0YXRlRnJvbU5v
ZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkg
eyByZXR1cm4gcHJldmlvdXNTaWJsaW5nKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQo
KSkpOyB9Ci0gICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKCkgeyByZXR1cm4gbmV4dFNpYmxpbmco
ZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogcHJl
dmlvdXNOb2RlKCkgeyByZXR1cm4gcHJldmlvdXNOb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3Vy
cmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIG5leHROb2RlKCkgeyByZXR1cm4gbmV4dE5v
ZGUoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSog
cGFyZW50Tm9kZSgpIHsgcmV0dXJuIHBhcmVudE5vZGUoc2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1
cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBmaXJzdENoaWxkKCkgeyByZXR1cm4gZmly
c3RDaGlsZChzY3JpcHRTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAg
IE5vZGUqIGxhc3RDaGlsZCgpIHsgcmV0dXJuIGxhc3RDaGlsZChzY3JpcHRTdGF0ZUZyb21Ob2Rl
KG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIHsg
cmV0dXJuIHByZXZpb3VzU2libGluZyhzY3JpcHRTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQo
KSkpOyB9CisgICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKCkgeyByZXR1cm4gbmV4dFNpYmxpbmco
c2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBw
cmV2aW91c05vZGUoKSB7IHJldHVybiBwcmV2aW91c05vZGUoc2NyaXB0U3RhdGVGcm9tTm9kZSht
X2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBuZXh0Tm9kZSgpIHsgcmV0dXJuIG5l
eHROb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIFRyZWVXYWxrZXIoUGFzc1JlZlB0cjxOb2RlPiwgdW5zaWduZWQgd2hh
dFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVu
Y2VzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25543</attachid>
            <date>2008-11-26 16:37:34 -0800</date>
            <delta_ts>2008-11-26 16:46:12 -0800</delta_ts>
            <desc>ScriptState v4 (with ScriptState.h!)</desc>
            <filename>script-state.patch</filename>
            <type>text/plain</type>
            <size>30524</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmI2ZDFiOS4uYWMxNGNiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAwOC0xMS0yNiAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBTY3JpcHRTdGF0ZSBhYnN0cmFjdGlvbiAo
aW5pdGlhbGx5LCBhIHNpbXBsZSB0eXBlZGVmKQorICAgICAgICBhcyBtZWFucyBvZiBjYXJyeWlu
ZyBleGNlcHRpb24gaW5mb3JtYXRpb24gYWNyb3NzIGJpbmRpbmdzIGJvdW5kYXJpZXMKKyAgICAg
ICAgYW5kIGluIGEgc2NyaXB0IGVuZ2luZS1pbmRlcGVuZGVudCB3YXkuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFN0YXRlRnJvbU5vZGUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVGaWx0ZXI6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oOgor
ICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0
ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6OnByZXZp
b3VzTm9kZSk6CisgICAgICAgICogZG9tL05vZGVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0
b3I6OnByZXZpb3VzTm9kZSk6CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUcmF2ZXJzYWw6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9UcmF2ZXJz
YWwuaDoKKyAgICAgICAgKiBkb20vVHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OmZp
cnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bmV4
dE5vZGUpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OmZp
cnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bmV4
dE5vZGUpOgorCiAyMDA4LTExLTI1ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOWY0NTM4Yi4uMzNmMWIwMSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0xMzg4OSw2ICsxMzg4OSwxMCBAQAogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcU2NyaXB0U3RhdGUuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0K
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRTdHJpbmcuaCINCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNjQyMWMwYi4uZmE1ZjAxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTUyOSw2ICs1MjksNyBAQAogCQkzN0Y4MThGRDBENjU3NjA2MDA1
RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVS
TFJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2
NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CiAJCTQxNkY0NUYw
MEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkY0NUVGMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3Jp
cHRTdHJpbmcuaCAqLzsgfTsKKwkJNDFDNzYwQjEwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUM3
NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAg
LyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuaCAqLzsgfTsKIAkJNDQxNTI5MkYwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuY3BwICovOyB9OwogCQk0NDFCMDU1NjBDRDc3OUI2MDA3QzFGMTggLyogRE9NQ1NTU3R5
bGVTaGVldFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MjlBQUVBMENCODREQzcwMDc2NDdDNSAvKiBET01DU1NT
dHlsZVNoZWV0UHJpdmF0ZS5oICovOyB9OwpAQCAtNTMyOSw2ICs1MzMwLDcgQEAKIAkJMzdGODE4
RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNw
b25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVV
UkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RjQ1RUYwRUQ3
QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JpcHRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFD
NzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcmlwdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQw
IC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ0MjlBQUVBMENCODREQzcwMDc2NDdDNSAvKiBET01DU1NTdHlsZVNoZWV0
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NQ1NTU3R5bGVT
aGVldFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY3MDQsNyArNjcw
Niw3IEBACiAJCTkzRUVDMUY3MDlDMjg3NzcwMEM1MTVEMSAvKiBXaGVlbEV2ZW50LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXaGVlbEV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNFRUMyNkUwOUMzMjE4MDAwQzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzUGF0dGVybi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjcwMDlDMzIxODgwMEM1MTVEMSAvKiBD
YW52YXNTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYW52
YXNTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzRjE5QjE5MDgyNDVF
NTkwMDFFOUFCQyAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9IEluZm8u
cGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OworCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJOTNGMTlCMUEwODI0NUU1QTAwMUU5
QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUluSW5kZXggPSAwOyBw
YXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1h
Y2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGli
aWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJOTNGOEIzMDUw
QTMwMEZFMTAwRjYxQUI4IC8qIENvZGVHZW5lcmF0b3IucG0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvci5wbTsgcGF0aCA9IHNjcmlwdHMvQ29kZUdlbmVy
YXRvci5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMDgxLDYgKzEzMDgzLDcg
QEAKIAkJCQk5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0NjggLyogU2NyaXB0Q29udHJvbGxlci5oICov
LAogCQkJCUE4M0UxQzcyMEU0OTA0MkIwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFjLm1t
ICovLAogCQkJCTkzNENDMTA5MEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmgg
Ki8sCisJCQkJNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi8sCiAJ
CQkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovLAogCQkJCTkz
NENDMERGMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgKi8sCiAJCQkJOTM0Q0Mw
RTAwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggKi8sCkBAIC0xNjQwNiw2ICsxNjQw
OSw3IEBACiAJCQkJMDgwQUVDODQwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50
SGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgyMDNBQTAwRUQ4QzM1MzAwQjhCNjFBIC8q
IFdNTEFjY2Vzc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMTBBMEVEQjIyMzkw
MEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUM3NjBC
MTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTY0
NDcsNiArMTY0NTEsNyBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBv
YmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNpb24g
PSAiWGNvZGUgMi40IjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25S
ZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
aW5kZXggNzRhY2JhNC4uYjZhM2I5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cApAQCAtNDkyLDcgKzQ5Miw3IEBAIEpTVmFsdWUqIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0CiAgICAgcmV0dXJu
IG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMCwgcHJvcGVydHlOYW1lLCBvYmpl
Y3RQcm90b0Z1bmNUb1N0cmluZyk7CiB9CiAKLUV4ZWNTdGF0ZSogZXhlY1N0YXRlRnJvbU5vZGUo
Tm9kZSogbm9kZSkKK1NjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUp
CiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5oCmluZGV4IGNhZmNmNDQuLjI0ZWYyMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0
aW9uLmg+CisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xODAsNyArMTgxLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7CiAgICAgSlNDOjpKU1ZhbHVlKiBvYmplY3RUb1N0cmluZ0Z1bmN0
aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlY1N0YXRlRnJvbU5vZGUoTm9kZSopOworICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZy
b21Ob2RlKE5vZGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAppbmRleCBlMzlkMDk0Li44YmEwOTAwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKQEAgLTM4LDcg
KzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIEpTTm9k
ZUZpbHRlckNvbmRpdGlvbihKU0M6OkpTVmFsdWUqIGZpbHRlcik7CiAKLSAgICAgICAgdmlydHVh
bCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKICAgICAgICAgSlNDOjpKU1ZhbHVlKiBtX2Zp
bHRlcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuaCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zY2NlMDkzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRTdGF0ZS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDgsIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U3Rh
dGVfaAorI2RlZmluZSBTY3JpcHRTdGF0ZV9oCisKK25hbWVzcGFjZSBKU0MgeworICAgIGNsYXNz
IEV4ZWNTdGF0ZTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gVGhlIGlkZWEg
aXMgdG8gZXhwb3NlICJzdGF0ZS1saWtlIiBtZXRob2RzIChoYWRFeGNlcHRpb24sIGFuZCBhbnkg
b3RoZXIKKyAgICAvLyBtZXRob2RzIHdoZXJlIEV4ZWNTdGF0ZSBqdXN0IGRpcHMgaW50byBnbG9i
YWxEYXRhKSBvZiBKU0M6OkV4ZWNTdGF0ZSBhcyBhCisgICAgLy8gc2VwYXJhdGUgYWJzdHJhY3Rp
b24uCisgICAgLy8gRm9yIG5vdywgdGhlIHNlcGFyYXRpb24gaXMgcHVyZWx5IGJ5IGNvbnZlbnRp
b24uCisgICAgdHlwZWRlZiBKU0M6OkV4ZWNTdGF0ZSBTY3JpcHRTdGF0ZTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0U3RhdGVfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vTm9kZUZpbHRlci5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNwcAppbmRl
eCA1NWVkOGUyLi5jNWQ4NTVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNw
cAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNwcApAQCAtMjYsMTYgKzI2LDEzIEBACiAj
aW5jbHVkZSAiTm9kZUZpbHRlci5oIgogCiAjaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPGlu
dGVycHJldGVyL0NhbGxGcmFtZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXNob3J0IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBl
eGVjLCBOb2RlKiBub2RlKSBjb25zdAorc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShTY3Jp
cHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgLy8gY2FzdCB0byBzaG9y
dCBzaWxlbmNlcyAiZW51bWVyYWwgYW5kIG5vbi1lbnVtZXJhbCB0eXBlcyBpbiByZXR1cm4iIHdh
cm5pbmcKLSAgICByZXR1cm4gbV9jb25kaXRpb24gPyBtX2NvbmRpdGlvbi0+YWNjZXB0Tm9kZShl
eGVjLCBub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKKyAgICByZXR1
cm4gbV9jb25kaXRpb24gPyBtX2NvbmRpdGlvbi0+YWNjZXB0Tm9kZShzdGF0ZSwgbm9kZSkgOiBz
dGF0aWNfY2FzdDxzaG9ydD4oRklMVEVSX0FDQ0VQVCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaCBiL1dlYkNvcmUvZG9t
L05vZGVGaWx0ZXIuaAppbmRleCA0N2QwYTRhLi40MzU2MzU3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2RvbS9Ob2RlRmlsdGVyLmgKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCkBAIC03MSwx
MSArNzEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBOb2RlRmlsdGVyKGNvbmRpdGlvbikpOwogICAgICAgICB9CiAKLSAgICAgICAgc2hv
cnQgYWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKKyAgICAgICAgc2hv
cnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25zdDsKICAgICAgICAgdm9pZCBt
YXJrKCkgeyBtX2NvbmRpdGlvbi0+bWFyaygpOyB9OwogCiAgICAgICAgIC8vIEZvciBub24tSlMg
YmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFTY3JpcHQgZXhjZXB0aW9uIGlmIGFu
eS4KLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBh
Y2NlcHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG5vZGUpLCBub2RlKTsgfQorICAgICAgICBzaG9y
dCBhY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGFjY2VwdE5vZGUoc2NyaXB0
U3RhdGVGcm9tTm9kZShub2RlKSwgbm9kZSk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIE5v
ZGVGaWx0ZXIoUGFzc1JlZlB0cjxOb2RlRmlsdGVyQ29uZGl0aW9uPiBjb25kaXRpb24pIDogbV9j
b25kaXRpb24oY29uZGl0aW9uKSB7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVGaWx0
ZXJDb25kaXRpb24uY3BwIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKaW5k
ZXggNzQ2NzdiNy4uMWQyZTFlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNv
bmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKQEAg
LTI3LDExICsyNyw5IEBACiAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKLXVzaW5nIG5hbWVz
cGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlckNvbmRp
dGlvbjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqLCBOb2RlKikgY29uc3QKK3Nob3J0IE5vZGVGaWx0
ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3QKIHsKICAg
ICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25k
aXRpb24uaAppbmRleCA2ZmNkZmE4Li5jOTRjYzlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9O
b2RlRmlsdGVyQ29uZGl0aW9uLmgKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlv
bi5oCkBAIC0yNSwxMiArMjUsOSBAQAogI2lmbmRlZiBOb2RlRmlsdGVyQ29uZGl0aW9uX2gKICNk
ZWZpbmUgTm9kZUZpbHRlckNvbmRpdGlvbl9oCiAKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNz
IEV4ZWNTdGF0ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgTm9kZTsK
QEAgLTM4LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5vZGVGaWx0
ZXJDb25kaXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlRmlsdGVyQ29uZGl0aW9uPiB7CiAg
ICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5Ob2RlRmlsdGVyQ29uZGl0aW9uKCkgeyB9Ci0g
ICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBj
b25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSos
IE5vZGUqKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCkgeyB9CiAgICAg
fTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcCBiL1dlYkNvcmUv
ZG9tL05vZGVJdGVyYXRvci5jcHAKaW5kZXggZWRjMGYxMS4uYWYwN2Y0MiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0
b3IuY3BwCkBAIC0yNSwxMiArMjUsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJOb2RlSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIk5vZGVGaWx0ZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKKyNpbmNsdWRlICJTY3Jp
cHRTdGF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg2LDcgKzg0LDcgQEAgTm9k
ZUl0ZXJhdG9yOjp+Tm9kZUl0ZXJhdG9yKCkKICAgICByb290KCktPmRvY3VtZW50KCktPmRldGFj
aE5vZGVJdGVyYXRvcih0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6
Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRy
PE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAobV9kZXRhY2hlZCkgewogICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwpAQCAtMTAxLDggKzk5LDggQEAgUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRl
cmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIC8vIEluIG90aGVyIHdvcmRzLCBGSUxURVJfUkVKRUNUIGRvZXMgbm90IHBhc3Mgb3ZlciBk
ZXNjZW5kYW50cwogICAgICAgICAvLyBvZiB0aGUgcmVqZWN0ZWQgbm9kZS4gSGVuY2UsIEZJTFRF
Ul9SRUpFQ1QgaXMgdGhlIHNhbWUgYXMgRklMVEVSX1NLSVAuCiAgICAgICAgIFJlZlB0cjxOb2Rl
PiBwcm92aXNpb25hbFJlc3VsdCA9IG1fY2FuZGlkYXRlTm9kZS5ub2RlOwotICAgICAgICBib29s
IG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUoZXhlYywgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0
KCkpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAgICAgIGlmIChleGVjICYmIGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2Vw
dE5vZGUoc3RhdGUsIHByb3Zpc2lvbmFsUmVzdWx0LmdldCgpKSA9PSBOb2RlRmlsdGVyOjpGSUxU
RVJfQUNDRVBUOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlV2FzQWNjZXB0ZWQpIHsKICAgICAg
ICAgICAgIG1fcmVmZXJlbmNlTm9kZSA9IG1fY2FuZGlkYXRlTm9kZTsKQEAgLTExNSw3ICsxMTMs
NyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBl
eGVjLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0K
IAotUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUq
IGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6
OnByZXZpb3VzTm9kZShTY3JpcHRTdGF0ZSogc3RhdGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGlmIChtX2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CkBA
IC0xMzAsOCArMTI4LDggQEAgUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6OnByZXZpb3Vz
Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyBJbiBv
dGhlciB3b3JkcywgRklMVEVSX1JFSkVDVCBkb2VzIG5vdCBwYXNzIG92ZXIgZGVzY2VuZGFudHMK
ICAgICAgICAgLy8gb2YgdGhlIHJlamVjdGVkIG5vZGUuIEhlbmNlLCBGSUxURVJfUkVKRUNUIGlz
IHRoZSBzYW1lIGFzIEZJTFRFUl9TS0lQLgogICAgICAgICBSZWZQdHI8Tm9kZT4gcHJvdmlzaW9u
YWxSZXN1bHQgPSBtX2NhbmRpZGF0ZU5vZGUubm9kZTsKLSAgICAgICAgYm9vbCBub2RlV2FzQWNj
ZXB0ZWQgPSBhY2NlcHROb2RlKGV4ZWMsIHByb3Zpc2lvbmFsUmVzdWx0LmdldCgpKSA9PSBOb2Rl
RmlsdGVyOjpGSUxURVJfQUNDRVBUOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgYm9vbCBub2RlV2FzQWNjZXB0ZWQgPSBhY2NlcHROb2RlKHN0YXRl
LCBwcm92aXNpb25hbFJlc3VsdC5nZXQoKSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsK
KyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBpZiAobm9kZVdhc0FjY2VwdGVkKSB7CiAgICAgICAgICAgICBtX3Jl
ZmVyZW5jZU5vZGUgPSBtX2NhbmRpZGF0ZU5vZGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9O
b2RlSXRlcmF0b3IuaCBiL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5oCmluZGV4IDg0MmU3MWQu
LmQ3ZWVlMzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5oCisrKyBiL1dl
YkNvcmUvZG9tL05vZGVJdGVyYXRvci5oCkBAIC00Myw4ICs0Myw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgfQogICAgICAgICB+Tm9kZUl0ZXJhdG9yKCk7CiAKLSAgICAgICAgUGFz
c1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoSlNDOjpFeGVjU3RhdGUqLCBF
eGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUoU2NyaXB0
U3RhdGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gcHJldmlv
dXNOb2RlKFNjcmlwdFN0YXRlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIGRldGFj
aCgpOwogCiAgICAgICAgIE5vZGUqIHJlZmVyZW5jZU5vZGUoKSBjb25zdCB7IHJldHVybiBtX3Jl
ZmVyZW5jZU5vZGUubm9kZS5nZXQoKTsgfQpAQCAtNTQsOCArNTQsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgbm9kZVdpbGxCZVJlbW92ZWQoTm9kZSopOwogCiAgICAgICAg
IC8vIEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFTY3JpcHQg
ZXhjZXB0aW9uIGlmIGFueS4KLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gbmV4dE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUocmVmZXJl
bmNlTm9kZSgpKSwgZWMpOyB9Ci0gICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gcHJldmlvdXNOb2Rl
KEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwcmV2aW91c05vZGUoZXhlY1N0YXRlRnJvbU5v
ZGUocmVmZXJlbmNlTm9kZSgpKSwgZWMpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4
dE5vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG5leHROb2RlKHNjcmlwdFN0YXRlRnJv
bU5vZGUocmVmZXJlbmNlTm9kZSgpKSwgZWMpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4g
cHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwcmV2aW91c05vZGUoc2Ny
aXB0U3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KIAogICAgIHByaXZhdGU6
CiAgICAgICAgIE5vZGVJdGVyYXRvcihQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0VG9T
aG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmNwcCBiL1dlYkNvcmUvZG9tL1Ry
YXZlcnNhbC5jcHAKaW5kZXggYzJjOTFkNC4uNWQ1NmRlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9k
b20vVHJhdmVyc2FsLmNwcAorKysgYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCkBAIC0yOCw4
ICsyOCw2IEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAot
dXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUcmF2ZXJzYWw6
OlRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93
LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IG5vZGVGaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVm
ZXJlbmNlcykKQEAgLTQwLDcgKzM4LDcgQEAgVHJhdmVyc2FsOjpUcmF2ZXJzYWwoUGFzc1JlZlB0
cjxOb2RlPiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjwKIHsKIH0K
IAotc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSogbm9k
ZSkgY29uc3QKK3Nob3J0IFRyYXZlcnNhbDo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSogc3RhdGUs
IE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRvIGhhbmRsZSBYTUwgcHJvcGVy
bHkgd2Ugd291bGQgaGF2ZSB0byBjaGVjayBtX2V4cGFuZEVudGl0eVJlZmVyZW5jZXMuCiAKQEAg
LTUwLDcgKzQ4LDcgQEAgc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSogZXhl
YywgTm9kZSogbm9kZSkgY29uc3QKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9T
S0lQOwogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxU
RVJfQUNDRVBUOwotICAgIHJldHVybiBtX2ZpbHRlci0+YWNjZXB0Tm9kZShleGVjLCBub2RlKTsK
KyAgICByZXR1cm4gbV9maWx0ZXItPmFjY2VwdE5vZGUoc3RhdGUsIG5vZGUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaCBi
L1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5oCmluZGV4IDZlODcxMDMuLmZjNDQwM2YgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5oCisrKyBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5o
CkBAIC0yNSwxMyArMjUsMTAgQEAKICNpZm5kZWYgVHJhdmVyc2FsX2gKICNkZWZpbmUgVHJhdmVy
c2FsX2gKIAorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNz
IEV4ZWNTdGF0ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgTm9kZTsK
QEAgLTQ2LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICBUcmF2ZXJzYWwoUGFzc1JlZlB0cjxOb2RlPiwgdW5zaWduZWQgd2hhdFRvU2hvdywg
UGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSAg
ICAgICAgc2hvcnQgYWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKKyAg
ICAgICAgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25zdDsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3Q7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9UcmVlV2Fsa2VyLmNwcCBiL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCmluZGV4
IDk4NGQ2Y2IuLmRlMDYzNjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3Bw
CisrKyBiL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCkBAIC0yNSwxNCArMjUsMTIgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUcmVlV2Fsa2VyLmgiCiAKLSNpbmNsdWRlIDxp
bnRlcnByZXRlci9DYWxsRnJhbWUuaD4KICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiQ29udGFpbmVyTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLXVzaW5nIG5h
bWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVHJlZVdhbGtlcjo6VHJlZVdh
bGtlcihQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNz
UmVmUHRyPE5vZGVGaWx0ZXI+IGZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQpA
QCAtNTYsMTUgKzU0LDE1IEBAIGlubGluZSBOb2RlKiBUcmVlV2Fsa2VyOjpzZXRDdXJyZW50KFBh
c3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICByZXR1cm4gbV9jdXJyZW50LmdldCgpOwogfQogCi1O
b2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVX
YWxrZXI6OnBhcmVudE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxOb2Rl
PiBub2RlID0gbV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9IHJvb3QoKSkgewogICAgICAg
ICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5v
ZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0
ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQg
PT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiBzZXRDdXJy
ZW50KG5vZGUucmVsZWFzZSgpKTsKQEAgLTcyLDExICs3MCwxMSBAQCBOb2RlKiBUcmVlV2Fsa2Vy
OjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSog
VHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2Vy
OjpmaXJzdENoaWxkKFNjcmlwdFN0YXRlKiBzdGF0ZSkKIHsKICAgICBmb3IgKFJlZlB0cjxOb2Rl
PiBub2RlID0gbV9jdXJyZW50LT5maXJzdENoaWxkKCk7IG5vZGU7ICkgewotICAgICAgICBzaG9y
dCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAg
ICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2Vw
dE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYg
KHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICBzd2l0Y2ggKGFjY2VwdE5vZGVSZXN1bHQpIHsKICAgICAgICAgICAgIGNhc2UgTm9k
ZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDoKQEAgLTEwNSwxMSArMTAzLDExIEBAIE5vZGUqIFRyZWVX
YWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiAwOwogfQogCi1O
b2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdh
bGtlcjo6bGFzdENoaWxkKFNjcmlwdFN0YXRlKiBzdGF0ZSkKIHsKICAgICBmb3IgKFJlZlB0cjxO
b2RlPiBub2RlID0gbV9jdXJyZW50LT5sYXN0Q2hpbGQoKTsgbm9kZTsgKSB7Ci0gICAgICAgIHNo
b3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAg
ICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNj
ZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBp
ZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAgICAgY2FzZSBO
b2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTM4LDE1ICsxMzYsMTUgQEAgTm9kZSogVHJl
ZVdhbGtlcjo6bGFzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gMDsKIH0KIAot
Tm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUq
IFRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhTY3JpcHRTdGF0ZSogc3RhdGUpCiB7CiAgICAg
UmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgaWYgKG5vZGUgPT0gcm9vdCgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBmb3IgKFJlZlB0cjxO
b2RlPiBzaWJsaW5nID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7IHNpYmxpbmc7ICkgewotICAg
ICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgc2libGlu
Zy5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBz
aWJsaW5nLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBzd2l0Y2ggKGFj
Y2VwdE5vZGVSZXN1bHQpIHsKICAgICAgICAgICAgICAgICBjYXNlIE5vZGVGaWx0ZXI6OkZJTFRF
Ul9BQ0NFUFQ6CkBAIC0xNjYsMjMgKzE2NCwyMyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91
c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOwogICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZSA9PSByb290KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhl
Yywgbm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9k
ZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9k
ZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0K
IAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoRXhlY1N0YXRlKiBleGVjKQorTm9kZSog
VHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIGlmIChub2RlID09IHJvb3QoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgZm9yIChSZWZQdHI8Tm9kZT4g
c2libGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCk7IHNpYmxpbmc7ICkgewotICAgICAgICAgICAg
c2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgc2libGluZy5nZXQoKSk7
Ci0gICAgICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBzaWJsaW5nLmdl
dCgpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBzd2l0Y2ggKGFjY2VwdE5vZGVS
ZXN1bHQpIHsKICAgICAgICAgICAgICAgICBjYXNlIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ6
CkBAIC0yMDIsMjkgKzIwMCwyOSBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgICAg
IGlmICghbm9kZSB8fCBub2RlID09IHJvb3QoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgp
KTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNo
b3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAg
ICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxU
RVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCi1Ob2RlKiBUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtlcjo6
cHJldmlvdXNOb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9k
ZSA9IG1fY3VycmVudDsKICAgICB3aGlsZSAobm9kZSAhPSByb290KCkpIHsKICAgICAgICAgd2hp
bGUgKE5vZGUqIHByZXZpb3VzU2libGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAg
ICAgICAgICAgICBub2RlID0gcHJldmlvdXNTaWJsaW5nOwotICAgICAgICAgICAgc2hvcnQgYWNj
ZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAgICAgICAg
ICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHNob3J0IGFj
Y2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAg
ICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVy
OjpGSUxURVJfUkVKRUNUKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
d2hpbGUgKE5vZGUqIGxhc3RDaGlsZCA9IG5vZGUtPmxhc3RDaGlsZCgpKSB7CiAgICAgICAgICAg
ICAgICAgbm9kZSA9IGxhc3RDaGlsZDsKLSAgICAgICAgICAgICAgICBhY2NlcHROb2RlUmVzdWx0
ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhl
YyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBhY2NlcHROb2RlUmVz
dWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgaWYg
KHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRl
cjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yNDAs
OCArMjM4LDggQEAgTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhl
YykKICAgICAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
bm9kZSA9IHBhcmVudDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5v
ZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0
ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQg
PT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiBzZXRDdXJy
ZW50KG5vZGUucmVsZWFzZSgpKTsKQEAgLTI0OSwxNCArMjQ3LDE0IEBAIE5vZGUqIFRyZWVXYWxr
ZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLU5v
ZGUqIFRyZWVXYWxrZXI6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxr
ZXI6Om5leHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9k
ZSA9IG1fY3VycmVudDsKIENoaWxkcmVuOgogICAgIHdoaWxlIChOb2RlKiBmaXJzdENoaWxkID0g
bm9kZS0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkOwotICAgICAg
ICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsK
LSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0
IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAg
ICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJf
QUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIHNldEN1cnJlbnQobm9kZS5yZWxlYXNlKCkpOwpA
QCAtMjY1LDggKzI2Myw4IEBAIENoaWxkcmVuOgogICAgIH0KICAgICB3aGlsZSAoTm9kZSogbmV4
dFNpYmxpbmcgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHJvb3QoKSkpIHsKICAgICAgICAg
bm9kZSA9IG5leHRTaWJsaW5nOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNj
ZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2Rl
KHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJl
c3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIHNl
dEN1cnJlbnQobm9kZS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJlZVdh
bGtlci5oIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCmluZGV4IDM0OGZmOTQuLmQwNmFjYjkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaAorKysgYi9XZWJDb3JlL2RvbS9U
cmVlV2Fsa2VyLmgKQEAgLTQ1LDIyICs0NSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIE5vZGUqIGN1cnJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50LmdldCgpOyB9
CiAgICAgICAgIHZvaWQgc2V0Q3VycmVudE5vZGUoUGFzc1JlZlB0cjxOb2RlPiwgRXhjZXB0aW9u
Q29kZSYpOwogCi0gICAgICAgIE5vZGUqIHBhcmVudE5vZGUoSlNDOjpFeGVjU3RhdGUqKTsKLSAg
ICAgICAgTm9kZSogZmlyc3RDaGlsZChKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBs
YXN0Q2hpbGQoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5n
KEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKEpTQzo6RXhlY1N0
YXRlKik7Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZShKU0M6OkV4ZWNTdGF0ZSopOwotICAg
ICAgICBOb2RlKiBuZXh0Tm9kZShKU0M6OkV4ZWNTdGF0ZSopOworICAgICAgICBOb2RlKiBwYXJl
bnROb2RlKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQoU2NyaXB0U3Rh
dGUqKTsKKyAgICAgICAgTm9kZSogbGFzdENoaWxkKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5v
ZGUqIHByZXZpb3VzU2libGluZyhTY3JpcHRTdGF0ZSopOworICAgICAgICBOb2RlKiBuZXh0U2li
bGluZyhTY3JpcHRTdGF0ZSopOworICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUoU2NyaXB0U3Rh
dGUqKTsKKyAgICAgICAgTm9kZSogbmV4dE5vZGUoU2NyaXB0U3RhdGUqKTsKIAogICAgICAgICAv
LyBGb3Igbm9uLUpTIGJpbmRpbmdzLiBTaWxlbnRseSBpZ25vcmVzIHRoZSBKYXZhU2NyaXB0IGV4
Y2VwdGlvbiBpZiBhbnkuCi0gICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKSB7IHJldHVybiBwYXJl
bnROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5v
ZGUqIGZpcnN0Q2hpbGQoKSB7IHJldHVybiBmaXJzdENoaWxkKGV4ZWNTdGF0ZUZyb21Ob2RlKG1f
Y3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIGxhc3RDaGlsZCgpIHsgcmV0dXJuIGxh
c3RDaGlsZChleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBO
b2RlKiBwcmV2aW91c1NpYmxpbmcoKSB7IHJldHVybiBwcmV2aW91c1NpYmxpbmcoZXhlY1N0YXRl
RnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbmV4dFNpYmxpbmco
KSB7IHJldHVybiBuZXh0U2libGluZyhleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkp
KTsgfQotICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUoKSB7IHJldHVybiBwcmV2aW91c05vZGUo
ZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbmV4
dE5vZGUoKSB7IHJldHVybiBuZXh0Tm9kZShleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0
KCkpKTsgfQorICAgICAgICBOb2RlKiBwYXJlbnROb2RlKCkgeyByZXR1cm4gcGFyZW50Tm9kZShz
Y3JpcHRTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIGZp
cnN0Q2hpbGQoKSB7IHJldHVybiBmaXJzdENoaWxkKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJy
ZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogbGFzdENoaWxkKCkgeyByZXR1cm4gbGFzdENo
aWxkKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9k
ZSogcHJldmlvdXNTaWJsaW5nKCkgeyByZXR1cm4gcHJldmlvdXNTaWJsaW5nKHNjcmlwdFN0YXRl
RnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogbmV4dFNpYmxpbmco
KSB7IHJldHVybiBuZXh0U2libGluZyhzY3JpcHRTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQo
KSkpOyB9CisgICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgcmV0dXJuIHByZXZpb3VzTm9k
ZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUq
IG5leHROb2RlKCkgeyByZXR1cm4gbmV4dE5vZGUoc2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJl
bnQuZ2V0KCkpKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgVHJlZVdhbGtlcihQYXNzUmVm
UHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBi
b29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25544</attachid>
            <date>2008-11-26 16:46:12 -0800</date>
            <delta_ts>2008-12-04 12:23:34 -0800</delta_ts>
            <desc>ScriptState v4.1 (with ScriptState.h!)</desc>
            <filename>script-state.patch</filename>
            <type>text/plain</type>
            <size>30364</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmI2ZDFiOS4uYWMxNGNiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAwOC0xMS0yNiAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBTY3JpcHRTdGF0ZSBhYnN0cmFjdGlvbiAo
aW5pdGlhbGx5LCBhIHNpbXBsZSB0eXBlZGVmKQorICAgICAgICBhcyBtZWFucyBvZiBjYXJyeWlu
ZyBleGNlcHRpb24gaW5mb3JtYXRpb24gYWNyb3NzIGJpbmRpbmdzIGJvdW5kYXJpZXMKKyAgICAg
ICAgYW5kIGluIGEgc2NyaXB0IGVuZ2luZS1pbmRlcGVuZGVudCB3YXkuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFN0YXRlRnJvbU5vZGUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVGaWx0ZXI6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oOgor
ICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0
ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6OnByZXZp
b3VzTm9kZSk6CisgICAgICAgICogZG9tL05vZGVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0
b3I6OnByZXZpb3VzTm9kZSk6CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUcmF2ZXJzYWw6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9UcmF2ZXJz
YWwuaDoKKyAgICAgICAgKiBkb20vVHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OmZp
cnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bmV4
dE5vZGUpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OmZp
cnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bmV4
dE5vZGUpOgorCiAyMDA4LTExLTI1ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOWY0NTM4Yi4uMzNmMWIwMSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0xMzg4OSw2ICsxMzg4OSwxMCBAQAogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcU2NyaXB0U3RhdGUuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0K
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRTdHJpbmcuaCINCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNjQyMWMwYi4uNThmNjM4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTMsNyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwogCWNs
YXNzZXMgPSB7CiAJfTsKLQlvYmplY3RWZXJzaW9uID0gNDI7CisJb2JqZWN0VmVyc2lvbiA9IDQ1
OwogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICov
CkBAIC01MjksNiArNTI5LDcgQEAKIAkJMzdGODE4RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RjgxOEZF
MEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUg
LyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovOyB9OwogCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1
QjYgLyogU2NyaXB0U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTZGNDVFRjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi87
IH07CisJCTQxQzc2MEIxMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFDNzYwQjAwRURFMDNEMzAw
QzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmgg
Ki87IH07CiAJCTQ0MTUyOTJGMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0
MTUyOTJEMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCAqLzsg
fTsKIAkJNDQxQjA1NTYwQ0Q3NzlCNjAwN0MxRjE4IC8qIERPTUNTU1N0eWxlU2hlZXRQcml2YXRl
LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NDI5QUFFQTBDQjg0REM3MDA3NjQ3QzUgLyogRE9NQ1NTU3R5bGVTaGVldFByaXZh
dGUuaCAqLzsgfTsKQEAgLTUzMjksNiArNTMzMCw3IEBACiAJCTM3RjgxOEZCMEQ2NTc2MDYwMDVF
MUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkY0NUVGMEVEN0IzMTEwMDgyMTVCNiAv
KiBTY3JpcHRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQzc2MEIwMEVERTAzRDMw
MEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTY3JpcHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBF
MUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ0MTUyOTJEMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NDI5QUFFQTBDQjg0REM3MDA3NjQ3QzUgLyogRE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzA0LDcgKzY3MDYsNyBAQAogCQk5M0VF
QzFGNzA5QzI4Nzc3MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gV2hlZWxFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVD
MjZFMDlDMzIxODAwMEM1MTVEMSAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1BhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5M0VFQzI3MDA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzU3R5bGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyog
SW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJOTNGMTlC
MTkwODI0NUU1OTAwMUU5QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1s
OyBwYXRoID0gSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzRjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiBXZWJDb3Jl
LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gd3JhcHBlci5mcmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmUu
ZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5M0YxRDMx
QTA1NThDQzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBu
YW1lID0gbGliaWN1Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7
IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFC
OCAvKiBDb2RlR2VuZXJhdG9yLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9
IENvZGVHZW5lcmF0b3IucG07IHBhdGggPSBzY3JpcHRzL0NvZGVHZW5lcmF0b3IucG07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzA4MSw2ICsxMzA4Myw3IEBACiAJCQkJOTNCNzBE
NTQwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuaCAqLywKIAkJCQlBODNFMUM3
MjBFNDkwNDJCMDAxNDBCOUMgLyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSAqLywKIAkJCQk5MzRD
QzEwOTBFREIyMjM5MDBBNjU4RjIgLyogU2NyaXB0U291cmNlQ29kZS5oICovLAorCQkJCTQxQzc2
MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovLAogCQkJCTQxNkY0NUVGMEVE
N0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCAqLywKIAkJCQk5MzRDQzBERjBFRDM5RDZG
MDBBNjU4RjIgLyogU2NyaXB0VmFsdWUuY3BwICovLAogCQkJCTkzNENDMEUwMEVEMzlENkYwMEE2
NThGMiAvKiBTY3JpcHRWYWx1ZS5oICovLApAQCAtMTY0MDYsNiArMTY0MDksNyBAQAogCQkJCTA4
MEFFQzg0MEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4MjAzQUEwMEVEOEMzNTMwMEI4QjYxQSAvKiBXTUxBY2Nlc3NFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzRDQzEwQTBFREIyMjM5MDBBNjU4RjIgLyogU2Ny
aXB0U291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFDNzYwQjEwRURFMDNEMzAwQzE2
NTVGIC8qIFNjcmlwdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAppbmRleCA3NGFjYmE0Li5iNmEzYjk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwCkBAIC00OTIsNyArNDkyLDcgQEAgSlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdG
dW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnQK
ICAgICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0
eU5hbWUsIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKTsKIH0KIAotRXhlY1N0YXRlKiBleGVjU3Rh
dGVGcm9tTm9kZShOb2RlKiBub2RlKQorU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUo
Tm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgKaW5kZXggY2FmY2Y0NC4uMjRlZjIwOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9D
b21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KICNpbmNsdWRlIDxydW50
aW1lL0pTRnVuY3Rpb24uaD4KKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE4MCw3ICsxODEsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKICAgICBKU0M6OkpTVmFsdWUqIG9iamVjdFRv
U3RyaW5nRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKIAotICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjU3RhdGVGcm9tTm9kZShOb2RlKik7CisgICAgU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlRnJvbU5vZGUoTm9kZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IGUzOWQwOTQu
LjhiYTA5MDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24u
aApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNWYWx1ZSogZmlsdGVyKTsKIAotICAg
ICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBOb2RlKikgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUq
KSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAogICAgICAgICBKU0M6OkpT
VmFsdWUqIG1fZmlsdGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRT
dGF0ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2UwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTY3JpcHRTdGF0ZV9oCisjZGVmaW5lIFNjcmlwdFN0YXRlX2gKKworbmFtZXNwYWNlIEpTQyB7
CisgICAgY2xhc3MgRXhlY1N0YXRlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAv
LyBUaGUgaWRlYSBpcyB0byBleHBvc2UgInN0YXRlLWxpa2UiIG1ldGhvZHMgKGhhZEV4Y2VwdGlv
biwgYW5kIGFueSBvdGhlcgorICAgIC8vIG1ldGhvZHMgd2hlcmUgRXhlY1N0YXRlIGp1c3QgZGlw
cyBpbnRvIGdsb2JhbERhdGEpIG9mIEpTQzo6RXhlY1N0YXRlIGFzIGEKKyAgICAvLyBzZXBhcmF0
ZSBhYnN0cmFjdGlvbi4KKyAgICAvLyBGb3Igbm93LCB0aGUgc2VwYXJhdGlvbiBpcyBwdXJlbHkg
YnkgY29udmVudGlvbi4KKyAgICB0eXBlZGVmIEpTQzo6RXhlY1N0YXRlIFNjcmlwdFN0YXRlOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JpcHRTdGF0ZV9oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNwcCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0
ZXIuY3BwCmluZGV4IDU1ZWQ4ZTIuLmM1ZDg1NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05v
ZGVGaWx0ZXIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCkBAIC0yNiwxNiAr
MjYsMTMgQEAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCi0j
aW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShF
eGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyOjphY2Nl
cHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBj
YXN0IHRvIHNob3J0IHNpbGVuY2VzICJlbnVtZXJhbCBhbmQgbm9uLWVudW1lcmFsIHR5cGVzIGlu
IHJldHVybiIgd2FybmluZwotICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5h
Y2NlcHROb2RlKGV4ZWMsIG5vZGUpIDogc3RhdGljX2Nhc3Q8c2hvcnQ+KEZJTFRFUl9BQ0NFUFQp
OworICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHROb2RlKHN0YXRl
LCBub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oIGIv
V2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCmluZGV4IDQ3ZDBhNGEuLjQzNTYzNTcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVy
LmgKQEAgLTcxLDExICs3MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVGaWx0ZXIoY29uZGl0aW9uKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0Owor
ICAgICAgICBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNvbnN0OwogICAg
ICAgICB2b2lkIG1hcmsoKSB7IG1fY29uZGl0aW9uLT5tYXJrKCk7IH07CiAKICAgICAgICAgLy8g
Rm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlwdCBleGNl
cHRpb24gaWYgYW55LgotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0
IHsgcmV0dXJuIGFjY2VwdE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobm9kZSksIG5vZGUpOyB9Cisg
ICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gYWNjZXB0
Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG5vZGUpLCBub2RlKTsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZUZpbHRlcihQYXNzUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+IGNvbmRp
dGlvbikgOiBtX2NvbmRpdGlvbihjb25kaXRpb24pIHsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0
aW9uLmNwcAppbmRleCA3NDY3N2I3Li4xZDJlMWUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9O
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0
aW9uLmNwcApAQCAtMjcsMTEgKzI3LDkgQEAKIAogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAot
dXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaG9ydCBOb2Rl
RmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdAorc2hv
cnQgTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBj
b25zdAogewogICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvV2ViQ29yZS9kb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IDZmY2RmYTguLmM5NGNjOWEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmls
dGVyQ29uZGl0aW9uLmgKQEAgLTI1LDEyICsyNSw5IEBACiAjaWZuZGVmIE5vZGVGaWx0ZXJDb25k
aXRpb25faAogI2RlZmluZSBOb2RlRmlsdGVyQ29uZGl0aW9uX2gKIAorI2luY2x1ZGUgIlNjcmlw
dFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAotbmFtZXNwYWNlIEpTQyB7
Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBOb2RlOwpAQCAtMzgsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVGaWx0ZXJDb25k
aXRpb24+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRp
b24oKSB7IH0KLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRl
KiwgTm9kZSopIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKFNj
cmlwdFN0YXRlKiwgTm9kZSopIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmso
KSB7IH0KICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3Bw
IGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAppbmRleCBlZGMwZjExLi5hZjA3ZjQyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCisrKyBiL1dlYkNvcmUvZG9t
L05vZGVJdGVyYXRvci5jcHAKQEAgLTI1LDEyICsyNSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIk5vZGVJdGVyYXRvci5oIgogCi0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmg+CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgotCi11c2luZyBuYW1lc3BhY2UgSlNDOworI2lu
Y2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODYsNyAr
ODQsNyBAQCBOb2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQogICAgIHJvb3QoKS0+ZG9jdW1l
bnQoKS0+ZGV0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOwogfQogCi1QYXNzUmVmUHRyPE5vZGU+IE5v
ZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykK
K1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShTY3JpcHRTdGF0ZSogc3Rh
dGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX2RldGFjaGVkKSB7CiAgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CkBAIC0xMDEsOCArOTksOCBAQCBQYXNzUmVmUHRyPE5v
ZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBub3Qg
cGFzcyBvdmVyIGRlc2NlbmRhbnRzCiAgICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBub2RlLiBI
ZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KICAgICAgICAg
UmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5kaWRhdGVOb2RlLm5vZGU7Ci0g
ICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShleGVjLCBwcm92aXNpb25h
bFJlc3VsdC5nZXQoKSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKLSAgICAgICAgaWYg
KGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGJvb2wgbm9kZVdhc0FjY2Vw
dGVkID0gYWNjZXB0Tm9kZShzdGF0ZSwgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCkpID09IE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGVXYXNBY2NlcHRl
ZCkgewogICAgICAgICAgICAgbV9yZWZlcmVuY2VOb2RlID0gbV9jYW5kaWRhdGVOb2RlOwpAQCAt
MTE1LDcgKzExMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShF
eGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPE5vZGU+IE5v
ZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKQEAgLTEzMCw4ICsxMjgsOCBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRv
cjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIC8vIEluIG90aGVyIHdvcmRzLCBGSUxURVJfUkVKRUNUIGRvZXMgbm90IHBhc3Mgb3ZlciBk
ZXNjZW5kYW50cwogICAgICAgICAvLyBvZiB0aGUgcmVqZWN0ZWQgbm9kZS4gSGVuY2UsIEZJTFRF
Ul9SRUpFQ1QgaXMgdGhlIHNhbWUgYXMgRklMVEVSX1NLSVAuCiAgICAgICAgIFJlZlB0cjxOb2Rl
PiBwcm92aXNpb25hbFJlc3VsdCA9IG1fY2FuZGlkYXRlTm9kZS5ub2RlOwotICAgICAgICBib29s
IG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUoZXhlYywgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0
KCkpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAgICAgIGlmIChleGVjICYmIGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2Vw
dE5vZGUoc3RhdGUsIHByb3Zpc2lvbmFsUmVzdWx0LmdldCgpKSA9PSBOb2RlRmlsdGVyOjpGSUxU
RVJfQUNDRVBUOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlV2FzQWNjZXB0ZWQpIHsKICAgICAg
ICAgICAgIG1fcmVmZXJlbmNlTm9kZSA9IG1fY2FuZGlkYXRlTm9kZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL05vZGVJdGVyYXRvci5oIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKaW5k
ZXggODQyZTcxZC4uZDdlZWUzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9y
LmgKKysrIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKQEAgLTQzLDggKzQzLDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAgICAgICAgIH5Ob2RlSXRlcmF0b3IoKTsKIAot
ICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShKU0M6OkV4
ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0
Tm9kZShTY3JpcHRTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxO
b2RlPiBwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAg
IHZvaWQgZGV0YWNoKCk7CiAKICAgICAgICAgTm9kZSogcmVmZXJlbmNlTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVmZXJlbmNlTm9kZS5ub2RlLmdldCgpOyB9CkBAIC01NCw4ICs1NCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlKik7
CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUg
SmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5l
eHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBuZXh0Tm9kZShleGVjU3RhdGVGcm9t
Tm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBw
cmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShleGVj
U3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAgICAgUGFzc1JlZlB0
cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gbmV4dE5vZGUoc2Ny
aXB0U3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAgICAgUGFzc1Jl
ZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZp
b3VzTm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgTm9kZUl0ZXJhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2ln
bmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5
UmVmZXJlbmNlcyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwIGIvV2Vi
Q29yZS9kb20vVHJhdmVyc2FsLmNwcAppbmRleCBjMmM5MWQ0Li41ZDU2ZGViIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5j
cHAKQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZp
bHRlci5oIgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFRyYXZlcnNhbDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2lnbmVk
IHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gbm9kZUZpbHRlciwgYm9vbCBleHBh
bmRFbnRpdHlSZWZlcmVuY2VzKQpAQCAtNDAsNyArMzgsNyBAQCBUcmF2ZXJzYWw6OlRyYXZlcnNh
bChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVm
UHRyPAogewogfQogCi1zaG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVj
LCBOb2RlKiBub2RlKSBjb25zdAorc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKFNjcmlwdFN0
YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVG8gaGFuZGxl
IFhNTCBwcm9wZXJseSB3ZSB3b3VsZCBoYXZlIHRvIGNoZWNrIG1fZXhwYW5kRW50aXR5UmVmZXJl
bmNlcy4KIApAQCAtNTAsNyArNDgsNyBAQCBzaG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoRXhl
Y1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKSBjb25zdAogICAgICAgICByZXR1cm4gTm9kZUZpbHRl
cjo6RklMVEVSX1NLSVA7CiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAgcmV0dXJuIG1fZmlsdGVyLT5hY2NlcHROb2RlKGV4
ZWMsIG5vZGUpOworICAgIHJldHVybiBtX2ZpbHRlci0+YWNjZXB0Tm9kZShzdGF0ZSwgbm9kZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Ry
YXZlcnNhbC5oIGIvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKaW5kZXggNmU4NzEwMy4uZmM0NDAz
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKKysrIGIvV2ViQ29yZS9kb20v
VHJhdmVyc2FsLmgKQEAgLTI1LDEzICsyNSwxMCBAQAogI2lmbmRlZiBUcmF2ZXJzYWxfaAogI2Rl
ZmluZSBUcmF2ZXJzYWxfaAogCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7
Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBOb2RlOwpAQCAtNDYsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIFRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3
aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVy
ZW5jZXMpOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSop
IGNvbnN0OworICAgICAgICBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtl
ci5jcHAKaW5kZXggOTg0ZDZjYi4uZGUwNjM2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJl
ZVdhbGtlci5jcHAKKysrIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKQEAgLTI1LDE0ICsy
NSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRyZWVXYWxrZXIuaCIKIAot
I2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5o
IgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUcmVlV2Fs
a2VyOjpUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRU
b1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gZmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJl
ZmVyZW5jZXMpCkBAIC01NiwxNSArNTQsMTUgQEAgaW5saW5lIE5vZGUqIFRyZWVXYWxrZXI6OnNl
dEN1cnJlbnQoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQogICAgIHJldHVybiBtX2N1cnJlbnQuZ2V0
KCk7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjKQor
Tm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShTY3JpcHRTdGF0ZSogc3RhdGUpCiB7CiAgICAg
UmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgd2hpbGUgKG5vZGUgIT0gcm9vdCgp
KSB7CiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlmICghbm9k
ZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0
ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0
Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0
dXJuIHNldEN1cnJlbnQobm9kZS5yZWxlYXNlKCkpOwpAQCAtNzIsMTEgKzcwLDExIEBAIE5vZGUq
IFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiAwOwog
fQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUq
IFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIGZvciAo
UmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgKSB7Ci0g
ICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0
KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
c2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOwor
ICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAg
ICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTA1LDExICsxMDMsMTEgQEAg
Tm9kZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJu
IDA7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCitO
b2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIGZv
ciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmxhc3RDaGlsZCgpOyBub2RlOyApIHsK
LSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5n
ZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7
CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAgICAg
ICAgICBjYXNlIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ6CkBAIC0xMzgsMTUgKzEzNiwxNSBA
QCBOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVy
biAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBl
eGVjKQorTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRlKiBzdGF0
ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICBpZiAobm9kZSA9
PSByb290KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGZv
ciAoUmVmUHRyPE5vZGU+IHNpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsgc2libGlu
ZzsgKSB7Ci0gICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShl
eGVjLCBzaWJsaW5nLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5v
ZGUoc3RhdGUsIHNpYmxpbmcuZ2V0KCkpOworICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
IHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAgICAgICAgIGNhc2UgTm9kZUZp
bHRlcjo6RklMVEVSX0FDQ0VQVDoKQEAgLTE2NiwyMyArMTY0LDIzIEBAIE5vZGUqIFRyZWVXYWxr
ZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlmICghbm9kZSB8fCBub2RlID09IHJvb3QoKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNj
ZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2Rl
KHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJl
c3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4
ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhTY3JpcHRTdGF0ZSogc3RhdGUpCiB7
CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgaWYgKG5vZGUgPT0gcm9v
dCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBmb3IgKFJl
ZlB0cjxOb2RlPiBzaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsgc2libGluZzsgKSB7Ci0g
ICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBzaWJs
aW5nLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUs
IHNpYmxpbmcuZ2V0KCkpOworICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHN3aXRjaCAo
YWNjZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAgICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklM
VEVSX0FDQ0VQVDoKQEAgLTIwMiwyOSArMjAwLDI5IEBAIE5vZGUqIFRyZWVXYWxrZXI6Om5leHRT
aWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKICAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT0gcm9vdCgpKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMs
IG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUu
Z2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAK
LU5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBU
cmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9IHJvb3QoKSkgewog
ICAgICAgICB3aGlsZSAoTm9kZSogcHJldmlvdXNTaWJsaW5nID0gbm9kZS0+cHJldmlvdXNTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgIG5vZGUgPSBwcmV2aW91c1NpYmxpbmc7Ci0gICAgICAgICAg
ICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsK
LSAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkp
OworICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09
IE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1QpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB3aGlsZSAoTm9kZSogbGFzdENoaWxkID0gbm9kZS0+bGFzdENoaWxkKCkpIHsK
ICAgICAgICAgICAgICAgICBub2RlID0gbGFzdENoaWxkOwotICAgICAgICAgICAgICAgIGFjY2Vw
dE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAg
ICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGFj
Y2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9
PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTI0MCw4ICsyMzgsOCBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoRXhl
Y1N0YXRlKiBleGVjKQogICAgICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICBub2RlID0gcGFyZW50OwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0
ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0
Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0
dXJuIHNldEN1cnJlbnQobm9kZS5yZWxlYXNlKCkpOwpAQCAtMjQ5LDE0ICsyNDcsMTQgQEAgTm9k
ZSogVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4g
MDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjKQorTm9k
ZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogQ2hpbGRyZW46CiAgICAgd2hpbGUgKE5vZGUqIGZp
cnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgbm9kZSA9IGZpcnN0Q2hp
bGQ7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5v
ZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0
KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0
ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJl
bGVhc2UoKSk7CkBAIC0yNjUsOCArMjYzLDggQEAgQ2hpbGRyZW46CiAgICAgfQogICAgIHdoaWxl
IChOb2RlKiBuZXh0U2libGluZyA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcocm9vdCgpKSkg
ewogICAgICAgICBub2RlID0gbmV4dFNpYmxpbmc7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVS
ZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAm
JiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9
IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChh
Y2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAg
ICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9UcmVlV2Fsa2VyLmggYi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgKaW5kZXggMzQ4ZmY5
NC4uZDA2YWNiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCisrKyBiL1dl
YkNvcmUvZG9tL1RyZWVXYWxrZXIuaApAQCAtNDUsMjIgKzQ1LDIyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnQuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRDdXJyZW50Tm9kZShQYXNzUmVmUHRyPE5vZGU+
LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZShKU0M6OkV4ZWNT
dGF0ZSopOwotICAgICAgICBOb2RlKiBmaXJzdENoaWxkKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAg
ICAgIE5vZGUqIGxhc3RDaGlsZChKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBwcmV2
aW91c1NpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogbmV4dFNpYmxpbmco
SlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEpTQzo6RXhlY1N0
YXRlKik7Ci0gICAgICAgIE5vZGUqIG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgICAg
IE5vZGUqIHBhcmVudE5vZGUoU2NyaXB0U3RhdGUqKTsKKyAgICAgICAgTm9kZSogZmlyc3RDaGls
ZChTY3JpcHRTdGF0ZSopOworICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoU2NyaXB0U3RhdGUqKTsK
KyAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5v
ZGUqIG5leHRTaWJsaW5nKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIHByZXZpb3VzTm9k
ZShTY3JpcHRTdGF0ZSopOworICAgICAgICBOb2RlKiBuZXh0Tm9kZShTY3JpcHRTdGF0ZSopOwog
CiAgICAgICAgIC8vIEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEph
dmFTY3JpcHQgZXhjZXB0aW9uIGlmIGFueS4KLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpIHsg
cmV0dXJuIHBhcmVudE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0K
LSAgICAgICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoZXhlY1N0YXRl
RnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbGFzdENoaWxkKCkg
eyByZXR1cm4gbGFzdENoaWxkKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9
Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIHsgcmV0dXJuIHByZXZpb3VzU2libGlu
ZyhleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBu
ZXh0U2libGluZygpIHsgcmV0dXJuIG5leHRTaWJsaW5nKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3Vy
cmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgcmV0dXJuIHBy
ZXZpb3VzTm9kZShleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAg
ICBOb2RlKiBuZXh0Tm9kZSgpIHsgcmV0dXJuIG5leHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1f
Y3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKSB7IHJldHVybiBw
YXJlbnROb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAg
ICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoc2NyaXB0U3RhdGVGcm9t
Tm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoKSB7IHJl
dHVybiBsYXN0Q2hpbGQoc2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQor
ICAgICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSB7IHJldHVybiBwcmV2aW91c1NpYmxpbmco
c2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBu
ZXh0U2libGluZygpIHsgcmV0dXJuIG5leHRTaWJsaW5nKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9j
dXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCkgeyByZXR1cm4g
cHJldmlvdXNOb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAg
ICAgICAgTm9kZSogbmV4dE5vZGUoKSB7IHJldHVybiBuZXh0Tm9kZShzY3JpcHRTdGF0ZUZyb21O
b2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBUcmVlV2Fs
a2VyKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9k
ZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Cg==
</data>
<flag name="review"
          id="11881"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25747</attachid>
            <date>2008-12-04 12:23:34 -0800</date>
            <delta_ts>2008-12-04 14:39:01 -0800</delta_ts>
            <desc>ScriptState v5 (rebased to trunk)</desc>
            <filename>scriptState.patch</filename>
            <type>text/plain</type>
            <size>28813</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDJjMTgyYS4uNDc0YTcwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAwOC0xMS0yNiAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBTY3JpcHRTdGF0ZSBhYnN0cmFjdGlvbiAo
aW5pdGlhbGx5LCBhIHNpbXBsZSB0eXBlZGVmKQorICAgICAgICBhcyBtZWFucyBvZiBjYXJyeWlu
ZyBleGNlcHRpb24gaW5mb3JtYXRpb24gYWNyb3NzIGJpbmRpbmdzIGJvdW5kYXJpZXMKKyAgICAg
ICAgYW5kIGluIGEgc2NyaXB0IGVuZ2luZS1pbmRlcGVuZGVudCB3YXkuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFN0YXRlRnJvbU5vZGUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVGaWx0ZXI6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oOgor
ICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0
ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6OnByZXZp
b3VzTm9kZSk6CisgICAgICAgICogZG9tL05vZGVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0
b3I6OnByZXZpb3VzTm9kZSk6CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUcmF2ZXJzYWw6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9UcmF2ZXJz
YWwuaDoKKyAgICAgICAgKiBkb20vVHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OmZp
cnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bmV4
dE5vZGUpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OmZp
cnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bmV4
dE5vZGUpOgorCiAyMDA4LTExLTEzICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggYSBidWcgaW4gU2Nyb2xsVmlldydzIHJlZmFjdG9yaW5nLiAgQW4gaXNWaXNp
YmxlIGNoZWNrIHNob3VsZCBoYXZlIGJlZW4gaXNTZWxmVmlzaWJsZS4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGUzYTE3NzguLjIxY2VjMWEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMTM5ODEsNiArMTM5ODEsMTAgQEAKIAkJCQkJPg0K
IAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdz
XGpzXFNjcmlwdFN0YXRlLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0U3RyaW5nLmgiDQogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDdlMmRlNGEuLjBkMDBkY2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0zLDcgKzMsNyBAQAogCWFyY2hpdmVWZXJzaW9uID0gMTsKIAljbGFz
c2VzID0gewogCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDQyOworCW9iamVjdFZlcnNpb24gPSA0NTsK
IAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwpA
QCAtNTQzLDYgKzU0Myw3IEBACiAJCTM3RjgxOEZEMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3Jl
VVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0Y4MThGRTBE
NjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8q
IFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsKIAkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2
IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovOyB9
OworCQk0MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQzc2MEIwMEVERTAzRDMwMEMx
NjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQ0MTUyOTJFMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICov
OyB9OwogCQk0NDE1MjkyRjBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDE1
MjkyRDBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgKi87IH07
CiAJCTQ0MUIwNTU2MENENzc5QjYwMDdDMUYxOCAvKiBET01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5o
IGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDQyOUFBRUEwQ0I4NERDNzAwNzY0N0M1IC8qIERPTUNTU1N0eWxlU2hlZXRQcml2YXRl
LmggKi87IH07CkBAIC01MzU3LDYgKzUzNTgsNyBAQAogCQkzN0Y4MThGQjBENjU3NjA2MDA1RTFG
MDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
N0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZGNDVFRjBFRDdCMzExMDA4MjE1QjYgLyog
U2NyaXB0U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFN0
cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUM3NjBCMDBFREUwM0QzMDBD
MTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2NyaXB0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMwRTFB
RThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NDE1MjkyRDBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQy
OUFBRUEwQ0I4NERDNzAwNzY0N0M1IC8qIERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxMjMsNiArMTMxMjUsNyBAQAogCQkJCUE4
M0UxQzcyMEU0OTA0MkIwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFjLm1tICovLAogCQkJ
CTkzNENDMTE2MEVEQ0FDNzMwMEE2NThGMiAvKiBTY3JpcHRJbnN0YW5jZS5oICovLAogCQkJCTkz
NENDMTA5MEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggKi8sCisJCQkJNDFD
NzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi8sCiAJCQkJNDE2RjQ1RUYw
RUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovLAogCQkJCTkzNENDMERGMEVEMzlE
NkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgKi8sCiAJCQkJOTM0Q0MwRTAwRUQzOUQ2RjAw
QTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggKi8sCkBAIC0xNjQ1Niw2ICsxNjQ1OSw3IEBACiAJCQkJ
MDgwNEJGNkYwRUUwOUMzQjAwMDZDMDAwIC8qIFdNTERvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDgxRDgxMzIwRUUwRTc0RDAwRDczNjg5IC8qIFdNTFRpbWVyRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTRDMTc4OUIwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlz
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFDNzYwQjEwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlw
dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApp
bmRleCAyM2Q2M2E4Li4xZGYxNTEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3Bw
CkBAIC00OTQsNyArNDk0LDcgQEAgSlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnQKICAgICByZXR1cm4g
bmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVj
dFByb3RvRnVuY1RvU3RyaW5nKTsKIH0KIAotRXhlY1N0YXRlKiBleGVjU3RhdGVGcm9tTm9kZShO
b2RlKiBub2RlKQorU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUoTm9kZSogbm9kZSkK
IHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmgKaW5kZXggY2FmY2Y0NC4uMjRlZjIwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9Db21wbGV0aW9uLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rp
b24uaD4KKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE4MCw3ICsxODEsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKTsKICAgICBKU0M6OkpTVmFsdWUqIG9iamVjdFRvU3RyaW5nRnVuY3Rp
b25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKIAotICAgIEpTQzo6RXhlY1N0YXRlKiBl
eGVjU3RhdGVGcm9tTm9kZShOb2RlKik7CisgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJv
bU5vZGUoTm9kZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IGUzOWQwOTQuLjhiYTA5MDAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaApAQCAtMzgsNyAr
MzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNOb2Rl
RmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNWYWx1ZSogZmlsdGVyKTsKIAotICAgICAgICB2aXJ0dWFs
IHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBOb2RlKikgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAogICAgICAgICBKU0M6OkpTVmFsdWUqIG1fZmls
dGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjNjY2UwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFN0YXRlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAw
OCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRTdGF0
ZV9oCisjZGVmaW5lIFNjcmlwdFN0YXRlX2gKKworbmFtZXNwYWNlIEpTQyB7CisgICAgY2xhc3Mg
RXhlY1N0YXRlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAvLyBUaGUgaWRlYSBp
cyB0byBleHBvc2UgInN0YXRlLWxpa2UiIG1ldGhvZHMgKGhhZEV4Y2VwdGlvbiwgYW5kIGFueSBv
dGhlcgorICAgIC8vIG1ldGhvZHMgd2hlcmUgRXhlY1N0YXRlIGp1c3QgZGlwcyBpbnRvIGdsb2Jh
bERhdGEpIG9mIEpTQzo6RXhlY1N0YXRlIGFzIGEKKyAgICAvLyBzZXBhcmF0ZSBhYnN0cmFjdGlv
bi4KKyAgICAvLyBGb3Igbm93LCB0aGUgc2VwYXJhdGlvbiBpcyBwdXJlbHkgYnkgY29udmVudGlv
bi4KKyAgICB0eXBlZGVmIEpTQzo6RXhlY1N0YXRlIFNjcmlwdFN0YXRlOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JpcHRTdGF0ZV9oCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9Ob2RlRmlsdGVyLmNwcCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCmluZGV4
IDU1ZWQ4ZTIuLmM1ZDg1NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3Bw
CisrKyBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCkBAIC0yNiwxNiArMjYsMTMgQEAKICNp
bmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSA8aW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqIGV4
ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyOjphY2NlcHROb2RlKFNjcmlw
dFN0YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBjYXN0IHRvIHNob3J0
IHNpbGVuY2VzICJlbnVtZXJhbCBhbmQgbm9uLWVudW1lcmFsIHR5cGVzIGluIHJldHVybiIgd2Fy
bmluZwotICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHROb2RlKGV4
ZWMsIG5vZGUpIDogc3RhdGljX2Nhc3Q8c2hvcnQ+KEZJTFRFUl9BQ0NFUFQpOworICAgIHJldHVy
biBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHROb2RlKHN0YXRlLCBub2RlKSA6IHN0
YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oIGIvV2ViQ29yZS9kb20v
Tm9kZUZpbHRlci5oCmluZGV4IDQ3ZDBhNGEuLjQzNTYzNTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL05vZGVGaWx0ZXIuaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKQEAgLTcxLDEx
ICs3MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE5vZGVGaWx0ZXIoY29uZGl0aW9uKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzaG9y
dCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAgICAgICBzaG9y
dCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNvbnN0OwogICAgICAgICB2b2lkIG1h
cmsoKSB7IG1fY29uZGl0aW9uLT5tYXJrKCk7IH07CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBi
aW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55
LgotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGFj
Y2VwdE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobm9kZSksIG5vZGUpOyB9CisgICAgICAgIHNob3J0
IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gYWNjZXB0Tm9kZShzY3JpcHRT
dGF0ZUZyb21Ob2RlKG5vZGUpLCBub2RlKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgTm9k
ZUZpbHRlcihQYXNzUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+IGNvbmRpdGlvbikgOiBtX2Nv
bmRpdGlvbihjb25kaXRpb24pIHsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcAppbmRl
eCA3NDY3N2I3Li4xZDJlMWUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcApAQCAt
MjcsMTEgKzI3LDkgQEAKIAogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAotdXNpbmcgbmFtZXNw
YWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaG9ydCBOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdAorc2hvcnQgTm9kZUZpbHRl
ckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25zdAogewogICAg
IHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRp
dGlvbi5oCmluZGV4IDZmY2RmYTguLmM5NGNjOWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05v
ZGVGaWx0ZXJDb25kaXRpb24uaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9u
LmgKQEAgLTI1LDEyICsyNSw5IEBACiAjaWZuZGVmIE5vZGVGaWx0ZXJDb25kaXRpb25faAogI2Rl
ZmluZSBOb2RlRmlsdGVyQ29uZGl0aW9uX2gKIAorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3Mg
RXhlY1N0YXRlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBOb2RlOwpA
QCAtMzgsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTm9kZUZpbHRl
ckNvbmRpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVGaWx0ZXJDb25kaXRpb24+IHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRpb24oKSB7IH0KLSAg
ICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNv
bnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwg
Tm9kZSopIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKSB7IH0KICAgICB9
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwIGIvV2ViQ29yZS9k
b20vTm9kZUl0ZXJhdG9yLmNwcAppbmRleCBlZGMwZjExLi5hZjA3ZjQyIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRv
ci5jcHAKQEAgLTI1LDEyICsyNSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik5vZGVJdGVyYXRvci5oIgogCi0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVk
ZSAiTm9kZUZpbHRlci5oIgotCi11c2luZyBuYW1lc3BhY2UgSlNDOworI2luY2x1ZGUgIlNjcmlw
dFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODYsNyArODQsNyBAQCBOb2Rl
SXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQogICAgIHJvb3QoKS0+ZG9jdW1lbnQoKS0+ZGV0YWNo
Tm9kZUl0ZXJhdG9yKHRoaXMpOwogfQogCi1QYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6
bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8
Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShTY3JpcHRTdGF0ZSogc3RhdGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGlmIChtX2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7CkBAIC0xMDEsOCArOTksOCBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVy
YXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAg
ICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBub3QgcGFzcyBvdmVyIGRl
c2NlbmRhbnRzCiAgICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBub2RlLiBIZW5jZSwgRklMVEVS
X1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KICAgICAgICAgUmVmUHRyPE5vZGU+
IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5kaWRhdGVOb2RlLm5vZGU7Ci0gICAgICAgIGJvb2wg
bm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShleGVjLCBwcm92aXNpb25hbFJlc3VsdC5nZXQo
KSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0
Tm9kZShzdGF0ZSwgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCkpID09IE5vZGVGaWx0ZXI6OkZJTFRF
Ul9BQ0NFUFQ7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGVXYXNBY2NlcHRlZCkgewogICAgICAg
ICAgICAgbV9yZWZlcmVuY2VOb2RlID0gbV9jYW5kaWRhdGVOb2RlOwpAQCAtMTE1LDcgKzExMyw3
IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4
ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQog
Ci1QYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSog
ZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6
cHJldmlvdXNOb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKQEAg
LTEzMCw4ICsxMjgsOCBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6cHJldmlvdXNO
b2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEluIG90
aGVyIHdvcmRzLCBGSUxURVJfUkVKRUNUIGRvZXMgbm90IHBhc3Mgb3ZlciBkZXNjZW5kYW50cwog
ICAgICAgICAvLyBvZiB0aGUgcmVqZWN0ZWQgbm9kZS4gSGVuY2UsIEZJTFRFUl9SRUpFQ1QgaXMg
dGhlIHNhbWUgYXMgRklMVEVSX1NLSVAuCiAgICAgICAgIFJlZlB0cjxOb2RlPiBwcm92aXNpb25h
bFJlc3VsdCA9IG1fY2FuZGlkYXRlTm9kZS5ub2RlOwotICAgICAgICBib29sIG5vZGVXYXNBY2Nl
cHRlZCA9IGFjY2VwdE5vZGUoZXhlYywgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCkpID09IE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUoc3RhdGUs
IHByb3Zpc2lvbmFsUmVzdWx0LmdldCgpKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwor
ICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGlmIChub2RlV2FzQWNjZXB0ZWQpIHsKICAgICAgICAgICAgIG1fcmVm
ZXJlbmNlTm9kZSA9IG1fY2FuZGlkYXRlTm9kZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05v
ZGVJdGVyYXRvci5oIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKaW5kZXggODQyZTcxZC4u
ZDdlZWUzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKKysrIGIvV2Vi
Q29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKQEAgLTQzLDggKzQzLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB9CiAgICAgICAgIH5Ob2RlSXRlcmF0b3IoKTsKIAotICAgICAgICBQYXNz
UmVmUHRyPE5vZGU+IG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShTY3JpcHRT
dGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91
c05vZGUoU2NyaXB0U3RhdGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgZGV0YWNo
KCk7CiAKICAgICAgICAgTm9kZSogcmVmZXJlbmNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVm
ZXJlbmNlTm9kZS5ub2RlLmdldCgpOyB9CkBAIC01NCw4ICs1NCw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlKik7CiAKICAgICAgICAg
Ly8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlwdCBl
eGNlcHRpb24gaWYgYW55LgotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBuZXh0Tm9kZShleGVjU3RhdGVGcm9tTm9kZShyZWZlcmVu
Y2VOb2RlKCkpLCBlYyk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUo
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShleGVjU3RhdGVGcm9tTm9k
ZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0
Tm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gbmV4dE5vZGUoc2NyaXB0U3RhdGVGcm9t
Tm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBw
cmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShzY3Jp
cHRTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZUl0ZXJhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1No
b3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwIGIvV2ViQ29yZS9kb20vVHJh
dmVyc2FsLmNwcAppbmRleCBjMmM5MWQ0Li41ZDU2ZGViIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9UcmF2ZXJzYWwuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAKQEAgLTI4LDgg
KzI4LDYgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogCi11
c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRyYXZlcnNhbDo6
VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3cs
IFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gbm9kZUZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZl
cmVuY2VzKQpAQCAtNDAsNyArMzgsNyBAQCBUcmF2ZXJzYWw6OlRyYXZlcnNhbChQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPAogewogfQog
Ci1zaG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2Rl
KSBjb25zdAorc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwg
Tm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVG8gaGFuZGxlIFhNTCBwcm9wZXJs
eSB3ZSB3b3VsZCBoYXZlIHRvIGNoZWNrIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlcy4KIApAQCAt
NTAsNyArNDgsNyBAQCBzaG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVj
LCBOb2RlKiBub2RlKSBjb25zdAogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1NL
SVA7CiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRF
Ul9BQ0NFUFQ7Ci0gICAgcmV0dXJuIG1fZmlsdGVyLT5hY2NlcHROb2RlKGV4ZWMsIG5vZGUpOwor
ICAgIHJldHVybiBtX2ZpbHRlci0+YWNjZXB0Tm9kZShzdGF0ZSwgbm9kZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5oIGIv
V2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKaW5kZXggNmU4NzEwMy4uZmM0NDAzZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKKysrIGIvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgK
QEAgLTI1LDEzICsyNSwxMCBAQAogI2lmbmRlZiBUcmF2ZXJzYWxfaAogI2RlZmluZSBUcmF2ZXJz
YWxfaAogCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3Mg
RXhlY1N0YXRlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBOb2RlOwpA
QCAtNDYsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIFRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQ
YXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwotICAg
ICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0OworICAg
ICAgICBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNvbnN0OwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL1RyZWVXYWxrZXIuY3BwIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKaW5kZXgg
OTg0ZDZjYi4uZGUwNjM2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAK
KysrIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKQEAgLTI1LDE0ICsyNSwxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRyZWVXYWxrZXIuaCIKIAotI2luY2x1ZGUgPGlu
dGVycHJldGVyL0NhbGxGcmFtZS5oPgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgorI2luY2x1ZGUg
IlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAotdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUcmVlV2Fsa2VyOjpUcmVlV2Fs
a2VyKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NS
ZWZQdHI8Tm9kZUZpbHRlcj4gZmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCkBA
IC01NiwxNSArNTQsMTUgQEAgaW5saW5lIE5vZGUqIFRyZWVXYWxrZXI6OnNldEN1cnJlbnQoUGFz
c1JlZlB0cjxOb2RlPiBub2RlKQogICAgIHJldHVybiBtX2N1cnJlbnQuZ2V0KCk7CiB9CiAKLU5v
ZGUqIFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdh
bGtlcjo6cGFyZW50Tm9kZShTY3JpcHRTdGF0ZSogc3RhdGUpCiB7CiAgICAgUmVmUHRyPE5vZGU+
IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgd2hpbGUgKG5vZGUgIT0gcm9vdCgpKSB7CiAgICAgICAg
IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9k
ZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRl
LCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9
PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIHNldEN1cnJl
bnQobm9kZS5yZWxlYXNlKCkpOwpAQCAtNzIsMTEgKzcwLDExIEBAIE5vZGUqIFRyZWVXYWxrZXI6
OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBU
cmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUqIFRyZWVXYWxrZXI6
OmZpcnN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIGZvciAoUmVmUHRyPE5vZGU+
IG5vZGUgPSBtX2N1cnJlbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgKSB7Ci0gICAgICAgIHNob3J0
IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAg
ICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0
Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAo
c3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAgICAgY2FzZSBOb2Rl
RmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTA1LDExICsxMDMsMTEgQEAgTm9kZSogVHJlZVdh
bGtlcjo6Zmlyc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLU5v
ZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fs
a2VyOjpsYXN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIGZvciAoUmVmUHRyPE5v
ZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmxhc3RDaGlsZCgpOyBub2RlOyApIHsKLSAgICAgICAgc2hv
cnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7Ci0gICAg
ICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBzaG9ydCBhY2Nl
cHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CisgICAgICAgIGlm
IChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAgICAgICAgICBjYXNlIE5v
ZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ6CkBAIC0xMzgsMTUgKzEzNiwxNSBAQCBOb2RlKiBUcmVl
V2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiAwOwogfQogCi1O
b2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVjKQorTm9kZSog
VHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRlKiBzdGF0ZSkKIHsKICAgICBS
ZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICBpZiAobm9kZSA9PSByb290KCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGZvciAoUmVmUHRyPE5v
ZGU+IHNpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsgc2libGluZzsgKSB7Ci0gICAg
ICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBzaWJsaW5n
LmdldCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIHNp
YmxpbmcuZ2V0KCkpOworICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHN3aXRjaCAoYWNj
ZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAgICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklMVEVS
X0FDQ0VQVDoKQEAgLTE2NiwyMyArMTY0LDIzIEBAIE5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3Vz
U2libGluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCk7CiAgICAgICAgIGlmICghbm9kZSB8fCBub2RlID09IHJvb3QoKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVj
LCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2Rl
LmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2Rl
RmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQog
Ci1Ob2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBU
cmVlV2Fsa2VyOjpuZXh0U2libGluZyhTY3JpcHRTdGF0ZSogc3RhdGUpCiB7CiAgICAgUmVmUHRy
PE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgaWYgKG5vZGUgPT0gcm9vdCgpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBmb3IgKFJlZlB0cjxOb2RlPiBz
aWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsgc2libGluZzsgKSB7Ci0gICAgICAgICAgICBz
aG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBzaWJsaW5nLmdldCgpKTsK
LSAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIHNpYmxpbmcuZ2V0
KCkpOworICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJl
c3VsdCkgewogICAgICAgICAgICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDoK
QEAgLTIwMiwyOSArMjAwLDI5IEBAIE5vZGUqIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNT
dGF0ZSogZXhlYykKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAg
aWYgKCFub2RlIHx8IG5vZGUgPT0gcm9vdCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkp
OwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hv
cnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAg
ICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRF
Ul9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKLU5vZGUqIFRyZWVX
YWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpw
cmV2aW91c05vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxOb2RlPiBub2Rl
ID0gbV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9IHJvb3QoKSkgewogICAgICAgICB3aGls
ZSAoTm9kZSogcHJldmlvdXNTaWJsaW5nID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAg
ICAgICAgICAgIG5vZGUgPSBwcmV2aW91c1NpYmxpbmc7Ci0gICAgICAgICAgICBzaG9ydCBhY2Nl
cHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgICAg
IGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgc2hvcnQgYWNj
ZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICAg
ICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6
OkZJTFRFUl9SRUpFQ1QpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB3
aGlsZSAoTm9kZSogbGFzdENoaWxkID0gbm9kZS0+bGFzdENoaWxkKCkpIHsKICAgICAgICAgICAg
ICAgICBub2RlID0gbGFzdENoaWxkOwotICAgICAgICAgICAgICAgIGFjY2VwdE5vZGVSZXN1bHQg
PSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChleGVj
ICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGFjY2VwdE5vZGVSZXN1
bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAo
c3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVy
OjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0MCw4
ICsyMzgsOCBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVj
KQogICAgICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBu
b2RlID0gcGFyZW50OwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9k
ZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRl
LCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9
PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIHNldEN1cnJl
bnQobm9kZS5yZWxlYXNlKCkpOwpAQCAtMjQ5LDE0ICsyNDcsMTQgQEAgTm9kZSogVHJlZVdhbGtl
cjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gMDsKIH0KIAotTm9k
ZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjKQorTm9kZSogVHJlZVdhbGtl
cjo6bmV4dE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0cjxOb2RlPiBub2Rl
ID0gbV9jdXJyZW50OwogQ2hpbGRyZW46CiAgICAgd2hpbGUgKE5vZGUqIGZpcnN0Q2hpbGQgPSBu
b2RlLT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgbm9kZSA9IGZpcnN0Q2hpbGQ7Ci0gICAgICAg
IHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwot
ICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQg
YWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAg
ICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9B
Q0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBA
IC0yNjUsOCArMjYzLDggQEAgQ2hpbGRyZW46CiAgICAgfQogICAgIHdoaWxlIChOb2RlKiBuZXh0
U2libGluZyA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcocm9vdCgpKSkgewogICAgICAgICBu
b2RlID0gbmV4dFNpYmxpbmc7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUo
c3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVz
dWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0
Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UcmVlV2Fs
a2VyLmggYi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgKaW5kZXggMzQ4ZmY5NC4uZDA2YWNiOSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCisrKyBiL1dlYkNvcmUvZG9tL1Ry
ZWVXYWxrZXIuaApAQCAtNDUsMjIgKzQ1LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQuZ2V0KCk7IH0K
ICAgICAgICAgdm9pZCBzZXRDdXJyZW50Tm9kZShQYXNzUmVmUHRyPE5vZGU+LCBFeGNlcHRpb25D
b2RlJik7CiAKLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZShKU0M6OkV4ZWNTdGF0ZSopOwotICAg
ICAgICBOb2RlKiBmaXJzdENoaWxkKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgICAgIE5vZGUqIGxh
c3RDaGlsZChKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmco
SlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogbmV4dFNpYmxpbmcoSlNDOjpFeGVjU3Rh
dGUqKTsKLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAg
ICAgIE5vZGUqIG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgICAgIE5vZGUqIHBhcmVu
dE5vZGUoU2NyaXB0U3RhdGUqKTsKKyAgICAgICAgTm9kZSogZmlyc3RDaGlsZChTY3JpcHRTdGF0
ZSopOworICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoU2NyaXB0U3RhdGUqKTsKKyAgICAgICAgTm9k
ZSogcHJldmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIG5leHRTaWJs
aW5nKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZShTY3JpcHRTdGF0
ZSopOworICAgICAgICBOb2RlKiBuZXh0Tm9kZShTY3JpcHRTdGF0ZSopOwogCiAgICAgICAgIC8v
IEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFTY3JpcHQgZXhj
ZXB0aW9uIGlmIGFueS4KLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpIHsgcmV0dXJuIHBhcmVu
dE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9k
ZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoZXhlY1N0YXRlRnJvbU5vZGUobV9j
dXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbGFzdENoaWxkKCkgeyByZXR1cm4gbGFz
dENoaWxkKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5v
ZGUqIHByZXZpb3VzU2libGluZygpIHsgcmV0dXJuIHByZXZpb3VzU2libGluZyhleGVjU3RhdGVG
cm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBuZXh0U2libGluZygp
IHsgcmV0dXJuIG5leHRTaWJsaW5nKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkp
OyB9Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShl
eGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBuZXh0
Tm9kZSgpIHsgcmV0dXJuIG5leHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQo
KSkpOyB9CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKSB7IHJldHVybiBwYXJlbnROb2RlKHNj
cmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogZmly
c3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoc2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJl
bnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoKSB7IHJldHVybiBsYXN0Q2hp
bGQoc2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2Rl
KiBwcmV2aW91c1NpYmxpbmcoKSB7IHJldHVybiBwcmV2aW91c1NpYmxpbmcoc2NyaXB0U3RhdGVG
cm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBuZXh0U2libGluZygp
IHsgcmV0dXJuIG5leHRTaWJsaW5nKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgp
KSk7IH0KKyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCkgeyByZXR1cm4gcHJldmlvdXNOb2Rl
KHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSog
bmV4dE5vZGUoKSB7IHJldHVybiBuZXh0Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG1fY3VycmVu
dC5nZXQoKSkpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBUcmVlV2Fsa2VyKFBhc3NSZWZQ
dHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJv
b2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Cg==
</data>
<flag name="review"
          id="12042"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>