<?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>117390</bug_id>
          
          <creation_ts>2013-06-09 23:31:04 -0700</creation_ts>
          <short_desc>Introducing StackIterator class.</short_desc>
          <delta_ts>2013-10-07 13:41:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>898556</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-09 23:31:04 -0700</bug_when>
    <thetext>Unify how we iterate the JS stack and remove all the special purpose stack iteration / accessor functions in Interpreter.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898557</commentid>
    <comment_count>1</comment_count>
      <attachid>204136</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-09 23:38:01 -0700</bug_when>
    <thetext>Created attachment 204136
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898558</commentid>
    <comment_count>2</comment_count>
      <attachid>204136</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-09 23:46:10 -0700</bug_when>
    <thetext>Comment on attachment 204136
the patch.

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

&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:308
&gt; +    // this -&gt; The callee; this is either an inlined callee in which case it already has
&gt; +    //    a pointer to the true caller. Otherwise it contains current PC in the machine
&gt; +    //    caller.
&gt; +    //
&gt; +    // machineCaller -&gt; The caller according to the machine, which may be zero or
&gt; +    //    more frames above the true caller due to inlining.

The above comments are stale, and came from CallFrame::trueCallerFrame().  I&apos;ll remove them.

&gt; Source/JavaScriptCore/profiler/ProfileNode.h:133
&gt; +        typedef Vector&lt;RefPtr&lt;ProfileNode&gt; &gt;::const_iterator StackIterator;

I made this private to avoid a name conflict with the new StackIterator class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898658</commentid>
    <comment_count>3</comment_count>
      <attachid>204136</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-10 08:23:52 -0700</bug_when>
    <thetext>Comment on attachment 204136
the patch.

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

r=me, but I think this needs a little re-working at the interface level before landing.

&gt; Source/JavaScriptCore/ChangeLog:24
&gt; +        The StackIterator implements a Frame class that inherits from CallFrame.
&gt; +        The StackIterator::Frame serves as reader of the CallFrame that makes
&gt; +        it easier to access information about the frame. The StackIterator::Frame
&gt; +        only adds functions, and no additional data fields.

I like this design. In the past, you&apos;ve talked about trying to hide or factor out some of CallFrame&apos;s interfaces. In future, I think you might be able to use this design for that purpose, too.

&gt; Source/JavaScriptCore/ChangeLog:80
&gt; +          There are 2 versions that can be use as follows:

Grammar: Should be &quot;used&quot;.

&gt; Source/JavaScriptCore/ChangeLog:87
&gt; +          2. When you have a CallFrame*, you can print its content
&gt; +             as follows:
&gt; +                 StackIterator::Frame::print(callFrame, indentLevel);

The C++/object-oriented way to do this is to construct a StackIterator and then call iter-&gt;print(). Why this additional interface? I don&apos;t see it used.

&gt; Source/JavaScriptCore/jsc.cpp:332
&gt; +    for (iter.begin(); !iter.end(); iter++, i++)

This iteration code is not idiomatic C++. It should be something like:
    for (StackIterator iter = exec-&gt;begin(); iter != exec-&gt;end(); ++iter, ++i)
or, slightly less idiomatic but still an improvement:
    for (StackIterator iter = StackIterator::begin(exec); iter != StackIterator::end(exec); ++iter, ++i)

&gt; Source/JavaScriptCore/API/JSContextRef.cpp:216
&gt; +        // If callee is unknown, but we&apos;ve not added any frame yet, we should
&gt; +        // still add the frame, because something called us, and gave us arguments.
&gt; +        if (!callee &amp;&amp; i)
&gt; +            break;

Would be better to explain when this can happen and why.

&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:67
&gt; +    seekFrameForFunction(calleeFunctionObj);

We usually use the word &quot;find&quot;.

&gt; Source/JavaScriptCore/interpreter/StackIterator.h:73
&gt; +        static Frame* castFromCallFrame(CallFrame* f) { return reinterpret_cast&lt;Frame*&gt;(f); }

I think this would read slightly better as a constructor function. That way, you can hide the detail that this is a simple pointer cast.

&gt; Source/JavaScriptCore/interpreter/StackIterator.h:74
&gt; +        static CallFrame* castToCallFrame(Frame* f) { return reinterpret_cast&lt;CallFrame*&gt;(f); }

Ditto here, as a regular accessor function.

&gt; Source/JavaScriptCore/interpreter/StackIterator.h:85
&gt; +    JS_EXPORT_PRIVATE void begin(FrameFilter = nullptr);
&gt; +    JS_EXPORT_PRIVATE void beginAt(CallFrame* startFrame, FrameFilter = nullptr);
&gt; +    JS_EXPORT_PRIVATE void beginAt(JSFunction* calleeFunctionObj, FrameFilter = nullptr);

These should be constructor functions.

&gt; Source/JavaScriptCore/interpreter/StackIterator.h:92
&gt; +    void operator++(int) { gotoNextFrame(); }

I don&apos;t think we want to support post-increment. For this kind of iterator, it would be slow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898945</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-10 18:14:19 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/JavaScriptCore/ChangeLog:87
&gt; &gt; +          2. When you have a CallFrame*, you can print its content
&gt; &gt; +             as follows:
&gt; &gt; +                 StackIterator::Frame::print(callFrame, indentLevel);
&gt; 
&gt; The C++/object-oriented way to do this is to construct a StackIterator and then call iter-&gt;print(). Why this additional interface? I don&apos;t see it used.

This 2nd form is a convenience function that we can call from a debugger.  I&apos;ve move it into the global namespace and renamed it to debugPrintCallFrame().
 
&gt; &gt; Source/JavaScriptCore/jsc.cpp:332
&gt; &gt; +    for (iter.begin(); !iter.end(); iter++, i++)
&gt; 
&gt; This iteration code is not idiomatic C++. It should be something like:
&gt;     for (StackIterator iter = exec-&gt;begin(); iter != exec-&gt;end(); ++iter, ++i)

I&apos;ve adopted this idiom.

&gt; &gt; Source/JavaScriptCore/API/JSContextRef.cpp:216
&gt; &gt; +        // If callee is unknown, but we&apos;ve not added any frame yet, we should
&gt; &gt; +        // still add the frame, because something called us, and gave us arguments.
&gt; &gt; +        if (!callee &amp;&amp; i)
&gt; &gt; +            break;
&gt; 
&gt; Would be better to explain when this can happen and why.

As discussed offline, this was a pre-existing comment that I altered slightly.  Leaving in place.

The rest has been fixed.  A new patch will be uploaded shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898946</commentid>
    <comment_count>5</comment_count>
      <attachid>204272</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-10 18:15:31 -0700</bug_when>
    <thetext>Created attachment 204272
revised patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898948</commentid>
    <comment_count>6</comment_count>
      <attachid>204272</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-10 18:17:00 -0700</bug_when>
    <thetext>Comment on attachment 204272
revised patch.

Oops.  Need to update build files to add a new header file.  Also need to add the new file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898949</commentid>
    <comment_count>7</comment_count>
      <attachid>204274</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-10 18:22:27 -0700</bug_when>
    <thetext>Created attachment 204274
patch #3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898968</commentid>
    <comment_count>8</comment_count>
      <attachid>204274</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-10 18:59:24 -0700</bug_when>
    <thetext>Comment on attachment 204274
patch #3

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

r=me

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:280
&gt; +        JS_EXPORT_PRIVATE StackIterator beginAt(JSFunction* calleeFunctionObj, StackIterator::FrameFilter = nullptr);

In idiomatic C++, a function that finds a location in a list and returns an iterator is named &quot;find&quot;.

Since our plan is to switch to a callback style and remove this interface soon, I guess it&apos;s OK to be expedient leave this as-is for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899012</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-10 21:49:27 -0700</bug_when>
    <thetext>Landed in r151420: &lt;http://trac.webkit.org/changeset/151420&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899553</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-12 08:04:55 -0700</bug_when>
    <thetext>Rolled out in r151500.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900357</commentid>
    <comment_count>11</comment_count>
      <attachid>204661</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-13 18:54:23 -0700</bug_when>
    <thetext>Created attachment 204661
Fixed cause of layout test failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900412</commentid>
    <comment_count>12</comment_count>
      <attachid>204671</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-13 21:46:00 -0700</bug_when>
    <thetext>Created attachment 204671
Delta between new and old rolled out patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900552</commentid>
    <comment_count>13</comment_count>
      <attachid>204671</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-14 07:28:13 -0700</bug_when>
    <thetext>Comment on attachment 204671
Delta between new and old rolled out patch.

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

&gt; Source/JavaScriptCore/ChangeLog:36
&gt; +        - Changed the implementation of StackIterator::end() to return a stub
&gt; +          empty frame instead of nullptr. This ensures that we can never
&gt; +          segfault by deref&apos;ing the iterator even when it has reached end().

I don&apos;t think this is an improvement. I don&apos;t think we can possibly protect clients from all of the invalid pointer accesses they may write, and pretending that we can is just confusing. (For example, you don&apos;t protect me from dereferencing ++end().) And it makes the design more complex.

&gt; Source/JavaScriptCore/interpreter/StackIteratorPrivate.h:57
&gt; +    void begin(FrameFilter = nullptr);
&gt; +    void beginAt(CallFrame* startFrame, FrameFilter = nullptr);
&gt; +    void beginAt(JSFunction* calleeFunctionObj, FrameFilter = nullptr);

Can these be constructor functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900694</commentid>
    <comment_count>14</comment_count>
      <attachid>204742</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-14 16:08:49 -0700</bug_when>
    <thetext>Created attachment 204742
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900695</commentid>
    <comment_count>15</comment_count>
      <attachid>204743</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-14 16:10:01 -0700</bug_when>
    <thetext>Created attachment 204743
revised patch as a delta from rolled out patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900697</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-14 16:14:19 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 204671 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=204671&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:36
&gt; &gt; +        - Changed the implementation of StackIterator::end() to return a stub
&gt; &gt; +          empty frame instead of nullptr. This ensures that we can never
&gt; &gt; +          segfault by deref&apos;ing the iterator even when it has reached end().
&gt; 
&gt; I don&apos;t think this is an improvement. I don&apos;t think we can possibly protect clients from all of the invalid pointer accesses they may write, and pretending that we can is just confusing. (For example, you don&apos;t protect me from dereferencing ++end().) And it makes the design more complex.

OK, I&apos;ve changed it to work this way.

&gt; &gt; Source/JavaScriptCore/interpreter/StackIteratorPrivate.h:57
&gt; &gt; +    void begin(FrameFilter = nullptr);
&gt; &gt; +    void beginAt(CallFrame* startFrame, FrameFilter = nullptr);
&gt; &gt; +    void beginAt(JSFunction* calleeFunctionObj, FrameFilter = nullptr);
&gt; 
&gt; Can these be constructor functions?

Sorry that I didn&apos;t catch on the first time you brought this up.  It&apos;s fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900892</commentid>
    <comment_count>17</comment_count>
      <attachid>204743</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-16 12:41:02 -0700</bug_when>
    <thetext>Comment on attachment 204743
revised patch as a delta from rolled out patch

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

exec-&gt;find(exec) is a strange design pattern. We&apos;re not looking for exec -- we already have it. exec-&gt;begin() would be better.

&gt; Source/JavaScriptCore/interpreter/CallFrame.cpp:102
&gt;      if (!this)

When can &apos;this&apos; be NULL? This is a strange design pattern. Usually, invoking a member function on a null pointer is not allowed.

&gt; Source/JavaScriptCore/interpreter/CallFrame.cpp:109
&gt;      if (!this)

Ditto.

&gt; Source/JavaScriptCore/interpreter/CallFrame.cpp:116
&gt; +    if (!this)

Ditto.

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:413
&gt; +    StackIterator iter = callFrame-&gt;find(callFrame);
&gt; +    ++iter;

Don&apos;t we need to check for end() here?

&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:48
&gt; +    if (m_vm)

When can vm be NULL?

&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:57
&gt; +    if (m_vm)

Ditto.

&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:66
&gt; +    if (m_vm) {

Ditto.

&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:76
&gt; +    if (!frame)

When can frame be NULL?

&gt; Source/JavaScriptCore/runtime/InitializeThreading.cpp:71
&gt; +    StackIterator::initializeStatics();

This is no longer needed.

&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:208
&gt;      ++iter;

Don&apos;t we need to check for end() here?

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:716
&gt;      ++iter;

Ditto.

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:734
&gt;      ++iter;

Ditto.

&gt; Source/JavaScriptCore/runtime/ObjectConstructor.cpp:144
&gt;      ++iter;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900896</commentid>
    <comment_count>18</comment_count>
      <attachid>204743</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-16 14:17:07 -0700</bug_when>
    <thetext>Comment on attachment 204743
revised patch as a delta from rolled out patch

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

&gt;&gt; Source/JavaScriptCore/interpreter/CallFrame.cpp:102
&gt;&gt;      if (!this)
&gt; 
&gt; When can &apos;this&apos; be NULL? This is a strange design pattern. Usually, invoking a member function on a null pointer is not allowed.

This is similar in the way that given a CallFrame* callFrame, we can always invoke callFrame-&gt;removeHostCallFrameFlag() on the callFrame pointer even if the pointer is null.  Another example of this approach was when you recommended that we instantiated a Vector&lt;StackFrame&gt; of size 2 in JSXMLHttplRequestCustom.cpp&apos;s JSXMLHttpRequest::send(), just so we don&apos;t have to check if the caller frame pointer is null.  The result is less verbose code in all the call sites that uses it.

Similarly here, I intended for us to always be able to provide a StackIterator even if the callFrame provided is null.  The intent is that the call sites can uniformly just get a StackIterator, and use it as if the CallFrame pointer is not null, and the StackIterator will behave correctly.  Again, this is for the purpose of reducing the verbosity at all the call sites.  All the checks below for a null frame* and null vm* results from this design goal.  To go with this idiom, StackOperator::operator++() is a no-op once we&apos;ve reached end().  This is also why, in my previous patch, the StackIterator will point to a stub end &quot;frame&quot; when it reaches end(), but that is now removed.

The alternative to this approach is to change most of the call sites to explicitly check if CallFrame* is null (if not already guaranteed) before creating an iterator.   From surveying the call sites, it looks like the guarantee of a non-null exec is there in most cases.  Hence, this is not such a big deal right now, assuming you let me keep the part of calls to operator++() being a no-op once the iterator reaches end().  Otherwise, the client code will become slightly more cluttered with null checks. 

Do you still prefer to go with putting the burden of explicit null checks on the client sites?

&gt;&gt; Source/JavaScriptCore/interpreter/CallFrame.cpp:109
&gt;&gt;      if (!this)
&gt; 
&gt; Ditto.

See above.

&gt;&gt; Source/JavaScriptCore/interpreter/CallFrame.cpp:116
&gt;&gt; +    if (!this)
&gt; 
&gt; Ditto.

See above.

&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:413
&gt;&gt; +    ++iter;
&gt; 
&gt; Don&apos;t we need to check for end() here?

No because the iterator ensures that we can never iterate pass end().  After it reaches end(), operator++() is a nop.  That said, I do have to check for end() for the line below though.

&gt;&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:48
&gt;&gt; +    if (m_vm)
&gt; 
&gt; When can vm be NULL?

See above.

&gt;&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:57
&gt;&gt; +    if (m_vm)
&gt; 
&gt; Ditto.

See above.

&gt;&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:66
&gt;&gt; +    if (m_vm) {
&gt; 
&gt; Ditto.

See above.

&gt;&gt; Source/JavaScriptCore/interpreter/StackIterator.cpp:76
&gt;&gt; +    if (!frame)
&gt; 
&gt; When can frame be NULL?

See above.

&gt;&gt; Source/JavaScriptCore/runtime/InitializeThreading.cpp:71
&gt;&gt; +    StackIterator::initializeStatics();
&gt; 
&gt; This is no longer needed.

This is stale from my companion workspace that I used to generate this minimal delta patch.  I forgot to remove it here.  This was already removed in the actual patch.

&gt;&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:208
&gt;&gt;      ++iter;
&gt; 
&gt; Don&apos;t we need to check for end() here?

No.  See above.

&gt;&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:716
&gt;&gt;      ++iter;
&gt; 
&gt; Ditto.

See above.

&gt;&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:734
&gt;&gt;      ++iter;
&gt; 
&gt; Ditto.

See above.

&gt;&gt; Source/JavaScriptCore/runtime/ObjectConstructor.cpp:144
&gt;&gt;      ++iter;
&gt; 
&gt; Ditto.

See above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900900</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-16 14:23:53 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 204743 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=204743&amp;action=review
&gt; 
&gt; exec-&gt;find(exec) is a strange design pattern. We&apos;re not looking for exec -- we already have it. exec-&gt;begin() would be better.

It is not correct that exec-&gt;begin() is adequate.  This is because exec is not always the same as vm.topCallFrame.  This faulty assumption was what resulted in the previous batch of layout test failures.

As stated in my ChangeLog, …

          There are 3 types of users of the StackIterator. We need to cater
          to each of these as follows:

          1. Users who want a stack trace
             - Here we need to start iterating from vm.topCallFrame.
             - To do this, create the StackIterator as follows:
                  StackIterator iter = exec-&gt;begin();

          2. Users who want their caller frame
             - Here we need to start iterating from the specified CallFrame*.
             - To do this, create the StackIterator as follows:
                  StackIterator iter = exec-&gt;find(callFrame);

          3. Users who want the frame of a specific JSFunction object
             - Here we need to start iterating from vm.topCallFrame and find
               the frame that has a callee matching the specified JSFunction*.
             - To do this, create the StackIterator as follows:
                  StackIterator iter = exec-&gt;find(functionObj);

we need to distinguish between exec-&gt;begin() (which starts iterating from vm.topCallFrame) and exec-&gt;find(exec) (which starts iterating from exec).  Currently, exec-&gt;find(callFrame) is similar in form as exec-&gt;find(functionObj).

I can change all the find&apos;s to be overloaded begin&apos;s if you think that that is better.  Previously, I had them named beginAt(), but you said find() is the proper idiom, though I may have misunderstood where you were going with that comment.  Please advise as to how you want me to proceed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900913</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-16 15:36:22 -0700</bug_when>
    <thetext>&gt; The alternative to this approach is to change most of the call sites to explicitly check if CallFrame* is null (if not already guaranteed) before creating an iterator.

Which call sites? When is this not already guaranteed?

&gt; Hence, this is not such a big deal right now, assuming you let me keep the part of calls to operator++() being a no-op once the iterator reaches end().  Otherwise, the client code will become slightly more cluttered with null checks. 

Ah, I guess you&apos;re conflating &quot;null check&quot; and &quot;end() check&quot; based on your knowledge of the implementation detail that end() is implemented as null?

Let me re-state how idiomatic C++ iterators work:

- They start at begin()
- They end one prior to end()
- It is an error to dereference end()
- It is an error to ++ end()
- The operation to look for an item is named find(), and it returns end() if the item could not be found.

This iterator should be idiomatic.

&gt; It is not correct that exec-&gt;begin() is adequate.  This is because exec is not always the same as vm.topCallFrame

Clients that want to iterate from exec should call exec-&gt;begin(). Clients that want to iterate from vm.topCallFrame should call vm.topCallFrame-&gt;begin(). Clients that want to iterate from the first instance of x relative to exec should call exec-&gt;find(x).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900916</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-16 16:54:54 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; &gt; The alternative to this approach is to change most of the call sites to explicitly check if CallFrame* is null (if not already guaranteed) before creating an iterator.
&gt; 
&gt; Which call sites? When is this not already guaranteed?

It&apos;s not true that most of the sires are not guaranteed.  I wrote that before I did the survey of call sites, which led me to my conclusion that it may not be a big deal to do the end() checks in the call sites.  There were 1 or 2 call sites that I wasn&apos;t sure about.  But I&apos;ll double check.

&gt; &gt; Hence, this is not such a big deal right now, assuming you let me keep the part of calls to operator++() being a no-op once the iterator reaches end().  Otherwise, the client code will become slightly more cluttered with null checks. 
&gt; 
&gt; Ah, I guess you&apos;re conflating &quot;null check&quot; and &quot;end() check&quot; based on your knowledge of the implementation detail that end() is implemented as null?

I did conflate my terminology of the null check with the end() check, but I was not confused about the 2 necessarily being the same at the logical level.  I just think of the problem in a different way (sort of like CallFrame* as a smart handle where null is a legal value, and not a raw pointer) and solved it accordingly.  But since that is not idiomatic C++ as you&apos;ve pointed out, it&apos;s moot.  So, moving on.

&gt; Let me re-state how idiomatic C++ iterators work:
&gt; 
&gt; - They start at begin()
&gt; - They end one prior to end()
&gt; - It is an error to dereference end()
&gt; - It is an error to ++ end()
&gt; - The operation to look for an item is named find(), and it returns end() if the item could not be found.
&gt; 
&gt; This iterator should be idiomatic.

OK.  I will make it so.

&gt; &gt; It is not correct that exec-&gt;begin() is adequate.  This is because exec is not always the same as vm.topCallFrame
&gt; 
&gt; Clients that want to iterate from exec should call exec-&gt;begin(). Clients that want to iterate from vm.topCallFrame should call vm.topCallFrame-&gt;begin(). Clients that want to iterate from the first instance of x relative to exec should call exec-&gt;find(x).

Sounds good.  I will apply this pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901072</commentid>
    <comment_count>22</comment_count>
      <attachid>204830</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-17 09:49:41 -0700</bug_when>
    <thetext>Created attachment 204830
C++ idiomatic patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901073</commentid>
    <comment_count>23</comment_count>
      <attachid>204831</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-17 09:51:10 -0700</bug_when>
    <thetext>Created attachment 204831
C++ idiomatic patch as a delta from rolled out patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901076</commentid>
    <comment_count>24</comment_count>
      <attachid>204831</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-17 09:58:51 -0700</bug_when>
    <thetext>Comment on attachment 204831
C++ idiomatic patch as a delta from rolled out patch

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

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:413
&gt; +    ++iter;

Geoff, previously, you had asked if we need to do an end() check here before iterating.  The answer is no.  Since we&apos;re working on the premise that the callFrame must be valid in order to instantiate the iterator, and we have just instantiated the iterator, we are guaranteed that at least the first ++iter is legal and valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901125</commentid>
    <comment_count>25</comment_count>
      <attachid>204831</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-17 11:31:14 -0700</bug_when>
    <thetext>Comment on attachment 204831
C++ idiomatic patch as a delta from rolled out patch

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

r=me, but please fix the missing end() check before landing.

&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:208
&gt; +    StackIterator iter = exec-&gt;find(functionObj, skipOverBoundFunctions);
&gt;      ++iter;

I think we need an end() check here: functionObj may not be on the stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901135</commentid>
    <comment_count>26</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-17 11:55:33 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 204831 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=204831&amp;action=review
&gt; 
&gt; r=me, but please fix the missing end() check before landing.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSFunction.cpp:208
&gt; &gt; +    StackIterator iter = exec-&gt;find(functionObj, skipOverBoundFunctions);
&gt; &gt;      ++iter;
&gt; 
&gt; I think we need an end() check here: functionObj may not be on the stack.

Thanks for catching that.  It&apos;s fixed.

Landed in r151651: &lt;http://trac.webkit.org/changeset/151651&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204136</attachid>
            <date>2013-06-09 23:38:01 -0700</date>
            <delta_ts>2013-06-10 18:15:31 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-117390.patch</filename>
            <type>text/plain</type>
            <size>72272</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxMzYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBA
QAorMjAxMy0wNi0wOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW50cm9kdWNpbmcgdGhlIFN0YWNrSXRlcmF0b3IgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTczOTAuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIFN0YWNrSXRlcmF0b3IgY2xhc3MgaXMg
bWVhbnQgdG8gdW5pZnkgdGhlIHdheSB3ZSBpdGVyYXRlIHRoZSBKUworICAgICAgICBzdGFjay4g
SXQgYWxzbyBtYWtlcyBpdCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY29weSB0aGUgZnJhbWUg
ZGF0YQorICAgICAgICBpbnRvIHRoZSBpbnRlcm1lZGlhdGUgU3RhY2tGcmFtZSBzdHJ1Y3QgYmVm
b3JlIHByb2Nlc3NpbmcgaXQuCisgICAgICAgIFVuZm9ydHVuYXRlbHkgd2Ugc3RpbGwgY2FuJ3Qg
Z2V0IHJpZCBvZiBTdGFja0ZyYW1lIGJlY2F1c2UgaXQgaXMgdXNlZAorICAgICAgICB0byByZWNv
cmQgZnJhbWUgaW5mb3JtYXRpb24gZm9yIHRoZSBFeGNlcHRpb24gc3RhY2sgdGhhdCBpcyBleHBl
Y3RlZAorICAgICAgICB0byBwZXJzaXN0IGJleW9uZCB3aGVuIHRoZSBmcmFtZXMgaGF2ZSBiZWVu
IHBvcHBlZCBvZmYgdGhlIEpTIHN0YWNrLgorCisgICAgICAgIFRoZSBTdGFja0l0ZXJhdG9yIHdp
bGwgaXRlcmF0ZSBvdmVyIGFsbCAibG9naWNhbCIgZnJhbWVzIChpLmUuIGluY2x1ZGluZworICAg
ICAgICBpbmxpbmVkIGZyYW1lcykuIEFzIGl0IGl0ZXJhdGVzIHRoZSBKUyBzdGFjaywgaWYgaXQg
ZW5jb3VudGVycyBhIERGRworICAgICAgICBmcmFtZSB0aGF0IGhhcyBpbmxpbmVkIGZyYW1lcywg
dGhlIGl0ZXJhdG9yIHdpbGwgY2Fub25pY2FsaXplIHRoZQorICAgICAgICBpbmxpbmVkIGZyYW1l
cyBiZWZvcmUgcmV0dXJuaW5nLiBPbmNlIGNhbm9uaWNhbGl6ZWQsIHRoZSBmcmFtZSBjYW4gYmUK
KyAgICAgICAgcmVhZCBsaWtlIGFueSBvdGhlciBmcmFtZS4KKworICAgICAgICBUaGUgU3RhY2tJ
dGVyYXRvciBpbXBsZW1lbnRzIGEgRnJhbWUgY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIENhbGxG
cmFtZS4KKyAgICAgICAgVGhlIFN0YWNrSXRlcmF0b3I6OkZyYW1lIHNlcnZlcyBhcyByZWFkZXIg
b2YgdGhlIENhbGxGcmFtZSB0aGF0IG1ha2VzCisgICAgICAgIGl0IGVhc2llciB0byBhY2Nlc3Mg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyYW1lLiBUaGUgU3RhY2tJdGVyYXRvcjo6RnJhbWUKKyAg
ICAgICAgb25seSBhZGRzIGZ1bmN0aW9ucywgYW5kIG5vIGFkZGl0aW9uYWwgZGF0YSBmaWVsZHMu
CisKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dENy
ZWF0ZUJhY2t0cmFjZSk6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5w
cmk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKiBpbnRl
cnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRJbmxpbmVD
YWxsRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6Omdl
dFN0YWNrVHJhY2UpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dGhyb3dFeGNlcHRpb24p
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZGVidWcpOgorICAgICAgICAqIGludGVycHJl
dGVyL0ludGVycHJldGVyLmg6CisgICAgICAgIChJbnRlcnByZXRlcik6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTdGFja0l0
ZXJhdG9yOjpTdGFja0l0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6YmVn
aW4pOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpiZWdpbkF0KToKKyAgICAgICAgKEpT
Qzo6U3RhY2tJdGVyYXRvcjo6Z290b05leHRGcmFtZSk6CisgICAgICAgIC0gQmFzZWQgb24gdGhl
IGRlbGV0ZWQgSW50ZXJwcmV0ZXI6OmZpbmRGdW5jdGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoKS4K
KyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6c2Vla0ZyYW1lRm9yRnVuY3Rpb24pOgorICAg
ICAgICAtIEJhc2VkIG9uIHRoZSBkZWxldGVkIEludGVycHJldGVyOjpyZXRyaWV2ZUNhbGxlckZy
b21WTUNvZGUoKS4KKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNvZGVUeXBl
KToKKyAgICAgICAgLSBCYXNlZCBvbiB0aGUgZGVsZXRlZCBnZXRTdGFja0ZyYW1lQ29kZVR5cGUo
KS4KKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSk6Cisg
ICAgICAgIC0gQmFzZWQgb24gU3RhY2tGcmFtZTo6ZnJpZW5kbHlGdW5jdGlvbk5hbWUoKS4KKyAg
ICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OnNvdXJjZVVSTCk6CisgICAgICAgIC0g
QmFzZWQgb24gU3RhY2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwoKS4KKyAgICAgICAgKEpTQzo6
U3RhY2tJdGVyYXRvcjo6RnJhbWU6OnRvU3RyaW5nKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFj
a0ZyYW1lOjp0b1N0cmluZygpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6
Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6bGlu
ZSk6CisgICAgICAgIC0gQmFzZWQgb24gU3RhY2tGcmFtZTo6bGluZSgpLgorICAgICAgICAoSlND
OjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Y29sdW1uKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFj
a0ZyYW1lOjpjb2x1bW4oKS4KKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmFy
Z3VtZW50cyk6CisgICAgICAgIC0gQmFzZWQgb24gdGhlIGRlbGV0ZWQgSW50ZXJwcmV0ZXI6OnJl
dHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZSgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9y
OjpGcmFtZTo6cmV0cmlldmVFeHByZXNzaW9uSW5mbyk6CisgICAgICAgIC0gQmFzZWQgb24gU3Rh
Y2tGcmFtZTo6ZXhwcmVzc2lvbkluZm8oKS4KKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6
RnJhbWU6OmxvZ2ljYWxGcmFtZSk6CisgICAgICAgIC0gQmFzZWQgb24gdGhlIG5vdyBkZWxldGVk
IENhbGxGcmFtZTo6dHJ1ZUNhbGxGcmFtZSgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9y
OjpGcmFtZTo6bG9naWNhbENhbGxlckZyYW1lKToKKyAgICAgICAgLSBCYXNlZCBvbiB0aGUgbm93
IGRlbGV0ZWQgQ2FsbEZyYW1lOjp0cnVlQ2FsbGVyRnJhbWUoKS4KKyAgICAgICAgKEpTQzo6aml0
VHlwZU5hbWUpOgorICAgICAgICAoSlNDOjpwcmludEluZGVudHMpOgorICAgICAgICAoSlNDOjpw
cmludGlmKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OnByaW50KToKKyAg
ICAgICAgLSBQcmludHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmcmFtZSBmb3IgZGVidWdnaW5nIHB1
cnBvc2VzLgorICAgICAgICAgIFRoZXJlIGFyZSAyIHZlcnNpb25zIHRoYXQgY2FuIGJlIHVzZSBh
cyBmb2xsb3dzOgorICAgICAgICAgIDEuIFdoZW4geW91IGhhdmUgYSB2YWxpZCBTdGFja0l0ZXJh
dG9yLCB5b3UgY2FuIHByaW50CisgICAgICAgICAgICAgdGhlIGN1cnJlbnQgZnJhbWUncyBjb250
ZW50IHVzaW5nIHRoZSBwcmludCBpbnN0YW5jZQorICAgICAgICAgICAgIG1ldGhvZDoKKyAgICAg
ICAgICAgICAgICAgaXRlci0+cHJpbnQoaW5kZW50TGV2ZWwpOworICAgICAgICAgIDIuIFdoZW4g
eW91IGhhdmUgYSBDYWxsRnJhbWUqLCB5b3UgY2FuIHByaW50IGl0cyBjb250ZW50CisgICAgICAg
ICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRvcjo6RnJhbWU6
OnByaW50KGNhbGxGcmFtZSwgaW5kZW50TGV2ZWwpOworCisgICAgICAgICAgQSBzYW1wbGUgb2Yg
dGhlIG91dHB1dCBsb29rcyBsaWtlIHRoaXM6CisKKyAgICAgICAgICAgICAgZnJhbWUgMHgxNTEw
YzcwYjAgeworICAgICAgICAgICAgICAgICBuYW1lICdzaG91bGRCZScKKyAgICAgICAgICAgICAg
ICAgc291cmNlVVJMICd0ZXN0YXBpLmpzJworICAgICAgICAgICAgICAgICBob3N0RmxhZyAwCisg
ICAgICAgICAgICAgICAgIGlzSW5saW5lZEZyYW1lIDAKKyAgICAgICAgICAgICAgICAgY2FsbGVl
IDB4MTUxNTRlZmIwCisgICAgICAgICAgICAgICAgIHJldHVyblBDIDB4MTBlZDA3ODZkCisgICAg
ICAgICAgICAgICAgIGNhbGxlckZyYW1lIDB4MTUxMGM3MDU4CisgICAgICAgICAgICAgICAgIGxv
Z2ljYWxDYWxsZXJGcmFtZSAweDE1MTBjNzA1OAorICAgICAgICAgICAgICAgICByYXdMb2NhdGlv
bkJpdHMgMjcgMHgxYgorICAgICAgICAgICAgICAgICBjb2RlQmxvY2sgMHg3ZmU3OWIwMzcyMDAK
KyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgMjcgMHgxYiAvIDIxMAorICAgICAg
ICAgICAgICAgICAgICBsaW5lIDQ2CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiAyMAorICAg
ICAgICAgICAgICAgICAgICBqaXRUeXBlIDMgPEJhc2VsaW5lSklUPiBpc09wdGltaXppbmdKSVQg
MAorICAgICAgICAgICAgICAgICAgICBoYXNDb2RlT3JpZ2lucyAwCisgICAgICAgICAgICAgIH0K
KworICAgICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaDogQWRkZWQuCisgICAgICAg
IChTdGFja0l0ZXJhdG9yKToKKyAgICAgICAgKEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tJ
dGVyYXRvcjo6RnJhbWU6OmlzSlNGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6
OkZyYW1lOjpjYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6
Y2FzdEZyb21DYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6
Y2FzdFRvQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6ZW5kKToKKyAg
ICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6U3Rh
Y2tJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6Om9w
ZXJhdG9yKyspOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvbkpTQ1N0YWNr
KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0KToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlTm9kZS5oOgorICAgICAgICAoUHJvZmlsZU5vZGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OnJldHJpZXZlQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6c2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OnJldHJpZXZl
Q2FsbGVyKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAg
KEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUHJv
dG9HZXR0ZXIpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpvYmplY3RD
b25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMu
aDoKKwogMjAxMy0wNi0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIGZvdXJ0aFRpZXI6IERGRyBHZXRCeUlkIHBhdGNoaW5nIHNob3VsZG4ndCBkaXN0aW5ndWlz
aCBiZXR3ZWVuIHNlbGYgbGlzdHMgYW5kIHByb3RvIGxpc3RzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTEzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw2ICsxNjMsNyBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
ICAgICBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKICAgICBpbnRlcnByZXRlci9KU1N0YWNr
LmNwcAorICAgIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCiAgICAgaW50ZXJwcmV0ZXIv
Vk1JbnNwZWN0b3IuY3BwCiAKICAgICBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAx
NTEzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29y
a2luZyBjb3B5KQpAQCAtNDM2LDYgKzQzNiw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrSW5saW5lcy5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlUHJlZml4LmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlz
aW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzEsNiArMTcxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcCBcCiAgICAgaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIFwKICAgICBp
bnRlcnByZXRlci9KU1N0YWNrLmNwcCBcCisgICAgaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5j
cHAgXAogICAgIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBcCiAgICAgaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgXAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTUxMzUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNiBCam9lcm4gR3JhZiAoYmpv
ZXJuLmdyYWZAZ21haWwuY29tKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zOCw2ICszOCw3IEBACiAjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiU2Ft
cGxpbmdUb29sLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRp
by5oPgpAQCAtMzI2LDE1ICszMjcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkpTQwogICAgIFN0cmluZ0J1aWxkZXIgdHJhY2U7CiAgICAgdHJhY2UuYXBwZW5kTGl0
ZXJhbCgiLS0+IFN0YWNrIHRyYWNlOlxuIik7CiAKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3Rh
Y2tUcmFjZTsKLSAgICBleGVjLT5pbnRlcnByZXRlcigpLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJh
Y2UpOworICAgIFN0YWNrSXRlcmF0b3IgaXRlcihleGVjLT52bSgpKTsKICAgICBpbnQgaSA9IDA7
Ci0KLSAgICBmb3IgKFZlY3RvcjxTdGFja0ZyYW1lPjo6aXRlcmF0b3IgaXRlciA9IHN0YWNrVHJh
Y2UuYmVnaW4oKTsgaXRlciA8IHN0YWNrVHJhY2UuZW5kKCk7IGl0ZXIrKykgewotICAgICAgICBT
dGFja0ZyYW1lIGxldmVsID0gKml0ZXI7Ci0gICAgICAgIHRyYWNlLmFwcGVuZChTdHJpbmc6OmZv
cm1hdCgiICAgICVpICAgJXNcbiIsIGksIGxldmVsLnRvU3RyaW5nKGV4ZWMpLnV0ZjgoKS5kYXRh
KCkpKTsKLSAgICAgICAgaSsrOwotICAgIH0KKyAgICBmb3IgKGl0ZXIuYmVnaW4oKTsgIWl0ZXIu
ZW5kKCk7IGl0ZXIrKywgaSsrKQorICAgICAgICB0cmFjZS5hcHBlbmQoU3RyaW5nOjpmb3JtYXQo
IiAgICAlaSAgICVzXG4iLCBpLCBpdGVyLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgdHJhY2UudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gMTUxMzUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMyArMzAsMTMgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVk
ZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFt
ZS5oPgotI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CiAjaW5jbHVkZSAiSlND
YWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRv
ci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTIwNSwzNiArMjA1LDMwIEBAIEpTU3RyaW5nUmVmIEpT
Q29udGV4dENyZWF0ZUJhY2t0cmFjZShKU0MKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0
eCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGV4ZWMtPmludGVy
cHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplKTsKKyAgICBT
dGFja0l0ZXJhdG9yIGl0ZXIoZXhlYy0+dm0oKSk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIEFT
U0VSVChtYXhTdGFja1NpemUpOworICAgIGZvciAoaXRlci5iZWdpbigpOyAhaXRlci5lbmQoKSAm
JiBtYXhTdGFja1NpemUtLTsgaXRlcisrLCBpKyspIHsKKyAgICAgICAgSlNPYmplY3QqIGNhbGxl
ZSA9IGl0ZXItPmNhbGxlZSgpOworICAgICAgICAvLyBJZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0
IHdlJ3ZlIG5vdCBhZGRlZCBhbnkgZnJhbWUgeWV0LCB3ZSBzaG91bGQKKyAgICAgICAgLy8gc3Rp
bGwgYWRkIHRoZSBmcmFtZSwgYmVjYXVzZSBzb21ldGhpbmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1
cyBhcmd1bWVudHMuCisgICAgICAgIGlmICghY2FsbGVlICYmIGkpCisgICAgICAgICAgICBicmVh
azsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhY2tUcmFjZS5zaXplKCk7IGkrKykg
ewotICAgICAgICBTdHJpbmcgdXJsU3RyaW5nOwotICAgICAgICBTdHJpbmcgZnVuY3Rpb25OYW1l
OwotICAgICAgICBTdGFja0ZyYW1lJiBmcmFtZSA9IHN0YWNrVHJhY2VbaV07Ci0gICAgICAgIEpT
VmFsdWUgZnVuY3Rpb24gPSBmcmFtZS5jYWxsZWUuZ2V0KCk7Ci0gICAgICAgIGlmIChmcmFtZS5j
YWxsZWUpCi0gICAgICAgICAgICBmdW5jdGlvbk5hbWUgPSBmcmFtZS5mcmllbmRseUZ1bmN0aW9u
TmFtZShleGVjKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYWxsZXIgaXMgdW5r
bm93biwgYnV0IGlmIGZyYW1lIGlzIGVtcHR5IHdlIHNob3VsZCBzdGlsbCBhZGQgdGhlIGZyYW1l
LCBiZWNhdXNlCi0gICAgICAgICAgICAvLyBzb21ldGhpbmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1
cyBhcmd1bWVudHMuCi0gICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyID0gZnJhbWUubGluZSgpOwog
ICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJ1xuJyk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcjJyk7CiAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTnVtYmVyKGkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBi
dWlsZGVyLmFwcGVuZChzdGFja1RyYWNlW2ldLmZyaWVuZGx5RnVuY3Rpb25OYW1lKGV4ZWMpKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoaXRlci0+ZnVuY3Rpb25OYW1lKCkpOwogICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIigpIGF0ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChz
dGFja1RyYWNlW2ldLmZyaWVuZGx5U291cmNlVVJMKCkpOwotICAgICAgICBpZiAoZnJhbWUuY29k
ZVR5cGUgIT0gU3RhY2tGcmFtZU5hdGl2ZUNvZGUpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
aXRlci0+c291cmNlVVJMKCkpOworICAgICAgICBpZiAoaXRlci0+aXNKU0ZyYW1lKCkpIHsKICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZE51bWJlcihsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGl0
ZXItPmxpbmUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFmdW5jdGlvbikKKworICAgICAg
ICBpZiAoIWNhbGxlZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDI2LDYgKzI0MjYsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvci5jcHAiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGludGVy
cHJldGVyXFN0YWNrSXRlcmF0b3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0b3IuY3BwIgogCQkJCT4K
IAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
cmV2aXNpb24gMTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIyLDYg
KzIyMiw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxDYWxsRnJh
bWUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEludGVy
cHJldGVyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxK
U1N0YWNrLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxT
dGFja0l0ZXJhdG9yLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnBy
ZXRlclxWTUluc3BlY3Rvci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCIgLz4NCkBAIC01NTUsNiArNTU2LDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2suaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxKU1N0YWNrSW5saW5lcy5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVyLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvci5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9y
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ29tcGFjdEpJVENv
ZGVNYXAuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNTEzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJ
KHdvcmtpbmcgY29weSkKQEAgLTI4NSw2ICsyODUsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caW50ZXJwcmV0ZXJcSlNTdGFjay5jcHAiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0
ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aW50ZXJw
cmV0ZXI8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0b3IuY3BwIj4NCiAgICAgICA8RmlsdGVyPmludGVy
cHJldGVyPC9GaWx0ZXI+DQogICAgIDwvQ2xDb21waWxlPg0KQEAgLTEyMTQsNiArMTIxNyw5IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxSZWdpc3Rlci5oIj4NCiAg
ICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrSXRlcmF0b3IuaCI+DQor
ICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5oIj4NCiAg
ICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTEzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtOTU1LDYgKzk1NSw5IEBACiAJCUZFMjQ1OTYyMTc2MDFENTgw
MDc0RkNFMCAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI0NTk2MTE3NjAxRDU4MDA3NEZDRTAgLyogQ2FsbEZyYW1l
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFNEEzMzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRDE1QkQyRTA3MDA2
RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovOyB9OwogCQlGRTRBMzMyMDE1QkQyRTA3MDA2RjU0
RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNjdEQjkzMTc1
MTlCNEEwMDZBODE0RiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2N0RCOTAxNzUxOUI0QTAwNkE4MTRGIC8qIEpTU3Rh
Y2tJbmxpbmVzLmggKi87IH07CisJCUZFNjdEQjk0MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0
ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFNjdEQjkxMTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJhdG9yLmNwcCAqLzsgfTsKKwkJ
RkU2N0RCOTUxNzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjdEQjkyMTc1MTlCNEEwMDZBODE0
RiAvKiBTdGFja0l0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkU5NDAzMjIxNzQ0NDI1OTAwNDdDRjZFIC8qIEpJVFN0dWJzWDg2Q29t
bW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk0
MDMyMTE3NDQ0MjU5MDA0N0NGNkUgLyogSklUU3R1YnNYODZDb21tb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUNFNzQ1NzE3NDU0NTY1MDBG
RjkzMDAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVDRTc0NTYxNzQ1NDU2NTAwRkY5MzAwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLzsgfTsKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4
MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk5Miw2ICsx
OTk1LDkgQEAKIAkJRkUyNDU5NjExNzYwMUQ1ODAwNzRGQ0UwIC8qIENhbGxGcmFtZUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEZyYW1lSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyog
Vk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1J
bnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRTE1QkQy
RTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2N0RC
OTAxNzUxOUI0QTAwNkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU3RhY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZFNjdEQjkxMTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrSXRlcmF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTY3REI5MjE3NTE5QjRBMDA2QTgxNEYgLyogU3Rh
Y2tJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja0l0ZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTQwMzIxMTc0NDQyNTkwMDQ3
Q0Y2RSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKSVRTdHVic1g4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RUNFNzQ1NjE3NDU0NTY1MDBGRjkzMDAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUQyODdCMTE1RUM5QTU3MDBE
QTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TExJbnRPcGNvZGUuaDsgcGF0aCA9IGxsaW50L0xMSW50T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMjgyLDcgKzIyODgsMTAgQEAKIAkJCQkxNDI5RDc3QjBFRDIwRDcz
MDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2
MTkgLyogSlNTdGFjay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8qIEpT
U3RhY2suaCAqLywKKwkJCQlGRTY3REI5MDE3NTE5QjRBMDA2QTgxNEYgLyogSlNTdGFja0lubGlu
ZXMuaCAqLywKIAkJCQkxNDlCMjRGRjBEOEFGNkQxMDA5Q0I4QzcgLyogUmVnaXN0ZXIuaCAqLywK
KwkJCQlGRTY3REI5MTE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5jcHAgKi8sCisJ
CQkJRkU2N0RCOTIxNzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCAqLywKIAkJCQlG
RTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovLAogCQkJCUZFNEEz
MzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovLAogCQkJKTsKQEAgLTMyNjQs
NiArMzI3Myw3IEBACiAJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVu
dGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBB
cnJheVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U3MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBBcnJheVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2N0RCOTUxNzUxOUI0
QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVG
MTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTI0NTk2MjE3NjAxRDU4MDA3NEZDRTAgLyogQ2FsbEZyYW1lSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVGNjgzNjAxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggaW4g
SGVhZGVycyAqLywKQEAgLTM2OTksNiArMzcwOSw3IEBACiAJCQkJMEZEODJFNTQxNDFEQUVFRTAw
MTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERGMDREQTE2
QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFNjdEQjkzMTc1MTlCNEEwMDZBODE0RiAvKiBKU1N0YWNr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8q
IFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZG
NUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApA
QCAtNDIzMCw2ICs0MjQxLDcgQEAKIAkJCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkRCNjQ2NDBGOTVDNkZD
MDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNTZBMUQ1MTUwMDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZFNjdEQjk0MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0
ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAv
KiBFeGl0S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRCMkNDRjE3NDJEN0Q4MDA3QjND
MUIgLyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJl
dmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw5OCArNjcsNiBAQCB2b2lkIENhbGxGcmFt
ZTo6c2V0Q3VycmVudFZQQyhJbnN0cnVjdGlvCiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoREZH
X0pJVCkKLUNhbGxGcmFtZSogQ2FsbEZyYW1lOjp0cnVlQ2FsbEZyYW1lKCkKLXsKLSAgICAvLyBB
bSBJIGFuIGlubGluZSBjYWxsIGZyYW1lPyBJZiBzbywgd2UncmUgZG9uZS4KLSAgICBpZiAoaXNJ
bmxpbmVkRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgCi0gICAgLy8gSWYgSSBk
b24ndCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBJJ20gbm90IERGRyBjb2RlLCBzbyBJJ20gdGhl
IHRydWUgY2FsbCBmcmFtZS4KLSAgICBDb2RlQmxvY2sqIG1hY2hpbmVDb2RlQmxvY2sgPSBjb2Rl
QmxvY2soKTsKLSAgICBpZiAoIW1hY2hpbmVDb2RlQmxvY2spCi0gICAgICAgIHJldHVybiB0aGlz
OwotICAgIAotICAgIC8vIElmIHRoZSBjb2RlIGJsb2NrIGRvZXMgbm90IGhhdmUgYW55IGNvZGUg
b3JpZ2lucywgdGhlbiB0aGVyZSB3YXMgbm8gaW5saW5pbmcsIHNvCi0gICAgLy8gSSdtIGRvbmUu
Ci0gICAgaWYgKCFtYWNoaW5lQ29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKQotICAgICAgICBy
ZXR1cm4gdGhpczsKLSAgICAKLSAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBDb2RlT3JpZ2lu
LiBJZiB3ZSBkb24ndCBoYXZlIGEgcGMgc2V0IHRoZW4gdGhlIG9ubHkgd2F5Ci0gICAgLy8gdGhh
dCB0aGlzIG1ha2VzIHNlbnNlIGlzIGlmIHRoZSBDb2RlT3JpZ2luIGluZGV4IHdhcyBzZXQgaW4g
dGhlIGNhbGwgZnJhbWUuCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwotICAgIHVuc2lnbmVk
IGluZGV4ID0gbG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOwotICAgIEFTU0VSVChtYWNoaW5l
Q29kZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSk7Ci0gICAgaWYgKCFtYWNoaW5lQ29k
ZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSkgewotICAgICAgICAvLyBTZWUgYWJvdmUu
IEluIHJlbGVhc2UgYnVpbGRzLCB3ZSB0cnkgdG8gcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjcmFz
aGluZyBldmVuCi0gICAgICAgIC8vIHRob3VnaCBzdGFjayB3YWxraW5nIHdpbGwgYmUgZ29vZmVk
IHVwLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgY29kZU9yaWdpbiA9IG1hY2hpbmVD
b2RlQmxvY2stPmNvZGVPcmlnaW4oaW5kZXgpOwotCi0gICAgaWYgKCFjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIHRoaXM7IC8vIE5vdCBjdXJyZW50bHkgaW4gaW5s
aW5lZCBjb2RlLgotCi0gICAgQ29kZU9yaWdpbiBpbm5lck1vc3RDb2RlT3JpZ2luID0gY29kZU9y
aWdpbjsKLQotICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOykgewotICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIG5leHRJbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ci5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIAotICAgICAgICBDYWxsRnJhbWUqIGlubGluZWRD
YWxsZXIgPSB0aGlzICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgCi0g
ICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZUFzRnVuY3Rpb24gPSBpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZS5nZXQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbGwgaW4gdGhlIGlubGluZWRDYWxs
ZXIKLSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0Q29kZUJsb2NrKGlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2soKSk7Ci0gICAgICAgIGlmIChjYWxsZWVBc0Z1bmN0aW9uKQotICAg
ICAgICAgICAgaW5saW5lZENhbGxlci0+c2V0U2NvcGUoY2FsbGVlQXNGdW5jdGlvbi0+c2NvcGUo
KSk7Ci0gICAgICAgIGlmIChuZXh0SW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgaW5saW5l
ZENhbGxlci0+c2V0Q2FsbGVyRnJhbWUodGhpcyArIG5leHRJbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5saW5lZENhbGxlci0+c2V0Q2Fs
bGVyRnJhbWUodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRJbmxp
bmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpKTsKLSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0
KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlubGluZWRDYWxsZXItPnNldElz
SW5saW5lZEZyYW1lKCk7Ci0gICAgICAgIGlmIChjYWxsZWVBc0Z1bmN0aW9uKQotICAgICAgICAg
ICAgaW5saW5lZENhbGxlci0+c2V0Q2FsbGVlKGNhbGxlZUFzRnVuY3Rpb24pOwotICAgICAgICAK
LSAgICAgICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwotICAgICAgICBp
bmxpbmVDYWxsRnJhbWUgPSBuZXh0SW5saW5lQ2FsbEZyYW1lOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gdGhpcyArIGlubmVyTW9zdENvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldDsKLX0KLSAgICAgICAgCi1DYWxsRnJhbWUqIENhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1l
KCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gdGhpcy0+Y2FsbGVyRnJhbWUoKS0+
cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLSAgICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAg
ICByZXR1cm4gY2FsbGVyRnJhbWU7Ci0KLSAgICAvLyB0aGlzIC0+IFRoZSBjYWxsZWU7IHRoaXMg
aXMgZWl0aGVyIGFuIGlubGluZWQgY2FsbGVlIGluIHdoaWNoIGNhc2UgaXQgYWxyZWFkeSBoYXMK
LSAgICAvLyAgICBhIHBvaW50ZXIgdG8gdGhlIHRydWUgY2FsbGVyLiBPdGhlcndpc2UgaXQgY29u
dGFpbnMgY3VycmVudCBQQyBpbiB0aGUgbWFjaGluZQotICAgIC8vICAgIGNhbGxlci4KLSAgICAv
LwotICAgIC8vIG1hY2hpbmVDYWxsZXIgLT4gVGhlIGNhbGxlciBhY2NvcmRpbmcgdG8gdGhlIG1h
Y2hpbmUsIHdoaWNoIG1heSBiZSB6ZXJvIG9yCi0gICAgLy8gICAgbW9yZSBmcmFtZXMgYWJvdmUg
dGhlIHRydWUgY2FsbGVyIGR1ZSB0byBpbmxpbmluZy4KLQotICAgIC8vIEFtIEkgYW4gaW5saW5l
IGNhbGwgZnJhbWU/IElmIHNvLCB3ZSdyZSBkb25lLgotICAgIGlmIChpc0lubGluZWRGcmFtZSgp
KQotICAgICAgICByZXR1cm4gY2FsbGVyRnJhbWU7Ci0gICAgCi0gICAgLy8gSSBhbSBhIG1hY2hp
bmUgY2FsbCBmcmFtZSwgc28gdGhlIHF1ZXN0aW9uIGlzOiBpcyBteSBjYWxsZXIgYSBtYWNoaW5l
IGNhbGwgZnJhbWUKLSAgICAvLyB0aGF0IGhhcyBpbmxpbmVzIG9yIGEgbWFjaGluZSBjYWxsIGZy
YW1lIHRoYXQgZG9lc24ndD8KLSAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGlmICghY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4g
Y2FsbGVyRnJhbWU7Ci0gICAgQVNTRVJUKCFjYWxsZXJGcmFtZS0+aXNJbmxpbmVkRnJhbWUoKSk7
Ci0gICAgCi0gICAgcmV0dXJuIGNhbGxlckZyYW1lLT50cnVlQ2FsbEZyYW1lKCktPnJlbW92ZUhv
c3RDYWxsRnJhbWVGbGFnKCk7Ci19Ci0KIHVuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZz
ZXRGcm9tQ29kZU9yaWdpbkluZGV4KCkKIHsKICAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0NvZGVP
cmlnaW5JbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDE4ICsyNzIs
NiBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
ICAgICB2b2lkIHNldElubGluZUNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0pTU3RhY2s6OlJldHVyblBDXSA9
IGlubGluZUNhbGxGcmFtZTsgfQotCi0gICAgICAgIC8vIENhbGwgdGhpcyB0byBnZXQgdGhlIHNl
bWFudGljYWxseSBjb3JyZWN0IEpTIENhbGxGcmFtZSogZm9yIHRoZQotICAgICAgICAvLyBjdXJy
ZW50bHkgZXhlY3V0aW5nIGZ1bmN0aW9uLgotICAgICAgICBDYWxsRnJhbWUqIHRydWVDYWxsRnJh
bWUoKTsKLQotICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZ2V0IHRoZSBzZW1hbnRpY2FsbHkgY29y
cmVjdCBKUyBDYWxsRnJhbWUqIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgLy8gdG8gdGhlIGNhbGxl
ci4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5saW5pbmcgYW5kIHRoZQotICAg
ICAgICAvLyBIb3N0Q2FsbEZyYW1lRmxhZyBzdHVmZi4KLSAgICAgICAgQ2FsbEZyYW1lKiB0cnVl
Q2FsbGVyRnJhbWUoKTsKLSNlbHNlCi0gICAgICAgIENhbGxGcmFtZSogdHJ1ZUNhbGxGcmFtZShB
YnN0cmFjdFBDKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgICAgIENhbGxGcmFtZSogdHJ1ZUNhbGxl
ckZyYW1lKCkgeyByZXR1cm4gY2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWco
KTsgfQogI2VuZGlmCiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWVOb0ZsYWdzKCkgeyBy
ZXR1cm4gY2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNs
dWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUg
IlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJT
dHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNs
dWRlIDxsaW1pdHMuaD4KQEAgLTIwMCw4ICsyMDEsNiBAQCBJbnRlcnByZXRlcjo6U3RhY2tQb2xp
Y3k6OlN0YWNrUG9saWN5KEluCiB9CiAKIAotc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVySW5m
byhWTSosIENhbGxGcmFtZSosIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYg
Y2FsbGVyT3V0KTsKLQogLy8gUmV0dXJucyB0aGUgZGVwdGggb2YgdGhlIHNjb3BlIGNoYWluIHdp
dGhpbiBhIGdpdmVuIGNhbGwgZnJhbWUuCiBzdGF0aWMgaW50IGRlcHRoKENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1Njb3BlKiBzYykKIHsKQEAgLTQyMSwxMiArNDIwLDkgQEAgdm9pZCBJbnRlcnBy
ZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIGlmIChwYy5oYXNKSVRSZXR1cm5BZGRy
ZXNzKCkpCiAgICAgICAgIGRhdGFMb2dGKCJbUmV0dXJuSklUUENdICAgICAgICAgICAgICB8ICUx
MHAgfCAlcCBcbiIsIGl0LCBwYy5qaXRSZXR1cm5BZGRyZXNzKCkudmFsdWUoKSk7CiAjZW5kaWYK
LSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7Ci0gICAgaW50IGxpbmUgPSAwOwotICAg
IENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gMDsKLSAgICBnZXRDYWxsZXJJbmZvKCZjYWxs
RnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9jayk7
Ci0gICAgbGluZSA9IGNhbGxlckNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBkYXRhTG9nRigiW1JldHVyblZQQ10gICAgICAgICAgICAg
ICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBpdCwgYnl0ZWNvZGVPZmZzZXQsIGxpbmUpOwor
ICAgIFN0YWNrSXRlcmF0b3IgaXRlcihjYWxsRnJhbWUtPnZtKCkpOworICAgIGl0ZXIuYmVnaW5B
dChjYWxsRnJhbWUpOworICAgIGRhdGFMb2dGKCJbUmV0dXJuVlBDXSAgICAgICAgICAgICAgICB8
ICUxMHAgfCAlZCAobGluZSAlZClcbiIsIGl0LCBpdGVyLT5ieXRlY29kZU9mZnNldCgpLCBpdGVy
LT5saW5lKCkpOwogICAgICsraXQ7CiAgICAgZGF0YUxvZ0YoIltDb2RlQmxvY2tdICAgICAgICAg
ICAgICAgIHwgJTEwcCB8ICVwIFxuIiwgaXQsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwogICAg
ICsraXQ7CkBAIC00NzYsOCArNDcyLDEwIEBAIGJvb2wgSW50ZXJwcmV0ZXI6OmlzT3Bjb2RlKE9w
Y29kZSBvcGNvZGUKICNlbmRpZgogfQogCi1ORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6
dW53aW5kQ2FsbEZyYW1lKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb25W
YWx1ZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJiBjb2RlQmxvY2spCitO
RVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKFN0YWNrSXRlcmF0
b3ImIGl0ZXIsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUpCiB7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBpdGVyLT5jYWxsRnJhbWUoKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGl0
ZXItPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb2xkQ29kZUJsb2NrID0gY29kZUJsb2Nr
OwogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogCkBAIC01MDcsMTAg
KzUwNSw3IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWwKIAogICAg
IENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAg
Y2FsbEZyYW1lLT52bSgpLnRvcENhbGxGcmFtZSA9IGNhbGxlckZyYW1lOwotICAgIGlmIChjYWxs
ZXJGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGNhbGxGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1l
LCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gIWNhbGxlckZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpOwogfQogCiBzdGF0aWMgdm9p
ZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFcnJvckluc3RhbmNl
KiBleGNlcHRpb24sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNTY1LDY2ICs1NjAsNiBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtCiAgICAgZXhjZXB0aW9u
LT5wdXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcodm0s
IG1lc3NhZ2UpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGdldEJ5dGVjb2RlT2Zmc2V0Rm9yQ2Fs
bEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFt
ZS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKCFjb2RlQmxvY2spCi0gICAgICAgIHJl
dHVybiAwOwotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIHJl
dHVybiBjb2RlQmxvY2stPmNvZGVPcmlnaW4oY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29kZU9yaWdp
bkluZGV4KCkpLmJ5dGVjb2RlSW5kZXg7Ci0jZW5kaWYKLSAgICByZXR1cm4gY2FsbEZyYW1lLT5s
b2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgQ2FsbEZyYW1l
KiBnZXRDYWxsZXJJbmZvKFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkJiBi
eXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYgY2FsbGVyKQotewotICAgIFVOVVNFRF9QQVJBTSh2
bSk7Ci0gICAgYnl0ZWNvZGVPZmZzZXQgPSAwOwotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNI
b3N0Q2FsbEZyYW1lRmxhZygpKTsKLSAgICBDYWxsRnJhbWUqIHRydWVDYWxsZXJGcmFtZSA9IGNh
bGxGcmFtZS0+dHJ1ZUNhbGxlckZyYW1lKCk7Ci0gICAgQVNTRVJUKCF0cnVlQ2FsbGVyRnJhbWUt
Pmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpOwotCi0gICAgaWYgKHRydWVDYWxsZXJGcmFtZSA9PSBD
YWxsRnJhbWU6Om5vQ2FsbGVyKCkgfHwgIXRydWVDYWxsZXJGcmFtZSB8fCAhdHJ1ZUNhbGxlckZy
YW1lLT5jb2RlQmxvY2soKSkgewotICAgICAgICBjYWxsZXIgPSAwOwotICAgICAgICByZXR1cm4g
dHJ1ZUNhbGxlckZyYW1lOwotICAgIH0KLSAgICAKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IHRydWVDYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKHRydWVDYWxsZXJG
cmFtZS0+aGFzTG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpKQotICAgICAgICBieXRlY29kZU9m
ZnNldCA9IHRydWVDYWxsZXJGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGcm9tQ29kZU9yaWdpbkluZGV4
KCk7Ci0gICAgZWxzZQotICAgICAgICBieXRlY29kZU9mZnNldCA9IHRydWVDYWxsZXJGcmFtZS0+
bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7Ci0KLSAgICBjYWxsZXIgPSBjYWxsZXJDb2RlQmxv
Y2s7Ci0gICAgcmV0dXJuIHRydWVDYWxsZXJGcmFtZTsKLX0KLQotc3RhdGljIEFMV0FZU19JTkxJ
TkUgY29uc3QgU3RyaW5nIGdldFNvdXJjZVVSTEZyb21DYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCi17Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkp
OwotICAgIHJldHVybiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+
c291cmNlVVJMKCk7Ci19Ci0KLXN0YXRpYyBTdGFja0ZyYW1lQ29kZVR5cGUgZ2V0U3RhY2tGcmFt
ZUNvZGVUeXBlKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIEFTU0VSVCghY2FsbEZyYW1l
LT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKLQotICAgIHN3aXRjaCAoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+Y29kZVR5cGUoKSkgewotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIHJldHVy
biBTdGFja0ZyYW1lRXZhbENvZGU7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIHJl
dHVybiBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOwotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICAg
ICAgcmV0dXJuIFN0YWNrRnJhbWVHbG9iYWxDb2RlOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdGFja0ZyYW1lR2xvYmFsQ29kZTsKLX0KLQog
dW5zaWduZWQgU3RhY2tGcmFtZTo6bGluZSgpCiB7CiAgICAgcmV0dXJuIGNvZGVCbG9jayA/IGNv
ZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSArIGxp
bmVPZmZzZXQgOiAwOwpAQCAtNjcwLDM0ICs2MDUsMjQgQEAgU3RyaW5nIFN0YWNrRnJhbWU6OnRv
U3RyaW5nKENhbGxGcmFtZSogYwogdm9pZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShWZWN0
b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMsIHNpemVfdCBtYXhTdGFja1NpemUpCiB7CiAgICAgVk0m
IHZtID0gbV92bTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLnRvcENhbGxGcmFtZS0+
cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLSAgICBpZiAoIWNhbGxGcmFtZSB8fCBjYWxsRnJh
bWUgPT0gQ2FsbEZyYW1lOjpub0NhbGxlcigpKSAKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gZ2V0Qnl0ZWNvZGVPZmZzZXRGb3JDYWxsRnJhbWUoY2FsbEZy
YW1lKTsKLSAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPnRydWVDYWxsRnJhbWUoKTsKLSAgICBp
ZiAoIWNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIENvZGVCbG9jayogY2FsbGVyQ29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAgIHdoaWxlIChjYWxsRnJhbWUg
JiYgY2FsbEZyYW1lICE9IENhbGxGcmFtZTo6bm9DYWxsZXIoKSAmJiBtYXhTdGFja1NpemUtLSkg
ewotICAgICAgICBTdHJpbmcgc291cmNlVVJMOwotICAgICAgICBpZiAoY2FsbGVyQ29kZUJsb2Nr
KSB7Ci0gICAgICAgICAgICBzb3VyY2VVUkwgPSBnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKGNh
bGxGcmFtZSk7Ci0gICAgICAgICAgICBTdGFja0ZyYW1lIHMoU3Ryb25nPEpTT2JqZWN0Pih2bSwg
Y2FsbEZyYW1lLT5jYWxsZWUoKSksCi0gICAgICAgICAgICAgICAgZ2V0U3RhY2tGcmFtZUNvZGVU
eXBlKGNhbGxGcmFtZSksCi0gICAgICAgICAgICAgICAgU3Ryb25nPEV4ZWN1dGFibGVCYXNlPih2
bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSksCi0gICAgICAgICAgICAgICAg
U3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPih2bSwgY2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpKSwKLSAgICAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2stPnNvdXJjZSgpLAot
ICAgICAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmxpbmVO
bygpLAotICAgICAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jay0+c291cmNlT2Zmc2V0KCksCi0g
ICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQsCi0gICAgICAgICAgICAgICAgc291cmNlVVJM
KTsKKyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIodm0pOworICAgIGZvciAoaXRlci5iZWdpbigpOyAh
aXRlci5lbmQoKSAmJiBtYXhTdGFja1NpemUtLTsgaXRlcisrKSB7CisgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gaXRlci0+Y29kZUJsb2NrKCk7CisgICAgICAgIGlmIChjb2RlQmxvY2sp
IHsKKyAgICAgICAgICAgIFN0YWNrRnJhbWUgcyhTdHJvbmc8SlNPYmplY3Q+KHZtLCBpdGVyLT5j
YWxsZWUoKSksCisgICAgICAgICAgICAgICAgU3RhY2tGcmFtZUNvZGVUeXBlKGl0ZXItPmNvZGVU
eXBlKCkpLAorICAgICAgICAgICAgICAgIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4odm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLAorICAgICAgICAgICAgICAgIFN0cm9uZzxVbmxpbmtl
ZENvZGVCbG9jaz4odm0sIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSksCisgICAgICAg
ICAgICAgICAgY29kZUJsb2NrLT5zb3VyY2UoKSwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8oKSwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2st
PnNvdXJjZU9mZnNldCgpLAorICAgICAgICAgICAgICAgIGl0ZXItPmJ5dGVjb2RlT2Zmc2V0KCks
CisgICAgICAgICAgICAgICAgaXRlci0+c291cmNlVVJMKCkpOwogICAgICAgICAgICAgcmVzdWx0
cy5hcHBlbmQocyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTdGFja0ZyYW1lIHMo
U3Ryb25nPEpTT2JqZWN0Pih2bSwgY2FsbEZyYW1lLT5jYWxsZWUoKSksIFN0YWNrRnJhbWVOYXRp
dmVDb2RlLCBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KCksIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9j
az4oKSwgMCwgMCwgMCwgMCwgU3RyaW5nKCkpOworICAgICAgICAgICAgU3RhY2tGcmFtZSBzKFN0
cm9uZzxKU09iamVjdD4odm0sIGl0ZXItPmNhbGxlZSgpKSwgU3RhY2tGcmFtZU5hdGl2ZUNvZGUs
IFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4oKSwgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPigpLCAw
LCAwLCAwLCAwLCBTdHJpbmcoKSk7CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzKTsKICAg
ICAgICAgfQotICAgICAgICBjYWxsRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZ2bSwgY2FsbEZyYW1l
LCBieXRlY29kZU9mZnNldCwgY2FsbGVyQ29kZUJsb2NrKTsKICAgICB9CiB9CiAKQEAgLTc3Mywx
MiArNjk4LDIxIEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKIAog
ICAgIC8vIENhbGN1bGF0ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2UEMsIHVud2luZGluZyBjYWxs
IGZyYW1lcyBhcyBuZWNlc3NhcnkuCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSAwOwotICAg
IHdoaWxlIChpc1Rlcm1pbmF0aW9uIHx8ICEoaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkpIHsKLSAgICAgICAgaWYgKCF1bndpbmRD
YWxsRnJhbWUoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgYnl0ZWNvZGVPZmZzZXQsIGNvZGVC
bG9jaykpIHsKLSAgICAgICAgICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBjYWxs
RnJhbWUtPnZtKCkuZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICAgICAgcHJvZmlsZXIt
PmV4Y2VwdGlvblVud2luZChjYWxsRnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIH0KKyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgU3RhY2tJdGVyYXRvciBp
dGVyKHZtKTsKKyAgICBmb3IgKGl0ZXIuYmVnaW4oKTsgIWl0ZXIuZW5kKCk7IGl0ZXIrKykgewor
ICAgICAgICBjYWxsRnJhbWUgPSBpdGVyLT5jYWxsRnJhbWUoKTsKKyAgICAgICAgY29kZUJsb2Nr
ID0gaXRlci0+Y29kZUJsb2NrKCk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gaXRlci0+Ynl0
ZWNvZGVPZmZzZXQoKTsKKworICAgICAgICBpZiAoaXNUZXJtaW5hdGlvbiB8fCAhKGhhbmRsZXIg
PSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7
CisgICAgICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShpdGVyLCBleGNlcHRpb25WYWx1ZSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5h
YmxlZFByb2ZpbGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNlcHRpb25V
bndpbmQoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAo
TGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT52bSgpLmVuYWJsZWRQcm9maWxl
cigpKQpAQCAtMTM3Niw1NyArMTMxMCw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVy
OjpkZWJ1ZyhDYWwKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRSZWFjaEJyZWFrcG9pbnQoY2Fs
bEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNl
SUQoKSwgbGFzdExpbmUsIGNvbHVtbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotfQot
ICAgIAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikgY29uc3QKLXsKLSAgICBD
YWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZyYW1lID0gZmluZEZ1bmN0aW9uQ2FsbEZyYW1lRnJvbVZN
Q29kZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLSAgICBpZiAoIWZ1bmN0aW9uQ2FsbEZyYW1lKQot
ICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFy
Z3VtZW50czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbkNhbGxGcmFt
ZSk7Ci0gICAgYXJndW1lbnRzLT50ZWFyT2ZmKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKLSAgICByZXR1
cm4gSlNWYWx1ZShhcmd1bWVudHMpOwotfQotCi1KU1ZhbHVlIEludGVycHJldGVyOjpyZXRyaWV2
ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uKSBjb25zdAotewotICAgIENhbGxGcmFtZSogZnVuY3Rpb25DYWxsRnJhbWUgPSBmaW5kRnVu
Y3Rpb25DYWxsRnJhbWVGcm9tVk1Db2RlKGNhbGxGcmFtZSwgZnVuY3Rpb24pOwotCi0gICAgaWYg
KCFmdW5jdGlvbkNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIAotICAg
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwotICAgIENvZGVCbG9jayogdW51c2VkQ2FsbGVyQ29k
ZUJsb2NrID0gMDsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygm
Y2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbkNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIHVudXNl
ZENhbGxlckNvZGVCbG9jayk7Ci0gICAgaWYgKCFjYWxsZXJGcmFtZSkKLSAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgIEpTVmFsdWUgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwot
ICAgIGlmICghY2FsbGVyKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICAvLyBTa2lw
IG92ZXIgZnVuY3Rpb24gYmluZGluZ3MuCi0gICAgQVNTRVJUKGNhbGxlci5pc09iamVjdCgpKTsK
LSAgICB3aGlsZSAoYXNPYmplY3QoY2FsbGVyKS0+aW5oZXJpdHMoJkpTQm91bmRGdW5jdGlvbjo6
c19pbmZvKSkgewotICAgICAgICBjYWxsZXJGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxGcmFt
ZS0+dm0oKSwgY2FsbGVyRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWRDYWxsZXJDb2RlQmxv
Y2spOwotICAgICAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwotICAgICAgICBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7Ci0gICAgICAgIGlm
ICghY2FsbGVyKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIH0KLQotICAgIHJl
dHVybiBjYWxsZXI7Ci19Ci0KLUNhbGxGcmFtZSogSW50ZXJwcmV0ZXI6OmZpbmRGdW5jdGlvbkNh
bGxGcmFtZUZyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uKQotewotICAgIGZvciAoQ2FsbEZyYW1lKiBjYW5kaWRhdGUgPSBjYWxsRnJhbWUtPnRydWVD
YWxsRnJhbWUoKTsgY2FuZGlkYXRlOyBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPnRydWVDYWxsZXJG
cmFtZSgpKSB7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUtPmNhbGxlZSgpID09IGZ1bmN0aW9uKQot
ICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Cit9
ICAgIAogCiB2b2lkIEludGVycHJldGVyOjplbmFibGVTYW1wbGVyKCkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lv
biAxNTEzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBSZWdpc3RlcjsKICAgICBjbGFzcyBKU1Njb3BlOwogICAgIGNsYXNzIFNhbXBsaW5n
VG9vbDsKKyAgICBjbGFzcyBTdGFja0l0ZXJhdG9yOwogICAgIHN0cnVjdCBDYWxsRnJhbWVDbG9z
dXJlOwogICAgIHN0cnVjdCBIYW5kbGVySW5mbzsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBA
IC0yMzUsMTcgKzIzNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNPYmplY3QqIGV4
ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1lKiwgSlNPYmplY3QqIGZ1bmN0aW9uLCBDb25zdHJ1Y3RU
eXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYpOwogICAgICAgICBKU1Zh
bHVlIGV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNTY29wZSopOwogCi0gICAgICAgIEpTVmFsdWUgcmV0cmlldmVBcmd1bWVudHNGcm9tVk1D
b2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSByZXRy
aWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopIGNvbnN0OwotICAg
ICAgICAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rp
b24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGlu
dCYgYXJnYyk7CiAgICAgICAgIAogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIoKSB7IHJl
dHVybiBtX3NhbXBsZXIuZ2V0KCk7IH0KIAogICAgICAgICBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIHRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomLCBKU1ZhbHVlJiwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBE
ZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY29sdW1uKTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyBnZXRUcmFjZUxpbmUoQ2FsbEZyYW1lKiwgU3RhY2tG
cmFtZUNvZGVUeXBlLCBjb25zdCBTdHJpbmcmLCBpbnQpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXpl
X3QgbWF4U3RhY2tTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIGFkZFN0YWNrVHJhY2VJZk5lY2Vzc2FyeShDYWxsRnJhbWUqLCBK
U1ZhbHVlIGVycm9yKTsKIAogICAgICAgICB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSog
ZXhlYyk7CkBAIC0yNzEsOSArMjY3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW5kUmVwZWF0Q2FsbChDYWxsRnJhbWVDbG9zdXJlJik7CiAgICAgICAgIEpTVmFsdWUgZXhlY3V0
ZShDYWxsRnJhbWVDbG9zdXJlJik7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgdW53aW5k
Q2FsbEZyYW1lKENhbGxGcmFtZSomLCBKU1ZhbHVlLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQs
IENvZGVCbG9jayomKTsKLQotICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBmaW5kRnVuY3Rpb25D
YWxsRnJhbWVGcm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKTsKKyAgICAgICAgdm9p
ZCBnZXRTdGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IG1heFN0
YWNrU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOworICAgICAgICBO
RVZFUl9JTkxJTkUgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tJdGVyYXRvciYsIEpTVmFsdWUp
OwogCiAgICAgICAgIHZvaWQgZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqKTsKICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRl
cmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDI0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJBcmd1bWVu
dHMuaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgor
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitTdGFja0l0ZXJh
dG9yOjpTdGFja0l0ZXJhdG9yKFZNJiB2bSkKKyAgICA6IG1fdm0odm0pCisgICAgLCBtX2ZyYW1l
KG51bGxwdHIpCisgICAgLCBtX2ZpbHRlcihudWxscHRyKQoreworfQorCit2b2lkIFN0YWNrSXRl
cmF0b3I6OmJlZ2luKFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAgICBi
ZWdpbkF0KG1fdm0udG9wQ2FsbEZyYW1lLCBmaWx0ZXIpOworfQorCit2b2lkIFN0YWNrSXRlcmF0
b3I6OmJlZ2luQXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZp
bHRlciBmaWx0ZXIpCit7CisgICAgaWYgKCFzdGFydEZyYW1lKSB7CisgICAgICAgIG1fZnJhbWUg
PSBudWxscHRyOworICAgICAgICBtX2ZpbHRlciA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlQoJnN0YXJ0RnJhbWUtPnZtKCkgPT0gJm1fdm0pOworICAgIG1f
ZnJhbWUgPSBGcmFtZTo6Y2FzdEZyb21DYWxsRnJhbWUoc3RhcnRGcmFtZSk7CisgICAgbV9maWx0
ZXIgPSBmaWx0ZXI7CisKKyAgICBtX2ZyYW1lID0gbV9mcmFtZS0+bG9naWNhbEZyYW1lKCk7Cit9
CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6YmVnaW5BdChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlv
bk9iaiwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQoreworICAgIEFTU0VSVChj
YWxsZWVGdW5jdGlvbk9iaik7CisgICAgYmVnaW5BdChtX3ZtLnRvcENhbGxGcmFtZSwgZmlsdGVy
KTsKKyAgICBzZWVrRnJhbWVGb3JGdW5jdGlvbihjYWxsZWVGdW5jdGlvbk9iaik7Cit9CisKK3Zv
aWQgU3RhY2tJdGVyYXRvcjo6Z290b05leHRGcmFtZSgpCit7CisgICAgRnJhbWUqIGZyYW1lID0g
bV9mcmFtZTsKKyAgICB3aGlsZSAoZnJhbWUpIHsKKyAgICAgICAgZnJhbWUgPSBmcmFtZS0+bG9n
aWNhbENhbGxlckZyYW1lKCk7CisgICAgICAgIGlmICghZnJhbWUgfHwgIW1fZmlsdGVyIHx8ICFt
X2ZpbHRlcihmcmFtZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgbV9mcmFtZSA9
IGZyYW1lOworfQorCit2b2lkIFN0YWNrSXRlcmF0b3I6OnNlZWtGcmFtZUZvckZ1bmN0aW9uKEpT
RnVuY3Rpb24qIGZ1bmN0aW9uT2JqKQoreworICAgIEpTT2JqZWN0KiB0YXJnZXRDYWxsZWUgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZnVuY3Rpb25PYmopOworICAgIHdoaWxlICghZW5kKCkp
IHsKKyAgICAgICAgaWYgKG1fZnJhbWUtPmNhbGxlZSgpID09IHRhcmdldENhbGxlZSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBnb3RvTmV4dEZyYW1lKCk7CisgICAgfQorfQorCitTdGFj
a0l0ZXJhdG9yOjpGcmFtZTo6Q29kZVR5cGUgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNvZGVUeXBl
KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzSlNGcmFtZSgpKQorICAgICAgICByZXR1cm4gQ29kZVR5
cGU6Ok5hdGl2ZTsKKworICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmNvZGVUeXBlKCkpIHsKKyAg
ICBjYXNlIEV2YWxDb2RlOgorICAgICAgICByZXR1cm4gQ29kZVR5cGU6OkV2YWw7CisgICAgY2Fz
ZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIHJldHVybiBDb2RlVHlwZTo6RnVuY3Rpb247CisgICAg
Y2FzZSBHbG9iYWxDb2RlOgorICAgICAgICByZXR1cm4gQ29kZVR5cGU6Okdsb2JhbDsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVR5cGU6
Okdsb2JhbDsKK30KKworU3RyaW5nIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpmdW5jdGlvbk5hbWUo
KQoreworICAgIFN0cmluZyB0cmFjZUxpbmU7CisgICAgSlNPYmplY3QqIGNhbGxlZSA9IHRoaXMt
PmNhbGxlZSgpOworCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBDb2RlVHlw
ZTo6RXZhbDoKKyAgICAgICAgdHJhY2VMaW5lID0gImV2YWwgY29kZSI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29kZVR5cGU6Ok5hdGl2ZToKKyAgICAgICAgaWYgKGNhbGxlZSkKKyAgICAg
ICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYXN0VG9DYWxsRnJh
bWUodGhpcyksIGNhbGxlZSkuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvZGVU
eXBlOjpGdW5jdGlvbjoKKyAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlO
YW1lKGNhc3RUb0NhbGxGcmFtZSh0aGlzKSwgY2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29kZVR5cGU6Okdsb2JhbDoKKyAgICAgICAgdHJhY2VMaW5lID0gImdsb2Jh
bCBjb2RlIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cmFjZUxpbmUuaXNO
dWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJhY2VMaW5lOworfQorCitTdHJpbmcgU3RhY2tJdGVy
YXRvcjo6RnJhbWU6OnNvdXJjZVVSTCgpCit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKworICAg
IHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgQ29kZVR5cGU6OkV2YWw6CisgICAgY2Fz
ZSBDb2RlVHlwZTo6RnVuY3Rpb246CisgICAgY2FzZSBDb2RlVHlwZTo6R2xvYmFsOiB7CisgICAg
ICAgIFN0cmluZyBzb3VyY2VVUkwgPSBjb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNv
dXJjZVVSTCgpOworICAgICAgICBpZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICB0cmFjZUxpbmUgPSBzb3VyY2VVUkwuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBDb2RlVHlwZTo6TmF0aXZlOgorICAgICAgICB0cmFjZUxpbmUgPSAiW25hdGl2ZSBj
b2RlXSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVs
bCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKK30KKworU3RyaW5nIFN0YWNrSXRlcmF0
b3I6OkZyYW1lOjp0b1N0cmluZygpCit7CisgICAgU3RyaW5nQnVpbGRlciB0cmFjZUJ1aWxkOwor
ICAgIFN0cmluZyBmdW5jdGlvbk5hbWUgPSB0aGlzLT5mdW5jdGlvbk5hbWUoKTsKKyAgICBTdHJp
bmcgc291cmNlVVJMID0gdGhpcy0+c291cmNlVVJMKCk7CisgICAgdHJhY2VCdWlsZC5hcHBlbmQo
ZnVuY3Rpb25OYW1lKTsKKyAgICBpZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKCFmdW5jdGlvbk5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgdHJhY2VCdWlsZC5hcHBl
bmQoJ0AnKTsKKyAgICAgICAgdHJhY2VCdWlsZC5hcHBlbmQoc291cmNlVVJMKTsKKyAgICAgICAg
aWYgKGlzSlNGcmFtZSgpKSB7CisgICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZCgnOicpOwor
ICAgICAgICAgICAgdHJhY2VCdWlsZC5hcHBlbmROdW1iZXIobGluZSgpKTsKKyAgICAgICAgICAg
IHRyYWNlQnVpbGQuYXBwZW5kKCc6Jyk7CisgICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZE51
bWJlcihjb2x1bW4oKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRyYWNlQnVpbGQu
dG9TdHJpbmcoKS5pbXBsKCk7Cit9CisKK3Vuc2lnbmVkIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpi
eXRlY29kZU9mZnNldCgpCit7CisgICAgaWYgKCFpc0pTRnJhbWUoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKGhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSkKKyAgICAgICAgcmV0
dXJuIGJ5dGVjb2RlT2Zmc2V0RnJvbUNvZGVPcmlnaW5JbmRleCgpOworICAgIHJldHVybiBsb2Nh
dGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKK30KKwordW5zaWduZWQgU3RhY2tJdGVyYXRvcjo6RnJh
bWU6OmxpbmUoKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2Nr
KCk7CisgICAgaWYgKCFjb2RlQmxvY2spCisgICAgICAgIHJldHVybiAwOworICAgIFVubGlua2Vk
Q29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxv
Y2soKTsKKyAgICBBU1NFUlQodW5saW5rZWRDb2RlQmxvY2spOworICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBsaW5lT2Zm
c2V0ID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bGluZU5vKCk7CisgICAgcmV0dXJu
IHVubGlua2VkQ29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpICsgbGluZU9mZnNldDsKK30KKwordW5zaWduZWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6
OmNvbHVtbigpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2so
KTsKKyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU291cmNlUHJv
dmlkZXIqIHNvdXJjZVByb3ZpZGVyID0gY29kZUJsb2NrLT5zb3VyY2UoKTsKKyAgICBpZiAoIXNv
dXJjZVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpbnQgZGl2b3QgPSAwOworICAg
IGludCB1bnVzZWRTdGFydE9mZnNldCA9IDA7CisgICAgaW50IHVudXNlZEVuZE9mZnNldCA9IDA7
CisgICAgcmV0cmlldmVFeHByZXNzaW9uSW5mbyhkaXZvdCwgdW51c2VkU3RhcnRPZmZzZXQsIHVu
dXNlZEVuZE9mZnNldCk7CisgICAgcmV0dXJuIHNvdXJjZVByb3ZpZGVyLT5jaGFyUG9zaXRpb25U
b0NvbHVtbk51bWJlcihkaXZvdCk7Cit9CisKK0FyZ3VtZW50cyogU3RhY2tJdGVyYXRvcjo6RnJh
bWU6OmFyZ3VtZW50cygpCit7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYXN0VG9DYWxs
RnJhbWUodGhpcyk7CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0
ZSh2bSgpLCBjYWxsRnJhbWUpOworICAgIGFyZ3VtZW50cy0+dGVhck9mZihjYWxsRnJhbWUpOwor
ICAgIHJldHVybiBhcmd1bWVudHM7Cit9CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OnJl
dHJpZXZlRXhwcmVzc2lvbkluZm8oaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBl
bmRPZmZzZXQpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2so
KTsKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgdW5saW5r
ZWRDb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KCksIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBkaXZvdCArPSBjb2Rl
QmxvY2stPnNvdXJjZU9mZnNldCgpOworfQorCitTdGFja0l0ZXJhdG9yOjpGcmFtZSogU3RhY2tJ
dGVyYXRvcjo6RnJhbWU6OmxvZ2ljYWxGcmFtZSgpCit7CisjaWYgIUVOQUJMRShERkdfSklUKQor
ICAgIHJldHVybiB0aGlzOworCisjZWxzZSAvLyAhRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGlz
SW5saW5lZEZyYW1lKCkpCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgLy8gSWYgSSBkb24n
dCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBJJ20gbm90IERGRyBjb2RlLCBzbyBJJ20gdGhlIHRy
dWUgY2FsbCBmcmFtZS4KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9j
aygpOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIC8v
IElmIHRoZSBjb2RlIGJsb2NrIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgb3JpZ2lucywgdGhlbiB0
aGVyZSB3YXMgbm8gaW5saW5pbmcsIHNvCisgICAgLy8gSSdtIGRvbmUuCisgICAgaWYgKCFjb2Rl
QmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIAorICAg
IENvZGVCbG9jayogb3V0ZXJNb3N0Q29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIHVuc2lnbmVk
IGluZGV4ID0gbG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOworICAgIEFTU0VSVChvdXRlck1v
c3RDb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKTsKKyAgICBpZiAoIW91dGVyTW9z
dENvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkpIHsKKyAgICAgICAgLy8gU2VlIGFi
b3ZlLiBJbiByZWxlYXNlIGJ1aWxkcywgd2UgdHJ5IHRvIHByb3RlY3Qgb3Vyc2VsdmVzIGZyb20g
Y3Jhc2hpbmcgZXZlbgorICAgICAgICAvLyB0aG91Z2ggc3RhY2sgd2Fsa2luZyB3aWxsIGJlIGdv
b2ZlZCB1cC4KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gb3V0ZXJNb3N0Q29kZUJsb2NrLT5jb2RlT3JpZ2luKGluZGV4KTsKKyAg
ICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gdGhpczsg
Ly8gTm90IGN1cnJlbnRseSBpbiBpbmxpbmVkIGNvZGUuCisKKyAgICAvLyBXZSd2ZSBnb3QgaW5s
aW5lZCBmcmFtZXMuIFNvLCByZWlmeSB0aGVtIHNvIHRoYXQgdGhlIGl0ZXJhdG9yIGNhbiB3YWxr
IHRocnUgdGhlbS4KKyAgICBDYWxsRnJhbWUqIGN1cnJGcmFtZSA9IGNhc3RUb0NhbGxGcmFtZSh0
aGlzKTsKKyAgICBDb2RlT3JpZ2luIGlubmVyTW9zdENvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwor
ICAgIENhbGxGcmFtZSogaW5uZXJNb3N0TG9naWNhbEZyYW1lID0gY3VyckZyYW1lICsgY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworCisgICAgQ2FsbEZyYW1lKiBsb2dp
Y2FsRnJhbWUgPSBpbm5lck1vc3RMb2dpY2FsRnJhbWU7CisgICAgd2hpbGUgKGxvZ2ljYWxGcmFt
ZSAhPSBjdXJyRnJhbWUpIHsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVkRnJhbWVJ
bmZvID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIAorICAgICAgICAvLyBG
aWxsIGluIHRoZSBsb2dpY2FsIChpLmUuIGlubGluZWQpIGZyYW1lCisgICAgICAgIGxvZ2ljYWxG
cmFtZS0+c2V0Q29kZUJsb2NrKGlubGluZWRGcmFtZUluZm8tPmJhc2VsaW5lQ29kZUJsb2NrKCkp
OworICAgICAgICBsb2dpY2FsRnJhbWUtPnNldElubGluZUNhbGxGcmFtZShpbmxpbmVkRnJhbWVJ
bmZvKTsKKyAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhpbmxpbmVkRnJhbWVJbmZvLT5hcmd1bWVudHMuc2l6ZSgpKTsKKyAgICAgICAgbG9naWNhbEZy
YW1lLT5zZXRMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KTsKKyAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRJc0lubGluZWRGcmFtZSgpOworCisgICAgICAg
IEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZWRGcmFtZUluZm8tPmNhbGxlZS5nZXQoKTsKKyAg
ICAgICAgaWYgKGNhbGxlZSkgeworICAgICAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRTY29wZShj
YWxsZWUtPnNjb3BlKCkpOworICAgICAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRDYWxsZWUoY2Fs
bGVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ29kZU9yaWdpbiogY2FsbGVyQ29k
ZU9yaWdpbiA9ICZpbmxpbmVkRnJhbWVJbmZvLT5jYWxsZXI7CisgICAgICAgIElubGluZUNhbGxG
cmFtZSogY2FsbGVySW5saW5lZEZyYW1lSW5mbyA9IGNhbGxlckNvZGVPcmlnaW4tPmlubGluZUNh
bGxGcmFtZTsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVyRnJhbWVPZmZzZXQgPSBjYWxsZXJJbmxp
bmVkRnJhbWVJbmZvID8gY2FsbGVySW5saW5lZEZyYW1lSW5mby0+c3RhY2tPZmZzZXQgOiAwOwor
ICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY3VyckZyYW1lICsgY2FsbGVyRnJhbWVP
ZmZzZXQ7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbGVyRnJhbWUp
OworCisgICAgICAgIGNvZGVPcmlnaW4gPSAqY2FsbGVyQ29kZU9yaWdpbjsKKyAgICAgICAgbG9n
aWNhbEZyYW1lID0gY2FsbGVyRnJhbWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVCghaW5uZXJN
b3N0TG9naWNhbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKKyAgICByZXR1cm4gY2Fz
dEZyb21DYWxsRnJhbWUoaW5uZXJNb3N0TG9naWNhbEZyYW1lKTsKKyNlbmRpZiAvLyAhRU5BQkxF
KERGR19KSVQpCit9CisKK1N0YWNrSXRlcmF0b3I6OkZyYW1lKiBTdGFja0l0ZXJhdG9yOjpGcmFt
ZTo6bG9naWNhbENhbGxlckZyYW1lKCkKK3sKKyAgICBGcmFtZSogY2FsbGVyRnJhbWUgPSBjYXN0
RnJvbUNhbGxGcmFtZSh0aGlzLT5jYWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxh
ZygpKTsKKyNpZiAhRU5BQkxFKERGR19KSVQpCisgICAgcmV0dXJuIGNhbGxlckZyYW1lOworCisj
ZWxzZSAvLyAhRU5BQkxFKERGR19KSVQpCisgICAgaWYgKCFpc0pTRnJhbWUoKSB8fCAhY2FsbGVy
RnJhbWUpCisgICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsKKworICAgIC8vIHRoaXMgLT4gVGhl
IGNhbGxlZTsgdGhpcyBpcyBlaXRoZXIgYW4gaW5saW5lZCBjYWxsZWUgaW4gd2hpY2ggY2FzZSBp
dCBhbHJlYWR5IGhhcworICAgIC8vICAgIGEgcG9pbnRlciB0byB0aGUgdHJ1ZSBjYWxsZXIuIE90
aGVyd2lzZSBpdCBjb250YWlucyBjdXJyZW50IFBDIGluIHRoZSBtYWNoaW5lCisgICAgLy8gICAg
Y2FsbGVyLgorICAgIC8vCisgICAgLy8gbWFjaGluZUNhbGxlciAtPiBUaGUgY2FsbGVyIGFjY29y
ZGluZyB0byB0aGUgbWFjaGluZSwgd2hpY2ggbWF5IGJlIHplcm8gb3IKKyAgICAvLyAgICBtb3Jl
IGZyYW1lcyBhYm92ZSB0aGUgdHJ1ZSBjYWxsZXIgZHVlIHRvIGlubGluaW5nLgorCisgICAgLy8g
SWYgSSBhbSBrbm93biB0byBiZSBhbiBpbmxpbmVkIGZyYW1lLCB0aGVuIEkndmUgYmVlbiByZWlm
aWVkIGFscmVhZHkgYW5kCisgICAgLy8gaGF2ZSBteSBjYWxsZXIuCisgICAgaWYgKGlzSW5saW5l
ZEZyYW1lKCkpCisgICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsKKyAgICAKKyAgICAvLyBJIGFt
IG5vdCBhbiBpbmxpbmVkIGZyYW1lLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIG15IGNhbGxlciBh
IENhbGxGcmFtZQorICAgIC8vIHRoYXQgaGFzIGlubGluZXMgb3IgYSBDYWxsRnJhbWUgdGhhdCBk
b2Vzbid0PworCisgICAgLy8gSWYgbXkgY2FsbGVyIGlzIG5vdCBhIEpTIGZyYW1lLCBpdCBjYW5u
b3QgaGF2ZSBpbmxpbmVzLCBhbmQgd2UncmUgZG9uZS4KKyAgICBpZiAoIWNhbGxlckZyYW1lLT5p
c0pTRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGNhbGxlckZyYW1lOworCisgICAgQVNTRVJUKCFj
YWxsZXJGcmFtZS0+aXNJbmxpbmVkRnJhbWUoKSk7CisgICAgcmV0dXJuIGNhbGxlckZyYW1lLT5s
b2dpY2FsRnJhbWUoKTsKKworI2VuZGlmIC8vICFFTkFCTEUoREZHX0pJVCkKK30KKworI2lmbmRl
ZiBOREVCVUcKKworc3RhdGljIGNvbnN0IGNoYXIqIGppdFR5cGVOYW1lKEpJVENvZGU6OkpJVFR5
cGUgaml0VHlwZSkKK3sKKyAgICBzd2l0Y2ggKGppdFR5cGUpIHsKKyAgICBjYXNlIEpJVENvZGU6
Ok5vbmU6IHJldHVybiAiTm9uZSI7CisgICAgY2FzZSBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rOiBy
ZXR1cm4gIkhvc3RDYWxsVGh1bmsiOworICAgIGNhc2UgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
azogcmV0dXJuICJJbnRlcnByZXRlclRodW5rIjsKKyAgICBjYXNlIEpJVENvZGU6OkJhc2VsaW5l
SklUOiByZXR1cm4gIkJhc2VsaW5lSklUIjsKKyAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDogcmV0
dXJuICJERkdKSVQiOworICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOiByZXR1cm4gIkZUTEpJVCI7
CisgICAgfQorICAgIHJldHVybiAiPHVua25vd24+IjsKK30KKworc3RhdGljIHZvaWQgcHJpbnRJ
bmRlbnRzKGludCBsZXZlbHMpCit7CisgICAgd2hpbGUgKGxldmVscy0tKQorICAgICAgICBkYXRh
TG9nRlN0cmluZygiICAgIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50aWYoaW50IGluZGVudExl
dmVscywgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdMaXN0Owor
ICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGZvcm1hdCk7CisKKyAgICBpZiAoaW5kZW50TGV2ZWxzKQor
ICAgICAgICBwcmludEluZGVudHMoaW5kZW50TGV2ZWxzKTsKKworI2lmIENPTVBJTEVSKENMQU5H
KSB8fCAoQ09NUElMRVIoR0NDKSAmJiBHQ0NfVkVSU0lPTl9BVF9MRUFTVCg0LCA2LCAwKSkKKyNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV2Zvcm1hdC1ub25saXRlcmFsIgorI2VuZGlmCisKKyAgICBXVEY6OmRhdGFMb2dGVihmb3Jt
YXQsIGFyZ0xpc3QpOworCisjaWYgQ09NUElMRVIoQ0xBTkcpIHx8IChDT01QSUxFUihHQ0MpICYm
IEdDQ19WRVJTSU9OX0FUX0xFQVNUKDQsIDYsIDApKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBw
b3AKKyNlbmRpZgorCisgICAgdmFfZW5kKGFyZ0xpc3QpOworfQorCit2b2lkIFN0YWNrSXRlcmF0
b3I6OkZyYW1lOjpwcmludChpbnQgaW5kZW50TGV2ZWwpCit7CisgICAgaW50IGkgPSBpbmRlbnRM
ZXZlbDsKKworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7Cisg
ICAgcHJpbnRpZihpLCAiZnJhbWUgJXAge1xuIiwgdGhpcyk7CisKKyAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gdGhpcy0+Y2FsbGVyRnJhbWUoKTsKKyAgICB2b2lkKiByZXR1cm5QQyA9IGhh
c1JldHVyblBDKCk/IHRoaXMtPnJldHVyblBDKCkudmFsdWUoKSA6IG51bGxwdHI7CisKKyAgICBw
cmludGlmKGksICIgICBuYW1lICclcydcbiIsIGZ1bmN0aW9uTmFtZSgpLnV0ZjgoKS5kYXRhKCkp
OworICAgIHByaW50aWYoaSwgIiAgIHNvdXJjZVVSTCAnJXMnXG4iLCBzb3VyY2VVUkwoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBwcmludGlmKGksICIgICBob3N0RmxhZyAlZFxuIiwgY2FsbGVyRnJh
bWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpOworICAgIHByaW50aWYoaSwgIiAgIGlzSW5saW5l
ZEZyYW1lICVkXG4iLCBpc0lubGluZWRGcmFtZSgpKTsKKworICAgIGlmIChpc0lubGluZWRGcmFt
ZSgpKQorICAgICAgICBwcmludGlmKGksICIgICBJbmxpbmVDYWxsRnJhbWUgJXBcbiIsIHRoaXMt
PmlubGluZUNhbGxGcmFtZSgpKTsKKworICAgIHByaW50aWYoaSwgIiAgIGNhbGxlZSAlcFxuIiwg
Y2FsbGVlKCkpOworICAgIHByaW50aWYoaSwgIiAgIHJldHVyblBDICVwXG4iLCByZXR1cm5QQyk7
CisgICAgcHJpbnRpZihpLCAiICAgY2FsbGVyRnJhbWUgJXBcbiIsIGNhbGxlckZyYW1lLT5yZW1v
dmVIb3N0Q2FsbEZyYW1lRmxhZygpKTsKKyAgICBwcmludGlmKGksICIgICBsb2dpY2FsQ2FsbGVy
RnJhbWUgJXBcbiIsIGxvZ2ljYWxDYWxsZXJGcmFtZSgpKTsKKyAgICBwcmludGlmKGksICIgICBy
YXdMb2NhdGlvbkJpdHMgJXUgMHgleFxuIiwgbG9jYXRpb25Bc1Jhd0JpdHMoKSwgbG9jYXRpb25B
c1Jhd0JpdHMoKSk7CisgICAgcHJpbnRpZihpLCAiICAgY29kZUJsb2NrICVwXG4iLCBjb2RlQmxv
Y2spOworICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSBqaXRU
eXBlID0gY29kZUJsb2NrLT5qaXRUeXBlKCk7CisgICAgICAgIGlmIChoYXNMb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBs
b2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKKyAgICAgICAgICAgIHByaW50aWYoaSwgIiAgICAg
IGJ5dGVjb2RlT2Zmc2V0ICV1ICVwIC8gJXp1XG4iLCBieXRlY29kZU9mZnNldCwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYnl0ZWNvZGVPZmZzZXQpLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LnNpemUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjb2RlT3Jp
Z2luSW5kZXggPSBsb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7CisgICAgICAgICAgICBwcmlu
dGlmKGksICIgICAgICBjb2RlT3JpZ2luSWRleCAldSAlcCAvICV6dVxuIiwgY29kZU9yaWdpbklu
ZGV4LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb2RlT3JpZ2luSW5kZXgpLCBjb2RlQmxvY2st
PmNvZGVPcmlnaW5zKCkuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGlmKGksICIg
ICAgICBsaW5lICVkXG4iLCBsaW5lKCkpOworICAgICAgICBwcmludGlmKGksICIgICAgICBjb2x1
bW4gJWRcbiIsIGNvbHVtbigpKTsKKyAgICAgICAgcHJpbnRpZihpLCAiICAgICAgaml0VHlwZSAl
ZCA8JXM+IGlzT3B0aW1pemluZ0pJVCAlZFxuIiwgaml0VHlwZSwgaml0VHlwZU5hbWUoaml0VHlw
ZSksIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKSk7CisgICAgICAgIHByaW50aWYo
aSwgIiAgICAgIGhhc0NvZGVPcmlnaW5zICVkXG4iLCBjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5z
KCkpOworICAgICAgICBpZiAoY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKSB7CisgICAgICAg
ICAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCkuZ2V0KCk7CisgICAg
ICAgICAgICBwcmludGlmKGksICIgICAgICAgICBqaXRDb2RlICVwIHN0YXJ0ICVwIGVuZCAlcFxu
Iiwgaml0Q29kZSwgaml0Q29kZS0+c3RhcnQoKSwgaml0Q29kZS0+ZW5kKCkpOworICAgICAgICB9
CisgICAgfQorICAgIHByaW50aWYoaSwgIn1cbiIpOworfQorCit2b2lkIFN0YWNrSXRlcmF0b3I6
OkZyYW1lOjpwcmludChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgaW50IGluZGVudExldmVsKQorewor
ICAgIGlmICghY2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgY2FzdEZyb21DYWxsRnJh
bWUoY2FsbEZyYW1lKS0+cHJpbnQoaW5kZW50TGV2ZWwpOworfQorI2VuZGlmIC8vIE5ERUJVRwor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBTdGFja0l0ZXJhdG9yX2gKKyNkZWZpbmUgU3RhY2tJdGVyYXRvcl9oCisK
KyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQXJndW1lbnRzOworY2xhc3MgSlNGdW5jdGlvbjsKKworY2xh
c3MgU3RhY2tJdGVyYXRvciB7CitwdWJsaWM6CisgICAgY2xhc3MgRnJhbWUgOiBwdWJsaWMgQ2Fs
bEZyYW1lIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gQ29kZVR5cGUgeworICAgICAgICAg
ICAgR2xvYmFsID0gU3RhY2tGcmFtZUdsb2JhbENvZGUsCisgICAgICAgICAgICBFdmFsID0gU3Rh
Y2tGcmFtZUV2YWxDb2RlLAorICAgICAgICAgICAgRnVuY3Rpb24gPSBTdGFja0ZyYW1lRnVuY3Rp
b25Db2RlLAorICAgICAgICAgICAgTmF0aXZlID0gU3RhY2tGcmFtZU5hdGl2ZUNvZGUKKyAgICAg
ICAgfTsKKworICAgICAgICBib29sIGlzSlNGcmFtZSgpIGNvbnN0IHsgcmV0dXJuICEhY29kZUJs
b2NrKCk7IH0KKworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgZnVuY3Rpb25OYW1l
KCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzb3VyY2VVUkwoKTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKCk7CisKKyAgICAgICAgQ29kZVR5
cGUgY29kZVR5cGUoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKTsK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgbGluZSgpOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB1bnNpZ25lZCBjb2x1bW4oKTsKKworICAgICAgICBBcmd1bWVudHMqIGFy
Z3VtZW50cygpOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSgpIHsgcmV0dXJuIGNhc3RU
b0NhbGxGcmFtZSh0aGlzKTsgfQorCisjaWZuZGVmIE5ERUJVRworICAgICAgICB2b2lkIHByaW50
KGludCBpbmRlbnRMZXZlbCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHByaW50KENhbGxGcmFtZSos
IGludCBpbmRlbnRMZXZlbCA9IDApOworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICB2
b2lkIHJldHJpZXZlRXhwcmVzc2lvbkluZm8oaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwg
aW50JiBlbmRPZmZzZXQpOworCisgICAgICAgIEZyYW1lKiBsb2dpY2FsRnJhbWUoKTsKKyAgICAg
ICAgRnJhbWUqIGxvZ2ljYWxDYWxsZXJGcmFtZSgpOworCisgICAgICAgIHN0YXRpYyBGcmFtZSog
Y2FzdEZyb21DYWxsRnJhbWUoQ2FsbEZyYW1lKiBmKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PEZyYW1lKj4oZik7IH0KKyAgICAgICAgc3RhdGljIENhbGxGcmFtZSogY2FzdFRvQ2FsbEZyYW1l
KEZyYW1lKiBmKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KGYpOyB9CisK
KyAgICAgICAgZnJpZW5kIGNsYXNzIFN0YWNrSXRlcmF0b3I7CisgICAgfTsKKworICAgIHR5cGVk
ZWYgYm9vbCAoKkZyYW1lRmlsdGVyKShGcmFtZSopOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
U3RhY2tJdGVyYXRvcihWTSYpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBiZWdpbihG
cmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYmVnaW5B
dChDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIEZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBiZWdpbkF0KEpTRnVuY3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2Jq
LCBGcmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgIGJvb2wgZW5kKCkgeyByZXR1cm4gIW1fZnJh
bWU7IH0KKworICAgIEZyYW1lJiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9mcmFtZTsgfQorICAg
IEFMV0FZU19JTkxJTkUgRnJhbWUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBtX2ZyYW1lOyB9CisK
KyAgICB2b2lkIG9wZXJhdG9yKysoKSB7IGdvdG9OZXh0RnJhbWUoKTsgfQorICAgIHZvaWQgb3Bl
cmF0b3IrKyhpbnQpIHsgZ290b05leHRGcmFtZSgpOyB9CisgICAgdm9pZCBzZWVrRnJhbWVGb3JG
dW5jdGlvbihKU0Z1bmN0aW9uKik7CisKK3ByaXZhdGU6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBnb3RvTmV4dEZyYW1lKCk7CisKKyAgICBWTSYgbV92bTsKKyAgICBGcmFtZSogbV9mcmFt
ZTsKKyAgICBGcmFtZUZpbHRlciBtX2ZpbHRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gU3RhY2tJdGVyYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1MTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZ1JlZi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgi
CiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJTdGFja0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVHJhY2luZy5oIgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTU4LDEwICs1OCwxMiBAQCBQcm9maWxlR2VuZXJhdG9yOjpQcm9maWxlR2VuZXJhdG9y
KEV4ZWNTCiAKIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsK
LSAgICBleGVjLT5pbnRlcnByZXRlcigpLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIDIpOwot
Ci0gICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywgTGVnYWN5UHJv
ZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIHN0YWNrVHJhY2VbMV0uY2FsbGVlLmdl
dCgpLCBzdGFja1RyYWNlWzFdLnNvdXJjZVVSTCwgc3RhY2tUcmFjZVsxXS5saW5lKCkpLCBtX2hl
YWQuZ2V0KCksIG1faGVhZC5nZXQoKSk7CisgICAgU3RhY2tJdGVyYXRvciBpdGVyKGV4ZWMtPnZt
KCkpOworICAgIGl0ZXIuYmVnaW4oKTsKKyAgICBpdGVyKys7CisgICAgQ2FsbElkZW50aWZpZXIg
aWRlbnRpZmllciA9IExlZ2FjeVByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBp
dGVyLT5jYWxsZWUoKSwgaXRlci0+c291cmNlVVJMKCksIGl0ZXItPmxpbmUoKSk7CisgICAgbV9j
dXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywgaWRlbnRpZmllciwgbV9oZWFk
LmdldCgpLCBtX2hlYWQuZ2V0KCkpOworICAgIAogICAgIG1faGVhZC0+aW5zZXJ0Tm9kZShtX2N1
cnJlbnROb2RlLmdldCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVOb2RlLmgJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBQ
cm9maWxlTm9kZTsKIAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQcm9maWxlTm9kZT4gPjo6
Y29uc3RfaXRlcmF0b3IgU3RhY2tJdGVyYXRvcjsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0
PFN0cmluZ0ltcGwqPiBGdW5jdGlvbkNhbGxIYXNoQ291bnQ7CiAKICAgICBjbGFzcyBQcm9maWxl
Tm9kZSA6IHB1YmxpYyBSZWZDb3VudGVkPFByb2ZpbGVOb2RlPiB7CkBAIC0xMzEsNiArMTMwLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxQcm9maWxlTm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgU3RhY2tJdGVy
YXRvcjsKKwogICAgICAgICBQcm9maWxlTm9kZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwg
Y29uc3QgQ2FsbElkZW50aWZpZXImLCBQcm9maWxlTm9kZSogaGVhZE5vZGUsIFByb2ZpbGVOb2Rl
KiBwYXJlbnROb2RlKTsKICAgICAgICAgUHJvZmlsZU5vZGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxs
RnJhbWUsIFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUqIG5vZGVUb0NvcHkpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAko
cmV2aXNpb24gMTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgpAQCAtMzIsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZ1bmN0
aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSlNB
cnJheS5oIgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIiAKICNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnBy
ZXRlci5oIgpAQCAtNDAsNiArNDIsNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUg
IlN0YWNrSXRlcmF0b3IuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFj
ZSBVbmljb2RlOwpAQCAtMTc4LDE4ICsxODEsNDIgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0
Q2FsbERhdGEoSlNDZWxsKgogICAgIHJldHVybiBDYWxsVHlwZUpTOwogfQogCitzdGF0aWMgSlNW
YWx1ZSByZXRyaWV2ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uT2JqKQoreworICAgIFN0YWNrSXRlcmF0b3IgaXRlcihleGVjLT52bSgpKTsKKyAgICBpdGVy
LmJlZ2luQXQoZnVuY3Rpb25PYmopOworICAgIHJldHVybiAhaXRlci5lbmQoKSA/IEpTVmFsdWUo
aXRlci0+YXJndW1lbnRzKCkpIDoganNOdWxsKCk7CisKK30KKwogSlNWYWx1ZSBKU0Z1bmN0aW9u
Ojphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oc2xvdEJhc2UpOwogICAgIEFTU0VSVCghdGhpc09iai0+aXNIb3N0RnVuY3Rpb24oKSk7Ci0g
ICAgcmV0dXJuIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29k
ZShleGVjLCB0aGlzT2JqKTsKKworICAgIHJldHVybiByZXRyaWV2ZUFyZ3VtZW50cyhleGVjLCB0
aGlzT2JqKTsKK30KKworc3RhdGljIGJvb2wgc2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyhTdGFja0l0
ZXJhdG9yOjpGcmFtZSogZnJhbWUpCit7CisgICAgSlNPYmplY3QqIGNhbGxlZSA9IGZyYW1lLT5j
YWxsZWUoKTsKKyAgICBib29sIHNob3VsZFNraXAgPSBjYWxsZWUgPyBjYWxsZWUtPmluaGVyaXRz
KCZKU0JvdW5kRnVuY3Rpb246OnNfaW5mbykgOiBmYWxzZTsKKyAgICByZXR1cm4gc2hvdWxkU2tp
cDsKK30KKworc3RhdGljIEpTVmFsdWUgcmV0cmlldmVDYWxsZXIoRXhlY1N0YXRlKiBleGVjLCBK
U0Z1bmN0aW9uKiBmdW5jdGlvbk9iaikKK3sKKyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIoZXhlYy0+
dm0oKSk7CisgICAgaXRlci5iZWdpbkF0KGZ1bmN0aW9uT2JqLCBza2lwT3ZlckJvdW5kRnVuY3Rp
b25zKTsKKyAgICBpdGVyKys7CisgICAgcmV0dXJuICghaXRlci5lbmQoKSAmJiBpdGVyLT5jYWxs
ZWUoKSkgPyBpdGVyLT5jYWxsZWUoKSA6IGpzTnVsbCgpOwogfQogCiBKU1ZhbHVlIEpTRnVuY3Rp
b246OmNhbGxlckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqID0ganNDYXN0PEpTRnVuY3Rpb24q
PihzbG90QmFzZSk7CiAgICAgQVNTRVJUKCF0aGlzT2JqLT5pc0hvc3RGdW5jdGlvbigpKTsKLSAg
ICBKU1ZhbHVlIGNhbGxlciA9IGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyRnJv
bVZNQ29kZShleGVjLCB0aGlzT2JqKTsKKyAgICBKU1ZhbHVlIGNhbGxlciA9IHJldHJpZXZlQ2Fs
bGVyKGV4ZWMsIHRoaXNPYmopOwogCiAgICAgLy8gU2VlIEVTNS4xIDE1LjMuNS40IC0gRnVuY3Rp
b24uY2FsbGVyIG1heSBub3QgYmUgdXNlZCB0byByZXRyaWV2ZSBhIHN0cmljdCBjYWxsZXIuCiAg
ICAgaWYgKCFjYWxsZXIuaXNPYmplY3QoKSB8fCAhYXNPYmplY3QoY2FsbGVyKS0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OnNfaW5mbykpCkBAIC0yOTcsNyArMzI0LDcgQEAgYm9vbCBKU0Z1bmN0aW9u
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
ZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKGV4ZWMsIHRo
aXNPYmplY3QpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihyZXRyaWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqZWN0
KSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgCkBAIC0zMjEsNyArMzQ4LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0bwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAgICAgfQotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoZXhlYy0+
aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmplY3Qp
LCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcihyZXRyaWV2ZUNhbGxlcihleGVjLCB0aGlzT2JqZWN0KSwgUmVhZE9ubHkg
fCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCkBAIC00MTUsMTQgKzQ0MiwxNCBAQCBib29sIEpTRnVuY3Rpb246OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqCiAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3Io
ZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBl
RXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29y
KTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICB9
Ci0gICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShl
eGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQXJn
dW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7CisgICAgICAgIHZhbHVlQ2hlY2sg
PSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVl
KCksIHJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXNPYmplY3QpKTsKICAgICB9IGVsc2UgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7CiAgICAgICAg
IGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAg
ICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCiAgICAgICAgICAgICAgICAgdGhpc09iamVj
dC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUg
fCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVP
d25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOwogICAgICAgICB9Ci0gICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52
YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVy
cHJldGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7Cisg
ICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVj
LCBkZXNjcmlwdG9yLnZhbHVlKCksIHJldHJpZXZlQ2FsbGVyKGV4ZWMsIHRoaXNPYmplY3QpKTsK
ICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKQogICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFs
dWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBqc051bWJlcih0aGlzT2JqZWN0LT5qc0V4ZWN1
dGFibGUoKS0+cGFyYW1ldGVyQ291bnQoKSkpOwogICAgIGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJl
dmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2lu
Y2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlBhcnNl
ci5oIgorI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvZHRvYS5oPgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC03MTIsNyArNzEzLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKICAgICBpZiAoIXRo
aXNPYmplY3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dGhpc1ZhbHVl
KCkuc3ludGhlc2l6ZVByb3RvdHlwZShleGVjKSk7CiAKLSAgICBpZiAoIXRoaXNPYmplY3QtPmFs
bG93c0FjY2Vzc0Zyb20oZXhlYy0+dHJ1ZUNhbGxlckZyYW1lKCkpKQorICAgIFN0YWNrSXRlcmF0
b3IgaXRlcihleGVjLT52bSgpKTsKKyAgICBpdGVyLmJlZ2luQXQoZXhlYyk7CisgICAgaXRlcisr
OworICAgIGlmICghdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5jYWxsRnJhbWUo
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPnByb3RvdHlwZSgpKTsKQEAgLTcy
OCw3ICs3MzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAog
ICAgIGlmICghdGhpc09iamVjdCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAotICAgIGlmICghdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShleGVj
LT50cnVlQ2FsbGVyRnJhbWUoKSkpCisgICAgU3RhY2tJdGVyYXRvciBpdGVyKGV4ZWMtPnZtKCkp
OworICAgIGl0ZXIuYmVnaW5BdChleGVjKTsKKyAgICBpdGVyKys7CisgICAgaWYgKCF0aGlzT2Jq
ZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXItPmNhbGxGcmFtZSgpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIFNldHRpbmcgX19wcm90
b19fIHRvIGEgbm9uLW9iamVjdCwgbm9uLW51bGwgdmFsdWUgaXMgc2lsZW50bHkgaWdub3JlZCB0
byBtYXRjaCBNb3ppbGxhLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTUxMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisj
aW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTM5LDcg
KzE0MCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAg
aWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3Rl
ZCBwcm90b3R5cGUgb2YgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBvYmplY3QuIikpKTsKICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICgh
b2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMtPnRydWVDYWxsZXJGcmFtZSgpKSkKKyAgICBT
dGFja0l0ZXJhdG9yIGl0ZXIoZXhlYy0+dm0oKSk7CisgICAgaXRlci5iZWdpbigpOworICAgIGl0
ZXIrKzsKKyAgICBpZiAoIW9iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5jYWxsRnJhbWUo
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPnByb3RvdHlwZSgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1MTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBPcGVyYXRpb25zX2gKICNkZWZpbmUg
T3BlcmF0aW9uc19oCiAKKyNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MTM2MCkKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDEzLTA2LTA5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bnRyb2R1Y2luZyB0aGUgU3RhY2tJdGVyYXRvciBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM5MC4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBG
b3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTY3Jp
cHRDYWxsU3RhY2spOgorCiAyMDEzLTA2LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IGJ1aWxkLiBVc2UgYXQoKSBpbnN0ZWFkIG9m
IG9wZXJhdG9yW10gYmVjYXVzZSBvZiBhbWJpZ3VpdHkgb24gc29tZSBjb21waWxlcnMuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFja0l0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaW50
ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9TdGFja0l0ZXJhdG9yX2gK
KyNkZWZpbmUgV2ViQ29yZV9GV0RfU3RhY2tJdGVyYXRvcl9oCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvU3RhY2tJdGVyYXRvci5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTUxMzUyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAKICNpbmNsdWRlICJKU0V2
ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJl
cXVlc3QuaCIKKyNpbmNsdWRlIDxpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+
CiAjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBA
IC0xMzMsMTAgKzEzMywxMiBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0
YXRlCiAgICAgICAgICAgICBpbXBsKCktPnNlbmQodmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSwgZWMpOwogICAgIH0KIAotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlKDIp
OwotICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgMik7
Ci0gICAgaW1wbCgpLT5zZXRMYXN0U2VuZExpbmVOdW1iZXIoc3RhY2tUcmFjZVsxXS5saW5lKCkp
OwotICAgIGltcGwoKS0+c2V0TGFzdFNlbmRVUkwoc3RhY2tUcmFjZVsxXS5zb3VyY2VVUkwpOwor
ICAgIFN0YWNrSXRlcmF0b3IgaXRlcihleGVjLT52bSgpKTsKKyAgICBpdGVyLmJlZ2luKCk7Cisg
ICAgaXRlcisrOworICAgIEFTU0VSVCghaXRlci5lbmQoKSk7CisgICAgaW1wbCgpLT5zZXRMYXN0
U2VuZExpbmVOdW1iZXIoaXRlci0+bGluZSgpKTsKKyAgICBpbXBsKCktPnNldExhc3RTZW5kVVJM
KGl0ZXItPnNvdXJjZVVSTCgpKTsgICAgCiAKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHJldmlzaW9uIDE1
MTM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFja0ZhY3Rv
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0
Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDxpbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaD4KLSNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRlci5oPgor
I2luY2x1ZGUgPGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxydW50aW1l
L0FyZ0xpc3QuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTRnVuY3Rpb24uaD4KQEAgLTU3LDEwICs1Nyw5IEBAIFBhc3NSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHQKIHsKICAgICBWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiBm
cmFtZXM7CiAgICAgaWYgKEpTQzo6RXhlY1N0YXRlKiBleGVjID0gSlNNYWluVGhyZWFkRXhlY1N0
YXRlOjpjdXJyZW50U3RhdGUoKSkgewotICAgICAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tU
cmFjZTsKLSAgICAgICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1Ry
YWNlLCBtYXhTdGFja1NpemUpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YWNr
VHJhY2Uuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBmcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxG
cmFtZShzdGFja1RyYWNlW2ldLmZyaWVuZGx5RnVuY3Rpb25OYW1lKGV4ZWMpLCBzdGFja1RyYWNl
W2ldLmZyaWVuZGx5U291cmNlVVJMKCksIHN0YWNrVHJhY2VbaV0ubGluZSgpLCBzdGFja1RyYWNl
W2ldLmNvbHVtbigpKSk7CisgICAgICAgIFN0YWNrSXRlcmF0b3IgaXRlcihleGVjLT52bSgpKTsK
KyAgICAgICAgZm9yIChpdGVyLmJlZ2luKCk7ICFpdGVyLmVuZCgpICYmIG1heFN0YWNrU2l6ZS0t
OyBpdGVyKyspCisgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShpdGVy
LT5mdW5jdGlvbk5hbWUoKSwgaXRlci0+c291cmNlVVJMKCksIGl0ZXItPmxpbmUoKSwgaXRlci0+
Y29sdW1uKCkpKTsKICAgICB9CiAgICAgaWYgKGZyYW1lcy5pc0VtcHR5KCkgJiYgIWVtcHR5SXNB
bGxvd2VkKSB7CiAgICAgICAgIC8vIE5vIGZyYW1lcyBmb3VuZC4gSXQgbWF5IGhhcHBlbiBpbiB0
aGUgY2FzZSB3aGVyZQpAQCAtNzQsMTkgKzczLDE1IEBAIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiBjcmVhdGVTY3JpcHQKIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3Jp
cHRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBtYXhTdGFja1NpemUpCiB7
CiAgICAgVmVjdG9yPFNjcmlwdENhbGxGcmFtZT4gZnJhbWVzOwotICAgIFZlY3RvcjxTdGFja0Zy
YW1lPiBzdGFja1RyYWNlOwotICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uo
c3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplICsgMSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IHN0YWNr
VHJhY2Uuc2l6ZSgpID09IDEgPyAwIDogMTsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyBpKyspIHsK
KyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIoZXhlYy0+dm0oKSk7CisgICAgZm9yIChpdGVyLmJlZ2lu
KCksIGl0ZXIrKzsgIWl0ZXIuZW5kKCkgJiYgbWF4U3RhY2tTaXplLS07IGl0ZXIrKykgewogICAg
ICAgICAvLyBUaGlzIGVhcmx5IGV4aXQgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIG91ciBvbGQg
YmVoYXZpb3VyCiAgICAgICAgIC8vIGJ1dCB0aGUgc3RhY2sgdHJhY2Ugd2UgcHJvZHVjZSBub3cg
aXMgY29tcGxldGUgYW5kIGhhbmRsZXMgYWxsCiAgICAgICAgIC8vIHdheXMgaW4gd2hpY2ggY29k
ZSBtYXkgYmUgcnVubmluZwotICAgICAgICBpZiAoIXN0YWNrVHJhY2VbaV0uY2FsbGVlICYmIGZy
YW1lcy5zaXplKCkpCisgICAgICAgIGlmICghaXRlci0+Y2FsbGVlKCkgJiYgZnJhbWVzLnNpemUo
KSkKICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWUgPSBz
dGFja1RyYWNlW2ldLmZyaWVuZGx5RnVuY3Rpb25OYW1lKGV4ZWMpOwotICAgICAgICBmcmFtZXMu
YXBwZW5kKFNjcmlwdENhbGxGcmFtZShmdW5jdGlvbk5hbWUsIHN0YWNrVHJhY2VbaV0uc291cmNl
VVJMLCBzdGFja1RyYWNlW2ldLmxpbmUoKSwgc3RhY2tUcmFjZVtpXS5jb2x1bW4oKSkpOworICAg
ICAgICBmcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShpdGVyLT5mdW5jdGlvbk5hbWUoKSwg
aXRlci0+c291cmNlVVJMKCksIGl0ZXItPmxpbmUoKSwgaXRlci0+Y29sdW1uKCkpKTsKICAgICB9
Ci0KICAgICByZXR1cm4gU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoZnJhbWVzKTsKIH0KIAo=
</data>
<flag name="review"
          id="225653"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204272</attachid>
            <date>2013-06-10 18:15:31 -0700</date>
            <delta_ts>2013-06-10 18:17:00 -0700</delta_ts>
            <desc>revised patch.</desc>
            <filename>bug-117390.patch</filename>
            <type>text/plain</type>
            <size>75620</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MiBA
QAorMjAxMy0wNi0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW50cm9kdWNpbmcgdGhlIFN0YWNrSXRlcmF0b3IgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTczOTAuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIFN0YWNrSXRlcmF0b3IgY2xhc3MgaXMg
bWVhbnQgdG8gdW5pZnkgdGhlIHdheSB3ZSBpdGVyYXRlIHRoZSBKUworICAgICAgICBzdGFjay4g
SXQgYWxzbyBtYWtlcyBpdCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY29weSB0aGUgZnJhbWUg
ZGF0YQorICAgICAgICBpbnRvIHRoZSBpbnRlcm1lZGlhdGUgU3RhY2tGcmFtZSBzdHJ1Y3QgYmVm
b3JlIHByb2Nlc3NpbmcgaXQuCisgICAgICAgIFVuZm9ydHVuYXRlbHkgd2Ugc3RpbGwgY2FuJ3Qg
Z2V0IHJpZCBvZiBTdGFja0ZyYW1lIGJlY2F1c2UgaXQgaXMgdXNlZAorICAgICAgICB0byByZWNv
cmQgZnJhbWUgaW5mb3JtYXRpb24gZm9yIHRoZSBFeGNlcHRpb24gc3RhY2sgdGhhdCBpcyBleHBl
Y3RlZAorICAgICAgICB0byBwZXJzaXN0IGJleW9uZCB3aGVuIHRoZSBmcmFtZXMgaGF2ZSBiZWVu
IHBvcHBlZCBvZmYgdGhlIEpTIHN0YWNrLgorCisgICAgICAgIFRoZSBTdGFja0l0ZXJhdG9yIHdp
bGwgaXRlcmF0ZSBvdmVyIGFsbCAibG9naWNhbCIgZnJhbWVzIChpLmUuIGluY2x1ZGluZworICAg
ICAgICBpbmxpbmVkIGZyYW1lcykuIEFzIGl0IGl0ZXJhdGVzIHRoZSBKUyBzdGFjaywgaWYgaXQg
ZW5jb3VudGVycyBhIERGRworICAgICAgICBmcmFtZSB0aGF0IGhhcyBpbmxpbmVkIGZyYW1lcywg
dGhlIGl0ZXJhdG9yIHdpbGwgY2Fub25pY2FsaXplIHRoZQorICAgICAgICBpbmxpbmVkIGZyYW1l
cyBiZWZvcmUgcmV0dXJuaW5nLiBPbmNlIGNhbm9uaWNhbGl6ZWQsIHRoZSBmcmFtZSBjYW4gYmUK
KyAgICAgICAgcmVhZCBsaWtlIGFueSBvdGhlciBmcmFtZS4KKworICAgICAgICBUaGUgU3RhY2tJ
dGVyYXRvciBpbXBsZW1lbnRzIGEgRnJhbWUgY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIENhbGxG
cmFtZS4KKyAgICAgICAgVGhlIFN0YWNrSXRlcmF0b3I6OkZyYW1lIHNlcnZlcyBhcyByZWFkZXIg
b2YgdGhlIENhbGxGcmFtZSB0aGF0IG1ha2VzCisgICAgICAgIGl0IGVhc2llciB0byBhY2Nlc3Mg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyYW1lLiBUaGUgU3RhY2tJdGVyYXRvcjo6RnJhbWUKKyAg
ICAgICAgb25seSBhZGRzIGZ1bmN0aW9ucywgYW5kIG5vIGFkZGl0aW9uYWwgZGF0YSBmaWVsZHMu
CisKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dENy
ZWF0ZUJhY2t0cmFjZSk6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5w
cmk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjpiZWdpbik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YmVnaW5BdCk6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6c2V0SW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEV4ZWNTdGF0ZSk6CisgICAgICAgIChK
U0M6OkV4ZWNTdGF0ZTo6ZW5kKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpnZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRocm93
RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRlYnVnKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSW50ZXJwcmV0ZXIpOgorICAg
ICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6U3RhY2tJdGVyYXRvcjo6U3RhY2tJdGVyYXRvcik6CisgICAgICAgIChKU0M6OlN0YWNrSXRl
cmF0b3I6OmJlZ2luQXQpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpnb3RvTmV4dEZy
YW1lKToKKyAgICAgICAgLSBCYXNlZCBvbiB0aGUgZGVsZXRlZCBJbnRlcnByZXRlcjo6ZmluZEZ1
bmN0aW9uQ2FsbEZyYW1lRnJvbVZNQ29kZSgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9y
OjpmaW5kRnJhbWVGb3JGdW5jdGlvbik6CisgICAgICAgIC0gQmFzZWQgb24gdGhlIGRlbGV0ZWQg
SW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZSgpLgorICAgICAgICAoSlNDOjpT
dGFja0l0ZXJhdG9yOjpGcmFtZTo6Y29kZVR5cGUpOgorICAgICAgICAtIEJhc2VkIG9uIHRoZSBk
ZWxldGVkIGdldFN0YWNrRnJhbWVDb2RlVHlwZSgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJh
dG9yOjpGcmFtZTo6ZnVuY3Rpb25OYW1lKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFja0ZyYW1l
OjpmcmllbmRseUZ1bmN0aW9uTmFtZSgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpG
cmFtZTo6c291cmNlVVJMKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFja0ZyYW1lOjpmcmllbmRs
eVNvdXJjZVVSTCgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6dG9TdHJp
bmcpOgorICAgICAgICAtIEJhc2VkIG9uIFN0YWNrRnJhbWU6OnRvU3RyaW5nKCkuCisgICAgICAg
IChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChK
U0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpsaW5lKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFj
a0ZyYW1lOjpsaW5lKCkuCisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjb2x1
bW4pOgorICAgICAgICAtIEJhc2VkIG9uIFN0YWNrRnJhbWU6OmNvbHVtbigpLgorICAgICAgICAo
SlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6YXJndW1lbnRzKToKKyAgICAgICAgLSBCYXNlZCBv
biB0aGUgZGVsZXRlZCBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKCku
CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpyZXRyaWV2ZUV4cHJlc3Npb25J
bmZvKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFja0ZyYW1lOjpleHByZXNzaW9uSW5mbygpLgor
ICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6bG9naWNhbEZyYW1lKToKKyAgICAg
ICAgLSBCYXNlZCBvbiB0aGUgbm93IGRlbGV0ZWQgQ2FsbEZyYW1lOjp0cnVlQ2FsbEZyYW1lKCku
CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpsb2dpY2FsQ2FsbGVyRnJhbWUp
OgorICAgICAgICAtIEJhc2VkIG9uIHRoZSBub3cgZGVsZXRlZCBDYWxsRnJhbWU6OnRydWVDYWxs
ZXJGcmFtZSgpLgorICAgICAgICAoSlNDOjpqaXRUeXBlTmFtZSk6CisgICAgICAgIChKU0M6OnBy
aW50SW5kZW50cyk6CisgICAgICAgIChKU0M6OnByaW50aWYpOgorICAgICAgICAoSlNDOjpTdGFj
a0l0ZXJhdG9yOjpGcmFtZTo6cHJpbnQpOgorICAgICAgICAoZGVidWdQcmludENhbGxGcmFtZSk6
CisgICAgICAgIC0gUHJpbnRzIHRoZSBjb250ZW50cyBvZiB0aGUgZnJhbWUgZm9yIGRlYnVnZ2lu
ZyBwdXJwb3Nlcy4KKyAgICAgICAgICBUaGVyZSBhcmUgMiB2ZXJzaW9ucyB0aGF0IGNhbiBiZSB1
c2VkIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAxLiBXaGVuIHlvdSBoYXZlIGEgdmFsaWQgU3Rh
Y2tJdGVyYXRvciwgeW91IGNhbiBwcmludAorICAgICAgICAgICAgIHRoZSBjdXJyZW50IGZyYW1l
J3MgY29udGVudCB1c2luZyB0aGUgcHJpbnQgaW5zdGFuY2UKKyAgICAgICAgICAgICBtZXRob2Q6
CisgICAgICAgICAgICAgICAgIGl0ZXItPnByaW50KGluZGVudExldmVsKTsKKworICAgICAgICAg
IDIuIFdoZW4geW91IGhhdmUgYSBDYWxsRnJhbWUqIHRoYXQgeW91IHdhbnQgdG8gZHVtcCBmcm9t
IGEgZGVidWdnZXIKKyAgICAgICAgICAgICBjb25zb2xlLCB5b3UgY2FuIHByaW50IGl0cyBjb250
ZW50IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgIChnZGIpIGNhbGwgZGVidWdQcmludENh
bGxGcmFtZShjYWxsRnJhbWUpCisKKyAgICAgICAgICBBIHNhbXBsZSBvZiB0aGUgb3V0cHV0IGxv
b2tzIGxpa2UgdGhpczoKKworICAgICAgICAgICAgICBmcmFtZSAweDE1MTBjNzBiMCB7CisgICAg
ICAgICAgICAgICAgIG5hbWUgJ3Nob3VsZEJlJworICAgICAgICAgICAgICAgICBzb3VyY2VVUkwg
J3Rlc3RhcGkuanMnCisgICAgICAgICAgICAgICAgIGhvc3RGbGFnIDAKKyAgICAgICAgICAgICAg
ICAgaXNJbmxpbmVkRnJhbWUgMAorICAgICAgICAgICAgICAgICBjYWxsZWUgMHgxNTE1NGVmYjAK
KyAgICAgICAgICAgICAgICAgcmV0dXJuUEMgMHgxMGVkMDc4NmQKKyAgICAgICAgICAgICAgICAg
Y2FsbGVyRnJhbWUgMHgxNTEwYzcwNTgKKyAgICAgICAgICAgICAgICAgbG9naWNhbENhbGxlckZy
YW1lIDB4MTUxMGM3MDU4CisgICAgICAgICAgICAgICAgIHJhd0xvY2F0aW9uQml0cyAyNyAweDFi
CisgICAgICAgICAgICAgICAgIGNvZGVCbG9jayAweDdmZTc5YjAzNzIwMAorICAgICAgICAgICAg
ICAgICAgICBieXRlY29kZU9mZnNldCAyNyAweDFiIC8gMjEwCisgICAgICAgICAgICAgICAgICAg
IGxpbmUgNDYKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uIDIwCisgICAgICAgICAgICAgICAg
ICAgIGppdFR5cGUgMyA8QmFzZWxpbmVKSVQ+IGlzT3B0aW1pemluZ0pJVCAwCisgICAgICAgICAg
ICAgICAgICAgIGhhc0NvZGVPcmlnaW5zIDAKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICog
aW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFN0YWNrSXRlcmF0
b3I6OkZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjppc0pTRnJhbWUpOgorICAgICAg
ICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Y2FsbEZyYW1lKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFN0YWNrSXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6U3RhY2tJ
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAg
ICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6ZW5kKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRv
cjo6ZW1wdHkpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvbkpTQ1N0YWNr
KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0KToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlTm9kZS5oOgorICAgICAgICAoUHJvZmlsZU5vZGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OnJldHJpZXZlQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6c2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OnJldHJpZXZl
Q2FsbGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIp
OgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNQcm90b0dldHRlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b1NldHRlcik6
CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
Om9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvT3Bl
cmF0aW9ucy5oOgorCiAyMDEzLTA2LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgTWFyZ2UgdHJ1bmsgcjE0NjY1My4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAogICAg
IGludGVycHJldGVyL0ludGVycHJldGVyLmNwcAogICAgIGludGVycHJldGVyL0pTU3RhY2suY3Bw
CisgICAgaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAKICAgICBpbnRlcnByZXRlci9WTUlu
c3BlY3Rvci5jcHAKIAogICAgIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1MTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC00MzYsNiArNDM2LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9WTUluc3BlY3Rvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9WTUluc3BlY3Rvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmVQcmVmaXguaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24g
MTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MSw2ICsxNzEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnRlcnByZXRlci9DYWxs
RnJhbWUuY3BwIFwKICAgICBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgXAogICAgIGludGVy
cHJldGVyL0pTU3RhY2suY3BwIFwKKyAgICBpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcCBc
CiAgICAgaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIFwKICAgICBqaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBcCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNTEzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4u
Z3JhZkBnbWFpbC5jb20pCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRl
ICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJTYW1wbGlu
Z1Rvb2wuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
UmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+
CkBAIC0zMjYsMTUgKzMyNyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25KU0MKICAgICBTdHJpbmdCdWlsZGVyIHRyYWNlOwogICAgIHRyYWNlLmFwcGVuZExpdGVyYWwo
Ii0tPiBTdGFjayB0cmFjZTpcbiIpOwogCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2U7Ci0gICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsK
ICAgICBpbnQgaSA9IDA7Ci0KLSAgICBmb3IgKFZlY3RvcjxTdGFja0ZyYW1lPjo6aXRlcmF0b3Ig
aXRlciA9IHN0YWNrVHJhY2UuYmVnaW4oKTsgaXRlciA8IHN0YWNrVHJhY2UuZW5kKCk7IGl0ZXIr
KykgewotICAgICAgICBTdGFja0ZyYW1lIGxldmVsID0gKml0ZXI7Ci0gICAgICAgIHRyYWNlLmFw
cGVuZChTdHJpbmc6OmZvcm1hdCgiICAgICVpICAgJXNcbiIsIGksIGxldmVsLnRvU3RyaW5nKGV4
ZWMpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgaSsrOwotICAgIH0KKyAgICBmb3IgKFN0YWNr
SXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7IGl0ZXIgIT0gZXhlYy0+ZW5kKCk7ICsraXRl
ciwgKytpKQorICAgICAgICB0cmFjZS5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiAgICAlaSAgICVz
XG4iLCBpLCBpdGVyLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKICAgICBmcHJpbnRmKHN0
ZGVyciwgIiVzIiwgdHJhY2UudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gMTUxMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxMyArMzAsMTMgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6
ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgotI2luY2x1
ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVj
dC5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAKQEAgLTIwNSwzNiArMjA1LDI5IEBAIEpTU3RyaW5nUmVmIEpTQ29udGV4dENyZWF0
ZUJhY2t0cmFjZShKU0MKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIFZl
Y3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdl
dFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplKTsKKyAgICBzaXplX3QgaSA9IDA7
CisgICAgQVNTRVJUKG1heFN0YWNrU2l6ZSk7CisgICAgZm9yIChTdGFja0l0ZXJhdG9yIGl0ZXIg
PSBleGVjLT5iZWdpbigpOyBpdGVyICE9IGV4ZWMtPmVuZCgpICYmIG1heFN0YWNrU2l6ZS0tOyAr
K2l0ZXIsICsraSkgeworICAgICAgICBKU09iamVjdCogY2FsbGVlID0gaXRlci0+Y2FsbGVlKCk7
CisgICAgICAgIC8vIElmIGNhbGxlZSBpcyB1bmtub3duLCBidXQgd2UndmUgbm90IGFkZGVkIGFu
eSBmcmFtZSB5ZXQsIHdlIHNob3VsZAorICAgICAgICAvLyBzdGlsbCBhZGQgdGhlIGZyYW1lLCBi
ZWNhdXNlIHNvbWV0aGluZyBjYWxsZWQgdXMsIGFuZCBnYXZlIHVzIGFyZ3VtZW50cy4KKyAgICAg
ICAgaWYgKCFjYWxsZWUgJiYgaSkKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyB1
cmxTdHJpbmc7Ci0gICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWU7Ci0gICAgICAgIFN0YWNrRnJh
bWUmIGZyYW1lID0gc3RhY2tUcmFjZVtpXTsKLSAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGZy
YW1lLmNhbGxlZS5nZXQoKTsKLSAgICAgICAgaWYgKGZyYW1lLmNhbGxlZSkKLSAgICAgICAgICAg
IGZ1bmN0aW9uTmFtZSA9IGZyYW1lLmZyaWVuZGx5RnVuY3Rpb25OYW1lKGV4ZWMpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIC8vIENhbGxlciBpcyB1bmtub3duLCBidXQgaWYgZnJhbWUg
aXMgZW1wdHkgd2Ugc2hvdWxkIHN0aWxsIGFkZCB0aGUgZnJhbWUsIGJlY2F1c2UKLSAgICAgICAg
ICAgIC8vIHNvbWV0aGluZyBjYWxsZWQgdXMsIGFuZCBnYXZlIHVzIGFyZ3VtZW50cy4KLSAgICAg
ICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IHVuc2lnbmVkIGxpbmVOdW1iZXIgPSBmcmFtZS5saW5lKCk7CiAgICAgICAgIGlmICghYnVpbGRl
ci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJyMnKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoaSk7CiAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YWNr
VHJhY2VbaV0uZnJpZW5kbHlGdW5jdGlvbk5hbWUoZXhlYykpOworICAgICAgICBidWlsZGVyLmFw
cGVuZChpdGVyLT5mdW5jdGlvbk5hbWUoKSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiKCkgYXQgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YWNrVHJhY2VbaV0uZnJpZW5k
bHlTb3VyY2VVUkwoKSk7Ci0gICAgICAgIGlmIChmcmFtZS5jb2RlVHlwZSAhPSBTdGFja0ZyYW1l
TmF0aXZlQ29kZSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVyLT5zb3VyY2VVUkwoKSk7
CisgICAgICAgIGlmIChpdGVyLT5pc0pTRnJhbWUoKSkgewogICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJzonKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGxpbmVOdW1iZXIp
OworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoaXRlci0+bGluZSgpKTsKICAgICAg
ICAgfQotICAgICAgICBpZiAoIWZ1bmN0aW9uKQorCisgICAgICAgIGlmICghY2FsbGVlKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gMTUxMzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjYsNiArMjQy
NiwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9yLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRv
ci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwu
LlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTEzNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNiArMjIyLDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXENhbGxGcmFtZS5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcSW50ZXJwcmV0ZXIuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2suY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrSXRlcmF0b3IuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9yLmNw
cCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2xvc3VyZUNhbGxTdHViUm91
dGluZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwIiAvPg0KQEAgLTU1NSw2ICs1NTYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caW50ZXJwcmV0ZXJcSlNTdGFjay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2tJbmxpbmVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUmVnaXN0ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9yLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0b3IuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIiAvPg0KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDb21wYWN0SklUQ29kZU1hcC5oIiAvPg0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJl
dmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAt
Mjg1LDYgKzI4NSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxK
U1N0YWNrLmNwcCI+DQogICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KICAgICA8
L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFj
a0l0ZXJhdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxW
TUluc3BlY3Rvci5jcHAiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCiAg
ICAgPC9DbENvbXBpbGU+DQpAQCAtMTIxNCw2ICsxMjE3LDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVyLmgiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJw
cmV0ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvci5oIj4NCisgICAgICA8RmlsdGVyPmludGVy
cHJldGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9yLmgiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJw
cmV0ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC05NTUsNiArOTU1LDEwIEBACiAJCUZFMjQ1OTYyMTc2MDFENTgwMDc0RkNFMCAvKiBDYWxsRnJh
bWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTI0NTk2MTE3NjAxRDU4MDA3NEZDRTAgLyogQ2FsbEZyYW1lSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNEEzMzFGMTVCRDJF
MDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0
b3IuY3BwICovOyB9OwogCQlGRTRBMzMyMDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFF
MTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNTI2QkQ1MTc2NjNBODQwMEIxMjBEQyAvKiBT
dGFja0l0ZXJhdG9yUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU1MjZCRDQxNzY2M0E4NDAwQjEyMERDIC8qIFN0YWNrSXRlcmF0b3JQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RkU2N0RCOTMxNzUxOUI0QTAwNkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY3REI5MDE3NTE5QjRBMDA2QTgx
NEYgLyogSlNTdGFja0lubGluZXMuaCAqLzsgfTsKKwkJRkU2N0RCOTQxNzUxOUI0QTAwNkE4MTRG
IC8qIFN0YWNrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU2N0RCOTExNzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuY3Bw
ICovOyB9OworCQlGRTY3REI5NTE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2N0RCOTIxNzUx
OUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTk0MDMyMjE3NDQ0MjU5MDA0N0NGNkUgLyogSklU
U3R1YnNYODZDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFOTQwMzIxMTc0NDQyNTkwMDQ3Q0Y2RSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQ0U3NDU3
MTc0NTQ1NjUwMEZGOTMwMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUNFNzQ1NjE3NDU0NTY1MDBG
RjkzMDAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICovOyB9OwogCQlGRUQyODdCMjE1
RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9w
Y29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0xOTkyLDYgKzE5OTYsMTAgQEAKIAkJRkUyNDU5NjExNzYwMUQ1ODAwNzRGQ0UwIC8qIENhbGxG
cmFtZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEZyYW1l
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3
MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkU1MjZCRDQxNzY2M0E4NDAwQjEyMERDIC8qIFN0YWNrSXRlcmF0b3JQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrSXRlcmF0b3JQcml2YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjdEQjkwMTc1MTlCNEEwMDZBODE0RiAv
KiBKU1N0YWNrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0
YWNrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTY3REI5MTE3NTE5
QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdGFja0l0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkU2N0RCOTIxNzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTk0MDMyMTE3NDQ0MjU5MDA0N0NGNkUgLyogSklUU3R1YnNYODZD
b21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YnNYODZDb21t
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVDRTc0NTYxNzQ1NDU2NTAwRkY5
MzAwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkVEMjg3QjExNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50T3Bjb2RlLmg7IHBhdGgg
PSBsbGludC9MTEludE9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI4
Miw3ICsyMjkwLDExIEBACiAJCQkJMTQyOUQ3N0IwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJl
dGVyLmggKi8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIEpTU3RhY2suY3BwICov
LAogCQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBKU1N0YWNrLmggKi8sCisJCQkJRkU2
N0RCOTAxNzUxOUI0QTAwNkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggKi8sCiAJCQkJMTQ5QjI0
RkYwRDhBRjZEMTAwOUNCOEM3IC8qIFJlZ2lzdGVyLmggKi8sCisJCQkJRkU2N0RCOTExNzUxOUI0
QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuY3BwICovLAorCQkJCUZFNjdEQjkyMTc1MTlCNEEw
MDZBODE0RiAvKiBTdGFja0l0ZXJhdG9yLmggKi8sCisJCQkJRkU1MjZCRDQxNzY2M0E4NDAwQjEy
MERDIC8qIFN0YWNrSXRlcmF0b3JQcml2YXRlLmggKi8sCiAJCQkJRkU0QTMzMUQxNUJEMkUwNzAw
NkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLywKIAkJCQlGRTRBMzMxRTE1QkQyRTA3MDA2RjU0
RjMgLyogVk1JbnNwZWN0b3IuaCAqLywKIAkJCSk7CkBAIC0zMjY0LDYgKzMyNzYsOCBAQAogCQkJ
CTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNjdEQjk1MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFj
a0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTUyNkJENTE3NjYzQTg0MDBCMTIwREMg
LyogU3RhY2tJdGVyYXRvclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVGMTc0
MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTI0
NTk2MjE3NjAxRDU4MDA3NEZDRTAgLyogQ2FsbEZyYW1lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkVGNjgzNjAxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2OTksNiArMzcxMyw3IEBACiAJCQkJMEZEODJFNTQxNDFEQUVFRTAwMTc5
Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERGMDREQTE2QjM5
OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFNjdEQjkzMTc1MTlCNEEwMDZBODE0RiAvKiBKU1N0YWNrSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0
cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNE
MDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAt
NDIzMCw2ICs0MjQ1LDcgQEAKIAkJCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkRCNjQ2NDBGOTVDNkZDMDBE
N0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNTZBMUQ1MTUwMDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFNjdEQjk0MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJh
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRCMkNDRjE3NDJEN0Q4MDA3QjNDMUIg
LyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlz
aW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw5OCArNjcsNiBAQCB2b2lkIENhbGxGcmFtZTo6
c2V0Q3VycmVudFZQQyhJbnN0cnVjdGlvCiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKLUNhbGxGcmFtZSogQ2FsbEZyYW1lOjp0cnVlQ2FsbEZyYW1lKCkKLXsKLSAgICAvLyBBbSBJ
IGFuIGlubGluZSBjYWxsIGZyYW1lPyBJZiBzbywgd2UncmUgZG9uZS4KLSAgICBpZiAoaXNJbmxp
bmVkRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgCi0gICAgLy8gSWYgSSBkb24n
dCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBJJ20gbm90IERGRyBjb2RlLCBzbyBJJ20gdGhlIHRy
dWUgY2FsbCBmcmFtZS4KLSAgICBDb2RlQmxvY2sqIG1hY2hpbmVDb2RlQmxvY2sgPSBjb2RlQmxv
Y2soKTsKLSAgICBpZiAoIW1hY2hpbmVDb2RlQmxvY2spCi0gICAgICAgIHJldHVybiB0aGlzOwot
ICAgIAotICAgIC8vIElmIHRoZSBjb2RlIGJsb2NrIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgb3Jp
Z2lucywgdGhlbiB0aGVyZSB3YXMgbm8gaW5saW5pbmcsIHNvCi0gICAgLy8gSSdtIGRvbmUuCi0g
ICAgaWYgKCFtYWNoaW5lQ29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKQotICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAKLSAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBDb2RlT3JpZ2luLiBJ
ZiB3ZSBkb24ndCBoYXZlIGEgcGMgc2V0IHRoZW4gdGhlIG9ubHkgd2F5Ci0gICAgLy8gdGhhdCB0
aGlzIG1ha2VzIHNlbnNlIGlzIGlmIHRoZSBDb2RlT3JpZ2luIGluZGV4IHdhcyBzZXQgaW4gdGhl
IGNhbGwgZnJhbWUuCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOwotICAgIEFTU0VSVChtYWNoaW5lQ29k
ZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSk7Ci0gICAgaWYgKCFtYWNoaW5lQ29kZUJs
b2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSkgewotICAgICAgICAvLyBTZWUgYWJvdmUuIElu
IHJlbGVhc2UgYnVpbGRzLCB3ZSB0cnkgdG8gcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjcmFzaGlu
ZyBldmVuCi0gICAgICAgIC8vIHRob3VnaCBzdGFjayB3YWxraW5nIHdpbGwgYmUgZ29vZmVkIHVw
LgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgY29kZU9yaWdpbiA9IG1hY2hpbmVDb2Rl
QmxvY2stPmNvZGVPcmlnaW4oaW5kZXgpOwotCi0gICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIHRoaXM7IC8vIE5vdCBjdXJyZW50bHkgaW4gaW5saW5l
ZCBjb2RlLgotCi0gICAgQ29kZU9yaWdpbiBpbm5lck1vc3RDb2RlT3JpZ2luID0gY29kZU9yaWdp
bjsKLQotICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOykgewotICAgICAgICBJbmxpbmVD
YWxsRnJhbWUqIG5leHRJbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5p
bmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIAotICAgICAgICBDYWxsRnJhbWUqIGlubGluZWRDYWxs
ZXIgPSB0aGlzICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgCi0gICAg
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZUFzRnVuY3Rpb24gPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZS5nZXQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbGwgaW4gdGhlIGlubGluZWRDYWxsZXIK
LSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0Q29kZUJsb2NrKGlubGluZUNhbGxGcmFtZS0+YmFz
ZWxpbmVDb2RlQmxvY2soKSk7Ci0gICAgICAgIGlmIChjYWxsZWVBc0Z1bmN0aW9uKQotICAgICAg
ICAgICAgaW5saW5lZENhbGxlci0+c2V0U2NvcGUoY2FsbGVlQXNGdW5jdGlvbi0+c2NvcGUoKSk7
Ci0gICAgICAgIGlmIChuZXh0SW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgaW5saW5lZENh
bGxlci0+c2V0Q2FsbGVyRnJhbWUodGhpcyArIG5leHRJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5saW5lZENhbGxlci0+c2V0Q2FsbGVy
RnJhbWUodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRJbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
KTsKLSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlubGluZWRDYWxsZXItPnNldElzSW5s
aW5lZEZyYW1lKCk7Ci0gICAgICAgIGlmIChjYWxsZWVBc0Z1bmN0aW9uKQotICAgICAgICAgICAg
aW5saW5lZENhbGxlci0+c2V0Q2FsbGVlKGNhbGxlZUFzRnVuY3Rpb24pOwotICAgICAgICAKLSAg
ICAgICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwotICAgICAgICBpbmxp
bmVDYWxsRnJhbWUgPSBuZXh0SW5saW5lQ2FsbEZyYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gdGhpcyArIGlubmVyTW9zdENvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dDsKLX0KLSAgICAgICAgCi1DYWxsRnJhbWUqIENhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1lKCkK
LXsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gdGhpcy0+Y2FsbGVyRnJhbWUoKS0+cmVt
b3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLSAgICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAgICBy
ZXR1cm4gY2FsbGVyRnJhbWU7Ci0KLSAgICAvLyB0aGlzIC0+IFRoZSBjYWxsZWU7IHRoaXMgaXMg
ZWl0aGVyIGFuIGlubGluZWQgY2FsbGVlIGluIHdoaWNoIGNhc2UgaXQgYWxyZWFkeSBoYXMKLSAg
ICAvLyAgICBhIHBvaW50ZXIgdG8gdGhlIHRydWUgY2FsbGVyLiBPdGhlcndpc2UgaXQgY29udGFp
bnMgY3VycmVudCBQQyBpbiB0aGUgbWFjaGluZQotICAgIC8vICAgIGNhbGxlci4KLSAgICAvLwot
ICAgIC8vIG1hY2hpbmVDYWxsZXIgLT4gVGhlIGNhbGxlciBhY2NvcmRpbmcgdG8gdGhlIG1hY2hp
bmUsIHdoaWNoIG1heSBiZSB6ZXJvIG9yCi0gICAgLy8gICAgbW9yZSBmcmFtZXMgYWJvdmUgdGhl
IHRydWUgY2FsbGVyIGR1ZSB0byBpbmxpbmluZy4KLQotICAgIC8vIEFtIEkgYW4gaW5saW5lIGNh
bGwgZnJhbWU/IElmIHNvLCB3ZSdyZSBkb25lLgotICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQot
ICAgICAgICByZXR1cm4gY2FsbGVyRnJhbWU7Ci0gICAgCi0gICAgLy8gSSBhbSBhIG1hY2hpbmUg
Y2FsbCBmcmFtZSwgc28gdGhlIHF1ZXN0aW9uIGlzOiBpcyBteSBjYWxsZXIgYSBtYWNoaW5lIGNh
bGwgZnJhbWUKLSAgICAvLyB0aGF0IGhhcyBpbmxpbmVzIG9yIGEgbWFjaGluZSBjYWxsIGZyYW1l
IHRoYXQgZG9lc24ndD8KLSAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmICghY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4gY2Fs
bGVyRnJhbWU7Ci0gICAgQVNTRVJUKCFjYWxsZXJGcmFtZS0+aXNJbmxpbmVkRnJhbWUoKSk7Ci0g
ICAgCi0gICAgcmV0dXJuIGNhbGxlckZyYW1lLT50cnVlQ2FsbEZyYW1lKCktPnJlbW92ZUhvc3RD
YWxsRnJhbWVGbGFnKCk7Ci19Ci0KIHVuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRG
cm9tQ29kZU9yaWdpbkluZGV4KCkKIHsKICAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0NvZGVPcmln
aW5JbmRleCgpKTsKQEAgLTE4OSw0ICs5NywyNCBAQCBSZWdpc3RlciogQ2FsbEZyYW1lOjpmcmFt
ZUV4dGVudEludGVybmFsCiAgICAgcmV0dXJuIHJlZ2lzdGVycygpICsgY29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVyczsKIH0KIAorU3RhY2tJdGVyYXRvciBDYWxsRnJhbWU6OmJlZ2luKFN0
YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAgICBpZiAoIXRoaXMpCisgICAg
ICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjplbXB0eSgpOworCisgICAgU3RhY2tJdGVyYXRvciBp
dGVyKCZ2bSgpKTsKKyAgICBpdGVyLmJlZ2luQXQodGhpcywgZmlsdGVyKTsKKyAgICByZXR1cm4g
aXRlcjsKK30KKworU3RhY2tJdGVyYXRvciBDYWxsRnJhbWU6OmJlZ2luQXQoSlNGdW5jdGlvbiog
Y2FsbGVlRnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sK
KyAgICBpZiAoIXRoaXMpCisgICAgICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjplbXB0eSgpOwor
CisgICAgU3RhY2tJdGVyYXRvciBpdGVyKCZ2bSgpKTsKKyAgICBpdGVyLmJlZ2luQXQoY2FsbGVl
RnVuY3Rpb25PYmosIGZpbHRlcik7CisgICAgcmV0dXJuIGl0ZXI7ICAgIAorfQorCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZp
c2lvbiAxNTEzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU1N0YWNr
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0
ZXIuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIgogCiBuYW1lc3BhY2UgSlND
ICB7CiAKQEAgLTI3MiwyMSArMjczLDEzIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIHZvaWQgc2V0SW5saW5lQ2FsbEZyYW1lKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhp
cylbSlNTdGFjazo6UmV0dXJuUENdID0gaW5saW5lQ2FsbEZyYW1lOyB9Ci0KLSAgICAgICAgLy8g
Q2FsbCB0aGlzIHRvIGdldCB0aGUgc2VtYW50aWNhbGx5IGNvcnJlY3QgSlMgQ2FsbEZyYW1lKiBm
b3IgdGhlCi0gICAgICAgIC8vIGN1cnJlbnRseSBleGVjdXRpbmcgZnVuY3Rpb24uCi0gICAgICAg
IENhbGxGcmFtZSogdHJ1ZUNhbGxGcmFtZSgpOwotCi0gICAgICAgIC8vIENhbGwgdGhpcyB0byBn
ZXQgdGhlIHNlbWFudGljYWxseSBjb3JyZWN0IEpTIENhbGxGcmFtZSogY29ycmVzcG9uZGluZwot
ICAgICAgICAvLyB0byB0aGUgY2FsbGVyLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGlu
ZyBpbmxpbmluZyBhbmQgdGhlCi0gICAgICAgIC8vIEhvc3RDYWxsRnJhbWVGbGFnIHN0dWZmLgot
ICAgICAgICBDYWxsRnJhbWUqIHRydWVDYWxsZXJGcmFtZSgpOwotI2Vsc2UKLSAgICAgICAgQ2Fs
bEZyYW1lKiB0cnVlQ2FsbEZyYW1lKEFic3RyYWN0UEMpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICAg
ICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbGVyRnJhbWUoKSB7IHJldHVybiBjYWxsZXJGcmFtZSgpLT5y
ZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpOyB9CiAjZW5kaWYKICAgICAgICAgQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZU5vRmxhZ3MoKSB7IHJldHVybiBjYWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2Fs
bEZyYW1lRmxhZygpOyB9CiAKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRv
ciBiZWdpbihTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yIGJlZ2luQXQoSlNGdW5jdGlvbiogY2FsbGVl
RnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3I6OkZyYW1lKiBlbmQoKSB7IHJldHVy
biBTdGFja0l0ZXJhdG9yOjplbmQoKTsgfSAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnRwdHJfdCBIb3N0Q2FsbEZyYW1lRmxhZyA9IDE7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgc190aGlzQXJndW1lbnRPZmZzZXQgPSAtMSAtIEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYg
KzYzLDcgQEAKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdpc3Rl
ci5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lu
bGluZXMuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTIwMCw4ICsyMDEsNiBAQCBJbnRlcnBy
ZXRlcjo6U3RhY2tQb2xpY3k6OlN0YWNrUG9saWN5KEluCiB9CiAKIAotc3RhdGljIENhbGxGcmFt
ZSogZ2V0Q2FsbGVySW5mbyhWTSosIENhbGxGcmFtZSosIHVuc2lnbmVkJiBieXRlY29kZU9mZnNl
dCwgQ29kZUJsb2NrKiYgY2FsbGVyT3V0KTsKLQogLy8gUmV0dXJucyB0aGUgZGVwdGggb2YgdGhl
IHNjb3BlIGNoYWluIHdpdGhpbiBhIGdpdmVuIGNhbGwgZnJhbWUuCiBzdGF0aWMgaW50IGRlcHRo
KENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Njb3BlKiBzYykKIHsKQEAgLTQyMSwxMiArNDIwLDgg
QEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIGlmIChwYy5o
YXNKSVRSZXR1cm5BZGRyZXNzKCkpCiAgICAgICAgIGRhdGFMb2dGKCJbUmV0dXJuSklUUENdICAg
ICAgICAgICAgICB8ICUxMHAgfCAlcCBcbiIsIGl0LCBwYy5qaXRSZXR1cm5BZGRyZXNzKCkudmFs
dWUoKSk7CiAjZW5kaWYKLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7Ci0gICAgaW50
IGxpbmUgPSAwOwotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gMDsKLSAgICBnZXRD
YWxsZXJJbmZvKCZjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNh
bGxlckNvZGVCbG9jayk7Ci0gICAgbGluZSA9IGNhbGxlckNvZGVCbG9jay0+bGluZU51bWJlckZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBkYXRhTG9nRigiW1JldHVyblZQ
Q10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBpdCwgYnl0ZWNvZGVP
ZmZzZXQsIGxpbmUpOworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGNhbGxGcmFtZS0+YmVnaW4o
KTsKKyAgICBkYXRhTG9nRigiW1JldHVyblZQQ10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQg
KGxpbmUgJWQpXG4iLCBpdCwgaXRlci0+Ynl0ZWNvZGVPZmZzZXQoKSwgaXRlci0+bGluZSgpKTsK
ICAgICArK2l0OwogICAgIGRhdGFMb2dGKCJbQ29kZUJsb2NrXSAgICAgICAgICAgICAgICB8ICUx
MHAgfCAlcCBcbiIsIGl0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKICAgICArK2l0OwpAQCAt
NDc2LDggKzQ3MSwxMCBAQCBib29sIEludGVycHJldGVyOjppc09wY29kZShPcGNvZGUgb3Bjb2Rl
CiAjZW5kaWYKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbGxG
cmFtZShDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIHVuc2ln
bmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYgY29kZUJsb2NrKQorTkVWRVJfSU5MSU5F
IGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZShTdGFja0l0ZXJhdG9yJiBpdGVyLCBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlKQogeworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gaXRl
ci0+Y2FsbEZyYW1lKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpdGVyLT5jb2RlQmxv
Y2soKTsKICAgICBDb2RlQmxvY2sqIG9sZENvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICBKU1Nj
b3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKIApAQCAtNTA3LDEwICs1MDQsNyBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsCiAKICAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIGNhbGxGcmFtZS0+
dm0oKS50b3BDYWxsRnJhbWUgPSBjYWxsZXJGcmFtZTsKLSAgICBpZiAoY2FsbGVyRnJhbWUtPmhh
c0hvc3RDYWxsRnJhbWVGbGFnKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYWxsRnJh
bWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVP
ZmZzZXQsIGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICFjYWxsZXJG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5kU291
cmNlVG9FcnJvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXJyb3JJbnN0YW5jZSogZXhjZXB0aW9u
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKQEAgLTU2NSw2NiArNTU5LDYgQEAgc3RhdGljIHZv
aWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbQogICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0
KCp2bSwgdm0tPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKHZtLCBtZXNzYWdlKSk7
CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBnZXRCeXRlY29kZU9mZnNldEZvckNhbGxGcmFtZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPnJlbW92ZUhv
c3RDYWxsRnJhbWVGbGFnKCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgIGlmICghY29kZUJsb2NrKQotICAgICAgICByZXR1cm4gMDsKLSNp
ZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gY29kZUJs
b2NrLT5jb2RlT3JpZ2luKGNhbGxGcmFtZS0+bG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpKS5i
eXRlY29kZUluZGV4OwotI2VuZGlmCi0gICAgcmV0dXJuIGNhbGxGcmFtZS0+bG9jYXRpb25Bc0J5
dGVjb2RlT2Zmc2V0KCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVy
SW5mbyhWTSogdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZz
ZXQsIENvZGVCbG9jayomIGNhbGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIGJ5
dGVjb2RlT2Zmc2V0ID0gMDsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFzSG9zdENhbGxGcmFt
ZUZsYWcoKSk7Ci0gICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPnRy
dWVDYWxsZXJGcmFtZSgpOwotICAgIEFTU0VSVCghdHJ1ZUNhbGxlckZyYW1lLT5oYXNIb3N0Q2Fs
bEZyYW1lRmxhZygpKTsKLQotICAgIGlmICh0cnVlQ2FsbGVyRnJhbWUgPT0gQ2FsbEZyYW1lOjpu
b0NhbGxlcigpIHx8ICF0cnVlQ2FsbGVyRnJhbWUgfHwgIXRydWVDYWxsZXJGcmFtZS0+Y29kZUJs
b2NrKCkpIHsKLSAgICAgICAgY2FsbGVyID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWVDYWxsZXJG
cmFtZTsKLSAgICB9Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSB0cnVl
Q2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGlmICh0cnVlQ2FsbGVyRnJhbWUtPmhhc0xv
Y2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSkKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSB0cnVl
Q2FsbGVyRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0RnJvbUNvZGVPcmlnaW5JbmRleCgpOwotICAgIGVs
c2UKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSB0cnVlQ2FsbGVyRnJhbWUtPmxvY2F0aW9uQXNC
eXRlY29kZU9mZnNldCgpOwotCi0gICAgY2FsbGVyID0gY2FsbGVyQ29kZUJsb2NrOwotICAgIHJl
dHVybiB0cnVlQ2FsbGVyRnJhbWU7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGNvbnN0IFN0
cmluZyBnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewot
ICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKLSAgICByZXR1
cm4gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVSTCgp
OwotfQotCi1zdGF0aWMgU3RhY2tGcmFtZUNvZGVUeXBlIGdldFN0YWNrRnJhbWVDb2RlVHlwZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFzSG9zdENh
bGxGcmFtZUZsYWcoKSk7Ci0KLSAgICBzd2l0Y2ggKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmNv
ZGVUeXBlKCkpIHsKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICByZXR1cm4gU3RhY2tGcmFt
ZUV2YWxDb2RlOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICByZXR1cm4gU3RhY2tG
cmFtZUZ1bmN0aW9uQ29kZTsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgICAgIHJldHVybiBT
dGFja0ZyYW1lR2xvYmFsQ29kZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gU3RhY2tGcmFtZUdsb2JhbENvZGU7Ci19Ci0KIHVuc2lnbmVkIFN0
YWNrRnJhbWU6OmxpbmUoKQogewogICAgIHJldHVybiBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmxp
bmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkgKyBsaW5lT2Zmc2V0IDog
MDsKQEAgLTY3MCwzNCArNjA0LDI1IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0cmluZyhDYWxs
RnJhbWUqIGMKIHZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJh
bWU+JiByZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewogICAgIFZNJiB2bSA9IG1fdm07
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWUtPnJlbW92ZUhvc3RD
YWxsRnJhbWVGbGFnKCk7Ci0gICAgaWYgKCFjYWxsRnJhbWUgfHwgY2FsbEZyYW1lID09IENhbGxG
cmFtZTo6bm9DYWxsZXIoKSkgCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IGdldEJ5dGVjb2RlT2Zmc2V0Rm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAg
Y2FsbEZyYW1lID0gY2FsbEZyYW1lLT50cnVlQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKCFjYWxsRnJh
bWUpCi0gICAgICAgIHJldHVybjsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICB3aGlsZSAoY2FsbEZyYW1lICYmIGNhbGxGcmFt
ZSAhPSBDYWxsRnJhbWU6Om5vQ2FsbGVyKCkgJiYgbWF4U3RhY2tTaXplLS0pIHsKLSAgICAgICAg
U3RyaW5nIHNvdXJjZVVSTDsKLSAgICAgICAgaWYgKGNhbGxlckNvZGVCbG9jaykgewotICAgICAg
ICAgICAgc291cmNlVVJMID0gZ2V0U291cmNlVVJMRnJvbUNhbGxGcmFtZShjYWxsRnJhbWUpOwot
ICAgICAgICAgICAgU3RhY2tGcmFtZSBzKFN0cm9uZzxKU09iamVjdD4odm0sIGNhbGxGcmFtZS0+
Y2FsbGVlKCkpLAotICAgICAgICAgICAgICAgIGdldFN0YWNrRnJhbWVDb2RlVHlwZShjYWxsRnJh
bWUpLAotICAgICAgICAgICAgICAgIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4odm0sIGNhbGxlckNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgICAgIFN0cm9uZzxVbmxp
bmtlZENvZGVCbG9jaz4odm0sIGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSks
Ci0gICAgICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLT5zb3VyY2UoKSwKLSAgICAgICAgICAg
ICAgICBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8oKSwKLSAgICAg
ICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpLAotICAgICAgICAgICAg
ICAgIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAgICAgICAgICAgIHNvdXJjZVVSTCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWU7CisgICAgU3RhY2tJdGVyYXRvciBp
dGVyID0gY2FsbEZyYW1lLT5iZWdpbigpOworICAgIGZvciAoOyBpdGVyICE9IGNhbGxGcmFtZS0+
ZW5kKCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlcikgeworICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGl0ZXItPmNvZGVCbG9jaygpOworICAgICAgICBpZiAoY29kZUJsb2NrKSB7Cisg
ICAgICAgICAgICBTdGFja0ZyYW1lIHMoU3Ryb25nPEpTT2JqZWN0Pih2bSwgaXRlci0+Y2FsbGVl
KCkpLAorICAgICAgICAgICAgICAgIFN0YWNrRnJhbWVDb2RlVHlwZShpdGVyLT5jb2RlVHlwZSgp
KSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KHZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8VW5saW5rZWRDb2Rl
QmxvY2s+KHZtLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpLAorICAgICAgICAgICAg
ICAgIGNvZGVCbG9jay0+c291cmNlKCksCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+bGluZU5vKCksCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5zb3Vy
Y2VPZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBpdGVyLT5ieXRlY29kZU9mZnNldCgpLAorICAg
ICAgICAgICAgICAgIGl0ZXItPnNvdXJjZVVSTCgpKTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RhY2tGcmFtZSBzKFN0cm9u
ZzxKU09iamVjdD4odm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCkpLCBTdGFja0ZyYW1lTmF0aXZlQ29k
ZSwgU3Ryb25nPEV4ZWN1dGFibGVCYXNlPigpLCBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KCks
IDAsIDAsIDAsIDAsIFN0cmluZygpKTsKKyAgICAgICAgICAgIFN0YWNrRnJhbWUgcyhTdHJvbmc8
SlNPYmplY3Q+KHZtLCBpdGVyLT5jYWxsZWUoKSksIFN0YWNrRnJhbWVOYXRpdmVDb2RlLCBTdHJv
bmc8RXhlY3V0YWJsZUJhc2U+KCksIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4oKSwgMCwgMCwg
MCwgMCwgU3RyaW5nKCkpOwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocyk7CiAgICAgICAg
IH0KLSAgICAgICAgY2FsbEZyYW1lID0gZ2V0Q2FsbGVySW5mbygmdm0sIGNhbGxGcmFtZSwgYnl0
ZWNvZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgfQogfQogCkBAIC03NzMsMTIgKzY5
OCwyMCBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAKICAgICAv
LyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFt
ZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKLSAgICB3aGls
ZSAoaXNUZXJtaW5hdGlvbiB8fCAhKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7Ci0gICAgICAgIGlmICghdW53aW5kQ2FsbEZy
YW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGJ5dGVjb2RlT2Zmc2V0LCBjb2RlQmxvY2sp
KSB7Ci0gICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1l
LT52bSgpLmVuYWJsZWRQcm9maWxlcigpKQotICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNl
cHRpb25VbndpbmQoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9
CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGZvciAoU3RhY2tJdGVyYXRvciBp
dGVyID0gY2FsbEZyYW1lLT5iZWdpbigpOyBpdGVyICE9IGNhbGxGcmFtZS0+ZW5kKCk7ICsraXRl
cikgeworICAgICAgICBjYWxsRnJhbWUgPSBpdGVyLT5jYWxsRnJhbWUoKTsKKyAgICAgICAgY29k
ZUJsb2NrID0gaXRlci0+Y29kZUJsb2NrKCk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gaXRl
ci0+Ynl0ZWNvZGVPZmZzZXQoKTsKKworICAgICAgICBpZiAoaXNUZXJtaW5hdGlvbiB8fCAhKGhh
bmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCkpKSB7CisgICAgICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShpdGVyLCBleGNlcHRpb25W
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0g
dm0uZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNl
cHRpb25VbndpbmQoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT52bSgpLmVuYWJsZWRQ
cm9maWxlcigpKQpAQCAtMTM3Niw1NyArMTMwOSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEludGVy
cHJldGVyOjpkZWJ1ZyhDYWwKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRSZWFjaEJyZWFrcG9p
bnQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+
c291cmNlSUQoKSwgbGFzdExpbmUsIGNvbHVtbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQotfQotICAgIAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9tVk1D
b2RlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikgY29uc3QKLXsK
LSAgICBDYWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZyYW1lID0gZmluZEZ1bmN0aW9uQ2FsbEZyYW1l
RnJvbVZNQ29kZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLSAgICBpZiAoIWZ1bmN0aW9uQ2FsbEZy
YW1lKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50
cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbkNh
bGxGcmFtZSk7Ci0gICAgYXJndW1lbnRzLT50ZWFyT2ZmKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZShhcmd1bWVudHMpOwotfQotCi1KU1ZhbHVlIEludGVycHJldGVyOjpy
ZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uKSBjb25zdAotewotICAgIENhbGxGcmFtZSogZnVuY3Rpb25DYWxsRnJhbWUgPSBm
aW5kRnVuY3Rpb25DYWxsRnJhbWVGcm9tVk1Db2RlKGNhbGxGcmFtZSwgZnVuY3Rpb24pOwotCi0g
ICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAg
IAotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwotICAgIENvZGVCbG9jayogdW51c2VkQ2Fs
bGVyQ29kZUJsb2NrID0gMDsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVy
SW5mbygmY2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbkNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQs
IHVudXNlZENhbGxlckNvZGVCbG9jayk7Ci0gICAgaWYgKCFjYWxsZXJGcmFtZSkKLSAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwotICAgIEpTVmFsdWUgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxl
ZSgpOwotICAgIGlmICghY2FsbGVyKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICAv
LyBTa2lwIG92ZXIgZnVuY3Rpb24gYmluZGluZ3MuCi0gICAgQVNTRVJUKGNhbGxlci5pc09iamVj
dCgpKTsKLSAgICB3aGlsZSAoYXNPYmplY3QoY2FsbGVyKS0+aW5oZXJpdHMoJkpTQm91bmRGdW5j
dGlvbjo6c19pbmZvKSkgewotICAgICAgICBjYWxsZXJGcmFtZSA9IGdldENhbGxlckluZm8oJmNh
bGxGcmFtZS0+dm0oKSwgY2FsbGVyRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWRDYWxsZXJD
b2RlQmxvY2spOwotICAgICAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgICAgICBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7Ci0gICAg
ICAgIGlmICghY2FsbGVyKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIH0KLQot
ICAgIHJldHVybiBjYWxsZXI7Ci19Ci0KLUNhbGxGcmFtZSogSW50ZXJwcmV0ZXI6OmZpbmRGdW5j
dGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uKQotewotICAgIGZvciAoQ2FsbEZyYW1lKiBjYW5kaWRhdGUgPSBjYWxsRnJhbWUt
PnRydWVDYWxsRnJhbWUoKTsgY2FuZGlkYXRlOyBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPnRydWVD
YWxsZXJGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUtPmNhbGxlZSgpID09IGZ1bmN0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7
Ci19Cit9ICAgIAogCiB2b2lkIEludGVycHJldGVyOjplbmFibGVTYW1wbGVyKCkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShy
ZXZpc2lvbiAxNTEzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBSZWdpc3RlcjsKICAgICBjbGFzcyBKU1Njb3BlOwogICAgIGNsYXNzIFNh
bXBsaW5nVG9vbDsKKyAgICBjbGFzcyBTdGFja0l0ZXJhdG9yOwogICAgIHN0cnVjdCBDYWxsRnJh
bWVDbG9zdXJlOwogICAgIHN0cnVjdCBIYW5kbGVySW5mbzsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rp
b247CkBAIC0yMzUsMTcgKzIzNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNPYmpl
Y3QqIGV4ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1lKiwgSlNPYmplY3QqIGZ1bmN0aW9uLCBDb25z
dHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYpOwogICAgICAg
ICBKU1ZhbHVlIGV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgSlNTY29wZSopOwogCi0gICAgICAgIEpTVmFsdWUgcmV0cmlldmVBcmd1bWVudHNG
cm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKLSAgICAgICAgSlNWYWx1
ZSByZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopIGNvbnN0
OwotICAgICAgICAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpT
RnVuY3Rpb24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFy
Z3YsIGludCYgYXJnYyk7CiAgICAgICAgIAogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIo
KSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0KCk7IH0KIAogICAgICAgICBORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIHRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomLCBKU1ZhbHVlJiwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJh
bWUqLCBEZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY29sdW1u
KTsKLSAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyBnZXRUcmFjZUxpbmUoQ2FsbEZyYW1lKiwg
U3RhY2tGcmFtZUNvZGVUeXBlLCBjb25zdCBTdHJpbmcmLCBpbnQpOwotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRz
LCBzaXplX3QgbWF4U3RhY2tTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGFkZFN0YWNrVHJhY2VJZk5lY2Vzc2FyeShDYWxsRnJh
bWUqLCBKU1ZhbHVlIGVycm9yKTsKIAogICAgICAgICB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4ZWNT
dGF0ZSogZXhlYyk7CkBAIC0yNzEsOSArMjY3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW5kUmVwZWF0Q2FsbChDYWxsRnJhbWVDbG9zdXJlJik7CiAgICAgICAgIEpTVmFsdWUg
ZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJik7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wg
dW53aW5kQ2FsbEZyYW1lKENhbGxGcmFtZSomLCBKU1ZhbHVlLCB1bnNpZ25lZCYgYnl0ZWNvZGVP
ZmZzZXQsIENvZGVCbG9jayomKTsKLQotICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBmaW5kRnVu
Y3Rpb25DYWxsRnJhbWVGcm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBnZXRTdGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90
IG1heFN0YWNrU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOworICAg
ICAgICBORVZFUl9JTkxJTkUgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tJdGVyYXRvciYsIEpT
VmFsdWUpOwogCiAgICAgICAgIHZvaWQgZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqKTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDE5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJB
cmd1bWVudHMuaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitTdGFj
a0l0ZXJhdG9yOjpTdGFja0l0ZXJhdG9yKFZNKiB2bSkKKyAgICA6IG1fdm0odm0pCisgICAgLCBt
X2ZyYW1lKG51bGxwdHIpCisgICAgLCBtX2ZpbHRlcihudWxscHRyKQoreworfQorCit2b2lkIFN0
YWNrSXRlcmF0b3I6OmJlZ2luQXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBTdGFja0l0ZXJhdG9y
OjpGcmFtZUZpbHRlciBmaWx0ZXIpCit7CisgICAgaWYgKCFzdGFydEZyYW1lKSB7CisgICAgICAg
IG1fZnJhbWUgPSBudWxscHRyOworICAgICAgICBtX2ZpbHRlciA9IG51bGxwdHI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoJnN0YXJ0RnJhbWUtPnZtKCkgPT0gbV92bSk7
CisgICAgbV9mcmFtZSA9IEZyYW1lOjpjcmVhdGUoc3RhcnRGcmFtZSk7CisgICAgbV9maWx0ZXIg
PSBmaWx0ZXI7CisKKyAgICBtX2ZyYW1lID0gbV9mcmFtZS0+bG9naWNhbEZyYW1lKCk7Cit9CisK
K3ZvaWQgU3RhY2tJdGVyYXRvcjo6YmVnaW5BdChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9i
aiwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQoreworICAgIEFTU0VSVChjYWxs
ZWVGdW5jdGlvbk9iaik7CisgICAgYmVnaW5BdChtX3ZtLT50b3BDYWxsRnJhbWUsIGZpbHRlcik7
CisgICAgZmluZEZyYW1lRm9yRnVuY3Rpb24oY2FsbGVlRnVuY3Rpb25PYmopOworfQorCit2b2lk
IFN0YWNrSXRlcmF0b3I6OmdvdG9OZXh0RnJhbWUoKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1f
ZnJhbWU7CisgICAgd2hpbGUgKGZyYW1lKSB7CisgICAgICAgIGZyYW1lID0gZnJhbWUtPmxvZ2lj
YWxDYWxsZXJGcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lIHx8ICFtX2ZpbHRlciB8fCAhbV9m
aWx0ZXIoZnJhbWUpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fZnJhbWUgPSBm
cmFtZTsKK30KKwordm9pZCBTdGFja0l0ZXJhdG9yOjpmaW5kRnJhbWVGb3JGdW5jdGlvbihKU0Z1
bmN0aW9uKiBmdW5jdGlvbk9iaikKK3sKKyAgICBKU09iamVjdCogdGFyZ2V0Q2FsbGVlID0ganNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KGZ1bmN0aW9uT2JqKTsKKyAgICB3aGlsZSAobV9mcmFtZSkg
eworICAgICAgICBpZiAobV9mcmFtZS0+Y2FsbGVlKCkgPT0gdGFyZ2V0Q2FsbGVlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGdvdG9OZXh0RnJhbWUoKTsKKyAgICB9Cit9CisKK1N0YWNr
SXRlcmF0b3I6OkZyYW1lOjpDb2RlVHlwZSBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Y29kZVR5cGUo
KSBjb25zdAoreworICAgIGlmICghaXNKU0ZyYW1lKCkpCisgICAgICAgIHJldHVybiBDb2RlVHlw
ZTo6TmF0aXZlOworCisgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+Y29kZVR5cGUoKSkgeworICAg
IGNhc2UgRXZhbENvZGU6CisgICAgICAgIHJldHVybiBDb2RlVHlwZTo6RXZhbDsKKyAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKKyAgICAgICAgcmV0dXJuIENvZGVUeXBlOjpGdW5jdGlvbjsKKyAgICBj
YXNlIEdsb2JhbENvZGU6CisgICAgICAgIHJldHVybiBDb2RlVHlwZTo6R2xvYmFsOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDb2RlVHlwZTo6
R2xvYmFsOworfQorCitTdHJpbmcgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSgp
Cit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKyAgICBKU09iamVjdCogY2FsbGVlID0gdGhpcy0+
Y2FsbGVlKCk7CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIENvZGVUeXBl
OjpFdmFsOgorICAgICAgICB0cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb2RlVHlwZTo6TmF0aXZlOgorICAgICAgICBpZiAoY2FsbGVlKQorICAgICAg
ICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSgpLCBj
YWxsZWUpLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rp
b246CisgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJh
bWUoKSwgY2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZVR5cGU6
Okdsb2JhbDoKKyAgICAgICAgdHJhY2VMaW5lID0gImdsb2JhbCBjb2RlIjsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygp
IDogdHJhY2VMaW5lOworfQorCitTdHJpbmcgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OnNvdXJjZVVS
TCgpCit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkg
eworICAgIGNhc2UgQ29kZVR5cGU6OkV2YWw6CisgICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rpb246
CisgICAgY2FzZSBDb2RlVHlwZTo6R2xvYmFsOiB7CisgICAgICAgIFN0cmluZyBzb3VyY2VVUkwg
PSBjb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVSTCgpOworICAgICAgICBp
ZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3VyY2VV
UkwuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDb2RlVHlwZTo6TmF0
aXZlOgorICAgICAgICB0cmFjZUxpbmUgPSAiW25hdGl2ZSBjb2RlXSI7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6
IHRyYWNlTGluZTsKK30KKworU3RyaW5nIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjp0b1N0cmluZygp
Cit7CisgICAgU3RyaW5nQnVpbGRlciB0cmFjZUJ1aWxkOworICAgIFN0cmluZyBmdW5jdGlvbk5h
bWUgPSB0aGlzLT5mdW5jdGlvbk5hbWUoKTsKKyAgICBTdHJpbmcgc291cmNlVVJMID0gdGhpcy0+
c291cmNlVVJMKCk7CisgICAgdHJhY2VCdWlsZC5hcHBlbmQoZnVuY3Rpb25OYW1lKTsKKyAgICBp
ZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFmdW5jdGlvbk5hbWUuaXNF
bXB0eSgpKQorICAgICAgICAgICAgdHJhY2VCdWlsZC5hcHBlbmQoJ0AnKTsKKyAgICAgICAgdHJh
Y2VCdWlsZC5hcHBlbmQoc291cmNlVVJMKTsKKyAgICAgICAgaWYgKGlzSlNGcmFtZSgpKSB7Cisg
ICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZCgnOicpOworICAgICAgICAgICAgdHJhY2VCdWls
ZC5hcHBlbmROdW1iZXIobGluZSgpKTsKKyAgICAgICAgICAgIHRyYWNlQnVpbGQuYXBwZW5kKCc6
Jyk7CisgICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZE51bWJlcihjb2x1bW4oKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7Cit9
CisKK3Vuc2lnbmVkIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpieXRlY29kZU9mZnNldCgpCit7Cisg
ICAgaWYgKCFpc0pTRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGhhc0xvY2F0
aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSkKKyAgICAgICAgcmV0dXJuIGJ5dGVjb2RlT2Zmc2V0RnJv
bUNvZGVPcmlnaW5JbmRleCgpOworICAgIHJldHVybiBsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQo
KTsKK30KKwordW5zaWduZWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmxpbmUoKQoreworICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CisgICAgaWYgKCFjb2RlQmxv
Y2spCisgICAgICAgIHJldHVybiAwOworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKKyAgICBBU1NFUlQodW5s
aW5rZWRDb2RlQmxvY2spOworICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0
ZWNvZGVPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBsaW5lT2Zmc2V0ID0gY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+bGluZU5vKCk7CisgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrLT5s
aW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpICsgbGluZU9mZnNldDsK
K30KKwordW5zaWduZWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNvbHVtbigpCit7CisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKKyAgICBpZiAoIWNvZGVCbG9j
aykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVy
ID0gY29kZUJsb2NrLT5zb3VyY2UoKTsKKyAgICBpZiAoIXNvdXJjZVByb3ZpZGVyKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpbnQgZGl2b3QgPSAwOworICAgIGludCB1bnVzZWRTdGFydE9mZnNl
dCA9IDA7CisgICAgaW50IHVudXNlZEVuZE9mZnNldCA9IDA7CisgICAgcmV0cmlldmVFeHByZXNz
aW9uSW5mbyhkaXZvdCwgdW51c2VkU3RhcnRPZmZzZXQsIHVudXNlZEVuZE9mZnNldCk7CisgICAg
cmV0dXJuIHNvdXJjZVByb3ZpZGVyLT5jaGFyUG9zaXRpb25Ub0NvbHVtbk51bWJlcihkaXZvdCk7
Cit9CisKK0FyZ3VtZW50cyogU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmFyZ3VtZW50cygpCit7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB0aGlzLT5jYWxsRnJhbWUoKTsKKyAgICBBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtKCksIGNhbGxGcmFtZSk7CisgICAg
YXJndW1lbnRzLT50ZWFyT2ZmKGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIGFyZ3VtZW50czsKK30K
Kwordm9pZCBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6cmV0cmlldmVFeHByZXNzaW9uSW5mbyhpbnQm
IGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCkKK3sKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOworICAgIEFTU0VSVChjb2RlQmxvY2sp
OworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKTsKKyAgICB1bmxpbmtlZENvZGVCbG9jay0+ZXhwcmVzc2lvblJh
bmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQoKSwgZGl2b3QsIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpOworICAgIGRpdm90ICs9IGNvZGVCbG9jay0+c291cmNlT2Zmc2V0KCk7Cit9
CisKK1N0YWNrSXRlcmF0b3I6OkZyYW1lKiBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6bG9naWNhbEZy
YW1lKCkKK3sKKyNpZiAhRU5BQkxFKERGR19KSVQpCisgICAgcmV0dXJuIHRoaXM7CisKKyNlbHNl
IC8vICFFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoaXNJbmxpbmVkRnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisKKyAgICAvLyBJZiBJIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrLCB0aGVu
IEknbSBub3QgREZHIGNvZGUsIHNvIEknbSB0aGUgdHJ1ZSBjYWxsIGZyYW1lLgorICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CisgICAgaWYgKCFjb2RlQmxvY2sp
CisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgLy8gSWYgdGhlIGNvZGUgYmxvY2sgZG9lcyBu
b3QgaGF2ZSBhbnkgY29kZSBvcmlnaW5zLCB0aGVuIHRoZXJlIHdhcyBubyBpbmxpbmluZywgc28K
KyAgICAvLyBJJ20gZG9uZS4KKyAgICBpZiAoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgCisgICAgQ29kZUJsb2NrKiBvdXRlck1vc3RDb2Rl
QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgdW5zaWduZWQgaW5kZXggPSBsb2NhdGlvbkFzQ29kZU9y
aWdpbkluZGV4KCk7CisgICAgQVNTRVJUKG91dGVyTW9zdENvZGVCbG9jay0+Y2FuR2V0Q29kZU9y
aWdpbihpbmRleCkpOworICAgIGlmICghb3V0ZXJNb3N0Q29kZUJsb2NrLT5jYW5HZXRDb2RlT3Jp
Z2luKGluZGV4KSkgeworICAgICAgICAvLyBTZWUgYWJvdmUuIEluIHJlbGVhc2UgYnVpbGRzLCB3
ZSB0cnkgdG8gcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjcmFzaGluZyBldmVuCisgICAgICAgIC8v
IHRob3VnaCBzdGFjayB3YWxraW5nIHdpbGwgYmUgZ29vZmVkIHVwLgorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBvdXRlck1vc3RD
b2RlQmxvY2stPmNvZGVPcmlnaW4oaW5kZXgpOworICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgIHJldHVybiB0aGlzOyAvLyBOb3QgY3VycmVudGx5IGluIGlubGlu
ZWQgY29kZS4KKworICAgIC8vIFdlJ3ZlIGdvdCBpbmxpbmVkIGZyYW1lcy4gU28sIHJlaWZ5IHRo
ZW0gc28gdGhhdCB0aGUgaXRlcmF0b3IgY2FuIHdhbGsgdGhydSB0aGVtLgorICAgIENhbGxGcmFt
ZSogY3VyckZyYW1lID0gdGhpcy0+Y2FsbEZyYW1lKCk7CisgICAgQ29kZU9yaWdpbiBpbm5lck1v
c3RDb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKKyAgICBDYWxsRnJhbWUqIGlubmVyTW9zdExvZ2lj
YWxGcmFtZSA9IGN1cnJGcmFtZSArIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldDsKKworICAgIENhbGxGcmFtZSogbG9naWNhbEZyYW1lID0gaW5uZXJNb3N0TG9naWNhbEZy
YW1lOworICAgIHdoaWxlIChsb2dpY2FsRnJhbWUgIT0gY3VyckZyYW1lKSB7CisgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lZEZyYW1lSW5mbyA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lOworICAgICAgICAKKyAgICAgICAgLy8gRmlsbCBpbiB0aGUgbG9naWNhbCAoaS5lLiBpbmxp
bmVkKSBmcmFtZQorICAgICAgICBsb2dpY2FsRnJhbWUtPnNldENvZGVCbG9jayhpbmxpbmVkRnJh
bWVJbmZvLT5iYXNlbGluZUNvZGVCbG9jaygpKTsKKyAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRJ
bmxpbmVDYWxsRnJhbWUoaW5saW5lZEZyYW1lSW5mbyk7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+
c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW5saW5lZEZyYW1lSW5mby0+YXJndW1lbnRz
LnNpemUoKSk7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zm
c2V0KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0
SXNJbmxpbmVkRnJhbWUoKTsKKworICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVk
RnJhbWVJbmZvLT5jYWxsZWUuZ2V0KCk7CisgICAgICAgIGlmIChjYWxsZWUpIHsKKyAgICAgICAg
ICAgIGxvZ2ljYWxGcmFtZS0+c2V0U2NvcGUoY2FsbGVlLT5zY29wZSgpKTsKKyAgICAgICAgICAg
IGxvZ2ljYWxGcmFtZS0+c2V0Q2FsbGVlKGNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIENvZGVPcmlnaW4qIGNhbGxlckNvZGVPcmlnaW4gPSAmaW5saW5lZEZyYW1lSW5mby0+
Y2FsbGVyOworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGNhbGxlcklubGluZWRGcmFtZUluZm8g
PSBjYWxsZXJDb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIHVuc2lnbmVkIGNh
bGxlckZyYW1lT2Zmc2V0ID0gY2FsbGVySW5saW5lZEZyYW1lSW5mbyA/IGNhbGxlcklubGluZWRG
cmFtZUluZm8tPnN0YWNrT2Zmc2V0IDogMDsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGN1cnJGcmFtZSArIGNhbGxlckZyYW1lT2Zmc2V0OworICAgICAgICBsb2dpY2FsRnJhbWUt
PnNldENhbGxlckZyYW1lKGNhbGxlckZyYW1lKTsKKworICAgICAgICBjb2RlT3JpZ2luID0gKmNh
bGxlckNvZGVPcmlnaW47CisgICAgICAgIGxvZ2ljYWxGcmFtZSA9IGNhbGxlckZyYW1lOworICAg
IH0KKyAgICAKKyAgICBBU1NFUlQoIWlubmVyTW9zdExvZ2ljYWxGcmFtZS0+aGFzSG9zdENhbGxG
cmFtZUZsYWcoKSk7CisgICAgcmV0dXJuIEZyYW1lOjpjcmVhdGUoaW5uZXJNb3N0TG9naWNhbEZy
YW1lKTsKKyNlbmRpZiAvLyAhRU5BQkxFKERGR19KSVQpCit9CisKK1N0YWNrSXRlcmF0b3I6OkZy
YW1lKiBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6bG9naWNhbENhbGxlckZyYW1lKCkKK3sKKyAgICBG
cmFtZSogY2FsbGVyRnJhbWUgPSBjcmVhdGUodGhpcy0+Y2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9z
dENhbGxGcmFtZUZsYWcoKSk7CisjaWYgIUVOQUJMRShERkdfSklUKQorICAgIHJldHVybiBjYWxs
ZXJGcmFtZTsKKworI2Vsc2UgLy8gIUVOQUJMRShERkdfSklUKQorICAgIGlmICghaXNKU0ZyYW1l
KCkgfHwgIWNhbGxlckZyYW1lKQorICAgICAgICByZXR1cm4gY2FsbGVyRnJhbWU7CisKKyAgICAv
LyBJZiBJIGFtIGtub3duIHRvIGJlIGFuIGlubGluZWQgZnJhbWUsIHRoZW4gSSd2ZSBiZWVuIHJl
aWZpZWQgYWxyZWFkeSBhbmQKKyAgICAvLyBoYXZlIG15IGNhbGxlci4KKyAgICBpZiAoaXNJbmxp
bmVkRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGNhbGxlckZyYW1lOworICAgIAorICAgIC8vIEkg
YW0gbm90IGFuIGlubGluZWQgZnJhbWUuIFNvIHRoZSBxdWVzdGlvbiBpczogaXMgbXkgY2FsbGVy
IGEgQ2FsbEZyYW1lCisgICAgLy8gdGhhdCBoYXMgaW5saW5lcyBvciBhIENhbGxGcmFtZSB0aGF0
IGRvZXNuJ3Q/CisKKyAgICAvLyBJZiBteSBjYWxsZXIgaXMgbm90IGEgSlMgZnJhbWUsIGl0IGNh
bm5vdCBoYXZlIGlubGluZXMsIGFuZCB3ZSdyZSBkb25lLgorICAgIGlmICghY2FsbGVyRnJhbWUt
PmlzSlNGcmFtZSgpKQorICAgICAgICByZXR1cm4gY2FsbGVyRnJhbWU7CisKKyAgICBBU1NFUlQo
IWNhbGxlckZyYW1lLT5pc0lubGluZWRGcmFtZSgpKTsKKyAgICByZXR1cm4gY2FsbGVyRnJhbWUt
PmxvZ2ljYWxGcmFtZSgpOworCisjZW5kaWYgLy8gIUVOQUJMRShERkdfSklUKQorfQorCisjaWZu
ZGVmIE5ERUJVRworCitzdGF0aWMgY29uc3QgY2hhciogaml0VHlwZU5hbWUoSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlKQoreworICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgIGNhc2UgSklUQ29k
ZTo6Tm9uZTogcmV0dXJuICJOb25lIjsKKyAgICBjYXNlIEpJVENvZGU6Okhvc3RDYWxsVGh1bms6
IHJldHVybiAiSG9zdENhbGxUaHVuayI7CisgICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rOiByZXR1cm4gIkludGVycHJldGVyVGh1bmsiOworICAgIGNhc2UgSklUQ29kZTo6QmFzZWxp
bmVKSVQ6IHJldHVybiAiQmFzZWxpbmVKSVQiOworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOiBy
ZXR1cm4gIkRGR0pJVCI7CisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6IHJldHVybiAiRlRMSklU
IjsKKyAgICB9CisgICAgcmV0dXJuICI8dW5rbm93bj4iOworfQorCitzdGF0aWMgdm9pZCBwcmlu
dEluZGVudHMoaW50IGxldmVscykKK3sKKyAgICB3aGlsZSAobGV2ZWxzLS0pCisgICAgICAgIGRh
dGFMb2dGU3RyaW5nKCIgICAiKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRpZihpbnQgaW5kZW50
TGV2ZWxzLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ0xpc3Q7
CisgICAgdmFfc3RhcnQoYXJnTGlzdCwgZm9ybWF0KTsKKworICAgIGlmIChpbmRlbnRMZXZlbHMp
CisgICAgICAgIHByaW50SW5kZW50cyhpbmRlbnRMZXZlbHMpOworCisjaWYgQ09NUElMRVIoQ0xB
TkcpIHx8IChDT01QSUxFUihHQ0MpICYmIEdDQ19WRVJTSU9OX0FUX0xFQVNUKDQsIDYsIDApKQor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XZm9ybWF0LW5vbmxpdGVyYWwiCisjZW5kaWYKKworICAgIFdURjo6ZGF0YUxvZ0ZWKGZv
cm1hdCwgYXJnTGlzdCk7CisKKyNpZiBDT01QSUxFUihDTEFORykgfHwgKENPTVBJTEVSKEdDQykg
JiYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoNCwgNiwgMCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IHBvcAorI2VuZGlmCisKKyAgICB2YV9lbmQoYXJnTGlzdCk7Cit9CisKK3ZvaWQgU3RhY2tJdGVy
YXRvcjo6RnJhbWU6OnByaW50KGludCBpbmRlbnRMZXZlbCkKK3sKKyAgICBpbnQgaSA9IGluZGVu
dExldmVsOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsK
KyAgICBwcmludGlmKGksICJmcmFtZSAlcCB7XG4iLCB0aGlzKTsKKworICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSB0aGlzLT5jYWxsZXJGcmFtZSgpOworICAgIHZvaWQqIHJldHVyblBDID0g
aGFzUmV0dXJuUEMoKT8gdGhpcy0+cmV0dXJuUEMoKS52YWx1ZSgpIDogbnVsbHB0cjsKKworICAg
IHByaW50aWYoaSwgIiAgIG5hbWUgJyVzJ1xuIiwgZnVuY3Rpb25OYW1lKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgcHJpbnRpZihpLCAiICAgc291cmNlVVJMICclcydcbiIsIHNvdXJjZVVSTCgpLnV0
ZjgoKS5kYXRhKCkpOworICAgIHByaW50aWYoaSwgIiAgIGhvc3RGbGFnICVkXG4iLCBjYWxsZXJG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSk7CisgICAgcHJpbnRpZihpLCAiICAgaXNJbmxp
bmVkRnJhbWUgJWRcbiIsIGlzSW5saW5lZEZyYW1lKCkpOworCisgICAgaWYgKGlzSW5saW5lZEZy
YW1lKCkpCisgICAgICAgIHByaW50aWYoaSwgIiAgIElubGluZUNhbGxGcmFtZSAlcFxuIiwgdGhp
cy0+aW5saW5lQ2FsbEZyYW1lKCkpOworCisgICAgcHJpbnRpZihpLCAiICAgY2FsbGVlICVwXG4i
LCBjYWxsZWUoKSk7CisgICAgcHJpbnRpZihpLCAiICAgcmV0dXJuUEMgJXBcbiIsIHJldHVyblBD
KTsKKyAgICBwcmludGlmKGksICIgICBjYWxsZXJGcmFtZSAlcFxuIiwgY2FsbGVyRnJhbWUtPnJl
bW92ZUhvc3RDYWxsRnJhbWVGbGFnKCkpOworICAgIHByaW50aWYoaSwgIiAgIGxvZ2ljYWxDYWxs
ZXJGcmFtZSAlcFxuIiwgbG9naWNhbENhbGxlckZyYW1lKCkpOworICAgIHByaW50aWYoaSwgIiAg
IHJhd0xvY2F0aW9uQml0cyAldSAweCV4XG4iLCBsb2NhdGlvbkFzUmF3Qml0cygpLCBsb2NhdGlv
bkFzUmF3Qml0cygpKTsKKyAgICBwcmludGlmKGksICIgICBjb2RlQmxvY2sgJXBcbiIsIGNvZGVC
bG9jayk7CisgICAgaWYgKGNvZGVCbG9jaykgeworICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUgPSBjb2RlQmxvY2stPmppdFR5cGUoKTsKKyAgICAgICAgaWYgKGhhc0xvY2F0aW9uQXNC
eXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOworICAgICAgICAgICAgcHJpbnRpZihpLCAiICAg
ICAgYnl0ZWNvZGVPZmZzZXQgJXUgJXAgLyAlenVcbiIsIGJ5dGVjb2RlT2Zmc2V0LCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihieXRlY29kZU9mZnNldCksIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVP
cmlnaW5JbmRleCA9IGxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKTsKKyAgICAgICAgICAgIHBy
aW50aWYoaSwgIiAgICAgIGNvZGVPcmlnaW5JZGV4ICV1ICVwIC8gJXp1XG4iLCBjb2RlT3JpZ2lu
SW5kZXgsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvZGVPcmlnaW5JbmRleCksIGNvZGVCbG9j
ay0+Y29kZU9yaWdpbnMoKS5zaXplKCkpOworICAgICAgICB9CisgICAgICAgIHByaW50aWYoaSwg
IiAgICAgIGxpbmUgJWRcbiIsIGxpbmUoKSk7CisgICAgICAgIHByaW50aWYoaSwgIiAgICAgIGNv
bHVtbiAlZFxuIiwgY29sdW1uKCkpOworICAgICAgICBwcmludGlmKGksICIgICAgICBqaXRUeXBl
ICVkIDwlcz4gaXNPcHRpbWl6aW5nSklUICVkXG4iLCBqaXRUeXBlLCBqaXRUeXBlTmFtZShqaXRU
eXBlKSwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUpKTsKKyAgICAgICAgcHJpbnRp
ZihpLCAiICAgICAgaGFzQ29kZU9yaWdpbnMgJWRcbiIsIGNvZGVCbG9jay0+aGFzQ29kZU9yaWdp
bnMoKSk7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpIHsKKyAgICAg
ICAgICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS5nZXQoKTsKKyAg
ICAgICAgICAgIHByaW50aWYoaSwgIiAgICAgICAgIGppdENvZGUgJXAgc3RhcnQgJXAgZW5kICVw
XG4iLCBqaXRDb2RlLCBqaXRDb2RlLT5zdGFydCgpLCBqaXRDb2RlLT5lbmQoKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcHJpbnRpZihpLCAifVxuIik7Cit9CisKKyNlbmRpZiAvLyBOREVCVUcK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNpZm5kZWYgTkRFQlVHCisvLyBGb3IgdXNlIGluIHRo
ZSBkZWJ1Z2dlcgordm9pZCBkZWJ1Z1ByaW50Q2FsbEZyYW1lKEpTQzo6Q2FsbEZyYW1lKik7CisK
K3ZvaWQgZGVidWdQcmludENhbGxGcmFtZShKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQorewor
ICAgIGlmICghY2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgSlNDOjpTdGFja0l0ZXJh
dG9yOjpGcmFtZSogZnJhbWUgPSBKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjcmVhdGUoY2Fs
bEZyYW1lKTsKKyAgICBmcmFtZS0+cHJpbnQoMik7Cit9CisjZW5kaWYgLy8gIU5ERUJVRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3RhY2tJdGVyYXRv
cl9oCisjZGVmaW5lIFN0YWNrSXRlcmF0b3JfaAorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yUHJpdmF0ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJndW1lbnRzOworCitjbGFzcyBTdGFja0l0
ZXJhdG9yOjpGcmFtZSA6IHB1YmxpYyBDYWxsRnJhbWUgeworcHVibGljOgorICAgIGVudW0gQ29k
ZVR5cGUgeworICAgICAgICBHbG9iYWwgPSBTdGFja0ZyYW1lR2xvYmFsQ29kZSwKKyAgICAgICAg
RXZhbCA9IFN0YWNrRnJhbWVFdmFsQ29kZSwKKyAgICAgICAgRnVuY3Rpb24gPSBTdGFja0ZyYW1l
RnVuY3Rpb25Db2RlLAorICAgICAgICBOYXRpdmUgPSBTdGFja0ZyYW1lTmF0aXZlQ29kZQorICAg
IH07CisKKyAgICBzdGF0aWMgRnJhbWUqIGNyZWF0ZShDYWxsRnJhbWUqIGYpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8RnJhbWUqPihmKTsgfQorCisgICAgYm9vbCBpc0pTRnJhbWUoKSBjb25z
dCB7IHJldHVybiAhIWNvZGVCbG9jaygpOyB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJp
bmcgZnVuY3Rpb25OYW1lKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNvdXJjZVVS
TCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyB0b1N0cmluZygpOworCisgICAgQ29k
ZVR5cGUgY29kZVR5cGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCgpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGxpbmUoKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB1bnNpZ25lZCBjb2x1bW4oKTsKKworICAgIEFyZ3VtZW50cyogYXJndW1lbnRzKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENhbGxG
cmFtZSo+KHRoaXMpOyB9CisgICAgCisgICAgRnJhbWUqIGxvZ2ljYWxGcmFtZSgpOworICAgIEZy
YW1lKiBsb2dpY2FsQ2FsbGVyRnJhbWUoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIHBy
aW50KGludCBpbmRlbnRMZXZlbCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBGcmFtZSgpOwor
ICAgIH5GcmFtZSgpOworCisgICAgdm9pZCByZXRyaWV2ZUV4cHJlc3Npb25JbmZvKGludCYgZGl2
b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gU3RhY2tJdGVyYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3JQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFN0YWNr
SXRlcmF0b3JQcml2YXRlX2gKKyNkZWZpbmUgU3RhY2tJdGVyYXRvclByaXZhdGVfaAorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNGdW5jdGlvbjsKK2NsYXNz
IFZNOworCit0eXBlZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CisKK2NsYXNzIFN0YWNrSXRlcmF0
b3IgeworcHVibGljOgorICAgIGNsYXNzIEZyYW1lOworICAgIHR5cGVkZWYgYm9vbCAoKkZyYW1l
RmlsdGVyKShGcmFtZSopOworCisgICAgRnJhbWUmIG9wZXJhdG9yKigpIHsgcmV0dXJuICptX2Zy
YW1lOyB9CisgICAgQUxXQVlTX0lOTElORSBGcmFtZSogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1f
ZnJhbWU7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIG1f
ZnJhbWUgPT0gZnJhbWU7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oRnJhbWUqIGZyYW1lKSB7IHJl
dHVybiBtX2ZyYW1lICE9IGZyYW1lOyB9CisgICAgdm9pZCBvcGVyYXRvcisrKCkgeyBnb3RvTmV4
dEZyYW1lKCk7IH0KKyAgICB2b2lkIGZpbmRGcmFtZUZvckZ1bmN0aW9uKEpTRnVuY3Rpb24qKTsK
KworcHJpdmF0ZToKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yKFZNKik7CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGJlZ2luQXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1l
LCBGcmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYmVn
aW5BdChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9iaiwgRnJhbWVGaWx0ZXIgPSBudWxscHRy
KTsKKyAgICBzdGF0aWMgRnJhbWUqIGVuZCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBzdGF0
aWMgU3RhY2tJdGVyYXRvciBlbXB0eSgpIHsgcmV0dXJuIFN0YWNrSXRlcmF0b3IobnVsbHB0cik7
IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ290b05leHRGcmFtZSgpOworCisgICAg
Vk0qIG1fdm07CisgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgRnJhbWVGaWx0ZXIgbV9maWx0ZXI7
CisKKyAgICBmcmllbmQgY2xhc3MgRXhlY1N0YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBTdGFja0l0ZXJhdG9yUHJpdmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZ1JlZi5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkxlZ2FjeVBy
b2ZpbGVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb2ZpbGUuaCIK
KyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVHJhY2luZy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTU4LDEwICs1OCwxMSBAQCBQcm9maWxlR2VuZXJhdG9yOjpQcm9maWxl
R2VuZXJhdG9yKEV4ZWNTCiAKIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29u
c29sZVN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3Rh
Y2tUcmFjZTsKLSAgICBleGVjLT5pbnRlcnByZXRlcigpLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJh
Y2UsIDIpOwotCi0gICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywg
TGVnYWN5UHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIHN0YWNrVHJhY2VbMV0u
Y2FsbGVlLmdldCgpLCBzdGFja1RyYWNlWzFdLnNvdXJjZVVSTCwgc3RhY2tUcmFjZVsxXS5saW5l
KCkpLCBtX2hlYWQuZ2V0KCksIG1faGVhZC5nZXQoKSk7CisgICAgU3RhY2tJdGVyYXRvciBpdGVy
ID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0ZXI7CisgICAgQ2FsbElkZW50aWZpZXIgaWRlbnRp
ZmllciA9IExlZ2FjeVByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBpdGVyLT5j
YWxsZWUoKSwgaXRlci0+c291cmNlVVJMKCksIGl0ZXItPmxpbmUoKSk7CisgICAgbV9jdXJyZW50
Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywgaWRlbnRpZmllciwgbV9oZWFkLmdldCgp
LCBtX2hlYWQuZ2V0KCkpOworICAgIAogICAgIG1faGVhZC0+aW5zZXJ0Tm9kZShtX2N1cnJlbnRO
b2RlLmdldCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVOb2RlLmgJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBQcm9maWxl
Tm9kZTsKIAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQcm9maWxlTm9kZT4gPjo6Y29uc3Rf
aXRlcmF0b3IgU3RhY2tJdGVyYXRvcjsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PFN0cmlu
Z0ltcGwqPiBGdW5jdGlvbkNhbGxIYXNoQ291bnQ7CiAKICAgICBjbGFzcyBQcm9maWxlTm9kZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFByb2ZpbGVOb2RlPiB7CkBAIC0xMzEsNiArMTMwLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxQcm9maWxlTm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgU3RhY2tJdGVyYXRvcjsK
KwogICAgICAgICBQcm9maWxlTm9kZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgY29uc3Qg
Q2FsbElkZW50aWZpZXImLCBQcm9maWxlTm9kZSogaGVhZE5vZGUsIFByb2ZpbGVOb2RlKiBwYXJl
bnROb2RlKTsKICAgICAgICAgUHJvZmlsZU5vZGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUs
IFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUqIG5vZGVUb0NvcHkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNp
b24gMTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgpAQCAtMzIsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIiAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgpAQCAtNDAsNiArNDIsNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQ
YXJzZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlN0YWNr
SXRlcmF0b3IuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBVbmlj
b2RlOwpAQCAtMTc4LDE4ICsxODEsMzkgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERh
dGEoSlNDZWxsKgogICAgIHJldHVybiBDYWxsVHlwZUpTOwogfQogCitzdGF0aWMgSlNWYWx1ZSBy
ZXRyaWV2ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uT2Jq
KQoreworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luQXQoZnVuY3Rpb25PYmop
OworICAgIHJldHVybiBpdGVyICE9IGV4ZWMtPmVuZCgpID8gSlNWYWx1ZShpdGVyLT5hcmd1bWVu
dHMoKSkgOiBqc051bGwoKTsKK30KKwogSlNWYWx1ZSBKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oc2xvdEJhc2UpOwog
ICAgIEFTU0VSVCghdGhpc09iai0+aXNIb3N0RnVuY3Rpb24oKSk7Ci0gICAgcmV0dXJuIGV4ZWMt
PmludGVycHJldGVyKCktPnJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2Jq
KTsKKworICAgIHJldHVybiByZXRyaWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqKTsKK30KKwor
c3RhdGljIGJvb2wgc2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyhTdGFja0l0ZXJhdG9yOjpGcmFtZSog
ZnJhbWUpCit7CisgICAgSlNPYmplY3QqIGNhbGxlZSA9IGZyYW1lLT5jYWxsZWUoKTsKKyAgICBi
b29sIHNob3VsZFNraXAgPSBjYWxsZWUgPyBjYWxsZWUtPmluaGVyaXRzKCZKU0JvdW5kRnVuY3Rp
b246OnNfaW5mbykgOiBmYWxzZTsKKyAgICByZXR1cm4gc2hvdWxkU2tpcDsKK30KKworc3RhdGlj
IEpTVmFsdWUgcmV0cmlldmVDYWxsZXJGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uT2JqKQoreworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2lu
QXQoZnVuY3Rpb25PYmosIHNraXBPdmVyQm91bmRGdW5jdGlvbnMpOworICAgICsraXRlcjsKKyAg
ICByZXR1cm4gaXRlciAhPSBleGVjLT5lbmQoKSAmJiBpdGVyLT5jYWxsZWUoKSA/IGl0ZXItPmNh
bGxlZSgpIDoganNOdWxsKCk7CiB9CiAKIEpTVmFsdWUgSlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lKQogewogICAg
IEpTRnVuY3Rpb24qIHRoaXNPYmogPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHNsb3RCYXNlKTsKICAg
ICBBU1NFUlQoIXRoaXNPYmotPmlzSG9zdEZ1bmN0aW9uKCkpOwotICAgIEpTVmFsdWUgY2FsbGVy
ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRo
aXNPYmopOworICAgIEpTVmFsdWUgY2FsbGVyID0gcmV0cmlldmVDYWxsZXJGdW5jdGlvbihleGVj
LCB0aGlzT2JqKTsKIAogICAgIC8vIFNlZSBFUzUuMSAxNS4zLjUuNCAtIEZ1bmN0aW9uLmNhbGxl
ciBtYXkgbm90IGJlIHVzZWQgdG8gcmV0cmlldmUgYSBzdHJpY3QgY2FsbGVyLgogICAgIGlmICgh
Y2FsbGVyLmlzT2JqZWN0KCkgfHwgIWFzT2JqZWN0KGNhbGxlciktPmluaGVyaXRzKCZKU0Z1bmN0
aW9uOjpzX2luZm8pKQpAQCAtMjk3LDcgKzMyMSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGV4ZWMtPmlu
dGVycHJldGVyKCktPnJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0
KSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IocmV0cmlldmVBcmd1bWVudHMoZXhlYywgdGhpc09iamVjdCksIFJlYWRP
bmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIApAQCAtMzIxLDcgKzM0NSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGV4ZWMtPmludGVycHJl
dGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSwgUmVhZE9u
bHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IocmV0cmlldmVDYWxsZXJGdW5jdGlvbihleGVjLCB0aGlzT2JqZWN0KSwgUmVhZE9ubHkg
fCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCkBAIC00MTUsMTQgKzQzOSwxNCBAQCBib29sIEpTRnVuY3Rpb246OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqCiAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3Io
ZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBl
RXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29y
KTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICB9
Ci0gICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShl
eGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQXJn
dW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7CisgICAgICAgIHZhbHVlQ2hlY2sg
PSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVl
KCksIHJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXNPYmplY3QpKTsKICAgICB9IGVsc2UgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7CiAgICAgICAg
IGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAg
ICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCiAgICAgICAgICAgICAgICAgdGhpc09iamVj
dC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUg
fCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVP
d25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOwogICAgICAgICB9Ci0gICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52
YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVy
cHJldGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7Cisg
ICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVj
LCBkZXNjcmlwdG9yLnZhbHVlKCksIHJldHJpZXZlQ2FsbGVyRnVuY3Rpb24oZXhlYywgdGhpc09i
amVjdCkpOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpCiAgICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8
IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGpzTnVtYmVyKHRoaXNPYmplY3Qt
PmpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpKSk7CiAgICAgZWxzZSBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcAkocmV2aXNpb24gMTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9k
dG9hLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTcxMiw3
ICs3MTMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAgICAg
aWYgKCF0aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnRo
aXNWYWx1ZSgpLnN5bnRoZXNpemVQcm90b3R5cGUoZXhlYykpOwogCi0gICAgaWYgKCF0aGlzT2Jq
ZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMtPnRydWVDYWxsZXJGcmFtZSgpKSkKKyAgICBTdGFj
a0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigpOworICAgICsraXRlcjsKKyAgICBpZiAoIXRo
aXNPYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oaXRlci0+Y2FsbEZyYW1lKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aGlzT2JqZWN0LT5wcm90b3R5cGUoKSk7CkBAIC03MjgsNyArNzMxLDkgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogICAgIGlmICghdGhpc09i
amVjdCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAot
ICAgIGlmICghdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShleGVjLT50cnVlQ2FsbGVyRnJh
bWUoKSkpCisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0
ZXI7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXItPmNhbGxGcmFt
ZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIC8vIFNldHRpbmcgX19wcm90b19fIHRvIGEgbm9uLW9iamVjdCwgbm9uLW51bGwgdmFsdWUg
aXMgc2lsZW50bHkgaWdub3JlZCB0byBtYXRjaCBNb3ppbGxhLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMTM5LDcgKzE0MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3QKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiUmVxdWVzdGVkIHByb3RvdHlwZSBvZiBhIHZhbHVlIHRoYXQgaXMgbm90IGFu
IG9iamVjdC4iKSkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChleGVjLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKCFvYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oZXhlYy0+dHJ1ZUNh
bGxlckZyYW1lKCkpKQorICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7Cisg
ICAgKytpdGVyOworICAgIGlmICghb2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXItPmNhbGxG
cmFtZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+cHJvdG90eXBlKCkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZuZGVmIE9wZXJhdGlvbnNfaAogI2Rl
ZmluZSBPcGVyYXRpb25zX2gKIAorI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDE0
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTMtMDYtMTAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAg
ICAgIEludHJvZHVjaW5nIHRoZSBTdGFja0l0ZXJhdG9yIGNsYXNzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzkwLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaDogQWRkZWQu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNjcmlwdENhbGxTdGFjayk6CisKIDIwMTMtMDYtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYnVpbGQuIFVzZSBhdCgpIGluc3Rl
YWQgb2Ygb3BlcmF0b3JbXSBiZWNhdXNlIG9mIGFtYmlndWl0eSBvbiBzb21lIGNvbXBpbGVycy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNr
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1N0YWNrSXRlcmF0
b3JfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9TdGFja0l0ZXJhdG9yX2gKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdGFja0l0ZXJhdG9yLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAxNTEzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUg
IkpTRXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJYTUxI
dHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgPGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaD4KICNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaD4KICNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKQEAgLTEzMywxMCArMTMzLDExIEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChF
eGVjU3RhdGUKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2YWwudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpLCBlYyk7CiAgICAgfQogCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2UoMik7Ci0gICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNl
LCAyKTsKLSAgICBpbXBsKCktPnNldExhc3RTZW5kTGluZU51bWJlcihzdGFja1RyYWNlWzFdLmxp
bmUoKSk7Ci0gICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVSTChzdGFja1RyYWNlWzFdLnNvdXJjZVVS
TCk7CisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0ZXI7
CisgICAgQVNTRVJUKGl0ZXIgIT0gZXhlYy0+ZW5kKCkpOworICAgIGltcGwoKS0+c2V0TGFzdFNl
bmRMaW5lTnVtYmVyKGl0ZXItPmxpbmUoKSk7CisgICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVSTChp
dGVyLT5zb3VyY2VVUkwoKSk7ICAgIAogCiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCShyZXZpc2lvbiAxNTEz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENh
bGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8aW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmg+Ci0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KKyNp
bmNsdWRlIDxpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9B
cmdMaXN0Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU0Z1bmN0aW9uLmg+CkBAIC01NywxMCArNTcsOCBAQCBQYXNzUmVmUHRyPFNjcmlwdENh
bGxTdGFjaz4gY3JlYXRlU2NyaXB0CiB7CiAgICAgVmVjdG9yPFNjcmlwdENhbGxGcmFtZT4gZnJh
bWVzOwogICAgIGlmIChKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6Y3VycmVudFN0YXRlKCkpIHsKLSAgICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2U7Ci0gICAgICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFj
ZSwgbWF4U3RhY2tTaXplKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGFja1Ry
YWNlLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChTY3JpcHRDYWxsRnJh
bWUoc3RhY2tUcmFjZVtpXS5mcmllbmRseUZ1bmN0aW9uTmFtZShleGVjKSwgc3RhY2tUcmFjZVtp
XS5mcmllbmRseVNvdXJjZVVSTCgpLCBzdGFja1RyYWNlW2ldLmxpbmUoKSwgc3RhY2tUcmFjZVtp
XS5jb2x1bW4oKSkpOworICAgICAgICBmb3IgKFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJl
Z2luKCk7IGl0ZXIgIT0gZXhlYy0+ZW5kKCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlcikKKyAg
ICAgICAgICAgIGZyYW1lcy5hcHBlbmQoU2NyaXB0Q2FsbEZyYW1lKGl0ZXItPmZ1bmN0aW9uTmFt
ZSgpLCBpdGVyLT5zb3VyY2VVUkwoKSwgaXRlci0+bGluZSgpLCBpdGVyLT5jb2x1bW4oKSkpOwog
ICAgIH0KICAgICBpZiAoZnJhbWVzLmlzRW1wdHkoKSAmJiAhZW1wdHlJc0FsbG93ZWQpIHsKICAg
ICAgICAgLy8gTm8gZnJhbWVzIGZvdW5kLiBJdCBtYXkgaGFwcGVuIGluIHRoZSBjYXNlIHdoZXJl
CkBAIC03NCwxOSArNzIsMTUgQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNj
cmlwdAogUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFjayhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG1heFN0YWNrU2l6ZSkKIHsKICAgICBWZWN0b3I8
U2NyaXB0Q2FsbEZyYW1lPiBmcmFtZXM7Ci0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2U7Ci0gICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlLCBt
YXhTdGFja1NpemUgKyAxKTsKLSAgICBmb3IgKHNpemVfdCBpID0gc3RhY2tUcmFjZS5zaXplKCkg
PT0gMSA/IDAgOiAxOyBpIDwgc3RhY2tUcmFjZS5zaXplKCk7IGkrKykgeworICAgIFN0YWNrSXRl
cmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7CisgICAgZm9yICgrK2l0ZXI7IGl0ZXIgIT0gZXhl
Yy0+ZW5kKCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlcikgewogICAgICAgICAvLyBUaGlzIGVh
cmx5IGV4aXQgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIG91ciBvbGQgYmVoYXZpb3VyCiAgICAg
ICAgIC8vIGJ1dCB0aGUgc3RhY2sgdHJhY2Ugd2UgcHJvZHVjZSBub3cgaXMgY29tcGxldGUgYW5k
IGhhbmRsZXMgYWxsCiAgICAgICAgIC8vIHdheXMgaW4gd2hpY2ggY29kZSBtYXkgYmUgcnVubmlu
ZwotICAgICAgICBpZiAoIXN0YWNrVHJhY2VbaV0uY2FsbGVlICYmIGZyYW1lcy5zaXplKCkpCisg
ICAgICAgIGlmICghaXRlci0+Y2FsbGVlKCkgJiYgZnJhbWVzLnNpemUoKSkKICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWUgPSBzdGFja1RyYWNlW2ldLmZy
aWVuZGx5RnVuY3Rpb25OYW1lKGV4ZWMpOwotICAgICAgICBmcmFtZXMuYXBwZW5kKFNjcmlwdENh
bGxGcmFtZShmdW5jdGlvbk5hbWUsIHN0YWNrVHJhY2VbaV0uc291cmNlVVJMLCBzdGFja1RyYWNl
W2ldLmxpbmUoKSwgc3RhY2tUcmFjZVtpXS5jb2x1bW4oKSkpOworICAgICAgICBmcmFtZXMuYXBw
ZW5kKFNjcmlwdENhbGxGcmFtZShpdGVyLT5mdW5jdGlvbk5hbWUoKSwgaXRlci0+c291cmNlVVJM
KCksIGl0ZXItPmxpbmUoKSwgaXRlci0+Y29sdW1uKCkpKTsKICAgICB9Ci0KICAgICByZXR1cm4g
U2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoZnJhbWVzKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204274</attachid>
            <date>2013-06-10 18:22:27 -0700</date>
            <delta_ts>2013-06-13 18:54:23 -0700</delta_ts>
            <desc>patch #3</desc>
            <filename>bug-117390.patch</filename>
            <type>text/plain</type>
            <size>75962</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MiBA
QAorMjAxMy0wNi0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW50cm9kdWNpbmcgdGhlIFN0YWNrSXRlcmF0b3IgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTczOTAuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIFN0YWNrSXRlcmF0b3IgY2xhc3MgaXMg
bWVhbnQgdG8gdW5pZnkgdGhlIHdheSB3ZSBpdGVyYXRlIHRoZSBKUworICAgICAgICBzdGFjay4g
SXQgYWxzbyBtYWtlcyBpdCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY29weSB0aGUgZnJhbWUg
ZGF0YQorICAgICAgICBpbnRvIHRoZSBpbnRlcm1lZGlhdGUgU3RhY2tGcmFtZSBzdHJ1Y3QgYmVm
b3JlIHByb2Nlc3NpbmcgaXQuCisgICAgICAgIFVuZm9ydHVuYXRlbHkgd2Ugc3RpbGwgY2FuJ3Qg
Z2V0IHJpZCBvZiBTdGFja0ZyYW1lIGJlY2F1c2UgaXQgaXMgdXNlZAorICAgICAgICB0byByZWNv
cmQgZnJhbWUgaW5mb3JtYXRpb24gZm9yIHRoZSBFeGNlcHRpb24gc3RhY2sgdGhhdCBpcyBleHBl
Y3RlZAorICAgICAgICB0byBwZXJzaXN0IGJleW9uZCB3aGVuIHRoZSBmcmFtZXMgaGF2ZSBiZWVu
IHBvcHBlZCBvZmYgdGhlIEpTIHN0YWNrLgorCisgICAgICAgIFRoZSBTdGFja0l0ZXJhdG9yIHdp
bGwgaXRlcmF0ZSBvdmVyIGFsbCAibG9naWNhbCIgZnJhbWVzIChpLmUuIGluY2x1ZGluZworICAg
ICAgICBpbmxpbmVkIGZyYW1lcykuIEFzIGl0IGl0ZXJhdGVzIHRoZSBKUyBzdGFjaywgaWYgaXQg
ZW5jb3VudGVycyBhIERGRworICAgICAgICBmcmFtZSB0aGF0IGhhcyBpbmxpbmVkIGZyYW1lcywg
dGhlIGl0ZXJhdG9yIHdpbGwgY2Fub25pY2FsaXplIHRoZQorICAgICAgICBpbmxpbmVkIGZyYW1l
cyBiZWZvcmUgcmV0dXJuaW5nLiBPbmNlIGNhbm9uaWNhbGl6ZWQsIHRoZSBmcmFtZSBjYW4gYmUK
KyAgICAgICAgcmVhZCBsaWtlIGFueSBvdGhlciBmcmFtZS4KKworICAgICAgICBUaGUgU3RhY2tJ
dGVyYXRvciBpbXBsZW1lbnRzIGEgRnJhbWUgY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIENhbGxG
cmFtZS4KKyAgICAgICAgVGhlIFN0YWNrSXRlcmF0b3I6OkZyYW1lIHNlcnZlcyBhcyByZWFkZXIg
b2YgdGhlIENhbGxGcmFtZSB0aGF0IG1ha2VzCisgICAgICAgIGl0IGVhc2llciB0byBhY2Nlc3Mg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyYW1lLiBUaGUgU3RhY2tJdGVyYXRvcjo6RnJhbWUKKyAg
ICAgICAgb25seSBhZGRzIGZ1bmN0aW9ucywgYW5kIG5vIGFkZGl0aW9uYWwgZGF0YSBmaWVsZHMu
CisKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dENy
ZWF0ZUJhY2t0cmFjZSk6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5w
cmk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjpiZWdpbik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YmVnaW5BdCk6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6c2V0SW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEV4ZWNTdGF0ZSk6CisgICAgICAgIChK
U0M6OkV4ZWNTdGF0ZTo6ZW5kKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpnZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRocm93
RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRlYnVnKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSW50ZXJwcmV0ZXIpOgorICAg
ICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6U3RhY2tJdGVyYXRvcjo6U3RhY2tJdGVyYXRvcik6CisgICAgICAgIChKU0M6OlN0YWNrSXRl
cmF0b3I6OmJlZ2luQXQpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpnb3RvTmV4dEZy
YW1lKToKKyAgICAgICAgLSBCYXNlZCBvbiB0aGUgZGVsZXRlZCBJbnRlcnByZXRlcjo6ZmluZEZ1
bmN0aW9uQ2FsbEZyYW1lRnJvbVZNQ29kZSgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9y
OjpmaW5kRnJhbWVGb3JGdW5jdGlvbik6CisgICAgICAgIC0gQmFzZWQgb24gdGhlIGRlbGV0ZWQg
SW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZSgpLgorICAgICAgICAoSlNDOjpT
dGFja0l0ZXJhdG9yOjpGcmFtZTo6Y29kZVR5cGUpOgorICAgICAgICAtIEJhc2VkIG9uIHRoZSBk
ZWxldGVkIGdldFN0YWNrRnJhbWVDb2RlVHlwZSgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJh
dG9yOjpGcmFtZTo6ZnVuY3Rpb25OYW1lKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFja0ZyYW1l
OjpmcmllbmRseUZ1bmN0aW9uTmFtZSgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpG
cmFtZTo6c291cmNlVVJMKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFja0ZyYW1lOjpmcmllbmRs
eVNvdXJjZVVSTCgpLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6dG9TdHJp
bmcpOgorICAgICAgICAtIEJhc2VkIG9uIFN0YWNrRnJhbWU6OnRvU3RyaW5nKCkuCisgICAgICAg
IChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChK
U0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpsaW5lKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFj
a0ZyYW1lOjpsaW5lKCkuCisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjb2x1
bW4pOgorICAgICAgICAtIEJhc2VkIG9uIFN0YWNrRnJhbWU6OmNvbHVtbigpLgorICAgICAgICAo
SlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6YXJndW1lbnRzKToKKyAgICAgICAgLSBCYXNlZCBv
biB0aGUgZGVsZXRlZCBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKCku
CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpyZXRyaWV2ZUV4cHJlc3Npb25J
bmZvKToKKyAgICAgICAgLSBCYXNlZCBvbiBTdGFja0ZyYW1lOjpleHByZXNzaW9uSW5mbygpLgor
ICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6bG9naWNhbEZyYW1lKToKKyAgICAg
ICAgLSBCYXNlZCBvbiB0aGUgbm93IGRlbGV0ZWQgQ2FsbEZyYW1lOjp0cnVlQ2FsbEZyYW1lKCku
CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpsb2dpY2FsQ2FsbGVyRnJhbWUp
OgorICAgICAgICAtIEJhc2VkIG9uIHRoZSBub3cgZGVsZXRlZCBDYWxsRnJhbWU6OnRydWVDYWxs
ZXJGcmFtZSgpLgorICAgICAgICAoSlNDOjpqaXRUeXBlTmFtZSk6CisgICAgICAgIChKU0M6OnBy
aW50SW5kZW50cyk6CisgICAgICAgIChKU0M6OnByaW50aWYpOgorICAgICAgICAoSlNDOjpTdGFj
a0l0ZXJhdG9yOjpGcmFtZTo6cHJpbnQpOgorICAgICAgICAoZGVidWdQcmludENhbGxGcmFtZSk6
CisgICAgICAgIC0gUHJpbnRzIHRoZSBjb250ZW50cyBvZiB0aGUgZnJhbWUgZm9yIGRlYnVnZ2lu
ZyBwdXJwb3Nlcy4KKyAgICAgICAgICBUaGVyZSBhcmUgMiB2ZXJzaW9ucyB0aGF0IGNhbiBiZSB1
c2VkIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAxLiBXaGVuIHlvdSBoYXZlIGEgdmFsaWQgU3Rh
Y2tJdGVyYXRvciwgeW91IGNhbiBwcmludAorICAgICAgICAgICAgIHRoZSBjdXJyZW50IGZyYW1l
J3MgY29udGVudCB1c2luZyB0aGUgcHJpbnQgaW5zdGFuY2UKKyAgICAgICAgICAgICBtZXRob2Q6
CisgICAgICAgICAgICAgICAgIGl0ZXItPnByaW50KGluZGVudExldmVsKTsKKworICAgICAgICAg
IDIuIFdoZW4geW91IGhhdmUgYSBDYWxsRnJhbWUqIHRoYXQgeW91IHdhbnQgdG8gZHVtcCBmcm9t
IGEgZGVidWdnZXIKKyAgICAgICAgICAgICBjb25zb2xlLCB5b3UgY2FuIHByaW50IGl0cyBjb250
ZW50IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgIChnZGIpIGNhbGwgZGVidWdQcmludENh
bGxGcmFtZShjYWxsRnJhbWUpCisKKyAgICAgICAgICBBIHNhbXBsZSBvZiB0aGUgb3V0cHV0IGxv
b2tzIGxpa2UgdGhpczoKKworICAgICAgICAgICAgICBmcmFtZSAweDE1MTBjNzBiMCB7CisgICAg
ICAgICAgICAgICAgIG5hbWUgJ3Nob3VsZEJlJworICAgICAgICAgICAgICAgICBzb3VyY2VVUkwg
J3Rlc3RhcGkuanMnCisgICAgICAgICAgICAgICAgIGhvc3RGbGFnIDAKKyAgICAgICAgICAgICAg
ICAgaXNJbmxpbmVkRnJhbWUgMAorICAgICAgICAgICAgICAgICBjYWxsZWUgMHgxNTE1NGVmYjAK
KyAgICAgICAgICAgICAgICAgcmV0dXJuUEMgMHgxMGVkMDc4NmQKKyAgICAgICAgICAgICAgICAg
Y2FsbGVyRnJhbWUgMHgxNTEwYzcwNTgKKyAgICAgICAgICAgICAgICAgbG9naWNhbENhbGxlckZy
YW1lIDB4MTUxMGM3MDU4CisgICAgICAgICAgICAgICAgIHJhd0xvY2F0aW9uQml0cyAyNyAweDFi
CisgICAgICAgICAgICAgICAgIGNvZGVCbG9jayAweDdmZTc5YjAzNzIwMAorICAgICAgICAgICAg
ICAgICAgICBieXRlY29kZU9mZnNldCAyNyAweDFiIC8gMjEwCisgICAgICAgICAgICAgICAgICAg
IGxpbmUgNDYKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uIDIwCisgICAgICAgICAgICAgICAg
ICAgIGppdFR5cGUgMyA8QmFzZWxpbmVKSVQ+IGlzT3B0aW1pemluZ0pJVCAwCisgICAgICAgICAg
ICAgICAgICAgIGhhc0NvZGVPcmlnaW5zIDAKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICog
aW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFN0YWNrSXRlcmF0
b3I6OkZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjppc0pTRnJhbWUpOgorICAgICAg
ICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Y2FsbEZyYW1lKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFN0YWNrSXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6U3RhY2tJ
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAg
ICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6ZW5kKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRv
cjo6ZW1wdHkpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvbkpTQ1N0YWNr
KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0KToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlTm9kZS5oOgorICAgICAgICAoUHJvZmlsZU5vZGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OnJldHJpZXZlQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6c2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OnJldHJpZXZl
Q2FsbGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIp
OgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNQcm90b0dldHRlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b1NldHRlcik6
CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
Om9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvT3Bl
cmF0aW9ucy5oOgorCiAyMDEzLTA2LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgTWFyZ2UgdHJ1bmsgcjE0NjY1My4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAogICAg
IGludGVycHJldGVyL0ludGVycHJldGVyLmNwcAogICAgIGludGVycHJldGVyL0pTU3RhY2suY3Bw
CisgICAgaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAKICAgICBpbnRlcnByZXRlci9WTUlu
c3BlY3Rvci5jcHAKIAogICAgIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1MTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC00MzYsNiArNDM2LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlUHJlZml4LmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlz
aW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzEsNiArMTcxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcCBcCiAgICAgaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIFwKICAgICBp
bnRlcnByZXRlci9KU1N0YWNrLmNwcCBcCisgICAgaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5j
cHAgXAogICAgIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBcCiAgICAgaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgXAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTUxMzUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNiBCam9lcm4gR3JhZiAoYmpv
ZXJuLmdyYWZAZ21haWwuY29tKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zOCw2ICszOCw3IEBACiAjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiU2Ft
cGxpbmdUb29sLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRp
by5oPgpAQCAtMzI2LDE1ICszMjcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uSlNDCiAgICAgU3RyaW5nQnVpbGRlciB0cmFjZTsKICAgICB0cmFjZS5hcHBlbmRMaXRl
cmFsKCItLT4gU3RhY2sgdHJhY2U6XG4iKTsKIAotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFj
a1RyYWNlOwotICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFj
ZSk7CiAgICAgaW50IGkgPSAwOwotCi0gICAgZm9yIChWZWN0b3I8U3RhY2tGcmFtZT46Oml0ZXJh
dG9yIGl0ZXIgPSBzdGFja1RyYWNlLmJlZ2luKCk7IGl0ZXIgPCBzdGFja1RyYWNlLmVuZCgpOyBp
dGVyKyspIHsKLSAgICAgICAgU3RhY2tGcmFtZSBsZXZlbCA9ICppdGVyOwotICAgICAgICB0cmFj
ZS5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiAgICAlaSAgICVzXG4iLCBpLCBsZXZlbC50b1N0cmlu
ZyhleGVjKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIGkrKzsKLSAgICB9CisgICAgZm9yIChT
dGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigpOyBpdGVyICE9IGV4ZWMtPmVuZCgpOyAr
K2l0ZXIsICsraSkKKyAgICAgICAgdHJhY2UuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIgICAgJWkg
ICAlc1xuIiwgaSwgaXRlci0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgZnByaW50
ZihzdGRlcnIsICIlcyIsIHRyYWNlLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDE1MTM1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMTMgKzMwLDEzIEBACiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkluaXRp
YWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KLSNp
bmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRlci5oPgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tP
YmplY3QuaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3IuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCkBAIC0yMDUsMzYgKzIwNSwyOSBAQCBKU1N0cmluZ1JlZiBKU0NvbnRleHRD
cmVhdGVCYWNrdHJhY2UoSlNDCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAg
ICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBleGVjLT5pbnRlcnByZXRlcigp
LT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIG1heFN0YWNrU2l6ZSk7CisgICAgc2l6ZV90IGkg
PSAwOworICAgIEFTU0VSVChtYXhTdGFja1NpemUpOworICAgIGZvciAoU3RhY2tJdGVyYXRvciBp
dGVyID0gZXhlYy0+YmVnaW4oKTsgaXRlciAhPSBleGVjLT5lbmQoKSAmJiBtYXhTdGFja1NpemUt
LTsgKytpdGVyLCArK2kpIHsKKyAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IGl0ZXItPmNhbGxl
ZSgpOworICAgICAgICAvLyBJZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0IHdlJ3ZlIG5vdCBhZGRl
ZCBhbnkgZnJhbWUgeWV0LCB3ZSBzaG91bGQKKyAgICAgICAgLy8gc3RpbGwgYWRkIHRoZSBmcmFt
ZSwgYmVjYXVzZSBzb21ldGhpbmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1cyBhcmd1bWVudHMuCisg
ICAgICAgIGlmICghY2FsbGVlICYmIGkpCisgICAgICAgICAgICBicmVhazsKIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3RhY2tUcmFjZS5zaXplKCk7IGkrKykgewotICAgICAgICBTdHJp
bmcgdXJsU3RyaW5nOwotICAgICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lOwotICAgICAgICBTdGFj
a0ZyYW1lJiBmcmFtZSA9IHN0YWNrVHJhY2VbaV07Ci0gICAgICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBmcmFtZS5jYWxsZWUuZ2V0KCk7Ci0gICAgICAgIGlmIChmcmFtZS5jYWxsZWUpCi0gICAgICAg
ICAgICBmdW5jdGlvbk5hbWUgPSBmcmFtZS5mcmllbmRseUZ1bmN0aW9uTmFtZShleGVjKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYWxsZXIgaXMgdW5rbm93biwgYnV0IGlmIGZy
YW1lIGlzIGVtcHR5IHdlIHNob3VsZCBzdGlsbCBhZGQgdGhlIGZyYW1lLCBiZWNhdXNlCi0gICAg
ICAgICAgICAvLyBzb21ldGhpbmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1cyBhcmd1bWVudHMuCi0g
ICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyID0gZnJhbWUubGluZSgpOwogICAgICAgICBpZiAoIWJ1
aWxkZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcjJyk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGkp
OwogICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChz
dGFja1RyYWNlW2ldLmZyaWVuZGx5RnVuY3Rpb25OYW1lKGV4ZWMpKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoaXRlci0+ZnVuY3Rpb25OYW1lKCkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIigpIGF0ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzdGFja1RyYWNlW2ldLmZy
aWVuZGx5U291cmNlVVJMKCkpOwotICAgICAgICBpZiAoZnJhbWUuY29kZVR5cGUgIT0gU3RhY2tG
cmFtZU5hdGl2ZUNvZGUpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaXRlci0+c291cmNlVVJM
KCkpOworICAgICAgICBpZiAoaXRlci0+aXNKU0ZyYW1lKCkpIHsKICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihsaW5lTnVt
YmVyKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGl0ZXItPmxpbmUoKSk7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKCFmdW5jdGlvbikKKworICAgICAgICBpZiAoIWNhbGxlZSkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDE1MTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDI2LDYg
KzI0MjYsMTggQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvci5jcHAiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGludGVycHJldGVyXFN0YWNrSXRl
cmF0b3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvclByaXZhdGUuaCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJwcmV0ZXJcVk1JbnNw
ZWN0b3IuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjIyLDYgKzIyMiw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxp
bnRlcnByZXRlclxDYWxsRnJhbWUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGludGVycHJldGVyXEludGVycHJldGVyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxpbnRlcnByZXRlclxKU1N0YWNrLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9yLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caml0XENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCIgLz4NCkBA
IC01NTUsNiArNTU2LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVy
XEpTU3RhY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxK
U1N0YWNrSW5saW5lcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJl
dGVyXFJlZ2lzdGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0
ZXJcU3RhY2tJdGVyYXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVy
cHJldGVyXFN0YWNrSXRlcmF0b3JQcml2YXRlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxDb21wYWN0SklUQ29kZU1hcC5oIiAvPg0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE1
MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMjg1LDYgKzI4
NSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxKU1N0YWNrLmNw
cCI+DQogICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGls
ZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9y
LmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rv
ci5jcHAiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbENv
bXBpbGU+DQpAQCAtMTIxNCw2ICsxMjE3LDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxpbnRlcnByZXRlclxSZWdpc3Rlci5oIj4NCiAgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9G
aWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGlu
dGVycHJldGVyXFN0YWNrSXRlcmF0b3IuaCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxp
bnRlcnByZXRlclxTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIj4NCisgICAgICA8RmlsdGVyPmludGVy
cHJldGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9yLmgiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJw
cmV0ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC05NTUsNiArOTU1LDEwIEBACiAJCUZFMjQ1OTYyMTc2MDFENTgwMDc0RkNFMCAvKiBDYWxsRnJh
bWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTI0NTk2MTE3NjAxRDU4MDA3NEZDRTAgLyogQ2FsbEZyYW1lSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNEEzMzFGMTVCRDJF
MDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0
b3IuY3BwICovOyB9OwogCQlGRTRBMzMyMDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFF
MTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNTI2QkQ1MTc2NjNBODQwMEIxMjBEQyAvKiBT
dGFja0l0ZXJhdG9yUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU1MjZCRDQxNzY2M0E4NDAwQjEyMERDIC8qIFN0YWNrSXRlcmF0b3JQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RkU2N0RCOTMxNzUxOUI0QTAwNkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY3REI5MDE3NTE5QjRBMDA2QTgx
NEYgLyogSlNTdGFja0lubGluZXMuaCAqLzsgfTsKKwkJRkU2N0RCOTQxNzUxOUI0QTAwNkE4MTRG
IC8qIFN0YWNrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU2N0RCOTExNzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuY3Bw
ICovOyB9OworCQlGRTY3REI5NTE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2N0RCOTIxNzUx
OUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTk0MDMyMjE3NDQ0MjU5MDA0N0NGNkUgLyogSklU
U3R1YnNYODZDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFOTQwMzIxMTc0NDQyNTkwMDQ3Q0Y2RSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQ0U3NDU3
MTc0NTQ1NjUwMEZGOTMwMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUNFNzQ1NjE3NDU0NTY1MDBG
RjkzMDAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICovOyB9OwogCQlGRUQyODdCMjE1
RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9w
Y29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0xOTkyLDYgKzE5OTYsMTAgQEAKIAkJRkUyNDU5NjExNzYwMUQ1ODAwNzRGQ0UwIC8qIENhbGxG
cmFtZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEZyYW1l
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3
MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkU1MjZCRDQxNzY2M0E4NDAwQjEyMERDIC8qIFN0YWNrSXRlcmF0b3JQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrSXRlcmF0b3JQcml2YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjdEQjkwMTc1MTlCNEEwMDZBODE0RiAv
KiBKU1N0YWNrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0
YWNrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTY3REI5MTE3NTE5
QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdGFja0l0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkU2N0RCOTIxNzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTk0MDMyMTE3NDQ0MjU5MDA0N0NGNkUgLyogSklUU3R1YnNYODZD
b21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YnNYODZDb21t
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVDRTc0NTYxNzQ1NDU2NTAwRkY5
MzAwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkVEMjg3QjExNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50T3Bjb2RlLmg7IHBhdGgg
PSBsbGludC9MTEludE9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI4
Miw3ICsyMjkwLDExIEBACiAJCQkJMTQyOUQ3N0IwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJl
dGVyLmggKi8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIEpTU3RhY2suY3BwICov
LAogCQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBKU1N0YWNrLmggKi8sCisJCQkJRkU2
N0RCOTAxNzUxOUI0QTAwNkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggKi8sCiAJCQkJMTQ5QjI0
RkYwRDhBRjZEMTAwOUNCOEM3IC8qIFJlZ2lzdGVyLmggKi8sCisJCQkJRkU2N0RCOTExNzUxOUI0
QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuY3BwICovLAorCQkJCUZFNjdEQjkyMTc1MTlCNEEw
MDZBODE0RiAvKiBTdGFja0l0ZXJhdG9yLmggKi8sCisJCQkJRkU1MjZCRDQxNzY2M0E4NDAwQjEy
MERDIC8qIFN0YWNrSXRlcmF0b3JQcml2YXRlLmggKi8sCiAJCQkJRkU0QTMzMUQxNUJEMkUwNzAw
NkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLywKIAkJCQlGRTRBMzMxRTE1QkQyRTA3MDA2RjU0
RjMgLyogVk1JbnNwZWN0b3IuaCAqLywKIAkJCSk7CkBAIC0zMjY0LDYgKzMyNzYsOCBAQAogCQkJ
CTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNjdEQjk1MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFj
a0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTUyNkJENTE3NjYzQTg0MDBCMTIwREMg
LyogU3RhY2tJdGVyYXRvclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVGMTc0
MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTI0
NTk2MjE3NjAxRDU4MDA3NEZDRTAgLyogQ2FsbEZyYW1lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkVGNjgzNjAxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2OTksNiArMzcxMyw3IEBACiAJCQkJMEZEODJFNTQxNDFEQUVFRTAwMTc5
Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERGMDREQTE2QjM5
OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFNjdEQjkzMTc1MTlCNEEwMDZBODE0RiAvKiBKU1N0YWNrSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0
cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNE
MDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAt
NDIzMCw2ICs0MjQ1LDcgQEAKIAkJCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkRCNjQ2NDBGOTVDNkZDMDBE
N0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNTZBMUQ1MTUwMDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFNjdEQjk0MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJh
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRCMkNDRjE3NDJEN0Q4MDA3QjNDMUIg
LyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlz
aW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw5OCArNjcsNiBAQCB2b2lkIENhbGxGcmFtZTo6
c2V0Q3VycmVudFZQQyhJbnN0cnVjdGlvCiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKLUNhbGxGcmFtZSogQ2FsbEZyYW1lOjp0cnVlQ2FsbEZyYW1lKCkKLXsKLSAgICAvLyBBbSBJ
IGFuIGlubGluZSBjYWxsIGZyYW1lPyBJZiBzbywgd2UncmUgZG9uZS4KLSAgICBpZiAoaXNJbmxp
bmVkRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgCi0gICAgLy8gSWYgSSBkb24n
dCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBJJ20gbm90IERGRyBjb2RlLCBzbyBJJ20gdGhlIHRy
dWUgY2FsbCBmcmFtZS4KLSAgICBDb2RlQmxvY2sqIG1hY2hpbmVDb2RlQmxvY2sgPSBjb2RlQmxv
Y2soKTsKLSAgICBpZiAoIW1hY2hpbmVDb2RlQmxvY2spCi0gICAgICAgIHJldHVybiB0aGlzOwot
ICAgIAotICAgIC8vIElmIHRoZSBjb2RlIGJsb2NrIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgb3Jp
Z2lucywgdGhlbiB0aGVyZSB3YXMgbm8gaW5saW5pbmcsIHNvCi0gICAgLy8gSSdtIGRvbmUuCi0g
ICAgaWYgKCFtYWNoaW5lQ29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKQotICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAKLSAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBDb2RlT3JpZ2luLiBJ
ZiB3ZSBkb24ndCBoYXZlIGEgcGMgc2V0IHRoZW4gdGhlIG9ubHkgd2F5Ci0gICAgLy8gdGhhdCB0
aGlzIG1ha2VzIHNlbnNlIGlzIGlmIHRoZSBDb2RlT3JpZ2luIGluZGV4IHdhcyBzZXQgaW4gdGhl
IGNhbGwgZnJhbWUuCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOwotICAgIEFTU0VSVChtYWNoaW5lQ29k
ZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSk7Ci0gICAgaWYgKCFtYWNoaW5lQ29kZUJs
b2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSkgewotICAgICAgICAvLyBTZWUgYWJvdmUuIElu
IHJlbGVhc2UgYnVpbGRzLCB3ZSB0cnkgdG8gcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjcmFzaGlu
ZyBldmVuCi0gICAgICAgIC8vIHRob3VnaCBzdGFjayB3YWxraW5nIHdpbGwgYmUgZ29vZmVkIHVw
LgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgY29kZU9yaWdpbiA9IG1hY2hpbmVDb2Rl
QmxvY2stPmNvZGVPcmlnaW4oaW5kZXgpOwotCi0gICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIHRoaXM7IC8vIE5vdCBjdXJyZW50bHkgaW4gaW5saW5l
ZCBjb2RlLgotCi0gICAgQ29kZU9yaWdpbiBpbm5lck1vc3RDb2RlT3JpZ2luID0gY29kZU9yaWdp
bjsKLQotICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOykgewotICAgICAgICBJbmxpbmVD
YWxsRnJhbWUqIG5leHRJbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5p
bmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIAotICAgICAgICBDYWxsRnJhbWUqIGlubGluZWRDYWxs
ZXIgPSB0aGlzICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgCi0gICAg
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZUFzRnVuY3Rpb24gPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZS5nZXQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbGwgaW4gdGhlIGlubGluZWRDYWxsZXIK
LSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0Q29kZUJsb2NrKGlubGluZUNhbGxGcmFtZS0+YmFz
ZWxpbmVDb2RlQmxvY2soKSk7Ci0gICAgICAgIGlmIChjYWxsZWVBc0Z1bmN0aW9uKQotICAgICAg
ICAgICAgaW5saW5lZENhbGxlci0+c2V0U2NvcGUoY2FsbGVlQXNGdW5jdGlvbi0+c2NvcGUoKSk7
Ci0gICAgICAgIGlmIChuZXh0SW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgaW5saW5lZENh
bGxlci0+c2V0Q2FsbGVyRnJhbWUodGhpcyArIG5leHRJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5saW5lZENhbGxlci0+c2V0Q2FsbGVy
RnJhbWUodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRJbmxpbmVD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
KTsKLSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlubGluZWRDYWxsZXItPnNldElzSW5s
aW5lZEZyYW1lKCk7Ci0gICAgICAgIGlmIChjYWxsZWVBc0Z1bmN0aW9uKQotICAgICAgICAgICAg
aW5saW5lZENhbGxlci0+c2V0Q2FsbGVlKGNhbGxlZUFzRnVuY3Rpb24pOwotICAgICAgICAKLSAg
ICAgICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwotICAgICAgICBpbmxp
bmVDYWxsRnJhbWUgPSBuZXh0SW5saW5lQ2FsbEZyYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gdGhpcyArIGlubmVyTW9zdENvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dDsKLX0KLSAgICAgICAgCi1DYWxsRnJhbWUqIENhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1lKCkK
LXsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gdGhpcy0+Y2FsbGVyRnJhbWUoKS0+cmVt
b3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLSAgICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAgICBy
ZXR1cm4gY2FsbGVyRnJhbWU7Ci0KLSAgICAvLyB0aGlzIC0+IFRoZSBjYWxsZWU7IHRoaXMgaXMg
ZWl0aGVyIGFuIGlubGluZWQgY2FsbGVlIGluIHdoaWNoIGNhc2UgaXQgYWxyZWFkeSBoYXMKLSAg
ICAvLyAgICBhIHBvaW50ZXIgdG8gdGhlIHRydWUgY2FsbGVyLiBPdGhlcndpc2UgaXQgY29udGFp
bnMgY3VycmVudCBQQyBpbiB0aGUgbWFjaGluZQotICAgIC8vICAgIGNhbGxlci4KLSAgICAvLwot
ICAgIC8vIG1hY2hpbmVDYWxsZXIgLT4gVGhlIGNhbGxlciBhY2NvcmRpbmcgdG8gdGhlIG1hY2hp
bmUsIHdoaWNoIG1heSBiZSB6ZXJvIG9yCi0gICAgLy8gICAgbW9yZSBmcmFtZXMgYWJvdmUgdGhl
IHRydWUgY2FsbGVyIGR1ZSB0byBpbmxpbmluZy4KLQotICAgIC8vIEFtIEkgYW4gaW5saW5lIGNh
bGwgZnJhbWU/IElmIHNvLCB3ZSdyZSBkb25lLgotICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQot
ICAgICAgICByZXR1cm4gY2FsbGVyRnJhbWU7Ci0gICAgCi0gICAgLy8gSSBhbSBhIG1hY2hpbmUg
Y2FsbCBmcmFtZSwgc28gdGhlIHF1ZXN0aW9uIGlzOiBpcyBteSBjYWxsZXIgYSBtYWNoaW5lIGNh
bGwgZnJhbWUKLSAgICAvLyB0aGF0IGhhcyBpbmxpbmVzIG9yIGEgbWFjaGluZSBjYWxsIGZyYW1l
IHRoYXQgZG9lc24ndD8KLSAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmICghY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4gY2Fs
bGVyRnJhbWU7Ci0gICAgQVNTRVJUKCFjYWxsZXJGcmFtZS0+aXNJbmxpbmVkRnJhbWUoKSk7Ci0g
ICAgCi0gICAgcmV0dXJuIGNhbGxlckZyYW1lLT50cnVlQ2FsbEZyYW1lKCktPnJlbW92ZUhvc3RD
YWxsRnJhbWVGbGFnKCk7Ci19Ci0KIHVuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRG
cm9tQ29kZU9yaWdpbkluZGV4KCkKIHsKICAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0NvZGVPcmln
aW5JbmRleCgpKTsKQEAgLTE4OSw0ICs5NywyNCBAQCBSZWdpc3RlciogQ2FsbEZyYW1lOjpmcmFt
ZUV4dGVudEludGVybmFsCiAgICAgcmV0dXJuIHJlZ2lzdGVycygpICsgY29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVyczsKIH0KIAorU3RhY2tJdGVyYXRvciBDYWxsRnJhbWU6OmJlZ2luKFN0
YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAgICBpZiAoIXRoaXMpCisgICAg
ICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjplbXB0eSgpOworCisgICAgU3RhY2tJdGVyYXRvciBp
dGVyKCZ2bSgpKTsKKyAgICBpdGVyLmJlZ2luQXQodGhpcywgZmlsdGVyKTsKKyAgICByZXR1cm4g
aXRlcjsKK30KKworU3RhY2tJdGVyYXRvciBDYWxsRnJhbWU6OmJlZ2luQXQoSlNGdW5jdGlvbiog
Y2FsbGVlRnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sK
KyAgICBpZiAoIXRoaXMpCisgICAgICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjplbXB0eSgpOwor
CisgICAgU3RhY2tJdGVyYXRvciBpdGVyKCZ2bSgpKTsKKyAgICBpdGVyLmJlZ2luQXQoY2FsbGVl
RnVuY3Rpb25PYmosIGZpbHRlcik7CisgICAgcmV0dXJuIGl0ZXI7ICAgIAorfQorCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZp
c2lvbiAxNTEzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU1N0YWNr
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0
ZXIuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIgogCiBuYW1lc3BhY2UgSlND
ICB7CiAKQEAgLTI3MiwyMSArMjczLDEzIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIHZvaWQgc2V0SW5saW5lQ2FsbEZyYW1lKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhp
cylbSlNTdGFjazo6UmV0dXJuUENdID0gaW5saW5lQ2FsbEZyYW1lOyB9Ci0KLSAgICAgICAgLy8g
Q2FsbCB0aGlzIHRvIGdldCB0aGUgc2VtYW50aWNhbGx5IGNvcnJlY3QgSlMgQ2FsbEZyYW1lKiBm
b3IgdGhlCi0gICAgICAgIC8vIGN1cnJlbnRseSBleGVjdXRpbmcgZnVuY3Rpb24uCi0gICAgICAg
IENhbGxGcmFtZSogdHJ1ZUNhbGxGcmFtZSgpOwotCi0gICAgICAgIC8vIENhbGwgdGhpcyB0byBn
ZXQgdGhlIHNlbWFudGljYWxseSBjb3JyZWN0IEpTIENhbGxGcmFtZSogY29ycmVzcG9uZGluZwot
ICAgICAgICAvLyB0byB0aGUgY2FsbGVyLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGlu
ZyBpbmxpbmluZyBhbmQgdGhlCi0gICAgICAgIC8vIEhvc3RDYWxsRnJhbWVGbGFnIHN0dWZmLgot
ICAgICAgICBDYWxsRnJhbWUqIHRydWVDYWxsZXJGcmFtZSgpOwotI2Vsc2UKLSAgICAgICAgQ2Fs
bEZyYW1lKiB0cnVlQ2FsbEZyYW1lKEFic3RyYWN0UEMpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICAg
ICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbGVyRnJhbWUoKSB7IHJldHVybiBjYWxsZXJGcmFtZSgpLT5y
ZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpOyB9CiAjZW5kaWYKICAgICAgICAgQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZU5vRmxhZ3MoKSB7IHJldHVybiBjYWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2Fs
bEZyYW1lRmxhZygpOyB9CiAKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRv
ciBiZWdpbihTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yIGJlZ2luQXQoSlNGdW5jdGlvbiogY2FsbGVl
RnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3I6OkZyYW1lKiBlbmQoKSB7IHJldHVy
biBTdGFja0l0ZXJhdG9yOjplbmQoKTsgfSAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnRwdHJfdCBIb3N0Q2FsbEZyYW1lRmxhZyA9IDE7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgc190aGlzQXJndW1lbnRPZmZzZXQgPSAtMSAtIEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYg
KzYzLDcgQEAKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdpc3Rl
ci5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lu
bGluZXMuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTIwMCw4ICsyMDEsNiBAQCBJbnRlcnBy
ZXRlcjo6U3RhY2tQb2xpY3k6OlN0YWNrUG9saWN5KEluCiB9CiAKIAotc3RhdGljIENhbGxGcmFt
ZSogZ2V0Q2FsbGVySW5mbyhWTSosIENhbGxGcmFtZSosIHVuc2lnbmVkJiBieXRlY29kZU9mZnNl
dCwgQ29kZUJsb2NrKiYgY2FsbGVyT3V0KTsKLQogLy8gUmV0dXJucyB0aGUgZGVwdGggb2YgdGhl
IHNjb3BlIGNoYWluIHdpdGhpbiBhIGdpdmVuIGNhbGwgZnJhbWUuCiBzdGF0aWMgaW50IGRlcHRo
KENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Njb3BlKiBzYykKIHsKQEAgLTQyMSwxMiArNDIwLDgg
QEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIGlmIChwYy5o
YXNKSVRSZXR1cm5BZGRyZXNzKCkpCiAgICAgICAgIGRhdGFMb2dGKCJbUmV0dXJuSklUUENdICAg
ICAgICAgICAgICB8ICUxMHAgfCAlcCBcbiIsIGl0LCBwYy5qaXRSZXR1cm5BZGRyZXNzKCkudmFs
dWUoKSk7CiAjZW5kaWYKLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7Ci0gICAgaW50
IGxpbmUgPSAwOwotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gMDsKLSAgICBnZXRD
YWxsZXJJbmZvKCZjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNh
bGxlckNvZGVCbG9jayk7Ci0gICAgbGluZSA9IGNhbGxlckNvZGVCbG9jay0+bGluZU51bWJlckZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBkYXRhTG9nRigiW1JldHVyblZQ
Q10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBpdCwgYnl0ZWNvZGVP
ZmZzZXQsIGxpbmUpOworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGNhbGxGcmFtZS0+YmVnaW4o
KTsKKyAgICBkYXRhTG9nRigiW1JldHVyblZQQ10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQg
KGxpbmUgJWQpXG4iLCBpdCwgaXRlci0+Ynl0ZWNvZGVPZmZzZXQoKSwgaXRlci0+bGluZSgpKTsK
ICAgICArK2l0OwogICAgIGRhdGFMb2dGKCJbQ29kZUJsb2NrXSAgICAgICAgICAgICAgICB8ICUx
MHAgfCAlcCBcbiIsIGl0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKICAgICArK2l0OwpAQCAt
NDc2LDggKzQ3MSwxMCBAQCBib29sIEludGVycHJldGVyOjppc09wY29kZShPcGNvZGUgb3Bjb2Rl
CiAjZW5kaWYKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbGxG
cmFtZShDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIHVuc2ln
bmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYgY29kZUJsb2NrKQorTkVWRVJfSU5MSU5F
IGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZShTdGFja0l0ZXJhdG9yJiBpdGVyLCBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlKQogeworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gaXRl
ci0+Y2FsbEZyYW1lKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpdGVyLT5jb2RlQmxv
Y2soKTsKICAgICBDb2RlQmxvY2sqIG9sZENvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICBKU1Nj
b3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKIApAQCAtNTA3LDEwICs1MDQsNyBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsCiAKICAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIGNhbGxGcmFtZS0+
dm0oKS50b3BDYWxsRnJhbWUgPSBjYWxsZXJGcmFtZTsKLSAgICBpZiAoY2FsbGVyRnJhbWUtPmhh
c0hvc3RDYWxsRnJhbWVGbGFnKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYWxsRnJh
bWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVP
ZmZzZXQsIGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICFjYWxsZXJG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5kU291
cmNlVG9FcnJvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXJyb3JJbnN0YW5jZSogZXhjZXB0aW9u
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKQEAgLTU2NSw2NiArNTU5LDYgQEAgc3RhdGljIHZv
aWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbQogICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0
KCp2bSwgdm0tPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKHZtLCBtZXNzYWdlKSk7
CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBnZXRCeXRlY29kZU9mZnNldEZvckNhbGxGcmFtZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPnJlbW92ZUhv
c3RDYWxsRnJhbWVGbGFnKCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgIGlmICghY29kZUJsb2NrKQotICAgICAgICByZXR1cm4gMDsKLSNp
ZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gY29kZUJs
b2NrLT5jb2RlT3JpZ2luKGNhbGxGcmFtZS0+bG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpKS5i
eXRlY29kZUluZGV4OwotI2VuZGlmCi0gICAgcmV0dXJuIGNhbGxGcmFtZS0+bG9jYXRpb25Bc0J5
dGVjb2RlT2Zmc2V0KCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIENhbGxGcmFtZSogZ2V0Q2FsbGVy
SW5mbyhWTSogdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZz
ZXQsIENvZGVCbG9jayomIGNhbGxlcikKLXsKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIGJ5
dGVjb2RlT2Zmc2V0ID0gMDsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFzSG9zdENhbGxGcmFt
ZUZsYWcoKSk7Ci0gICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPnRy
dWVDYWxsZXJGcmFtZSgpOwotICAgIEFTU0VSVCghdHJ1ZUNhbGxlckZyYW1lLT5oYXNIb3N0Q2Fs
bEZyYW1lRmxhZygpKTsKLQotICAgIGlmICh0cnVlQ2FsbGVyRnJhbWUgPT0gQ2FsbEZyYW1lOjpu
b0NhbGxlcigpIHx8ICF0cnVlQ2FsbGVyRnJhbWUgfHwgIXRydWVDYWxsZXJGcmFtZS0+Y29kZUJs
b2NrKCkpIHsKLSAgICAgICAgY2FsbGVyID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWVDYWxsZXJG
cmFtZTsKLSAgICB9Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSB0cnVl
Q2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGlmICh0cnVlQ2FsbGVyRnJhbWUtPmhhc0xv
Y2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSkKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSB0cnVl
Q2FsbGVyRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0RnJvbUNvZGVPcmlnaW5JbmRleCgpOwotICAgIGVs
c2UKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSB0cnVlQ2FsbGVyRnJhbWUtPmxvY2F0aW9uQXNC
eXRlY29kZU9mZnNldCgpOwotCi0gICAgY2FsbGVyID0gY2FsbGVyQ29kZUJsb2NrOwotICAgIHJl
dHVybiB0cnVlQ2FsbGVyRnJhbWU7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGNvbnN0IFN0
cmluZyBnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewot
ICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKLSAgICByZXR1
cm4gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVSTCgp
OwotfQotCi1zdGF0aWMgU3RhY2tGcmFtZUNvZGVUeXBlIGdldFN0YWNrRnJhbWVDb2RlVHlwZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFzSG9zdENh
bGxGcmFtZUZsYWcoKSk7Ci0KLSAgICBzd2l0Y2ggKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmNv
ZGVUeXBlKCkpIHsKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICByZXR1cm4gU3RhY2tGcmFt
ZUV2YWxDb2RlOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICByZXR1cm4gU3RhY2tG
cmFtZUZ1bmN0aW9uQ29kZTsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgICAgIHJldHVybiBT
dGFja0ZyYW1lR2xvYmFsQ29kZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gU3RhY2tGcmFtZUdsb2JhbENvZGU7Ci19Ci0KIHVuc2lnbmVkIFN0
YWNrRnJhbWU6OmxpbmUoKQogewogICAgIHJldHVybiBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmxp
bmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkgKyBsaW5lT2Zmc2V0IDog
MDsKQEAgLTY3MCwzNCArNjA0LDI1IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0cmluZyhDYWxs
RnJhbWUqIGMKIHZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJh
bWU+JiByZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewogICAgIFZNJiB2bSA9IG1fdm07
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWUtPnJlbW92ZUhvc3RD
YWxsRnJhbWVGbGFnKCk7Ci0gICAgaWYgKCFjYWxsRnJhbWUgfHwgY2FsbEZyYW1lID09IENhbGxG
cmFtZTo6bm9DYWxsZXIoKSkgCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IGdldEJ5dGVjb2RlT2Zmc2V0Rm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAg
Y2FsbEZyYW1lID0gY2FsbEZyYW1lLT50cnVlQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKCFjYWxsRnJh
bWUpCi0gICAgICAgIHJldHVybjsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICB3aGlsZSAoY2FsbEZyYW1lICYmIGNhbGxGcmFt
ZSAhPSBDYWxsRnJhbWU6Om5vQ2FsbGVyKCkgJiYgbWF4U3RhY2tTaXplLS0pIHsKLSAgICAgICAg
U3RyaW5nIHNvdXJjZVVSTDsKLSAgICAgICAgaWYgKGNhbGxlckNvZGVCbG9jaykgewotICAgICAg
ICAgICAgc291cmNlVVJMID0gZ2V0U291cmNlVVJMRnJvbUNhbGxGcmFtZShjYWxsRnJhbWUpOwot
ICAgICAgICAgICAgU3RhY2tGcmFtZSBzKFN0cm9uZzxKU09iamVjdD4odm0sIGNhbGxGcmFtZS0+
Y2FsbGVlKCkpLAotICAgICAgICAgICAgICAgIGdldFN0YWNrRnJhbWVDb2RlVHlwZShjYWxsRnJh
bWUpLAotICAgICAgICAgICAgICAgIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4odm0sIGNhbGxlckNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgICAgIFN0cm9uZzxVbmxp
bmtlZENvZGVCbG9jaz4odm0sIGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSks
Ci0gICAgICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLT5zb3VyY2UoKSwKLSAgICAgICAgICAg
ICAgICBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8oKSwKLSAgICAg
ICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpLAotICAgICAgICAgICAg
ICAgIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAgICAgICAgICAgIHNvdXJjZVVSTCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWU7CisgICAgU3RhY2tJdGVyYXRvciBp
dGVyID0gY2FsbEZyYW1lLT5iZWdpbigpOworICAgIGZvciAoOyBpdGVyICE9IGNhbGxGcmFtZS0+
ZW5kKCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlcikgeworICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGl0ZXItPmNvZGVCbG9jaygpOworICAgICAgICBpZiAoY29kZUJsb2NrKSB7Cisg
ICAgICAgICAgICBTdGFja0ZyYW1lIHMoU3Ryb25nPEpTT2JqZWN0Pih2bSwgaXRlci0+Y2FsbGVl
KCkpLAorICAgICAgICAgICAgICAgIFN0YWNrRnJhbWVDb2RlVHlwZShpdGVyLT5jb2RlVHlwZSgp
KSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KHZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8VW5saW5rZWRDb2Rl
QmxvY2s+KHZtLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpLAorICAgICAgICAgICAg
ICAgIGNvZGVCbG9jay0+c291cmNlKCksCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+bGluZU5vKCksCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5zb3Vy
Y2VPZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBpdGVyLT5ieXRlY29kZU9mZnNldCgpLAorICAg
ICAgICAgICAgICAgIGl0ZXItPnNvdXJjZVVSTCgpKTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RhY2tGcmFtZSBzKFN0cm9u
ZzxKU09iamVjdD4odm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCkpLCBTdGFja0ZyYW1lTmF0aXZlQ29k
ZSwgU3Ryb25nPEV4ZWN1dGFibGVCYXNlPigpLCBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KCks
IDAsIDAsIDAsIDAsIFN0cmluZygpKTsKKyAgICAgICAgICAgIFN0YWNrRnJhbWUgcyhTdHJvbmc8
SlNPYmplY3Q+KHZtLCBpdGVyLT5jYWxsZWUoKSksIFN0YWNrRnJhbWVOYXRpdmVDb2RlLCBTdHJv
bmc8RXhlY3V0YWJsZUJhc2U+KCksIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4oKSwgMCwgMCwg
MCwgMCwgU3RyaW5nKCkpOwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocyk7CiAgICAgICAg
IH0KLSAgICAgICAgY2FsbEZyYW1lID0gZ2V0Q2FsbGVySW5mbygmdm0sIGNhbGxGcmFtZSwgYnl0
ZWNvZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgfQogfQogCkBAIC03NzMsMTIgKzY5
OCwyMCBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAKICAgICAv
LyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFt
ZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKLSAgICB3aGls
ZSAoaXNUZXJtaW5hdGlvbiB8fCAhKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7Ci0gICAgICAgIGlmICghdW53aW5kQ2FsbEZy
YW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGJ5dGVjb2RlT2Zmc2V0LCBjb2RlQmxvY2sp
KSB7Ci0gICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1l
LT52bSgpLmVuYWJsZWRQcm9maWxlcigpKQotICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNl
cHRpb25VbndpbmQoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9
CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGZvciAoU3RhY2tJdGVyYXRvciBp
dGVyID0gY2FsbEZyYW1lLT5iZWdpbigpOyBpdGVyICE9IGNhbGxGcmFtZS0+ZW5kKCk7ICsraXRl
cikgeworICAgICAgICBjYWxsRnJhbWUgPSBpdGVyLT5jYWxsRnJhbWUoKTsKKyAgICAgICAgY29k
ZUJsb2NrID0gaXRlci0+Y29kZUJsb2NrKCk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gaXRl
ci0+Ynl0ZWNvZGVPZmZzZXQoKTsKKworICAgICAgICBpZiAoaXNUZXJtaW5hdGlvbiB8fCAhKGhh
bmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCkpKSB7CisgICAgICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShpdGVyLCBleGNlcHRpb25W
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0g
dm0uZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNl
cHRpb25VbndpbmQoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT52bSgpLmVuYWJsZWRQ
cm9maWxlcigpKQpAQCAtMTM3Niw1NyArMTMwOSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEludGVy
cHJldGVyOjpkZWJ1ZyhDYWwKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRSZWFjaEJyZWFrcG9p
bnQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+
c291cmNlSUQoKSwgbGFzdExpbmUsIGNvbHVtbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQotfQotICAgIAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHNGcm9tVk1D
b2RlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikgY29uc3QKLXsK
LSAgICBDYWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZyYW1lID0gZmluZEZ1bmN0aW9uQ2FsbEZyYW1l
RnJvbVZNQ29kZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLSAgICBpZiAoIWZ1bmN0aW9uQ2FsbEZy
YW1lKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50
cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbkNh
bGxGcmFtZSk7Ci0gICAgYXJndW1lbnRzLT50ZWFyT2ZmKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZShhcmd1bWVudHMpOwotfQotCi1KU1ZhbHVlIEludGVycHJldGVyOjpy
ZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uKSBjb25zdAotewotICAgIENhbGxGcmFtZSogZnVuY3Rpb25DYWxsRnJhbWUgPSBm
aW5kRnVuY3Rpb25DYWxsRnJhbWVGcm9tVk1Db2RlKGNhbGxGcmFtZSwgZnVuY3Rpb24pOwotCi0g
ICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAg
IAotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwotICAgIENvZGVCbG9jayogdW51c2VkQ2Fs
bGVyQ29kZUJsb2NrID0gMDsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVy
SW5mbygmY2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbkNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQs
IHVudXNlZENhbGxlckNvZGVCbG9jayk7Ci0gICAgaWYgKCFjYWxsZXJGcmFtZSkKLSAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwotICAgIEpTVmFsdWUgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxl
ZSgpOwotICAgIGlmICghY2FsbGVyKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICAv
LyBTa2lwIG92ZXIgZnVuY3Rpb24gYmluZGluZ3MuCi0gICAgQVNTRVJUKGNhbGxlci5pc09iamVj
dCgpKTsKLSAgICB3aGlsZSAoYXNPYmplY3QoY2FsbGVyKS0+aW5oZXJpdHMoJkpTQm91bmRGdW5j
dGlvbjo6c19pbmZvKSkgewotICAgICAgICBjYWxsZXJGcmFtZSA9IGdldENhbGxlckluZm8oJmNh
bGxGcmFtZS0+dm0oKSwgY2FsbGVyRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWRDYWxsZXJD
b2RlQmxvY2spOwotICAgICAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgICAgICBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7Ci0gICAg
ICAgIGlmICghY2FsbGVyKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIH0KLQot
ICAgIHJldHVybiBjYWxsZXI7Ci19Ci0KLUNhbGxGcmFtZSogSW50ZXJwcmV0ZXI6OmZpbmRGdW5j
dGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uKQotewotICAgIGZvciAoQ2FsbEZyYW1lKiBjYW5kaWRhdGUgPSBjYWxsRnJhbWUt
PnRydWVDYWxsRnJhbWUoKTsgY2FuZGlkYXRlOyBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPnRydWVD
YWxsZXJGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUtPmNhbGxlZSgpID09IGZ1bmN0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7
Ci19Cit9ICAgIAogCiB2b2lkIEludGVycHJldGVyOjplbmFibGVTYW1wbGVyKCkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShy
ZXZpc2lvbiAxNTEzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBSZWdpc3RlcjsKICAgICBjbGFzcyBKU1Njb3BlOwogICAgIGNsYXNzIFNh
bXBsaW5nVG9vbDsKKyAgICBjbGFzcyBTdGFja0l0ZXJhdG9yOwogICAgIHN0cnVjdCBDYWxsRnJh
bWVDbG9zdXJlOwogICAgIHN0cnVjdCBIYW5kbGVySW5mbzsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rp
b247CkBAIC0yMzUsMTcgKzIzNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNPYmpl
Y3QqIGV4ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1lKiwgSlNPYmplY3QqIGZ1bmN0aW9uLCBDb25z
dHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYpOwogICAgICAg
ICBKU1ZhbHVlIGV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgSlNTY29wZSopOwogCi0gICAgICAgIEpTVmFsdWUgcmV0cmlldmVBcmd1bWVudHNG
cm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKLSAgICAgICAgSlNWYWx1
ZSByZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopIGNvbnN0
OwotICAgICAgICAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpT
RnVuY3Rpb24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFy
Z3YsIGludCYgYXJnYyk7CiAgICAgICAgIAogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIo
KSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0KCk7IH0KIAogICAgICAgICBORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIHRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomLCBKU1ZhbHVlJiwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJh
bWUqLCBEZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY29sdW1u
KTsKLSAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyBnZXRUcmFjZUxpbmUoQ2FsbEZyYW1lKiwg
U3RhY2tGcmFtZUNvZGVUeXBlLCBjb25zdCBTdHJpbmcmLCBpbnQpOwotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRz
LCBzaXplX3QgbWF4U3RhY2tTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGFkZFN0YWNrVHJhY2VJZk5lY2Vzc2FyeShDYWxsRnJh
bWUqLCBKU1ZhbHVlIGVycm9yKTsKIAogICAgICAgICB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4ZWNT
dGF0ZSogZXhlYyk7CkBAIC0yNzEsOSArMjY3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW5kUmVwZWF0Q2FsbChDYWxsRnJhbWVDbG9zdXJlJik7CiAgICAgICAgIEpTVmFsdWUg
ZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJik7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wg
dW53aW5kQ2FsbEZyYW1lKENhbGxGcmFtZSomLCBKU1ZhbHVlLCB1bnNpZ25lZCYgYnl0ZWNvZGVP
ZmZzZXQsIENvZGVCbG9jayomKTsKLQotICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBmaW5kRnVu
Y3Rpb25DYWxsRnJhbWVGcm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBnZXRTdGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90
IG1heFN0YWNrU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOworICAg
ICAgICBORVZFUl9JTkxJTkUgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tJdGVyYXRvciYsIEpT
VmFsdWUpOwogCiAgICAgICAgIHZvaWQgZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqKTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDE5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJB
cmd1bWVudHMuaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitTdGFj
a0l0ZXJhdG9yOjpTdGFja0l0ZXJhdG9yKFZNKiB2bSkKKyAgICA6IG1fdm0odm0pCisgICAgLCBt
X2ZyYW1lKG51bGxwdHIpCisgICAgLCBtX2ZpbHRlcihudWxscHRyKQoreworfQorCit2b2lkIFN0
YWNrSXRlcmF0b3I6OmJlZ2luQXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBTdGFja0l0ZXJhdG9y
OjpGcmFtZUZpbHRlciBmaWx0ZXIpCit7CisgICAgaWYgKCFzdGFydEZyYW1lKSB7CisgICAgICAg
IG1fZnJhbWUgPSBudWxscHRyOworICAgICAgICBtX2ZpbHRlciA9IG51bGxwdHI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoJnN0YXJ0RnJhbWUtPnZtKCkgPT0gbV92bSk7
CisgICAgbV9mcmFtZSA9IEZyYW1lOjpjcmVhdGUoc3RhcnRGcmFtZSk7CisgICAgbV9maWx0ZXIg
PSBmaWx0ZXI7CisKKyAgICBtX2ZyYW1lID0gbV9mcmFtZS0+bG9naWNhbEZyYW1lKCk7Cit9CisK
K3ZvaWQgU3RhY2tJdGVyYXRvcjo6YmVnaW5BdChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9i
aiwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQoreworICAgIEFTU0VSVChjYWxs
ZWVGdW5jdGlvbk9iaik7CisgICAgYmVnaW5BdChtX3ZtLT50b3BDYWxsRnJhbWUsIGZpbHRlcik7
CisgICAgZmluZEZyYW1lRm9yRnVuY3Rpb24oY2FsbGVlRnVuY3Rpb25PYmopOworfQorCit2b2lk
IFN0YWNrSXRlcmF0b3I6OmdvdG9OZXh0RnJhbWUoKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1f
ZnJhbWU7CisgICAgd2hpbGUgKGZyYW1lKSB7CisgICAgICAgIGZyYW1lID0gZnJhbWUtPmxvZ2lj
YWxDYWxsZXJGcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lIHx8ICFtX2ZpbHRlciB8fCAhbV9m
aWx0ZXIoZnJhbWUpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fZnJhbWUgPSBm
cmFtZTsKK30KKwordm9pZCBTdGFja0l0ZXJhdG9yOjpmaW5kRnJhbWVGb3JGdW5jdGlvbihKU0Z1
bmN0aW9uKiBmdW5jdGlvbk9iaikKK3sKKyAgICBKU09iamVjdCogdGFyZ2V0Q2FsbGVlID0ganNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KGZ1bmN0aW9uT2JqKTsKKyAgICB3aGlsZSAobV9mcmFtZSkg
eworICAgICAgICBpZiAobV9mcmFtZS0+Y2FsbGVlKCkgPT0gdGFyZ2V0Q2FsbGVlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGdvdG9OZXh0RnJhbWUoKTsKKyAgICB9Cit9CisKK1N0YWNr
SXRlcmF0b3I6OkZyYW1lOjpDb2RlVHlwZSBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Y29kZVR5cGUo
KSBjb25zdAoreworICAgIGlmICghaXNKU0ZyYW1lKCkpCisgICAgICAgIHJldHVybiBDb2RlVHlw
ZTo6TmF0aXZlOworCisgICAgc3dpdGNoIChjb2RlQmxvY2soKS0+Y29kZVR5cGUoKSkgeworICAg
IGNhc2UgRXZhbENvZGU6CisgICAgICAgIHJldHVybiBDb2RlVHlwZTo6RXZhbDsKKyAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKKyAgICAgICAgcmV0dXJuIENvZGVUeXBlOjpGdW5jdGlvbjsKKyAgICBj
YXNlIEdsb2JhbENvZGU6CisgICAgICAgIHJldHVybiBDb2RlVHlwZTo6R2xvYmFsOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDb2RlVHlwZTo6
R2xvYmFsOworfQorCitTdHJpbmcgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSgp
Cit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKyAgICBKU09iamVjdCogY2FsbGVlID0gdGhpcy0+
Y2FsbGVlKCk7CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIENvZGVUeXBl
OjpFdmFsOgorICAgICAgICB0cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb2RlVHlwZTo6TmF0aXZlOgorICAgICAgICBpZiAoY2FsbGVlKQorICAgICAg
ICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSgpLCBj
YWxsZWUpLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rp
b246CisgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJh
bWUoKSwgY2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZVR5cGU6
Okdsb2JhbDoKKyAgICAgICAgdHJhY2VMaW5lID0gImdsb2JhbCBjb2RlIjsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygp
IDogdHJhY2VMaW5lOworfQorCitTdHJpbmcgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OnNvdXJjZVVS
TCgpCit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkg
eworICAgIGNhc2UgQ29kZVR5cGU6OkV2YWw6CisgICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rpb246
CisgICAgY2FzZSBDb2RlVHlwZTo6R2xvYmFsOiB7CisgICAgICAgIFN0cmluZyBzb3VyY2VVUkwg
PSBjb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVSTCgpOworICAgICAgICBp
ZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3VyY2VV
UkwuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDb2RlVHlwZTo6TmF0
aXZlOgorICAgICAgICB0cmFjZUxpbmUgPSAiW25hdGl2ZSBjb2RlXSI7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6
IHRyYWNlTGluZTsKK30KKworU3RyaW5nIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjp0b1N0cmluZygp
Cit7CisgICAgU3RyaW5nQnVpbGRlciB0cmFjZUJ1aWxkOworICAgIFN0cmluZyBmdW5jdGlvbk5h
bWUgPSB0aGlzLT5mdW5jdGlvbk5hbWUoKTsKKyAgICBTdHJpbmcgc291cmNlVVJMID0gdGhpcy0+
c291cmNlVVJMKCk7CisgICAgdHJhY2VCdWlsZC5hcHBlbmQoZnVuY3Rpb25OYW1lKTsKKyAgICBp
ZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFmdW5jdGlvbk5hbWUuaXNF
bXB0eSgpKQorICAgICAgICAgICAgdHJhY2VCdWlsZC5hcHBlbmQoJ0AnKTsKKyAgICAgICAgdHJh
Y2VCdWlsZC5hcHBlbmQoc291cmNlVVJMKTsKKyAgICAgICAgaWYgKGlzSlNGcmFtZSgpKSB7Cisg
ICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZCgnOicpOworICAgICAgICAgICAgdHJhY2VCdWls
ZC5hcHBlbmROdW1iZXIobGluZSgpKTsKKyAgICAgICAgICAgIHRyYWNlQnVpbGQuYXBwZW5kKCc6
Jyk7CisgICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZE51bWJlcihjb2x1bW4oKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRyYWNlQnVpbGQudG9TdHJpbmcoKS5pbXBsKCk7Cit9
CisKK3Vuc2lnbmVkIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpieXRlY29kZU9mZnNldCgpCit7Cisg
ICAgaWYgKCFpc0pTRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGhhc0xvY2F0
aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSkKKyAgICAgICAgcmV0dXJuIGJ5dGVjb2RlT2Zmc2V0RnJv
bUNvZGVPcmlnaW5JbmRleCgpOworICAgIHJldHVybiBsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQo
KTsKK30KKwordW5zaWduZWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmxpbmUoKQoreworICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CisgICAgaWYgKCFjb2RlQmxv
Y2spCisgICAgICAgIHJldHVybiAwOworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKKyAgICBBU1NFUlQodW5s
aW5rZWRDb2RlQmxvY2spOworICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0
ZWNvZGVPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBsaW5lT2Zmc2V0ID0gY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+bGluZU5vKCk7CisgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrLT5s
aW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpICsgbGluZU9mZnNldDsK
K30KKwordW5zaWduZWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNvbHVtbigpCit7CisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKKyAgICBpZiAoIWNvZGVCbG9j
aykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVy
ID0gY29kZUJsb2NrLT5zb3VyY2UoKTsKKyAgICBpZiAoIXNvdXJjZVByb3ZpZGVyKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpbnQgZGl2b3QgPSAwOworICAgIGludCB1bnVzZWRTdGFydE9mZnNl
dCA9IDA7CisgICAgaW50IHVudXNlZEVuZE9mZnNldCA9IDA7CisgICAgcmV0cmlldmVFeHByZXNz
aW9uSW5mbyhkaXZvdCwgdW51c2VkU3RhcnRPZmZzZXQsIHVudXNlZEVuZE9mZnNldCk7CisgICAg
cmV0dXJuIHNvdXJjZVByb3ZpZGVyLT5jaGFyUG9zaXRpb25Ub0NvbHVtbk51bWJlcihkaXZvdCk7
Cit9CisKK0FyZ3VtZW50cyogU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmFyZ3VtZW50cygpCit7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB0aGlzLT5jYWxsRnJhbWUoKTsKKyAgICBBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtKCksIGNhbGxGcmFtZSk7CisgICAg
YXJndW1lbnRzLT50ZWFyT2ZmKGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIGFyZ3VtZW50czsKK30K
Kwordm9pZCBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6cmV0cmlldmVFeHByZXNzaW9uSW5mbyhpbnQm
IGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCkKK3sKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOworICAgIEFTU0VSVChjb2RlQmxvY2sp
OworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKTsKKyAgICB1bmxpbmtlZENvZGVCbG9jay0+ZXhwcmVzc2lvblJh
bmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQoKSwgZGl2b3QsIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpOworICAgIGRpdm90ICs9IGNvZGVCbG9jay0+c291cmNlT2Zmc2V0KCk7Cit9
CisKK1N0YWNrSXRlcmF0b3I6OkZyYW1lKiBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6bG9naWNhbEZy
YW1lKCkKK3sKKyNpZiAhRU5BQkxFKERGR19KSVQpCisgICAgcmV0dXJuIHRoaXM7CisKKyNlbHNl
IC8vICFFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoaXNJbmxpbmVkRnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisKKyAgICAvLyBJZiBJIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrLCB0aGVu
IEknbSBub3QgREZHIGNvZGUsIHNvIEknbSB0aGUgdHJ1ZSBjYWxsIGZyYW1lLgorICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CisgICAgaWYgKCFjb2RlQmxvY2sp
CisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgLy8gSWYgdGhlIGNvZGUgYmxvY2sgZG9lcyBu
b3QgaGF2ZSBhbnkgY29kZSBvcmlnaW5zLCB0aGVuIHRoZXJlIHdhcyBubyBpbmxpbmluZywgc28K
KyAgICAvLyBJJ20gZG9uZS4KKyAgICBpZiAoIWNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgCisgICAgQ29kZUJsb2NrKiBvdXRlck1vc3RDb2Rl
QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgdW5zaWduZWQgaW5kZXggPSBsb2NhdGlvbkFzQ29kZU9y
aWdpbkluZGV4KCk7CisgICAgQVNTRVJUKG91dGVyTW9zdENvZGVCbG9jay0+Y2FuR2V0Q29kZU9y
aWdpbihpbmRleCkpOworICAgIGlmICghb3V0ZXJNb3N0Q29kZUJsb2NrLT5jYW5HZXRDb2RlT3Jp
Z2luKGluZGV4KSkgeworICAgICAgICAvLyBTZWUgYWJvdmUuIEluIHJlbGVhc2UgYnVpbGRzLCB3
ZSB0cnkgdG8gcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjcmFzaGluZyBldmVuCisgICAgICAgIC8v
IHRob3VnaCBzdGFjayB3YWxraW5nIHdpbGwgYmUgZ29vZmVkIHVwLgorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBvdXRlck1vc3RD
b2RlQmxvY2stPmNvZGVPcmlnaW4oaW5kZXgpOworICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgIHJldHVybiB0aGlzOyAvLyBOb3QgY3VycmVudGx5IGluIGlubGlu
ZWQgY29kZS4KKworICAgIC8vIFdlJ3ZlIGdvdCBpbmxpbmVkIGZyYW1lcy4gU28sIHJlaWZ5IHRo
ZW0gc28gdGhhdCB0aGUgaXRlcmF0b3IgY2FuIHdhbGsgdGhydSB0aGVtLgorICAgIENhbGxGcmFt
ZSogY3VyckZyYW1lID0gdGhpcy0+Y2FsbEZyYW1lKCk7CisgICAgQ29kZU9yaWdpbiBpbm5lck1v
c3RDb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKKyAgICBDYWxsRnJhbWUqIGlubmVyTW9zdExvZ2lj
YWxGcmFtZSA9IGN1cnJGcmFtZSArIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldDsKKworICAgIENhbGxGcmFtZSogbG9naWNhbEZyYW1lID0gaW5uZXJNb3N0TG9naWNhbEZy
YW1lOworICAgIHdoaWxlIChsb2dpY2FsRnJhbWUgIT0gY3VyckZyYW1lKSB7CisgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lZEZyYW1lSW5mbyA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lOworICAgICAgICAKKyAgICAgICAgLy8gRmlsbCBpbiB0aGUgbG9naWNhbCAoaS5lLiBpbmxp
bmVkKSBmcmFtZQorICAgICAgICBsb2dpY2FsRnJhbWUtPnNldENvZGVCbG9jayhpbmxpbmVkRnJh
bWVJbmZvLT5iYXNlbGluZUNvZGVCbG9jaygpKTsKKyAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRJ
bmxpbmVDYWxsRnJhbWUoaW5saW5lZEZyYW1lSW5mbyk7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+
c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW5saW5lZEZyYW1lSW5mby0+YXJndW1lbnRz
LnNpemUoKSk7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zm
c2V0KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0
SXNJbmxpbmVkRnJhbWUoKTsKKworICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVk
RnJhbWVJbmZvLT5jYWxsZWUuZ2V0KCk7CisgICAgICAgIGlmIChjYWxsZWUpIHsKKyAgICAgICAg
ICAgIGxvZ2ljYWxGcmFtZS0+c2V0U2NvcGUoY2FsbGVlLT5zY29wZSgpKTsKKyAgICAgICAgICAg
IGxvZ2ljYWxGcmFtZS0+c2V0Q2FsbGVlKGNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIENvZGVPcmlnaW4qIGNhbGxlckNvZGVPcmlnaW4gPSAmaW5saW5lZEZyYW1lSW5mby0+
Y2FsbGVyOworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGNhbGxlcklubGluZWRGcmFtZUluZm8g
PSBjYWxsZXJDb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIHVuc2lnbmVkIGNh
bGxlckZyYW1lT2Zmc2V0ID0gY2FsbGVySW5saW5lZEZyYW1lSW5mbyA/IGNhbGxlcklubGluZWRG
cmFtZUluZm8tPnN0YWNrT2Zmc2V0IDogMDsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGN1cnJGcmFtZSArIGNhbGxlckZyYW1lT2Zmc2V0OworICAgICAgICBsb2dpY2FsRnJhbWUt
PnNldENhbGxlckZyYW1lKGNhbGxlckZyYW1lKTsKKworICAgICAgICBjb2RlT3JpZ2luID0gKmNh
bGxlckNvZGVPcmlnaW47CisgICAgICAgIGxvZ2ljYWxGcmFtZSA9IGNhbGxlckZyYW1lOworICAg
IH0KKyAgICAKKyAgICBBU1NFUlQoIWlubmVyTW9zdExvZ2ljYWxGcmFtZS0+aGFzSG9zdENhbGxG
cmFtZUZsYWcoKSk7CisgICAgcmV0dXJuIEZyYW1lOjpjcmVhdGUoaW5uZXJNb3N0TG9naWNhbEZy
YW1lKTsKKyNlbmRpZiAvLyAhRU5BQkxFKERGR19KSVQpCit9CisKK1N0YWNrSXRlcmF0b3I6OkZy
YW1lKiBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6bG9naWNhbENhbGxlckZyYW1lKCkKK3sKKyAgICBG
cmFtZSogY2FsbGVyRnJhbWUgPSBjcmVhdGUodGhpcy0+Y2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9z
dENhbGxGcmFtZUZsYWcoKSk7CisjaWYgIUVOQUJMRShERkdfSklUKQorICAgIHJldHVybiBjYWxs
ZXJGcmFtZTsKKworI2Vsc2UgLy8gIUVOQUJMRShERkdfSklUKQorICAgIGlmICghaXNKU0ZyYW1l
KCkgfHwgIWNhbGxlckZyYW1lKQorICAgICAgICByZXR1cm4gY2FsbGVyRnJhbWU7CisKKyAgICAv
LyBJZiBJIGFtIGtub3duIHRvIGJlIGFuIGlubGluZWQgZnJhbWUsIHRoZW4gSSd2ZSBiZWVuIHJl
aWZpZWQgYWxyZWFkeSBhbmQKKyAgICAvLyBoYXZlIG15IGNhbGxlci4KKyAgICBpZiAoaXNJbmxp
bmVkRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGNhbGxlckZyYW1lOworICAgIAorICAgIC8vIEkg
YW0gbm90IGFuIGlubGluZWQgZnJhbWUuIFNvIHRoZSBxdWVzdGlvbiBpczogaXMgbXkgY2FsbGVy
IGEgQ2FsbEZyYW1lCisgICAgLy8gdGhhdCBoYXMgaW5saW5lcyBvciBhIENhbGxGcmFtZSB0aGF0
IGRvZXNuJ3Q/CisKKyAgICAvLyBJZiBteSBjYWxsZXIgaXMgbm90IGEgSlMgZnJhbWUsIGl0IGNh
bm5vdCBoYXZlIGlubGluZXMsIGFuZCB3ZSdyZSBkb25lLgorICAgIGlmICghY2FsbGVyRnJhbWUt
PmlzSlNGcmFtZSgpKQorICAgICAgICByZXR1cm4gY2FsbGVyRnJhbWU7CisKKyAgICBBU1NFUlQo
IWNhbGxlckZyYW1lLT5pc0lubGluZWRGcmFtZSgpKTsKKyAgICByZXR1cm4gY2FsbGVyRnJhbWUt
PmxvZ2ljYWxGcmFtZSgpOworCisjZW5kaWYgLy8gIUVOQUJMRShERkdfSklUKQorfQorCisjaWZu
ZGVmIE5ERUJVRworCitzdGF0aWMgY29uc3QgY2hhciogaml0VHlwZU5hbWUoSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlKQoreworICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgIGNhc2UgSklUQ29k
ZTo6Tm9uZTogcmV0dXJuICJOb25lIjsKKyAgICBjYXNlIEpJVENvZGU6Okhvc3RDYWxsVGh1bms6
IHJldHVybiAiSG9zdENhbGxUaHVuayI7CisgICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rOiByZXR1cm4gIkludGVycHJldGVyVGh1bmsiOworICAgIGNhc2UgSklUQ29kZTo6QmFzZWxp
bmVKSVQ6IHJldHVybiAiQmFzZWxpbmVKSVQiOworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOiBy
ZXR1cm4gIkRGR0pJVCI7CisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6IHJldHVybiAiRlRMSklU
IjsKKyAgICB9CisgICAgcmV0dXJuICI8dW5rbm93bj4iOworfQorCitzdGF0aWMgdm9pZCBwcmlu
dEluZGVudHMoaW50IGxldmVscykKK3sKKyAgICB3aGlsZSAobGV2ZWxzLS0pCisgICAgICAgIGRh
dGFMb2dGU3RyaW5nKCIgICAiKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRpZihpbnQgaW5kZW50
TGV2ZWxzLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ0xpc3Q7
CisgICAgdmFfc3RhcnQoYXJnTGlzdCwgZm9ybWF0KTsKKworICAgIGlmIChpbmRlbnRMZXZlbHMp
CisgICAgICAgIHByaW50SW5kZW50cyhpbmRlbnRMZXZlbHMpOworCisjaWYgQ09NUElMRVIoQ0xB
TkcpIHx8IChDT01QSUxFUihHQ0MpICYmIEdDQ19WRVJTSU9OX0FUX0xFQVNUKDQsIDYsIDApKQor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XZm9ybWF0LW5vbmxpdGVyYWwiCisjZW5kaWYKKworICAgIFdURjo6ZGF0YUxvZ0ZWKGZv
cm1hdCwgYXJnTGlzdCk7CisKKyNpZiBDT01QSUxFUihDTEFORykgfHwgKENPTVBJTEVSKEdDQykg
JiYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoNCwgNiwgMCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IHBvcAorI2VuZGlmCisKKyAgICB2YV9lbmQoYXJnTGlzdCk7Cit9CisKK3ZvaWQgU3RhY2tJdGVy
YXRvcjo6RnJhbWU6OnByaW50KGludCBpbmRlbnRMZXZlbCkKK3sKKyAgICBpbnQgaSA9IGluZGVu
dExldmVsOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsK
KyAgICBwcmludGlmKGksICJmcmFtZSAlcCB7XG4iLCB0aGlzKTsKKworICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSB0aGlzLT5jYWxsZXJGcmFtZSgpOworICAgIHZvaWQqIHJldHVyblBDID0g
aGFzUmV0dXJuUEMoKT8gdGhpcy0+cmV0dXJuUEMoKS52YWx1ZSgpIDogbnVsbHB0cjsKKworICAg
IHByaW50aWYoaSwgIiAgIG5hbWUgJyVzJ1xuIiwgZnVuY3Rpb25OYW1lKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgcHJpbnRpZihpLCAiICAgc291cmNlVVJMICclcydcbiIsIHNvdXJjZVVSTCgpLnV0
ZjgoKS5kYXRhKCkpOworICAgIHByaW50aWYoaSwgIiAgIGhvc3RGbGFnICVkXG4iLCBjYWxsZXJG
cmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSk7CisgICAgcHJpbnRpZihpLCAiICAgaXNJbmxp
bmVkRnJhbWUgJWRcbiIsIGlzSW5saW5lZEZyYW1lKCkpOworCisgICAgaWYgKGlzSW5saW5lZEZy
YW1lKCkpCisgICAgICAgIHByaW50aWYoaSwgIiAgIElubGluZUNhbGxGcmFtZSAlcFxuIiwgdGhp
cy0+aW5saW5lQ2FsbEZyYW1lKCkpOworCisgICAgcHJpbnRpZihpLCAiICAgY2FsbGVlICVwXG4i
LCBjYWxsZWUoKSk7CisgICAgcHJpbnRpZihpLCAiICAgcmV0dXJuUEMgJXBcbiIsIHJldHVyblBD
KTsKKyAgICBwcmludGlmKGksICIgICBjYWxsZXJGcmFtZSAlcFxuIiwgY2FsbGVyRnJhbWUtPnJl
bW92ZUhvc3RDYWxsRnJhbWVGbGFnKCkpOworICAgIHByaW50aWYoaSwgIiAgIGxvZ2ljYWxDYWxs
ZXJGcmFtZSAlcFxuIiwgbG9naWNhbENhbGxlckZyYW1lKCkpOworICAgIHByaW50aWYoaSwgIiAg
IHJhd0xvY2F0aW9uQml0cyAldSAweCV4XG4iLCBsb2NhdGlvbkFzUmF3Qml0cygpLCBsb2NhdGlv
bkFzUmF3Qml0cygpKTsKKyAgICBwcmludGlmKGksICIgICBjb2RlQmxvY2sgJXBcbiIsIGNvZGVC
bG9jayk7CisgICAgaWYgKGNvZGVCbG9jaykgeworICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUgPSBjb2RlQmxvY2stPmppdFR5cGUoKTsKKyAgICAgICAgaWYgKGhhc0xvY2F0aW9uQXNC
eXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOworICAgICAgICAgICAgcHJpbnRpZihpLCAiICAg
ICAgYnl0ZWNvZGVPZmZzZXQgJXUgJXAgLyAlenVcbiIsIGJ5dGVjb2RlT2Zmc2V0LCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihieXRlY29kZU9mZnNldCksIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVP
cmlnaW5JbmRleCA9IGxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKTsKKyAgICAgICAgICAgIHBy
aW50aWYoaSwgIiAgICAgIGNvZGVPcmlnaW5JZGV4ICV1ICVwIC8gJXp1XG4iLCBjb2RlT3JpZ2lu
SW5kZXgsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvZGVPcmlnaW5JbmRleCksIGNvZGVCbG9j
ay0+Y29kZU9yaWdpbnMoKS5zaXplKCkpOworICAgICAgICB9CisgICAgICAgIHByaW50aWYoaSwg
IiAgICAgIGxpbmUgJWRcbiIsIGxpbmUoKSk7CisgICAgICAgIHByaW50aWYoaSwgIiAgICAgIGNv
bHVtbiAlZFxuIiwgY29sdW1uKCkpOworICAgICAgICBwcmludGlmKGksICIgICAgICBqaXRUeXBl
ICVkIDwlcz4gaXNPcHRpbWl6aW5nSklUICVkXG4iLCBqaXRUeXBlLCBqaXRUeXBlTmFtZShqaXRU
eXBlKSwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUpKTsKKyAgICAgICAgcHJpbnRp
ZihpLCAiICAgICAgaGFzQ29kZU9yaWdpbnMgJWRcbiIsIGNvZGVCbG9jay0+aGFzQ29kZU9yaWdp
bnMoKSk7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpIHsKKyAgICAg
ICAgICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS5nZXQoKTsKKyAg
ICAgICAgICAgIHByaW50aWYoaSwgIiAgICAgICAgIGppdENvZGUgJXAgc3RhcnQgJXAgZW5kICVw
XG4iLCBqaXRDb2RlLCBqaXRDb2RlLT5zdGFydCgpLCBqaXRDb2RlLT5lbmQoKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcHJpbnRpZihpLCAifVxuIik7Cit9CisKKyNlbmRpZiAvLyBOREVCVUcK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNpZm5kZWYgTkRFQlVHCisvLyBGb3IgdXNlIGluIHRo
ZSBkZWJ1Z2dlcgordm9pZCBkZWJ1Z1ByaW50Q2FsbEZyYW1lKEpTQzo6Q2FsbEZyYW1lKik7CisK
K3ZvaWQgZGVidWdQcmludENhbGxGcmFtZShKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQorewor
ICAgIGlmICghY2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgSlNDOjpTdGFja0l0ZXJh
dG9yOjpGcmFtZSogZnJhbWUgPSBKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjcmVhdGUoY2Fs
bEZyYW1lKTsKKyAgICBmcmFtZS0+cHJpbnQoMik7Cit9CisjZW5kaWYgLy8gIU5ERUJVRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3RhY2tJdGVyYXRv
cl9oCisjZGVmaW5lIFN0YWNrSXRlcmF0b3JfaAorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yUHJpdmF0ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJndW1lbnRzOworCitjbGFzcyBTdGFja0l0
ZXJhdG9yOjpGcmFtZSA6IHB1YmxpYyBDYWxsRnJhbWUgeworcHVibGljOgorICAgIGVudW0gQ29k
ZVR5cGUgeworICAgICAgICBHbG9iYWwgPSBTdGFja0ZyYW1lR2xvYmFsQ29kZSwKKyAgICAgICAg
RXZhbCA9IFN0YWNrRnJhbWVFdmFsQ29kZSwKKyAgICAgICAgRnVuY3Rpb24gPSBTdGFja0ZyYW1l
RnVuY3Rpb25Db2RlLAorICAgICAgICBOYXRpdmUgPSBTdGFja0ZyYW1lTmF0aXZlQ29kZQorICAg
IH07CisKKyAgICBzdGF0aWMgRnJhbWUqIGNyZWF0ZShDYWxsRnJhbWUqIGYpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8RnJhbWUqPihmKTsgfQorCisgICAgYm9vbCBpc0pTRnJhbWUoKSBjb25z
dCB7IHJldHVybiAhIWNvZGVCbG9jaygpOyB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJp
bmcgZnVuY3Rpb25OYW1lKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNvdXJjZVVS
TCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyB0b1N0cmluZygpOworCisgICAgQ29k
ZVR5cGUgY29kZVR5cGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCgpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGxpbmUoKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB1bnNpZ25lZCBjb2x1bW4oKTsKKworICAgIEFyZ3VtZW50cyogYXJndW1lbnRzKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENhbGxG
cmFtZSo+KHRoaXMpOyB9CisgICAgCisgICAgRnJhbWUqIGxvZ2ljYWxGcmFtZSgpOworICAgIEZy
YW1lKiBsb2dpY2FsQ2FsbGVyRnJhbWUoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIHBy
aW50KGludCBpbmRlbnRMZXZlbCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBGcmFtZSgpOwor
ICAgIH5GcmFtZSgpOworCisgICAgdm9pZCByZXRyaWV2ZUV4cHJlc3Npb25JbmZvKGludCYgZGl2
b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gU3RhY2tJdGVyYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3JQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFN0YWNr
SXRlcmF0b3JQcml2YXRlX2gKKyNkZWZpbmUgU3RhY2tJdGVyYXRvclByaXZhdGVfaAorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNGdW5jdGlvbjsKK2NsYXNz
IFZNOworCit0eXBlZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CisKK2NsYXNzIFN0YWNrSXRlcmF0
b3IgeworcHVibGljOgorICAgIGNsYXNzIEZyYW1lOworICAgIHR5cGVkZWYgYm9vbCAoKkZyYW1l
RmlsdGVyKShGcmFtZSopOworCisgICAgRnJhbWUmIG9wZXJhdG9yKigpIHsgcmV0dXJuICptX2Zy
YW1lOyB9CisgICAgQUxXQVlTX0lOTElORSBGcmFtZSogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1f
ZnJhbWU7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIG1f
ZnJhbWUgPT0gZnJhbWU7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oRnJhbWUqIGZyYW1lKSB7IHJl
dHVybiBtX2ZyYW1lICE9IGZyYW1lOyB9CisgICAgdm9pZCBvcGVyYXRvcisrKCkgeyBnb3RvTmV4
dEZyYW1lKCk7IH0KKyAgICB2b2lkIGZpbmRGcmFtZUZvckZ1bmN0aW9uKEpTRnVuY3Rpb24qKTsK
KworcHJpdmF0ZToKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yKFZNKik7CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGJlZ2luQXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1l
LCBGcmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYmVn
aW5BdChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9iaiwgRnJhbWVGaWx0ZXIgPSBudWxscHRy
KTsKKyAgICBzdGF0aWMgRnJhbWUqIGVuZCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBzdGF0
aWMgU3RhY2tJdGVyYXRvciBlbXB0eSgpIHsgcmV0dXJuIFN0YWNrSXRlcmF0b3IobnVsbHB0cik7
IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ290b05leHRGcmFtZSgpOworCisgICAg
Vk0qIG1fdm07CisgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgRnJhbWVGaWx0ZXIgbV9maWx0ZXI7
CisKKyAgICBmcmllbmQgY2xhc3MgRXhlY1N0YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBTdGFja0l0ZXJhdG9yUHJpdmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZ1JlZi5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkxlZ2FjeVBy
b2ZpbGVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb2ZpbGUuaCIK
KyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVHJhY2luZy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTU4LDEwICs1OCwxMSBAQCBQcm9maWxlR2VuZXJhdG9yOjpQcm9maWxl
R2VuZXJhdG9yKEV4ZWNTCiAKIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29u
c29sZVN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3Rh
Y2tUcmFjZTsKLSAgICBleGVjLT5pbnRlcnByZXRlcigpLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJh
Y2UsIDIpOwotCi0gICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywg
TGVnYWN5UHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIHN0YWNrVHJhY2VbMV0u
Y2FsbGVlLmdldCgpLCBzdGFja1RyYWNlWzFdLnNvdXJjZVVSTCwgc3RhY2tUcmFjZVsxXS5saW5l
KCkpLCBtX2hlYWQuZ2V0KCksIG1faGVhZC5nZXQoKSk7CisgICAgU3RhY2tJdGVyYXRvciBpdGVy
ID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0ZXI7CisgICAgQ2FsbElkZW50aWZpZXIgaWRlbnRp
ZmllciA9IExlZ2FjeVByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBpdGVyLT5j
YWxsZWUoKSwgaXRlci0+c291cmNlVVJMKCksIGl0ZXItPmxpbmUoKSk7CisgICAgbV9jdXJyZW50
Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywgaWRlbnRpZmllciwgbV9oZWFkLmdldCgp
LCBtX2hlYWQuZ2V0KCkpOworICAgIAogICAgIG1faGVhZC0+aW5zZXJ0Tm9kZShtX2N1cnJlbnRO
b2RlLmdldCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVOb2RlLmgJKHJldmlzaW9uIDE1MTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBQcm9maWxl
Tm9kZTsKIAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQcm9maWxlTm9kZT4gPjo6Y29uc3Rf
aXRlcmF0b3IgU3RhY2tJdGVyYXRvcjsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PFN0cmlu
Z0ltcGwqPiBGdW5jdGlvbkNhbGxIYXNoQ291bnQ7CiAKICAgICBjbGFzcyBQcm9maWxlTm9kZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFByb2ZpbGVOb2RlPiB7CkBAIC0xMzEsNiArMTMwLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxQcm9maWxlTm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgU3RhY2tJdGVyYXRvcjsK
KwogICAgICAgICBQcm9maWxlTm9kZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgY29uc3Qg
Q2FsbElkZW50aWZpZXImLCBQcm9maWxlTm9kZSogaGVhZE5vZGUsIFByb2ZpbGVOb2RlKiBwYXJl
bnROb2RlKTsKICAgICAgICAgUHJvZmlsZU5vZGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUs
IFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUqIG5vZGVUb0NvcHkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNp
b24gMTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgpAQCAtMzIsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIiAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgpAQCAtNDAsNiArNDIsNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQ
YXJzZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlN0YWNr
SXRlcmF0b3IuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBVbmlj
b2RlOwpAQCAtMTc4LDE4ICsxODEsMzkgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERh
dGEoSlNDZWxsKgogICAgIHJldHVybiBDYWxsVHlwZUpTOwogfQogCitzdGF0aWMgSlNWYWx1ZSBy
ZXRyaWV2ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uT2Jq
KQoreworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luQXQoZnVuY3Rpb25PYmop
OworICAgIHJldHVybiBpdGVyICE9IGV4ZWMtPmVuZCgpID8gSlNWYWx1ZShpdGVyLT5hcmd1bWVu
dHMoKSkgOiBqc051bGwoKTsKK30KKwogSlNWYWx1ZSBKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oc2xvdEJhc2UpOwog
ICAgIEFTU0VSVCghdGhpc09iai0+aXNIb3N0RnVuY3Rpb24oKSk7Ci0gICAgcmV0dXJuIGV4ZWMt
PmludGVycHJldGVyKCktPnJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2Jq
KTsKKworICAgIHJldHVybiByZXRyaWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqKTsKK30KKwor
c3RhdGljIGJvb2wgc2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyhTdGFja0l0ZXJhdG9yOjpGcmFtZSog
ZnJhbWUpCit7CisgICAgSlNPYmplY3QqIGNhbGxlZSA9IGZyYW1lLT5jYWxsZWUoKTsKKyAgICBi
b29sIHNob3VsZFNraXAgPSBjYWxsZWUgPyBjYWxsZWUtPmluaGVyaXRzKCZKU0JvdW5kRnVuY3Rp
b246OnNfaW5mbykgOiBmYWxzZTsKKyAgICByZXR1cm4gc2hvdWxkU2tpcDsKK30KKworc3RhdGlj
IEpTVmFsdWUgcmV0cmlldmVDYWxsZXJGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uT2JqKQoreworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2lu
QXQoZnVuY3Rpb25PYmosIHNraXBPdmVyQm91bmRGdW5jdGlvbnMpOworICAgICsraXRlcjsKKyAg
ICByZXR1cm4gaXRlciAhPSBleGVjLT5lbmQoKSAmJiBpdGVyLT5jYWxsZWUoKSA/IGl0ZXItPmNh
bGxlZSgpIDoganNOdWxsKCk7CiB9CiAKIEpTVmFsdWUgSlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lKQogewogICAg
IEpTRnVuY3Rpb24qIHRoaXNPYmogPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHNsb3RCYXNlKTsKICAg
ICBBU1NFUlQoIXRoaXNPYmotPmlzSG9zdEZ1bmN0aW9uKCkpOwotICAgIEpTVmFsdWUgY2FsbGVy
ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRo
aXNPYmopOworICAgIEpTVmFsdWUgY2FsbGVyID0gcmV0cmlldmVDYWxsZXJGdW5jdGlvbihleGVj
LCB0aGlzT2JqKTsKIAogICAgIC8vIFNlZSBFUzUuMSAxNS4zLjUuNCAtIEZ1bmN0aW9uLmNhbGxl
ciBtYXkgbm90IGJlIHVzZWQgdG8gcmV0cmlldmUgYSBzdHJpY3QgY2FsbGVyLgogICAgIGlmICgh
Y2FsbGVyLmlzT2JqZWN0KCkgfHwgIWFzT2JqZWN0KGNhbGxlciktPmluaGVyaXRzKCZKU0Z1bmN0
aW9uOjpzX2luZm8pKQpAQCAtMjk3LDcgKzMyMSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGV4ZWMtPmlu
dGVycHJldGVyKCktPnJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0
KSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IocmV0cmlldmVBcmd1bWVudHMoZXhlYywgdGhpc09iamVjdCksIFJlYWRP
bmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIApAQCAtMzIxLDcgKzM0NSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGV4ZWMtPmludGVycHJl
dGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSwgUmVhZE9u
bHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IocmV0cmlldmVDYWxsZXJGdW5jdGlvbihleGVjLCB0aGlzT2JqZWN0KSwgUmVhZE9ubHkg
fCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCkBAIC00MTUsMTQgKzQzOSwxNCBAQCBib29sIEpTRnVuY3Rpb246OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqCiAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3Io
ZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBl
RXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29y
KTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICB9
Ci0gICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShl
eGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQXJn
dW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7CisgICAgICAgIHZhbHVlQ2hlY2sg
PSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVl
KCksIHJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXNPYmplY3QpKTsKICAgICB9IGVsc2UgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7CiAgICAgICAg
IGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAg
ICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCiAgICAgICAgICAgICAgICAgdGhpc09iamVj
dC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUg
fCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVP
d25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOwogICAgICAgICB9Ci0gICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52
YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVy
cHJldGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7Cisg
ICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVj
LCBkZXNjcmlwdG9yLnZhbHVlKCksIHJldHJpZXZlQ2FsbGVyRnVuY3Rpb24oZXhlYywgdGhpc09i
amVjdCkpOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpCiAgICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8
IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGpzTnVtYmVyKHRoaXNPYmplY3Qt
PmpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpKSk7CiAgICAgZWxzZSBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcAkocmV2aXNpb24gMTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9k
dG9hLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTcxMiw3
ICs3MTMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAgICAg
aWYgKCF0aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnRo
aXNWYWx1ZSgpLnN5bnRoZXNpemVQcm90b3R5cGUoZXhlYykpOwogCi0gICAgaWYgKCF0aGlzT2Jq
ZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMtPnRydWVDYWxsZXJGcmFtZSgpKSkKKyAgICBTdGFj
a0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigpOworICAgICsraXRlcjsKKyAgICBpZiAoIXRo
aXNPYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oaXRlci0+Y2FsbEZyYW1lKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aGlzT2JqZWN0LT5wcm90b3R5cGUoKSk7CkBAIC03MjgsNyArNzMxLDkgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogICAgIGlmICghdGhpc09i
amVjdCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAot
ICAgIGlmICghdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShleGVjLT50cnVlQ2FsbGVyRnJh
bWUoKSkpCisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0
ZXI7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXItPmNhbGxGcmFt
ZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIC8vIFNldHRpbmcgX19wcm90b19fIHRvIGEgbm9uLW9iamVjdCwgbm9uLW51bGwgdmFsdWUg
aXMgc2lsZW50bHkgaWdub3JlZCB0byBtYXRjaCBNb3ppbGxhLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMTM5LDcgKzE0MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3QKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiUmVxdWVzdGVkIHByb3RvdHlwZSBvZiBhIHZhbHVlIHRoYXQgaXMgbm90IGFu
IG9iamVjdC4iKSkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChleGVjLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKCFvYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oZXhlYy0+dHJ1ZUNh
bGxlckZyYW1lKCkpKQorICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7Cisg
ICAgKytpdGVyOworICAgIGlmICghb2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXItPmNhbGxG
cmFtZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+cHJvdG90eXBlKCkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTUxMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZuZGVmIE9wZXJhdGlvbnNfaAogI2Rl
ZmluZSBPcGVyYXRpb25zX2gKIAorI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDE0
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTMtMDYtMTAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAg
ICAgIEludHJvZHVjaW5nIHRoZSBTdGFja0l0ZXJhdG9yIGNsYXNzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzkwLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaDogQWRkZWQu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNjcmlwdENhbGxTdGFjayk6CisKIDIwMTMtMDYtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYnVpbGQuIFVzZSBhdCgpIGluc3Rl
YWQgb2Ygb3BlcmF0b3JbXSBiZWNhdXNlIG9mIGFtYmlndWl0eSBvbiBzb21lIGNvbXBpbGVycy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNr
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1N0YWNrSXRlcmF0
b3JfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9TdGFja0l0ZXJhdG9yX2gKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdGFja0l0ZXJhdG9yLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAxNTEzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUg
IkpTRXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJYTUxI
dHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgPGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaD4KICNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaD4KICNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKQEAgLTEzMywxMCArMTMzLDExIEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChF
eGVjU3RhdGUKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2YWwudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpLCBlYyk7CiAgICAgfQogCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2UoMik7Ci0gICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNl
LCAyKTsKLSAgICBpbXBsKCktPnNldExhc3RTZW5kTGluZU51bWJlcihzdGFja1RyYWNlWzFdLmxp
bmUoKSk7Ci0gICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVSTChzdGFja1RyYWNlWzFdLnNvdXJjZVVS
TCk7CisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0ZXI7
CisgICAgQVNTRVJUKGl0ZXIgIT0gZXhlYy0+ZW5kKCkpOworICAgIGltcGwoKS0+c2V0TGFzdFNl
bmRMaW5lTnVtYmVyKGl0ZXItPmxpbmUoKSk7CisgICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVSTChp
dGVyLT5zb3VyY2VVUkwoKSk7ICAgIAogCiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCShyZXZpc2lvbiAxNTEz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENh
bGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8aW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmg+Ci0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KKyNp
bmNsdWRlIDxpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9B
cmdMaXN0Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU0Z1bmN0aW9uLmg+CkBAIC01NywxMCArNTcsOCBAQCBQYXNzUmVmUHRyPFNjcmlwdENh
bGxTdGFjaz4gY3JlYXRlU2NyaXB0CiB7CiAgICAgVmVjdG9yPFNjcmlwdENhbGxGcmFtZT4gZnJh
bWVzOwogICAgIGlmIChKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6Y3VycmVudFN0YXRlKCkpIHsKLSAgICAgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2U7Ci0gICAgICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFj
ZSwgbWF4U3RhY2tTaXplKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGFja1Ry
YWNlLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChTY3JpcHRDYWxsRnJh
bWUoc3RhY2tUcmFjZVtpXS5mcmllbmRseUZ1bmN0aW9uTmFtZShleGVjKSwgc3RhY2tUcmFjZVtp
XS5mcmllbmRseVNvdXJjZVVSTCgpLCBzdGFja1RyYWNlW2ldLmxpbmUoKSwgc3RhY2tUcmFjZVtp
XS5jb2x1bW4oKSkpOworICAgICAgICBmb3IgKFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJl
Z2luKCk7IGl0ZXIgIT0gZXhlYy0+ZW5kKCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlcikKKyAg
ICAgICAgICAgIGZyYW1lcy5hcHBlbmQoU2NyaXB0Q2FsbEZyYW1lKGl0ZXItPmZ1bmN0aW9uTmFt
ZSgpLCBpdGVyLT5zb3VyY2VVUkwoKSwgaXRlci0+bGluZSgpLCBpdGVyLT5jb2x1bW4oKSkpOwog
ICAgIH0KICAgICBpZiAoZnJhbWVzLmlzRW1wdHkoKSAmJiAhZW1wdHlJc0FsbG93ZWQpIHsKICAg
ICAgICAgLy8gTm8gZnJhbWVzIGZvdW5kLiBJdCBtYXkgaGFwcGVuIGluIHRoZSBjYXNlIHdoZXJl
CkBAIC03NCwxOSArNzIsMTUgQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNj
cmlwdAogUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFjayhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG1heFN0YWNrU2l6ZSkKIHsKICAgICBWZWN0b3I8
U2NyaXB0Q2FsbEZyYW1lPiBmcmFtZXM7Ci0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2U7Ci0gICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlLCBt
YXhTdGFja1NpemUgKyAxKTsKLSAgICBmb3IgKHNpemVfdCBpID0gc3RhY2tUcmFjZS5zaXplKCkg
PT0gMSA/IDAgOiAxOyBpIDwgc3RhY2tUcmFjZS5zaXplKCk7IGkrKykgeworICAgIFN0YWNrSXRl
cmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7CisgICAgZm9yICgrK2l0ZXI7IGl0ZXIgIT0gZXhl
Yy0+ZW5kKCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlcikgewogICAgICAgICAvLyBUaGlzIGVh
cmx5IGV4aXQgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIG91ciBvbGQgYmVoYXZpb3VyCiAgICAg
ICAgIC8vIGJ1dCB0aGUgc3RhY2sgdHJhY2Ugd2UgcHJvZHVjZSBub3cgaXMgY29tcGxldGUgYW5k
IGhhbmRsZXMgYWxsCiAgICAgICAgIC8vIHdheXMgaW4gd2hpY2ggY29kZSBtYXkgYmUgcnVubmlu
ZwotICAgICAgICBpZiAoIXN0YWNrVHJhY2VbaV0uY2FsbGVlICYmIGZyYW1lcy5zaXplKCkpCisg
ICAgICAgIGlmICghaXRlci0+Y2FsbGVlKCkgJiYgZnJhbWVzLnNpemUoKSkKICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWUgPSBzdGFja1RyYWNlW2ldLmZy
aWVuZGx5RnVuY3Rpb25OYW1lKGV4ZWMpOwotICAgICAgICBmcmFtZXMuYXBwZW5kKFNjcmlwdENh
bGxGcmFtZShmdW5jdGlvbk5hbWUsIHN0YWNrVHJhY2VbaV0uc291cmNlVVJMLCBzdGFja1RyYWNl
W2ldLmxpbmUoKSwgc3RhY2tUcmFjZVtpXS5jb2x1bW4oKSkpOworICAgICAgICBmcmFtZXMuYXBw
ZW5kKFNjcmlwdENhbGxGcmFtZShpdGVyLT5mdW5jdGlvbk5hbWUoKSwgaXRlci0+c291cmNlVVJM
KCksIGl0ZXItPmxpbmUoKSwgaXRlci0+Y29sdW1uKCkpKTsKICAgICB9Ci0KICAgICByZXR1cm4g
U2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoZnJhbWVzKTsKIH0KIAo=
</data>
<flag name="review"
          id="225746"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204661</attachid>
            <date>2013-06-13 18:54:23 -0700</date>
            <delta_ts>2013-06-14 16:08:49 -0700</delta_ts>
            <desc>Fixed cause of layout test failures.</desc>
            <filename>bug-117390.patch</filename>
            <type>text/plain</type>
            <size>79494</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBA
QAorMjAxMy0wNi0xMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Um9sbGluZyByMTUxNDU2LCByMTUxNDIwIGJhY2sgaW4gd2l0aCBzb21lIGZpeGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzkwLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBjaGFuZ2VzIG9u
IHRvcCBvZiB0aGUgb2xkIHBhdGNoOgorICAgICAgICAtIFJlbmFtZWQgQ2FsbEZyYW1lOjpiZWdp
bkF0KCkgdG8gQ2FsbEZyYW1lOjpmaW5kKCksIGFuZCBhbHNvIHByb3ZpZGUKKyAgICAgICAgICBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIENhbGxGcmFtZSogdG8gc2VhcmNoIGZvci4KKworICAgICAg
ICAgIFRoZXJlIGFyZSAzIHR5cGVzIG9mIHVzZXJzIG9mIHRoZSBTdGFja0l0ZXJhdG9yLiBXZSBu
ZWVkIHRvIGNhdGVyCisgICAgICAgICAgdG8gZWFjaCBvZiB0aGVzZSBhcyBmb2xsb3dzOgorCisg
ICAgICAgICAgMS4gVXNlcnMgd2hvIHdhbnQgYSBzdGFjayB0cmFjZQorICAgICAgICAgICAgIC0g
SGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHZtLnRvcENhbGxGcmFtZS4KKyAg
ICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUgU3RhY2tJdGVyYXRvciBhcyBmb2xs
b3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4o
KTsKKworICAgICAgICAgIDIuIFVzZXJzIHdobyB3YW50IHRoZWlyIGNhbGxlciBmcmFtZQorICAg
ICAgICAgICAgIC0gSGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHRoZSBzcGVj
aWZpZWQgQ2FsbEZyYW1lKi4KKyAgICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUg
U3RhY2tJdGVyYXRvciBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRv
ciBpdGVyID0gZXhlYy0+ZmluZChjYWxsRnJhbWUpOworCisgICAgICAgICAgMy4gVXNlcnMgd2hv
IHdhbnQgdGhlIGZyYW1lIG9mIGEgc3BlY2lmaWMgSlNGdW5jdGlvbiBvYmplY3QKKyAgICAgICAg
ICAgICAtIEhlcmUgd2UgbmVlZCB0byBzdGFydCBpdGVyYXRpbmcgZnJvbSB2bS50b3BDYWxsRnJh
bWUgYW5kIGZpbmQKKyAgICAgICAgICAgICAgIHRoZSBmcmFtZSB0aGF0IGhhcyBhIGNhbGxlZSBt
YXRjaGluZyB0aGUgc3BlY2lmaWVkIEpTRnVuY3Rpb24qLgorICAgICAgICAgICAgIC0gVG8gZG8g
dGhpcywgY3JlYXRlIHRoZSBTdGFja0l0ZXJhdG9yIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAg
ICAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGZ1bmN0aW9uT2JqKTsKKworICAg
ICAgICAgIFRoZSBwcmV2aW91cyBsYXlvdXQgdGVzdCBmYWlsdXJlcyB3ZXJlIGR1ZSB0byBjb25m
bGF0aW9uIG9mIGNhc2UgMQorICAgICAgICAgIGFuZCAyLiBUaGV5IGFyZSBub3cgaGFuZGxlZCBk
aXN0aW5jdGx5LgorCisgICAgICAgIC0gQ2hhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgU3Rh
Y2tJdGVyYXRvcjo6ZW5kKCkgdG8gcmV0dXJuIGEgc3R1YgorICAgICAgICAgIGVtcHR5IGZyYW1l
IGluc3RlYWQgb2YgbnVsbHB0ci4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgY2FuIG5ldmVyCisgICAg
ICAgICAgc2VnZmF1bHQgYnkgZGVyZWYnaW5nIHRoZSBpdGVyYXRvciBldmVuIHdoZW4gaXQgaGFz
IHJlYWNoZWQgZW5kKCkuCisKKyAgICAgICAgICBUaGlzIGZpeGVzIGEgcHJlLWV4aXN0aW5nIGxh
eW91dCB0ZXN0IGNyYXNoIGluCisgICAgICAgICAgaW5zcGVjdG9yL3Byb2ZpbGVyL2NwdS1wcm9m
aWxlci1hZ2VudC1jcmFzaC1vbi1zdGFydC5odG1sLgorCisgICAgICAgICogQVBJL0pTQ29udGV4
dFJlZi5jcHA6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UpOgorICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWU6OmZpbmQpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFt
ZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnNldElubGluZUNhbGxGcmFtZSk6CisgICAg
ICAgIChFeGVjU3RhdGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmVuZCk6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp1bndpbmRDYWxs
RnJhbWUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpkZWJ1Zyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoK
KyAgICAgICAgKEludGVycHJldGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja0l0ZXJh
dG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuY3BwLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjppbml0aWFsaXpl
U3RhdGljcyk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OlN0YWNrSXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpiZWdpbik6CisgICAgICAgIChKU0M6OlN0YWNr
SXRlcmF0b3I6OmJlZ2luQXQpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpnb3RvTmV4
dEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6ZmluZEZyYW1lRm9yRnVuY3Rp
b24pOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaC4KKyAgICAg
ICAgKFN0YWNrSXRlcmF0b3I6OkZyYW1lKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja0l0
ZXJhdG9yUHJpdmF0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaC4KKyAgICAgICAgKFN0YWNrSXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjplbmQpOgorICAgICAgICAqIGpzYy5jcHA6Cisg
ICAgICAgIChmdW5jdGlvbkpTQ1N0YWNrKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9y
Q29uc29sZVN0YXJ0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlTm9kZS5oOgorICAgICAg
ICAoUHJvZmlsZU5vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5j
cHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVUaHJlYWRpbmdPbmNlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpyZXRyaWV2ZUFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgIChK
U0M6OnNraXBPdmVyQm91bmRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpyZXRyaWV2ZUNhbGxl
ckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKToKKyAg
ICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
UHJvdG9HZXR0ZXIpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpOgorICAg
ICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlv
bnMuaDoKKwogMjAxMy0wNi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgc3VwcG9ydCBvcF9pbiBhbmQgaXQgc2hvdWxk
IHVzZSBwYXRjaGluZyB0byBtYWtlIGl0IGZhc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDE1MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAogICAgIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAogICAgIGludGVycHJldGVyL0pTU3RhY2suY3BwCisg
ICAgaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAKICAgICBpbnRlcnByZXRlci9WTUluc3Bl
Y3Rvci5jcHAKIAogICAgIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1MTU2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNv
cHkpCkBAIC00MzMsNiArNDMzLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlUHJlZml4LmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9u
IDE1MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzAsNiArMTcwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcCBcCiAgICAgaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIFwKICAgICBpbnRl
cnByZXRlci9KU1N0YWNrLmNwcCBcCisgICAgaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAg
XAogICAgIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBcCiAgICAgaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgXAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTUxNTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNiBCam9lcm4gR3JhZiAoYmpvZXJu
LmdyYWZAZ21haWwuY29tKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVk
ZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiU2FtcGxp
bmdUb29sLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5o
PgpAQCAtMzI2LDE1ICszMjcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uSlNDCiAgICAgU3RyaW5nQnVpbGRlciB0cmFjZTsKICAgICB0cmFjZS5hcHBlbmRMaXRlcmFs
KCItLT4gU3RhY2sgdHJhY2U6XG4iKTsKIAotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1Ry
YWNlOwotICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7
CiAgICAgaW50IGkgPSAwOwotCi0gICAgZm9yIChWZWN0b3I8U3RhY2tGcmFtZT46Oml0ZXJhdG9y
IGl0ZXIgPSBzdGFja1RyYWNlLmJlZ2luKCk7IGl0ZXIgPCBzdGFja1RyYWNlLmVuZCgpOyBpdGVy
KyspIHsKLSAgICAgICAgU3RhY2tGcmFtZSBsZXZlbCA9ICppdGVyOwotICAgICAgICB0cmFjZS5h
cHBlbmQoU3RyaW5nOjpmb3JtYXQoIiAgICAlaSAgICVzXG4iLCBpLCBsZXZlbC50b1N0cmluZyhl
eGVjKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIGkrKzsKLSAgICB9CisgICAgZm9yIChTdGFj
a0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigpOyBpdGVyICE9IGV4ZWMtPmVuZCgpOyArK2l0
ZXIsICsraSkKKyAgICAgICAgdHJhY2UuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIgICAgJWkgICAl
c1xuIiwgaSwgaXRlci0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgZnByaW50Zihz
dGRlcnIsICIlcyIsIHRyYWNlLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDE1MTU2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTMgKzMwLDEzIEBACiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkluaXRpYWxp
emVUaHJlYWRpbmcuaCIKICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KLSNpbmNs
dWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRlci5oPgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJTb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3IuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgogCkBAIC0yMDUsMzYgKzIwNSwyOSBAQCBKU1N0cmluZ1JlZiBKU0NvbnRleHRDcmVh
dGVCYWNrdHJhY2UoSlNDCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBW
ZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBleGVjLT5pbnRlcnByZXRlcigpLT5n
ZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIG1heFN0YWNrU2l6ZSk7CisgICAgc2l6ZV90IGkgPSAw
OworICAgIEFTU0VSVChtYXhTdGFja1NpemUpOworICAgIGZvciAoU3RhY2tJdGVyYXRvciBpdGVy
ID0gZXhlYy0+YmVnaW4oKTsgaXRlciAhPSBleGVjLT5lbmQoKSAmJiBtYXhTdGFja1NpemUtLTsg
KytpdGVyLCArK2kpIHsKKyAgICAgICAgSlNPYmplY3QqIGNhbGxlZSA9IGl0ZXItPmNhbGxlZSgp
OworICAgICAgICAvLyBJZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0IHdlJ3ZlIG5vdCBhZGRlZCBh
bnkgZnJhbWUgeWV0LCB3ZSBzaG91bGQKKyAgICAgICAgLy8gc3RpbGwgYWRkIHRoZSBmcmFtZSwg
YmVjYXVzZSBzb21ldGhpbmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1cyBhcmd1bWVudHMuCisgICAg
ICAgIGlmICghY2FsbGVlICYmIGkpCisgICAgICAgICAgICBicmVhazsKIAotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RhY2tUcmFjZS5zaXplKCk7IGkrKykgewotICAgICAgICBTdHJpbmcg
dXJsU3RyaW5nOwotICAgICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lOwotICAgICAgICBTdGFja0Zy
YW1lJiBmcmFtZSA9IHN0YWNrVHJhY2VbaV07Ci0gICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBm
cmFtZS5jYWxsZWUuZ2V0KCk7Ci0gICAgICAgIGlmIChmcmFtZS5jYWxsZWUpCi0gICAgICAgICAg
ICBmdW5jdGlvbk5hbWUgPSBmcmFtZS5mcmllbmRseUZ1bmN0aW9uTmFtZShleGVjKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYWxsZXIgaXMgdW5rbm93biwgYnV0IGlmIGZyYW1l
IGlzIGVtcHR5IHdlIHNob3VsZCBzdGlsbCBhZGQgdGhlIGZyYW1lLCBiZWNhdXNlCi0gICAgICAg
ICAgICAvLyBzb21ldGhpbmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1cyBhcmd1bWVudHMuCi0gICAg
ICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICB1bnNpZ25lZCBsaW5lTnVtYmVyID0gZnJhbWUubGluZSgpOwogICAgICAgICBpZiAoIWJ1aWxk
ZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCcjJyk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGkpOwog
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzdGFj
a1RyYWNlW2ldLmZyaWVuZGx5RnVuY3Rpb25OYW1lKGV4ZWMpKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoaXRlci0+ZnVuY3Rpb25OYW1lKCkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIigpIGF0ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzdGFja1RyYWNlW2ldLmZyaWVu
ZGx5U291cmNlVVJMKCkpOwotICAgICAgICBpZiAoZnJhbWUuY29kZVR5cGUgIT0gU3RhY2tGcmFt
ZU5hdGl2ZUNvZGUpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaXRlci0+c291cmNlVVJMKCkp
OworICAgICAgICBpZiAoaXRlci0+aXNKU0ZyYW1lKCkpIHsKICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihsaW5lTnVtYmVy
KTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGl0ZXItPmxpbmUoKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKCFmdW5jdGlvbikKKworICAgICAgICBpZiAoIWNhbGxlZSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDE1MTU2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIyLDYgKzI0
MjIsMTggQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGludGVycHJldGVyXFN0YWNrSXRlcmF0
b3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvclByaXZhdGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0
b3IuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvagkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjIyLDYgKzIyMiw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRl
cnByZXRlclxDYWxsRnJhbWUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGlu
dGVycHJldGVyXEludGVycHJldGVyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxpbnRlcnByZXRlclxKU1N0YWNrLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9yLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIiAvPg0KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCIgLz4NCkBAIC01
NTQsNiArNTU1LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpT
U3RhY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxKU1N0
YWNrSW5saW5lcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVy
XFJlZ2lzdGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJc
U3RhY2tJdGVyYXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJl
dGVyXFN0YWNrSXRlcmF0b3JQcml2YXRlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxqaXRcQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGppdFxDb21wYWN0SklUQ29kZU1hcC5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE1MTU2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMjg1LDYgKzI4NSw5
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxKU1N0YWNrLmNwcCI+
DQogICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9yLmNw
cCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGls
ZT4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5j
cHAiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBp
bGU+DQpAQCAtMTIxMSw2ICsxMjE0LDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxp
bnRlcnByZXRlclxSZWdpc3Rlci5oIj4NCiAgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0
ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVy
cHJldGVyXFN0YWNrSXRlcmF0b3IuaCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRl
cnByZXRlclxTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIj4NCisgICAgICA8RmlsdGVyPmludGVycHJl
dGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9yLmgiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0
ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE1MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
NTMsNiArOTUzLDEwIEBACiAJCUZFMjQ1OTYyMTc2MDFENTgwMDc0RkNFMCAvKiBDYWxsRnJhbWVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTI0NTk2MTE3NjAxRDU4MDA3NEZDRTAgLyogQ2FsbEZyYW1lSW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNEEzMzFGMTVCRDJFMDcw
MDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3Iu
Y3BwICovOyB9OwogCQlGRTRBMzMyMDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFFMTVC
RDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNTI2QkQ1MTc2NjNBODQwMEIxMjBEQyAvKiBTdGFj
a0l0ZXJhdG9yUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU1MjZCRDQxNzY2M0E4NDAwQjEyMERDIC8qIFN0YWNrSXRlcmF0b3JQcml2YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2
N0RCOTMxNzUxOUI0QTAwNkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY3REI5MDE3NTE5QjRBMDA2QTgxNEYg
LyogSlNTdGFja0lubGluZXMuaCAqLzsgfTsKKwkJRkU2N0RCOTQxNzUxOUI0QTAwNkE4MTRGIC8q
IFN0YWNrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU2N0RCOTExNzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuY3BwICov
OyB9OworCQlGRTY3REI5NTE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2N0RCOTIxNzUxOUI0
QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTk0MDMyMjE3NDQ0MjU5MDA0N0NGNkUgLyogSklUU3R1
YnNYODZDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFOTQwMzIxMTc0NDQyNTkwMDQ3Q0Y2RSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQ0U3NDU3MTc0
NTQ1NjUwMEZGOTMwMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUNFNzQ1NjE3NDU0NTY1MDBGRjkz
MDAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICovOyB9OwogCQlGRUQyODdCMjE1RUM5
QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29k
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
OTg5LDYgKzE5OTMsMTAgQEAKIAkJRkUyNDU5NjExNzYwMUQ1ODAwNzRGQ0UwIC8qIENhbGxGcmFt
ZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEZyYW1lSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2
RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRB
MzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkU1MjZCRDQxNzY2M0E4NDAwQjEyMERDIC8qIFN0YWNrSXRlcmF0b3JQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrSXRlcmF0b3JQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjdEQjkwMTc1MTlCNEEwMDZBODE0RiAvKiBK
U1N0YWNrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0YWNr
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTY3REI5MTE3NTE5QjRB
MDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdGFja0l0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkU2N0RCOTIxNzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTk0MDMyMTE3NDQ0MjU5MDA0N0NGNkUgLyogSklUU3R1YnNYODZDb21t
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YnNYODZDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVDRTc0NTYxNzQ1NDU2NTAwRkY5MzAw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkVEMjg3QjExNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50T3Bjb2RlLmg7IHBhdGggPSBs
bGludC9MTEludE9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3OSw3
ICsyMjg3LDExIEBACiAJCQkJMTQyOUQ3N0IwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVy
LmggKi8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIEpTU3RhY2suY3BwICovLAog
CQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBKU1N0YWNrLmggKi8sCisJCQkJRkU2N0RC
OTAxNzUxOUI0QTAwNkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggKi8sCiAJCQkJMTQ5QjI0RkYw
RDhBRjZEMTAwOUNCOEM3IC8qIFJlZ2lzdGVyLmggKi8sCisJCQkJRkU2N0RCOTExNzUxOUI0QTAw
NkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuY3BwICovLAorCQkJCUZFNjdEQjkyMTc1MTlCNEEwMDZB
ODE0RiAvKiBTdGFja0l0ZXJhdG9yLmggKi8sCisJCQkJRkU1MjZCRDQxNzY2M0E4NDAwQjEyMERD
IC8qIFN0YWNrSXRlcmF0b3JQcml2YXRlLmggKi8sCiAJCQkJRkU0QTMzMUQxNUJEMkUwNzAwNkY1
NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLywKIAkJCQlGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMg
LyogVk1JbnNwZWN0b3IuaCAqLywKIAkJCSk7CkBAIC0zMjYwLDYgKzMyNzIsOCBAQAogCQkJCTBG
QjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYzOTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFNjdEQjk1MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTUyNkJENTE3NjYzQTg0MDBCMTIwREMgLyog
U3RhY2tJdGVyYXRvclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVGMTc0MzQz
Q0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTI0NTk2
MjE3NjAxRDU4MDA3NEZDRTAgLyogQ2FsbEZyYW1lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkVGNjgzNjAxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTM2OTMsNiArMzcwNyw3IEBACiAJCQkJMEZEODJFNTQxNDFEQUVFRTAwMTc5Qzk0
IC8qIFNwZWN1bGF0ZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERGMDREQTE2QjM5OTZE
MDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZFNjdEQjkzMTc1MTlCNEEwMDZBODE0RiAvKiBKU1N0YWNrSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmlj
dEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBC
MzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtNDIy
Niw2ICs0MjQxLDcgQEAKIAkJCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkRCNjQ2NDBGOTVDNkZDMDBEN0Q5
MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNTZBMUQ1MTUwMDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZFNjdEQjk0MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0
S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRCMkNDRjE3NDJEN0Q4MDA3QjNDMUIgLyog
RlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9u
IDE1MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw5OCArNjcsNiBAQCB2b2lkIENhbGxGcmFtZTo6c2V0
Q3VycmVudFZQQyhJbnN0cnVjdGlvCiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkK
LUNhbGxGcmFtZSogQ2FsbEZyYW1lOjp0cnVlQ2FsbEZyYW1lKCkKLXsKLSAgICAvLyBBbSBJIGFu
IGlubGluZSBjYWxsIGZyYW1lPyBJZiBzbywgd2UncmUgZG9uZS4KLSAgICBpZiAoaXNJbmxpbmVk
RnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgCi0gICAgLy8gSWYgSSBkb24ndCBo
YXZlIGEgY29kZSBibG9jaywgdGhlbiBJJ20gbm90IERGRyBjb2RlLCBzbyBJJ20gdGhlIHRydWUg
Y2FsbCBmcmFtZS4KLSAgICBDb2RlQmxvY2sqIG1hY2hpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2so
KTsKLSAgICBpZiAoIW1hY2hpbmVDb2RlQmxvY2spCi0gICAgICAgIHJldHVybiB0aGlzOwotICAg
IAotICAgIC8vIElmIHRoZSBjb2RlIGJsb2NrIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgb3JpZ2lu
cywgdGhlbiB0aGVyZSB3YXMgbm8gaW5saW5pbmcsIHNvCi0gICAgLy8gSSdtIGRvbmUuCi0gICAg
aWYgKCFtYWNoaW5lQ29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKQotICAgICAgICByZXR1cm4g
dGhpczsKLSAgICAKLSAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBDb2RlT3JpZ2luLiBJZiB3
ZSBkb24ndCBoYXZlIGEgcGMgc2V0IHRoZW4gdGhlIG9ubHkgd2F5Ci0gICAgLy8gdGhhdCB0aGlz
IG1ha2VzIHNlbnNlIGlzIGlmIHRoZSBDb2RlT3JpZ2luIGluZGV4IHdhcyBzZXQgaW4gdGhlIGNh
bGwgZnJhbWUuCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwotICAgIHVuc2lnbmVkIGluZGV4
ID0gbG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOwotICAgIEFTU0VSVChtYWNoaW5lQ29kZUJs
b2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSk7Ci0gICAgaWYgKCFtYWNoaW5lQ29kZUJsb2Nr
LT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSkgewotICAgICAgICAvLyBTZWUgYWJvdmUuIEluIHJl
bGVhc2UgYnVpbGRzLCB3ZSB0cnkgdG8gcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjcmFzaGluZyBl
dmVuCi0gICAgICAgIC8vIHRob3VnaCBzdGFjayB3YWxraW5nIHdpbGwgYmUgZ29vZmVkIHVwLgot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgY29kZU9yaWdpbiA9IG1hY2hpbmVDb2RlQmxv
Y2stPmNvZGVPcmlnaW4oaW5kZXgpOwotCi0gICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKLSAgICAgICAgcmV0dXJuIHRoaXM7IC8vIE5vdCBjdXJyZW50bHkgaW4gaW5saW5lZCBj
b2RlLgotCi0gICAgQ29kZU9yaWdpbiBpbm5lck1vc3RDb2RlT3JpZ2luID0gY29kZU9yaWdpbjsK
LQotICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOykgewotICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIG5leHRJbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxp
bmVDYWxsRnJhbWU7Ci0gICAgICAgIAotICAgICAgICBDYWxsRnJhbWUqIGlubGluZWRDYWxsZXIg
PSB0aGlzICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgCi0gICAgICAg
IEpTRnVuY3Rpb24qIGNhbGxlZUFzRnVuY3Rpb24gPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5n
ZXQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbGwgaW4gdGhlIGlubGluZWRDYWxsZXIKLSAg
ICAgICAgaW5saW5lZENhbGxlci0+c2V0Q29kZUJsb2NrKGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2soKSk7Ci0gICAgICAgIGlmIChjYWxsZWVBc0Z1bmN0aW9uKQotICAgICAgICAg
ICAgaW5saW5lZENhbGxlci0+c2V0U2NvcGUoY2FsbGVlQXNGdW5jdGlvbi0+c2NvcGUoKSk7Ci0g
ICAgICAgIGlmIChuZXh0SW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgaW5saW5lZENhbGxl
ci0+c2V0Q2FsbGVyRnJhbWUodGhpcyArIG5leHRJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5saW5lZENhbGxlci0+c2V0Q2FsbGVyRnJh
bWUodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRJbmxpbmVDYWxs
RnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKTsK
LSAgICAgICAgaW5saW5lZENhbGxlci0+c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlubGluZWRDYWxsZXItPnNldElzSW5saW5l
ZEZyYW1lKCk7Ci0gICAgICAgIGlmIChjYWxsZWVBc0Z1bmN0aW9uKQotICAgICAgICAgICAgaW5s
aW5lZENhbGxlci0+c2V0Q2FsbGVlKGNhbGxlZUFzRnVuY3Rpb24pOwotICAgICAgICAKLSAgICAg
ICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwotICAgICAgICBpbmxpbmVD
YWxsRnJhbWUgPSBuZXh0SW5saW5lQ2FsbEZyYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
dGhpcyArIGlubmVyTW9zdENvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsK
LX0KLSAgICAgICAgCi1DYWxsRnJhbWUqIENhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1lKCkKLXsK
LSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gdGhpcy0+Y2FsbGVyRnJhbWUoKS0+cmVtb3Zl
SG9zdENhbGxGcmFtZUZsYWcoKTsKLSAgICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAgICByZXR1
cm4gY2FsbGVyRnJhbWU7Ci0KLSAgICAvLyB0aGlzIC0+IFRoZSBjYWxsZWU7IHRoaXMgaXMgZWl0
aGVyIGFuIGlubGluZWQgY2FsbGVlIGluIHdoaWNoIGNhc2UgaXQgYWxyZWFkeSBoYXMKLSAgICAv
LyAgICBhIHBvaW50ZXIgdG8gdGhlIHRydWUgY2FsbGVyLiBPdGhlcndpc2UgaXQgY29udGFpbnMg
Y3VycmVudCBQQyBpbiB0aGUgbWFjaGluZQotICAgIC8vICAgIGNhbGxlci4KLSAgICAvLwotICAg
IC8vIG1hY2hpbmVDYWxsZXIgLT4gVGhlIGNhbGxlciBhY2NvcmRpbmcgdG8gdGhlIG1hY2hpbmUs
IHdoaWNoIG1heSBiZSB6ZXJvIG9yCi0gICAgLy8gICAgbW9yZSBmcmFtZXMgYWJvdmUgdGhlIHRy
dWUgY2FsbGVyIGR1ZSB0byBpbmxpbmluZy4KLQotICAgIC8vIEFtIEkgYW4gaW5saW5lIGNhbGwg
ZnJhbWU/IElmIHNvLCB3ZSdyZSBkb25lLgotICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQotICAg
ICAgICByZXR1cm4gY2FsbGVyRnJhbWU7Ci0gICAgCi0gICAgLy8gSSBhbSBhIG1hY2hpbmUgY2Fs
bCBmcmFtZSwgc28gdGhlIHF1ZXN0aW9uIGlzOiBpcyBteSBjYWxsZXIgYSBtYWNoaW5lIGNhbGwg
ZnJhbWUKLSAgICAvLyB0aGF0IGhhcyBpbmxpbmVzIG9yIGEgbWFjaGluZSBjYWxsIGZyYW1lIHRo
YXQgZG9lc24ndD8KLSAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGlmICghY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4gY2FsbGVy
RnJhbWU7Ci0gICAgQVNTRVJUKCFjYWxsZXJGcmFtZS0+aXNJbmxpbmVkRnJhbWUoKSk7Ci0gICAg
Ci0gICAgcmV0dXJuIGNhbGxlckZyYW1lLT50cnVlQ2FsbEZyYW1lKCktPnJlbW92ZUhvc3RDYWxs
RnJhbWVGbGFnKCk7Ci19Ci0KIHVuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRGcm9t
Q29kZU9yaWdpbkluZGV4KCkKIHsKICAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0NvZGVPcmlnaW5J
bmRleCgpKTsKQEAgLTE4OSw0ICs5NywzNCBAQCBSZWdpc3RlciogQ2FsbEZyYW1lOjpmcmFtZUV4
dGVudEludGVybmFsCiAgICAgcmV0dXJuIHJlZ2lzdGVycygpICsgY29kZUJsb2NrLT5tX251bUNh
bGxlZVJlZ2lzdGVyczsKIH0KIAorU3RhY2tJdGVyYXRvciBDYWxsRnJhbWU6OmJlZ2luKFN0YWNr
SXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAgICBpZiAoIXRoaXMpCisgICAgICAg
IHJldHVybiBTdGFja0l0ZXJhdG9yOjplbXB0eSgpOworCisgICAgU3RhY2tJdGVyYXRvciBpdGVy
KCZ2bSgpKTsKKyAgICBpdGVyLmJlZ2luKGZpbHRlcik7CisgICAgcmV0dXJuIGl0ZXI7Cit9CisK
K1N0YWNrSXRlcmF0b3IgQ2FsbEZyYW1lOjpmaW5kKENhbGxGcmFtZSogc3RhcnRGcmFtZSwgU3Rh
Y2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQoreworICAgIGlmICghdGhpcykKKyAgICAg
ICAgcmV0dXJuIFN0YWNrSXRlcmF0b3I6OmVtcHR5KCk7CisKKyAgICBTdGFja0l0ZXJhdG9yIGl0
ZXIoJnZtKCkpOworICAgIGl0ZXIuYmVnaW5BdChzdGFydEZyYW1lLCBmaWx0ZXIpOworICAgIHJl
dHVybiBpdGVyOyAgICAKK30KKworU3RhY2tJdGVyYXRvciBDYWxsRnJhbWU6OmZpbmQoSlNGdW5j
dGlvbiogY2FsbGVlRnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRl
cikKK3sKKyAgICBpZiAoIXRoaXMpCisgICAgICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjplbXB0
eSgpOworCisgICAgU3RhY2tJdGVyYXRvciBpdGVyKCZ2bSgpKTsKKyAgICBpdGVyLmJlZ2luQXQo
Y2FsbGVlRnVuY3Rpb25PYmosIGZpbHRlcik7CisgICAgcmV0dXJuIGl0ZXI7ICAgIAorfQorCiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CShyZXZpc2lvbiAxNTE1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJK
U1N0YWNrLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAi
UmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIgogCiBuYW1lc3Bh
Y2UgSlNDICB7CiAKQEAgLTI3MywyMSArMjc0LDE0IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAg
ICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIHZvaWQgc2V0SW5saW5lQ2FsbEZyYW1l
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVy
Kj4odGhpcylbSlNTdGFjazo6UmV0dXJuUENdID0gaW5saW5lQ2FsbEZyYW1lOyB9Ci0KLSAgICAg
ICAgLy8gQ2FsbCB0aGlzIHRvIGdldCB0aGUgc2VtYW50aWNhbGx5IGNvcnJlY3QgSlMgQ2FsbEZy
YW1lKiBmb3IgdGhlCi0gICAgICAgIC8vIGN1cnJlbnRseSBleGVjdXRpbmcgZnVuY3Rpb24uCi0g
ICAgICAgIENhbGxGcmFtZSogdHJ1ZUNhbGxGcmFtZSgpOwotCi0gICAgICAgIC8vIENhbGwgdGhp
cyB0byBnZXQgdGhlIHNlbWFudGljYWxseSBjb3JyZWN0IEpTIENhbGxGcmFtZSogY29ycmVzcG9u
ZGluZwotICAgICAgICAvLyB0byB0aGUgY2FsbGVyLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJy
b3VuZGluZyBpbmxpbmluZyBhbmQgdGhlCi0gICAgICAgIC8vIEhvc3RDYWxsRnJhbWVGbGFnIHN0
dWZmLgotICAgICAgICBDYWxsRnJhbWUqIHRydWVDYWxsZXJGcmFtZSgpOwotI2Vsc2UKLSAgICAg
ICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbEZyYW1lKCkgeyByZXR1cm4gdGhpczsgfQotICAgICAgICBD
YWxsRnJhbWUqIHRydWVDYWxsZXJGcmFtZSgpIHsgcmV0dXJuIGNhbGxlckZyYW1lKCktPnJlbW92
ZUhvc3RDYWxsRnJhbWVGbGFnKCk7IH0KICNlbmRpZgogICAgICAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lTm9GbGFncygpIHsgcmV0dXJuIGNhbGxlckZyYW1lKCktPnJlbW92ZUhvc3RDYWxsRnJh
bWVGbGFnKCk7IH0KIAorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yIGJl
Z2luKFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3IgZmluZChDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFN0
YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFN0YWNrSXRlcmF0b3IgZmluZChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9iaiwg
U3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3RhY2tJdGVyYXRvcjo6RnJhbWUqIGVuZCgpIHsgcmV0dXJuIFN0YWNrSXRlcmF0
b3I6OmVuZCgpOyB9IAorCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IGludHB0
cl90IEhvc3RDYWxsRnJhbWVGbGFnID0gMTsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBzX3Ro
aXNBcmd1bWVudE9mZnNldCA9IC0xIC0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2lu
Y2x1ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVk
ZSAiU2FtcGxpbmdUb29sLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1ZGUg
IlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2lu
Y2x1ZGUgPGxpbWl0cy5oPgpAQCAtMjAwLDggKzIwMSw2IEBAIEludGVycHJldGVyOjpTdGFja1Bv
bGljeTo6U3RhY2tQb2xpY3koSW4KIH0KIAogCi1zdGF0aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJ
bmZvKFZNKiwgQ2FsbEZyYW1lKiwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sq
JiBjYWxsZXJPdXQpOwotCiBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAg
ICAgaWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSkKQEAgLTQxMCwxMiArNDA5LDkgQEAg
dm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIGlmIChwYy5oYXNK
SVRSZXR1cm5BZGRyZXNzKCkpCiAgICAgICAgIGRhdGFMb2dGKCJbUmV0dXJuSklUUENdICAgICAg
ICAgICAgICB8ICUxMHAgfCAlcCBcbiIsIGl0LCBwYy5qaXRSZXR1cm5BZGRyZXNzKCkudmFsdWUo
KSk7CiAjZW5kaWYKLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7Ci0gICAgaW50IGxp
bmUgPSAwOwotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gMDsKLSAgICBnZXRDYWxs
ZXJJbmZvKCZjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNhbGxl
ckNvZGVCbG9jayk7Ci0gICAgbGluZSA9IGNhbGxlckNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBkYXRhTG9nRigiW1JldHVyblZQQ10g
ICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBpdCwgYnl0ZWNvZGVPZmZz
ZXQsIGxpbmUpOworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGNhbGxGcmFtZS0+ZmluZChjYWxs
RnJhbWUpOworICAgICsraXRlcjsKKyAgICBkYXRhTG9nRigiW1JldHVyblZQQ10gICAgICAgICAg
ICAgICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBpdCwgaXRlci0+Ynl0ZWNvZGVPZmZzZXQo
KSwgaXRlci0+bGluZSgpKTsKICAgICArK2l0OwogICAgIGRhdGFMb2dGKCJbQ29kZUJsb2NrXSAg
ICAgICAgICAgICAgICB8ICUxMHAgfCAlcCBcbiIsIGl0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
KTsKICAgICArK2l0OwpAQCAtNDY1LDggKzQ2MSwxMCBAQCBib29sIEludGVycHJldGVyOjppc09w
Y29kZShPcGNvZGUgb3Bjb2RlCiAjZW5kaWYKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJw
cmV0ZXI6OnVud2luZENhbGxGcmFtZShDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhj
ZXB0aW9uVmFsdWUsIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYgY29kZUJs
b2NrKQorTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZShTdGFj
a0l0ZXJhdG9yJiBpdGVyLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlKQogeworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gaXRlci0+Y2FsbEZyYW1lKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBpdGVyLT5jb2RlQmxvY2soKTsKICAgICBDb2RlQmxvY2sqIG9sZENvZGVCbG9jayA9IGNv
ZGVCbG9jazsKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKIApAQCAt
NDk2LDEwICs0OTQsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2Fs
CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgp
OwogICAgIGNhbGxGcmFtZS0+dm0oKS50b3BDYWxsRnJhbWUgPSBjYWxsZXJGcmFtZTsKLSAgICBp
ZiAoY2FsbGVyRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBjYWxsRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPnZtKCksIGNh
bGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuICFjYWxsZXJGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKTsKIH0KIAogc3Rh
dGljIHZvaWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXJyb3JJ
bnN0YW5jZSogZXhjZXB0aW9uLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKQEAgLTU1NCw2OCAr
NTQ5LDYgQEAgc3RhdGljIHZvaWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbQogICAgIGV4
Y2VwdGlvbi0+cHV0RGlyZWN0KCp2bSwgdm0tPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3Ry
aW5nKHZtLCBtZXNzYWdlKSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBnZXRCeXRlY29kZU9mZnNl
dEZvckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBjYWxsRnJhbWUgPSBj
YWxsRnJhbWUtPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCk7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGlmICghY29kZUJsb2NrKQotICAg
ICAgICByZXR1cm4gMDsKLSNpZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShERkdfSklUKQotICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAg
ICAgICByZXR1cm4gY29kZUJsb2NrLT5jb2RlT3JpZ2luKGNhbGxGcmFtZS0+bG9jYXRpb25Bc0Nv
ZGVPcmlnaW5JbmRleCgpKS5ieXRlY29kZUluZGV4OwotI2VuZGlmCi0gICAgcmV0dXJuIGNhbGxG
cmFtZS0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIENh
bGxGcmFtZSogZ2V0Q2FsbGVySW5mbyhWTSogdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNp
Z25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayomIGNhbGxlcikKLXsKLSAgICBVTlVTRURf
UEFSQU0odm0pOwotICAgIGJ5dGVjb2RlT2Zmc2V0ID0gMDsKLSAgICBBU1NFUlQoIWNhbGxGcmFt
ZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSk7Ci0gICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbGVyRnJh
bWUgPSBjYWxsRnJhbWUtPnRydWVDYWxsZXJGcmFtZSgpOwotICAgIEFTU0VSVCghdHJ1ZUNhbGxl
ckZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKLQotICAgIGlmICh0cnVlQ2FsbGVyRnJh
bWUgPT0gQ2FsbEZyYW1lOjpub0NhbGxlcigpIHx8ICF0cnVlQ2FsbGVyRnJhbWUgfHwgIXRydWVD
YWxsZXJGcmFtZS0+Y29kZUJsb2NrKCkpIHsKLSAgICAgICAgY2FsbGVyID0gMDsKLSAgICAgICAg
cmV0dXJuIHRydWVDYWxsZXJGcmFtZTsKLSAgICB9Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjYWxs
ZXJDb2RlQmxvY2sgPSB0cnVlQ2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotI2lmIEVOQUJMRShE
RkdfSklUKQotICAgIGlmICh0cnVlQ2FsbGVyRnJhbWUtPmhhc0xvY2F0aW9uQXNDb2RlT3JpZ2lu
SW5kZXgoKSkKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSB0cnVlQ2FsbGVyRnJhbWUtPmJ5dGVj
b2RlT2Zmc2V0RnJvbUNvZGVPcmlnaW5JbmRleCgpOwotICAgIGVsc2UKLSNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSB0cnVlQ2FsbGVyRnJhbWUtPmxv
Y2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOwotCi0gICAgY2FsbGVyID0gY2FsbGVyQ29kZUJsb2Nr
OwotICAgIHJldHVybiB0cnVlQ2FsbGVyRnJhbWU7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5F
IGNvbnN0IFN0cmluZyBnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lKQotewotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsK
LSAgICByZXR1cm4gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNv
dXJjZVVSTCgpOwotfQotCi1zdGF0aWMgU3RhY2tGcmFtZUNvZGVUeXBlIGdldFN0YWNrRnJhbWVD
b2RlVHlwZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+
aGFzSG9zdENhbGxGcmFtZUZsYWcoKSk7Ci0KLSAgICBzd2l0Y2ggKGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICByZXR1cm4g
U3RhY2tGcmFtZUV2YWxDb2RlOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICByZXR1
cm4gU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZTsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgICAg
IHJldHVybiBTdGFja0ZyYW1lR2xvYmFsQ29kZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RhY2tGcmFtZUdsb2JhbENvZGU7Ci19Ci0KIHVu
c2lnbmVkIFN0YWNrRnJhbWU6OmxpbmUoKQogewogICAgIHJldHVybiBjb2RlQmxvY2sgPyBjb2Rl
QmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkgKyBsaW5l
T2Zmc2V0IDogMDsKQEAgLTY2MSwzNCArNTk0LDI1IEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0
cmluZyhDYWxsRnJhbWUqIGMKIHZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVmVjdG9y
PFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewogICAgIFZNJiB2
bSA9IG1fdm07Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWUtPnJl
bW92ZUhvc3RDYWxsRnJhbWVGbGFnKCk7Ci0gICAgaWYgKCFjYWxsRnJhbWUgfHwgY2FsbEZyYW1l
ID09IENhbGxGcmFtZTo6bm9DYWxsZXIoKSkgCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IGdldEJ5dGVjb2RlT2Zmc2V0Rm9yQ2FsbEZyYW1lKGNhbGxGcmFt
ZSk7Ci0gICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT50cnVlQ2FsbEZyYW1lKCk7Ci0gICAgaWYg
KCFjYWxsRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICB3aGlsZSAoY2FsbEZyYW1lICYm
IGNhbGxGcmFtZSAhPSBDYWxsRnJhbWU6Om5vQ2FsbGVyKCkgJiYgbWF4U3RhY2tTaXplLS0pIHsK
LSAgICAgICAgU3RyaW5nIHNvdXJjZVVSTDsKLSAgICAgICAgaWYgKGNhbGxlckNvZGVCbG9jaykg
ewotICAgICAgICAgICAgc291cmNlVVJMID0gZ2V0U291cmNlVVJMRnJvbUNhbGxGcmFtZShjYWxs
RnJhbWUpOwotICAgICAgICAgICAgU3RhY2tGcmFtZSBzKFN0cm9uZzxKU09iamVjdD4odm0sIGNh
bGxGcmFtZS0+Y2FsbGVlKCkpLAotICAgICAgICAgICAgICAgIGdldFN0YWNrRnJhbWVDb2RlVHlw
ZShjYWxsRnJhbWUpLAotICAgICAgICAgICAgICAgIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4odm0s
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgICAgIFN0
cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4odm0sIGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKSksCi0gICAgICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLT5zb3VyY2UoKSwKLSAg
ICAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8o
KSwKLSAgICAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpLAotICAg
ICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAgICAgICAgICAgIHNvdXJjZVVSTCk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWU7CisgICAgU3RhY2tJ
dGVyYXRvciBpdGVyID0gY2FsbEZyYW1lLT5iZWdpbigpOworICAgIGZvciAoOyBpdGVyICE9IGNh
bGxGcmFtZS0+ZW5kKCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlcikgeworICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGl0ZXItPmNvZGVCbG9jaygpOworICAgICAgICBpZiAoY29kZUJs
b2NrKSB7CisgICAgICAgICAgICBTdGFja0ZyYW1lIHMoU3Ryb25nPEpTT2JqZWN0Pih2bSwgaXRl
ci0+Y2FsbGVlKCkpLAorICAgICAgICAgICAgICAgIFN0YWNrRnJhbWVDb2RlVHlwZShpdGVyLT5j
b2RlVHlwZSgpKSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KHZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8VW5s
aW5rZWRDb2RlQmxvY2s+KHZtLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpLAorICAg
ICAgICAgICAgICAgIGNvZGVCbG9jay0+c291cmNlKCksCisgICAgICAgICAgICAgICAgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bGluZU5vKCksCisgICAgICAgICAgICAgICAgY29kZUJs
b2NrLT5zb3VyY2VPZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBpdGVyLT5ieXRlY29kZU9mZnNl
dCgpLAorICAgICAgICAgICAgICAgIGl0ZXItPnNvdXJjZVVSTCgpKTsKICAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKHMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RhY2tGcmFt
ZSBzKFN0cm9uZzxKU09iamVjdD4odm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCkpLCBTdGFja0ZyYW1l
TmF0aXZlQ29kZSwgU3Ryb25nPEV4ZWN1dGFibGVCYXNlPigpLCBTdHJvbmc8VW5saW5rZWRDb2Rl
QmxvY2s+KCksIDAsIDAsIDAsIDAsIFN0cmluZygpKTsKKyAgICAgICAgICAgIFN0YWNrRnJhbWUg
cyhTdHJvbmc8SlNPYmplY3Q+KHZtLCBpdGVyLT5jYWxsZWUoKSksIFN0YWNrRnJhbWVOYXRpdmVD
b2RlLCBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KCksIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4o
KSwgMCwgMCwgMCwgMCwgU3RyaW5nKCkpOwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocyk7
CiAgICAgICAgIH0KLSAgICAgICAgY2FsbEZyYW1lID0gZ2V0Q2FsbGVySW5mbygmdm0sIGNhbGxG
cmFtZSwgYnl0ZWNvZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgfQogfQogCkBAIC03
NjQsMTIgKzY4OCwyMCBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0
CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcg
Y2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsK
LSAgICB3aGlsZSAoaXNUZXJtaW5hdGlvbiB8fCAhKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRs
ZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7Ci0gICAgICAgIGlmICghdW53
aW5kQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGJ5dGVjb2RlT2Zmc2V0LCBj
b2RlQmxvY2spKSB7Ci0gICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0g
Y2FsbEZyYW1lLT52bSgpLmVuYWJsZWRQcm9maWxlcigpKQotICAgICAgICAgICAgICAgIHByb2Zp
bGVyLT5leGNlcHRpb25VbndpbmQoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICB9CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGZvciAoU3RhY2tJ
dGVyYXRvciBpdGVyID0gY2FsbEZyYW1lLT5iZWdpbigpOyBpdGVyICE9IGNhbGxGcmFtZS0+ZW5k
KCk7ICsraXRlcikgeworICAgICAgICBjYWxsRnJhbWUgPSBpdGVyLT5jYWxsRnJhbWUoKTsKKyAg
ICAgICAgY29kZUJsb2NrID0gaXRlci0+Y29kZUJsb2NrKCk7CisgICAgICAgIGJ5dGVjb2RlT2Zm
c2V0ID0gaXRlci0+Ynl0ZWNvZGVPZmZzZXQoKTsKKworICAgICAgICBpZiAoaXNUZXJtaW5hdGlv
biB8fCAhKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCkpKSB7CisgICAgICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShpdGVyLCBl
eGNlcHRpb25WYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHBy
b2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHByb2Zp
bGVyLT5leGNlcHRpb25VbndpbmQoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBicmVhazsKICAg
ICB9CiAKICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT52bSgp
LmVuYWJsZWRQcm9maWxlcigpKQpAQCAtMTM2OCw1NyArMTMwMCw3IEBAIE5FVkVSX0lOTElORSB2
b2lkIEludGVycHJldGVyOjpkZWJ1ZyhDYWwKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRSZWFj
aEJyZWFrcG9pbnQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1
dGFibGUoKS0+c291cmNlSUQoKSwgbGFzdExpbmUsIGNvbHVtbik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQotfQotICAgIAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVu
dHNGcm9tVk1Db2RlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikg
Y29uc3QKLXsKLSAgICBDYWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZyYW1lID0gZmluZEZ1bmN0aW9u
Q2FsbEZyYW1lRnJvbVZNQ29kZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLSAgICBpZiAoIWZ1bmN0
aW9uQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBBcmd1bWVudHMq
IGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT52bSgpLCBm
dW5jdGlvbkNhbGxGcmFtZSk7Ci0gICAgYXJndW1lbnRzLT50ZWFyT2ZmKGZ1bmN0aW9uQ2FsbEZy
YW1lKTsKLSAgICByZXR1cm4gSlNWYWx1ZShhcmd1bWVudHMpOwotfQotCi1KU1ZhbHVlIEludGVy
cHJldGVyOjpyZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAotewotICAgIENhbGxGcmFtZSogZnVuY3Rpb25DYWxs
RnJhbWUgPSBmaW5kRnVuY3Rpb25DYWxsRnJhbWVGcm9tVk1Db2RlKGNhbGxGcmFtZSwgZnVuY3Rp
b24pOwotCi0gICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwotICAgIAotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwotICAgIENvZGVCbG9jayog
dW51c2VkQ2FsbGVyQ29kZUJsb2NrID0gMDsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0g
Z2V0Q2FsbGVySW5mbygmY2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbkNhbGxGcmFtZSwgYnl0ZWNv
ZGVPZmZzZXQsIHVudXNlZENhbGxlckNvZGVCbG9jayk7Ci0gICAgaWYgKCFjYWxsZXJGcmFtZSkK
LSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIEpTVmFsdWUgY2FsbGVyID0gY2FsbGVyRnJh
bWUtPmNhbGxlZSgpOwotICAgIGlmICghY2FsbGVyKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7
Ci0KLSAgICAvLyBTa2lwIG92ZXIgZnVuY3Rpb24gYmluZGluZ3MuCi0gICAgQVNTRVJUKGNhbGxl
ci5pc09iamVjdCgpKTsKLSAgICB3aGlsZSAoYXNPYmplY3QoY2FsbGVyKS0+aW5oZXJpdHMoJkpT
Qm91bmRGdW5jdGlvbjo6c19pbmZvKSkgewotICAgICAgICBjYWxsZXJGcmFtZSA9IGdldENhbGxl
ckluZm8oJmNhbGxGcmFtZS0+dm0oKSwgY2FsbGVyRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCB1bnVz
ZWRDYWxsZXJDb2RlQmxvY2spOwotICAgICAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAgICBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVl
KCk7Ci0gICAgICAgIGlmICghY2FsbGVyKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBjYWxsZXI7Ci19Ci0KLUNhbGxGcmFtZSogSW50ZXJwcmV0ZXI6
OmZpbmRGdW5jdGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uKQotewotICAgIGZvciAoQ2FsbEZyYW1lKiBjYW5kaWRhdGUgPSBj
YWxsRnJhbWUtPnRydWVDYWxsRnJhbWUoKTsgY2FuZGlkYXRlOyBjYW5kaWRhdGUgPSBjYW5kaWRh
dGUtPnRydWVDYWxsZXJGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUtPmNhbGxlZSgp
ID09IGZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIDA7Ci19Cit9ICAgIAogCiB2b2lkIEludGVycHJldGVyOjplbmFibGVTYW1wbGVyKCkK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5oCShyZXZpc2lvbiAxNTE1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBjbGFzcyBSZWdpc3RlcjsKICAgICBjbGFzcyBKU1Njb3BlOwogICAg
IGNsYXNzIFNhbXBsaW5nVG9vbDsKKyAgICBjbGFzcyBTdGFja0l0ZXJhdG9yOwogICAgIHN0cnVj
dCBDYWxsRnJhbWVDbG9zdXJlOwogICAgIHN0cnVjdCBIYW5kbGVySW5mbzsKICAgICBzdHJ1Y3Qg
SW5zdHJ1Y3Rpb247CkBAIC0yMzUsMTcgKzIzNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSlNPYmplY3QqIGV4ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1lKiwgSlNPYmplY3QqIGZ1bmN0
aW9uLCBDb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYp
OwogICAgICAgICBKU1ZhbHVlIGV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNTY29wZSopOwogCi0gICAgICAgIEpTVmFsdWUgcmV0cmlldmVB
cmd1bWVudHNGcm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKLSAgICAg
ICAgSlNWYWx1ZSByZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlv
biopIGNvbnN0OwotICAgICAgICAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxG
cmFtZSosIEpTRnVuY3Rpb24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdp
c3RlciomIGFyZ3YsIGludCYgYXJnYyk7CiAgICAgICAgIAogICAgICAgICBTYW1wbGluZ1Rvb2wq
IHNhbXBsZXIoKSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0KCk7IH0KIAogICAgICAgICBORVZFUl9J
TkxJTkUgSGFuZGxlckluZm8qIHRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomLCBKU1ZhbHVlJiwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1
ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBp
bnQgY29sdW1uKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyBnZXRUcmFjZUxpbmUoQ2Fs
bEZyYW1lKiwgU3RhY2tGcmFtZUNvZGVUeXBlLCBjb25zdCBTdHJpbmcmLCBpbnQpOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJhbWU+
JiByZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGFkZFN0YWNrVHJhY2VJZk5lY2Vzc2Fy
eShDYWxsRnJhbWUqLCBKU1ZhbHVlIGVycm9yKTsKIAogICAgICAgICB2b2lkIGR1bXBTYW1wbGVE
YXRhKEV4ZWNTdGF0ZSogZXhlYyk7CkBAIC0yNzEsOSArMjY3LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW5kUmVwZWF0Q2FsbChDYWxsRnJhbWVDbG9zdXJlJik7CiAgICAgICAg
IEpTVmFsdWUgZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJik7CiAKLSAgICAgICAgTkVWRVJfSU5M
SU5FIGJvb2wgdW53aW5kQ2FsbEZyYW1lKENhbGxGcmFtZSomLCBKU1ZhbHVlLCB1bnNpZ25lZCYg
Ynl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayomKTsKLQotICAgICAgICBzdGF0aWMgQ2FsbEZyYW1l
KiBmaW5kRnVuY3Rpb25DYWxsRnJhbWVGcm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24q
KTsKKyAgICAgICAgdm9pZCBnZXRTdGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0
cywgc2l6ZV90IG1heFN0YWNrU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCkpOworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tJdGVy
YXRvciYsIEpTVmFsdWUpOwogCiAgICAgICAgIHZvaWQgZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUq
KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxNTE0OTkpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcDoxNTE0OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0YWNrSXRl
cmF0b3IuaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGUu
aCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK1N0YWNrSXRlcmF0b3I6OlN0YWNrSXRlcmF0b3IoVk0qIHZtKQor
ICAgIDogbV92bSh2bSkKKyAgICAsIG1fZnJhbWUobnVsbHB0cikKKyAgICAsIG1fZmlsdGVyKG51
bGxwdHIpCit7Cit9CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6YmVnaW5BdChDYWxsRnJhbWUqIHN0
YXJ0RnJhbWUsIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAgICBpZiAo
IXN0YXJ0RnJhbWUpIHsKKyAgICAgICAgbV9mcmFtZSA9IG51bGxwdHI7CisgICAgICAgIG1fZmls
dGVyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVCgmc3Rh
cnRGcmFtZS0+dm0oKSA9PSBtX3ZtKTsKKyAgICBtX2ZyYW1lID0gRnJhbWU6OmNyZWF0ZShzdGFy
dEZyYW1lKTsKKyAgICBtX2ZpbHRlciA9IGZpbHRlcjsKKworICAgIG1fZnJhbWUgPSBtX2ZyYW1l
LT5sb2dpY2FsRnJhbWUoKTsKK30KKwordm9pZCBTdGFja0l0ZXJhdG9yOjpiZWdpbkF0KEpTRnVu
Y3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciBmaWx0
ZXIpCit7CisgICAgQVNTRVJUKGNhbGxlZUZ1bmN0aW9uT2JqKTsKKyAgICBiZWdpbkF0KG1fdm0t
PnRvcENhbGxGcmFtZSwgZmlsdGVyKTsKKyAgICBmaW5kRnJhbWVGb3JGdW5jdGlvbihjYWxsZWVG
dW5jdGlvbk9iaik7Cit9CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6Z290b05leHRGcmFtZSgpCit7
CisgICAgRnJhbWUqIGZyYW1lID0gbV9mcmFtZTsKKyAgICB3aGlsZSAoZnJhbWUpIHsKKyAgICAg
ICAgZnJhbWUgPSBmcmFtZS0+bG9naWNhbENhbGxlckZyYW1lKCk7CisgICAgICAgIGlmICghZnJh
bWUgfHwgIW1fZmlsdGVyIHx8ICFtX2ZpbHRlcihmcmFtZSkpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgbV9mcmFtZSA9IGZyYW1lOworfQorCit2b2lkIFN0YWNrSXRlcmF0b3I6OmZp
bmRGcmFtZUZvckZ1bmN0aW9uKEpTRnVuY3Rpb24qIGZ1bmN0aW9uT2JqKQoreworICAgIEpTT2Jq
ZWN0KiB0YXJnZXRDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZnVuY3Rpb25PYmop
OworICAgIHdoaWxlIChtX2ZyYW1lKSB7CisgICAgICAgIGlmIChtX2ZyYW1lLT5jYWxsZWUoKSA9
PSB0YXJnZXRDYWxsZWUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZ290b05leHRGcmFt
ZSgpOworICAgIH0KK30KKworU3RhY2tJdGVyYXRvcjo6RnJhbWU6OkNvZGVUeXBlIFN0YWNrSXRl
cmF0b3I6OkZyYW1lOjpjb2RlVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKCFpc0pTRnJhbWUoKSkK
KyAgICAgICAgcmV0dXJuIENvZGVUeXBlOjpOYXRpdmU7CisKKyAgICBzd2l0Y2ggKGNvZGVCbG9j
aygpLT5jb2RlVHlwZSgpKSB7CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgcmV0dXJuIENv
ZGVUeXBlOjpFdmFsOworICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICByZXR1cm4gQ29k
ZVR5cGU6OkZ1bmN0aW9uOworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICAgICAgcmV0dXJuIENv
ZGVUeXBlOjpHbG9iYWw7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIENvZGVUeXBlOjpHbG9iYWw7Cit9CisKK1N0cmluZyBTdGFja0l0ZXJhdG9y
OjpGcmFtZTo6ZnVuY3Rpb25OYW1lKCkKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOworICAgIEpT
T2JqZWN0KiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKTsKKworICAgIHN3aXRjaCAoY29kZVR5cGUo
KSkgeworICAgIGNhc2UgQ29kZVR5cGU6OkV2YWw6CisgICAgICAgIHRyYWNlTGluZSA9ICJldmFs
IGNvZGUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvZGVUeXBlOjpOYXRpdmU6CisgICAg
ICAgIGlmIChjYWxsZWUpCisgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlz
cGxheU5hbWUoY2FsbEZyYW1lKCksIGNhbGxlZSkuaW1wbCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvZGVUeXBlOjpGdW5jdGlvbjoKKyAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3Vs
YXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSgpLCBjYWxsZWUpLmltcGwoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb2RlVHlwZTo6R2xvYmFsOgorICAgICAgICB0cmFjZUxpbmUgPSAiZ2xv
YmFsIGNvZGUiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlTGluZS5p
c051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Cit9CisKK1N0cmluZyBTdGFja0l0
ZXJhdG9yOjpGcmFtZTo6c291cmNlVVJMKCkKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOworCisg
ICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBDb2RlVHlwZTo6RXZhbDoKKyAgICBj
YXNlIENvZGVUeXBlOjpGdW5jdGlvbjoKKyAgICBjYXNlIENvZGVUeXBlOjpHbG9iYWw6IHsKKyAg
ICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+
c291cmNlVVJMKCk7CisgICAgICAgIGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIENvZGVUeXBlOjpOYXRpdmU6CisgICAgICAgIHRyYWNlTGluZSA9ICJbbmF0aXZl
IGNvZGVdIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cmFjZUxpbmUuaXNO
dWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJhY2VMaW5lOworfQorCitTdHJpbmcgU3RhY2tJdGVy
YXRvcjo6RnJhbWU6OnRvU3RyaW5nKCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHRyYWNlQnVpbGQ7
CisgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IHRoaXMtPmZ1bmN0aW9uTmFtZSgpOworICAgIFN0
cmluZyBzb3VyY2VVUkwgPSB0aGlzLT5zb3VyY2VVUkwoKTsKKyAgICB0cmFjZUJ1aWxkLmFwcGVu
ZChmdW5jdGlvbk5hbWUpOworICAgIGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkgeworICAgICAg
ICBpZiAoIWZ1bmN0aW9uTmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICB0cmFjZUJ1aWxkLmFw
cGVuZCgnQCcpOworICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZChzb3VyY2VVUkwpOworICAgICAg
ICBpZiAoaXNKU0ZyYW1lKCkpIHsKKyAgICAgICAgICAgIHRyYWNlQnVpbGQuYXBwZW5kKCc6Jyk7
CisgICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZE51bWJlcihsaW5lKCkpOworICAgICAgICAg
ICAgdHJhY2VCdWlsZC5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgIHRyYWNlQnVpbGQuYXBwZW5k
TnVtYmVyKGNvbHVtbigpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJhY2VCdWls
ZC50b1N0cmluZygpLmltcGwoKTsKK30KKwordW5zaWduZWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6
OmJ5dGVjb2RlT2Zmc2V0KCkKK3sKKyAgICBpZiAoIWlzSlNGcmFtZSgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoaGFzTG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpKQorICAgICAgICBy
ZXR1cm4gYnl0ZWNvZGVPZmZzZXRGcm9tQ29kZU9yaWdpbkluZGV4KCk7CisgICAgcmV0dXJuIGxv
Y2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOworfQorCit1bnNpZ25lZCBTdGFja0l0ZXJhdG9yOjpG
cmFtZTo6bGluZSgpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxv
Y2soKTsKKyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgVW5saW5r
ZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpOworICAgIEFTU0VSVCh1bmxpbmtlZENvZGVCbG9jayk7CisgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSB0aGlzLT5ieXRlY29kZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxpbmVP
ZmZzZXQgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8oKTsKKyAgICByZXR1
cm4gdW5saW5rZWRDb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCkgKyBsaW5lT2Zmc2V0OworfQorCit1bnNpZ25lZCBTdGFja0l0ZXJhdG9yOjpGcmFt
ZTo6Y29sdW1uKCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9j
aygpOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm4gMDsKKyAgICBTb3VyY2VQ
cm92aWRlciogc291cmNlUHJvdmlkZXIgPSBjb2RlQmxvY2stPnNvdXJjZSgpOworICAgIGlmICgh
c291cmNlUHJvdmlkZXIpCisgICAgICAgIHJldHVybiAwOworICAgIGludCBkaXZvdCA9IDA7Cisg
ICAgaW50IHVudXNlZFN0YXJ0T2Zmc2V0ID0gMDsKKyAgICBpbnQgdW51c2VkRW5kT2Zmc2V0ID0g
MDsKKyAgICByZXRyaWV2ZUV4cHJlc3Npb25JbmZvKGRpdm90LCB1bnVzZWRTdGFydE9mZnNldCwg
dW51c2VkRW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gc291cmNlUHJvdmlkZXItPmNoYXJQb3NpdGlv
blRvQ29sdW1uTnVtYmVyKGRpdm90KTsKK30KKworQXJndW1lbnRzKiBTdGFja0l0ZXJhdG9yOjpG
cmFtZTo6YXJndW1lbnRzKCkKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHRoaXMtPmNh
bGxGcmFtZSgpOworICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUo
dm0oKSwgY2FsbEZyYW1lKTsKKyAgICBhcmd1bWVudHMtPnRlYXJPZmYoY2FsbEZyYW1lKTsKKyAg
ICByZXR1cm4gYXJndW1lbnRzOworfQorCit2b2lkIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpyZXRy
aWV2ZUV4cHJlc3Npb25JbmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5k
T2Zmc2V0KQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7
CisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIHVubGlua2Vk
Q29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCgpLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgZGl2b3QgKz0gY29kZUJs
b2NrLT5zb3VyY2VPZmZzZXQoKTsKK30KKworU3RhY2tJdGVyYXRvcjo6RnJhbWUqIFN0YWNrSXRl
cmF0b3I6OkZyYW1lOjpsb2dpY2FsRnJhbWUoKQoreworI2lmICFFTkFCTEUoREZHX0pJVCkKKyAg
ICByZXR1cm4gdGhpczsKKworI2Vsc2UgLy8gIUVOQUJMRShERkdfSklUKQorICAgIGlmIChpc0lu
bGluZWRGcmFtZSgpKQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIC8vIElmIEkgZG9uJ3Qg
aGF2ZSBhIGNvZGUgYmxvY2ssIHRoZW4gSSdtIG5vdCBERkcgY29kZSwgc28gSSdtIHRoZSB0cnVl
IGNhbGwgZnJhbWUuCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2so
KTsKKyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAvLyBJ
ZiB0aGUgY29kZSBibG9jayBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIG9yaWdpbnMsIHRoZW4gdGhl
cmUgd2FzIG5vIGlubGluaW5nLCBzbworICAgIC8vIEknbSBkb25lLgorICAgIGlmICghY29kZUJs
b2NrLT5oYXNDb2RlT3JpZ2lucygpKQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICAKKyAgICBD
b2RlQmxvY2sqIG91dGVyTW9zdENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IGxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKTsKKyAgICBBU1NFUlQob3V0ZXJNb3N0
Q29kZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSk7CisgICAgaWYgKCFvdXRlck1vc3RD
b2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKSB7CisgICAgICAgIC8vIFNlZSBhYm92
ZS4gSW4gcmVsZWFzZSBidWlsZHMsIHdlIHRyeSB0byBwcm90ZWN0IG91cnNlbHZlcyBmcm9tIGNy
YXNoaW5nIGV2ZW4KKyAgICAgICAgLy8gdGhvdWdoIHN0YWNrIHdhbGtpbmcgd2lsbCBiZSBnb29m
ZWQgdXAuCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IG91dGVyTW9zdENvZGVCbG9jay0+Y29kZU9yaWdpbihpbmRleCk7CisgICAg
aWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIHRoaXM7IC8v
IE5vdCBjdXJyZW50bHkgaW4gaW5saW5lZCBjb2RlLgorCisgICAgLy8gV2UndmUgZ290IGlubGlu
ZWQgZnJhbWVzLiBTbywgcmVpZnkgdGhlbSBzbyB0aGF0IHRoZSBpdGVyYXRvciBjYW4gd2FsayB0
aHJvdWdoIHRoZW0uCisgICAgQ2FsbEZyYW1lKiBjdXJyRnJhbWUgPSB0aGlzLT5jYWxsRnJhbWUo
KTsKKyAgICBDYWxsRnJhbWUqIGlubmVyTW9zdExvZ2ljYWxGcmFtZSA9IGN1cnJGcmFtZSArIGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKworICAgIENhbGxGcmFtZSog
bG9naWNhbEZyYW1lID0gaW5uZXJNb3N0TG9naWNhbEZyYW1lOworICAgIHdoaWxlIChsb2dpY2Fs
RnJhbWUgIT0gY3VyckZyYW1lKSB7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lZEZy
YW1lSW5mbyA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAKKyAgICAgICAg
Ly8gRmlsbCBpbiB0aGUgbG9naWNhbCAoaS5lLiBpbmxpbmVkKSBmcmFtZQorICAgICAgICBsb2dp
Y2FsRnJhbWUtPnNldENvZGVCbG9jayhpbmxpbmVkRnJhbWVJbmZvLT5iYXNlbGluZUNvZGVCbG9j
aygpKTsKKyAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRJbmxpbmVDYWxsRnJhbWUoaW5saW5lZEZy
YW1lSW5mbyk7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoaW5saW5lZEZyYW1lSW5mby0+YXJndW1lbnRzLnNpemUoKSk7CisgICAgICAgIGxvZ2lj
YWxGcmFtZS0+c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0SXNJbmxpbmVkRnJhbWUoKTsKKworICAg
ICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVkRnJhbWVJbmZvLT5jYWxsZWUuZ2V0KCk7
CisgICAgICAgIGlmIChjYWxsZWUpIHsKKyAgICAgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0U2Nv
cGUoY2FsbGVlLT5zY29wZSgpKTsKKyAgICAgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0Q2FsbGVl
KGNhbGxlZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENvZGVPcmlnaW4qIGNhbGxl
ckNvZGVPcmlnaW4gPSAmaW5saW5lZEZyYW1lSW5mby0+Y2FsbGVyOworICAgICAgICBJbmxpbmVD
YWxsRnJhbWUqIGNhbGxlcklubGluZWRGcmFtZUluZm8gPSBjYWxsZXJDb2RlT3JpZ2luLT5pbmxp
bmVDYWxsRnJhbWU7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlckZyYW1lT2Zmc2V0ID0gY2FsbGVy
SW5saW5lZEZyYW1lSW5mbyA/IGNhbGxlcklubGluZWRGcmFtZUluZm8tPnN0YWNrT2Zmc2V0IDog
MDsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGN1cnJGcmFtZSArIGNhbGxlckZy
YW1lT2Zmc2V0OworICAgICAgICBsb2dpY2FsRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxlckZy
YW1lKTsKKworICAgICAgICBjb2RlT3JpZ2luID0gKmNhbGxlckNvZGVPcmlnaW47CisgICAgICAg
IGxvZ2ljYWxGcmFtZSA9IGNhbGxlckZyYW1lOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoIWlu
bmVyTW9zdExvZ2ljYWxGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSk7CisgICAgcmV0dXJu
IEZyYW1lOjpjcmVhdGUoaW5uZXJNb3N0TG9naWNhbEZyYW1lKTsKKyNlbmRpZiAvLyAhRU5BQkxF
KERGR19KSVQpCit9CisKK1N0YWNrSXRlcmF0b3I6OkZyYW1lKiBTdGFja0l0ZXJhdG9yOjpGcmFt
ZTo6bG9naWNhbENhbGxlckZyYW1lKCkKK3sKKyAgICBGcmFtZSogY2FsbGVyRnJhbWUgPSBjcmVh
dGUodGhpcy0+Y2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKSk7CisjaWYg
IUVOQUJMRShERkdfSklUKQorICAgIHJldHVybiBjYWxsZXJGcmFtZTsKKworI2Vsc2UgLy8gIUVO
QUJMRShERkdfSklUKQorICAgIGlmICghaXNKU0ZyYW1lKCkgfHwgIWNhbGxlckZyYW1lKQorICAg
ICAgICByZXR1cm4gY2FsbGVyRnJhbWU7CisKKyAgICAvLyBJZiBJIGFtIGtub3duIHRvIGJlIGFu
IGlubGluZWQgZnJhbWUsIHRoZW4gSSd2ZSBiZWVuIHJlaWZpZWQgYWxyZWFkeSBhbmQKKyAgICAv
LyBoYXZlIG15IGNhbGxlci4KKyAgICBpZiAoaXNJbmxpbmVkRnJhbWUoKSkKKyAgICAgICAgcmV0
dXJuIGNhbGxlckZyYW1lOworICAgIAorICAgIC8vIEkgYW0gbm90IGFuIGlubGluZWQgZnJhbWUu
IFNvIHRoZSBxdWVzdGlvbiBpczogaXMgbXkgY2FsbGVyIGEgQ2FsbEZyYW1lCisgICAgLy8gdGhh
dCBoYXMgaW5saW5lcyBvciBhIENhbGxGcmFtZSB0aGF0IGRvZXNuJ3Q/CisKKyAgICAvLyBJZiBt
eSBjYWxsZXIgaXMgbm90IGEgSlMgZnJhbWUsIGl0IGNhbm5vdCBoYXZlIGlubGluZXMsIGFuZCB3
ZSdyZSBkb25lLgorICAgIGlmICghY2FsbGVyRnJhbWUtPmlzSlNGcmFtZSgpKQorICAgICAgICBy
ZXR1cm4gY2FsbGVyRnJhbWU7CisKKyAgICBBU1NFUlQoIWNhbGxlckZyYW1lLT5pc0lubGluZWRG
cmFtZSgpKTsKKyAgICByZXR1cm4gY2FsbGVyRnJhbWUtPmxvZ2ljYWxGcmFtZSgpOworCisjZW5k
aWYgLy8gIUVOQUJMRShERkdfSklUKQorfQorCisjaWZuZGVmIE5ERUJVRworCitzdGF0aWMgY29u
c3QgY2hhciogaml0VHlwZU5hbWUoSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQoreworICAgIHN3
aXRjaCAoaml0VHlwZSkgeworICAgIGNhc2UgSklUQ29kZTo6Tm9uZTogcmV0dXJuICJOb25lIjsK
KyAgICBjYXNlIEpJVENvZGU6Okhvc3RDYWxsVGh1bms6IHJldHVybiAiSG9zdENhbGxUaHVuayI7
CisgICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rOiByZXR1cm4gIkludGVycHJldGVy
VGh1bmsiOworICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6IHJldHVybiAiQmFzZWxpbmVK
SVQiOworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOiByZXR1cm4gIkRGR0pJVCI7CisgICAgY2Fz
ZSBKSVRDb2RlOjpGVExKSVQ6IHJldHVybiAiRlRMSklUIjsKKyAgICB9CisgICAgcmV0dXJuICI8
dW5rbm93bj4iOworfQorCitzdGF0aWMgdm9pZCBwcmludEluZGVudHMoaW50IGxldmVscykKK3sK
KyAgICB3aGlsZSAobGV2ZWxzLS0pCisgICAgICAgIGRhdGFMb2dGU3RyaW5nKCIgICAiKTsKK30K
Kworc3RhdGljIHZvaWQgcHJpbnRpZihpbnQgaW5kZW50TGV2ZWxzLCBjb25zdCBjaGFyKiBmb3Jt
YXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ0xpc3Q7CisgICAgdmFfc3RhcnQoYXJnTGlzdCwg
Zm9ybWF0KTsKKworICAgIGlmIChpbmRlbnRMZXZlbHMpCisgICAgICAgIHByaW50SW5kZW50cyhp
bmRlbnRMZXZlbHMpOworCisjaWYgQ09NUElMRVIoQ0xBTkcpIHx8IChDT01QSUxFUihHQ0MpICYm
IEdDQ19WRVJTSU9OX0FUX0xFQVNUKDQsIDYsIDApKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBw
dXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LW5vbmxpdGVyYWwi
CisjZW5kaWYKKworICAgIFdURjo6ZGF0YUxvZ0ZWKGZvcm1hdCwgYXJnTGlzdCk7CisKKyNpZiBD
T01QSUxFUihDTEFORykgfHwgKENPTVBJTEVSKEdDQykgJiYgR0NDX1ZFUlNJT05fQVRfTEVBU1Qo
NCwgNiwgMCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyAgICB2YV9l
bmQoYXJnTGlzdCk7Cit9CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OnByaW50KGludCBp
bmRlbnRMZXZlbCkKK3sKKyAgICBpbnQgaSA9IGluZGVudExldmVsOworCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKKyAgICBwcmludGlmKGksICJmcmFtZSAl
cCB7XG4iLCB0aGlzKTsKKworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSB0aGlzLT5jYWxs
ZXJGcmFtZSgpOworICAgIHZvaWQqIHJldHVyblBDID0gaGFzUmV0dXJuUEMoKT8gdGhpcy0+cmV0
dXJuUEMoKS52YWx1ZSgpIDogbnVsbHB0cjsKKworICAgIHByaW50aWYoaSwgIiAgIG5hbWUgJyVz
J1xuIiwgZnVuY3Rpb25OYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgcHJpbnRpZihpLCAiICAg
c291cmNlVVJMICclcydcbiIsIHNvdXJjZVVSTCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIHByaW50
aWYoaSwgIiAgIGhvc3RGbGFnICVkXG4iLCBjYWxsZXJGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZs
YWcoKSk7CisgICAgcHJpbnRpZihpLCAiICAgaXNJbmxpbmVkRnJhbWUgJWRcbiIsIGlzSW5saW5l
ZEZyYW1lKCkpOworCisgICAgaWYgKGlzSW5saW5lZEZyYW1lKCkpCisgICAgICAgIHByaW50aWYo
aSwgIiAgIElubGluZUNhbGxGcmFtZSAlcFxuIiwgdGhpcy0+aW5saW5lQ2FsbEZyYW1lKCkpOwor
CisgICAgcHJpbnRpZihpLCAiICAgY2FsbGVlICVwXG4iLCBjYWxsZWUoKSk7CisgICAgcHJpbnRp
ZihpLCAiICAgcmV0dXJuUEMgJXBcbiIsIHJldHVyblBDKTsKKyAgICBwcmludGlmKGksICIgICBj
YWxsZXJGcmFtZSAlcFxuIiwgY2FsbGVyRnJhbWUtPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCkp
OworICAgIHByaW50aWYoaSwgIiAgIGxvZ2ljYWxDYWxsZXJGcmFtZSAlcFxuIiwgbG9naWNhbENh
bGxlckZyYW1lKCkpOworICAgIHByaW50aWYoaSwgIiAgIHJhd0xvY2F0aW9uQml0cyAldSAweCV4
XG4iLCBsb2NhdGlvbkFzUmF3Qml0cygpLCBsb2NhdGlvbkFzUmF3Qml0cygpKTsKKyAgICBwcmlu
dGlmKGksICIgICBjb2RlQmxvY2sgJXBcbiIsIGNvZGVCbG9jayk7CisgICAgaWYgKGNvZGVCbG9j
aykgeworICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUgPSBjb2RlQmxvY2stPmppdFR5
cGUoKTsKKyAgICAgICAgaWYgKGhhc0xvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGxvY2F0aW9uQXNCeXRlY29kZU9mZnNl
dCgpOworICAgICAgICAgICAgcHJpbnRpZihpLCAiICAgICAgYnl0ZWNvZGVPZmZzZXQgJXUgJXAg
LyAlenVcbiIsIGJ5dGVjb2RlT2Zmc2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihieXRlY29k
ZU9mZnNldCksIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVPcmlnaW5JbmRleCA9IGxvY2F0aW9uQXND
b2RlT3JpZ2luSW5kZXgoKTsKKyAgICAgICAgICAgIHByaW50aWYoaSwgIiAgICAgIGNvZGVPcmln
aW5JZGV4ICV1ICVwIC8gJXp1XG4iLCBjb2RlT3JpZ2luSW5kZXgsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGNvZGVPcmlnaW5JbmRleCksIGNvZGVCbG9jay0+Y29kZU9yaWdpbnMoKS5zaXplKCkp
OworICAgICAgICB9CisgICAgICAgIHByaW50aWYoaSwgIiAgICAgIGxpbmUgJWRcbiIsIGxpbmUo
KSk7CisgICAgICAgIHByaW50aWYoaSwgIiAgICAgIGNvbHVtbiAlZFxuIiwgY29sdW1uKCkpOwor
ICAgICAgICBwcmludGlmKGksICIgICAgICBqaXRUeXBlICVkIDwlcz4gaXNPcHRpbWl6aW5nSklU
ICVkXG4iLCBqaXRUeXBlLCBqaXRUeXBlTmFtZShqaXRUeXBlKSwgSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUpKTsKKyAgICAgICAgcHJpbnRpZihpLCAiICAgICAgaGFzQ29kZU9yaWdp
bnMgJWRcbiIsIGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSk7CisgICAgICAgIGlmIChjb2Rl
QmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpIHsKKyAgICAgICAgICAgIEpJVENvZGUqIGppdENvZGUg
PSBjb2RlQmxvY2stPmppdENvZGUoKS5nZXQoKTsKKyAgICAgICAgICAgIHByaW50aWYoaSwgIiAg
ICAgICAgIGppdENvZGUgJXAgc3RhcnQgJXAgZW5kICVwXG4iLCBqaXRDb2RlLCBqaXRDb2RlLT5z
dGFydCgpLCBqaXRDb2RlLT5lbmQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRpZihp
LCAifVxuIik7Cit9CisKKyNlbmRpZiAvLyBOREVCVUcKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNpZm5kZWYgTkRFQlVHCisvLyBGb3IgdXNlIGluIHRoZSBkZWJ1Z2dlcgordm9pZCBkZWJ1Z1By
aW50Q2FsbEZyYW1lKEpTQzo6Q2FsbEZyYW1lKik7CisKK3ZvaWQgZGVidWdQcmludENhbGxGcmFt
ZShKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIGlmICghY2FsbEZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZSogZnJhbWUgPSBKU0M6
OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lKTsKKyAgICBmcmFtZS0+cHJp
bnQoMik7Cit9CisjZW5kaWYgLy8gIU5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywyNiArMzMsNTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK1N0
YWNrSXRlcmF0b3I6OkZyYW1lKiBTdGFja0l0ZXJhdG9yOjpzX2VtcHR5RnJhbWU7CisKK3ZvaWQg
U3RhY2tJdGVyYXRvcjo6aW5pdGlhbGl6ZVN0YXRpY3MoKQoreworICAgIHN0YXRpYyBSZWdpc3Rl
ciogZW1wdHlGcmFtZVJlZ2lzdGVycyA9IG5ldyBSZWdpc3RlcltKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplXTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gcmVpbnRlcnByZXRfY2Fz
dDxDYWxsRnJhbWUqPigmZW1wdHlGcmFtZVJlZ2lzdGVyc1tKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplXSk7CisgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygw
KTsKKyAgICBjYWxsRnJhbWUtPnNldExvY2F0aW9uQXNSYXdCaXRzKDApOworICAgIGNhbGxGcmFt
ZS0+c2V0Q2FsbGVyRnJhbWUobnVsbHB0cik7CisgICAgY2FsbEZyYW1lLT5zZXRDYWxsZWUobnVs
bHB0cik7CisgICAgY2FsbEZyYW1lLT5zZXRTY29wZShudWxscHRyKTsKKyAgICBjYWxsRnJhbWUt
PnNldFJldHVyblBDKG51bGxwdHIpOworICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxw
dHIpOworCisgICAgc19lbXB0eUZyYW1lID0gU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNyZWF0ZShj
YWxsRnJhbWUpOworfQorCiBTdGFja0l0ZXJhdG9yOjpTdGFja0l0ZXJhdG9yKFZNKiB2bSkKICAg
ICA6IG1fdm0odm0pCi0gICAgLCBtX2ZyYW1lKG51bGxwdHIpCisgICAgLCBtX2ZyYW1lKGVuZCgp
KQogICAgICwgbV9maWx0ZXIobnVsbHB0cikKIHsKIH0KIAotdm9pZCBTdGFja0l0ZXJhdG9yOjpi
ZWdpbkF0KENhbGxGcmFtZSogc3RhcnRGcmFtZSwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIg
ZmlsdGVyKQordm9pZCBTdGFja0l0ZXJhdG9yOjpiZWdpbihTdGFja0l0ZXJhdG9yOjpGcmFtZUZp
bHRlciBmaWx0ZXIpCiB7Ci0gICAgaWYgKCFzdGFydEZyYW1lKSB7Ci0gICAgICAgIG1fZnJhbWUg
PSBudWxscHRyOwotICAgICAgICBtX2ZpbHRlciA9IG51bGxwdHI7CisgICAgYmVnaW5BdChtX3Zt
ID8gbV92bS0+dG9wQ2FsbEZyYW1lIDogbnVsbHB0ciwgZmlsdGVyKTsKK30KKwordm9pZCBTdGFj
a0l0ZXJhdG9yOjpiZWdpbkF0KENhbGxGcmFtZSogZnJhbWUsIFN0YWNrSXRlcmF0b3I6OkZyYW1l
RmlsdGVyIGZpbHRlcikKK3sKKyAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgIG1fZnJhbWUgPSBl
bmQoKTsKKyAgICAgICAgbV9maWx0ZXIgPSBmaWx0ZXI7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBBU1NFUlQoJnN0YXJ0RnJhbWUtPnZtKCkgPT0gbV92bSk7Ci0gICAgbV9mcmFtZSA9
IEZyYW1lOjpjcmVhdGUoc3RhcnRGcmFtZSk7CisgICAgQVNTRVJUKCZmcmFtZS0+dm0oKSA9PSBt
X3ZtKTsKKyAgICBtX2ZyYW1lID0gRnJhbWU6OmNyZWF0ZShmcmFtZSk7CiAgICAgbV9maWx0ZXIg
PSBmaWx0ZXI7CiAKICAgICBtX2ZyYW1lID0gbV9mcmFtZS0+bG9naWNhbEZyYW1lKCk7CisgICAg
QVNTRVJUKG1fZnJhbWUpOwogfQogCiB2b2lkIFN0YWNrSXRlcmF0b3I6OmJlZ2luQXQoSlNGdW5j
dGlvbiogY2FsbGVlRnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRl
cikKQEAgLTY1LDE4ICs4OSwyMSBAQCB2b2lkIFN0YWNrSXRlcmF0b3I6OmJlZ2luQXQoSlNGdW5j
dGlvbiogCiB2b2lkIFN0YWNrSXRlcmF0b3I6OmdvdG9OZXh0RnJhbWUoKQogewogICAgIEZyYW1l
KiBmcmFtZSA9IG1fZnJhbWU7CisgICAgaWYgKGZyYW1lID09IGVuZCgpKQorICAgICAgICByZXR1
cm47CisKICAgICB3aGlsZSAoZnJhbWUpIHsKICAgICAgICAgZnJhbWUgPSBmcmFtZS0+bG9naWNh
bENhbGxlckZyYW1lKCk7CiAgICAgICAgIGlmICghZnJhbWUgfHwgIW1fZmlsdGVyIHx8ICFtX2Zp
bHRlcihmcmFtZSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV9mcmFtZSA9IGZy
YW1lOworICAgIG1fZnJhbWUgPSBmcmFtZSA/IGZyYW1lIDogZW5kKCk7CiB9CiAKIHZvaWQgU3Rh
Y2tJdGVyYXRvcjo6ZmluZEZyYW1lRm9yRnVuY3Rpb24oSlNGdW5jdGlvbiogZnVuY3Rpb25PYmop
CiB7CiAgICAgSlNPYmplY3QqIHRhcmdldENhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3Qq
PihmdW5jdGlvbk9iaik7Ci0gICAgd2hpbGUgKG1fZnJhbWUpIHsKKyAgICB3aGlsZSAobV9mcmFt
ZSAhPSBlbmQoKSkgewogICAgICAgICBpZiAobV9mcmFtZS0+Y2FsbGVlKCkgPT0gdGFyZ2V0Q2Fs
bGVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGdvdG9OZXh0RnJhbWUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3Iu
aAkocmV2aXNpb24gMTUxNDk5KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tJdGVyYXRvci5oOjE1MTQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFN0
YWNrSXRlcmF0b3JfaAorI2RlZmluZSBTdGFja0l0ZXJhdG9yX2gKKworI2luY2x1ZGUgIkNhbGxG
cmFtZS5oIgorI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRv
clByaXZhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFyZ3VtZW50czsKKworY2xh
c3MgU3RhY2tJdGVyYXRvcjo6RnJhbWUgOiBwdWJsaWMgQ2FsbEZyYW1lIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIENvZGVUeXBlIHsKKyAgICAgICAgR2xvYmFsID0gU3RhY2tGcmFtZUdsb2JhbENvZGUs
CisgICAgICAgIEV2YWwgPSBTdGFja0ZyYW1lRXZhbENvZGUsCisgICAgICAgIEZ1bmN0aW9uID0g
U3RhY2tGcmFtZUZ1bmN0aW9uQ29kZSwKKyAgICAgICAgTmF0aXZlID0gU3RhY2tGcmFtZU5hdGl2
ZUNvZGUKKyAgICB9OworCisgICAgc3RhdGljIEZyYW1lKiBjcmVhdGUoQ2FsbEZyYW1lKiBmKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PEZyYW1lKj4oZik7IH0KKworICAgIGJvb2wgaXNKU0Zy
YW1lKCkgY29uc3QgeyByZXR1cm4gISFjb2RlQmxvY2soKTsgfQorCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIGZ1bmN0aW9uTmFtZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmlu
ZyBzb3VyY2VVUkwoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoKTsK
KworICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBsaW5lKCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgY29sdW1uKCk7CisKKyAgICBBcmd1bWVudHMqIGFyZ3Vt
ZW50cygpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxDYWxsRnJhbWUqPih0aGlzKTsgfQorICAgIAorICAgIEZyYW1lKiBsb2dpY2FsRnJhbWUo
KTsKKyAgICBGcmFtZSogbG9naWNhbENhbGxlckZyYW1lKCk7CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgdm9pZCBwcmludChpbnQgaW5kZW50TGV2ZWwpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAg
RnJhbWUoKTsKKyAgICB+RnJhbWUoKTsKKworICAgIHZvaWQgcmV0cmlldmVFeHByZXNzaW9uSW5m
byhpbnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFN0YWNrSXRlcmF0b3JfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAg
IEZyYW1lKiBsb2dpY2FsQ2FsbGVyRnJhbWUoKTsKIAogI2lmbmRlZiBOREVCVUcKLSAgICB2b2lk
IHByaW50KGludCBpbmRlbnRMZXZlbCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmlu
dChpbnQgaW5kZW50TGV2ZWwpOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvclByaXZh
dGUuaAkocmV2aXNpb24gMTUxNDk5KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaDoxNTE0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgU3RhY2tJdGVyYXRvclByaXZhdGVfaAorI2RlZmluZSBTdGFja0l0ZXJh
dG9yUHJpdmF0ZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7CitjbGFz
cyBKU0Z1bmN0aW9uOworY2xhc3MgVk07CisKK3R5cGVkZWYgRXhlY1N0YXRlIENhbGxGcmFtZTsK
KworY2xhc3MgU3RhY2tJdGVyYXRvciB7CitwdWJsaWM6CisgICAgY2xhc3MgRnJhbWU7CisgICAg
dHlwZWRlZiBib29sICgqRnJhbWVGaWx0ZXIpKEZyYW1lKik7CisKKyAgICBGcmFtZSYgb3BlcmF0
b3IqKCkgeyByZXR1cm4gKm1fZnJhbWU7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEZyYW1lKiBvcGVy
YXRvci0+KCkgeyByZXR1cm4gbV9mcmFtZTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KEZyYW1l
KiBmcmFtZSkgeyByZXR1cm4gbV9mcmFtZSA9PSBmcmFtZTsgfQorICAgIGJvb2wgb3BlcmF0b3Ih
PShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIG1fZnJhbWUgIT0gZnJhbWU7IH0KKyAgICB2b2lkIG9w
ZXJhdG9yKysoKSB7IGdvdG9OZXh0RnJhbWUoKTsgfQorICAgIHZvaWQgZmluZEZyYW1lRm9yRnVu
Y3Rpb24oSlNGdW5jdGlvbiopOworCitwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0
YWNrSXRlcmF0b3IoVk0qKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYmVnaW5BdChD
YWxsRnJhbWUqIHN0YXJ0RnJhbWUsIEZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBiZWdpbkF0KEpTRnVuY3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBG
cmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgIHN0YXRpYyBGcmFtZSogZW5kKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHN0YXRpYyBTdGFja0l0ZXJhdG9yIGVtcHR5KCkgeyByZXR1cm4gU3Rh
Y2tJdGVyYXRvcihudWxscHRyKTsgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnb3Rv
TmV4dEZyYW1lKCk7CisKKyAgICBWTSogbV92bTsKKyAgICBGcmFtZSogbV9mcmFtZTsKKyAgICBG
cmFtZUZpbHRlciBtX2ZpbHRlcjsKKworICAgIGZyaWVuZCBjbGFzcyBFeGVjU3RhdGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFN0YWNrSXRlcmF0b3JQcml2YXRlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3JQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1N0YWNrSXRlcmF0b3JQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NywxMiArNDcsMTUgQEAgcHVibGljOgogICAgIHZvaWQgb3BlcmF0b3IrKygpIHsgZ290
b05leHRGcmFtZSgpOyB9CiAgICAgdm9pZCBmaW5kRnJhbWVGb3JGdW5jdGlvbihKU0Z1bmN0aW9u
Kik7CiAKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3RhdGljcygpOworCiBwcml2YXRlOgot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3IoVk0qKTsKKyAgICBTdGFja0l0ZXJh
dG9yKFZNKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGJlZ2luQXQoQ2FsbEZyYW1l
KiBzdGFydEZyYW1lLCBGcmFtZUZpbHRlciA9IG51bGxwdHIpOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYmVnaW5BdChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9iaiwgRnJhbWVGaWx0
ZXIgPSBudWxscHRyKTsKLSAgICBzdGF0aWMgRnJhbWUqIGVuZCgpIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICB2b2lkIGJlZ2luKEZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAgdm9pZCBiZWdp
bkF0KENhbGxGcmFtZSogc3RhcnRGcmFtZSwgRnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICB2
b2lkIGJlZ2luQXQoSlNGdW5jdGlvbiogY2FsbGVlRnVuY3Rpb25PYmosIEZyYW1lRmlsdGVyID0g
bnVsbHB0cik7CisgICAgc3RhdGljIEZyYW1lKiBlbmQoKSB7IHJldHVybiBzX2VtcHR5RnJhbWU7
IH0KICAgICBzdGF0aWMgU3RhY2tJdGVyYXRvciBlbXB0eSgpIHsgcmV0dXJuIFN0YWNrSXRlcmF0
b3IobnVsbHB0cik7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ290b05leHRGcmFt
ZSgpOwpAQCAtNjAsNiArNjMsNyBAQCBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwogICAgIEZyYW1l
KiBtX2ZyYW1lOwogICAgIEZyYW1lRmlsdGVyIG1fZmlsdGVyOworICAgIEpTX0VYUE9SVERBVEEg
c3RhdGljIEZyYW1lKiBzX2VtcHR5RnJhbWU7CiAKICAgICBmcmllbmQgY2xhc3MgRXhlY1N0YXRl
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTAgKzMxLDEwIEBACiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0
cmluZ1JlZi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIlByb2ZpbGUuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiVHJhY2luZy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU4LDEwICs1OCwxMSBAQCBQ
cm9maWxlR2VuZXJhdG9yOjpQcm9maWxlR2VuZXJhdG9yKEV4ZWNTCiAKIHZvaWQgUHJvZmlsZUdl
bmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBleGVjLT5pbnRlcnByZXRlcigp
LT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIDIpOwotCi0gICAgbV9jdXJyZW50Tm9kZSA9IFBy
b2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywgTGVnYWN5UHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlm
aWVyKGV4ZWMsIHN0YWNrVHJhY2VbMV0uY2FsbGVlLmdldCgpLCBzdGFja1RyYWNlWzFdLnNvdXJj
ZVVSTCwgc3RhY2tUcmFjZVsxXS5saW5lKCkpLCBtX2hlYWQuZ2V0KCksIG1faGVhZC5nZXQoKSk7
CisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0ZXI7Cisg
ICAgQ2FsbElkZW50aWZpZXIgaWRlbnRpZmllciA9IExlZ2FjeVByb2ZpbGVyOjpjcmVhdGVDYWxs
SWRlbnRpZmllcihleGVjLCBpdGVyLT5jYWxsZWUoKSwgaXRlci0+c291cmNlVVJMKCksIGl0ZXIt
PmxpbmUoKSk7CisgICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywg
aWRlbnRpZmllciwgbV9oZWFkLmdldCgpLCBtX2hlYWQuZ2V0KCkpOworICAgIAogICAgIG1faGVh
ZC0+aW5zZXJ0Tm9kZShtX2N1cnJlbnROb2RlLmdldCgpKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmgJKHJldmlzaW9uIDE1MTU2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNT
dGF0ZTsKICAgICBjbGFzcyBQcm9maWxlTm9kZTsKIAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxQcm9maWxlTm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgU3RhY2tJdGVyYXRvcjsKICAgICB0eXBl
ZGVmIEhhc2hDb3VudGVkU2V0PFN0cmluZ0ltcGwqPiBGdW5jdGlvbkNhbGxIYXNoQ291bnQ7CiAK
ICAgICBjbGFzcyBQcm9maWxlTm9kZSA6IHB1YmxpYyBSZWZDb3VudGVkPFByb2ZpbGVOb2RlPiB7
CkBAIC0xMzEsNiArMTMwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogICAgIHByaXZh
dGU6CisgICAgICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQcm9maWxlTm9kZT4gPjo6Y29uc3Rf
aXRlcmF0b3IgU3RhY2tJdGVyYXRvcjsKKwogICAgICAgICBQcm9maWxlTm9kZShFeGVjU3RhdGUq
IGNhbGxlckNhbGxGcmFtZSwgY29uc3QgQ2FsbElkZW50aWZpZXImLCBQcm9maWxlTm9kZSogaGVh
ZE5vZGUsIFByb2ZpbGVOb2RlKiBwYXJlbnROb2RlKTsKICAgICAgICAgUHJvZmlsZU5vZGUoRXhl
Y1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUsIFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5v
ZGUqIG5vZGVUb0NvcHkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gMTUxNTY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUg
IlN0YWNrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3
dGYvZHRvYS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTY3LDYgKzY4LDcgQEAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogICAgIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKTsKICNlbmRpZgogICAgIEpTU3RhY2s6OmluaXRp
YWxpemVUaHJlYWRpbmcoKTsKKyAgICBTdGFja0l0ZXJhdG9yOjppbml0aWFsaXplU3RhdGljcygp
OwogI2lmIEVOQUJMRShMTElOVCkKICAgICBMTEludDo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2lu
Y2x1ZGUgIkNhbGxGcmFtZS5oIgpAQCAtMzIsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9u
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIiAKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgpAQCAtNDAsNiArNDIsNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlN0
YWNrSXRlcmF0b3IuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBV
bmljb2RlOwpAQCAtMTc4LDE4ICsxODEsMzkgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2Fs
bERhdGEoSlNDZWxsKgogICAgIHJldHVybiBDYWxsVHlwZUpTOwogfQogCitzdGF0aWMgSlNWYWx1
ZSByZXRyaWV2ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
T2JqKQoreworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmZpbmQoZnVuY3Rpb25PYmop
OworICAgIHJldHVybiBpdGVyICE9IGV4ZWMtPmVuZCgpID8gSlNWYWx1ZShpdGVyLT5hcmd1bWVu
dHMoKSkgOiBqc051bGwoKTsKK30KKwogSlNWYWx1ZSBKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oc2xvdEJhc2UpOwog
ICAgIEFTU0VSVCghdGhpc09iai0+aXNIb3N0RnVuY3Rpb24oKSk7Ci0gICAgcmV0dXJuIGV4ZWMt
PmludGVycHJldGVyKCktPnJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2Jq
KTsKKworICAgIHJldHVybiByZXRyaWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqKTsKK30KKwor
c3RhdGljIGJvb2wgc2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyhTdGFja0l0ZXJhdG9yOjpGcmFtZSog
ZnJhbWUpCit7CisgICAgSlNPYmplY3QqIGNhbGxlZSA9IGZyYW1lLT5jYWxsZWUoKTsKKyAgICBi
b29sIHNob3VsZFNraXAgPSBjYWxsZWUgPyBjYWxsZWUtPmluaGVyaXRzKCZKU0JvdW5kRnVuY3Rp
b246OnNfaW5mbykgOiBmYWxzZTsKKyAgICByZXR1cm4gc2hvdWxkU2tpcDsKK30KKworc3RhdGlj
IEpTVmFsdWUgcmV0cmlldmVDYWxsZXJGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uT2JqKQoreworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmZpbmQo
ZnVuY3Rpb25PYmosIHNraXBPdmVyQm91bmRGdW5jdGlvbnMpOworICAgICsraXRlcjsKKyAgICBy
ZXR1cm4gaXRlciAhPSBleGVjLT5lbmQoKSAmJiBpdGVyLT5jYWxsZWUoKSA/IGl0ZXItPmNhbGxl
ZSgpIDoganNOdWxsKCk7CiB9CiAKIEpTVmFsdWUgSlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpT
RnVuY3Rpb24qIHRoaXNPYmogPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHNsb3RCYXNlKTsKICAgICBB
U1NFUlQoIXRoaXNPYmotPmlzSG9zdEZ1bmN0aW9uKCkpOwotICAgIEpTVmFsdWUgY2FsbGVyID0g
ZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRoaXNP
YmopOworICAgIEpTVmFsdWUgY2FsbGVyID0gcmV0cmlldmVDYWxsZXJGdW5jdGlvbihleGVjLCB0
aGlzT2JqKTsKIAogICAgIC8vIFNlZSBFUzUuMSAxNS4zLjUuNCAtIEZ1bmN0aW9uLmNhbGxlciBt
YXkgbm90IGJlIHVzZWQgdG8gcmV0cmlldmUgYSBzdHJpY3QgY2FsbGVyLgogICAgIGlmICghY2Fs
bGVyLmlzT2JqZWN0KCkgfHwgIWFzT2JqZWN0KGNhbGxlciktPmluaGVyaXRzKCZKU0Z1bmN0aW9u
OjpzX2luZm8pKQpAQCAtMjk3LDcgKzMyMSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGV4ZWMtPmludGVy
cHJldGVyKCktPnJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSwg
UmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3IocmV0cmlldmVBcmd1bWVudHMoZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5
IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIApAQCAtMzIxLDcgKzM0NSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGV4ZWMtPmludGVycHJldGVy
KCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSwgUmVhZE9ubHkg
fCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IocmV0cmlldmVDYWxsZXJGdW5jdGlvbihleGVjLCB0aGlzT2JqZWN0KSwgUmVhZE9ubHkgfCBE
b250RW51bSB8IERvbnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CkBAIC00MTUsMTQgKzQzOSwxNCBAQCBib29sIEpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5
KEpTT2JqCiAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhl
YywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJy
b3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsK
ICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICB9Ci0g
ICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVj
LCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQXJndW1l
bnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7CisgICAgICAgIHZhbHVlQ2hlY2sgPSAh
ZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCks
IHJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXNPYmplY3QpKTsKICAgICB9IGVsc2UgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7CiAgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAg
ICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCiAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+
cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBE
b250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Q
cm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNl
cHRpb24pOwogICAgICAgICB9Ci0gICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1
ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVycHJl
dGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7CisgICAg
ICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBk
ZXNjcmlwdG9yLnZhbHVlKCksIHJldHJpZXZlQ2FsbGVyRnVuY3Rpb24oZXhlYywgdGhpc09iamVj
dCkpOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpCiAgICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNh
bWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGpzTnVtYmVyKHRoaXNPYmplY3QtPmpz
RXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpKSk7CiAgICAgZWxzZSBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNw
cAkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
UGFyc2VyLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9kdG9h
Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTcxMSw3ICs3
MTIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAgICAgaWYg
KCF0aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnRoaXNW
YWx1ZSgpLnN5bnRoZXNpemVQcm90b3R5cGUoZXhlYykpOwogCi0gICAgaWYgKCF0aGlzT2JqZWN0
LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMtPnRydWVDYWxsZXJGcmFtZSgpKSkKKyAgICBTdGFja0l0
ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGV4ZWMpOworICAgICsraXRlcjsKKyAgICBpZiAoIXRo
aXNPYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oaXRlci0+Y2FsbEZyYW1lKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aGlzT2JqZWN0LT5wcm90b3R5cGUoKSk7CkBAIC03MjcsNyArNzMwLDkgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogICAgIGlmICghdGhpc09i
amVjdCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAot
ICAgIGlmICghdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShleGVjLT50cnVlQ2FsbGVyRnJh
bWUoKSkpCisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+ZmluZChleGVjKTsKKyAgICAr
K2l0ZXI7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXItPmNhbGxG
cmFtZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIC8vIFNldHRpbmcgX19wcm90b19fIHRvIGEgbm9uLW9iamVjdCwgbm9uLW51bGwgdmFs
dWUgaXMgc2lsZW50bHkgaWdub3JlZCB0byBtYXRjaCBNb3ppbGxhLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUg
IlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtMTM5LDcgKzE0MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0Q29uc3QKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiUmVxdWVzdGVkIHByb3RvdHlwZSBvZiBhIHZhbHVlIHRoYXQgaXMgbm90
IGFuIG9iamVjdC4iKSkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChleGVjLT5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKCFvYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oZXhlYy0+dHJ1
ZUNhbGxlckZyYW1lKCkpKQorICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmZpbmQoZXhl
Yyk7CisgICAgKytpdGVyOworICAgIGlmICghb2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXIt
PmNhbGxGcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+cHJvdG90eXBlKCkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZuZGVmIE9wZXJhdGlvbnNf
aAogI2RlZmluZSBPcGVyYXRpb25zX2gKIAorI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MTUxNTc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTMtMDYtMTMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgor
CisgICAgICAgIFJvbGxpbmcgcjE1MTQ1NiwgcjE1MTQyMCBiYWNrIGluIHdpdGggc29tZSBmaXhl
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM5
MC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFj
a0l0ZXJhdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVl
c3Q6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFja0ZhY3Rvcnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2NyaXB0Q2FsbFN0YWNrKToKKwogMjAxMy0w
Ni0xMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGVkIG91dCByMTUxNDU2LCByMTUxNDIwOgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNrSXRlcmF0
b3IuaAkocmV2aXNpb24gMTUxNDk5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg6MTUxNDk5KQorKysgU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9TdGFja0l0ZXJhdG9y
X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfU3RhY2tJdGVyYXRvcl9oCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU3RhY2tJdGVyYXRvci5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTUxNTY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAKICNpbmNsdWRlICJK
U0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiWE1MSHR0
cFJlcXVlc3QuaCIKKyNpbmNsdWRlIDxpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CkBAIC0xMzMsMTAgKzEzMywxMSBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhl
Y1N0YXRlCiAgICAgICAgICAgICBpbXBsKCktPnNlbmQodmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSwgZWMpOwogICAgIH0KIAotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNl
KDIpOwotICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwg
Mik7Ci0gICAgaW1wbCgpLT5zZXRMYXN0U2VuZExpbmVOdW1iZXIoc3RhY2tUcmFjZVsxXS5saW5l
KCkpOwotICAgIGltcGwoKS0+c2V0TGFzdFNlbmRVUkwoc3RhY2tUcmFjZVsxXS5zb3VyY2VVUkwp
OworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7CisgICAgKytpdGVyOwor
ICAgIEFTU0VSVChpdGVyICE9IGV4ZWMtPmVuZCgpKTsKKyAgICBpbXBsKCktPnNldExhc3RTZW5k
TGluZU51bWJlcihpdGVyLT5saW5lKCkpOworICAgIGltcGwoKS0+c2V0TGFzdFNlbmRVUkwoaXRl
ci0+c291cmNlVVJMKCkpOyAgICAKIAogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMTUxNTY3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJTY3JpcHRDYWxs
U3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPGludGVycHJldGVy
L0NhbGxGcmFtZS5oPgotI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CisjaW5j
bHVkZSA8aW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJn
TGlzdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvSlNGdW5jdGlvbi5oPgpAQCAtNTcsMTAgKzU3LDggQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxs
U3RhY2s+IGNyZWF0ZVNjcmlwdAogewogICAgIFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1l
czsKICAgICBpZiAoSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmN1cnJlbnRTdGF0ZSgpKSB7Ci0gICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNl
OwotICAgICAgICBleGVjLT5pbnRlcnByZXRlcigpLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2Us
IG1heFN0YWNrU2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhY2tUcmFj
ZS5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoU2NyaXB0Q2FsbEZyYW1l
KHN0YWNrVHJhY2VbaV0uZnJpZW5kbHlGdW5jdGlvbk5hbWUoZXhlYyksIHN0YWNrVHJhY2VbaV0u
ZnJpZW5kbHlTb3VyY2VVUkwoKSwgc3RhY2tUcmFjZVtpXS5saW5lKCksIHN0YWNrVHJhY2VbaV0u
Y29sdW1uKCkpKTsKKyAgICAgICAgZm9yIChTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdp
bigpOyBpdGVyICE9IGV4ZWMtPmVuZCgpICYmIG1heFN0YWNrU2l6ZS0tOyArK2l0ZXIpCisgICAg
ICAgICAgICBmcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShpdGVyLT5mdW5jdGlvbk5hbWUo
KSwgaXRlci0+c291cmNlVVJMKCksIGl0ZXItPmxpbmUoKSwgaXRlci0+Y29sdW1uKCkpKTsKICAg
ICB9CiAgICAgaWYgKGZyYW1lcy5pc0VtcHR5KCkgJiYgIWVtcHR5SXNBbGxvd2VkKSB7CiAgICAg
ICAgIC8vIE5vIGZyYW1lcyBmb3VuZC4gSXQgbWF5IGhhcHBlbiBpbiB0aGUgY2FzZSB3aGVyZQpA
QCAtNzQsMTkgKzcyLDE1IEBAIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3Jp
cHQKIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2soSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBtYXhTdGFja1NpemUpCiB7CiAgICAgVmVjdG9yPFNj
cmlwdENhbGxGcmFtZT4gZnJhbWVzOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNl
OwotICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgbWF4
U3RhY2tTaXplICsgMSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IHN0YWNrVHJhY2Uuc2l6ZSgpID09
IDEgPyAwIDogMTsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyBpKyspIHsKKyAgICBTdGFja0l0ZXJh
dG9yIGl0ZXIgPSBleGVjLT5iZWdpbigpOworICAgIGZvciAoKytpdGVyOyBpdGVyICE9IGV4ZWMt
PmVuZCgpICYmIG1heFN0YWNrU2l6ZS0tOyArK2l0ZXIpIHsKICAgICAgICAgLy8gVGhpcyBlYXJs
eSBleGl0IGlzIG5lY2Vzc2FyeSB0byBtYWludGFpbiBvdXIgb2xkIGJlaGF2aW91cgogICAgICAg
ICAvLyBidXQgdGhlIHN0YWNrIHRyYWNlIHdlIHByb2R1Y2Ugbm93IGlzIGNvbXBsZXRlIGFuZCBo
YW5kbGVzIGFsbAogICAgICAgICAvLyB3YXlzIGluIHdoaWNoIGNvZGUgbWF5IGJlIHJ1bm5pbmcK
LSAgICAgICAgaWYgKCFzdGFja1RyYWNlW2ldLmNhbGxlZSAmJiBmcmFtZXMuc2l6ZSgpKQorICAg
ICAgICBpZiAoIWl0ZXItPmNhbGxlZSgpICYmIGZyYW1lcy5zaXplKCkpCiAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0gc3RhY2tUcmFjZVtpXS5mcmll
bmRseUZ1bmN0aW9uTmFtZShleGVjKTsKLSAgICAgICAgZnJhbWVzLmFwcGVuZChTY3JpcHRDYWxs
RnJhbWUoZnVuY3Rpb25OYW1lLCBzdGFja1RyYWNlW2ldLnNvdXJjZVVSTCwgc3RhY2tUcmFjZVtp
XS5saW5lKCksIHN0YWNrVHJhY2VbaV0uY29sdW1uKCkpKTsKKyAgICAgICAgZnJhbWVzLmFwcGVu
ZChTY3JpcHRDYWxsRnJhbWUoaXRlci0+ZnVuY3Rpb25OYW1lKCksIGl0ZXItPnNvdXJjZVVSTCgp
LCBpdGVyLT5saW5lKCksIGl0ZXItPmNvbHVtbigpKSk7CiAgICAgfQotCiAgICAgcmV0dXJuIFNj
cmlwdENhbGxTdGFjazo6Y3JlYXRlKGZyYW1lcyk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204671</attachid>
            <date>2013-06-13 21:46:00 -0700</date>
            <delta_ts>2013-06-14 16:10:01 -0700</delta_ts>
            <desc>Delta between new and old rolled out patch.</desc>
            <filename>delta.patch</filename>
            <type>text/plain</type>
            <size>15182</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBA
QAorMjAxMy0wNi0xMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Um9sbGluZyByMTUxNDU2LCByMTUxNDIwIGJhY2sgaW4gd2l0aCBzb21lIGZpeGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzkwLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBjaGFuZ2VzIG9u
IHRvcCBvZiB0aGUgb2xkIHBhdGNoOgorICAgICAgICAtIFJlbmFtZWQgQ2FsbEZyYW1lOjpiZWdp
bkF0KCkgdG8gQ2FsbEZyYW1lOjpmaW5kKCksIGFuZCBhbHNvIHByb3ZpZGUKKyAgICAgICAgICBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIENhbGxGcmFtZSogdG8gc2VhcmNoIGZvci4KKworICAgICAg
ICAgIFRoZXJlIGFyZSAzIHR5cGVzIG9mIHVzZXJzIG9mIHRoZSBTdGFja0l0ZXJhdG9yLiBXZSBu
ZWVkIHRvIGNhdGVyCisgICAgICAgICAgdG8gZWFjaCBvZiB0aGVzZSBhcyBmb2xsb3dzOgorCisg
ICAgICAgICAgMS4gVXNlcnMgd2hvIHdhbnQgYSBzdGFjayB0cmFjZQorICAgICAgICAgICAgIC0g
SGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHZtLnRvcENhbGxGcmFtZS4KKyAg
ICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUgU3RhY2tJdGVyYXRvciBhcyBmb2xs
b3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4o
KTsKKworICAgICAgICAgIDIuIFVzZXJzIHdobyB3YW50IHRoZWlyIGNhbGxlciBmcmFtZQorICAg
ICAgICAgICAgIC0gSGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHRoZSBzcGVj
aWZpZWQgQ2FsbEZyYW1lKi4KKyAgICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUg
U3RhY2tJdGVyYXRvciBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRv
ciBpdGVyID0gZXhlYy0+ZmluZChjYWxsRnJhbWUpOworCisgICAgICAgICAgMy4gVXNlcnMgd2hv
IHdhbnQgdGhlIGZyYW1lIG9mIGEgc3BlY2lmaWMgSlNGdW5jdGlvbiBvYmplY3QKKyAgICAgICAg
ICAgICAtIEhlcmUgd2UgbmVlZCB0byBzdGFydCBpdGVyYXRpbmcgZnJvbSB2bS50b3BDYWxsRnJh
bWUgYW5kIGZpbmQKKyAgICAgICAgICAgICAgIHRoZSBmcmFtZSB0aGF0IGhhcyBhIGNhbGxlZSBt
YXRjaGluZyB0aGUgc3BlY2lmaWVkIEpTRnVuY3Rpb24qLgorICAgICAgICAgICAgIC0gVG8gZG8g
dGhpcywgY3JlYXRlIHRoZSBTdGFja0l0ZXJhdG9yIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAg
ICAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGZ1bmN0aW9uT2JqKTsKKworICAg
ICAgICAgIFRoZSBwcmV2aW91cyBsYXlvdXQgdGVzdCBmYWlsdXJlcyB3ZXJlIGR1ZSB0byBjb25m
bGF0aW9uIG9mIGNhc2UgMQorICAgICAgICAgIGFuZCAyLiBUaGV5IGFyZSBub3cgaGFuZGxlZCBk
aXN0aW5jdGx5LgorCisgICAgICAgIC0gQ2hhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgU3Rh
Y2tJdGVyYXRvcjo6ZW5kKCkgdG8gcmV0dXJuIGEgc3R1YgorICAgICAgICAgIGVtcHR5IGZyYW1l
IGluc3RlYWQgb2YgbnVsbHB0ci4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgY2FuIG5ldmVyCisgICAg
ICAgICAgc2VnZmF1bHQgYnkgZGVyZWYnaW5nIHRoZSBpdGVyYXRvciBldmVuIHdoZW4gaXQgaGFz
IHJlYWNoZWQgZW5kKCkuCisKKyAgICAgICAgICBUaGlzIGZpeGVzIGEgcHJlLWV4aXN0aW5nIGxh
eW91dCB0ZXN0IGNyYXNoIGluCisgICAgICAgICAgaW5zcGVjdG9yL3Byb2ZpbGVyL2NwdS1wcm9m
aWxlci1hZ2VudC1jcmFzaC1vbi1zdGFydC5odG1sLgorCisgICAgICAgICogQVBJL0pTQ29udGV4
dFJlZi5jcHA6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UpOgorICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWU6OmZpbmQpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFt
ZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnNldElubGluZUNhbGxGcmFtZSk6CisgICAg
ICAgIChFeGVjU3RhdGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmVuZCk6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp1bndpbmRDYWxs
RnJhbWUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpkZWJ1Zyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoK
KyAgICAgICAgKEludGVycHJldGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja0l0ZXJh
dG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuY3BwLgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjppbml0aWFsaXpl
U3RhdGljcyk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OlN0YWNrSXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpiZWdpbik6CisgICAgICAgIChKU0M6OlN0YWNr
SXRlcmF0b3I6OmJlZ2luQXQpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpnb3RvTmV4
dEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6ZmluZEZyYW1lRm9yRnVuY3Rp
b24pOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaC4KKyAgICAg
ICAgKFN0YWNrSXRlcmF0b3I6OkZyYW1lKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja0l0
ZXJhdG9yUHJpdmF0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaC4KKyAgICAgICAgKFN0YWNrSXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjplbmQpOgorICAgICAgICAqIGpzYy5jcHA6Cisg
ICAgICAgIChmdW5jdGlvbkpTQ1N0YWNrKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9y
Q29uc29sZVN0YXJ0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlTm9kZS5oOgorICAgICAg
ICAoUHJvZmlsZU5vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5j
cHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVUaHJlYWRpbmdPbmNlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpyZXRyaWV2ZUFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgIChK
U0M6OnNraXBPdmVyQm91bmRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpyZXRyaWV2ZUNhbGxl
ckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKToKKyAg
ICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
UHJvdG9HZXR0ZXIpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpOgorICAg
ICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpvYmpl
Y3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlv
bnMuaDoKKwogMjAxMy0wNi0xMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJvbGxlZCBiYWNrIGluIDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8xNTEzNjM+LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTEgKzEw
MywyMSBAQCBTdGFja0l0ZXJhdG9yIENhbGxGcmFtZTo6YmVnaW4oU3RhY2tJdGVyCiAgICAgICAg
IHJldHVybiBTdGFja0l0ZXJhdG9yOjplbXB0eSgpOwogCiAgICAgU3RhY2tJdGVyYXRvciBpdGVy
KCZ2bSgpKTsKLSAgICBpdGVyLmJlZ2luQXQodGhpcywgZmlsdGVyKTsKKyAgICBpdGVyLmJlZ2lu
KGZpbHRlcik7CiAgICAgcmV0dXJuIGl0ZXI7CiB9CiAKLVN0YWNrSXRlcmF0b3IgQ2FsbEZyYW1l
OjpiZWdpbkF0KEpTRnVuY3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9yOjpG
cmFtZUZpbHRlciBmaWx0ZXIpCitTdGFja0l0ZXJhdG9yIENhbGxGcmFtZTo6ZmluZChDYWxsRnJh
bWUqIHN0YXJ0RnJhbWUsIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAg
ICBpZiAoIXRoaXMpCisgICAgICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjplbXB0eSgpOworCisg
ICAgU3RhY2tJdGVyYXRvciBpdGVyKCZ2bSgpKTsKKyAgICBpdGVyLmJlZ2luQXQoc3RhcnRGcmFt
ZSwgZmlsdGVyKTsKKyAgICByZXR1cm4gaXRlcjsgICAgCit9CisKK1N0YWNrSXRlcmF0b3IgQ2Fs
bEZyYW1lOjpmaW5kKEpTRnVuY3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9y
OjpGcmFtZUZpbHRlciBmaWx0ZXIpCiB7CiAgICAgaWYgKCF0aGlzKQogICAgICAgICByZXR1cm4g
U3RhY2tJdGVyYXRvcjo6ZW1wdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc5
LDcgKzI3OSw4IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZU5vRmxhZ3MoKSB7IHJldHVybiBjYWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1l
RmxhZygpOyB9CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRvciBiZWdp
bihTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciA9IG51bGxwdHIpOwotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yIGJlZ2luQXQoSlNGdW5jdGlvbiogY2FsbGVlRnVuY3Rp
b25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3IgZmluZChDYWxsRnJhbWUqIHN0YXJ0RnJhbWUs
IFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIFN0YWNrSXRlcmF0b3IgZmluZChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9i
aiwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRvcjo6RnJhbWUqIGVuZCgpIHsgcmV0dXJuIFN0YWNrSXRl
cmF0b3I6OmVuZCgpOyB9IAogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTUxNDgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDA5LDcgKzQwOSw4IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmR1bXBS
ZWdpc3RlcnMoQ2FsbEZyYW0KICAgICBpZiAocGMuaGFzSklUUmV0dXJuQWRkcmVzcygpKQogICAg
ICAgICBkYXRhTG9nRigiW1JldHVybkpJVFBDXSAgICAgICAgICAgICAgfCAlMTBwIHwgJXAgXG4i
LCBpdCwgcGMuaml0UmV0dXJuQWRkcmVzcygpLnZhbHVlKCkpOwogI2VuZGlmCi0gICAgU3RhY2tJ
dGVyYXRvciBpdGVyID0gY2FsbEZyYW1lLT5iZWdpbigpOworICAgIFN0YWNrSXRlcmF0b3IgaXRl
ciA9IGNhbGxGcmFtZS0+ZmluZChjYWxsRnJhbWUpOworICAgICsraXRlcjsKICAgICBkYXRhTG9n
RigiW1JldHVyblZQQ10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBp
dCwgaXRlci0+Ynl0ZWNvZGVPZmZzZXQoKSwgaXRlci0+bGluZSgpKTsKICAgICArK2l0OwogICAg
IGRhdGFMb2dGKCJbQ29kZUJsb2NrXSAgICAgICAgICAgICAgICB8ICUxMHAgfCAlcCBcbiIsIGl0
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE1MTQ4MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsMjYgKzMzLDUwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitT
dGFja0l0ZXJhdG9yOjpGcmFtZSogU3RhY2tJdGVyYXRvcjo6c19lbXB0eUZyYW1lOworCit2b2lk
IFN0YWNrSXRlcmF0b3I6OmluaXRpYWxpemVTdGF0aWNzKCkKK3sKKyAgICBzdGF0aWMgUmVnaXN0
ZXIqIGVtcHR5RnJhbWVSZWdpc3RlcnMgPSBuZXcgUmVnaXN0ZXJbSlNTdGFjazo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZV07CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Q2FsbEZyYW1lKj4oJmVtcHR5RnJhbWVSZWdpc3RlcnNbSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZV0pOworICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
MCk7CisgICAgY2FsbEZyYW1lLT5zZXRMb2NhdGlvbkFzUmF3Qml0cygwKTsKKyAgICBjYWxsRnJh
bWUtPnNldENhbGxlckZyYW1lKG51bGxwdHIpOworICAgIGNhbGxGcmFtZS0+c2V0Q2FsbGVlKG51
bGxwdHIpOworICAgIGNhbGxGcmFtZS0+c2V0U2NvcGUobnVsbHB0cik7CisgICAgY2FsbEZyYW1l
LT5zZXRSZXR1cm5QQyhudWxscHRyKTsKKyAgICBjYWxsRnJhbWUtPnNldENvZGVCbG9jayhudWxs
cHRyKTsKKworICAgIHNfZW1wdHlGcmFtZSA9IFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjcmVhdGUo
Y2FsbEZyYW1lKTsKK30KKwogU3RhY2tJdGVyYXRvcjo6U3RhY2tJdGVyYXRvcihWTSogdm0pCiAg
ICAgOiBtX3ZtKHZtKQotICAgICwgbV9mcmFtZShudWxscHRyKQorICAgICwgbV9mcmFtZShlbmQo
KSkKICAgICAsIG1fZmlsdGVyKG51bGxwdHIpCiB7CiB9CiAKLXZvaWQgU3RhY2tJdGVyYXRvcjo6
YmVnaW5BdChDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVy
IGZpbHRlcikKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6YmVnaW4oU3RhY2tJdGVyYXRvcjo6RnJhbWVG
aWx0ZXIgZmlsdGVyKQogewotICAgIGlmICghc3RhcnRGcmFtZSkgewotICAgICAgICBtX2ZyYW1l
ID0gbnVsbHB0cjsKLSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIGJlZ2luQXQobV92
bSA/IG1fdm0tPnRvcENhbGxGcmFtZSA6IG51bGxwdHIsIGZpbHRlcik7Cit9CisKK3ZvaWQgU3Rh
Y2tJdGVyYXRvcjo6YmVnaW5BdChDYWxsRnJhbWUqIGZyYW1lLCBTdGFja0l0ZXJhdG9yOjpGcmFt
ZUZpbHRlciBmaWx0ZXIpCit7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBtX2ZyYW1lID0g
ZW5kKCk7CisgICAgICAgIG1fZmlsdGVyID0gZmlsdGVyOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgQVNTRVJUKCZzdGFydEZyYW1lLT52bSgpID09IG1fdm0pOwotICAgIG1fZnJhbWUg
PSBGcmFtZTo6Y3JlYXRlKHN0YXJ0RnJhbWUpOworICAgIEFTU0VSVCgmZnJhbWUtPnZtKCkgPT0g
bV92bSk7CisgICAgbV9mcmFtZSA9IEZyYW1lOjpjcmVhdGUoZnJhbWUpOwogICAgIG1fZmlsdGVy
ID0gZmlsdGVyOwogCiAgICAgbV9mcmFtZSA9IG1fZnJhbWUtPmxvZ2ljYWxGcmFtZSgpOworICAg
IEFTU0VSVChtX2ZyYW1lKTsKIH0KIAogdm9pZCBTdGFja0l0ZXJhdG9yOjpiZWdpbkF0KEpTRnVu
Y3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciBmaWx0
ZXIpCkBAIC02NSwxOCArODksMjEgQEAgdm9pZCBTdGFja0l0ZXJhdG9yOjpiZWdpbkF0KEpTRnVu
Y3Rpb24qIAogdm9pZCBTdGFja0l0ZXJhdG9yOjpnb3RvTmV4dEZyYW1lKCkKIHsKICAgICBGcmFt
ZSogZnJhbWUgPSBtX2ZyYW1lOworICAgIGlmIChmcmFtZSA9PSBlbmQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgd2hpbGUgKGZyYW1lKSB7CiAgICAgICAgIGZyYW1lID0gZnJhbWUtPmxvZ2lj
YWxDYWxsZXJGcmFtZSgpOwogICAgICAgICBpZiAoIWZyYW1lIHx8ICFtX2ZpbHRlciB8fCAhbV9m
aWx0ZXIoZnJhbWUpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIG1fZnJhbWUgPSBm
cmFtZTsKKyAgICBtX2ZyYW1lID0gZnJhbWUgPyBmcmFtZSA6IGVuZCgpOwogfQogCiB2b2lkIFN0
YWNrSXRlcmF0b3I6OmZpbmRGcmFtZUZvckZ1bmN0aW9uKEpTRnVuY3Rpb24qIGZ1bmN0aW9uT2Jq
KQogewogICAgIEpTT2JqZWN0KiB0YXJnZXRDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4oZnVuY3Rpb25PYmopOwotICAgIHdoaWxlIChtX2ZyYW1lKSB7CisgICAgd2hpbGUgKG1fZnJh
bWUgIT0gZW5kKCkpIHsKICAgICAgICAgaWYgKG1fZnJhbWUtPmNhbGxlZSgpID09IHRhcmdldENh
bGxlZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBnb3RvTmV4dEZyYW1lKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9y
LmgJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGlj
OgogICAgIEZyYW1lKiBsb2dpY2FsQ2FsbGVyRnJhbWUoKTsKIAogI2lmbmRlZiBOREVCVUcKLSAg
ICB2b2lkIHByaW50KGludCBpbmRlbnRMZXZlbCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBwcmludChpbnQgaW5kZW50TGV2ZWwpOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
clByaXZhdGUuaAkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrSXRlcmF0b3JQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEy
ICs0NywxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVyYXRvcisrKCkgeyBnb3RvTmV4dEZyYW1l
KCk7IH0KICAgICB2b2lkIGZpbmRGcmFtZUZvckZ1bmN0aW9uKEpTRnVuY3Rpb24qKTsKIAorICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdGF0aWNzKCk7CisKIHByaXZhdGU6Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRvcihWTSopOworICAgIFN0YWNrSXRlcmF0b3IoVk0qKTsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYmVnaW5BdChDYWxsRnJhbWUqIHN0YXJ0RnJh
bWUsIEZyYW1lRmlsdGVyID0gbnVsbHB0cik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBi
ZWdpbkF0KEpTRnVuY3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBGcmFtZUZpbHRlciA9IG51bGxw
dHIpOwotICAgIHN0YXRpYyBGcmFtZSogZW5kKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZv
aWQgYmVnaW4oRnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICB2b2lkIGJlZ2luQXQoQ2FsbEZy
YW1lKiBzdGFydEZyYW1lLCBGcmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgIHZvaWQgYmVnaW5B
dChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9iaiwgRnJhbWVGaWx0ZXIgPSBudWxscHRyKTsK
KyAgICBzdGF0aWMgRnJhbWUqIGVuZCgpIHsgcmV0dXJuIHNfZW1wdHlGcmFtZTsgfQogICAgIHN0
YXRpYyBTdGFja0l0ZXJhdG9yIGVtcHR5KCkgeyByZXR1cm4gU3RhY2tJdGVyYXRvcihudWxscHRy
KTsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnb3RvTmV4dEZyYW1lKCk7CkBAIC02
MCw2ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgVk0qIG1fdm07CiAgICAgRnJhbWUqIG1fZnJhbWU7
CiAgICAgRnJhbWVGaWx0ZXIgbV9maWx0ZXI7CisgICAgSlNfRVhQT1JUREFUQSBzdGF0aWMgRnJh
bWUqIHNfZW1wdHlGcmFtZTsKIAogICAgIGZyaWVuZCBjbGFzcyBFeGVjU3RhdGU7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHAJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CkBAIC02Nyw2ICs2OCw3IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVU
aHJlYWRpbmdPbmNlKCkKICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2Nh
dG9yKCk7CiAjZW5kaWYKICAgICBKU1N0YWNrOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAg
U3RhY2tJdGVyYXRvcjo6aW5pdGlhbGl6ZVN0YXRpY3MoKTsKICNpZiBFTkFCTEUoTExJTlQpCiAg
ICAgTExJbnQ6OmluaXRpYWxpemUoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODMsNyArMTgzLDcgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxs
KgogCiBzdGF0aWMgSlNWYWx1ZSByZXRyaWV2ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uT2JqKQogewotICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMt
PmJlZ2luQXQoZnVuY3Rpb25PYmopOworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmZp
bmQoZnVuY3Rpb25PYmopOwogICAgIHJldHVybiBpdGVyICE9IGV4ZWMtPmVuZCgpID8gSlNWYWx1
ZShpdGVyLT5hcmd1bWVudHMoKSkgOiBqc051bGwoKTsKIH0KIApAQCAtMjA0LDcgKzIwNCw3IEBA
IHN0YXRpYyBib29sIHNraXBPdmVyQm91bmRGdW5jdGlvbnMoU3RhY2sKIAogc3RhdGljIEpTVmFs
dWUgcmV0cmlldmVDYWxsZXJGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uT2JqKQogewotICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luQXQoZnVu
Y3Rpb25PYmosIHNraXBPdmVyQm91bmRGdW5jdGlvbnMpOworICAgIFN0YWNrSXRlcmF0b3IgaXRl
ciA9IGV4ZWMtPmZpbmQoZnVuY3Rpb25PYmosIHNraXBPdmVyQm91bmRGdW5jdGlvbnMpOwogICAg
ICsraXRlcjsKICAgICByZXR1cm4gaXRlciAhPSBleGVjLT5lbmQoKSAmJiBpdGVyLT5jYWxsZWUo
KSA/IGl0ZXItPmNhbGxlZSgpIDoganNOdWxsKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
CShyZXZpc2lvbiAxNTE0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw3ICs3MTIsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAgICAgaWYgKCF0aGlz
T2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnRoaXNWYWx1ZSgp
LnN5bnRoZXNpemVQcm90b3R5cGUoZXhlYykpOwogCi0gICAgU3RhY2tJdGVyYXRvciBpdGVyID0g
ZXhlYy0+YmVnaW4oKTsKKyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGV4ZWMp
OwogICAgICsraXRlcjsKICAgICBpZiAoIXRoaXNPYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oaXRl
ci0+Y2FsbEZyYW1lKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNzMwLDcgKzczMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY1AKICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVj
LT5iZWdpbigpOworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmZpbmQoZXhlYyk7CiAg
ICAgKytpdGVyOwogICAgIGlmICghdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5j
YWxsRnJhbWUoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNTE0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3
ICsxNDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAg
aWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3Rl
ZCBwcm90b3R5cGUgb2YgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBvYmplY3QuIikpKTsKICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIFN0YWNr
SXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7CisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0g
ZXhlYy0+ZmluZChleGVjKTsKICAgICArK2l0ZXI7CiAgICAgaWYgKCFvYmplY3QtPmFsbG93c0Fj
Y2Vzc0Zyb20oaXRlci0+Y2FsbEZyYW1lKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204742</attachid>
            <date>2013-06-14 16:08:49 -0700</date>
            <delta_ts>2013-06-17 09:49:41 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>bug-117390b.patch</filename>
            <type>text/plain</type>
            <size>77667</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CitpMjAxMy0wNi0xNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Um9sbGluZyByMTUxNDU2LCByMTUxNDIwIGJhY2sgaW4gd2l0aCBzb21lIGZpeGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzkwLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBjaGFuZ2VzIG9u
IHRvcCBvZiB0aGUgb2xkIHBhdGNoOgorICAgICAgICAtIFJlbmFtZWQgQ2FsbEZyYW1lOjpiZWdp
bkF0KCkgdG8gQ2FsbEZyYW1lOjpmaW5kKCksIGFuZCBhbHNvIHByb3ZpZGUKKyAgICAgICAgICBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIENhbGxGcmFtZSogdG8gc2VhcmNoIGZvci4KKworICAgICAg
ICAgIFRoZXJlIGFyZSAzIHR5cGVzIG9mIHVzZXJzIG9mIHRoZSBTdGFja0l0ZXJhdG9yLiBXZSBu
ZWVkIHRvIGNhdGVyCisgICAgICAgICAgdG8gZWFjaCBvZiB0aGVzZSBhcyBmb2xsb3dzOgorCisg
ICAgICAgICAgMS4gVXNlcnMgd2hvIHdhbnQgYSBzdGFjayB0cmFjZQorICAgICAgICAgICAgIC0g
SGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHZtLnRvcENhbGxGcmFtZS4KKyAg
ICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUgU3RhY2tJdGVyYXRvciBhcyBmb2xs
b3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4o
KTsKKworICAgICAgICAgIDIuIFVzZXJzIHdobyB3YW50IHRoZWlyIGNhbGxlciBmcmFtZQorICAg
ICAgICAgICAgIC0gSGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHRoZSBzcGVj
aWZpZWQgQ2FsbEZyYW1lKi4KKyAgICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUg
U3RhY2tJdGVyYXRvciBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRv
ciBpdGVyID0gZXhlYy0+ZmluZChjYWxsRnJhbWUpOworCisgICAgICAgICAgMy4gVXNlcnMgd2hv
IHdhbnQgdGhlIGZyYW1lIG9mIGEgc3BlY2lmaWMgSlNGdW5jdGlvbiBvYmplY3QKKyAgICAgICAg
ICAgICAtIEhlcmUgd2UgbmVlZCB0byBzdGFydCBpdGVyYXRpbmcgZnJvbSB2bS50b3BDYWxsRnJh
bWUgYW5kIGZpbmQKKyAgICAgICAgICAgICAgIHRoZSBmcmFtZSB0aGF0IGhhcyBhIGNhbGxlZSBt
YXRjaGluZyB0aGUgc3BlY2lmaWVkIEpTRnVuY3Rpb24qLgorICAgICAgICAgICAgIC0gVG8gZG8g
dGhpcywgY3JlYXRlIHRoZSBTdGFja0l0ZXJhdG9yIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAg
ICAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGZ1bmN0aW9uT2JqKTsKKworICAg
ICAgICAgIFRoZSBwcmV2aW91cyBsYXlvdXQgdGVzdCBmYWlsdXJlcyB3ZXJlIGR1ZSB0byBjb25m
bGF0aW9uIG9mIGNhc2UgMQorICAgICAgICAgIGFuZCAyLiBUaGV5IGFyZSBub3cgaGFuZGxlZCBk
aXN0aW5jdGx5LgorCisgICAgICAgIC0gRml4ZWQgYSBwcmUtZXhpc3RpbmcgbGF5b3V0IHRlc3Qg
Y3Jhc2ggaW4KKyAgICAgICAgICBpbnNwZWN0b3IvcHJvZmlsZXIvY3B1LXByb2ZpbGVyLWFnZW50
LWNyYXNoLW9uLXN0YXJ0Lmh0bWwuCisKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoK
KyAgICAgICAgKEpTQ29udGV4dENyZWF0ZUJhY2t0cmFjZSk6CisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpiZWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6ZmluZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAg
ICAgIChKU0M6OkV4ZWNTdGF0ZTo6c2V0SW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEV4ZWNT
dGF0ZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZW5kKToKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkdW1wUmVn
aXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZSk6Cisg
ICAgICAgIChKU0M6OkludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmRlYnVnKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAo
SW50ZXJwcmV0ZXIpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
ci5jcHAuCisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OlN0YWNrSXRlcmF0b3IpOgorICAg
ICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjppbml0aWFsaXplRnJhbWUpOgorICAgICAgICAqIGlu
dGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaC4KKyAgICAgICAgKFN0YWNrSXRlcmF0b3I6
OkZyYW1lKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
clByaXZhdGUuaC4KKyAgICAgICAgKFN0YWNrSXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpTdGFj
a0l0ZXJhdG9yOjplbmQpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvbkpT
Q1N0YWNrKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0KToKKyAg
ICAgICAgKiBwcm9maWxlci9Qcm9maWxlTm9kZS5oOgorICAgICAgICAoUHJvZmlsZU5vZGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OnJldHJpZXZl
QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKToK
KyAgICAgICAgKEpTQzo6c2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OnJl
dHJpZXZlQ2FsbGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJH
ZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6
Omdsb2JhbEZ1bmNQcm90b0dldHRlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b1Nl
dHRlcik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAqIHJ1bnRp
bWUvT3BlcmF0aW9ucy5oOgorCiAyMDEzLTA2LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogREZHIHNob3VsZCBzdXBwb3J0IG9wX2luIGFu
ZCBpdCBzaG91bGQgdXNlIHBhdGNoaW5nIHRvIG1ha2UgaXQgZmFzdApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBpbnRlcnByZXRlci9DYWxsRnJhbWUu
Y3BwCiAgICAgaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCiAgICAgaW50ZXJwcmV0ZXIvSlNT
dGFjay5jcHAKKyAgICBpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcAogICAgIGludGVycHJl
dGVyL1ZNSW5zcGVjdG9yLmNwcAogCiAgICAgaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3Bw
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNp
b24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTQzMyw2ICs0MzMsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFja0lubGluZXMuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmggXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3JQcml2YXRlLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUluc3BlY3Rvci5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9WTUluc3BlY3Rvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmVQcmVmaXguaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnBy
aQkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MCw2ICsxNzAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwIFwKICAgICBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAg
XAogICAgIGludGVycHJldGVyL0pTU3RhY2suY3BwIFwKKyAgICBpbnRlcnByZXRlci9TdGFja0l0
ZXJhdG9yLmNwcCBcCiAgICAgaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIFwKICAgICBq
aXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBcCiAgICAgaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNTE1
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBH
cmFmIChiam9lcm4uZ3JhZkBnbWFpbC5jb20pCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM4LDYgKzM4LDcg
QEAKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJTYW1wbGluZ1Rvb2wuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1
ZGUgPHN0ZGlvLmg+CkBAIC0zMjYsMTUgKzMyNyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25KU0MKICAgICBTdHJpbmdCdWlsZGVyIHRyYWNlOwogICAgIHRyYWNlLmFw
cGVuZExpdGVyYWwoIi0tPiBTdGFjayB0cmFjZTpcbiIpOwogCi0gICAgVmVjdG9yPFN0YWNrRnJh
bWU+IHN0YWNrVHJhY2U7Ci0gICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShz
dGFja1RyYWNlKTsKICAgICBpbnQgaSA9IDA7Ci0KLSAgICBmb3IgKFZlY3RvcjxTdGFja0ZyYW1l
Pjo6aXRlcmF0b3IgaXRlciA9IHN0YWNrVHJhY2UuYmVnaW4oKTsgaXRlciA8IHN0YWNrVHJhY2Uu
ZW5kKCk7IGl0ZXIrKykgewotICAgICAgICBTdGFja0ZyYW1lIGxldmVsID0gKml0ZXI7Ci0gICAg
ICAgIHRyYWNlLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiICAgICVpICAgJXNcbiIsIGksIGxldmVs
LnRvU3RyaW5nKGV4ZWMpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgaSsrOwotICAgIH0KKyAg
ICBmb3IgKFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7IGl0ZXIgIT0gZXhlYy0+
ZW5kKCk7ICsraXRlciwgKytpKQorICAgICAgICB0cmFjZS5hcHBlbmQoU3RyaW5nOjpmb3JtYXQo
IiAgICAlaSAgICVzXG4iLCBpLCBpdGVyLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgdHJhY2UudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gMTUxNTY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMyArMzAsMTMgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVk
ZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFt
ZS5oPgotI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CiAjaW5jbHVkZSAiSlND
YWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRv
ci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTIwNSwzNiArMjA1LDI5IEBAIEpTU3RyaW5nUmVmIEpT
Q29udGV4dENyZWF0ZUJhY2t0cmFjZShKU0MKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0
eCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGV4ZWMtPmludGVy
cHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplKTsKKyAgICBz
aXplX3QgaSA9IDA7CisgICAgQVNTRVJUKG1heFN0YWNrU2l6ZSk7CisgICAgZm9yIChTdGFja0l0
ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigpOyBpdGVyICE9IGV4ZWMtPmVuZCgpICYmIG1heFN0
YWNrU2l6ZS0tOyArK2l0ZXIsICsraSkgeworICAgICAgICBKU09iamVjdCogY2FsbGVlID0gaXRl
ci0+Y2FsbGVlKCk7CisgICAgICAgIC8vIElmIGNhbGxlZSBpcyB1bmtub3duLCBidXQgd2UndmUg
bm90IGFkZGVkIGFueSBmcmFtZSB5ZXQsIHdlIHNob3VsZAorICAgICAgICAvLyBzdGlsbCBhZGQg
dGhlIGZyYW1lLCBiZWNhdXNlIHNvbWV0aGluZyBjYWxsZWQgdXMsIGFuZCBnYXZlIHVzIGFyZ3Vt
ZW50cy4KKyAgICAgICAgaWYgKCFjYWxsZWUgJiYgaSkKKyAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgIFN0cmluZyB1cmxTdHJpbmc7Ci0gICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWU7Ci0gICAg
ICAgIFN0YWNrRnJhbWUmIGZyYW1lID0gc3RhY2tUcmFjZVtpXTsKLSAgICAgICAgSlNWYWx1ZSBm
dW5jdGlvbiA9IGZyYW1lLmNhbGxlZS5nZXQoKTsKLSAgICAgICAgaWYgKGZyYW1lLmNhbGxlZSkK
LSAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSA9IGZyYW1lLmZyaWVuZGx5RnVuY3Rpb25OYW1lKGV4
ZWMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIENhbGxlciBpcyB1bmtub3duLCBi
dXQgaWYgZnJhbWUgaXMgZW1wdHkgd2Ugc2hvdWxkIHN0aWxsIGFkZCB0aGUgZnJhbWUsIGJlY2F1
c2UKLSAgICAgICAgICAgIC8vIHNvbWV0aGluZyBjYWxsZWQgdXMsIGFuZCBnYXZlIHVzIGFyZ3Vt
ZW50cy4KLSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSBmcmFtZS5saW5lKCk7CiAgICAgICAg
IGlmICghYnVpbGRlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4n
KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyMnKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRO
dW1iZXIoaSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHN0YWNrVHJhY2VbaV0uZnJpZW5kbHlGdW5jdGlvbk5hbWUoZXhlYykpOworICAgICAg
ICBidWlsZGVyLmFwcGVuZChpdGVyLT5mdW5jdGlvbk5hbWUoKSk7CiAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiKCkgYXQgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YWNrVHJh
Y2VbaV0uZnJpZW5kbHlTb3VyY2VVUkwoKSk7Ci0gICAgICAgIGlmIChmcmFtZS5jb2RlVHlwZSAh
PSBTdGFja0ZyYW1lTmF0aXZlQ29kZSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVyLT5z
b3VyY2VVUkwoKSk7CisgICAgICAgIGlmIChpdGVyLT5pc0pTRnJhbWUoKSkgewogICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJzonKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVy
KGxpbmVOdW1iZXIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoaXRlci0+bGlu
ZSgpKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWZ1bmN0aW9uKQorCisgICAgICAgIGlmICgh
Y2FsbGVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNp
b24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI0MjIsNiArMjQyMiwxOCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlwuLlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9yLmNwcCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJwcmV0ZXJc
U3RhY2tJdGVyYXRvci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbnRlcnByZXRl
clxWTUluc3BlY3Rvci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTE1NjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNiArMjIyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGludGVycHJldGVyXENhbGxGcmFtZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caW50ZXJwcmV0ZXJcSW50ZXJwcmV0ZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2suY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrSXRlcmF0b3IuY3BwIiAvPg0KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9yLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
IiAvPg0KQEAgLTU1NCw2ICs1NTUsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50
ZXJwcmV0ZXJcSlNTdGFjay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVy
cHJldGVyXEpTU3RhY2tJbmxpbmVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aW50ZXJwcmV0ZXJcUmVnaXN0ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxp
bnRlcnByZXRlclxTdGFja0l0ZXJhdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvclByaXZhdGUuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENvbXBhY3RKSVRDb2RlTWFwLmgiIC8+DQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2
aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsNiArMjg1LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpT
U3RhY2suY3BwIj4NCiAgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQogICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNr
SXRlcmF0b3IuY3BwIj4NCisgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFZN
SW5zcGVjdG9yLmNwcCI+DQogICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KICAg
ICA8L0NsQ29tcGlsZT4NCkBAIC0xMjExLDYgKzEyMTQsMTIgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVyLmgiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJw
cmV0ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvci5oIj4NCisgICAgICA8RmlsdGVyPmludGVy
cHJldGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrSXRlcmF0b3JQcml2YXRlLmgiPg0KKyAgICAgIDxGaWx0
ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0b3IuaCI+DQogICAgICAgPEZpbHRl
cj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTk1Myw2ICs5NTMsMTAgQEAKIAkJRkUyNDU5NjIxNzYwMUQ1ODAwNzRGQ0UwIC8q
IENhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjQ1OTYxMTc2MDFENTgwMDc0RkNFMCAvKiBDYWxsRnJhbWVJbmxpbmVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0QTMz
MUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFEMTVCRDJFMDcwMDZGNTRGMyAvKiBW
TUluc3BlY3Rvci5jcHAgKi87IH07CiAJCUZFNEEzMzIwMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUlu
c3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU0QTMzMUUxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU1MjZCRDUxNzY2M0E4NDAwQjEy
MERDIC8qIFN0YWNrSXRlcmF0b3JQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTUyNkJENDE3NjYzQTg0MDBCMTIwREMgLyogU3RhY2tJdGVy
YXRvclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRTY3REI5MzE3NTE5QjRBMDA2QTgxNEYgLyogSlNTdGFja0lubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjdEQjkwMTc1MTlC
NEEwMDZBODE0RiAvKiBKU1N0YWNrSW5saW5lcy5oICovOyB9OworCQlGRTY3REI5NDE3NTE5QjRB
MDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY3REI5MTE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVy
YXRvci5jcHAgKi87IH07CisJCUZFNjdEQjk1MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY3
REI5MjE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFOTQwMzIyMTc0NDQyNTkwMDQ3Q0Y2
RSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU5NDAzMjExNzQ0NDI1OTAwNDdDRjZFIC8qIEpJVFN0dWJzWDg2Q29t
bW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkVDRTc0NTcxNzQ1NDU2NTAwRkY5MzAwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQ0U3NDU2MTc0
NTQ1NjUwMEZGOTMwMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgKi87IH07CiAJCUZF
RDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMjg3QjExNUVDOUE1NzAwREE4MTYxIC8q
IExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTE5ODksNiArMTk5MywxMCBAQAogCQlGRTI0NTk2MTE3NjAxRDU4MDA3NEZDRTAg
LyogQ2FsbEZyYW1lSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWxsRnJhbWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEEzMzFE
MTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUluc3BlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRTUyNkJENDE3NjYzQTg0MDBCMTIwREMgLyogU3RhY2tJdGVyYXRvclBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tJdGVyYXRvclBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2N0RCOTAxNzUxOUI0QTAw
NkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RhY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjdE
QjkxMTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRTY3REI5MjE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja0l0ZXJhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTQwMzIxMTc0NDQyNTkwMDQ3Q0Y2RSAvKiBKSVRT
dHVic1g4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHVi
c1g4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUNFNzQ1NjE3NDU0
NTY1MDBGRjkzMDAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJ
bnRPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRPcGNvZGUu
aDsgcGF0aCA9IGxsaW50L0xMSW50T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMjc5LDcgKzIyODcsMTEgQEAKIAkJCQkxNDI5RDc3QjBFRDIwRDczMDBCODk2MTkgLyog
SW50ZXJwcmV0ZXIuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2MTkgLyogSlNTdGFj
ay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8qIEpTU3RhY2suaCAqLywK
KwkJCQlGRTY3REI5MDE3NTE5QjRBMDA2QTgxNEYgLyogSlNTdGFja0lubGluZXMuaCAqLywKIAkJ
CQkxNDlCMjRGRjBEOEFGNkQxMDA5Q0I4QzcgLyogUmVnaXN0ZXIuaCAqLywKKwkJCQlGRTY3REI5
MTE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5jcHAgKi8sCisJCQkJRkU2N0RCOTIx
NzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCAqLywKKwkJCQlGRTUyNkJENDE3NjYz
QTg0MDBCMTIwREMgLyogU3RhY2tJdGVyYXRvclByaXZhdGUuaCAqLywKIAkJCQlGRTRBMzMxRDE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovLAogCQkJCUZFNEEzMzFFMTVCRDJF
MDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovLAogCQkJKTsKQEAgLTMyNjAsNiArMzI3Miw4
IEBACiAJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJh
eVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2N0RCOTUxNzUxOUI0QTAwNkE4MTRG
IC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNTI2QkQ1MTc2NjNBODQw
MEIxMjBEQyAvKiBTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVG
NjgzNUYxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNdjcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZFMjQ1OTYyMTc2MDFENTgwMDc0RkNFMCAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUY2ODM2MDE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNYODZfNjQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzY5Myw2ICszNzA3LDcgQEAKIAkJCQkwRkQ4MkU1NDE0MURB
RUVFMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYw
NERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYgLyogU3RhdGljUHJvcGVydHlBbmFs
eXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2N0RCOTMxNzUxOUI0QTAwNkE4MTRGIC8qIEpT
U3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1
QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY2
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC00MjI2LDYgKzQyNDEsNyBAQAogCQkJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAv
KiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2REI2NDY0MEY5
NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkU2N0RCOTQxNzUxOUI0QTAwNkE4MTRGIC8qIFN0
YWNrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1ODUxNjc1NDgwRjAwRjhB
QjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0NGMTc0MkQ3RDgw
MDdCM0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBB
MzExNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNw
cAkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDk4ICs2Nyw2IEBAIHZvaWQgQ2Fs
bEZyYW1lOjpzZXRDdXJyZW50VlBDKEluc3RydWN0aW8KICNlbmRpZgogICAgIAogI2lmIEVOQUJM
RShERkdfSklUKQotQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnRydWVDYWxsRnJhbWUoKQotewotICAg
IC8vIEFtIEkgYW4gaW5saW5lIGNhbGwgZnJhbWU/IElmIHNvLCB3ZSdyZSBkb25lLgotICAgIGlm
IChpc0lubGluZWRGcmFtZSgpKQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAKLSAgICAvLyBJ
ZiBJIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrLCB0aGVuIEknbSBub3QgREZHIGNvZGUsIHNvIEkn
bSB0aGUgdHJ1ZSBjYWxsIGZyYW1lLgotICAgIENvZGVCbG9jayogbWFjaGluZUNvZGVCbG9jayA9
IGNvZGVCbG9jaygpOwotICAgIGlmICghbWFjaGluZUNvZGVCbG9jaykKLSAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgCi0gICAgLy8gSWYgdGhlIGNvZGUgYmxvY2sgZG9lcyBub3QgaGF2ZSBhbnkg
Y29kZSBvcmlnaW5zLCB0aGVuIHRoZXJlIHdhcyBubyBpbmxpbmluZywgc28KLSAgICAvLyBJJ20g
ZG9uZS4KLSAgICBpZiAoIW1hY2hpbmVDb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpCi0gICAg
ICAgIHJldHVybiB0aGlzOwotICAgIAotICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIENvZGVP
cmlnaW4uIElmIHdlIGRvbid0IGhhdmUgYSBwYyBzZXQgdGhlbiB0aGUgb25seSB3YXkKLSAgICAv
LyB0aGF0IHRoaXMgbWFrZXMgc2Vuc2UgaXMgaWYgdGhlIENvZGVPcmlnaW4gaW5kZXggd2FzIHNl
dCBpbiB0aGUgY2FsbCBmcmFtZS4KLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgdW5z
aWduZWQgaW5kZXggPSBsb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7Ci0gICAgQVNTRVJUKG1h
Y2hpbmVDb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKTsKLSAgICBpZiAoIW1hY2hp
bmVDb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKSB7Ci0gICAgICAgIC8vIFNlZSBh
Ym92ZS4gSW4gcmVsZWFzZSBidWlsZHMsIHdlIHRyeSB0byBwcm90ZWN0IG91cnNlbHZlcyBmcm9t
IGNyYXNoaW5nIGV2ZW4KLSAgICAgICAgLy8gdGhvdWdoIHN0YWNrIHdhbGtpbmcgd2lsbCBiZSBn
b29mZWQgdXAuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjb2RlT3JpZ2luID0gbWFj
aGluZUNvZGVCbG9jay0+Y29kZU9yaWdpbihpbmRleCk7Ci0KLSAgICBpZiAoIWNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4gdGhpczsgLy8gTm90IGN1cnJlbnRseSBp
biBpbmxpbmVkIGNvZGUuCi0KLSAgICBDb2RlT3JpZ2luIGlubmVyTW9zdENvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luOwotCi0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7KSB7Ci0gICAgICAg
IElubGluZUNhbGxGcmFtZSogbmV4dElubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgCi0gICAgICAgIENhbGxGcmFtZSogaW5s
aW5lZENhbGxlciA9IHRoaXMgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAg
ICAKLSAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlQXNGdW5jdGlvbiA9IGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlLmdldCgpOwotICAgICAgICAKLSAgICAgICAgLy8gRmlsbCBpbiB0aGUgaW5saW5l
ZENhbGxlcgotICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRDb2RlQmxvY2soaW5saW5lQ2FsbEZy
YW1lLT5iYXNlbGluZUNvZGVCbG9jaygpKTsKLSAgICAgICAgaWYgKGNhbGxlZUFzRnVuY3Rpb24p
Ci0gICAgICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRTY29wZShjYWxsZWVBc0Z1bmN0aW9uLT5z
Y29wZSgpKTsKLSAgICAgICAgaWYgKG5leHRJbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBp
bmxpbmVkQ2FsbGVyLT5zZXRDYWxsZXJGcmFtZSh0aGlzICsgbmV4dElubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbmxpbmVkQ2FsbGVyLT5z
ZXRDYWxsZXJGcmFtZSh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGlubGluZWRDYWxsZXItPnNl
dElubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBpbmxpbmVkQ2FsbGVy
LT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkpOwotICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRMb2NhdGlvbkFzQnl0ZWNvZGVP
ZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaW5saW5lZENhbGxlci0+
c2V0SXNJbmxpbmVkRnJhbWUoKTsKLSAgICAgICAgaWYgKGNhbGxlZUFzRnVuY3Rpb24pCi0gICAg
ICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRDYWxsZWUoY2FsbGVlQXNGdW5jdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7Ci0gICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG5leHRJbmxpbmVDYWxsRnJhbWU7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiB0aGlzICsgaW5uZXJNb3N0Q29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0OwotfQotICAgICAgICAKLUNhbGxGcmFtZSogQ2FsbEZyYW1lOjp0cnVlQ2FsbGVy
RnJhbWUoKQotewotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSB0aGlzLT5jYWxsZXJGcmFt
ZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpOwotICAgIGlmICghY29kZUJsb2NrKCkpCi0g
ICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsKLQotICAgIC8vIHRoaXMgLT4gVGhlIGNhbGxlZTsg
dGhpcyBpcyBlaXRoZXIgYW4gaW5saW5lZCBjYWxsZWUgaW4gd2hpY2ggY2FzZSBpdCBhbHJlYWR5
IGhhcwotICAgIC8vICAgIGEgcG9pbnRlciB0byB0aGUgdHJ1ZSBjYWxsZXIuIE90aGVyd2lzZSBp
dCBjb250YWlucyBjdXJyZW50IFBDIGluIHRoZSBtYWNoaW5lCi0gICAgLy8gICAgY2FsbGVyLgot
ICAgIC8vCi0gICAgLy8gbWFjaGluZUNhbGxlciAtPiBUaGUgY2FsbGVyIGFjY29yZGluZyB0byB0
aGUgbWFjaGluZSwgd2hpY2ggbWF5IGJlIHplcm8gb3IKLSAgICAvLyAgICBtb3JlIGZyYW1lcyBh
Ym92ZSB0aGUgdHJ1ZSBjYWxsZXIgZHVlIHRvIGlubGluaW5nLgotCi0gICAgLy8gQW0gSSBhbiBp
bmxpbmUgY2FsbCBmcmFtZT8gSWYgc28sIHdlJ3JlIGRvbmUuCi0gICAgaWYgKGlzSW5saW5lZEZy
YW1lKCkpCi0gICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsKLSAgICAKLSAgICAvLyBJIGFtIGEg
bWFjaGluZSBjYWxsIGZyYW1lLCBzbyB0aGUgcXVlc3Rpb24gaXM6IGlzIG15IGNhbGxlciBhIG1h
Y2hpbmUgY2FsbCBmcmFtZQotICAgIC8vIHRoYXQgaGFzIGlubGluZXMgb3IgYSBtYWNoaW5lIGNh
bGwgZnJhbWUgdGhhdCBkb2Vzbid0PwotICAgIGlmICghY2FsbGVyRnJhbWUpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgaWYgKCFjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCkpCi0gICAgICAgIHJl
dHVybiBjYWxsZXJGcmFtZTsKLSAgICBBU1NFUlQoIWNhbGxlckZyYW1lLT5pc0lubGluZWRGcmFt
ZSgpKTsKLSAgICAKLSAgICByZXR1cm4gY2FsbGVyRnJhbWUtPnRydWVDYWxsRnJhbWUoKS0+cmVt
b3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLX0KLQogdW5zaWduZWQgQ2FsbEZyYW1lOjpieXRlY29k
ZU9mZnNldEZyb21Db2RlT3JpZ2luSW5kZXgoKQogewogICAgIEFTU0VSVChoYXNMb2NhdGlvbkFz
Q29kZU9yaWdpbkluZGV4KCkpOwpAQCAtMTg5LDQgKzk3LDI1IEBAIFJlZ2lzdGVyKiBDYWxsRnJh
bWU6OmZyYW1lRXh0ZW50SW50ZXJuYWwKICAgICByZXR1cm4gcmVnaXN0ZXJzKCkgKyBjb2RlQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogfQogCitTdGFja0l0ZXJhdG9yIENhbGxGcmFtZTo6
YmVnaW4oU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQoreworICAgIGlmICghdGhp
cykKKyAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3IoKTsKKyAgICByZXR1cm4gU3RhY2tJdGVy
YXRvcigmdm0oKSwgZmlsdGVyKTsKK30KKworU3RhY2tJdGVyYXRvciBDYWxsRnJhbWU6OmZpbmQo
Q2FsbEZyYW1lKiBzdGFydEZyYW1lLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciBmaWx0ZXIp
Cit7CisgICAgaWYgKCF0aGlzKQorICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRvcigpOworICAg
IHJldHVybiBTdGFja0l0ZXJhdG9yKCZ2bSgpLCBzdGFydEZyYW1lLCBmaWx0ZXIpOworfQorCitT
dGFja0l0ZXJhdG9yIENhbGxGcmFtZTo6ZmluZChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9i
aiwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQoreworICAgIGlmICghdGhpcykK
KyAgICAgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3IoKTsKKyAgICByZXR1cm4gU3RhY2tJdGVyYXRv
cigmdm0oKSwgY2FsbGVlRnVuY3Rpb25PYmosIGZpbHRlcik7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE1
MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgor
I2luY2x1ZGUgIlN0YWNrSXRlcmF0b3JQcml2YXRlLmgiCiAKIG5hbWVzcGFjZSBKU0MgIHsKIApA
QCAtMjczLDIxICsyNzQsMTQgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAgICAgdm9pZCBzZXRJbmxpbmVDYWxsRnJhbWUoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtKU1N0
YWNrOjpSZXR1cm5QQ10gPSBpbmxpbmVDYWxsRnJhbWU7IH0KLQotICAgICAgICAvLyBDYWxsIHRo
aXMgdG8gZ2V0IHRoZSBzZW1hbnRpY2FsbHkgY29ycmVjdCBKUyBDYWxsRnJhbWUqIGZvciB0aGUK
LSAgICAgICAgLy8gY3VycmVudGx5IGV4ZWN1dGluZyBmdW5jdGlvbi4KLSAgICAgICAgQ2FsbEZy
YW1lKiB0cnVlQ2FsbEZyYW1lKCk7Ci0KLSAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGdldCB0aGUg
c2VtYW50aWNhbGx5IGNvcnJlY3QgSlMgQ2FsbEZyYW1lKiBjb3JyZXNwb25kaW5nCi0gICAgICAg
IC8vIHRvIHRoZSBjYWxsZXIuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGlu
aW5nIGFuZCB0aGUKLSAgICAgICAgLy8gSG9zdENhbGxGcmFtZUZsYWcgc3R1ZmYuCi0gICAgICAg
IENhbGxGcmFtZSogdHJ1ZUNhbGxlckZyYW1lKCk7Ci0jZWxzZQotICAgICAgICBDYWxsRnJhbWUq
IHRydWVDYWxsRnJhbWUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgICAgIENhbGxGcmFtZSogdHJ1
ZUNhbGxlckZyYW1lKCkgeyByZXR1cm4gY2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFt
ZUZsYWcoKTsgfQogI2VuZGlmCiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWVOb0ZsYWdz
KCkgeyByZXR1cm4gY2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsgfQog
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3IgYmVnaW4oU3RhY2tJdGVy
YXRvcjo6RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
U3RhY2tJdGVyYXRvciBmaW5kKENhbGxGcmFtZSogc3RhcnRGcmFtZSwgU3RhY2tJdGVyYXRvcjo6
RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tJ
dGVyYXRvciBmaW5kKEpTRnVuY3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9y
OjpGcmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFj
a0l0ZXJhdG9yOjpGcmFtZSogZW5kKCkgeyByZXR1cm4gU3RhY2tJdGVyYXRvcjo6ZW5kKCk7IH0g
CisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgSG9zdENhbGxG
cmFtZUZsYWcgPSAxOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNfdGhpc0FyZ3VtZW50T2Zm
c2V0ID0gLTEgLSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxNTE1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiUmVnRXhw
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rv
b2wuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFj
dGl2YXRpb24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSA8bGltaXRz
Lmg+CkBAIC0yMDAsOCArMjAxLDYgQEAgSW50ZXJwcmV0ZXI6OlN0YWNrUG9saWN5OjpTdGFja1Bv
bGljeShJbgogfQogCiAKLXN0YXRpYyBDYWxsRnJhbWUqIGdldENhbGxlckluZm8oVk0qLCBDYWxs
RnJhbWUqLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayomIGNhbGxlck91dCk7
Ci0KIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBpZiAoIWNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpKQpAQCAtNDEwLDEyICs0MDksOSBAQCB2b2lkIEludGVycHJl
dGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtCiAgICAgaWYgKHBjLmhhc0pJVFJldHVybkFkZHJl
c3MoKSkKICAgICAgICAgZGF0YUxvZ0YoIltSZXR1cm5KSVRQQ10gICAgICAgICAgICAgIHwgJTEw
cCB8ICVwIFxuIiwgaXQsIHBjLmppdFJldHVybkFkZHJlc3MoKS52YWx1ZSgpKTsKICNlbmRpZgot
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsKLSAgICBpbnQgbGluZSA9IDA7Ci0gICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSAwOwotICAgIGdldENhbGxlckluZm8oJmNhbGxG
cmFtZS0+dm0oKSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgY2FsbGVyQ29kZUJsb2NrKTsK
LSAgICBsaW5lID0gY2FsbGVyQ29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpOwotICAgIGRhdGFMb2dGKCJbUmV0dXJuVlBDXSAgICAgICAgICAgICAg
ICB8ICUxMHAgfCAlZCAobGluZSAlZClcbiIsIGl0LCBieXRlY29kZU9mZnNldCwgbGluZSk7Cisg
ICAgU3RhY2tJdGVyYXRvciBpdGVyID0gY2FsbEZyYW1lLT5maW5kKGNhbGxGcmFtZSk7CisgICAg
KytpdGVyOworICAgIGRhdGFMb2dGKCJbUmV0dXJuVlBDXSAgICAgICAgICAgICAgICB8ICUxMHAg
fCAlZCAobGluZSAlZClcbiIsIGl0LCBpdGVyLT5ieXRlY29kZU9mZnNldCgpLCBpdGVyLT5saW5l
KCkpOwogICAgICsraXQ7CiAgICAgZGF0YUxvZ0YoIltDb2RlQmxvY2tdICAgICAgICAgICAgICAg
IHwgJTEwcCB8ICVwIFxuIiwgaXQsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwogICAgICsraXQ7
CkBAIC00NjUsOCArNDYxLDEwIEBAIGJvb2wgSW50ZXJwcmV0ZXI6OmlzT3Bjb2RlKE9wY29kZSBv
cGNvZGUKICNlbmRpZgogfQogCi1ORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5k
Q2FsbEZyYW1lKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwg
dW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJiBjb2RlQmxvY2spCitORVZFUl9J
TkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKFN0YWNrSXRlcmF0b3ImIGl0
ZXIsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUpCiB7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBpdGVyLT5jYWxsRnJhbWUoKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGl0ZXItPmNv
ZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb2xkQ29kZUJsb2NrID0gY29kZUJsb2NrOwogICAg
IEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogCkBAIC00OTYsMTAgKzQ5NCw3
IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWwKIAogICAgIENhbGxG
cmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgY2FsbEZy
YW1lLT52bSgpLnRvcENhbGxGcmFtZSA9IGNhbGxlckZyYW1lOwotICAgIGlmIChjYWxsZXJGcmFt
ZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNh
bGxGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLCBieXRl
Y29kZU9mZnNldCwgY29kZUJsb2NrKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIWNh
bGxlckZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpOwogfQogCiBzdGF0aWMgdm9pZCBhcHBl
bmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFcnJvckluc3RhbmNlKiBleGNl
cHRpb24sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNTU0LDY4ICs1NDksNiBAQCBzdGF0
aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtCiAgICAgZXhjZXB0aW9uLT5wdXRE
aXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcodm0sIG1lc3Nh
Z2UpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGdldEJ5dGVjb2RlT2Zmc2V0Rm9yQ2FsbEZyYW1l
KENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+cmVt
b3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKCFjb2RlQmxvY2spCi0gICAgICAgIHJldHVybiAw
OwotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIHJldHVybiBj
b2RlQmxvY2stPmNvZGVPcmlnaW4oY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4
KCkpLmJ5dGVjb2RlSW5kZXg7Ci0jZW5kaWYKLSAgICByZXR1cm4gY2FsbEZyYW1lLT5sb2NhdGlv
bkFzQnl0ZWNvZGVPZmZzZXQoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgQ2FsbEZyYW1lKiBnZXRD
YWxsZXJJbmZvKFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkJiBieXRlY29k
ZU9mZnNldCwgQ29kZUJsb2NrKiYgY2FsbGVyKQotewotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0g
ICAgYnl0ZWNvZGVPZmZzZXQgPSAwOwotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2Fs
bEZyYW1lRmxhZygpKTsKLSAgICBDYWxsRnJhbWUqIHRydWVDYWxsZXJGcmFtZSA9IGNhbGxGcmFt
ZS0+dHJ1ZUNhbGxlckZyYW1lKCk7Ci0gICAgQVNTRVJUKCF0cnVlQ2FsbGVyRnJhbWUtPmhhc0hv
c3RDYWxsRnJhbWVGbGFnKCkpOwotCi0gICAgaWYgKHRydWVDYWxsZXJGcmFtZSA9PSBDYWxsRnJh
bWU6Om5vQ2FsbGVyKCkgfHwgIXRydWVDYWxsZXJGcmFtZSB8fCAhdHJ1ZUNhbGxlckZyYW1lLT5j
b2RlQmxvY2soKSkgewotICAgICAgICBjYWxsZXIgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZUNh
bGxlckZyYW1lOwotICAgIH0KLSAgICAKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9
IHRydWVDYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
aWYgKHRydWVDYWxsZXJGcmFtZS0+aGFzTG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpKQotICAg
ICAgICBieXRlY29kZU9mZnNldCA9IHRydWVDYWxsZXJGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGcm9t
Q29kZU9yaWdpbkluZGV4KCk7Ci0gICAgZWxzZQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQot
ICAgICAgICBieXRlY29kZU9mZnNldCA9IHRydWVDYWxsZXJGcmFtZS0+bG9jYXRpb25Bc0J5dGVj
b2RlT2Zmc2V0KCk7Ci0KLSAgICBjYWxsZXIgPSBjYWxsZXJDb2RlQmxvY2s7Ci0gICAgcmV0dXJu
IHRydWVDYWxsZXJGcmFtZTsKLX0KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgY29uc3QgU3RyaW5n
IGdldFNvdXJjZVVSTEZyb21DYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAg
QVNTRVJUKCFjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpOwotICAgIHJldHVybiBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlVVJMKCk7Ci19
Ci0KLXN0YXRpYyBTdGFja0ZyYW1lQ29kZVR5cGUgZ2V0U3RhY2tGcmFtZUNvZGVUeXBlKENhbGxG
cmFtZSogY2FsbEZyYW1lKQotewotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZy
YW1lRmxhZygpKTsKLQotICAgIHN3aXRjaCAoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Y29kZVR5
cGUoKSkgewotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIHJldHVybiBTdGFja0ZyYW1lRXZh
bENvZGU7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIHJldHVybiBTdGFja0ZyYW1l
RnVuY3Rpb25Db2RlOwotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICAgICAgcmV0dXJuIFN0YWNr
RnJhbWVHbG9iYWxDb2RlOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBTdGFja0ZyYW1lR2xvYmFsQ29kZTsKLX0KLQogdW5zaWduZWQgU3RhY2tG
cmFtZTo6bGluZSgpCiB7CiAgICAgcmV0dXJuIGNvZGVCbG9jayA/IGNvZGVCbG9jay0+bGluZU51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSArIGxpbmVPZmZzZXQgOiAwOwpA
QCAtNjYxLDM0ICs1OTQsMjUgQEAgU3RyaW5nIFN0YWNrRnJhbWU6OnRvU3RyaW5nKENhbGxGcmFt
ZSogYwogdm9pZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShWZWN0b3I8U3RhY2tGcmFtZT4m
IHJlc3VsdHMsIHNpemVfdCBtYXhTdGFja1NpemUpCiB7CiAgICAgVk0mIHZtID0gbV92bTsKLSAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLnRvcENhbGxGcmFtZS0+cmVtb3ZlSG9zdENhbGxG
cmFtZUZsYWcoKTsKLSAgICBpZiAoIWNhbGxGcmFtZSB8fCBjYWxsRnJhbWUgPT0gQ2FsbEZyYW1l
Ojpub0NhbGxlcigpKSAKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gZ2V0Qnl0ZWNvZGVPZmZzZXRGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxs
RnJhbWUgPSBjYWxsRnJhbWUtPnRydWVDYWxsRnJhbWUoKTsKLSAgICBpZiAoIWNhbGxGcmFtZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKLQotICAgIHdoaWxlIChjYWxsRnJhbWUgJiYgY2FsbEZyYW1lICE9
IENhbGxGcmFtZTo6bm9DYWxsZXIoKSAmJiBtYXhTdGFja1NpemUtLSkgewotICAgICAgICBTdHJp
bmcgc291cmNlVVJMOwotICAgICAgICBpZiAoY2FsbGVyQ29kZUJsb2NrKSB7Ci0gICAgICAgICAg
ICBzb3VyY2VVUkwgPSBnZXRTb3VyY2VVUkxGcm9tQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAg
ICAgICAgICBTdGFja0ZyYW1lIHMoU3Ryb25nPEpTT2JqZWN0Pih2bSwgY2FsbEZyYW1lLT5jYWxs
ZWUoKSksCi0gICAgICAgICAgICAgICAgZ2V0U3RhY2tGcmFtZUNvZGVUeXBlKGNhbGxGcmFtZSks
Ci0gICAgICAgICAgICAgICAgU3Ryb25nPEV4ZWN1dGFibGVCYXNlPih2bSwgY2FsbGVyQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSksCi0gICAgICAgICAgICAgICAgU3Ryb25nPFVubGlua2Vk
Q29kZUJsb2NrPih2bSwgY2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKSwKLSAg
ICAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2stPnNvdXJjZSgpLAotICAgICAgICAgICAgICAg
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmxpbmVObygpLAotICAgICAgICAg
ICAgICAgIGNhbGxlckNvZGVCbG9jay0+c291cmNlT2Zmc2V0KCksCi0gICAgICAgICAgICAgICAg
Ynl0ZWNvZGVPZmZzZXQsCi0gICAgICAgICAgICAgICAgc291cmNlVVJMKTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IHZtLnRvcENhbGxGcmFtZTsKKyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIg
PSBjYWxsRnJhbWUtPmJlZ2luKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gY2FsbEZyYW1lLT5lbmQo
KSAmJiBtYXhTdGFja1NpemUtLTsgKytpdGVyKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gaXRlci0+Y29kZUJsb2NrKCk7CisgICAgICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICAg
ICAgICAgIFN0YWNrRnJhbWUgcyhTdHJvbmc8SlNPYmplY3Q+KHZtLCBpdGVyLT5jYWxsZWUoKSks
CisgICAgICAgICAgICAgICAgU3RhY2tGcmFtZUNvZGVUeXBlKGl0ZXItPmNvZGVUeXBlKCkpLAor
ICAgICAgICAgICAgICAgIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4odm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkpLAorICAgICAgICAgICAgICAgIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9j
az4odm0sIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSksCisgICAgICAgICAgICAgICAg
Y29kZUJsb2NrLT5zb3VyY2UoKSwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLT5saW5lTm8oKSwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPnNvdXJjZU9m
ZnNldCgpLAorICAgICAgICAgICAgICAgIGl0ZXItPmJ5dGVjb2RlT2Zmc2V0KCksCisgICAgICAg
ICAgICAgICAgaXRlci0+c291cmNlVVJMKCkpOwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
cyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTdGFja0ZyYW1lIHMoU3Ryb25nPEpT
T2JqZWN0Pih2bSwgY2FsbEZyYW1lLT5jYWxsZWUoKSksIFN0YWNrRnJhbWVOYXRpdmVDb2RlLCBT
dHJvbmc8RXhlY3V0YWJsZUJhc2U+KCksIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4oKSwgMCwg
MCwgMCwgMCwgU3RyaW5nKCkpOworICAgICAgICAgICAgU3RhY2tGcmFtZSBzKFN0cm9uZzxKU09i
amVjdD4odm0sIGl0ZXItPmNhbGxlZSgpKSwgU3RhY2tGcmFtZU5hdGl2ZUNvZGUsIFN0cm9uZzxF
eGVjdXRhYmxlQmFzZT4oKSwgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPigpLCAwLCAwLCAwLCAw
LCBTdHJpbmcoKSk7CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzKTsKICAgICAgICAgfQot
ICAgICAgICBjYWxsRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZ2bSwgY2FsbEZyYW1lLCBieXRlY29k
ZU9mZnNldCwgY2FsbGVyQ29kZUJsb2NrKTsKICAgICB9CiB9CiAKQEAgLTc2NCwxMiArNjg4LDIw
IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKIAogICAgIC8vIENh
bGN1bGF0ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2UEMsIHVud2luZGluZyBjYWxsIGZyYW1lcyBh
cyBuZWNlc3NhcnkuCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSAwOwotICAgIHdoaWxlIChp
c1Rlcm1pbmF0aW9uIHx8ICEoaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkpIHsKLSAgICAgICAgaWYgKCF1bndpbmRDYWxsRnJhbWUo
Y2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgYnl0ZWNvZGVPZmZzZXQsIGNvZGVCbG9jaykpIHsK
LSAgICAgICAgICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPnZt
KCkuZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlv
blVud2luZChjYWxsRnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKyAg
ICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgZm9yIChTdGFja0l0ZXJhdG9yIGl0ZXIg
PSBjYWxsRnJhbWUtPmJlZ2luKCk7IGl0ZXIgIT0gY2FsbEZyYW1lLT5lbmQoKTsgKytpdGVyKSB7
CisgICAgICAgIGNhbGxGcmFtZSA9IGl0ZXItPmNhbGxGcmFtZSgpOworICAgICAgICBjb2RlQmxv
Y2sgPSBpdGVyLT5jb2RlQmxvY2soKTsKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBpdGVyLT5i
eXRlY29kZU9mZnNldCgpOworCisgICAgICAgIGlmIChpc1Rlcm1pbmF0aW9uIHx8ICEoaGFuZGxl
ciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkp
IHsKKyAgICAgICAgICAgIGlmICghdW53aW5kQ2FsbEZyYW1lKGl0ZXIsIGV4Y2VwdGlvblZhbHVl
KSkgeworICAgICAgICAgICAgICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5l
bmFibGVkUHJvZmlsZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlv
blVud2luZChjYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlm
IChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPnZtKCkuZW5hYmxlZFByb2Zp
bGVyKCkpCkBAIC0xMzY4LDU3ICsxMzAwLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0
ZXI6OmRlYnVnKENhbAogICAgICAgICAgICAgZGVidWdnZXItPmRpZFJlYWNoQnJlYWtwb2ludChj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5zb3Vy
Y2VJRCgpLCBsYXN0TGluZSwgY29sdW1uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci19
Ci0gICAgCi1KU1ZhbHVlIEludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAotewotICAg
IENhbGxGcmFtZSogZnVuY3Rpb25DYWxsRnJhbWUgPSBmaW5kRnVuY3Rpb25DYWxsRnJhbWVGcm9t
Vk1Db2RlKGNhbGxGcmFtZSwgZnVuY3Rpb24pOwotICAgIGlmICghZnVuY3Rpb25DYWxsRnJhbWUp
Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLQotICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0g
QXJndW1lbnRzOjpjcmVhdGUoZnVuY3Rpb25DYWxsRnJhbWUtPnZtKCksIGZ1bmN0aW9uQ2FsbEZy
YW1lKTsKLSAgICBhcmd1bWVudHMtPnRlYXJPZmYoZnVuY3Rpb25DYWxsRnJhbWUpOwotICAgIHJl
dHVybiBKU1ZhbHVlKGFyZ3VtZW50cyk7Ci19Ci0KLUpTVmFsdWUgSW50ZXJwcmV0ZXI6OnJldHJp
ZXZlQ2FsbGVyRnJvbVZNQ29kZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiogZnVu
Y3Rpb24pIGNvbnN0Ci17Ci0gICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRG
dW5jdGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7Ci0KLSAgICBp
ZiAoIWZ1bmN0aW9uQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgCi0g
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgQ29kZUJsb2NrKiB1bnVzZWRDYWxsZXJD
b2RlQmxvY2sgPSAwOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZv
KCZjYWxsRnJhbWUtPnZtKCksIGZ1bmN0aW9uQ2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51
c2VkQ2FsbGVyQ29kZUJsb2NrKTsKLSAgICBpZiAoIWNhbGxlckZyYW1lKQotICAgICAgICByZXR1
cm4ganNOdWxsKCk7Ci0gICAgSlNWYWx1ZSBjYWxsZXIgPSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7
Ci0gICAgaWYgKCFjYWxsZXIpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsKLQotICAgIC8vIFNr
aXAgb3ZlciBmdW5jdGlvbiBiaW5kaW5ncy4KLSAgICBBU1NFUlQoY2FsbGVyLmlzT2JqZWN0KCkp
OwotICAgIHdoaWxlIChhc09iamVjdChjYWxsZXIpLT5pbmhlcml0cygmSlNCb3VuZEZ1bmN0aW9u
OjpzX2luZm8pKSB7Ci0gICAgICAgIGNhbGxlckZyYW1lID0gZ2V0Q2FsbGVySW5mbygmY2FsbEZy
YW1lLT52bSgpLCBjYWxsZXJGcmFtZSwgYnl0ZWNvZGVPZmZzZXQsIHVudXNlZENhbGxlckNvZGVC
bG9jayk7Ci0gICAgICAgIGlmICghY2FsbGVyRnJhbWUpCi0gICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7Ci0gICAgICAgIGNhbGxlciA9IGNhbGxlckZyYW1lLT5jYWxsZWUoKTsKLSAgICAgICAg
aWYgKCFjYWxsZXIpCi0gICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGNhbGxlcjsKLX0KLQotQ2FsbEZyYW1lKiBJbnRlcnByZXRlcjo6ZmluZEZ1bmN0aW9u
Q2FsbEZyYW1lRnJvbVZNQ29kZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiogZnVu
Y3Rpb24pCi17Ci0gICAgZm9yIChDYWxsRnJhbWUqIGNhbmRpZGF0ZSA9IGNhbGxGcmFtZS0+dHJ1
ZUNhbGxGcmFtZSgpOyBjYW5kaWRhdGU7IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+dHJ1ZUNhbGxl
ckZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2FsbGVlKCkgPT0gZnVuY3Rpb24p
Ci0gICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0K
K30gICAgCiAKIHZvaWQgSW50ZXJwcmV0ZXI6OmVuYWJsZVNhbXBsZXIoKQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlz
aW9uIDE1MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFJlZ2lzdGVyOwogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgU2FtcGxp
bmdUb29sOworICAgIGNsYXNzIFN0YWNrSXRlcmF0b3I7CiAgICAgc3RydWN0IENhbGxGcmFtZUNs
b3N1cmU7CiAgICAgc3RydWN0IEhhbmRsZXJJbmZvOwogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsK
QEAgLTIzNSwxNyArMjM2LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCog
ZXhlY3V0ZUNvbnN0cnVjdChDYWxsRnJhbWUqLCBKU09iamVjdCogZnVuY3Rpb24sIENvbnN0cnVj
dFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0Jik7CiAgICAgICAgIEpT
VmFsdWUgZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSosIENhbGxGcmFtZSosIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1Njb3BlKik7CiAKLSAgICAgICAgSlNWYWx1ZSByZXRyaWV2ZUFyZ3VtZW50c0Zyb21W
TUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIHJl
dHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKikgY29uc3Q7Ci0g
ICAgICAgIAogICAgICAgICB2b2lkIGdldEFyZ3VtZW50c0RhdGEoQ2FsbEZyYW1lKiwgSlNGdW5j
dGlvbiomLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVyKiYgYXJndiwg
aW50JiBhcmdjKTsKICAgICAgICAgCiAgICAgICAgIFNhbXBsaW5nVG9vbCogc2FtcGxlcigpIHsg
cmV0dXJuIG1fc2FtcGxlci5nZXQoKTsgfQogCiAgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVy
SW5mbyogdGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYsIEpTVmFsdWUmLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSos
IERlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBjb2x1bW4pOwot
ICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGdldFRyYWNlTGluZShDYWxsRnJhbWUqLCBTdGFj
a0ZyYW1lQ29kZVR5cGUsIGNvbnN0IFN0cmluZyYsIGludCk7Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZ2V0U3RhY2tUcmFjZShWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMsIHNp
emVfdCBtYXhTdGFja1NpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgYWRkU3RhY2tUcmFjZUlmTmVjZXNzYXJ5KENhbGxGcmFtZSos
IEpTVmFsdWUgZXJyb3IpOwogCiAgICAgICAgIHZvaWQgZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRl
KiBleGVjKTsKQEAgLTI3MSw5ICsyNjcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbmRSZXBlYXRDYWxsKENhbGxGcmFtZUNsb3N1cmUmKTsKICAgICAgICAgSlNWYWx1ZSBleGVj
dXRlKENhbGxGcmFtZUNsb3N1cmUmKTsKIAotICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCB1bndp
bmRDYWxsRnJhbWUoQ2FsbEZyYW1lKiYsIEpTVmFsdWUsIHVuc2lnbmVkJiBieXRlY29kZU9mZnNl
dCwgQ29kZUJsb2NrKiYpOwotCi0gICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIGZpbmRGdW5jdGlv
bkNhbGxGcmFtZUZyb21WTUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopOworICAgICAgICB2
b2lkIGdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXplX3QgbWF4
U3RhY2tTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CisgICAgICAg
IE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFtZShTdGFja0l0ZXJhdG9yJiwgSlNWYWx1
ZSk7CiAKICAgICAgICAgdm9pZCBkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSopOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDE1MTQ5OSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwOjE1MTQ5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgorCisj
aW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlND
IHsKKworU3RhY2tJdGVyYXRvcjo6U3RhY2tJdGVyYXRvcihWTSogdm0pCisgICAgOiBtX3ZtKHZt
KQorICAgICwgbV9mcmFtZShudWxscHRyKQorICAgICwgbV9maWx0ZXIobnVsbHB0cikKK3sKK30K
Kwordm9pZCBTdGFja0l0ZXJhdG9yOjpiZWdpbkF0KENhbGxGcmFtZSogc3RhcnRGcmFtZSwgU3Rh
Y2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQoreworICAgIGlmICghc3RhcnRGcmFtZSkg
eworICAgICAgICBtX2ZyYW1lID0gbnVsbHB0cjsKKyAgICAgICAgbV9maWx0ZXIgPSBudWxscHRy
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKCZzdGFydEZyYW1lLT52bSgp
ID09IG1fdm0pOworICAgIG1fZnJhbWUgPSBGcmFtZTo6Y3JlYXRlKHN0YXJ0RnJhbWUpOworICAg
IG1fZmlsdGVyID0gZmlsdGVyOworCisgICAgbV9mcmFtZSA9IG1fZnJhbWUtPmxvZ2ljYWxGcmFt
ZSgpOworfQorCit2b2lkIFN0YWNrSXRlcmF0b3I6OmJlZ2luQXQoSlNGdW5jdGlvbiogY2FsbGVl
RnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAgICBB
U1NFUlQoY2FsbGVlRnVuY3Rpb25PYmopOworICAgIGJlZ2luQXQobV92bS0+dG9wQ2FsbEZyYW1l
LCBmaWx0ZXIpOworICAgIGZpbmRGcmFtZUZvckZ1bmN0aW9uKGNhbGxlZUZ1bmN0aW9uT2JqKTsK
K30KKwordm9pZCBTdGFja0l0ZXJhdG9yOjpnb3RvTmV4dEZyYW1lKCkKK3sKKyAgICBGcmFtZSog
ZnJhbWUgPSBtX2ZyYW1lOworICAgIHdoaWxlIChmcmFtZSkgeworICAgICAgICBmcmFtZSA9IGZy
YW1lLT5sb2dpY2FsQ2FsbGVyRnJhbWUoKTsKKyAgICAgICAgaWYgKCFmcmFtZSB8fCAhbV9maWx0
ZXIgfHwgIW1fZmlsdGVyKGZyYW1lKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBt
X2ZyYW1lID0gZnJhbWU7Cit9CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6ZmluZEZyYW1lRm9yRnVu
Y3Rpb24oSlNGdW5jdGlvbiogZnVuY3Rpb25PYmopCit7CisgICAgSlNPYmplY3QqIHRhcmdldENh
bGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihmdW5jdGlvbk9iaik7CisgICAgd2hpbGUg
KG1fZnJhbWUpIHsKKyAgICAgICAgaWYgKG1fZnJhbWUtPmNhbGxlZSgpID09IHRhcmdldENhbGxl
ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBnb3RvTmV4dEZyYW1lKCk7CisgICAgfQor
fQorCitTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Q29kZVR5cGUgU3RhY2tJdGVyYXRvcjo6RnJhbWU6
OmNvZGVUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzSlNGcmFtZSgpKQorICAgICAgICByZXR1
cm4gQ29kZVR5cGU6Ok5hdGl2ZTsKKworICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmNvZGVUeXBl
KCkpIHsKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICByZXR1cm4gQ29kZVR5cGU6OkV2YWw7
CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIHJldHVybiBDb2RlVHlwZTo6RnVuY3Rp
b247CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgICAgICByZXR1cm4gQ29kZVR5cGU6Okdsb2Jh
bDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
Q29kZVR5cGU6Okdsb2JhbDsKK30KKworU3RyaW5nIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpmdW5j
dGlvbk5hbWUoKQoreworICAgIFN0cmluZyB0cmFjZUxpbmU7CisgICAgSlNPYmplY3QqIGNhbGxl
ZSA9IHRoaXMtPmNhbGxlZSgpOworCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2Fz
ZSBDb2RlVHlwZTo6RXZhbDoKKyAgICAgICAgdHJhY2VMaW5lID0gImV2YWwgY29kZSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29kZVR5cGU6Ok5hdGl2ZToKKyAgICAgICAgaWYgKGNhbGxl
ZSkKKyAgICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxs
RnJhbWUoKSwgY2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZVR5
cGU6OkZ1bmN0aW9uOgorICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5h
bWUoY2FsbEZyYW1lKCksIGNhbGxlZSkuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENvZGVUeXBlOjpHbG9iYWw6CisgICAgICAgIHRyYWNlTGluZSA9ICJnbG9iYWwgY29kZSI7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1w
dHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKK30KKworU3RyaW5nIFN0YWNrSXRlcmF0b3I6OkZyYW1l
Ojpzb3VyY2VVUkwoKQoreworICAgIFN0cmluZyB0cmFjZUxpbmU7CisKKyAgICBzd2l0Y2ggKGNv
ZGVUeXBlKCkpIHsKKyAgICBjYXNlIENvZGVUeXBlOjpFdmFsOgorICAgIGNhc2UgQ29kZVR5cGU6
OkZ1bmN0aW9uOgorICAgIGNhc2UgQ29kZVR5cGU6Okdsb2JhbDogeworICAgICAgICBTdHJpbmcg
c291cmNlVVJMID0gY29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VVUkwoKTsK
KyAgICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgdHJhY2VMaW5l
ID0gc291cmNlVVJMLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29k
ZVR5cGU6Ok5hdGl2ZToKKyAgICAgICAgdHJhY2VMaW5lID0gIltuYXRpdmUgY29kZV0iOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5
U3RyaW5nKCkgOiB0cmFjZUxpbmU7Cit9CisKK1N0cmluZyBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6
dG9TdHJpbmcoKQoreworICAgIFN0cmluZ0J1aWxkZXIgdHJhY2VCdWlsZDsKKyAgICBTdHJpbmcg
ZnVuY3Rpb25OYW1lID0gdGhpcy0+ZnVuY3Rpb25OYW1lKCk7CisgICAgU3RyaW5nIHNvdXJjZVVS
TCA9IHRoaXMtPnNvdXJjZVVSTCgpOworICAgIHRyYWNlQnVpbGQuYXBwZW5kKGZ1bmN0aW9uTmFt
ZSk7CisgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghZnVuY3Rp
b25OYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRyYWNlQnVpbGQuYXBwZW5kKCdAJyk7Cisg
ICAgICAgIHRyYWNlQnVpbGQuYXBwZW5kKHNvdXJjZVVSTCk7CisgICAgICAgIGlmIChpc0pTRnJh
bWUoKSkgeworICAgICAgICAgICAgdHJhY2VCdWlsZC5hcHBlbmQoJzonKTsKKyAgICAgICAgICAg
IHRyYWNlQnVpbGQuYXBwZW5kTnVtYmVyKGxpbmUoKSk7CisgICAgICAgICAgICB0cmFjZUJ1aWxk
LmFwcGVuZCgnOicpOworICAgICAgICAgICAgdHJhY2VCdWlsZC5hcHBlbmROdW1iZXIoY29sdW1u
KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cmFjZUJ1aWxkLnRvU3RyaW5nKCku
aW1wbCgpOworfQorCit1bnNpZ25lZCBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Ynl0ZWNvZGVPZmZz
ZXQoKQoreworICAgIGlmICghaXNKU0ZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlm
IChoYXNMb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCkpCisgICAgICAgIHJldHVybiBieXRlY29k
ZU9mZnNldEZyb21Db2RlT3JpZ2luSW5kZXgoKTsKKyAgICByZXR1cm4gbG9jYXRpb25Bc0J5dGVj
b2RlT2Zmc2V0KCk7Cit9CisKK3Vuc2lnbmVkIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpsaW5lKCkK
K3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOworICAgIGlm
ICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm4gMDsKKyAgICBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAg
QVNTRVJUKHVubGlua2VkQ29kZUJsb2NrKTsKKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgdW5zaWduZWQgbGluZU9mZnNldCA9IGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmxpbmVObygpOworICAgIHJldHVybiB1bmxpbmtlZENv
ZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSArIGxp
bmVPZmZzZXQ7Cit9CisKK3Vuc2lnbmVkIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjb2x1bW4oKQor
eworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CisgICAgaWYg
KCFjb2RlQmxvY2spCisgICAgICAgIHJldHVybiAwOworICAgIFNvdXJjZVByb3ZpZGVyKiBzb3Vy
Y2VQcm92aWRlciA9IGNvZGVCbG9jay0+c291cmNlKCk7CisgICAgaWYgKCFzb3VyY2VQcm92aWRl
cikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaW50IGRpdm90ID0gMDsKKyAgICBpbnQgdW51c2Vk
U3RhcnRPZmZzZXQgPSAwOworICAgIGludCB1bnVzZWRFbmRPZmZzZXQgPSAwOworICAgIHJldHJp
ZXZlRXhwcmVzc2lvbkluZm8oZGl2b3QsIHVudXNlZFN0YXJ0T2Zmc2V0LCB1bnVzZWRFbmRPZmZz
ZXQpOworICAgIHJldHVybiBzb3VyY2VQcm92aWRlci0+Y2hhclBvc2l0aW9uVG9Db2x1bW5OdW1i
ZXIoZGl2b3QpOworfQorCitBcmd1bWVudHMqIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjphcmd1bWVu
dHMoKQoreworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdGhpcy0+Y2FsbEZyYW1lKCk7Cisg
ICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZSh2bSgpLCBjYWxsRnJh
bWUpOworICAgIGFyZ3VtZW50cy0+dGVhck9mZihjYWxsRnJhbWUpOworICAgIHJldHVybiBhcmd1
bWVudHM7Cit9CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lv
bkluZm8oaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpCit7Cisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKKyAgICBBU1NFUlQo
Y29kZUJsb2NrKTsKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgdW5saW5rZWRDb2RlQmxvY2stPmV4
cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KCksIGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBkaXZvdCArPSBjb2RlQmxvY2stPnNvdXJjZU9m
ZnNldCgpOworfQorCitTdGFja0l0ZXJhdG9yOjpGcmFtZSogU3RhY2tJdGVyYXRvcjo6RnJhbWU6
OmxvZ2ljYWxGcmFtZSgpCit7CisjaWYgIUVOQUJMRShERkdfSklUKQorICAgIHJldHVybiB0aGlz
OworCisjZWxzZSAvLyAhRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGlzSW5saW5lZEZyYW1lKCkp
CisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgLy8gSWYgSSBkb24ndCBoYXZlIGEgY29kZSBi
bG9jaywgdGhlbiBJJ20gbm90IERGRyBjb2RlLCBzbyBJJ20gdGhlIHRydWUgY2FsbCBmcmFtZS4K
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOworICAgIGlmICgh
Y29kZUJsb2NrKQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIC8vIElmIHRoZSBjb2RlIGJs
b2NrIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgb3JpZ2lucywgdGhlbiB0aGVyZSB3YXMgbm8gaW5s
aW5pbmcsIHNvCisgICAgLy8gSSdtIGRvbmUuCisgICAgaWYgKCFjb2RlQmxvY2stPmhhc0NvZGVP
cmlnaW5zKCkpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIAorICAgIENvZGVCbG9jayogb3V0
ZXJNb3N0Q29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIHVuc2lnbmVkIGluZGV4ID0gbG9jYXRp
b25Bc0NvZGVPcmlnaW5JbmRleCgpOworICAgIEFTU0VSVChvdXRlck1vc3RDb2RlQmxvY2stPmNh
bkdldENvZGVPcmlnaW4oaW5kZXgpKTsKKyAgICBpZiAoIW91dGVyTW9zdENvZGVCbG9jay0+Y2Fu
R2V0Q29kZU9yaWdpbihpbmRleCkpIHsKKyAgICAgICAgLy8gU2VlIGFib3ZlLiBJbiByZWxlYXNl
IGJ1aWxkcywgd2UgdHJ5IHRvIHByb3RlY3Qgb3Vyc2VsdmVzIGZyb20gY3Jhc2hpbmcgZXZlbgor
ICAgICAgICAvLyB0aG91Z2ggc3RhY2sgd2Fsa2luZyB3aWxsIGJlIGdvb2ZlZCB1cC4KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
b3V0ZXJNb3N0Q29kZUJsb2NrLT5jb2RlT3JpZ2luKGluZGV4KTsKKyAgICBpZiAoIWNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gdGhpczsgLy8gTm90IGN1cnJlbnRs
eSBpbiBpbmxpbmVkIGNvZGUuCisKKyAgICAvLyBXZSd2ZSBnb3QgaW5saW5lZCBmcmFtZXMuIFNv
LCByZWlmeSB0aGVtIHNvIHRoYXQgdGhlIGl0ZXJhdG9yIGNhbiB3YWxrIHRocm91Z2ggdGhlbS4K
KyAgICBDYWxsRnJhbWUqIGN1cnJGcmFtZSA9IHRoaXMtPmNhbGxGcmFtZSgpOworICAgIENhbGxG
cmFtZSogaW5uZXJNb3N0TG9naWNhbEZyYW1lID0gY3VyckZyYW1lICsgY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworCisgICAgQ2FsbEZyYW1lKiBsb2dpY2FsRnJhbWUg
PSBpbm5lck1vc3RMb2dpY2FsRnJhbWU7CisgICAgd2hpbGUgKGxvZ2ljYWxGcmFtZSAhPSBjdXJy
RnJhbWUpIHsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVkRnJhbWVJbmZvID0gY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIAorICAgICAgICAvLyBGaWxsIGluIHRo
ZSBsb2dpY2FsIChpLmUuIGlubGluZWQpIGZyYW1lCisgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0
Q29kZUJsb2NrKGlubGluZWRGcmFtZUluZm8tPmJhc2VsaW5lQ29kZUJsb2NrKCkpOworICAgICAg
ICBsb2dpY2FsRnJhbWUtPnNldElubGluZUNhbGxGcmFtZShpbmxpbmVkRnJhbWVJbmZvKTsKKyAg
ICAgICAgbG9naWNhbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbmxpbmVk
RnJhbWVJbmZvLT5hcmd1bWVudHMuc2l6ZSgpKTsKKyAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRM
b2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAg
ICAgbG9naWNhbEZyYW1lLT5zZXRJc0lubGluZWRGcmFtZSgpOworCisgICAgICAgIEpTRnVuY3Rp
b24qIGNhbGxlZSA9IGlubGluZWRGcmFtZUluZm8tPmNhbGxlZS5nZXQoKTsKKyAgICAgICAgaWYg
KGNhbGxlZSkgeworICAgICAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRTY29wZShjYWxsZWUtPnNj
b3BlKCkpOworICAgICAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRDYWxsZWUoY2FsbGVlKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ29kZU9yaWdpbiogY2FsbGVyQ29kZU9yaWdpbiA9
ICZpbmxpbmVkRnJhbWVJbmZvLT5jYWxsZXI7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogY2Fs
bGVySW5saW5lZEZyYW1lSW5mbyA9IGNhbGxlckNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZTsK
KyAgICAgICAgdW5zaWduZWQgY2FsbGVyRnJhbWVPZmZzZXQgPSBjYWxsZXJJbmxpbmVkRnJhbWVJ
bmZvID8gY2FsbGVySW5saW5lZEZyYW1lSW5mby0+c3RhY2tPZmZzZXQgOiAwOworICAgICAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY3VyckZyYW1lICsgY2FsbGVyRnJhbWVPZmZzZXQ7Cisg
ICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbGVyRnJhbWUpOworCisgICAg
ICAgIGNvZGVPcmlnaW4gPSAqY2FsbGVyQ29kZU9yaWdpbjsKKyAgICAgICAgbG9naWNhbEZyYW1l
ID0gY2FsbGVyRnJhbWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVCghaW5uZXJNb3N0TG9naWNh
bEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKKyAgICByZXR1cm4gRnJhbWU6OmNyZWF0
ZShpbm5lck1vc3RMb2dpY2FsRnJhbWUpOworI2VuZGlmIC8vICFFTkFCTEUoREZHX0pJVCkKK30K
KworU3RhY2tJdGVyYXRvcjo6RnJhbWUqIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpsb2dpY2FsQ2Fs
bGVyRnJhbWUoKQoreworICAgIEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNyZWF0ZSh0aGlzLT5jYWxs
ZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpKTsKKyNpZiAhRU5BQkxFKERGR19K
SVQpCisgICAgcmV0dXJuIGNhbGxlckZyYW1lOworCisjZWxzZSAvLyAhRU5BQkxFKERGR19KSVQp
CisgICAgaWYgKCFpc0pTRnJhbWUoKSB8fCAhY2FsbGVyRnJhbWUpCisgICAgICAgIHJldHVybiBj
YWxsZXJGcmFtZTsKKworICAgIC8vIElmIEkgYW0ga25vd24gdG8gYmUgYW4gaW5saW5lZCBmcmFt
ZSwgdGhlbiBJJ3ZlIGJlZW4gcmVpZmllZCBhbHJlYWR5IGFuZAorICAgIC8vIGhhdmUgbXkgY2Fs
bGVyLgorICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQorICAgICAgICByZXR1cm4gY2FsbGVyRnJh
bWU7CisgICAgCisgICAgLy8gSSBhbSBub3QgYW4gaW5saW5lZCBmcmFtZS4gU28gdGhlIHF1ZXN0
aW9uIGlzOiBpcyBteSBjYWxsZXIgYSBDYWxsRnJhbWUKKyAgICAvLyB0aGF0IGhhcyBpbmxpbmVz
IG9yIGEgQ2FsbEZyYW1lIHRoYXQgZG9lc24ndD8KKworICAgIC8vIElmIG15IGNhbGxlciBpcyBu
b3QgYSBKUyBmcmFtZSwgaXQgY2Fubm90IGhhdmUgaW5saW5lcywgYW5kIHdlJ3JlIGRvbmUuCisg
ICAgaWYgKCFjYWxsZXJGcmFtZS0+aXNKU0ZyYW1lKCkpCisgICAgICAgIHJldHVybiBjYWxsZXJG
cmFtZTsKKworICAgIEFTU0VSVCghY2FsbGVyRnJhbWUtPmlzSW5saW5lZEZyYW1lKCkpOworICAg
IHJldHVybiBjYWxsZXJGcmFtZS0+bG9naWNhbEZyYW1lKCk7CisKKyNlbmRpZiAvLyAhRU5BQkxF
KERGR19KSVQpCit9CisKKyNpZm5kZWYgTkRFQlVHCisKK3N0YXRpYyBjb25zdCBjaGFyKiBqaXRU
eXBlTmFtZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCit7CisgICAgc3dpdGNoIChqaXRUeXBl
KSB7CisgICAgY2FzZSBKSVRDb2RlOjpOb25lOiByZXR1cm4gIk5vbmUiOworICAgIGNhc2UgSklU
Q29kZTo6SG9zdENhbGxUaHVuazogcmV0dXJuICJIb3N0Q2FsbFRodW5rIjsKKyAgICBjYXNlIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bms6IHJldHVybiAiSW50ZXJwcmV0ZXJUaHVuayI7CisgICAg
Y2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDogcmV0dXJuICJCYXNlbGluZUpJVCI7CisgICAgY2Fz
ZSBKSVRDb2RlOjpERkdKSVQ6IHJldHVybiAiREZHSklUIjsKKyAgICBjYXNlIEpJVENvZGU6OkZU
TEpJVDogcmV0dXJuICJGVExKSVQiOworICAgIH0KKyAgICByZXR1cm4gIjx1bmtub3duPiI7Cit9
CisKK3N0YXRpYyB2b2lkIHByaW50SW5kZW50cyhpbnQgbGV2ZWxzKQoreworICAgIHdoaWxlIChs
ZXZlbHMtLSkKKyAgICAgICAgZGF0YUxvZ0ZTdHJpbmcoIiAgICIpOworfQorCitzdGF0aWMgdm9p
ZCBwcmludGlmKGludCBpbmRlbnRMZXZlbHMsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQorewor
ICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICB2YV9zdGFydChhcmdMaXN0LCBmb3JtYXQpOworCisg
ICAgaWYgKGluZGVudExldmVscykKKyAgICAgICAgcHJpbnRJbmRlbnRzKGluZGVudExldmVscyk7
CisKKyNpZiBDT01QSUxFUihDTEFORykgfHwgKENPTVBJTEVSKEdDQykgJiYgR0NDX1ZFUlNJT05f
QVRfTEVBU1QoNCwgNiwgMCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEg
R0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKyNlbmRpZgorCisg
ICAgV1RGOjpkYXRhTG9nRlYoZm9ybWF0LCBhcmdMaXN0KTsKKworI2lmIENPTVBJTEVSKENMQU5H
KSB8fCAoQ09NUElMRVIoR0NDKSAmJiBHQ0NfVkVSU0lPTl9BVF9MRUFTVCg0LCA2LCAwKSkKKyNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworICAgIHZhX2VuZChhcmdMaXN0KTsK
K30KKwordm9pZCBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6cHJpbnQoaW50IGluZGVudExldmVsKQor
eworICAgIGludCBpID0gaW5kZW50TGV2ZWw7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IHRoaXMtPmNvZGVCbG9jaygpOworICAgIHByaW50aWYoaSwgImZyYW1lICVwIHtcbiIsIHRoaXMp
OworCisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IHRoaXMtPmNhbGxlckZyYW1lKCk7Cisg
ICAgdm9pZCogcmV0dXJuUEMgPSBoYXNSZXR1cm5QQygpPyB0aGlzLT5yZXR1cm5QQygpLnZhbHVl
KCkgOiBudWxscHRyOworCisgICAgcHJpbnRpZihpLCAiICAgbmFtZSAnJXMnXG4iLCBmdW5jdGlv
bk5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBwcmludGlmKGksICIgICBzb3VyY2VVUkwgJyVz
J1xuIiwgc291cmNlVVJMKCkudXRmOCgpLmRhdGEoKSk7CisgICAgcHJpbnRpZihpLCAiICAgaG9z
dEZsYWcgJWRcbiIsIGNhbGxlckZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKKyAgICBw
cmludGlmKGksICIgICBpc0lubGluZWRGcmFtZSAlZFxuIiwgaXNJbmxpbmVkRnJhbWUoKSk7CisK
KyAgICBpZiAoaXNJbmxpbmVkRnJhbWUoKSkKKyAgICAgICAgcHJpbnRpZihpLCAiICAgSW5saW5l
Q2FsbEZyYW1lICVwXG4iLCB0aGlzLT5pbmxpbmVDYWxsRnJhbWUoKSk7CisKKyAgICBwcmludGlm
KGksICIgICBjYWxsZWUgJXBcbiIsIGNhbGxlZSgpKTsKKyAgICBwcmludGlmKGksICIgICByZXR1
cm5QQyAlcFxuIiwgcmV0dXJuUEMpOworICAgIHByaW50aWYoaSwgIiAgIGNhbGxlckZyYW1lICVw
XG4iLCBjYWxsZXJGcmFtZS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKSk7CisgICAgcHJpbnRp
ZihpLCAiICAgbG9naWNhbENhbGxlckZyYW1lICVwXG4iLCBsb2dpY2FsQ2FsbGVyRnJhbWUoKSk7
CisgICAgcHJpbnRpZihpLCAiICAgcmF3TG9jYXRpb25CaXRzICV1IDB4JXhcbiIsIGxvY2F0aW9u
QXNSYXdCaXRzKCksIGxvY2F0aW9uQXNSYXdCaXRzKCkpOworICAgIHByaW50aWYoaSwgIiAgIGNv
ZGVCbG9jayAlcFxuIiwgY29kZUJsb2NrKTsKKyAgICBpZiAoY29kZUJsb2NrKSB7CisgICAgICAg
IEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSA9IGNvZGVCbG9jay0+aml0VHlwZSgpOworICAgICAg
ICBpZiAoaGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAg
ICAgICBwcmludGlmKGksICIgICAgICBieXRlY29kZU9mZnNldCAldSAlcCAvICV6dVxuIiwgYnl0
ZWNvZGVPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJ5dGVjb2RlT2Zmc2V0KSwgY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdW5zaWduZWQgY29kZU9yaWdpbkluZGV4ID0gbG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRl
eCgpOworICAgICAgICAgICAgcHJpbnRpZihpLCAiICAgICAgY29kZU9yaWdpbklkZXggJXUgJXAg
LyAlenVcbiIsIGNvZGVPcmlnaW5JbmRleCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29kZU9y
aWdpbkluZGV4KSwgY29kZUJsb2NrLT5jb2RlT3JpZ2lucygpLnNpemUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgcHJpbnRpZihpLCAiICAgICAgbGluZSAlZFxuIiwgbGluZSgpKTsKKyAgICAgICAg
cHJpbnRpZihpLCAiICAgICAgY29sdW1uICVkXG4iLCBjb2x1bW4oKSk7CisgICAgICAgIHByaW50
aWYoaSwgIiAgICAgIGppdFR5cGUgJWQgPCVzPiBpc09wdGltaXppbmdKSVQgJWRcbiIsIGppdFR5
cGUsIGppdFR5cGVOYW1lKGppdFR5cGUpLCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSkpOworICAgICAgICBwcmludGlmKGksICIgICAgICBoYXNDb2RlT3JpZ2lucyAlZFxuIiwgY29k
ZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzQ29k
ZU9yaWdpbnMoKSkgeworICAgICAgICAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+
aml0Q29kZSgpLmdldCgpOworICAgICAgICAgICAgcHJpbnRpZihpLCAiICAgICAgICAgaml0Q29k
ZSAlcCBzdGFydCAlcCBlbmQgJXBcbiIsIGppdENvZGUsIGppdENvZGUtPnN0YXJ0KCksIGppdENv
ZGUtPmVuZCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGlmKGksICJ9XG4iKTsKK30K
KworI2VuZGlmIC8vIE5ERUJVRworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2lmbmRlZiBOREVC
VUcKKy8vIEZvciB1c2UgaW4gdGhlIGRlYnVnZ2VyCit2b2lkIGRlYnVnUHJpbnRDYWxsRnJhbWUo
SlNDOjpDYWxsRnJhbWUqKTsKKwordm9pZCBkZWJ1Z1ByaW50Q2FsbEZyYW1lKEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUpCit7CisgICAgaWYgKCFjYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsK
KyAgICBKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lKiBmcmFtZSA9IEpTQzo6U3RhY2tJdGVyYXRv
cjo6RnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUpOworICAgIGZyYW1lLT5wcmludCgyKTsKK30KKyNl
bmRpZiAvLyAhTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDMzICszMyw1MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotU3RhY2tJdGVyYXRvcjo6
U3RhY2tJdGVyYXRvcihWTSogdm0pCi0gICAgOiBtX3ZtKHZtKQorU3RhY2tJdGVyYXRvcjo6U3Rh
Y2tJdGVyYXRvcigpCisgICAgOiBtX3ZtKG51bGxwdHIpCiAgICAgLCBtX2ZyYW1lKG51bGxwdHIp
CiAgICAgLCBtX2ZpbHRlcihudWxscHRyKQogewogfQogCi12b2lkIFN0YWNrSXRlcmF0b3I6OmJl
Z2luQXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciBm
aWx0ZXIpCitTdGFja0l0ZXJhdG9yOjpTdGFja0l0ZXJhdG9yKFZNKiB2bSwgU3RhY2tJdGVyYXRv
cjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fZnJhbWUobnVs
bHB0cikKKyAgICAsIG1fZmlsdGVyKGZpbHRlcikKIHsKLSAgICBpZiAoIXN0YXJ0RnJhbWUpIHsK
LSAgICAgICAgbV9mcmFtZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV92bSkKKyAgICAgICAgaW5pdGlhbGl6
ZUZyYW1lKG1fdm0tPnRvcENhbGxGcmFtZSk7Cit9CiAKLSAgICBBU1NFUlQoJnN0YXJ0RnJhbWUt
PnZtKCkgPT0gbV92bSk7Ci0gICAgbV9mcmFtZSA9IEZyYW1lOjpjcmVhdGUoc3RhcnRGcmFtZSk7
Ci0gICAgbV9maWx0ZXIgPSBmaWx0ZXI7CitTdGFja0l0ZXJhdG9yOjpTdGFja0l0ZXJhdG9yKFZN
KiB2bSwgQ2FsbEZyYW1lKiBmcmFtZSwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVy
KQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fZnJhbWUobnVsbHB0cikKKyAgICAsIG1fZmlsdGVy
KGZpbHRlcikKK3sKKyAgICBpZiAobV92bSkKKyAgICAgICAgaW5pdGlhbGl6ZUZyYW1lKGZyYW1l
KTsKK30KIAotICAgIG1fZnJhbWUgPSBtX2ZyYW1lLT5sb2dpY2FsRnJhbWUoKTsKK1N0YWNrSXRl
cmF0b3I6OlN0YWNrSXRlcmF0b3IoVk0qIHZtLCBKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9i
aiwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQorICAgIDogbV92bSh2bSkKKyAg
ICAsIG1fZnJhbWUobnVsbHB0cikKKyAgICAsIG1fZmlsdGVyKGZpbHRlcikKK3sKKyAgICBpZiAo
bV92bSkgeworICAgICAgICBpbml0aWFsaXplRnJhbWUobV92bS0+dG9wQ2FsbEZyYW1lKTsKKyAg
ICAgICAgQVNTRVJUKGNhbGxlZUZ1bmN0aW9uT2JqKTsKKyAgICAgICAgZmluZEZyYW1lRm9yRnVu
Y3Rpb24oY2FsbGVlRnVuY3Rpb25PYmopOworICAgIH0KIH0KIAotdm9pZCBTdGFja0l0ZXJhdG9y
OjpiZWdpbkF0KEpTRnVuY3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9yOjpG
cmFtZUZpbHRlciBmaWx0ZXIpCit2b2lkIFN0YWNrSXRlcmF0b3I6OmluaXRpYWxpemVGcmFtZShD
YWxsRnJhbWUqIGZyYW1lKQogewotICAgIEFTU0VSVChjYWxsZWVGdW5jdGlvbk9iaik7Ci0gICAg
YmVnaW5BdChtX3ZtLT50b3BDYWxsRnJhbWUsIGZpbHRlcik7Ci0gICAgZmluZEZyYW1lRm9yRnVu
Y3Rpb24oY2FsbGVlRnVuY3Rpb25PYmopOworICAgIEFTU0VSVCghbV9mcmFtZSk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCZmcmFtZS0+dm0oKSA9PSBt
X3ZtKTsKKyAgICBtX2ZyYW1lID0gRnJhbWU6OmNyZWF0ZShmcmFtZSk7CisgICAgbV9mcmFtZSA9
IG1fZnJhbWUtPmxvZ2ljYWxGcmFtZSgpOwogfQogCiB2b2lkIFN0YWNrSXRlcmF0b3I6OmdvdG9O
ZXh0RnJhbWUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tJdGVyYXRvci5oCShyZXZpc2lvbiAxNTE0OTkpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg6MTUxNDk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgU3RhY2tJdGVyYXRvcl9oCisjZGVmaW5lIFN0YWNrSXRlcmF0b3JfaAor
CisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNs
dWRlICJTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
QXJndW1lbnRzOworCitjbGFzcyBTdGFja0l0ZXJhdG9yOjpGcmFtZSA6IHB1YmxpYyBDYWxsRnJh
bWUgeworcHVibGljOgorICAgIGVudW0gQ29kZVR5cGUgeworICAgICAgICBHbG9iYWwgPSBTdGFj
a0ZyYW1lR2xvYmFsQ29kZSwKKyAgICAgICAgRXZhbCA9IFN0YWNrRnJhbWVFdmFsQ29kZSwKKyAg
ICAgICAgRnVuY3Rpb24gPSBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlLAorICAgICAgICBOYXRpdmUg
PSBTdGFja0ZyYW1lTmF0aXZlQ29kZQorICAgIH07CisKKyAgICBzdGF0aWMgRnJhbWUqIGNyZWF0
ZShDYWxsRnJhbWUqIGYpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RnJhbWUqPihmKTsgfQor
CisgICAgYm9vbCBpc0pTRnJhbWUoKSBjb25zdCB7IHJldHVybiAhIWNvZGVCbG9jaygpOyB9CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgZnVuY3Rpb25OYW1lKCk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3RyaW5nIHNvdXJjZVVSTCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0
cmluZyB0b1N0cmluZygpOworCisgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVk
IGxpbmUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBjb2x1bW4oKTsKKworICAg
IEFyZ3VtZW50cyogYXJndW1lbnRzKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHRoaXMpOyB9CisgICAgCisgICAgRnJh
bWUqIGxvZ2ljYWxGcmFtZSgpOworICAgIEZyYW1lKiBsb2dpY2FsQ2FsbGVyRnJhbWUoKTsKKwor
I2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIHByaW50KGludCBpbmRlbnRMZXZlbCk7CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBGcmFtZSgpOworICAgIH5GcmFtZSgpOworCisgICAgdm9pZCByZXRy
aWV2ZUV4cHJlc3Npb25JbmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5k
T2Zmc2V0KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3RhY2tJdGVy
YXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1N0YWNrSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMs
NyBAQCBwdWJsaWM6CiAgICAgRnJhbWUqIGxvZ2ljYWxDYWxsZXJGcmFtZSgpOwogCiAjaWZuZGVm
IE5ERUJVRwotICAgIHZvaWQgcHJpbnQoaW50IGluZGVudExldmVsKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByaW50KGludCBpbmRlbnRMZXZlbCk7CiAjZW5kaWYKIAogcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
dGFja0l0ZXJhdG9yUHJpdmF0ZS5oCShyZXZpc2lvbiAxNTE0OTkpCShmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oOjE1MTQ5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTdGFja0l0ZXJhdG9yUHJpdmF0ZV9oCisj
ZGVmaW5lIFN0YWNrSXRlcmF0b3JQcml2YXRlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEV4ZWNTdGF0ZTsKK2NsYXNzIEpTRnVuY3Rpb247CitjbGFzcyBWTTsKKwordHlwZWRlZiBFeGVj
U3RhdGUgQ2FsbEZyYW1lOworCitjbGFzcyBTdGFja0l0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBj
bGFzcyBGcmFtZTsKKyAgICB0eXBlZGVmIGJvb2wgKCpGcmFtZUZpbHRlcikoRnJhbWUqKTsKKwor
ICAgIEZyYW1lJiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9mcmFtZTsgfQorICAgIEFMV0FZU19J
TkxJTkUgRnJhbWUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oRnJhbWUqIGZyYW1lKSB7IHJldHVybiBtX2ZyYW1lID09IGZyYW1lOyB9Cisg
ICAgYm9vbCBvcGVyYXRvciE9KEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gbV9mcmFtZSAhPSBmcmFt
ZTsgfQorICAgIHZvaWQgb3BlcmF0b3IrKygpIHsgZ290b05leHRGcmFtZSgpOyB9CisgICAgdm9p
ZCBmaW5kRnJhbWVGb3JGdW5jdGlvbihKU0Z1bmN0aW9uKik7CisKK3ByaXZhdGU6CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRvcihWTSopOworCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBiZWdpbkF0KENhbGxGcmFtZSogc3RhcnRGcmFtZSwgRnJhbWVGaWx0ZXIgPSBudWxs
cHRyKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGJlZ2luQXQoSlNGdW5jdGlvbiogY2Fs
bGVlRnVuY3Rpb25PYmosIEZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisgICAgc3RhdGljIEZyYW1l
KiBlbmQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgc3RhdGljIFN0YWNrSXRlcmF0b3IgZW1w
dHkoKSB7IHJldHVybiBTdGFja0l0ZXJhdG9yKG51bGxwdHIpOyB9CisKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGdvdG9OZXh0RnJhbWUoKTsKKworICAgIFZNKiBtX3ZtOworICAgIEZyYW1l
KiBtX2ZyYW1lOworICAgIEZyYW1lRmlsdGVyIG1fZmlsdGVyOworCisgICAgZnJpZW5kIGNsYXNz
IEV4ZWNTdGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3RhY2tJ
dGVyYXRvclByaXZhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3JQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aW5kRnJhbWVGb3JGdW5jdGlvbihKU0Z1bmN0aW9uKik7CiAKIHByaXZhdGU6Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRvcihWTSopOworICAgIFN0YWNrSXRlcmF0b3IoKTsKKyAg
ICBTdGFja0l0ZXJhdG9yKFZNKiwgRnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICBTdGFja0l0
ZXJhdG9yKFZNKiwgQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBGcmFtZUZpbHRlciA9IG51bGxwdHIp
OworICAgIFN0YWNrSXRlcmF0b3IoVk0qLCBKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9iaiwg
RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYmVn
aW5BdChDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIEZyYW1lRmlsdGVyID0gbnVsbHB0cik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBiZWdpbkF0KEpTRnVuY3Rpb24qIGNhbGxlZUZ1bmN0aW9u
T2JqLCBGcmFtZUZpbHRlciA9IG51bGxwdHIpOworICAgIHZvaWQgaW5pdGlhbGl6ZUZyYW1lKENh
bGxGcmFtZSogc3RhcnRGcmFtZSk7CiAgICAgc3RhdGljIEZyYW1lKiBlbmQoKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgc3RhdGljIFN0YWNrSXRlcmF0b3IgZW1wdHkoKSB7IHJldHVybiBTdGFj
a0l0ZXJhdG9yKG51bGxwdHIpOyB9Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdvdG9O
ZXh0RnJhbWUoKTsKIAogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTUxNTY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTAgQEAKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nUmVmLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiTGVnYWN5UHJvZmlsZXIuaCIK
ICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHJvZmlsZS5oIgorI2luY2x1ZGUg
IlN0YWNrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJUcmFjaW5nLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNTgsMTAgKzU4LDEzIEBAIFByb2ZpbGVHZW5lcmF0b3I6OlByb2ZpbGVHZW5lcmF0b3Io
RXhlY1MKIAogdm9pZCBQcm9maWxlR2VuZXJhdG9yOjphZGRQYXJlbnRGb3JDb25zb2xlU3RhcnQo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwot
ICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgMik7Ci0K
LSAgICBtX2N1cnJlbnROb2RlID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShleGVjLCBMZWdhY3lQcm9m
aWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoZXhlYywgc3RhY2tUcmFjZVsxXS5jYWxsZWUuZ2V0
KCksIHN0YWNrVHJhY2VbMV0uc291cmNlVVJMLCBzdGFja1RyYWNlWzFdLmxpbmUoKSksIG1faGVh
ZC5nZXQoKSwgbV9oZWFkLmdldCgpKTsKKyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5i
ZWdpbigpOworICAgICsraXRlcjsKKyAgICBDYWxsSWRlbnRpZmllciBpZGVudGlmaWVyID0gKGl0
ZXIgPT0gZXhlYy0+ZW5kKCkpCisgICAgICAgID8gTGVnYWN5UHJvZmlsZXI6OmNyZWF0ZUNhbGxJ
ZGVudGlmaWVyKGV4ZWMsIEpTVmFsdWUoKSwgU3RyaW5nKCksIDApCisgICAgICAgIDogTGVnYWN5
UHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIGl0ZXItPmNhbGxlZSgpLCBpdGVy
LT5zb3VyY2VVUkwoKSwgaXRlci0+bGluZSgpKTsKKyAgICBtX2N1cnJlbnROb2RlID0gUHJvZmls
ZU5vZGU6OmNyZWF0ZShleGVjLCBpZGVudGlmaWVyLCBtX2hlYWQuZ2V0KCksIG1faGVhZC5nZXQo
KSk7CisgICAgCiAgICAgbV9oZWFkLT5pbnNlcnROb2RlKG1fY3VycmVudE5vZGUuZ2V0KCkpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUu
aAkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIFByb2ZpbGVOb2RlOwogCi0gICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPFByb2ZpbGVOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBTdGFj
a0l0ZXJhdG9yOwogICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8U3RyaW5nSW1wbCo+IEZ1bmN0
aW9uQ2FsbEhhc2hDb3VudDsKIAogICAgIGNsYXNzIFByb2ZpbGVOb2RlIDogcHVibGljIFJlZkNv
dW50ZWQ8UHJvZmlsZU5vZGU+IHsKQEAgLTEzMSw2ICsxMzAsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNlbmRpZgogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFBy
b2ZpbGVOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBTdGFja0l0ZXJhdG9yOworCiAgICAgICAgIFBy
b2ZpbGVOb2RlKEV4ZWNTdGF0ZSogY2FsbGVyQ2FsbEZyYW1lLCBjb25zdCBDYWxsSWRlbnRpZmll
ciYsIFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUqIHBhcmVudE5vZGUpOwogICAg
ICAgICBQcm9maWxlTm9kZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgUHJvZmlsZU5vZGUq
IGhlYWROb2RlLCBQcm9maWxlTm9kZSogbm9kZVRvQ29weSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxNTE1NjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKIAorI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCkBAIC0zMiw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAi
SlNCb3VuZEZ1bmN0aW9uLmgiIAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNOb3RBbk9iamVjdC5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC00MCw2ICs0
Miw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2lu
Y2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgog
CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBAIC0xNzgs
MTggKzE4MSwzOSBAQCBDYWxsVHlwZSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqCiAg
ICAgcmV0dXJuIENhbGxUeXBlSlM7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIHJldHJpZXZlQXJndW1l
bnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb25PYmopCit7CisgICAgU3Rh
Y2tJdGVyYXRvciBpdGVyID0gZXhlYy0+ZmluZChmdW5jdGlvbk9iaik7CisgICAgcmV0dXJuIGl0
ZXIgIT0gZXhlYy0+ZW5kKCkgPyBKU1ZhbHVlKGl0ZXItPmFyZ3VtZW50cygpKSA6IGpzTnVsbCgp
OworfQorCiBKU1ZhbHVlIEpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0
aGlzT2JqID0ganNDYXN0PEpTRnVuY3Rpb24qPihzbG90QmFzZSk7CiAgICAgQVNTRVJUKCF0aGlz
T2JqLT5pc0hvc3RGdW5jdGlvbigpKTsKLSAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+
cmV0cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmopOworCisgICAgcmV0dXJu
IHJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXNPYmopOworfQorCitzdGF0aWMgYm9vbCBza2lw
T3ZlckJvdW5kRnVuY3Rpb25zKFN0YWNrSXRlcmF0b3I6OkZyYW1lKiBmcmFtZSkKK3sKKyAgICBK
U09iamVjdCogY2FsbGVlID0gZnJhbWUtPmNhbGxlZSgpOworICAgIGJvb2wgc2hvdWxkU2tpcCA9
IGNhbGxlZSA/IGNhbGxlZS0+aW5oZXJpdHMoJkpTQm91bmRGdW5jdGlvbjo6c19pbmZvKSA6IGZh
bHNlOworICAgIHJldHVybiBzaG91bGRTa2lwOworfQorCitzdGF0aWMgSlNWYWx1ZSByZXRyaWV2
ZUNhbGxlckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb25PYmop
Cit7CisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+ZmluZChmdW5jdGlvbk9iaiwgc2tp
cE92ZXJCb3VuZEZ1bmN0aW9ucyk7CisgICAgKytpdGVyOworICAgIHJldHVybiBpdGVyICE9IGV4
ZWMtPmVuZCgpICYmIGl0ZXItPmNhbGxlZSgpID8gaXRlci0+Y2FsbGVlKCkgOiBqc051bGwoKTsK
IH0KIAogSlNWYWx1ZSBKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09i
aiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oc2xvdEJhc2UpOwogICAgIEFTU0VSVCghdGhpc09iai0+
aXNIb3N0RnVuY3Rpb24oKSk7Ci0gICAgSlNWYWx1ZSBjYWxsZXIgPSBleGVjLT5pbnRlcnByZXRl
cigpLT5yZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoZXhlYywgdGhpc09iaik7CisgICAgSlNWYWx1
ZSBjYWxsZXIgPSByZXRyaWV2ZUNhbGxlckZ1bmN0aW9uKGV4ZWMsIHRoaXNPYmopOwogCiAgICAg
Ly8gU2VlIEVTNS4xIDE1LjMuNS40IC0gRnVuY3Rpb24uY2FsbGVyIG1heSBub3QgYmUgdXNlZCB0
byByZXRyaWV2ZSBhIHN0cmljdCBjYWxsZXIuCiAgICAgaWYgKCFjYWxsZXIuaXNPYmplY3QoKSB8
fCAhYXNPYmplY3QoY2FsbGVyKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpCkBAIC0y
OTcsNyArMzIxLDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmll
dmVBcmd1bWVudHNGcm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmplY3QpLCBSZWFkT25seSB8IERvbnRF
bnVtIHwgRG9udERlbGV0ZSk7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihyZXRy
aWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqZWN0KSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERv
bnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0zMjEsNyAr
MzQ1LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxs
ZXJGcm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmplY3QpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9u
dERlbGV0ZSk7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihyZXRyaWV2ZUNhbGxl
ckZ1bmN0aW9uKGV4ZWMsIHRoaXNPYmplY3QpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERl
bGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTQxNSwxNCArNDM5
LDE0IEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmoKICAgICAgICAg
ICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUs
IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihl
eGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAgICAgcmV0
dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIH0KLSAgICAgICAgdmFsdWVDaGVj
ayA9ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFs
dWUoKSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKGV4
ZWMsIHRoaXNPYmplY3QpKTsKKyAgICAgICAgdmFsdWVDaGVjayA9ICFkZXNjcmlwdG9yLnZhbHVl
KCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgcmV0cmlldmVBcmd1bWVu
dHMoZXhlYywgdGhpc09iamVjdCkpOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpz
RXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgaWYgKCFCYXNlOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKSkKICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3Nv
cihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5
cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNz
b3IpOwogICAgICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAg
IH0KLSAgICAgICAgdmFsdWVDaGVjayA9ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVl
KGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVD
YWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmplY3QpKTsKKyAgICAgICAgdmFsdWVDaGVjayA9
ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUo
KSwgcmV0cmlldmVDYWxsZXJGdW5jdGlvbihleGVjLCB0aGlzT2JqZWN0KSk7CiAgICAgfSBlbHNl
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAg
ICAgdmFsdWVDaGVjayA9ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRl
c2NyaXB0b3IudmFsdWUoKSwganNOdW1iZXIodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPnBh
cmFtZXRlckNvdW50KCkpKTsKICAgICBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLm5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxNTE1
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJOb2Rl
cy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNs
dWRlICJTdGFja0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDxz
dGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNzExLDcgKzcxMiw5IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKICAgICBpZiAoIXRoaXNPYmplY3QpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dGhpc1ZhbHVlKCkuc3ludGhlc2l6
ZVByb3RvdHlwZShleGVjKSk7CiAKLSAgICBpZiAoIXRoaXNPYmplY3QtPmFsbG93c0FjY2Vzc0Zy
b20oZXhlYy0+dHJ1ZUNhbGxlckZyYW1lKCkpKQorICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4
ZWMtPmZpbmQoZXhlYyk7CisgICAgKytpdGVyOworICAgIGlmICgoaXRlciA9PSBleGVjLT5lbmQo
KSkgfHwgIXRoaXNPYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oaXRlci0+Y2FsbEZyYW1lKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5wcm90b3R5cGUoKSk7CkBAIC03MjcsNyAr
NzMwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogICAgIGlm
ICghdGhpc09iamVjdCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAotICAgIGlmICghdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShleGVjLT50cnVl
Q2FsbGVyRnJhbWUoKSkpCisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+ZmluZChleGVj
KTsKKyAgICArK2l0ZXI7CisgICAgaWYgKChpdGVyID09IGV4ZWMtPmVuZCgpKSB8fCAhdGhpc09i
amVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5jYWxsRnJhbWUoKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyBTZXR0aW5nIF9fcHJv
dG9fXyB0byBhIG5vbi1vYmplY3QsIG5vbi1udWxsIHZhbHVlIGlzIHNpbGVudGx5IGlnbm9yZWQg
dG8gbWF0Y2ggTW96aWxsYS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE1MTU2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgor
I2luY2x1ZGUgIlN0YWNrSXRlcmF0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEzOSw3
ICsxNDAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAg
aWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3Rl
ZCBwcm90b3R5cGUgb2YgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBvYmplY3QuIikpKTsKICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICgh
b2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMtPnRydWVDYWxsZXJGcmFtZSgpKSkKKyAgICBT
dGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGV4ZWMpOworICAgICsraXRlcjsKKyAgICBp
ZiAoKGl0ZXIgPT0gZXhlYy0+ZW5kKCkpIHx8ICFvYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oaXRl
ci0+Y2FsbEZyYW1lKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0LT5wcm90b3R5cGUoKSk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShy
ZXZpc2lvbiAxNTE1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgT3BlcmF0aW9u
c19oCiAjZGVmaW5lIE9wZXJhdGlvbnNfaAogCisjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNTE2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAxMy0wNi0xNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgUm9sbGluZyByMTUxNDU2LCByMTUxNDIwIGJhY2sgaW4gd2l0aCBzb21lIGZp
eGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3
MzkwLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVx
dWVzdDo6c2VuZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9y
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTY3JpcHRDYWxsU3RhY2spOgorCiAyMDEz
LTA2LTEyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsZWQgb3V0IHIxNTE0NTYsIHIxNTE0MjA6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaW50ZXJwcmV0ZXIvU3RhY2tJdGVy
YXRvci5oCShyZXZpc2lvbiAxNTE0OTkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaDoxNTE0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1N0YWNrSXRlcmF0
b3JfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9TdGFja0l0ZXJhdG9yX2gKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdGFja0l0ZXJhdG9yLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAxNTE1NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUg
IkpTRXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJYTUxI
dHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgPGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaD4KICNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaD4KICNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKQEAgLTEzMywxMCArMTMzLDE1IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChF
eGVjU3RhdGUKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2YWwudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpLCBlYyk7CiAgICAgfQogCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2UoMik7Ci0gICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNl
LCAyKTsKLSAgICBpbXBsKCktPnNldExhc3RTZW5kTGluZU51bWJlcihzdGFja1RyYWNlWzFdLmxp
bmUoKSk7Ci0gICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVSTChzdGFja1RyYWNlWzFdLnNvdXJjZVVS
TCk7CisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0ZXI7
CisgICAgaWYgKGl0ZXIgIT0gZXhlYy0+ZW5kKCkpIHsKKyAgICAgICAgaW1wbCgpLT5zZXRMYXN0
U2VuZExpbmVOdW1iZXIoaXRlci0+bGluZSgpKTsKKyAgICAgICAgaW1wbCgpLT5zZXRMYXN0U2Vu
ZFVSTChpdGVyLT5zb3VyY2VVUkwoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1wbCgpLT5z
ZXRMYXN0U2VuZExpbmVOdW1iZXIoMCk7CisgICAgICAgIGltcGwoKS0+c2V0TGFzdFNlbmRVUkwo
U3RyaW5nKCkpOworICAgIH0KIAogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMTUxNTY3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2suaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0Nh
bGxGcmFtZS5oPgotI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CisjaW5jbHVk
ZSA8aW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlz
dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNGdW5jdGlvbi5oPgpAQCAtNTcsMTAgKzU3LDggQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdAogewogICAgIFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsK
ICAgICBpZiAoSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmN1
cnJlbnRTdGF0ZSgpKSB7Ci0gICAgICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwot
ICAgICAgICBleGVjLT5pbnRlcnByZXRlcigpLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIG1h
eFN0YWNrU2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhY2tUcmFjZS5z
aXplKCk7IGkrKykKLSAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoU2NyaXB0Q2FsbEZyYW1lKHN0
YWNrVHJhY2VbaV0uZnJpZW5kbHlGdW5jdGlvbk5hbWUoZXhlYyksIHN0YWNrVHJhY2VbaV0uZnJp
ZW5kbHlTb3VyY2VVUkwoKSwgc3RhY2tUcmFjZVtpXS5saW5lKCksIHN0YWNrVHJhY2VbaV0uY29s
dW1uKCkpKTsKKyAgICAgICAgZm9yIChTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigp
OyBpdGVyICE9IGV4ZWMtPmVuZCgpICYmIG1heFN0YWNrU2l6ZS0tOyArK2l0ZXIpCisgICAgICAg
ICAgICBmcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShpdGVyLT5mdW5jdGlvbk5hbWUoKSwg
aXRlci0+c291cmNlVVJMKCksIGl0ZXItPmxpbmUoKSwgaXRlci0+Y29sdW1uKCkpKTsKICAgICB9
CiAgICAgaWYgKGZyYW1lcy5pc0VtcHR5KCkgJiYgIWVtcHR5SXNBbGxvd2VkKSB7CiAgICAgICAg
IC8vIE5vIGZyYW1lcyBmb3VuZC4gSXQgbWF5IGhhcHBlbiBpbiB0aGUgY2FzZSB3aGVyZQpAQCAt
NzQsMTkgKzcyLDE1IEBAIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHQK
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2soSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBtYXhTdGFja1NpemUpCiB7CiAgICAgVmVjdG9yPFNjcmlw
dENhbGxGcmFtZT4gZnJhbWVzOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwot
ICAgIGV4ZWMtPmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgbWF4U3Rh
Y2tTaXplICsgMSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IHN0YWNrVHJhY2Uuc2l6ZSgpID09IDEg
PyAwIDogMTsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyBpKyspIHsKKyAgICBTdGFja0l0ZXJhdG9y
IGl0ZXIgPSBleGVjLT5iZWdpbigpOworICAgIGZvciAoKytpdGVyOyBpdGVyICE9IGV4ZWMtPmVu
ZCgpICYmIG1heFN0YWNrU2l6ZS0tOyArK2l0ZXIpIHsKICAgICAgICAgLy8gVGhpcyBlYXJseSBl
eGl0IGlzIG5lY2Vzc2FyeSB0byBtYWludGFpbiBvdXIgb2xkIGJlaGF2aW91cgogICAgICAgICAv
LyBidXQgdGhlIHN0YWNrIHRyYWNlIHdlIHByb2R1Y2Ugbm93IGlzIGNvbXBsZXRlIGFuZCBoYW5k
bGVzIGFsbAogICAgICAgICAvLyB3YXlzIGluIHdoaWNoIGNvZGUgbWF5IGJlIHJ1bm5pbmcKLSAg
ICAgICAgaWYgKCFzdGFja1RyYWNlW2ldLmNhbGxlZSAmJiBmcmFtZXMuc2l6ZSgpKQorICAgICAg
ICBpZiAoIWl0ZXItPmNhbGxlZSgpICYmIGZyYW1lcy5zaXplKCkpCiAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0gc3RhY2tUcmFjZVtpXS5mcmllbmRs
eUZ1bmN0aW9uTmFtZShleGVjKTsKLSAgICAgICAgZnJhbWVzLmFwcGVuZChTY3JpcHRDYWxsRnJh
bWUoZnVuY3Rpb25OYW1lLCBzdGFja1RyYWNlW2ldLnNvdXJjZVVSTCwgc3RhY2tUcmFjZVtpXS5s
aW5lKCksIHN0YWNrVHJhY2VbaV0uY29sdW1uKCkpKTsKKyAgICAgICAgZnJhbWVzLmFwcGVuZChT
Y3JpcHRDYWxsRnJhbWUoaXRlci0+ZnVuY3Rpb25OYW1lKCksIGl0ZXItPnNvdXJjZVVSTCgpLCBp
dGVyLT5saW5lKCksIGl0ZXItPmNvbHVtbigpKSk7CiAgICAgfQotCiAgICAgcmV0dXJuIFNjcmlw
dENhbGxTdGFjazo6Y3JlYXRlKGZyYW1lcyk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204743</attachid>
            <date>2013-06-14 16:10:01 -0700</date>
            <delta_ts>2013-06-17 09:51:10 -0700</delta_ts>
            <desc>revised patch as a delta from rolled out patch</desc>
            <filename>deltab.patch</filename>
            <type>text/plain</type>
            <size>17243</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CitpMjAxMy0wNi0xNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Um9sbGluZyByMTUxNDU2LCByMTUxNDIwIGJhY2sgaW4gd2l0aCBzb21lIGZpeGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzkwLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBjaGFuZ2VzIG9u
IHRvcCBvZiB0aGUgb2xkIHBhdGNoOgorICAgICAgICAtIFJlbmFtZWQgQ2FsbEZyYW1lOjpiZWdp
bkF0KCkgdG8gQ2FsbEZyYW1lOjpmaW5kKCksIGFuZCBhbHNvIHByb3ZpZGUKKyAgICAgICAgICBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIENhbGxGcmFtZSogdG8gc2VhcmNoIGZvci4KKworICAgICAg
ICAgIFRoZXJlIGFyZSAzIHR5cGVzIG9mIHVzZXJzIG9mIHRoZSBTdGFja0l0ZXJhdG9yLiBXZSBu
ZWVkIHRvIGNhdGVyCisgICAgICAgICAgdG8gZWFjaCBvZiB0aGVzZSBhcyBmb2xsb3dzOgorCisg
ICAgICAgICAgMS4gVXNlcnMgd2hvIHdhbnQgYSBzdGFjayB0cmFjZQorICAgICAgICAgICAgIC0g
SGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHZtLnRvcENhbGxGcmFtZS4KKyAg
ICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUgU3RhY2tJdGVyYXRvciBhcyBmb2xs
b3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4o
KTsKKworICAgICAgICAgIDIuIFVzZXJzIHdobyB3YW50IHRoZWlyIGNhbGxlciBmcmFtZQorICAg
ICAgICAgICAgIC0gSGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHRoZSBzcGVj
aWZpZWQgQ2FsbEZyYW1lKi4KKyAgICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUg
U3RhY2tJdGVyYXRvciBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRv
ciBpdGVyID0gZXhlYy0+ZmluZChjYWxsRnJhbWUpOworCisgICAgICAgICAgMy4gVXNlcnMgd2hv
IHdhbnQgdGhlIGZyYW1lIG9mIGEgc3BlY2lmaWMgSlNGdW5jdGlvbiBvYmplY3QKKyAgICAgICAg
ICAgICAtIEhlcmUgd2UgbmVlZCB0byBzdGFydCBpdGVyYXRpbmcgZnJvbSB2bS50b3BDYWxsRnJh
bWUgYW5kIGZpbmQKKyAgICAgICAgICAgICAgIHRoZSBmcmFtZSB0aGF0IGhhcyBhIGNhbGxlZSBt
YXRjaGluZyB0aGUgc3BlY2lmaWVkIEpTRnVuY3Rpb24qLgorICAgICAgICAgICAgIC0gVG8gZG8g
dGhpcywgY3JlYXRlIHRoZSBTdGFja0l0ZXJhdG9yIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAg
ICAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGZ1bmN0aW9uT2JqKTsKKworICAg
ICAgICAgIFRoZSBwcmV2aW91cyBsYXlvdXQgdGVzdCBmYWlsdXJlcyB3ZXJlIGR1ZSB0byBjb25m
bGF0aW9uIG9mIGNhc2UgMQorICAgICAgICAgIGFuZCAyLiBUaGV5IGFyZSBub3cgaGFuZGxlZCBk
aXN0aW5jdGx5LgorCisgICAgICAgIC0gRml4ZWQgYSBwcmUtZXhpc3RpbmcgbGF5b3V0IHRlc3Qg
Y3Jhc2ggaW4KKyAgICAgICAgICBpbnNwZWN0b3IvcHJvZmlsZXIvY3B1LXByb2ZpbGVyLWFnZW50
LWNyYXNoLW9uLXN0YXJ0Lmh0bWwuCisKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoK
KyAgICAgICAgKEpTQ29udGV4dENyZWF0ZUJhY2t0cmFjZSk6CisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpiZWdpbik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6ZmluZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAg
ICAgIChKU0M6OkV4ZWNTdGF0ZTo6c2V0SW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEV4ZWNT
dGF0ZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZW5kKToKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkdW1wUmVn
aXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZSk6Cisg
ICAgICAgIChKU0M6OkludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmRlYnVnKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAo
SW50ZXJwcmV0ZXIpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
ci5jcHAuCisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OlN0YWNrSXRlcmF0b3IpOgorICAg
ICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjppbml0aWFsaXplRnJhbWUpOgorICAgICAgICAqIGlu
dGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaC4KKyAgICAgICAgKFN0YWNrSXRlcmF0b3I6
OkZyYW1lKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yUHJpdmF0ZS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
clByaXZhdGUuaC4KKyAgICAgICAgKFN0YWNrSXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpTdGFj
a0l0ZXJhdG9yOjplbmQpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvbkpT
Q1N0YWNrKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0KToKKyAg
ICAgICAgKiBwcm9maWxlci9Qcm9maWxlTm9kZS5oOgorICAgICAgICAoUHJvZmlsZU5vZGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OnJldHJpZXZl
QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKToK
KyAgICAgICAgKEpTQzo6c2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OnJl
dHJpZXZlQ2FsbGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJH
ZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6
Omdsb2JhbEZ1bmNQcm90b0dldHRlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b1Nl
dHRlcik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAqIHJ1bnRp
bWUvT3BlcmF0aW9ucy5oOgorCiAyMDEzLTA2LTExICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUm9sbGVkIGJhY2sgaW4gPGh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvY2hhbmdlc2V0LzE1MTM2Mz4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMCwyMSArMTAwLDIyIEBAIFJlZ2lzdGVyKiBDYWxsRnJhbWU6OmZyYW1lRXh0ZW50SW50ZXJu
YWwKIFN0YWNrSXRlcmF0b3IgQ2FsbEZyYW1lOjpiZWdpbihTdGFja0l0ZXJhdG9yOjpGcmFtZUZp
bHRlciBmaWx0ZXIpCiB7CiAgICAgaWYgKCF0aGlzKQotICAgICAgICByZXR1cm4gU3RhY2tJdGVy
YXRvcjo6ZW1wdHkoKTsKLQotICAgIFN0YWNrSXRlcmF0b3IgaXRlcigmdm0oKSk7Ci0gICAgaXRl
ci5iZWdpbkF0KHRoaXMsIGZpbHRlcik7Ci0gICAgcmV0dXJuIGl0ZXI7CisgICAgICAgIHJldHVy
biBTdGFja0l0ZXJhdG9yKCk7CisgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3IoJnZtKCksIGZpbHRl
cik7CiB9CiAKLVN0YWNrSXRlcmF0b3IgQ2FsbEZyYW1lOjpiZWdpbkF0KEpTRnVuY3Rpb24qIGNh
bGxlZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciBmaWx0ZXIpCitTdGFj
a0l0ZXJhdG9yIENhbGxGcmFtZTo6ZmluZChDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFN0YWNrSXRl
cmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKIHsKICAgICBpZiAoIXRoaXMpCi0gICAgICAgIHJl
dHVybiBTdGFja0l0ZXJhdG9yOjplbXB0eSgpOworICAgICAgICByZXR1cm4gU3RhY2tJdGVyYXRv
cigpOworICAgIHJldHVybiBTdGFja0l0ZXJhdG9yKCZ2bSgpLCBzdGFydEZyYW1lLCBmaWx0ZXIp
OworfQogCi0gICAgU3RhY2tJdGVyYXRvciBpdGVyKCZ2bSgpKTsKLSAgICBpdGVyLmJlZ2luQXQo
Y2FsbGVlRnVuY3Rpb25PYmosIGZpbHRlcik7Ci0gICAgcmV0dXJuIGl0ZXI7ICAgIAorU3RhY2tJ
dGVyYXRvciBDYWxsRnJhbWU6OmZpbmQoSlNGdW5jdGlvbiogY2FsbGVlRnVuY3Rpb25PYmosIFN0
YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAgICBpZiAoIXRoaXMpCisgICAg
ICAgIHJldHVybiBTdGFja0l0ZXJhdG9yKCk7CisgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3IoJnZt
KCksIGNhbGxlZUZ1bmN0aW9uT2JqLCBmaWx0ZXIpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTE0ODEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3OSw3ICsyNzksOCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWVOb0ZsYWdzKCkgeyByZXR1cm4gY2FsbGVyRnJhbWUoKS0+cmVt
b3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0
YWNrSXRlcmF0b3IgYmVnaW4oU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRvciBiZWdpbkF0KEpTRnVuY3Rp
b24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciA9IG51bGxw
dHIpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yIGZpbmQoQ2FsbEZy
YW1lKiBzdGFydEZyYW1lLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciA9IG51bGxwdHIpOwor
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yIGZpbmQoSlNGdW5jdGlvbiog
Y2FsbGVlRnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyID0gbnVsbHB0cik7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3I6OkZyYW1lKiBlbmQoKSB7
IHJldHVybiBTdGFja0l0ZXJhdG9yOjplbmQoKTsgfSAKIAogICAgIHByaXZhdGU6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJ
KHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw3ICs0MDksOCBAQCB2b2lkIElu
dGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtCiAgICAgaWYgKHBjLmhhc0pJVFJldHVy
bkFkZHJlc3MoKSkKICAgICAgICAgZGF0YUxvZ0YoIltSZXR1cm5KSVRQQ10gICAgICAgICAgICAg
IHwgJTEwcCB8ICVwIFxuIiwgaXQsIHBjLmppdFJldHVybkFkZHJlc3MoKS52YWx1ZSgpKTsKICNl
bmRpZgotICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGNhbGxGcmFtZS0+YmVnaW4oKTsKKyAgICBT
dGFja0l0ZXJhdG9yIGl0ZXIgPSBjYWxsRnJhbWUtPmZpbmQoY2FsbEZyYW1lKTsKKyAgICArK2l0
ZXI7CiAgICAgZGF0YUxvZ0YoIltSZXR1cm5WUENdICAgICAgICAgICAgICAgIHwgJTEwcCB8ICVk
IChsaW5lICVkKVxuIiwgaXQsIGl0ZXItPmJ5dGVjb2RlT2Zmc2V0KCksIGl0ZXItPmxpbmUoKSk7
CiAgICAgKytpdDsKICAgICBkYXRhTG9nRigiW0NvZGVCbG9ja10gICAgICAgICAgICAgICAgfCAl
MTBwIHwgJXAgXG4iLCBpdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCShy
ZXZpc2lvbiAxNTE0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDMzICszMyw1MiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotU3RhY2tJdGVyYXRvcjo6U3RhY2tJdGVyYXRvcihWTSogdm0pCi0gICAg
OiBtX3ZtKHZtKQorU3RhY2tJdGVyYXRvcjo6U3RhY2tJdGVyYXRvcigpCisgICAgOiBtX3ZtKG51
bGxwdHIpCiAgICAgLCBtX2ZyYW1lKG51bGxwdHIpCiAgICAgLCBtX2ZpbHRlcihudWxscHRyKQog
ewogfQogCi12b2lkIFN0YWNrSXRlcmF0b3I6OmJlZ2luQXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1l
LCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciBmaWx0ZXIpCitTdGFja0l0ZXJhdG9yOjpTdGFj
a0l0ZXJhdG9yKFZNKiB2bSwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQorICAg
IDogbV92bSh2bSkKKyAgICAsIG1fZnJhbWUobnVsbHB0cikKKyAgICAsIG1fZmlsdGVyKGZpbHRl
cikKIHsKLSAgICBpZiAoIXN0YXJ0RnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZSA9IG51bGxwdHI7
Ci0gICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAobV92bSkKKyAgICAgICAgaW5pdGlhbGl6ZUZyYW1lKG1fdm0tPnRvcENhbGxGcmFtZSk7
Cit9CiAKLSAgICBBU1NFUlQoJnN0YXJ0RnJhbWUtPnZtKCkgPT0gbV92bSk7Ci0gICAgbV9mcmFt
ZSA9IEZyYW1lOjpjcmVhdGUoc3RhcnRGcmFtZSk7Ci0gICAgbV9maWx0ZXIgPSBmaWx0ZXI7CitT
dGFja0l0ZXJhdG9yOjpTdGFja0l0ZXJhdG9yKFZNKiB2bSwgQ2FsbEZyYW1lKiBmcmFtZSwgU3Rh
Y2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1f
ZnJhbWUobnVsbHB0cikKKyAgICAsIG1fZmlsdGVyKGZpbHRlcikKK3sKKyAgICBpZiAobV92bSkK
KyAgICAgICAgaW5pdGlhbGl6ZUZyYW1lKGZyYW1lKTsKK30KIAotICAgIG1fZnJhbWUgPSBtX2Zy
YW1lLT5sb2dpY2FsRnJhbWUoKTsKK1N0YWNrSXRlcmF0b3I6OlN0YWNrSXRlcmF0b3IoVk0qIHZt
LCBKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9iaiwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0
ZXIgZmlsdGVyKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fZnJhbWUobnVsbHB0cikKKyAgICAs
IG1fZmlsdGVyKGZpbHRlcikKK3sKKyAgICBpZiAobV92bSkgeworICAgICAgICBpbml0aWFsaXpl
RnJhbWUobV92bS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAgICAgQVNTRVJUKGNhbGxlZUZ1bmN0aW9u
T2JqKTsKKyAgICAgICAgZmluZEZyYW1lRm9yRnVuY3Rpb24oY2FsbGVlRnVuY3Rpb25PYmopOwor
ICAgIH0KIH0KIAotdm9pZCBTdGFja0l0ZXJhdG9yOjpiZWdpbkF0KEpTRnVuY3Rpb24qIGNhbGxl
ZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciBmaWx0ZXIpCit2b2lkIFN0
YWNrSXRlcmF0b3I6OmluaXRpYWxpemVGcmFtZShDYWxsRnJhbWUqIGZyYW1lKQogewotICAgIEFT
U0VSVChjYWxsZWVGdW5jdGlvbk9iaik7Ci0gICAgYmVnaW5BdChtX3ZtLT50b3BDYWxsRnJhbWUs
IGZpbHRlcik7Ci0gICAgZmluZEZyYW1lRm9yRnVuY3Rpb24oY2FsbGVlRnVuY3Rpb25PYmopOwor
ICAgIEFTU0VSVCghbV9mcmFtZSk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKCZmcmFtZS0+dm0oKSA9PSBtX3ZtKTsKKyAgICBtX2ZyYW1lID0gRnJhbWU6
OmNyZWF0ZShmcmFtZSk7CisgICAgbV9mcmFtZSA9IG1fZnJhbWUtPmxvZ2ljYWxGcmFtZSgpOwog
fQogCiB2b2lkIFN0YWNrSXRlcmF0b3I6OmdvdG9OZXh0RnJhbWUoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCShyZXZpc2lv
biAxNTE0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICBGcmFt
ZSogbG9naWNhbENhbGxlckZyYW1lKCk7CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBwcmlu
dChpbnQgaW5kZW50TGV2ZWwpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnQoaW50
IGluZGVudExldmVsKTsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3JQcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3JQcml2YXRlLmgJ
KHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
dGFja0l0ZXJhdG9yUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMyArNDgsMTMgQEAg
cHVibGljOgogICAgIHZvaWQgZmluZEZyYW1lRm9yRnVuY3Rpb24oSlNGdW5jdGlvbiopOwogCiBw
cml2YXRlOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3IoVk0qKTsKKyAgICBT
dGFja0l0ZXJhdG9yKCk7CisgICAgU3RhY2tJdGVyYXRvcihWTSosIEZyYW1lRmlsdGVyID0gbnVs
bHB0cik7CisgICAgU3RhY2tJdGVyYXRvcihWTSosIENhbGxGcmFtZSogc3RhcnRGcmFtZSwgRnJh
bWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICBTdGFja0l0ZXJhdG9yKFZNKiwgSlNGdW5jdGlvbiog
Y2FsbGVlRnVuY3Rpb25PYmosIEZyYW1lRmlsdGVyID0gbnVsbHB0cik7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGJlZ2luQXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBGcmFtZUZpbHRl
ciA9IG51bGxwdHIpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYmVnaW5BdChKU0Z1bmN0
aW9uKiBjYWxsZWVGdW5jdGlvbk9iaiwgRnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICB2b2lk
IGluaXRpYWxpemVGcmFtZShDYWxsRnJhbWUqIHN0YXJ0RnJhbWUpOwogICAgIHN0YXRpYyBGcmFt
ZSogZW5kKCkgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHN0YXRpYyBTdGFja0l0ZXJhdG9yIGVt
cHR5KCkgeyByZXR1cm4gU3RhY2tJdGVyYXRvcihudWxscHRyKTsgfQotCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBnb3RvTmV4dEZyYW1lKCk7CiAKICAgICBWTSogbV92bTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsOSBAQCB2b2lk
IFByb2ZpbGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNvCiB7CiAgICAgU3RhY2tJdGVyYXRv
ciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKICAgICArK2l0ZXI7Ci0gICAgQ2FsbElkZW50aWZpZXIg
aWRlbnRpZmllciA9IExlZ2FjeVByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBp
dGVyLT5jYWxsZWUoKSwgaXRlci0+c291cmNlVVJMKCksIGl0ZXItPmxpbmUoKSk7CisgICAgQ2Fs
bElkZW50aWZpZXIgaWRlbnRpZmllciA9IChpdGVyID09IGV4ZWMtPmVuZCgpKQorICAgICAgICA/
IExlZ2FjeVByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBKU1ZhbHVlKCksIFN0
cmluZygpLCAwKQorICAgICAgICA6IExlZ2FjeVByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmll
cihleGVjLCBpdGVyLT5jYWxsZWUoKSwgaXRlci0+c291cmNlVVJMKCksIGl0ZXItPmxpbmUoKSk7
CiAgICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywgaWRlbnRpZmll
ciwgbV9oZWFkLmdldCgpLCBtX2hlYWQuZ2V0KCkpOwogICAgIAogICAgIG1faGVhZC0+aW5zZXJ0
Tm9kZShtX2N1cnJlbnROb2RlLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lvbiAxNTE0
ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisj
aW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2lu
Y2x1ZGUgPHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtNjcsNiAr
NjgsNyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nT25jZSgpCiAgICAgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpOwogI2VuZGlmCiAgICAgSlNTdGFj
azo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIFN0YWNrSXRlcmF0b3I6OmluaXRpYWxpemVT
dGF0aWNzKCk7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIExMSW50Ojppbml0aWFsaXplKCk7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiAxNTE0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIENhbGxUeXBl
IEpTRnVuY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCoKIAogc3RhdGljIEpTVmFsdWUgcmV0cmll
dmVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbk9iaikKIHsK
LSAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbkF0KGZ1bmN0aW9uT2JqKTsKKyAg
ICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGZ1bmN0aW9uT2JqKTsKICAgICByZXR1
cm4gaXRlciAhPSBleGVjLT5lbmQoKSA/IEpTVmFsdWUoaXRlci0+YXJndW1lbnRzKCkpIDoganNO
dWxsKCk7CiB9CiAKQEAgLTIwNCw3ICsyMDQsNyBAQCBzdGF0aWMgYm9vbCBza2lwT3ZlckJvdW5k
RnVuY3Rpb25zKFN0YWNrCiAKIHN0YXRpYyBKU1ZhbHVlIHJldHJpZXZlQ2FsbGVyRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbk9iaikKIHsKLSAgICBTdGFja0l0
ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbkF0KGZ1bmN0aW9uT2JqLCBza2lwT3ZlckJvdW5kRnVu
Y3Rpb25zKTsKKyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGZ1bmN0aW9uT2Jq
LCBza2lwT3ZlckJvdW5kRnVuY3Rpb25zKTsKICAgICArK2l0ZXI7CiAgICAgcmV0dXJuIGl0ZXIg
IT0gZXhlYy0+ZW5kKCkgJiYgaXRlci0+Y2FsbGVlKCkgPyBpdGVyLT5jYWxsZWUoKSA6IGpzTnVs
bCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTUxNDgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MTIsOSArNzEyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jUAogICAgIGlmICghdGhpc09iamVjdCkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShleGVjLT50aGlzVmFsdWUoKS5zeW50aGVzaXplUHJvdG90eXBlKGV4ZWMp
KTsKIAotICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7CisgICAgU3RhY2tJ
dGVyYXRvciBpdGVyID0gZXhlYy0+ZmluZChleGVjKTsKICAgICArK2l0ZXI7Ci0gICAgaWYgKCF0
aGlzT2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXItPmNhbGxGcmFtZSgpKSkKKyAgICBpZiAo
KGl0ZXIgPT0gZXhlYy0+ZW5kKCkpIHx8ICF0aGlzT2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0
ZXItPmNhbGxGcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+cHJvdG90
eXBlKCkpOwpAQCAtNzMwLDkgKzczMCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY1AKICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVj
LT5iZWdpbigpOworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmZpbmQoZXhlYyk7CiAg
ICAgKytpdGVyOwotICAgIGlmICghdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5j
YWxsRnJhbWUoKSkpCisgICAgaWYgKChpdGVyID09IGV4ZWMtPmVuZCgpKSB8fCAhdGhpc09iamVj
dC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5jYWxsRnJhbWUoKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyBTZXR0aW5nIF9fcHJvdG9f
XyB0byBhIG5vbi1vYmplY3QsIG5vbi1udWxsIHZhbHVlIGlzIHNpbGVudGx5IGlnbm9yZWQgdG8g
bWF0Y2ggTW96aWxsYS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQwLDkgKzE0MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3QKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiUmVxdWVzdGVkIHByb3RvdHlwZSBvZiBhIHZhbHVlIHRoYXQgaXMgbm90IGFuIG9iamVjdC4i
KSkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7
Ci0gICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKKyAgICBTdGFja0l0ZXJh
dG9yIGl0ZXIgPSBleGVjLT5maW5kKGV4ZWMpOwogICAgICsraXRlcjsKLSAgICBpZiAoIW9iamVj
dC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5jYWxsRnJhbWUoKSkpCisgICAgaWYgKChpdGVyID09
IGV4ZWMtPmVuZCgpKSB8fCAhb2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXItPmNhbGxGcmFt
ZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+cHJvdG90eXBlKCkpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMDYtMTQgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJvbGxpbmcgcjE1MTQ1NiwgcjE1MTQyMCBiYWNr
IGluIHdpdGggc29tZSBmaXhlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExNzM5MC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVy
cy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dENhbGxTdGFja0ZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2NyaXB0Q2Fs
bFN0YWNrKToKKwogMjAxMy0wNi0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgSW50cm9kdWNpbmcgdGhlIFN0YWNrSXRlcmF0b3IgY2xhc3MuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNY
TUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw5ICsxMzUsMTMg
QEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZQogCiAgICAgU3RhY2tJ
dGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKICAgICArK2l0ZXI7Ci0gICAgQVNTRVJUKGl0
ZXIgIT0gZXhlYy0+ZW5kKCkpOwotICAgIGltcGwoKS0+c2V0TGFzdFNlbmRMaW5lTnVtYmVyKGl0
ZXItPmxpbmUoKSk7Ci0gICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVSTChpdGVyLT5zb3VyY2VVUkwo
KSk7ICAgIAorICAgIGlmIChpdGVyICE9IGV4ZWMtPmVuZCgpKSB7CisgICAgICAgIGltcGwoKS0+
c2V0TGFzdFNlbmRMaW5lTnVtYmVyKGl0ZXItPmxpbmUoKSk7CisgICAgICAgIGltcGwoKS0+c2V0
TGFzdFNlbmRVUkwoaXRlci0+c291cmNlVVJMKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlt
cGwoKS0+c2V0TGFzdFNlbmRMaW5lTnVtYmVyKDApOworICAgICAgICBpbXBsKCktPnNldExhc3RT
ZW5kVVJMKFN0cmluZygpKTsKKyAgICB9CiAKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwo=
</data>
<flag name="review"
          id="226138"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204830</attachid>
            <date>2013-06-17 09:49:41 -0700</date>
            <delta_ts>2013-10-07 13:41:46 -0700</delta_ts>
            <desc>C++ idiomatic patch</desc>
            <filename>bug-117390c.patch</filename>
            <type>text/plain</type>
            <size>74600</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNjQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxMy0wNi0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Um9sbGluZyByMTUxNDU2LCByMTUxNDIwIGJhY2sgaW4gd2l0aCBzb21lIGZpeGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzkwLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBjaGFuZ2VzIG9u
IHRvcCBvZiB0aGUgb2xkIHBhdGNoOgorICAgICAgICAtIFJlbmFtZWQgQ2FsbEZyYW1lOjpiZWdp
bkF0KCkgdG8gQ2FsbEZyYW1lOjpmaW5kKCksIGFuZCBhbHNvIHByb3ZpZGUKKyAgICAgICAgICBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIENhbGxGcmFtZSogdG8gc2VhcmNoIGZvci4KKworICAgICAg
ICAgIFRoZXJlIGFyZSAzIHR5cGVzIG9mIHVzZXJzIG9mIHRoZSBTdGFja0l0ZXJhdG9yLiBXZSBu
ZWVkIHRvIGNhdGVyCisgICAgICAgICAgdG8gZWFjaCBvZiB0aGVzZSBhcyBmb2xsb3dzOgorCisg
ICAgICAgICAgMS4gVXNlcnMgd2hvIHdhbnQgYSBzdGFjayB0cmFjZQorICAgICAgICAgICAgIC0g
SGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHZtLnRvcENhbGxGcmFtZS4KKyAg
ICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUgU3RhY2tJdGVyYXRvciBhcyBmb2xs
b3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gdm0udG9wQ2FsbEZy
YW1lLT5iZWdpbigpOworCisgICAgICAgICAgMi4gVXNlcnMgd2hvIHdhbnQgdGhlaXIgY2FsbGVy
IGZyYW1lCisgICAgICAgICAgICAgLSBIZXJlIHdlIG5lZWQgdG8gc3RhcnQgaXRlcmF0aW5nIGZy
b20gdGhlIHNwZWNpZmllZCBDYWxsRnJhbWUqLgorICAgICAgICAgICAgIC0gVG8gZG8gdGhpcywg
Y3JlYXRlIHRoZSBTdGFja0l0ZXJhdG9yIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICBT
dGFja0l0ZXJhdG9yIGl0ZXIgPSBjYWxsRnJhbWUtPmJlZ2luKCk7CisKKyAgICAgICAgICAzLiBV
c2VycyB3aG8gd2FudCB0aGUgZnJhbWUgb2YgYSBzcGVjaWZpYyBKU0Z1bmN0aW9uIG9iamVjdAor
ICAgICAgICAgICAgIC0gSGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHZtLnRv
cENhbGxGcmFtZSBhbmQgZmluZAorICAgICAgICAgICAgICAgdGhlIGZyYW1lIHRoYXQgaGFzIGEg
Y2FsbGVlIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgSlNGdW5jdGlvbiouCisgICAgICAgICAgICAg
LSBUbyBkbyB0aGlzLCBjcmVhdGUgdGhlIFN0YWNrSXRlcmF0b3IgYXMgZm9sbG93czoKKyAgICAg
ICAgICAgICAgICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmZpbmQoZnVuY3Rpb25PYmop
OworCisgICAgICAgICAgVGhlIHByZXZpb3VzIGxheW91dCB0ZXN0IGZhaWx1cmVzIHdlcmUgZHVl
IHRvIGNvbmZsYXRpb24gb2YgY2FzZSAxCisgICAgICAgICAgYW5kIDIuIFRoZXkgYXJlIG5vdyBo
YW5kbGVkIGFwcHJvcHJpYXRlbHkuCisKKyAgICAgICAgLSBGaXhlZCBhIHByZS1leGlzdGluZyBs
YXlvdXQgdGVzdCBjcmFzaCBpbgorICAgICAgICAgIGluc3BlY3Rvci9wcm9maWxlci9jcHUtcHJv
ZmlsZXItYWdlbnQtY3Jhc2gtb24tc3RhcnQuaHRtbC4KKworICAgICAgICAqIEFQSS9KU0NvbnRl
eHRSZWYuY3BwOgorICAgICAgICAoSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKToKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OnNldElubGluZUNhbGxGcmFtZSk6CisgICAgICAgIChFeGVj
U3RhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lOjpiZWdpbik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Zmlu
ZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6ZW5kKToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkdW1wUmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZSk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRl
YnVnKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSW50
ZXJwcmV0ZXIpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6U3RhY2tJdGVyYXRvcik6CisgICAgICAg
IChKU0M6OlN0YWNrSXRlcmF0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFj
a0l0ZXJhdG9yOjpmaW5kKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNv
ZGVUeXBlKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFt
ZSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpzb3VyY2VVUkwpOgorICAg
ICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6dG9TdHJpbmcpOgorICAgICAgICAoSlND
OjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpT
dGFja0l0ZXJhdG9yOjpGcmFtZTo6bGluZSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6
OkZyYW1lOjpjb2x1bW4pOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6YXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OnJldHJpZXZlRXhw
cmVzc2lvbkluZm8pOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6bG9naWNh
bEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmxvZ2ljYWxDYWxs
ZXJGcmFtZSk6CisgICAgICAgIChKU0M6OmppdFR5cGVOYW1lKToKKyAgICAgICAgKEpTQzo6cHJp
bnRJbmRlbnRzKToKKyAgICAgICAgKEpTQzo6cHJpbnRpZik6CisgICAgICAgIChKU0M6OlN0YWNr
SXRlcmF0b3I6OkZyYW1lOjpwcmludCk6CisgICAgICAgIChkZWJ1Z1ByaW50Q2FsbEZyYW1lKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAo
U3RhY2tJdGVyYXRvcjo6RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFt
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmlzSlNGcmFt
ZSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjYWxsRnJhbWUpOgorICAg
ICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3JQcml2YXRlLmg6IEFkZGVkLgorICAgICAg
ICAoU3RhY2tJdGVyYXRvcik6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6Om9wZXJhdG9y
Kik6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAo
SlNDOjpTdGFja0l0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVy
YXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6Om9wZXJhdG9y
KyspOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjplbmQpOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgIChmdW5jdGlvbkpTQ1N0YWNrKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9m
aWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFy
ZW50Rm9yQ29uc29sZVN0YXJ0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlTm9kZS5oOgor
ICAgICAgICAoUHJvZmlsZU5vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OnJldHJpZXZlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNGdW5j
dGlvbjo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAgKEpTQzo6c2tpcE92ZXJCb3VuZEZ1bmN0
aW9ucyk6CisgICAgICAgIChKU0M6OnJldHJpZXZlQ2FsbGVyRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9u
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpk
ZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b0dldHRlcik6CisgICAgICAg
IChKU0M6Omdsb2JhbEZ1bmNQcm90b1NldHRlcik6CisgICAgICAgICogcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90
eXBlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorCiAyMDEzLTA2LTE1ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29uY3VycmVudCBKSVQg
c2hvdWxkbid0IHRyeSB0byByZWNvbXB1dGUgdGhlIENvZGVCbG9ja0hhc2ggYXMgcGFydCBvZiBk
ZWJ1ZyBkdW1wcywgc2luY2UgZG9pbmcgc28gbWF5IGZhaWwgaWYgZGVhbGluZyB3aXRoIGEgQ2Fj
aGVkU2NyaXB0IHRoYXQgZG9lc24ndCBoYXZlIGl0cyBzY3JpcHQgc3RyaW5nIGhhbmR5CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTE1NjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2
Myw2ICsxNjMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAKICAgICBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKICAgICBpbnRl
cnByZXRlci9KU1N0YWNrLmNwcAorICAgIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCiAg
ICAgaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwCiAKICAgICBqaXQvQ2xvc3VyZUNhbGxTdHVi
Um91dGluZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCShyZXZpc2lvbiAxNTE1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNDMzLDYgKzQzMyw5IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0
YWNrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrSW5saW5l
cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNSW5zcGVjdG9yLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNSW5zcGVjdG9yLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVByZWZpeC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTE1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHAgXAogICAgIGludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcCBcCiAgICAgaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAgXAorICAgIGludGVycHJl
dGVyL1N0YWNrSXRlcmF0b3IuY3BwIFwKICAgICBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5j
cHAgXAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIFwKICAgICBq
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDE1MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIw
MDYgQmpvZXJuIEdyYWYgKGJqb2Vybi5ncmFmQGdtYWlsLmNvbSkKICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKICNpbmNsdWRlIDxtYXRo
Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTMyNiwxNSArMzI3LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKICAgICBTdHJpbmdCdWlsZGVyIHRyYWNlOwog
ICAgIHRyYWNlLmFwcGVuZExpdGVyYWwoIi0tPiBTdGFjayB0cmFjZTpcbiIpOwogCi0gICAgVmVj
dG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0
U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKKyAgICBDYWxsRnJhbWUqIGZyYW1lID0gZXhlYy0+dm0o
KS50b3BDYWxsRnJhbWU7CiAgICAgaW50IGkgPSAwOwotCi0gICAgZm9yIChWZWN0b3I8U3RhY2tG
cmFtZT46Oml0ZXJhdG9yIGl0ZXIgPSBzdGFja1RyYWNlLmJlZ2luKCk7IGl0ZXIgPCBzdGFja1Ry
YWNlLmVuZCgpOyBpdGVyKyspIHsKLSAgICAgICAgU3RhY2tGcmFtZSBsZXZlbCA9ICppdGVyOwot
ICAgICAgICB0cmFjZS5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiAgICAlaSAgICVzXG4iLCBpLCBs
ZXZlbC50b1N0cmluZyhleGVjKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIGkrKzsKLSAgICB9
CisgICAgZm9yIChTdGFja0l0ZXJhdG9yIGl0ZXIgPSBmcmFtZS0+YmVnaW4oKTsgaXRlciAhPSBm
cmFtZS0+ZW5kKCk7ICsraXRlciwgKytpKQorICAgICAgICB0cmFjZS5hcHBlbmQoU3RyaW5nOjpm
b3JtYXQoIiAgICAlaSAgICVzXG4iLCBpLCBpdGVyLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
KTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgdHJhY2UudG9TdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24g
MTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTMgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAj
aW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0Nh
bGxGcmFtZS5oPgotI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CiAjaW5jbHVk
ZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RhY2tJ
dGVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTIwNSwzNiArMjA1LDMwIEBAIEpTU3RyaW5n
UmVmIEpTQ29udGV4dENyZWF0ZUJhY2t0cmFjZShKU0MKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0
b0pTKGN0eCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGV4ZWMt
PmludGVycHJldGVyKCktPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgbWF4U3RhY2tTaXplKTsK
KyAgICBDYWxsRnJhbWUqIGZyYW1lID0gZXhlYy0+dm0oKS50b3BDYWxsRnJhbWU7CisgICAgc2l6
ZV90IGkgPSAwOworICAgIEFTU0VSVChtYXhTdGFja1NpemUpOworICAgIGZvciAoU3RhY2tJdGVy
YXRvciBpdGVyID0gZnJhbWUtPmJlZ2luKCk7IGl0ZXIgIT0gZnJhbWUtPmVuZCgpICYmIG1heFN0
YWNrU2l6ZS0tOyArK2l0ZXIsICsraSkgeworICAgICAgICBKU09iamVjdCogY2FsbGVlID0gaXRl
ci0+Y2FsbGVlKCk7CisgICAgICAgIC8vIElmIGNhbGxlZSBpcyB1bmtub3duLCBidXQgd2UndmUg
bm90IGFkZGVkIGFueSBmcmFtZSB5ZXQsIHdlIHNob3VsZAorICAgICAgICAvLyBzdGlsbCBhZGQg
dGhlIGZyYW1lLCBiZWNhdXNlIHNvbWV0aGluZyBjYWxsZWQgdXMsIGFuZCBnYXZlIHVzIGFyZ3Vt
ZW50cy4KKyAgICAgICAgaWYgKCFjYWxsZWUgJiYgaSkKKyAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgIFN0cmluZyB1cmxTdHJpbmc7Ci0gICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWU7Ci0gICAg
ICAgIFN0YWNrRnJhbWUmIGZyYW1lID0gc3RhY2tUcmFjZVtpXTsKLSAgICAgICAgSlNWYWx1ZSBm
dW5jdGlvbiA9IGZyYW1lLmNhbGxlZS5nZXQoKTsKLSAgICAgICAgaWYgKGZyYW1lLmNhbGxlZSkK
LSAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSA9IGZyYW1lLmZyaWVuZGx5RnVuY3Rpb25OYW1lKGV4
ZWMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIENhbGxlciBpcyB1bmtub3duLCBi
dXQgaWYgZnJhbWUgaXMgZW1wdHkgd2Ugc2hvdWxkIHN0aWxsIGFkZCB0aGUgZnJhbWUsIGJlY2F1
c2UKLSAgICAgICAgICAgIC8vIHNvbWV0aGluZyBjYWxsZWQgdXMsIGFuZCBnYXZlIHVzIGFyZ3Vt
ZW50cy4KLSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSBmcmFtZS5saW5lKCk7CiAgICAgICAg
IGlmICghYnVpbGRlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4n
KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyMnKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRO
dW1iZXIoaSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHN0YWNrVHJhY2VbaV0uZnJpZW5kbHlGdW5jdGlvbk5hbWUoZXhlYykpOworICAgICAg
ICBidWlsZGVyLmFwcGVuZChpdGVyLT5mdW5jdGlvbk5hbWUoKSk7CiAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiKCkgYXQgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YWNrVHJh
Y2VbaV0uZnJpZW5kbHlTb3VyY2VVUkwoKSk7Ci0gICAgICAgIGlmIChmcmFtZS5jb2RlVHlwZSAh
PSBTdGFja0ZyYW1lTmF0aXZlQ29kZSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVyLT5z
b3VyY2VVUkwoKSk7CisgICAgICAgIGlmIChpdGVyLT5pc0pTRnJhbWUoKSkgewogICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJzonKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVy
KGxpbmVOdW1iZXIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoaXRlci0+bGlu
ZSgpKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWZ1bmN0aW9uKQorCisgICAgICAgIGlmICgh
Y2FsbGVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNp
b24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI0MjIsNiArMjQyMiwxOCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlwuLlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9yLmNwcCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJwcmV0ZXJc
U3RhY2tJdGVyYXRvci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxpbnRlcnByZXRlclxTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbnRlcnByZXRl
clxWTUluc3BlY3Rvci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTE1NjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNiArMjIyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGludGVycHJldGVyXENhbGxGcmFtZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caW50ZXJwcmV0ZXJcSW50ZXJwcmV0ZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2suY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrSXRlcmF0b3IuY3BwIiAvPg0KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9yLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
IiAvPg0KQEAgLTU1NCw2ICs1NTUsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50
ZXJwcmV0ZXJcSlNTdGFjay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVy
cHJldGVyXEpTU3RhY2tJbmxpbmVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aW50ZXJwcmV0ZXJcUmVnaXN0ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxp
bnRlcnByZXRlclxTdGFja0l0ZXJhdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvclByaXZhdGUuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENvbXBhY3RKSVRDb2RlTWFwLmgiIC8+DQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2
aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsNiArMjg1LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpT
U3RhY2suY3BwIj4NCiAgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQogICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNr
SXRlcmF0b3IuY3BwIj4NCisgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFZN
SW5zcGVjdG9yLmNwcCI+DQogICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KICAg
ICA8L0NsQ29tcGlsZT4NCkBAIC0xMjExLDYgKzEyMTQsMTIgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVyLmgiPg0KICAgICAgIDxGaWx0ZXI+aW50ZXJw
cmV0ZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tJdGVyYXRvci5oIj4NCisgICAgICA8RmlsdGVyPmludGVy
cHJldGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrSXRlcmF0b3JQcml2YXRlLmgiPg0KKyAgICAgIDxGaWx0
ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0b3IuaCI+DQogICAgICAgPEZpbHRl
cj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTk1Myw2ICs5NTMsMTAgQEAKIAkJRkUyNDU5NjIxNzYwMUQ1ODAwNzRGQ0UwIC8q
IENhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjQ1OTYxMTc2MDFENTgwMDc0RkNFMCAvKiBDYWxsRnJhbWVJbmxpbmVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0QTMz
MUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFEMTVCRDJFMDcwMDZGNTRGMyAvKiBW
TUluc3BlY3Rvci5jcHAgKi87IH07CiAJCUZFNEEzMzIwMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUlu
c3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU0QTMzMUUxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU1MjZCRDUxNzY2M0E4NDAwQjEy
MERDIC8qIFN0YWNrSXRlcmF0b3JQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTUyNkJENDE3NjYzQTg0MDBCMTIwREMgLyogU3RhY2tJdGVy
YXRvclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRTY3REI5MzE3NTE5QjRBMDA2QTgxNEYgLyogSlNTdGFja0lubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjdEQjkwMTc1MTlC
NEEwMDZBODE0RiAvKiBKU1N0YWNrSW5saW5lcy5oICovOyB9OworCQlGRTY3REI5NDE3NTE5QjRB
MDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY3REI5MTE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVy
YXRvci5jcHAgKi87IH07CisJCUZFNjdEQjk1MTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY3
REI5MjE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFOTQwMzIyMTc0NDQyNTkwMDQ3Q0Y2
RSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU5NDAzMjExNzQ0NDI1OTAwNDdDRjZFIC8qIEpJVFN0dWJzWDg2Q29t
bW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkVDRTc0NTcxNzQ1NDU2NTAwRkY5MzAwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQ0U3NDU2MTc0
NTQ1NjUwMEZGOTMwMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgKi87IH07CiAJCUZF
RDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMjg3QjExNUVDOUE1NzAwREE4MTYxIC8q
IExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTE5ODksNiArMTk5MywxMCBAQAogCQlGRTI0NTk2MTE3NjAxRDU4MDA3NEZDRTAg
LyogQ2FsbEZyYW1lSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWxsRnJhbWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEEzMzFE
MTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUluc3BlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRTUyNkJENDE3NjYzQTg0MDBCMTIwREMgLyogU3RhY2tJdGVyYXRvclBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tJdGVyYXRvclBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2N0RCOTAxNzUxOUI0QTAw
NkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RhY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjdE
QjkxMTc1MTlCNEEwMDZBODE0RiAvKiBTdGFja0l0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRTY3REI5MjE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja0l0ZXJhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTQwMzIxMTc0NDQyNTkwMDQ3Q0Y2RSAvKiBKSVRT
dHVic1g4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHVi
c1g4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUNFNzQ1NjE3NDU0
NTY1MDBGRjkzMDAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJ
bnRPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRPcGNvZGUu
aDsgcGF0aCA9IGxsaW50L0xMSW50T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMjc5LDcgKzIyODcsMTEgQEAKIAkJCQkxNDI5RDc3QjBFRDIwRDczMDBCODk2MTkgLyog
SW50ZXJwcmV0ZXIuaCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2MTkgLyogSlNTdGFj
ay5jcHAgKi8sCiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8qIEpTU3RhY2suaCAqLywK
KwkJCQlGRTY3REI5MDE3NTE5QjRBMDA2QTgxNEYgLyogSlNTdGFja0lubGluZXMuaCAqLywKIAkJ
CQkxNDlCMjRGRjBEOEFGNkQxMDA5Q0I4QzcgLyogUmVnaXN0ZXIuaCAqLywKKwkJCQlGRTY3REI5
MTE3NTE5QjRBMDA2QTgxNEYgLyogU3RhY2tJdGVyYXRvci5jcHAgKi8sCisJCQkJRkU2N0RCOTIx
NzUxOUI0QTAwNkE4MTRGIC8qIFN0YWNrSXRlcmF0b3IuaCAqLywKKwkJCQlGRTUyNkJENDE3NjYz
QTg0MDBCMTIwREMgLyogU3RhY2tJdGVyYXRvclByaXZhdGUuaCAqLywKIAkJCQlGRTRBMzMxRDE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovLAogCQkJCUZFNEEzMzFFMTVCRDJF
MDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovLAogCQkJKTsKQEAgLTMyNjAsNiArMzI3Miw4
IEBACiAJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJh
eVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2N0RCOTUxNzUxOUI0QTAwNkE4MTRG
IC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNTI2QkQ1MTc2NjNBODQw
MEIxMjBEQyAvKiBTdGFja0l0ZXJhdG9yUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVG
NjgzNUYxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNdjcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZFMjQ1OTYyMTc2MDFENTgwMDc0RkNFMCAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUY2ODM2MDE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNYODZfNjQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzY5Myw2ICszNzA3LDcgQEAKIAkJCQkwRkQ4MkU1NDE0MURB
RUVFMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYw
NERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYgLyogU3RhdGljUHJvcGVydHlBbmFs
eXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2N0RCOTMxNzUxOUI0QTAwNkE4MTRGIC8qIEpT
U3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1
QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY2
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC00MjI2LDYgKzQyNDEsNyBAQAogCQkJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAv
KiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2REI2NDY0MEY5
NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkU2N0RCOTQxNzUxOUI0QTAwNkE4MTRGIC8qIFN0
YWNrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1ODUxNjc1NDgwRjAwRjhB
QjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0NGMTc0MkQ3RDgw
MDdCM0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBB
MzExNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNw
cAkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDk4ICs2Nyw2IEBAIHZvaWQgQ2Fs
bEZyYW1lOjpzZXRDdXJyZW50VlBDKEluc3RydWN0aW8KICNlbmRpZgogICAgIAogI2lmIEVOQUJM
RShERkdfSklUKQotQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnRydWVDYWxsRnJhbWUoKQotewotICAg
IC8vIEFtIEkgYW4gaW5saW5lIGNhbGwgZnJhbWU/IElmIHNvLCB3ZSdyZSBkb25lLgotICAgIGlm
IChpc0lubGluZWRGcmFtZSgpKQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAKLSAgICAvLyBJ
ZiBJIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrLCB0aGVuIEknbSBub3QgREZHIGNvZGUsIHNvIEkn
bSB0aGUgdHJ1ZSBjYWxsIGZyYW1lLgotICAgIENvZGVCbG9jayogbWFjaGluZUNvZGVCbG9jayA9
IGNvZGVCbG9jaygpOwotICAgIGlmICghbWFjaGluZUNvZGVCbG9jaykKLSAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgCi0gICAgLy8gSWYgdGhlIGNvZGUgYmxvY2sgZG9lcyBub3QgaGF2ZSBhbnkg
Y29kZSBvcmlnaW5zLCB0aGVuIHRoZXJlIHdhcyBubyBpbmxpbmluZywgc28KLSAgICAvLyBJJ20g
ZG9uZS4KLSAgICBpZiAoIW1hY2hpbmVDb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpCi0gICAg
ICAgIHJldHVybiB0aGlzOwotICAgIAotICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIENvZGVP
cmlnaW4uIElmIHdlIGRvbid0IGhhdmUgYSBwYyBzZXQgdGhlbiB0aGUgb25seSB3YXkKLSAgICAv
LyB0aGF0IHRoaXMgbWFrZXMgc2Vuc2UgaXMgaWYgdGhlIENvZGVPcmlnaW4gaW5kZXggd2FzIHNl
dCBpbiB0aGUgY2FsbCBmcmFtZS4KLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgdW5z
aWduZWQgaW5kZXggPSBsb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7Ci0gICAgQVNTRVJUKG1h
Y2hpbmVDb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKTsKLSAgICBpZiAoIW1hY2hp
bmVDb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKSB7Ci0gICAgICAgIC8vIFNlZSBh
Ym92ZS4gSW4gcmVsZWFzZSBidWlsZHMsIHdlIHRyeSB0byBwcm90ZWN0IG91cnNlbHZlcyBmcm9t
IGNyYXNoaW5nIGV2ZW4KLSAgICAgICAgLy8gdGhvdWdoIHN0YWNrIHdhbGtpbmcgd2lsbCBiZSBn
b29mZWQgdXAuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjb2RlT3JpZ2luID0gbWFj
aGluZUNvZGVCbG9jay0+Y29kZU9yaWdpbihpbmRleCk7Ci0KLSAgICBpZiAoIWNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4gdGhpczsgLy8gTm90IGN1cnJlbnRseSBp
biBpbmxpbmVkIGNvZGUuCi0KLSAgICBDb2RlT3JpZ2luIGlubmVyTW9zdENvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luOwotCi0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7KSB7Ci0gICAgICAg
IElubGluZUNhbGxGcmFtZSogbmV4dElubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgCi0gICAgICAgIENhbGxGcmFtZSogaW5s
aW5lZENhbGxlciA9IHRoaXMgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAg
ICAKLSAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlQXNGdW5jdGlvbiA9IGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlLmdldCgpOwotICAgICAgICAKLSAgICAgICAgLy8gRmlsbCBpbiB0aGUgaW5saW5l
ZENhbGxlcgotICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRDb2RlQmxvY2soaW5saW5lQ2FsbEZy
YW1lLT5iYXNlbGluZUNvZGVCbG9jaygpKTsKLSAgICAgICAgaWYgKGNhbGxlZUFzRnVuY3Rpb24p
Ci0gICAgICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRTY29wZShjYWxsZWVBc0Z1bmN0aW9uLT5z
Y29wZSgpKTsKLSAgICAgICAgaWYgKG5leHRJbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBp
bmxpbmVkQ2FsbGVyLT5zZXRDYWxsZXJGcmFtZSh0aGlzICsgbmV4dElubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbmxpbmVkQ2FsbGVyLT5z
ZXRDYWxsZXJGcmFtZSh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGlubGluZWRDYWxsZXItPnNl
dElubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBpbmxpbmVkQ2FsbGVy
LT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkpOwotICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRMb2NhdGlvbkFzQnl0ZWNvZGVP
ZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaW5saW5lZENhbGxlci0+
c2V0SXNJbmxpbmVkRnJhbWUoKTsKLSAgICAgICAgaWYgKGNhbGxlZUFzRnVuY3Rpb24pCi0gICAg
ICAgICAgICBpbmxpbmVkQ2FsbGVyLT5zZXRDYWxsZWUoY2FsbGVlQXNGdW5jdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7Ci0gICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IG5leHRJbmxpbmVDYWxsRnJhbWU7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiB0aGlzICsgaW5uZXJNb3N0Q29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0OwotfQotICAgICAgICAKLUNhbGxGcmFtZSogQ2FsbEZyYW1lOjp0cnVlQ2FsbGVy
RnJhbWUoKQotewotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSB0aGlzLT5jYWxsZXJGcmFt
ZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpOwotICAgIGlmICghY29kZUJsb2NrKCkpCi0g
ICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsKLQotICAgIC8vIHRoaXMgLT4gVGhlIGNhbGxlZTsg
dGhpcyBpcyBlaXRoZXIgYW4gaW5saW5lZCBjYWxsZWUgaW4gd2hpY2ggY2FzZSBpdCBhbHJlYWR5
IGhhcwotICAgIC8vICAgIGEgcG9pbnRlciB0byB0aGUgdHJ1ZSBjYWxsZXIuIE90aGVyd2lzZSBp
dCBjb250YWlucyBjdXJyZW50IFBDIGluIHRoZSBtYWNoaW5lCi0gICAgLy8gICAgY2FsbGVyLgot
ICAgIC8vCi0gICAgLy8gbWFjaGluZUNhbGxlciAtPiBUaGUgY2FsbGVyIGFjY29yZGluZyB0byB0
aGUgbWFjaGluZSwgd2hpY2ggbWF5IGJlIHplcm8gb3IKLSAgICAvLyAgICBtb3JlIGZyYW1lcyBh
Ym92ZSB0aGUgdHJ1ZSBjYWxsZXIgZHVlIHRvIGlubGluaW5nLgotCi0gICAgLy8gQW0gSSBhbiBp
bmxpbmUgY2FsbCBmcmFtZT8gSWYgc28sIHdlJ3JlIGRvbmUuCi0gICAgaWYgKGlzSW5saW5lZEZy
YW1lKCkpCi0gICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsKLSAgICAKLSAgICAvLyBJIGFtIGEg
bWFjaGluZSBjYWxsIGZyYW1lLCBzbyB0aGUgcXVlc3Rpb24gaXM6IGlzIG15IGNhbGxlciBhIG1h
Y2hpbmUgY2FsbCBmcmFtZQotICAgIC8vIHRoYXQgaGFzIGlubGluZXMgb3IgYSBtYWNoaW5lIGNh
bGwgZnJhbWUgdGhhdCBkb2Vzbid0PwotICAgIGlmICghY2FsbGVyRnJhbWUpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgaWYgKCFjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCkpCi0gICAgICAgIHJl
dHVybiBjYWxsZXJGcmFtZTsKLSAgICBBU1NFUlQoIWNhbGxlckZyYW1lLT5pc0lubGluZWRGcmFt
ZSgpKTsKLSAgICAKLSAgICByZXR1cm4gY2FsbGVyRnJhbWUtPnRydWVDYWxsRnJhbWUoKS0+cmVt
b3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLX0KLQogdW5zaWduZWQgQ2FsbEZyYW1lOjpieXRlY29k
ZU9mZnNldEZyb21Db2RlT3JpZ2luSW5kZXgoKQogewogICAgIEFTU0VSVChoYXNMb2NhdGlvbkFz
Q29kZU9yaWdpbkluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvclBy
aXZhdGUuaCIKIAogbmFtZXNwYWNlIEpTQyAgewogCkBAIC0yNzMsMjEgKzI3NCwxMyBAQCBuYW1l
c3BhY2UgSlNDICB7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICB2b2lk
IHNldElubGluZUNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkgeyBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0pTU3RhY2s6OlJldHVyblBDXSA9IGlubGluZUNh
bGxGcmFtZTsgfQotCi0gICAgICAgIC8vIENhbGwgdGhpcyB0byBnZXQgdGhlIHNlbWFudGljYWxs
eSBjb3JyZWN0IEpTIENhbGxGcmFtZSogZm9yIHRoZQotICAgICAgICAvLyBjdXJyZW50bHkgZXhl
Y3V0aW5nIGZ1bmN0aW9uLgotICAgICAgICBDYWxsRnJhbWUqIHRydWVDYWxsRnJhbWUoKTsKLQot
ICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZ2V0IHRoZSBzZW1hbnRpY2FsbHkgY29ycmVjdCBKUyBD
YWxsRnJhbWUqIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgLy8gdG8gdGhlIGNhbGxlci4gVGhpcyBy
ZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5saW5pbmcgYW5kIHRoZQotICAgICAgICAvLyBI
b3N0Q2FsbEZyYW1lRmxhZyBzdHVmZi4KLSAgICAgICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbGVyRnJh
bWUoKTsKLSNlbHNlCi0gICAgICAgIENhbGxGcmFtZSogdHJ1ZUNhbGxGcmFtZSgpIHsgcmV0dXJu
IHRoaXM7IH0KLSAgICAgICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbGVyRnJhbWUoKSB7IHJldHVybiBj
YWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpOyB9CiAjZW5kaWYKICAgICAg
ICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZU5vRmxhZ3MoKSB7IHJldHVybiBjYWxsZXJGcmFtZSgp
LT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpOyB9CiAKKyAgICAgICAgaW5saW5lIFN0YWNrSXRl
cmF0b3IgYmVnaW4oU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICAg
ICAgaW5saW5lIFN0YWNrSXRlcmF0b3IgZmluZChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9i
aiwgU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICAgICAgaW5saW5l
IFN0YWNrSXRlcmF0b3I6OkZyYW1lKiBlbmQoKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0
YXRpYyBjb25zdCBpbnRwdHJfdCBIb3N0Q2FsbEZyYW1lRmxhZyA9IDE7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgc190aGlzQXJndW1lbnRPZmZzZXQgPSAtMSAtIEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlclNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgJKHJldmlzaW9uIDE1MTU2NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OCw2ICsxNjgsMjUgQEAgaW5saW5lIHVuc2lnbmVkIENhbGxGcmFtZTo6bG9jYXRp
b25Bc0NvZAogICAgIHJldHVybiBMb2NhdGlvbjo6ZGVjb2RlKGxvY2F0aW9uQXNSYXdCaXRzKCkp
OwogfQogCitpbmxpbmUgU3RhY2tJdGVyYXRvciBDYWxsRnJhbWU6OmJlZ2luKFN0YWNrSXRlcmF0
b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAgICBBU1NFUlQodGhpcyk7CisgICAgcmV0dXJu
IFN0YWNrSXRlcmF0b3IodGhpcywgZmlsdGVyKTsKK30KKworaW5saW5lIFN0YWNrSXRlcmF0b3Ig
Q2FsbEZyYW1lOjpmaW5kKEpTRnVuY3Rpb24qIGNhbGxlZUZ1bmN0aW9uT2JqLCBTdGFja0l0ZXJh
dG9yOjpGcmFtZUZpbHRlciBmaWx0ZXIpCit7CisgICAgQVNTRVJUKHRoaXMpOworICAgIFN0YWNr
SXRlcmF0b3IgaXRlciA9IFN0YWNrSXRlcmF0b3IodGhpcywgZmlsdGVyKTsKKyAgICBpdGVyLmZp
bmQoY2FsbGVlRnVuY3Rpb25PYmopOworICAgIHJldHVybiBpdGVyOworfQorCitpbmxpbmUgU3Rh
Y2tJdGVyYXRvcjo6RnJhbWUqIENhbGxGcmFtZTo6ZW5kKCkKK3sKKyAgICByZXR1cm4gU3RhY2tJ
dGVyYXRvcjo6ZW5kKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQ2Fs
bEZyYW1lSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE1MTU2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJS
ZWdpc3Rlci5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgIlN0YWNrSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0
cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTIwMCw4ICsyMDEsNiBAQCBJ
bnRlcnByZXRlcjo6U3RhY2tQb2xpY3k6OlN0YWNrUG9saWN5KEluCiB9CiAKIAotc3RhdGljIENh
bGxGcmFtZSogZ2V0Q2FsbGVySW5mbyhWTSosIENhbGxGcmFtZSosIHVuc2lnbmVkJiBieXRlY29k
ZU9mZnNldCwgQ29kZUJsb2NrKiYgY2FsbGVyT3V0KTsKLQogSlNWYWx1ZSBldmFsKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewogICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpCkBA
IC00MTAsMTMgKzQwOSwxMiBAQCB2b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxG
cmFtCiAgICAgaWYgKHBjLmhhc0pJVFJldHVybkFkZHJlc3MoKSkKICAgICAgICAgZGF0YUxvZ0Yo
IltSZXR1cm5KSVRQQ10gICAgICAgICAgICAgIHwgJTEwcCB8ICVwIFxuIiwgaXQsIHBjLmppdFJl
dHVybkFkZHJlc3MoKS52YWx1ZSgpKTsKICNlbmRpZgotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gMDsKLSAgICBpbnQgbGluZSA9IDA7Ci0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxv
Y2sgPSAwOwotICAgIGdldENhbGxlckluZm8oJmNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLCBi
eXRlY29kZU9mZnNldCwgY2FsbGVyQ29kZUJsb2NrKTsKLSAgICBsaW5lID0gY2FsbGVyQ29kZUJs
b2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgIGRh
dGFMb2dGKCJbUmV0dXJuVlBDXSAgICAgICAgICAgICAgICB8ICUxMHAgfCAlZCAobGluZSAlZClc
biIsIGl0LCBieXRlY29kZU9mZnNldCwgbGluZSk7Ci0gICAgKytpdDsKKyAgICBTdGFja0l0ZXJh
dG9yIGl0ZXIgPSBjYWxsRnJhbWUtPmJlZ2luKCk7CisgICAgKytpdGVyOworICAgIGlmIChpdGVy
ICE9IGNhbGxGcmFtZS0+ZW5kKCkpIHsKKyAgICAgICAgZGF0YUxvZ0YoIltSZXR1cm5WUENdICAg
ICAgICAgICAgICAgIHwgJTEwcCB8ICVkIChsaW5lICVkKVxuIiwgaXQsIGl0ZXItPmJ5dGVjb2Rl
T2Zmc2V0KCksIGl0ZXItPmxpbmUoKSk7CisgICAgICAgICsraXQ7CisgICAgfQogICAgIGRhdGFM
b2dGKCJbQ29kZUJsb2NrXSAgICAgICAgICAgICAgICB8ICUxMHAgfCAlcCBcbiIsIGl0LCBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpKTsKICAgICArK2l0OwogICAgIGRhdGFMb2dGKCItLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLVxuIik7CkBAIC00NjUsOCArNDYzLDEwIEBAIGJvb2wgSW50ZXJwcmV0ZXI6Omlz
T3Bjb2RlKE9wY29kZSBvcGNvZGUKICNlbmRpZgogfQogCi1ORVZFUl9JTkxJTkUgYm9vbCBJbnRl
cnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSBl
eGNlcHRpb25WYWx1ZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJiBjb2Rl
QmxvY2spCitORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKFN0
YWNrSXRlcmF0b3ImIGl0ZXIsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUpCiB7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBpdGVyLT5jYWxsRnJhbWUoKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGl0ZXItPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb2xkQ29kZUJsb2NrID0g
Y29kZUJsb2NrOwogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogCkBA
IC00OTYsMTAgKzQ5Niw3IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRD
YWwKIAogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1l
KCk7CiAgICAgY2FsbEZyYW1lLT52bSgpLnRvcENhbGxGcmFtZSA9IGNhbGxlckZyYW1lOwotICAg
IGlmIChjYWxsZXJGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGNhbGxGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxGcmFtZS0+dm0oKSwg
Y2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gIWNhbGxlckZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpOwogfQogCiBz
dGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFcnJv
ckluc3RhbmNlKiBleGNlcHRpb24sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNTU0LDY4
ICs1NTEsNiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtCiAgICAg
ZXhjZXB0aW9uLT5wdXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNT
dHJpbmcodm0sIG1lc3NhZ2UpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGdldEJ5dGVjb2RlT2Zm
c2V0Rm9yQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIGNhbGxGcmFtZSA9
IGNhbGxGcmFtZS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsKLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKCFjb2RlQmxvY2spCi0g
ICAgICAgIHJldHVybiAwOwotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCi0g
ICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNvZGVPcmlnaW4oY2FsbEZyYW1lLT5sb2NhdGlvbkFz
Q29kZU9yaWdpbkluZGV4KCkpLmJ5dGVjb2RlSW5kZXg7Ci0jZW5kaWYKLSAgICByZXR1cm4gY2Fs
bEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMg
Q2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKFZNKiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVu
c2lnbmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYgY2FsbGVyKQotewotICAgIFVOVVNF
RF9QQVJBTSh2bSk7Ci0gICAgYnl0ZWNvZGVPZmZzZXQgPSAwOwotICAgIEFTU0VSVCghY2FsbEZy
YW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKLSAgICBDYWxsRnJhbWUqIHRydWVDYWxsZXJG
cmFtZSA9IGNhbGxGcmFtZS0+dHJ1ZUNhbGxlckZyYW1lKCk7Ci0gICAgQVNTRVJUKCF0cnVlQ2Fs
bGVyRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpOwotCi0gICAgaWYgKHRydWVDYWxsZXJG
cmFtZSA9PSBDYWxsRnJhbWU6Om5vQ2FsbGVyKCkgfHwgIXRydWVDYWxsZXJGcmFtZSB8fCAhdHJ1
ZUNhbGxlckZyYW1lLT5jb2RlQmxvY2soKSkgewotICAgICAgICBjYWxsZXIgPSAwOwotICAgICAg
ICByZXR1cm4gdHJ1ZUNhbGxlckZyYW1lOwotICAgIH0KLSAgICAKLSAgICBDb2RlQmxvY2sqIGNh
bGxlckNvZGVCbG9jayA9IHRydWVDYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0jaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKHRydWVDYWxsZXJGcmFtZS0+aGFzTG9jYXRpb25Bc0NvZGVPcmln
aW5JbmRleCgpKQotICAgICAgICBieXRlY29kZU9mZnNldCA9IHRydWVDYWxsZXJGcmFtZS0+Ynl0
ZWNvZGVPZmZzZXRGcm9tQ29kZU9yaWdpbkluZGV4KCk7Ci0gICAgZWxzZQotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQotICAgICAgICBieXRlY29kZU9mZnNldCA9IHRydWVDYWxsZXJGcmFtZS0+
bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7Ci0KLSAgICBjYWxsZXIgPSBjYWxsZXJDb2RlQmxv
Y2s7Ci0gICAgcmV0dXJuIHRydWVDYWxsZXJGcmFtZTsKLX0KLQotc3RhdGljIEFMV0FZU19JTkxJ
TkUgY29uc3QgU3RyaW5nIGdldFNvdXJjZVVSTEZyb21DYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCi17Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkp
OwotICAgIHJldHVybiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKS0+
c291cmNlVVJMKCk7Ci19Ci0KLXN0YXRpYyBTdGFja0ZyYW1lQ29kZVR5cGUgZ2V0U3RhY2tGcmFt
ZUNvZGVUeXBlKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIEFTU0VSVCghY2FsbEZyYW1l
LT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsKLQotICAgIHN3aXRjaCAoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+Y29kZVR5cGUoKSkgewotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIHJldHVy
biBTdGFja0ZyYW1lRXZhbENvZGU7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIHJl
dHVybiBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOwotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICAg
ICAgcmV0dXJuIFN0YWNrRnJhbWVHbG9iYWxDb2RlOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdGFja0ZyYW1lR2xvYmFsQ29kZTsKLX0KLQog
dW5zaWduZWQgU3RhY2tGcmFtZTo6bGluZSgpCiB7CiAgICAgcmV0dXJuIGNvZGVCbG9jayA/IGNv
ZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSArIGxp
bmVPZmZzZXQgOiAwOwpAQCAtNjYyLDMzICs1OTcsMjcgQEAgdm9pZCBJbnRlcnByZXRlcjo6Z2V0
U3RhY2tUcmFjZShWZWN0b3I8UwogewogICAgIFZNJiB2bSA9IG1fdm07CiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWUtPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCk7
Ci0gICAgaWYgKCFjYWxsRnJhbWUgfHwgY2FsbEZyYW1lID09IENhbGxGcmFtZTo6bm9DYWxsZXIo
KSkgCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGdldEJ5
dGVjb2RlT2Zmc2V0Rm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbEZyYW1lID0gY2Fs
bEZyYW1lLT50cnVlQ2FsbEZyYW1lKCk7CiAgICAgaWYgKCFjYWxsRnJhbWUpCiAgICAgICAgIHJl
dHVybjsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CiAKLSAgICB3aGlsZSAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZSAhPSBDYWxsRnJhbWU6
Om5vQ2FsbGVyKCkgJiYgbWF4U3RhY2tTaXplLS0pIHsKLSAgICAgICAgU3RyaW5nIHNvdXJjZVVS
TDsKLSAgICAgICAgaWYgKGNhbGxlckNvZGVCbG9jaykgewotICAgICAgICAgICAgc291cmNlVVJM
ID0gZ2V0U291cmNlVVJMRnJvbUNhbGxGcmFtZShjYWxsRnJhbWUpOwotICAgICAgICAgICAgU3Rh
Y2tGcmFtZSBzKFN0cm9uZzxKU09iamVjdD4odm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCkpLAotICAg
ICAgICAgICAgICAgIGdldFN0YWNrRnJhbWVDb2RlVHlwZShjYWxsRnJhbWUpLAotICAgICAgICAg
ICAgICAgIFN0cm9uZzxFeGVjdXRhYmxlQmFzZT4odm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgICAgIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4o
dm0sIGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSksCi0gICAgICAgICAgICAg
ICAgY2FsbGVyQ29kZUJsb2NrLT5zb3VyY2UoKSwKLSAgICAgICAgICAgICAgICBjYWxsZXJDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8oKSwKLSAgICAgICAgICAgICAgICBjYWxs
ZXJDb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpLAotICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zm
c2V0LAotICAgICAgICAgICAgICAgIHNvdXJjZVVSTCk7CisgICAgU3RhY2tJdGVyYXRvciBpdGVy
ID0gY2FsbEZyYW1lLT5iZWdpbigpOworICAgIGZvciAoOyBpdGVyICE9IGNhbGxGcmFtZS0+ZW5k
KCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlcikgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGl0ZXItPmNvZGVCbG9jaygpOworICAgICAgICBpZiAoY29kZUJsb2NrKSB7CisgICAg
ICAgICAgICBTdGFja0ZyYW1lIHMoU3Ryb25nPEpTT2JqZWN0Pih2bSwgaXRlci0+Y2FsbGVlKCkp
LAorICAgICAgICAgICAgICAgIFN0YWNrRnJhbWVDb2RlVHlwZShpdGVyLT5jb2RlVHlwZSgpKSwK
KyAgICAgICAgICAgICAgICBTdHJvbmc8RXhlY3V0YWJsZUJhc2U+KHZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgICAgICAgICBTdHJvbmc8VW5saW5rZWRDb2RlQmxv
Y2s+KHZtLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpLAorICAgICAgICAgICAgICAg
IGNvZGVCbG9jay0+c291cmNlKCksCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKS0+bGluZU5vKCksCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5zb3VyY2VP
ZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBpdGVyLT5ieXRlY29kZU9mZnNldCgpLAorICAgICAg
ICAgICAgICAgIGl0ZXItPnNvdXJjZVVSTCgpKTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RhY2tGcmFtZSBzKFN0cm9uZzxK
U09iamVjdD4odm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCkpLCBTdGFja0ZyYW1lTmF0aXZlQ29kZSwg
U3Ryb25nPEV4ZWN1dGFibGVCYXNlPigpLCBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KCksIDAs
IDAsIDAsIDAsIFN0cmluZygpKTsKKyAgICAgICAgICAgIFN0YWNrRnJhbWUgcyhTdHJvbmc8SlNP
YmplY3Q+KHZtLCBpdGVyLT5jYWxsZWUoKSksIFN0YWNrRnJhbWVOYXRpdmVDb2RlLCBTdHJvbmc8
RXhlY3V0YWJsZUJhc2U+KCksIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4oKSwgMCwgMCwgMCwg
MCwgU3RyaW5nKCkpOwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocyk7CiAgICAgICAgIH0K
LSAgICAgICAgY2FsbEZyYW1lID0gZ2V0Q2FsbGVySW5mbygmdm0sIGNhbGxGcmFtZSwgYnl0ZWNv
ZGVPZmZzZXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgfQogfQogCkBAIC03NjQsMTIgKzY5Mywy
MSBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAKICAgICAvLyBD
YWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMg
YXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKLSAgICB3aGlsZSAo
aXNUZXJtaW5hdGlvbiB8fCAhKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7Ci0gICAgICAgIGlmICghdW53aW5kQ2FsbEZyYW1l
KGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGJ5dGVjb2RlT2Zmc2V0LCBjb2RlQmxvY2spKSB7
Ci0gICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT52
bSgpLmVuYWJsZWRQcm9maWxlcigpKQotICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNlcHRp
b25VbndpbmQoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Cisg
ICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIEFTU0VSVChjYWxsRnJhbWUgPT0gdm0u
dG9wQ2FsbEZyYW1lKTsKKyAgICBmb3IgKFN0YWNrSXRlcmF0b3IgaXRlciA9IGNhbGxGcmFtZS0+
YmVnaW4oKTsgaXRlciAhPSBjYWxsRnJhbWUtPmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgY2Fs
bEZyYW1lID0gaXRlci0+Y2FsbEZyYW1lKCk7CisgICAgICAgIGNvZGVCbG9jayA9IGl0ZXItPmNv
ZGVCbG9jaygpOworICAgICAgICBieXRlY29kZU9mZnNldCA9IGl0ZXItPmJ5dGVjb2RlT2Zmc2V0
KCk7CisKKyAgICAgICAgaWYgKGlzVGVybWluYXRpb24gfHwgIShoYW5kbGVyID0gY29kZUJsb2Nr
LT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSkgeworICAgICAgICAg
ICAgaWYgKCF1bndpbmRDYWxsRnJhbWUoaXRlciwgZXhjZXB0aW9uVmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxl
cigpKQorICAgICAgICAgICAgICAgICAgICBwcm9maWxlci0+ZXhjZXB0aW9uVW53aW5kKGNhbGxG
cmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKExlZ2FjeVByb2Zp
bGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+dm0oKS5lbmFibGVkUHJvZmlsZXIoKSkKQEAgLTEz
NjgsNTcgKzEzMDYsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2Fs
CiAgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCksIGxhc3RM
aW5lLCBjb2x1bW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLX0KLSAgICAKLUpTVmFs
dWUgSW50ZXJwcmV0ZXI6OnJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgQ2FsbEZyYW1lKiBm
dW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRGdW5jdGlvbkNhbGxGcmFtZUZyb21WTUNvZGUoY2FsbEZy
YW1lLCBmdW5jdGlvbik7Ci0gICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFtZSkKLSAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwotCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNy
ZWF0ZShmdW5jdGlvbkNhbGxGcmFtZS0+dm0oKSwgZnVuY3Rpb25DYWxsRnJhbWUpOwotICAgIGFy
Z3VtZW50cy0+dGVhck9mZihmdW5jdGlvbkNhbGxGcmFtZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWUo
YXJndW1lbnRzKTsKLX0KLQotSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVDYWxsZXJGcm9t
Vk1Db2RlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikgY29uc3QK
LXsKLSAgICBDYWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZyYW1lID0gZmluZEZ1bmN0aW9uQ2FsbEZy
YW1lRnJvbVZNQ29kZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLQotICAgIGlmICghZnVuY3Rpb25D
YWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldDsKLSAgICBDb2RlQmxvY2sqIHVudXNlZENhbGxlckNvZGVCbG9jayA9IDA7
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGdldENhbGxlckluZm8oJmNhbGxGcmFtZS0+
dm0oKSwgZnVuY3Rpb25DYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWRDYWxsZXJDb2Rl
QmxvY2spOwotICAgIGlmICghY2FsbGVyRnJhbWUpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsK
LSAgICBKU1ZhbHVlIGNhbGxlciA9IGNhbGxlckZyYW1lLT5jYWxsZWUoKTsKLSAgICBpZiAoIWNh
bGxlcikKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAgLy8gU2tpcCBvdmVyIGZ1bmN0
aW9uIGJpbmRpbmdzLgotICAgIEFTU0VSVChjYWxsZXIuaXNPYmplY3QoKSk7Ci0gICAgd2hpbGUg
KGFzT2JqZWN0KGNhbGxlciktPmluaGVyaXRzKCZKU0JvdW5kRnVuY3Rpb246OnNfaW5mbykpIHsK
LSAgICAgICAgY2FsbGVyRnJhbWUgPSBnZXRDYWxsZXJJbmZvKCZjYWxsRnJhbWUtPnZtKCksIGNh
bGxlckZyYW1lLCBieXRlY29kZU9mZnNldCwgdW51c2VkQ2FsbGVyQ29kZUJsb2NrKTsKLSAgICAg
ICAgaWYgKCFjYWxsZXJGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAg
ICAgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwotICAgICAgICBpZiAoIWNhbGxlcikK
LSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY2FsbGVy
OwotfQotCi1DYWxsRnJhbWUqIEludGVycHJldGVyOjpmaW5kRnVuY3Rpb25DYWxsRnJhbWVGcm9t
Vk1Db2RlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikKLXsKLSAg
ICBmb3IgKENhbGxGcmFtZSogY2FuZGlkYXRlID0gY2FsbEZyYW1lLT50cnVlQ2FsbEZyYW1lKCk7
IGNhbmRpZGF0ZTsgY2FuZGlkYXRlID0gY2FuZGlkYXRlLT50cnVlQ2FsbGVyRnJhbWUoKSkgewot
ICAgICAgICBpZiAoY2FuZGlkYXRlLT5jYWxsZWUoKSA9PSBmdW5jdGlvbikKLSAgICAgICAgICAg
IHJldHVybiBjYW5kaWRhdGU7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQorfSAgICAKIAogdm9p
ZCBJbnRlcnByZXRlcjo6ZW5hYmxlU2FtcGxlcigpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTUxNTY3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUmVn
aXN0ZXI7CiAgICAgY2xhc3MgSlNTY29wZTsKICAgICBjbGFzcyBTYW1wbGluZ1Rvb2w7CisgICAg
Y2xhc3MgU3RhY2tJdGVyYXRvcjsKICAgICBzdHJ1Y3QgQ2FsbEZyYW1lQ2xvc3VyZTsKICAgICBz
dHJ1Y3QgSGFuZGxlckluZm87CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwpAQCAtMjM1LDE3ICsy
MzYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBleGVjdXRlQ29uc3Ry
dWN0KENhbGxGcmFtZSosIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ29uc3RydWN0VHlwZSwgY29uc3Qg
Q29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmKTsKICAgICAgICAgSlNWYWx1ZSBleGVjdXRl
KEV2YWxFeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUq
KTsKIAotICAgICAgICBKU1ZhbHVlIHJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShDYWxsRnJh
bWUqLCBKU0Z1bmN0aW9uKikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUgcmV0cmlldmVDYWxsZXJG
cm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKLSAgICAgICAgCiAgICAg
ICAgIHZvaWQgZ2V0QXJndW1lbnRzRGF0YShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiYsIHB0cmRp
ZmZfdCYgZmlyc3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0ZXIqJiBhcmd2LCBpbnQmIGFyZ2MpOwog
ICAgICAgICAKICAgICAgICAgU2FtcGxpbmdUb29sKiBzYW1wbGVyKCkgeyByZXR1cm4gbV9zYW1w
bGVyLmdldCgpOyB9CiAKICAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB0aHJvd0V4
Y2VwdGlvbihDYWxsRnJhbWUqJiwgSlNWYWx1ZSYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsK
ICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rSUQs
IGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSwgaW50IGNvbHVtbik7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBTdHJpbmcgZ2V0VHJhY2VMaW5lKENhbGxGcmFtZSosIFN0YWNrRnJhbWVDb2RlVHlw
ZSwgY29uc3QgU3RyaW5nJiwgaW50KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBn
ZXRTdGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IG1heFN0YWNr
U2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgICAgICBzdGF0
aWMgdm9pZCBhZGRTdGFja1RyYWNlSWZOZWNlc3NhcnkoQ2FsbEZyYW1lKiwgSlNWYWx1ZSBlcnJv
cik7CiAKICAgICAgICAgdm9pZCBkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpOwpAQCAt
MjcxLDkgKzI2Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVuZFJlcGVhdENh
bGwoQ2FsbEZyYW1lQ2xvc3VyZSYpOwogICAgICAgICBKU1ZhbHVlIGV4ZWN1dGUoQ2FsbEZyYW1l
Q2xvc3VyZSYpOwogCi0gICAgICAgIE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFtZShD
YWxsRnJhbWUqJiwgSlNWYWx1ZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sq
Jik7Ci0KLSAgICAgICAgc3RhdGljIENhbGxGcmFtZSogZmluZEZ1bmN0aW9uQ2FsbEZyYW1lRnJv
bVZNQ29kZShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKik7CisgICAgICAgIHZvaWQgZ2V0U3RhY2tU
cmFjZShWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMsIHNpemVfdCBtYXhTdGFja1NpemUgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKyAgICAgICAgTkVWRVJfSU5MSU5F
IGJvb2wgdW53aW5kQ2FsbEZyYW1lKFN0YWNrSXRlcmF0b3ImLCBKU1ZhbHVlKTsKIAogICAgICAg
ICB2b2lkIGR1bXBSZWdpc3RlcnMoQ2FsbEZyYW1lKik7CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5j
bHVkZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworU3RhY2tJdGVyYXRvcjo6U3RhY2tJ
dGVyYXRvcihDYWxsRnJhbWUqIGZyYW1lLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciBmaWx0
ZXIpCisgICAgOiBtX2ZpbHRlcihmaWx0ZXIpCit7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBt
X2ZyYW1lID0gRnJhbWU6OmNyZWF0ZShmcmFtZSk7CisgICAgbV9mcmFtZSA9IG1fZnJhbWUtPmxv
Z2ljYWxGcmFtZSgpOworfQorCit2b2lkIFN0YWNrSXRlcmF0b3I6OmdvdG9OZXh0RnJhbWUoKQor
eworICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7CisgICAgd2hpbGUgKGZyYW1lKSB7CisgICAg
ICAgIGZyYW1lID0gZnJhbWUtPmxvZ2ljYWxDYWxsZXJGcmFtZSgpOworICAgICAgICBpZiAoIWZy
YW1lIHx8ICFtX2ZpbHRlciB8fCAhbV9maWx0ZXIoZnJhbWUpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIG1fZnJhbWUgPSBmcmFtZTsKK30KKwordm9pZCBTdGFja0l0ZXJhdG9yOjpm
aW5kKEpTRnVuY3Rpb24qIGZ1bmN0aW9uT2JqKQoreworICAgIEFTU0VSVChmdW5jdGlvbk9iaik7
CisgICAgSlNPYmplY3QqIHRhcmdldENhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihm
dW5jdGlvbk9iaik7CisgICAgd2hpbGUgKG1fZnJhbWUpIHsKKyAgICAgICAgaWYgKG1fZnJhbWUt
PmNhbGxlZSgpID09IHRhcmdldENhbGxlZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBn
b3RvTmV4dEZyYW1lKCk7CisgICAgfQorfQorCitTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Q29kZVR5
cGUgU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNvZGVUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
SlNGcmFtZSgpKQorICAgICAgICByZXR1cm4gQ29kZVR5cGU6Ok5hdGl2ZTsKKworICAgIHN3aXRj
aCAoY29kZUJsb2NrKCktPmNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAg
ICByZXR1cm4gQ29kZVR5cGU6OkV2YWw7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAg
IHJldHVybiBDb2RlVHlwZTo6RnVuY3Rpb247CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgICAg
ICByZXR1cm4gQ29kZVR5cGU6Okdsb2JhbDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVR5cGU6Okdsb2JhbDsKK30KKworU3RyaW5nIFN0
YWNrSXRlcmF0b3I6OkZyYW1lOjpmdW5jdGlvbk5hbWUoKQoreworICAgIFN0cmluZyB0cmFjZUxp
bmU7CisgICAgSlNPYmplY3QqIGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgpOworCisgICAgc3dpdGNo
IChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBDb2RlVHlwZTo6RXZhbDoKKyAgICAgICAgdHJhY2VM
aW5lID0gImV2YWwgY29kZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZVR5cGU6Ok5h
dGl2ZToKKyAgICAgICAgaWYgKGNhbGxlZSkKKyAgICAgICAgICAgIHRyYWNlTGluZSA9IGdldENh
bGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUoKSwgY2FsbGVlKS5pbXBsKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ29kZVR5cGU6OkZ1bmN0aW9uOgorICAgICAgICB0cmFjZUxpbmUg
PSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lKCksIGNhbGxlZSkuaW1wbCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENvZGVUeXBlOjpHbG9iYWw6CisgICAgICAgIHRyYWNl
TGluZSA9ICJnbG9iYWwgY29kZSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4g
dHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKK30KKworU3Ry
aW5nIFN0YWNrSXRlcmF0b3I6OkZyYW1lOjpzb3VyY2VVUkwoKQoreworICAgIFN0cmluZyB0cmFj
ZUxpbmU7CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIENvZGVUeXBlOjpF
dmFsOgorICAgIGNhc2UgQ29kZVR5cGU6OkZ1bmN0aW9uOgorICAgIGNhc2UgQ29kZVR5cGU6Okds
b2JhbDogeworICAgICAgICBTdHJpbmcgc291cmNlVVJMID0gY29kZUJsb2NrKCktPm93bmVyRXhl
Y3V0YWJsZSgpLT5zb3VyY2VVUkwoKTsKKyAgICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgp
KQorICAgICAgICAgICAgdHJhY2VMaW5lID0gc291cmNlVVJMLmltcGwoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgQ29kZVR5cGU6Ok5hdGl2ZToKKyAgICAgICAgdHJhY2VMaW5l
ID0gIltuYXRpdmUgY29kZV0iOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRy
YWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Cit9CisKK1N0cmlu
ZyBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6dG9TdHJpbmcoKQoreworICAgIFN0cmluZ0J1aWxkZXIg
dHJhY2VCdWlsZDsKKyAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0gdGhpcy0+ZnVuY3Rpb25OYW1l
KCk7CisgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHRoaXMtPnNvdXJjZVVSTCgpOworICAgIHRyYWNl
QnVpbGQuYXBwZW5kKGZ1bmN0aW9uTmFtZSk7CisgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgp
KSB7CisgICAgICAgIGlmICghZnVuY3Rpb25OYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRy
YWNlQnVpbGQuYXBwZW5kKCdAJyk7CisgICAgICAgIHRyYWNlQnVpbGQuYXBwZW5kKHNvdXJjZVVS
TCk7CisgICAgICAgIGlmIChpc0pTRnJhbWUoKSkgeworICAgICAgICAgICAgdHJhY2VCdWlsZC5h
cHBlbmQoJzonKTsKKyAgICAgICAgICAgIHRyYWNlQnVpbGQuYXBwZW5kTnVtYmVyKGxpbmUoKSk7
CisgICAgICAgICAgICB0cmFjZUJ1aWxkLmFwcGVuZCgnOicpOworICAgICAgICAgICAgdHJhY2VC
dWlsZC5hcHBlbmROdW1iZXIoY29sdW1uKCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biB0cmFjZUJ1aWxkLnRvU3RyaW5nKCkuaW1wbCgpOworfQorCit1bnNpZ25lZCBTdGFja0l0ZXJh
dG9yOjpGcmFtZTo6Ynl0ZWNvZGVPZmZzZXQoKQoreworICAgIGlmICghaXNKU0ZyYW1lKCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIGlmIChoYXNMb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCkp
CisgICAgICAgIHJldHVybiBieXRlY29kZU9mZnNldEZyb21Db2RlT3JpZ2luSW5kZXgoKTsKKyAg
ICByZXR1cm4gbG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7Cit9CisKK3Vuc2lnbmVkIFN0YWNr
SXRlcmF0b3I6OkZyYW1lOjpsaW5lKCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRo
aXMtPmNvZGVCbG9jaygpOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCk7CisgICAgQVNTRVJUKHVubGlua2VkQ29kZUJsb2NrKTsKKyAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgdW5z
aWduZWQgbGluZU9mZnNldCA9IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmxpbmVObygp
OworICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KSArIGxpbmVPZmZzZXQ7Cit9CisKK3Vuc2lnbmVkIFN0YWNrSXRl
cmF0b3I6OkZyYW1lOjpjb2x1bW4oKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhp
cy0+Y29kZUJsb2NrKCk7CisgICAgaWYgKCFjb2RlQmxvY2spCisgICAgICAgIHJldHVybiAwOwor
ICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciA9IGNvZGVCbG9jay0+c291cmNlKCk7
CisgICAgaWYgKCFzb3VyY2VQcm92aWRlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaW50IGRp
dm90ID0gMDsKKyAgICBpbnQgdW51c2VkU3RhcnRPZmZzZXQgPSAwOworICAgIGludCB1bnVzZWRF
bmRPZmZzZXQgPSAwOworICAgIHJldHJpZXZlRXhwcmVzc2lvbkluZm8oZGl2b3QsIHVudXNlZFN0
YXJ0T2Zmc2V0LCB1bnVzZWRFbmRPZmZzZXQpOworICAgIHJldHVybiBzb3VyY2VQcm92aWRlci0+
Y2hhclBvc2l0aW9uVG9Db2x1bW5OdW1iZXIoZGl2b3QpOworfQorCitBcmd1bWVudHMqIFN0YWNr
SXRlcmF0b3I6OkZyYW1lOjphcmd1bWVudHMoKQoreworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gdGhpcy0+Y2FsbEZyYW1lKCk7CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVu
dHM6OmNyZWF0ZSh2bSgpLCBjYWxsRnJhbWUpOworICAgIGFyZ3VtZW50cy0+dGVhck9mZihjYWxs
RnJhbWUpOworICAgIHJldHVybiBhcmd1bWVudHM7Cit9CisKK3ZvaWQgU3RhY2tJdGVyYXRvcjo6
RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8oaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNl
dCwgaW50JiBlbmRPZmZzZXQpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5j
b2RlQmxvY2soKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7Cisg
ICAgdW5saW5rZWRDb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KCksIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBkaXZv
dCArPSBjb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpOworfQorCitTdGFja0l0ZXJhdG9yOjpGcmFt
ZSogU3RhY2tJdGVyYXRvcjo6RnJhbWU6OmxvZ2ljYWxGcmFtZSgpCit7CisjaWYgIUVOQUJMRShE
RkdfSklUKQorICAgIHJldHVybiB0aGlzOworCisjZWxzZSAvLyAhRU5BQkxFKERGR19KSVQpCisg
ICAgaWYgKGlzSW5saW5lZEZyYW1lKCkpCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgLy8g
SWYgSSBkb24ndCBoYXZlIGEgY29kZSBibG9jaywgdGhlbiBJJ20gbm90IERGRyBjb2RlLCBzbyBJ
J20gdGhlIHRydWUgY2FsbCBmcmFtZS4KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMt
PmNvZGVCbG9jaygpOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm4gdGhpczsK
KworICAgIC8vIElmIHRoZSBjb2RlIGJsb2NrIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgb3JpZ2lu
cywgdGhlbiB0aGVyZSB3YXMgbm8gaW5saW5pbmcsIHNvCisgICAgLy8gSSdtIGRvbmUuCisgICAg
aWYgKCFjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpCisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIAorICAgIENvZGVCbG9jayogb3V0ZXJNb3N0Q29kZUJsb2NrID0gY29kZUJsb2NrOworICAg
IHVuc2lnbmVkIGluZGV4ID0gbG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOworICAgIEFTU0VS
VChvdXRlck1vc3RDb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKTsKKyAgICBpZiAo
IW91dGVyTW9zdENvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkpIHsKKyAgICAgICAg
Ly8gU2VlIGFib3ZlLiBJbiByZWxlYXNlIGJ1aWxkcywgd2UgdHJ5IHRvIHByb3RlY3Qgb3Vyc2Vs
dmVzIGZyb20gY3Jhc2hpbmcgZXZlbgorICAgICAgICAvLyB0aG91Z2ggc3RhY2sgd2Fsa2luZyB3
aWxsIGJlIGdvb2ZlZCB1cC4KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gb3V0ZXJNb3N0Q29kZUJsb2NrLT5jb2RlT3JpZ2luKGlu
ZGV4KTsKKyAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1
cm4gdGhpczsgLy8gTm90IGN1cnJlbnRseSBpbiBpbmxpbmVkIGNvZGUuCisKKyAgICAvLyBXZSd2
ZSBnb3QgaW5saW5lZCBmcmFtZXMuIFNvLCByZWlmeSB0aGVtIHNvIHRoYXQgdGhlIGl0ZXJhdG9y
IGNhbiB3YWxrIHRocm91Z2ggdGhlbS4KKyAgICBDYWxsRnJhbWUqIGN1cnJGcmFtZSA9IHRoaXMt
PmNhbGxGcmFtZSgpOworICAgIENhbGxGcmFtZSogaW5uZXJNb3N0TG9naWNhbEZyYW1lID0gY3Vy
ckZyYW1lICsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworCisgICAg
Q2FsbEZyYW1lKiBsb2dpY2FsRnJhbWUgPSBpbm5lck1vc3RMb2dpY2FsRnJhbWU7CisgICAgd2hp
bGUgKGxvZ2ljYWxGcmFtZSAhPSBjdXJyRnJhbWUpIHsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVkRnJhbWVJbmZvID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAg
IAorICAgICAgICAvLyBGaWxsIGluIHRoZSBsb2dpY2FsIChpLmUuIGlubGluZWQpIGZyYW1lCisg
ICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0Q29kZUJsb2NrKGlubGluZWRGcmFtZUluZm8tPmJhc2Vs
aW5lQ29kZUJsb2NrKCkpOworICAgICAgICBsb2dpY2FsRnJhbWUtPnNldElubGluZUNhbGxGcmFt
ZShpbmxpbmVkRnJhbWVJbmZvKTsKKyAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyhpbmxpbmVkRnJhbWVJbmZvLT5hcmd1bWVudHMuc2l6ZSgpKTsKKyAg
ICAgICAgbG9naWNhbEZyYW1lLT5zZXRMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgbG9naWNhbEZyYW1lLT5zZXRJc0lubGluZWRGcmFt
ZSgpOworCisgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZWRGcmFtZUluZm8tPmNh
bGxlZS5nZXQoKTsKKyAgICAgICAgaWYgKGNhbGxlZSkgeworICAgICAgICAgICAgbG9naWNhbEZy
YW1lLT5zZXRTY29wZShjYWxsZWUtPnNjb3BlKCkpOworICAgICAgICAgICAgbG9naWNhbEZyYW1l
LT5zZXRDYWxsZWUoY2FsbGVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ29kZU9y
aWdpbiogY2FsbGVyQ29kZU9yaWdpbiA9ICZpbmxpbmVkRnJhbWVJbmZvLT5jYWxsZXI7CisgICAg
ICAgIElubGluZUNhbGxGcmFtZSogY2FsbGVySW5saW5lZEZyYW1lSW5mbyA9IGNhbGxlckNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVyRnJhbWVPZmZz
ZXQgPSBjYWxsZXJJbmxpbmVkRnJhbWVJbmZvID8gY2FsbGVySW5saW5lZEZyYW1lSW5mby0+c3Rh
Y2tPZmZzZXQgOiAwOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY3VyckZyYW1l
ICsgY2FsbGVyRnJhbWVPZmZzZXQ7CisgICAgICAgIGxvZ2ljYWxGcmFtZS0+c2V0Q2FsbGVyRnJh
bWUoY2FsbGVyRnJhbWUpOworCisgICAgICAgIGNvZGVPcmlnaW4gPSAqY2FsbGVyQ29kZU9yaWdp
bjsKKyAgICAgICAgbG9naWNhbEZyYW1lID0gY2FsbGVyRnJhbWU7CisgICAgfQorICAgIAorICAg
IEFTU0VSVCghaW5uZXJNb3N0TG9naWNhbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKTsK
KyAgICByZXR1cm4gRnJhbWU6OmNyZWF0ZShpbm5lck1vc3RMb2dpY2FsRnJhbWUpOworI2VuZGlm
IC8vICFFTkFCTEUoREZHX0pJVCkKK30KKworU3RhY2tJdGVyYXRvcjo6RnJhbWUqIFN0YWNrSXRl
cmF0b3I6OkZyYW1lOjpsb2dpY2FsQ2FsbGVyRnJhbWUoKQoreworICAgIEZyYW1lKiBjYWxsZXJG
cmFtZSA9IGNyZWF0ZSh0aGlzLT5jYWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxh
ZygpKTsKKyNpZiAhRU5BQkxFKERGR19KSVQpCisgICAgcmV0dXJuIGNhbGxlckZyYW1lOworCisj
ZWxzZSAvLyAhRU5BQkxFKERGR19KSVQpCisgICAgaWYgKCFpc0pTRnJhbWUoKSB8fCAhY2FsbGVy
RnJhbWUpCisgICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsKKworICAgIC8vIElmIEkgYW0ga25v
d24gdG8gYmUgYW4gaW5saW5lZCBmcmFtZSwgdGhlbiBJJ3ZlIGJlZW4gcmVpZmllZCBhbHJlYWR5
IGFuZAorICAgIC8vIGhhdmUgbXkgY2FsbGVyLgorICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQor
ICAgICAgICByZXR1cm4gY2FsbGVyRnJhbWU7CisgICAgCisgICAgLy8gSSBhbSBub3QgYW4gaW5s
aW5lZCBmcmFtZS4gU28gdGhlIHF1ZXN0aW9uIGlzOiBpcyBteSBjYWxsZXIgYSBDYWxsRnJhbWUK
KyAgICAvLyB0aGF0IGhhcyBpbmxpbmVzIG9yIGEgQ2FsbEZyYW1lIHRoYXQgZG9lc24ndD8KKwor
ICAgIC8vIElmIG15IGNhbGxlciBpcyBub3QgYSBKUyBmcmFtZSwgaXQgY2Fubm90IGhhdmUgaW5s
aW5lcywgYW5kIHdlJ3JlIGRvbmUuCisgICAgaWYgKCFjYWxsZXJGcmFtZS0+aXNKU0ZyYW1lKCkp
CisgICAgICAgIHJldHVybiBjYWxsZXJGcmFtZTsKKworICAgIEFTU0VSVCghY2FsbGVyRnJhbWUt
PmlzSW5saW5lZEZyYW1lKCkpOworICAgIHJldHVybiBjYWxsZXJGcmFtZS0+bG9naWNhbEZyYW1l
KCk7CisKKyNlbmRpZiAvLyAhRU5BQkxFKERGR19KSVQpCit9CisKKyNpZm5kZWYgTkRFQlVHCisK
K3N0YXRpYyBjb25zdCBjaGFyKiBqaXRUeXBlTmFtZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUp
Cit7CisgICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAgY2FzZSBKSVRDb2RlOjpOb25lOiByZXR1
cm4gIk5vbmUiOworICAgIGNhc2UgSklUQ29kZTo6SG9zdENhbGxUaHVuazogcmV0dXJuICJIb3N0
Q2FsbFRodW5rIjsKKyAgICBjYXNlIEpJVENvZGU6OkludGVycHJldGVyVGh1bms6IHJldHVybiAi
SW50ZXJwcmV0ZXJUaHVuayI7CisgICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDogcmV0dXJu
ICJCYXNlbGluZUpJVCI7CisgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6IHJldHVybiAiREZHSklU
IjsKKyAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDogcmV0dXJuICJGVExKSVQiOworICAgIH0KKyAg
ICByZXR1cm4gIjx1bmtub3duPiI7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50SW5kZW50cyhpbnQg
bGV2ZWxzKQoreworICAgIHdoaWxlIChsZXZlbHMtLSkKKyAgICAgICAgZGF0YUxvZ0ZTdHJpbmco
IiAgICIpOworfQorCitzdGF0aWMgdm9pZCBwcmludGlmKGludCBpbmRlbnRMZXZlbHMsIGNvbnN0
IGNoYXIqIGZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICB2YV9zdGFy
dChhcmdMaXN0LCBmb3JtYXQpOworCisgICAgaWYgKGluZGVudExldmVscykKKyAgICAgICAgcHJp
bnRJbmRlbnRzKGluZGVudExldmVscyk7CisKKyNpZiBDT01QSUxFUihDTEFORykgfHwgKENPTVBJ
TEVSKEdDQykgJiYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoNCwgNiwgMCkpCisjcHJhZ21hIEdDQyBk
aWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQt
bm9ubGl0ZXJhbCIKKyNlbmRpZgorCisgICAgV1RGOjpkYXRhTG9nRlYoZm9ybWF0LCBhcmdMaXN0
KTsKKworI2lmIENPTVBJTEVSKENMQU5HKSB8fCAoQ09NUElMRVIoR0NDKSAmJiBHQ0NfVkVSU0lP
Tl9BVF9MRUFTVCg0LCA2LCAwKSkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisjZW5kaWYK
KworICAgIHZhX2VuZChhcmdMaXN0KTsKK30KKwordm9pZCBTdGFja0l0ZXJhdG9yOjpGcmFtZTo6
cHJpbnQoaW50IGluZGVudExldmVsKQoreworICAgIGludCBpID0gaW5kZW50TGV2ZWw7CisKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOworICAgIHByaW50aWYo
aSwgImZyYW1lICVwIHtcbiIsIHRoaXMpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9
IHRoaXMtPmNhbGxlckZyYW1lKCk7CisgICAgdm9pZCogcmV0dXJuUEMgPSBoYXNSZXR1cm5QQygp
PyB0aGlzLT5yZXR1cm5QQygpLnZhbHVlKCkgOiBudWxscHRyOworCisgICAgcHJpbnRpZihpLCAi
ICAgbmFtZSAnJXMnXG4iLCBmdW5jdGlvbk5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBwcmlu
dGlmKGksICIgICBzb3VyY2VVUkwgJyVzJ1xuIiwgc291cmNlVVJMKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgcHJpbnRpZihpLCAiICAgaG9zdEZsYWcgJWRcbiIsIGNhbGxlckZyYW1lLT5oYXNIb3N0
Q2FsbEZyYW1lRmxhZygpKTsKKyAgICBwcmludGlmKGksICIgICBpc0lubGluZWRGcmFtZSAlZFxu
IiwgaXNJbmxpbmVkRnJhbWUoKSk7CisKKyAgICBpZiAoaXNJbmxpbmVkRnJhbWUoKSkKKyAgICAg
ICAgcHJpbnRpZihpLCAiICAgSW5saW5lQ2FsbEZyYW1lICVwXG4iLCB0aGlzLT5pbmxpbmVDYWxs
RnJhbWUoKSk7CisKKyAgICBwcmludGlmKGksICIgICBjYWxsZWUgJXBcbiIsIGNhbGxlZSgpKTsK
KyAgICBwcmludGlmKGksICIgICByZXR1cm5QQyAlcFxuIiwgcmV0dXJuUEMpOworICAgIHByaW50
aWYoaSwgIiAgIGNhbGxlckZyYW1lICVwXG4iLCBjYWxsZXJGcmFtZS0+cmVtb3ZlSG9zdENhbGxG
cmFtZUZsYWcoKSk7CisgICAgcHJpbnRpZihpLCAiICAgbG9naWNhbENhbGxlckZyYW1lICVwXG4i
LCBsb2dpY2FsQ2FsbGVyRnJhbWUoKSk7CisgICAgcHJpbnRpZihpLCAiICAgcmF3TG9jYXRpb25C
aXRzICV1IDB4JXhcbiIsIGxvY2F0aW9uQXNSYXdCaXRzKCksIGxvY2F0aW9uQXNSYXdCaXRzKCkp
OworICAgIHByaW50aWYoaSwgIiAgIGNvZGVCbG9jayAlcFxuIiwgY29kZUJsb2NrKTsKKyAgICBp
ZiAoY29kZUJsb2NrKSB7CisgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSA9IGNvZGVC
bG9jay0+aml0VHlwZSgpOworICAgICAgICBpZiAoaGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0
KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbG9jYXRpb25Bc0J5
dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgICAgICBwcmludGlmKGksICIgICAgICBieXRlY29kZU9m
ZnNldCAldSAlcCAvICV6dVxuIiwgYnl0ZWNvZGVPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGJ5dGVjb2RlT2Zmc2V0KSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgY29kZU9yaWdpbkluZGV4ID0g
bG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOworICAgICAgICAgICAgcHJpbnRpZihpLCAiICAg
ICAgY29kZU9yaWdpbklkZXggJXUgJXAgLyAlenVcbiIsIGNvZGVPcmlnaW5JbmRleCwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oY29kZU9yaWdpbkluZGV4KSwgY29kZUJsb2NrLT5jb2RlT3JpZ2lu
cygpLnNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRpZihpLCAiICAgICAgbGluZSAl
ZFxuIiwgbGluZSgpKTsKKyAgICAgICAgcHJpbnRpZihpLCAiICAgICAgY29sdW1uICVkXG4iLCBj
b2x1bW4oKSk7CisgICAgICAgIHByaW50aWYoaSwgIiAgICAgIGppdFR5cGUgJWQgPCVzPiBpc09w
dGltaXppbmdKSVQgJWRcbiIsIGppdFR5cGUsIGppdFR5cGVOYW1lKGppdFR5cGUpLCBKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoaml0VHlwZSkpOworICAgICAgICBwcmludGlmKGksICIgICAgICBo
YXNDb2RlT3JpZ2lucyAlZFxuIiwgY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKTsKKyAgICAg
ICAgaWYgKGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSkgeworICAgICAgICAgICAgSklUQ29k
ZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLmdldCgpOworICAgICAgICAgICAgcHJp
bnRpZihpLCAiICAgICAgICAgaml0Q29kZSAlcCBzdGFydCAlcCBlbmQgJXBcbiIsIGppdENvZGUs
IGppdENvZGUtPnN0YXJ0KCksIGppdENvZGUtPmVuZCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBwcmludGlmKGksICJ9XG4iKTsKK30KKworI2VuZGlmIC8vIE5ERUJVRworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2lmbmRlZiBOREVCVUcKKy8vIEZvciB1c2UgaW4gdGhlIGRlYnVnZ2VyCit2
b2lkIGRlYnVnUHJpbnRDYWxsRnJhbWUoSlNDOjpDYWxsRnJhbWUqKTsKKwordm9pZCBkZWJ1Z1By
aW50Q2FsbEZyYW1lKEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgaWYgKCFjYWxs
RnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lKiBm
cmFtZSA9IEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUpOworICAg
IGZyYW1lLT5wcmludCgyKTsKK30KKyNlbmRpZiAvLyAhTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTdGFja0l0ZXJhdG9yX2gKKyNkZWZpbmUg
U3RhY2tJdGVyYXRvcl9oCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgorI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3JQcml2YXRlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBBcmd1bWVudHM7CisKK2NsYXNzIFN0YWNrSXRlcmF0b3I6OkZyYW1l
IDogcHVibGljIENhbGxGcmFtZSB7CitwdWJsaWM6CisgICAgZW51bSBDb2RlVHlwZSB7CisgICAg
ICAgIEdsb2JhbCA9IFN0YWNrRnJhbWVHbG9iYWxDb2RlLAorICAgICAgICBFdmFsID0gU3RhY2tG
cmFtZUV2YWxDb2RlLAorICAgICAgICBGdW5jdGlvbiA9IFN0YWNrRnJhbWVGdW5jdGlvbkNvZGUs
CisgICAgICAgIE5hdGl2ZSA9IFN0YWNrRnJhbWVOYXRpdmVDb2RlCisgICAgfTsKKworICAgIHN0
YXRpYyBGcmFtZSogY3JlYXRlKENhbGxGcmFtZSogZikgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxGcmFtZSo+KGYpOyB9CisKKyAgICBib29sIGlzSlNGcmFtZSgpIGNvbnN0IHsgcmV0dXJuICEh
Y29kZUJsb2NrKCk7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBmdW5jdGlvbk5h
bWUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc291cmNlVVJMKCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKCk7CisKKyAgICBDb2RlVHlwZSBjb2RlVHlw
ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdW5zaWduZWQgbGluZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVk
IGNvbHVtbigpOworCisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMoKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4odGhpcyk7
IH0KKyAgICAKKyAgICBGcmFtZSogbG9naWNhbEZyYW1lKCk7CisgICAgRnJhbWUqIGxvZ2ljYWxD
YWxsZXJGcmFtZSgpOworCisjaWZuZGVmIE5ERUJVRworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcHJpbnQoaW50IGluZGVudExldmVsKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEZyYW1l
KCk7CisgICAgfkZyYW1lKCk7CisKKyAgICB2b2lkIHJldHJpZXZlRXhwcmVzc2lvbkluZm8oaW50
JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTdGFja0l0ZXJhdG9yX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3JQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3JQ
cml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
U3RhY2tJdGVyYXRvclByaXZhdGVfaAorI2RlZmluZSBTdGFja0l0ZXJhdG9yUHJpdmF0ZV9oCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU0Z1bmN0aW9uOwor
Y2xhc3MgVk07CisKK3R5cGVkZWYgRXhlY1N0YXRlIENhbGxGcmFtZTsKKworY2xhc3MgU3RhY2tJ
dGVyYXRvciB7CitwdWJsaWM6CisgICAgY2xhc3MgRnJhbWU7CisgICAgdHlwZWRlZiBib29sICgq
RnJhbWVGaWx0ZXIpKEZyYW1lKik7CisKKyAgICBGcmFtZSYgb3BlcmF0b3IqKCkgeyByZXR1cm4g
Km1fZnJhbWU7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEZyYW1lKiBvcGVyYXRvci0+KCkgeyByZXR1
cm4gbV9mcmFtZTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KEZyYW1lKiBmcmFtZSkgeyByZXR1
cm4gbV9mcmFtZSA9PSBmcmFtZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShGcmFtZSogZnJhbWUp
IHsgcmV0dXJuIG1fZnJhbWUgIT0gZnJhbWU7IH0KKyAgICB2b2lkIG9wZXJhdG9yKysoKSB7IGdv
dG9OZXh0RnJhbWUoKTsgfQorICAgIHZvaWQgZmluZChKU0Z1bmN0aW9uKik7CisKK3ByaXZhdGU6
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJh
bWUsIEZyYW1lRmlsdGVyID0gbnVsbHB0cik7CisKKyAgICBzdGF0aWMgRnJhbWUqIGVuZCgpIHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdvdG9OZXh0RnJh
bWUoKTsKKworICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIEZyYW1lRmlsdGVyIG1fZmlsdGVyOwor
CisgICAgZnJpZW5kIGNsYXNzIEV4ZWNTdGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gU3RhY2tJdGVyYXRvclByaXZhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAxNTE1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMCBAQAogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJMZWdhY3lQcm9m
aWxlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQcm9maWxlLmgiCisj
aW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRyYWNpbmcuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC01OCwxMCArNTgsMTMgQEAgUHJvZmlsZUdlbmVyYXRvcjo6UHJvZmlsZUdl
bmVyYXRvcihFeGVjUwogCiB2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNv
bGVTdGFydChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNr
VHJhY2U7Ci0gICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNl
LCAyKTsKLQotICAgIG1fY3VycmVudE5vZGUgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKGV4ZWMsIExl
Z2FjeVByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBzdGFja1RyYWNlWzFdLmNh
bGxlZS5nZXQoKSwgc3RhY2tUcmFjZVsxXS5zb3VyY2VVUkwsIHN0YWNrVHJhY2VbMV0ubGluZSgp
KSwgbV9oZWFkLmdldCgpLCBtX2hlYWQuZ2V0KCkpOworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9
IGV4ZWMtPmJlZ2luKCk7CisgICAgKytpdGVyOworICAgIENhbGxJZGVudGlmaWVyIGlkZW50aWZp
ZXIgPSAoaXRlciA9PSBleGVjLT5lbmQoKSkKKyAgICAgICAgPyBMZWdhY3lQcm9maWxlcjo6Y3Jl
YXRlQ2FsbElkZW50aWZpZXIoZXhlYywgSlNWYWx1ZSgpLCBTdHJpbmcoKSwgMCkKKyAgICAgICAg
OiBMZWdhY3lQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoZXhlYywgaXRlci0+Y2FsbGVl
KCksIGl0ZXItPnNvdXJjZVVSTCgpLCBpdGVyLT5saW5lKCkpOworICAgIG1fY3VycmVudE5vZGUg
PSBQcm9maWxlTm9kZTo6Y3JlYXRlKGV4ZWMsIGlkZW50aWZpZXIsIG1faGVhZC5nZXQoKSwgbV9o
ZWFkLmdldCgpKTsKKyAgICAKICAgICBtX2hlYWQtPmluc2VydE5vZGUobV9jdXJyZW50Tm9kZS5n
ZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlTm9kZS5oCShyZXZpc2lvbiAxNTE1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgUHJvZmlsZU5vZGU7
CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8UHJvZmlsZU5vZGU+ID46OmNvbnN0X2l0ZXJh
dG9yIFN0YWNrSXRlcmF0b3I7CiAgICAgdHlwZWRlZiBIYXNoQ291bnRlZFNldDxTdHJpbmdJbXBs
Kj4gRnVuY3Rpb25DYWxsSGFzaENvdW50OwogCiAgICAgY2xhc3MgUHJvZmlsZU5vZGUgOiBwdWJs
aWMgUmVmQ291bnRlZDxQcm9maWxlTm9kZT4gewpAQCAtMTMxLDYgKzEzMCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmCiAKICAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8UHJvZmlsZU5vZGU+ID46OmNvbnN0X2l0ZXJhdG9yIFN0YWNrSXRlcmF0b3I7CisKICAg
ICAgICAgUHJvZmlsZU5vZGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUsIGNvbnN0IENhbGxJ
ZGVudGlmaWVyJiwgUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogcGFyZW50Tm9k
ZSk7CiAgICAgICAgIFByb2ZpbGVOb2RlKEV4ZWNTdGF0ZSogY2FsbGVyQ2FsbEZyYW1lLCBQcm9m
aWxlTm9kZSogaGVhZE5vZGUsIFByb2ZpbGVOb2RlKiBub2RlVG9Db3B5KTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE1
MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgogCisjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKQEAgLTMyLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNp
bmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIgCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAg
LTQwLDYgKzQyLDcgQEAKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRlICJTdGFja0l0ZXJh
dG9yLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsK
QEAgLTE3OCwxOCArMTgxLDM5IEBAIENhbGxUeXBlIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKEpT
Q2VsbCoKICAgICByZXR1cm4gQ2FsbFR5cGVKUzsKIH0KIAorc3RhdGljIEpTVmFsdWUgcmV0cmll
dmVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbk9iaikKK3sK
KyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGZ1bmN0aW9uT2JqKTsKKyAgICBy
ZXR1cm4gaXRlciAhPSBleGVjLT5lbmQoKSA/IEpTVmFsdWUoaXRlci0+YXJndW1lbnRzKCkpIDog
anNOdWxsKCk7Cit9CisKIEpTVmFsdWUgSlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTRnVu
Y3Rpb24qIHRoaXNPYmogPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHNsb3RCYXNlKTsKICAgICBBU1NF
UlQoIXRoaXNPYmotPmlzSG9zdEZ1bmN0aW9uKCkpOwotICAgIHJldHVybiBleGVjLT5pbnRlcnBy
ZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iaik7CisKKyAg
ICByZXR1cm4gcmV0cmlldmVBcmd1bWVudHMoZXhlYywgdGhpc09iaik7Cit9CisKK3N0YXRpYyBi
b29sIHNraXBPdmVyQm91bmRGdW5jdGlvbnMoU3RhY2tJdGVyYXRvcjo6RnJhbWUqIGZyYW1lKQor
eworICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBmcmFtZS0+Y2FsbGVlKCk7CisgICAgYm9vbCBzaG91
bGRTa2lwID0gY2FsbGVlID8gY2FsbGVlLT5pbmhlcml0cygmSlNCb3VuZEZ1bmN0aW9uOjpzX2lu
Zm8pIDogZmFsc2U7CisgICAgcmV0dXJuIHNob3VsZFNraXA7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
IHJldHJpZXZlQ2FsbGVyRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5j
dGlvbk9iaikKK3sKKyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5maW5kKGZ1bmN0aW9u
T2JqLCBza2lwT3ZlckJvdW5kRnVuY3Rpb25zKTsKKyAgICArK2l0ZXI7CisgICAgcmV0dXJuIGl0
ZXIgIT0gZXhlYy0+ZW5kKCkgJiYgaXRlci0+Y2FsbGVlKCkgPyBpdGVyLT5jYWxsZWUoKSA6IGpz
TnVsbCgpOwogfQogCiBKU1ZhbHVlIEpTRnVuY3Rpb246OmNhbGxlckdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU0Z1bmN0aW9u
KiB0aGlzT2JqID0ganNDYXN0PEpTRnVuY3Rpb24qPihzbG90QmFzZSk7CiAgICAgQVNTRVJUKCF0
aGlzT2JqLT5pc0hvc3RGdW5jdGlvbigpKTsKLSAgICBKU1ZhbHVlIGNhbGxlciA9IGV4ZWMtPmlu
dGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqKTsKKyAg
ICBKU1ZhbHVlIGNhbGxlciA9IHJldHJpZXZlQ2FsbGVyRnVuY3Rpb24oZXhlYywgdGhpc09iaik7
CiAKICAgICAvLyBTZWUgRVM1LjEgMTUuMy41LjQgLSBGdW5jdGlvbi5jYWxsZXIgbWF5IG5vdCBi
ZSB1c2VkIHRvIHJldHJpZXZlIGEgc3RyaWN0IGNhbGxlci4KICAgICBpZiAoIWNhbGxlci5pc09i
amVjdCgpIHx8ICFhc09iamVjdChjYWxsZXIpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZv
KSkKQEAgLTI5Nyw3ICszMjEsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICB9Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnByZXRlcigp
LT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5
IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKHJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXNPYmplY3QpLCBSZWFkT25seSB8IERvbnRF
bnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAg
LTMyMSw3ICszNDUsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRv
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0g
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnByZXRlcigpLT5yZXRy
aWV2ZUNhbGxlckZyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5IHwgRG9udEVu
dW0gfCBEb250RGVsZXRlKTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHJldHJp
ZXZlQ2FsbGVyRnVuY3Rpb24oZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5IHwgRG9udEVudW0g
fCBEb250RGVsZXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtNDE1
LDE0ICs0MzksMTQgQEAgYm9vbCBKU0Z1bmN0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iagog
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAg
ICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgfQotICAgICAgICB2
YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUoZXhlYywgZGVzY3Jp
cHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21W
TUNvZGUoZXhlYywgdGhpc09iamVjdCkpOworICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0
b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCByZXRyaWV2
ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqZWN0KSk7CiAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikgewogICAgICAgICBpZiAodGhpc09i
amVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBpZiAo
IUJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpKQogICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVj
dEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
PnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0g
fCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHko
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsK
ICAgICAgICAgfQotICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBz
YW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRlcigpLT5y
ZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOworICAgICAgICB2YWx1
ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRv
ci52YWx1ZSgpLCByZXRyaWV2ZUNhbGxlckZ1bmN0aW9uKGV4ZWMsIHRoaXNPYmplY3QpKTsKICAg
ICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KQogICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUo
ZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBqc051bWJlcih0aGlzT2JqZWN0LT5qc0V4ZWN1dGFi
bGUoKS0+cGFyYW1ldGVyQ291bnQoKSkpOwogICAgIGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlz
aW9uIDE1MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlBhcnNlci5o
IgorI2luY2x1ZGUgIlN0YWNrSXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvZHRvYS5oPgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC03MTEsNyArNzEyLDkgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogICAgIGlmICghdGhpc09i
amVjdCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT50aGlzVmFsdWUoKS5z
eW50aGVzaXplUHJvdG90eXBlKGV4ZWMpKTsKIAotICAgIGlmICghdGhpc09iamVjdC0+YWxsb3dz
QWNjZXNzRnJvbShleGVjLT50cnVlQ2FsbGVyRnJhbWUoKSkpCisgICAgU3RhY2tJdGVyYXRvciBp
dGVyID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0ZXI7CisgICAgaWYgKChpdGVyID09IGV4ZWMt
PmVuZCgpKSB8fCAhdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5jYWxsRnJhbWUo
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPnByb3RvdHlwZSgpKTsKQEAgLTcy
Nyw3ICs3MzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAg
ICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCi0gICAgaWYgKCF0aGlzT2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMt
PnRydWVDYWxsZXJGcmFtZSgpKSkKKyAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdp
bigpOworICAgICsraXRlcjsKKyAgICBpZiAoKGl0ZXIgPT0gZXhlYy0+ZW5kKCkpIHx8ICF0aGlz
T2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9tKGl0ZXItPmNhbGxGcmFtZSgpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIFNldHRpbmcgX19w
cm90b19fIHRvIGEgbm9uLW9iamVjdCwgbm9uLW51bGwgdmFsdWUgaXMgc2lsZW50bHkgaWdub3Jl
ZCB0byBtYXRjaCBNb3ppbGxhLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTUxNTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5Lmgi
CisjaW5jbHVkZSAiU3RhY2tJdGVyYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTM5
LDcgKzE0MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVxdWVz
dGVkIHByb3RvdHlwZSBvZiBhIHZhbHVlIHRoYXQgaXMgbm90IGFuIG9iamVjdC4iKSkpOwogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYg
KCFvYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oZXhlYy0+dHJ1ZUNhbGxlckZyYW1lKCkpKQorICAg
IFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7CisgICAgKytpdGVyOworICAgIGlm
ICgoaXRlciA9PSBleGVjLT5lbmQoKSkgfHwgIW9iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVy
LT5jYWxsRnJhbWUoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPnByb3RvdHlwZSgpKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDE1MTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBPcGVyYXRpb25z
X2gKICNkZWZpbmUgT3BlcmF0aW9uc19oCiAKKyNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE1MTYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE4IEBACisyMDEzLTA2LTE0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
KworICAgICAgICBSb2xsaW5nIHIxNTE0NTYsIHIxNTE0MjAgYmFjayBpbiB3aXRoIHNvbWUgZml4
ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcz
OTAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaW50ZXJwcmV0ZXIvU3Rh
Y2tJdGVyYXRvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNY
TUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1
ZXN0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNjcmlwdENhbGxTdGFjayk6CisKIDIwMTMt
MDYtMTIgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxlZCBvdXQgcjE1MTQ1NiwgcjE1MTQyMDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFja0l0ZXJh
dG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9p
bnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBA
CisjaWZuZGVmIFdlYkNvcmVfRldEX1N0YWNrSXRlcmF0b3JfaAorI2RlZmluZSBXZWJDb3JlX0ZX
RF9TdGFja0l0ZXJhdG9yX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdGFja0l0ZXJhdG9y
Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJl
cXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTE1NjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJK
U0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgorI2luY2x1ZGUg
PGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDx3dGYvQXJy
YXlCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTEzMywxMCArMTMzLDE1IEBA
IEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUKICAgICAgICAgICAgIGlt
cGwoKS0+c2VuZCh2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBlYyk7CiAgICAgfQog
Ci0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UoMik7Ci0gICAgZXhlYy0+aW50ZXJw
cmV0ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlLCAyKTsKLSAgICBpbXBsKCktPnNldExh
c3RTZW5kTGluZU51bWJlcihzdGFja1RyYWNlWzFdLmxpbmUoKSk7Ci0gICAgaW1wbCgpLT5zZXRM
YXN0U2VuZFVSTChzdGFja1RyYWNlWzFdLnNvdXJjZVVSTCk7CisgICAgU3RhY2tJdGVyYXRvciBp
dGVyID0gZXhlYy0+YmVnaW4oKTsKKyAgICArK2l0ZXI7CisgICAgaWYgKGl0ZXIgIT0gZXhlYy0+
ZW5kKCkpIHsKKyAgICAgICAgaW1wbCgpLT5zZXRMYXN0U2VuZExpbmVOdW1iZXIoaXRlci0+bGlu
ZSgpKTsKKyAgICAgICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVSTChpdGVyLT5zb3VyY2VVUkwoKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1wbCgpLT5zZXRMYXN0U2VuZExpbmVOdW1iZXIoMCk7
CisgICAgICAgIGltcGwoKS0+c2V0TGFzdFNlbmRVUkwoU3RyaW5nKCkpOworICAgIH0KIAogICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3Rh
Y2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMTUxNTY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRW
YWx1ZS5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgotI2luY2x1ZGUgPGlu
dGVycHJldGVyL0ludGVycHJldGVyLmg+CisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvU3RhY2tJdGVy
YXRvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNDSlNWYWx1ZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgpAQCAtNTcsMTAg
KzU3LDEwIEBAIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHQKIHsKICAg
ICBWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiBmcmFtZXM7CiAgICAgaWYgKEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSkgewotICAgICAg
ICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICAgICAgZXhlYy0+aW50ZXJwcmV0
ZXIoKS0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlLCBtYXhTdGFja1NpemUpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyBpKyspCi0gICAgICAgICAg
ICBmcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShzdGFja1RyYWNlW2ldLmZyaWVuZGx5RnVu
Y3Rpb25OYW1lKGV4ZWMpLCBzdGFja1RyYWNlW2ldLmZyaWVuZGx5U291cmNlVVJMKCksIHN0YWNr
VHJhY2VbaV0ubGluZSgpLCBzdGFja1RyYWNlW2ldLmNvbHVtbigpKSk7CisgICAgICAgIEFTU0VS
VChleGVjKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBmcmFtZSA9IGV4ZWMtPnZtKCkudG9wQ2FsbEZy
YW1lOworICAgICAgICBmb3IgKFN0YWNrSXRlcmF0b3IgaXRlciA9IGZyYW1lLT5iZWdpbigpOyBp
dGVyICE9IGZyYW1lLT5lbmQoKSAmJiBtYXhTdGFja1NpemUtLTsgKytpdGVyKQorICAgICAgICAg
ICAgZnJhbWVzLmFwcGVuZChTY3JpcHRDYWxsRnJhbWUoaXRlci0+ZnVuY3Rpb25OYW1lKCksIGl0
ZXItPnNvdXJjZVVSTCgpLCBpdGVyLT5saW5lKCksIGl0ZXItPmNvbHVtbigpKSk7CiAgICAgfQog
ICAgIGlmIChmcmFtZXMuaXNFbXB0eSgpICYmICFlbXB0eUlzQWxsb3dlZCkgewogICAgICAgICAv
LyBObyBmcmFtZXMgZm91bmQuIEl0IG1heSBoYXBwZW4gaW4gdGhlIGNhc2Ugd2hlcmUKQEAgLTc0
LDE5ICs3NCwxNyBAQCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0CiBQ
YXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewogICAgIFZlY3RvcjxTY3JpcHRD
YWxsRnJhbWU+IGZyYW1lczsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAg
ICBleGVjLT5pbnRlcnByZXRlcigpLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIG1heFN0YWNr
U2l6ZSArIDEpOwotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFja1RyYWNlLnNpemUoKSA9PSAxID8g
MCA6IDE7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsgaSsrKSB7CisgICAgQVNTRVJUKGV4ZWMpOwor
ICAgIENhbGxGcmFtZSogZnJhbWUgPSBleGVjLT52bSgpLnRvcENhbGxGcmFtZTsKKyAgICBTdGFj
a0l0ZXJhdG9yIGl0ZXIgPSBmcmFtZS0+YmVnaW4oKTsKKyAgICBmb3IgKCsraXRlcjsgaXRlciAh
PSBmcmFtZS0+ZW5kKCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlcikgewogICAgICAgICAvLyBU
aGlzIGVhcmx5IGV4aXQgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIG91ciBvbGQgYmVoYXZpb3Vy
CiAgICAgICAgIC8vIGJ1dCB0aGUgc3RhY2sgdHJhY2Ugd2UgcHJvZHVjZSBub3cgaXMgY29tcGxl
dGUgYW5kIGhhbmRsZXMgYWxsCiAgICAgICAgIC8vIHdheXMgaW4gd2hpY2ggY29kZSBtYXkgYmUg
cnVubmluZwotICAgICAgICBpZiAoIXN0YWNrVHJhY2VbaV0uY2FsbGVlICYmIGZyYW1lcy5zaXpl
KCkpCisgICAgICAgIGlmICghaXRlci0+Y2FsbGVlKCkgJiYgZnJhbWVzLnNpemUoKSkKICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWUgPSBzdGFja1RyYWNl
W2ldLmZyaWVuZGx5RnVuY3Rpb25OYW1lKGV4ZWMpOwotICAgICAgICBmcmFtZXMuYXBwZW5kKFNj
cmlwdENhbGxGcmFtZShmdW5jdGlvbk5hbWUsIHN0YWNrVHJhY2VbaV0uc291cmNlVVJMLCBzdGFj
a1RyYWNlW2ldLmxpbmUoKSwgc3RhY2tUcmFjZVtpXS5jb2x1bW4oKSkpOworICAgICAgICBmcmFt
ZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShpdGVyLT5mdW5jdGlvbk5hbWUoKSwgaXRlci0+c291
cmNlVVJMKCksIGl0ZXItPmxpbmUoKSwgaXRlci0+Y29sdW1uKCkpKTsKICAgICB9Ci0KICAgICBy
ZXR1cm4gU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoZnJhbWVzKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204831</attachid>
            <date>2013-06-17 09:51:10 -0700</date>
            <delta_ts>2013-06-17 11:31:13 -0700</delta_ts>
            <desc>C++ idiomatic patch as a delta from rolled out patch</desc>
            <filename>deltac.patch</filename>
            <type>text/plain</type>
            <size>21562</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxMy0wNi0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Um9sbGluZyByMTUxNDU2LCByMTUxNDIwIGJhY2sgaW4gd2l0aCBzb21lIGZpeGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzkwLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBjaGFuZ2VzIG9u
IHRvcCBvZiB0aGUgb2xkIHBhdGNoOgorICAgICAgICAtIFJlbmFtZWQgQ2FsbEZyYW1lOjpiZWdp
bkF0KCkgdG8gQ2FsbEZyYW1lOjpmaW5kKCksIGFuZCBhbHNvIHByb3ZpZGUKKyAgICAgICAgICBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIENhbGxGcmFtZSogdG8gc2VhcmNoIGZvci4KKworICAgICAg
ICAgIFRoZXJlIGFyZSAzIHR5cGVzIG9mIHVzZXJzIG9mIHRoZSBTdGFja0l0ZXJhdG9yLiBXZSBu
ZWVkIHRvIGNhdGVyCisgICAgICAgICAgdG8gZWFjaCBvZiB0aGVzZSBhcyBmb2xsb3dzOgorCisg
ICAgICAgICAgMS4gVXNlcnMgd2hvIHdhbnQgYSBzdGFjayB0cmFjZQorICAgICAgICAgICAgIC0g
SGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHZtLnRvcENhbGxGcmFtZS4KKyAg
ICAgICAgICAgICAtIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUgU3RhY2tJdGVyYXRvciBhcyBmb2xs
b3dzOgorICAgICAgICAgICAgICAgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gdm0udG9wQ2FsbEZy
YW1lLT5iZWdpbigpOworCisgICAgICAgICAgMi4gVXNlcnMgd2hvIHdhbnQgdGhlaXIgY2FsbGVy
IGZyYW1lCisgICAgICAgICAgICAgLSBIZXJlIHdlIG5lZWQgdG8gc3RhcnQgaXRlcmF0aW5nIGZy
b20gdGhlIHNwZWNpZmllZCBDYWxsRnJhbWUqLgorICAgICAgICAgICAgIC0gVG8gZG8gdGhpcywg
Y3JlYXRlIHRoZSBTdGFja0l0ZXJhdG9yIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICBT
dGFja0l0ZXJhdG9yIGl0ZXIgPSBjYWxsRnJhbWUtPmJlZ2luKCk7CisKKyAgICAgICAgICAzLiBV
c2VycyB3aG8gd2FudCB0aGUgZnJhbWUgb2YgYSBzcGVjaWZpYyBKU0Z1bmN0aW9uIG9iamVjdAor
ICAgICAgICAgICAgIC0gSGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGl0ZXJhdGluZyBmcm9tIHZtLnRv
cENhbGxGcmFtZSBhbmQgZmluZAorICAgICAgICAgICAgICAgdGhlIGZyYW1lIHRoYXQgaGFzIGEg
Y2FsbGVlIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgSlNGdW5jdGlvbiouCisgICAgICAgICAgICAg
LSBUbyBkbyB0aGlzLCBjcmVhdGUgdGhlIFN0YWNrSXRlcmF0b3IgYXMgZm9sbG93czoKKyAgICAg
ICAgICAgICAgICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmZpbmQoZnVuY3Rpb25PYmop
OworCisgICAgICAgICAgVGhlIHByZXZpb3VzIGxheW91dCB0ZXN0IGZhaWx1cmVzIHdlcmUgZHVl
IHRvIGNvbmZsYXRpb24gb2YgY2FzZSAxCisgICAgICAgICAgYW5kIDIuIFRoZXkgYXJlIG5vdyBo
YW5kbGVkIGFwcHJvcHJpYXRlbHkuCisKKyAgICAgICAgLSBGaXhlZCBhIHByZS1leGlzdGluZyBs
YXlvdXQgdGVzdCBjcmFzaCBpbgorICAgICAgICAgIGluc3BlY3Rvci9wcm9maWxlci9jcHUtcHJv
ZmlsZXItYWdlbnQtY3Jhc2gtb24tc3RhcnQuaHRtbC4KKworICAgICAgICAqIEFQSS9KU0NvbnRl
eHRSZWYuY3BwOgorICAgICAgICAoSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKToKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OnNldElubGluZUNhbGxGcmFtZSk6CisgICAgICAgIChFeGVj
U3RhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lOjpiZWdpbik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Zmlu
ZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6ZW5kKToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkdW1wUmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZSk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRl
YnVnKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSW50
ZXJwcmV0ZXIpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6U3RhY2tJdGVyYXRvcik6CisgICAgICAg
IChKU0M6OlN0YWNrSXRlcmF0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFj
a0l0ZXJhdG9yOjpmaW5kKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmNv
ZGVUeXBlKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFt
ZSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpzb3VyY2VVUkwpOgorICAg
ICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6dG9TdHJpbmcpOgorICAgICAgICAoSlND
OjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpT
dGFja0l0ZXJhdG9yOjpGcmFtZTo6bGluZSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6
OkZyYW1lOjpjb2x1bW4pOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6YXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OnJldHJpZXZlRXhw
cmVzc2lvbkluZm8pOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFtZTo6bG9naWNh
bEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmxvZ2ljYWxDYWxs
ZXJGcmFtZSk6CisgICAgICAgIChKU0M6OmppdFR5cGVOYW1lKToKKyAgICAgICAgKEpTQzo6cHJp
bnRJbmRlbnRzKToKKyAgICAgICAgKEpTQzo6cHJpbnRpZik6CisgICAgICAgIChKU0M6OlN0YWNr
SXRlcmF0b3I6OkZyYW1lOjpwcmludCk6CisgICAgICAgIChkZWJ1Z1ByaW50Q2FsbEZyYW1lKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAo
U3RhY2tJdGVyYXRvcjo6RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjpGcmFt
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVyYXRvcjo6RnJhbWU6OmlzSlNGcmFt
ZSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6OkZyYW1lOjpjYWxsRnJhbWUpOgorICAg
ICAgICAqIGludGVycHJldGVyL1N0YWNrSXRlcmF0b3JQcml2YXRlLmg6IEFkZGVkLgorICAgICAg
ICAoU3RhY2tJdGVyYXRvcik6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6Om9wZXJhdG9y
Kik6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAo
SlNDOjpTdGFja0l0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6U3RhY2tJdGVy
YXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlN0YWNrSXRlcmF0b3I6Om9wZXJhdG9y
KyspOgorICAgICAgICAoSlNDOjpTdGFja0l0ZXJhdG9yOjplbmQpOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgIChmdW5jdGlvbkpTQ1N0YWNrKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9m
aWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFy
ZW50Rm9yQ29uc29sZVN0YXJ0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlTm9kZS5oOgor
ICAgICAgICAoUHJvZmlsZU5vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OnJldHJpZXZlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNGdW5j
dGlvbjo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAgKEpTQzo6c2tpcE92ZXJCb3VuZEZ1bmN0
aW9ucyk6CisgICAgICAgIChKU0M6OnJldHJpZXZlQ2FsbGVyRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9u
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpk
ZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b0dldHRlcik6CisgICAgICAg
IChKU0M6Omdsb2JhbEZ1bmNQcm90b1NldHRlcik6CisgICAgICAgICogcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90
eXBlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorCiAyMDEzLTA2LTExICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUm9sbGVkIGJhY2sg
aW4gPGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE1MTM2Mz4uCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw4ICszMjcsOSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDCiAgICAgU3RyaW5nQnVpbGRlciB0cmFjZTsKICAg
ICB0cmFjZS5hcHBlbmRMaXRlcmFsKCItLT4gU3RhY2sgdHJhY2U6XG4iKTsKIAorICAgIENhbGxG
cmFtZSogZnJhbWUgPSBleGVjLT52bSgpLnRvcENhbGxGcmFtZTsKICAgICBpbnQgaSA9IDA7Ci0g
ICAgZm9yIChTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigpOyBpdGVyICE9IGV4ZWMt
PmVuZCgpOyArK2l0ZXIsICsraSkKKyAgICBmb3IgKFN0YWNrSXRlcmF0b3IgaXRlciA9IGZyYW1l
LT5iZWdpbigpOyBpdGVyICE9IGZyYW1lLT5lbmQoKTsgKytpdGVyLCArK2kpCiAgICAgICAgIHRy
YWNlLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiICAgICVpICAgJXNcbiIsIGksIGl0ZXItPnRvU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSkpOwogICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCB0cmFjZS50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRS
ZWYuY3BwCShyZXZpc2lvbiAxNTE0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSw5ICsyMDUsMTAgQEAgSlNTdHJp
bmdSZWYgSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKEpTQwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY3R4KTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgQ2FsbEZyYW1lKiBmcmFtZSA9IGV4ZWMtPnZtKCkudG9wQ2FsbEZy
YW1lOwogICAgIHNpemVfdCBpID0gMDsKICAgICBBU1NFUlQobWF4U3RhY2tTaXplKTsKLSAgICBm
b3IgKFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7IGl0ZXIgIT0gZXhlYy0+ZW5k
KCkgJiYgbWF4U3RhY2tTaXplLS07ICsraXRlciwgKytpKSB7CisgICAgZm9yIChTdGFja0l0ZXJh
dG9yIGl0ZXIgPSBmcmFtZS0+YmVnaW4oKTsgaXRlciAhPSBmcmFtZS0+ZW5kKCkgJiYgbWF4U3Rh
Y2tTaXplLS07ICsraXRlciwgKytpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBjYWxsZWUgPSBpdGVy
LT5jYWxsZWUoKTsKICAgICAgICAgLy8gSWYgY2FsbGVlIGlzIHVua25vd24sIGJ1dCB3ZSd2ZSBu
b3QgYWRkZWQgYW55IGZyYW1lIHlldCwgd2Ugc2hvdWxkCiAgICAgICAgIC8vIHN0aWxsIGFkZCB0
aGUgZnJhbWUsIGJlY2F1c2Ugc29tZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUgdXMgYXJndW1l
bnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywyNCArOTcsNCBAQCBS
ZWdpc3RlciogQ2FsbEZyYW1lOjpmcmFtZUV4dGVudEludGVybmFsCiAgICAgcmV0dXJuIHJlZ2lz
dGVycygpICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKIH0KIAotU3RhY2tJdGVy
YXRvciBDYWxsRnJhbWU6OmJlZ2luKFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikK
LXsKLSAgICBpZiAoIXRoaXMpCi0gICAgICAgIHJldHVybiBTdGFja0l0ZXJhdG9yOjplbXB0eSgp
OwotCi0gICAgU3RhY2tJdGVyYXRvciBpdGVyKCZ2bSgpKTsKLSAgICBpdGVyLmJlZ2luQXQodGhp
cywgZmlsdGVyKTsKLSAgICByZXR1cm4gaXRlcjsKLX0KLQotU3RhY2tJdGVyYXRvciBDYWxsRnJh
bWU6OmJlZ2luQXQoSlNGdW5jdGlvbiogY2FsbGVlRnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6
OkZyYW1lRmlsdGVyIGZpbHRlcikKLXsKLSAgICBpZiAoIXRoaXMpCi0gICAgICAgIHJldHVybiBT
dGFja0l0ZXJhdG9yOjplbXB0eSgpOwotCi0gICAgU3RhY2tJdGVyYXRvciBpdGVyKCZ2bSgpKTsK
LSAgICBpdGVyLmJlZ2luQXQoY2FsbGVlRnVuY3Rpb25PYmosIGZpbHRlcik7Ci0gICAgcmV0dXJu
IGl0ZXI7ICAgIAotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTE0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw5ICsy
NzgsOSBAQCBuYW1lc3BhY2UgSlNDICB7CiAjZW5kaWYKICAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZU5vRmxhZ3MoKSB7IHJldHVybiBjYWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2FsbEZy
YW1lRmxhZygpOyB9CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tJdGVyYXRvciBi
ZWdpbihTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciA9IG51bGxwdHIpOwotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBTdGFja0l0ZXJhdG9yIGJlZ2luQXQoSlNGdW5jdGlvbiogY2FsbGVlRnVu
Y3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyID0gbnVsbHB0cik7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrSXRlcmF0b3I6OkZyYW1lKiBlbmQoKSB7IHJldHVybiBT
dGFja0l0ZXJhdG9yOjplbmQoKTsgfSAKKyAgICAgICAgaW5saW5lIFN0YWNrSXRlcmF0b3IgYmVn
aW4oU3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICAgICAgaW5saW5l
IFN0YWNrSXRlcmF0b3IgZmluZChKU0Z1bmN0aW9uKiBjYWxsZWVGdW5jdGlvbk9iaiwgU3RhY2tJ
dGVyYXRvcjo6RnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKKyAgICAgICAgaW5saW5lIFN0YWNrSXRl
cmF0b3I6OkZyYW1lKiBlbmQoKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25z
dCBpbnRwdHJfdCBIb3N0Q2FsbEZyYW1lRmxhZyA9IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgJKHJldmlzaW9u
IDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsxNjgsMjUgQEAgaW5saW5lIHVuc2ln
bmVkIENhbGxGcmFtZTo6bG9jYXRpb25Bc0NvZAogICAgIHJldHVybiBMb2NhdGlvbjo6ZGVjb2Rl
KGxvY2F0aW9uQXNSYXdCaXRzKCkpOwogfQogCitpbmxpbmUgU3RhY2tJdGVyYXRvciBDYWxsRnJh
bWU6OmJlZ2luKFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKK3sKKyAgICBBU1NF
UlQodGhpcyk7CisgICAgcmV0dXJuIFN0YWNrSXRlcmF0b3IodGhpcywgZmlsdGVyKTsKK30KKwor
aW5saW5lIFN0YWNrSXRlcmF0b3IgQ2FsbEZyYW1lOjpmaW5kKEpTRnVuY3Rpb24qIGNhbGxlZUZ1
bmN0aW9uT2JqLCBTdGFja0l0ZXJhdG9yOjpGcmFtZUZpbHRlciBmaWx0ZXIpCit7CisgICAgQVNT
RVJUKHRoaXMpOworICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IFN0YWNrSXRlcmF0b3IodGhpcywg
ZmlsdGVyKTsKKyAgICBpdGVyLmZpbmQoY2FsbGVlRnVuY3Rpb25PYmopOworICAgIHJldHVybiBp
dGVyOworfQorCitpbmxpbmUgU3RhY2tJdGVyYXRvcjo6RnJhbWUqIENhbGxGcmFtZTo6ZW5kKCkK
K3sKKyAgICByZXR1cm4gU3RhY2tJdGVyYXRvcjo6ZW5kKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gQ2FsbEZyYW1lSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE1
MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMCw4ICs0MTAsMTEgQEAgdm9pZCBJbnRlcnByZXRlcjo6
ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgICAgICBkYXRhTG9nRigiW1JldHVybkpJVFBDXSAg
ICAgICAgICAgICAgfCAlMTBwIHwgJXAgXG4iLCBpdCwgcGMuaml0UmV0dXJuQWRkcmVzcygpLnZh
bHVlKCkpOwogI2VuZGlmCiAgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gY2FsbEZyYW1lLT5iZWdp
bigpOwotICAgIGRhdGFMb2dGKCJbUmV0dXJuVlBDXSAgICAgICAgICAgICAgICB8ICUxMHAgfCAl
ZCAobGluZSAlZClcbiIsIGl0LCBpdGVyLT5ieXRlY29kZU9mZnNldCgpLCBpdGVyLT5saW5lKCkp
OwotICAgICsraXQ7CisgICAgKytpdGVyOworICAgIGlmIChpdGVyICE9IGNhbGxGcmFtZS0+ZW5k
KCkpIHsKKyAgICAgICAgZGF0YUxvZ0YoIltSZXR1cm5WUENdICAgICAgICAgICAgICAgIHwgJTEw
cCB8ICVkIChsaW5lICVkKVxuIiwgaXQsIGl0ZXItPmJ5dGVjb2RlT2Zmc2V0KCksIGl0ZXItPmxp
bmUoKSk7CisgICAgICAgICsraXQ7CisgICAgfQogICAgIGRhdGFMb2dGKCJbQ29kZUJsb2NrXSAg
ICAgICAgICAgICAgICB8ICUxMHAgfCAlcCBcbiIsIGl0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
KTsKICAgICArK2l0OwogICAgIGRhdGFMb2dGKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CkBA
IC01OTMsNyArNTk2LDEwIEBAIFN0cmluZyBTdGFja0ZyYW1lOjp0b1N0cmluZyhDYWxsRnJhbWUq
IGMKIHZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJhbWU+JiBy
ZXN1bHRzLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewogICAgIFZNJiB2bSA9IG1fdm07Ci0gICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWU7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWUtPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCk7Cisg
ICAgaWYgKCFjYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKwogICAgIFN0YWNrSXRlcmF0b3Ig
aXRlciA9IGNhbGxGcmFtZS0+YmVnaW4oKTsKICAgICBmb3IgKDsgaXRlciAhPSBjYWxsRnJhbWUt
PmVuZCgpICYmIG1heFN0YWNrU2l6ZS0tOyArK2l0ZXIpIHsKICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBpdGVyLT5jb2RlQmxvY2soKTsKQEAgLTY4OCw2ICs2OTQsNyBAQCBORVZFUl9J
TkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4
Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4K
ICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IDA7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52
bSgpOworICAgIEFTU0VSVChjYWxsRnJhbWUgPT0gdm0udG9wQ2FsbEZyYW1lKTsKICAgICBmb3Ig
KFN0YWNrSXRlcmF0b3IgaXRlciA9IGNhbGxGcmFtZS0+YmVnaW4oKTsgaXRlciAhPSBjYWxsRnJh
bWUtPmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgY2FsbEZyYW1lID0gaXRlci0+Y2FsbEZyYW1l
KCk7CiAgICAgICAgIGNvZGVCbG9jayA9IGl0ZXItPmNvZGVCbG9jaygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMTUxNDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywzNSArMzMsMTQgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLVN0YWNrSXRlcmF0b3I6OlN0YWNrSXRlcmF0b3IoVk0qIHZtKQotICAg
IDogbV92bSh2bSkKLSAgICAsIG1fZnJhbWUobnVsbHB0cikKLSAgICAsIG1fZmlsdGVyKG51bGxw
dHIpCitTdGFja0l0ZXJhdG9yOjpTdGFja0l0ZXJhdG9yKENhbGxGcmFtZSogZnJhbWUsIFN0YWNr
SXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKKyAgICA6IG1fZmlsdGVyKGZpbHRlcikKIHsK
LX0KLQotdm9pZCBTdGFja0l0ZXJhdG9yOjpiZWdpbkF0KENhbGxGcmFtZSogc3RhcnRGcmFtZSwg
U3RhY2tJdGVyYXRvcjo6RnJhbWVGaWx0ZXIgZmlsdGVyKQotewotICAgIGlmICghc3RhcnRGcmFt
ZSkgewotICAgICAgICBtX2ZyYW1lID0gbnVsbHB0cjsKLSAgICAgICAgbV9maWx0ZXIgPSBudWxs
cHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKCZzdGFydEZyYW1lLT52
bSgpID09IG1fdm0pOwotICAgIG1fZnJhbWUgPSBGcmFtZTo6Y3JlYXRlKHN0YXJ0RnJhbWUpOwot
ICAgIG1fZmlsdGVyID0gZmlsdGVyOwotCisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBtX2ZyYW1l
ID0gRnJhbWU6OmNyZWF0ZShmcmFtZSk7CiAgICAgbV9mcmFtZSA9IG1fZnJhbWUtPmxvZ2ljYWxG
cmFtZSgpOwogfQogCi12b2lkIFN0YWNrSXRlcmF0b3I6OmJlZ2luQXQoSlNGdW5jdGlvbiogY2Fs
bGVlRnVuY3Rpb25PYmosIFN0YWNrSXRlcmF0b3I6OkZyYW1lRmlsdGVyIGZpbHRlcikKLXsKLSAg
ICBBU1NFUlQoY2FsbGVlRnVuY3Rpb25PYmopOwotICAgIGJlZ2luQXQobV92bS0+dG9wQ2FsbEZy
YW1lLCBmaWx0ZXIpOwotICAgIGZpbmRGcmFtZUZvckZ1bmN0aW9uKGNhbGxlZUZ1bmN0aW9uT2Jq
KTsKLX0KLQogdm9pZCBTdGFja0l0ZXJhdG9yOjpnb3RvTmV4dEZyYW1lKCkKIHsKICAgICBGcmFt
ZSogZnJhbWUgPSBtX2ZyYW1lOwpAQCAtNzMsOCArNTIsOSBAQCB2b2lkIFN0YWNrSXRlcmF0b3I6
OmdvdG9OZXh0RnJhbWUoKQogICAgIG1fZnJhbWUgPSBmcmFtZTsKIH0KIAotdm9pZCBTdGFja0l0
ZXJhdG9yOjpmaW5kRnJhbWVGb3JGdW5jdGlvbihKU0Z1bmN0aW9uKiBmdW5jdGlvbk9iaikKK3Zv
aWQgU3RhY2tJdGVyYXRvcjo6ZmluZChKU0Z1bmN0aW9uKiBmdW5jdGlvbk9iaikKIHsKKyAgICBB
U1NFUlQoZnVuY3Rpb25PYmopOwogICAgIEpTT2JqZWN0KiB0YXJnZXRDYWxsZWUgPSBqc0R5bmFt
aWNDYXN0PEpTT2JqZWN0Kj4oZnVuY3Rpb25PYmopOwogICAgIHdoaWxlIChtX2ZyYW1lKSB7CiAg
ICAgICAgIGlmIChtX2ZyYW1lLT5jYWxsZWUoKSA9PSB0YXJnZXRDYWxsZWUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmgJKHJl
dmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAg
IEZyYW1lKiBsb2dpY2FsQ2FsbGVyRnJhbWUoKTsKIAogI2lmbmRlZiBOREVCVUcKLSAgICB2b2lk
IHByaW50KGludCBpbmRlbnRMZXZlbCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmlu
dChpbnQgaW5kZW50TGV2ZWwpOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvclByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvclByaXZh
dGUuaAkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrSXRlcmF0b3JQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE5ICs0NSwx
NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcj09KEZyYW1lKiBmcmFtZSkgeyByZXR1cm4g
bV9mcmFtZSA9PSBmcmFtZTsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShGcmFtZSogZnJhbWUpIHsg
cmV0dXJuIG1fZnJhbWUgIT0gZnJhbWU7IH0KICAgICB2b2lkIG9wZXJhdG9yKysoKSB7IGdvdG9O
ZXh0RnJhbWUoKTsgfQotICAgIHZvaWQgZmluZEZyYW1lRm9yRnVuY3Rpb24oSlNGdW5jdGlvbiop
OworICAgIHZvaWQgZmluZChKU0Z1bmN0aW9uKik7CiAKIHByaXZhdGU6Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3RhY2tJdGVyYXRvcihWTSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNr
SXRlcmF0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBGcmFtZUZpbHRlciA9IG51bGxwdHIpOwog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBiZWdpbkF0KENhbGxGcmFtZSogc3RhcnRGcmFt
ZSwgRnJhbWVGaWx0ZXIgPSBudWxscHRyKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGJl
Z2luQXQoSlNGdW5jdGlvbiogY2FsbGVlRnVuY3Rpb25PYmosIEZyYW1lRmlsdGVyID0gbnVsbHB0
cik7CiAgICAgc3RhdGljIEZyYW1lKiBlbmQoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgc3Rh
dGljIFN0YWNrSXRlcmF0b3IgZW1wdHkoKSB7IHJldHVybiBTdGFja0l0ZXJhdG9yKG51bGxwdHIp
OyB9Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdvdG9OZXh0RnJhbWUoKTsKIAotICAg
IFZNKiBtX3ZtOwogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIEZyYW1lRmlsdGVyIG1fZmlsdGVy
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTE0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcg
KzYwLDkgQEAgdm9pZCBQcm9maWxlR2VuZXJhdG9yOjphZGRQYXJlbnRGb3JDb25zbwogewogICAg
IFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7CiAgICAgKytpdGVyOwotICAgIENh
bGxJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBMZWdhY3lQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50
aWZpZXIoZXhlYywgaXRlci0+Y2FsbGVlKCksIGl0ZXItPnNvdXJjZVVSTCgpLCBpdGVyLT5saW5l
KCkpOworICAgIENhbGxJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAoaXRlciA9PSBleGVjLT5lbmQo
KSkKKyAgICAgICAgPyBMZWdhY3lQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoZXhlYywg
SlNWYWx1ZSgpLCBTdHJpbmcoKSwgMCkKKyAgICAgICAgOiBMZWdhY3lQcm9maWxlcjo6Y3JlYXRl
Q2FsbElkZW50aWZpZXIoZXhlYywgaXRlci0+Y2FsbGVlKCksIGl0ZXItPnNvdXJjZVVSTCgpLCBp
dGVyLT5saW5lKCkpOwogICAgIG1fY3VycmVudE5vZGUgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKGV4
ZWMsIGlkZW50aWZpZXIsIG1faGVhZC5nZXQoKSwgbV9oZWFkLmdldCgpKTsKICAgICAKICAgICBt
X2hlYWQtPmluc2VydE5vZGUobV9jdXJyZW50Tm9kZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTUxNDgxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Myw3ICsxODMsNyBAQCBDYWxsVHlwZSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0
YShKU0NlbGwqCiAKIHN0YXRpYyBKU1ZhbHVlIHJldHJpZXZlQXJndW1lbnRzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb25PYmopCiB7Ci0gICAgU3RhY2tJdGVyYXRvciBpdGVy
ID0gZXhlYy0+YmVnaW5BdChmdW5jdGlvbk9iaik7CisgICAgU3RhY2tJdGVyYXRvciBpdGVyID0g
ZXhlYy0+ZmluZChmdW5jdGlvbk9iaik7CiAgICAgcmV0dXJuIGl0ZXIgIT0gZXhlYy0+ZW5kKCkg
PyBKU1ZhbHVlKGl0ZXItPmFyZ3VtZW50cygpKSA6IGpzTnVsbCgpOwogfQogCkBAIC0yMDQsNyAr
MjA0LDcgQEAgc3RhdGljIGJvb2wgc2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyhTdGFjawogCiBzdGF0
aWMgSlNWYWx1ZSByZXRyaWV2ZUNhbGxlckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5j
dGlvbiogZnVuY3Rpb25PYmopCiB7Ci0gICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVn
aW5BdChmdW5jdGlvbk9iaiwgc2tpcE92ZXJCb3VuZEZ1bmN0aW9ucyk7CisgICAgU3RhY2tJdGVy
YXRvciBpdGVyID0gZXhlYy0+ZmluZChmdW5jdGlvbk9iaiwgc2tpcE92ZXJCb3VuZEZ1bmN0aW9u
cyk7CiAgICAgKytpdGVyOwogICAgIHJldHVybiBpdGVyICE9IGV4ZWMtPmVuZCgpICYmIGl0ZXIt
PmNhbGxlZSgpID8gaXRlci0+Y2FsbGVlKCkgOiBqc051bGwoKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE0LDcg
KzcxNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKIAogICAg
IFN0YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7CiAgICAgKytpdGVyOwotICAgIGlm
ICghdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5jYWxsRnJhbWUoKSkpCisgICAg
aWYgKChpdGVyID09IGV4ZWMtPmVuZCgpKSB8fCAhdGhpc09iamVjdC0+YWxsb3dzQWNjZXNzRnJv
bShpdGVyLT5jYWxsRnJhbWUoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPnBy
b3RvdHlwZSgpKTsKQEAgLTczMiw3ICs3MzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNQCiAKICAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigp
OwogICAgICsraXRlcjsKLSAgICBpZiAoIXRoaXNPYmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oaXRl
ci0+Y2FsbEZyYW1lKCkpKQorICAgIGlmICgoaXRlciA9PSBleGVjLT5lbmQoKSkgfHwgIXRoaXNP
YmplY3QtPmFsbG93c0FjY2Vzc0Zyb20oaXRlci0+Y2FsbEZyYW1lKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gU2V0dGluZyBfX3By
b3RvX18gdG8gYSBub24tb2JqZWN0LCBub24tbnVsbCB2YWx1ZSBpcyBzaWxlbnRseSBpZ25vcmVk
IHRvIG1hdGNoIE1vemlsbGEuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNTE0ODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50
KDApKTsKICAgICBTdGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigpOwogICAgICsraXRl
cjsKLSAgICBpZiAoIW9iamVjdC0+YWxsb3dzQWNjZXNzRnJvbShpdGVyLT5jYWxsRnJhbWUoKSkp
CisgICAgaWYgKChpdGVyID09IGV4ZWMtPmVuZCgpKSB8fCAhb2JqZWN0LT5hbGxvd3NBY2Nlc3NG
cm9tKGl0ZXItPmNhbGxGcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+cHJvdG90
eXBlKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMDYt
MTQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJvbGxpbmcgcjE1
MTQ1NiwgcjE1MTQyMCBiYWNrIGluIHdpdGggc29tZSBmaXhlcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM5MC4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAg
KiBGb3J3YXJkaW5nSGVhZGVycy9pbnRlcnByZXRlci9TdGFja0l0ZXJhdG9yLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL1N0YWNrSXRl
cmF0b3IuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlU2NyaXB0Q2FsbFN0YWNrKToKKwogMjAxMy0wNi0xMCAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNpbmcgdGhlIFN0YWNrSXRlcmF0b3Ig
Y2xhc3MuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUxNDgxKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNSw5ICsxMzUsMTMgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNT
dGF0ZQogCiAgICAgU3RhY2tJdGVyYXRvciBpdGVyID0gZXhlYy0+YmVnaW4oKTsKICAgICArK2l0
ZXI7Ci0gICAgQVNTRVJUKGl0ZXIgIT0gZXhlYy0+ZW5kKCkpOwotICAgIGltcGwoKS0+c2V0TGFz
dFNlbmRMaW5lTnVtYmVyKGl0ZXItPmxpbmUoKSk7Ci0gICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVS
TChpdGVyLT5zb3VyY2VVUkwoKSk7ICAgIAorICAgIGlmIChpdGVyICE9IGV4ZWMtPmVuZCgpKSB7
CisgICAgICAgIGltcGwoKS0+c2V0TGFzdFNlbmRMaW5lTnVtYmVyKGl0ZXItPmxpbmUoKSk7Cisg
ICAgICAgIGltcGwoKS0+c2V0TGFzdFNlbmRVUkwoaXRlci0+c291cmNlVVJMKCkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGltcGwoKS0+c2V0TGFzdFNlbmRMaW5lTnVtYmVyKDApOworICAgICAg
ICBpbXBsKCktPnNldExhc3RTZW5kVVJMKFN0cmluZygpKTsKKyAgICB9CiAKICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFjdG9y
eS5jcHAJKHJldmlzaW9uIDE1MTQ4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw5IEBA
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHQKIHsKICAgICBWZWN0b3I8
U2NyaXB0Q2FsbEZyYW1lPiBmcmFtZXM7CiAgICAgaWYgKEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSkgewotICAgICAgICBmb3IgKFN0
YWNrSXRlcmF0b3IgaXRlciA9IGV4ZWMtPmJlZ2luKCk7IGl0ZXIgIT0gZXhlYy0+ZW5kKCkgJiYg
bWF4U3RhY2tTaXplLS07ICsraXRlcikKKyAgICAgICAgQVNTRVJUKGV4ZWMpOworICAgICAgICBD
YWxsRnJhbWUqIGZyYW1lID0gZXhlYy0+dm0oKS50b3BDYWxsRnJhbWU7CisgICAgICAgIGZvciAo
U3RhY2tJdGVyYXRvciBpdGVyID0gZnJhbWUtPmJlZ2luKCk7IGl0ZXIgIT0gZnJhbWUtPmVuZCgp
ICYmIG1heFN0YWNrU2l6ZS0tOyArK2l0ZXIpCiAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKFNj
cmlwdENhbGxGcmFtZShpdGVyLT5mdW5jdGlvbk5hbWUoKSwgaXRlci0+c291cmNlVVJMKCksIGl0
ZXItPmxpbmUoKSwgaXRlci0+Y29sdW1uKCkpKTsKICAgICB9CiAgICAgaWYgKGZyYW1lcy5pc0Vt
cHR5KCkgJiYgIWVtcHR5SXNBbGxvd2VkKSB7CkBAIC03Miw4ICs3NCwxMCBAQCBQYXNzUmVmUHRy
PFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0CiBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbWF4
U3RhY2tTaXplKQogewogICAgIFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKLSAgICBT
dGFja0l0ZXJhdG9yIGl0ZXIgPSBleGVjLT5iZWdpbigpOwotICAgIGZvciAoKytpdGVyOyBpdGVy
ICE9IGV4ZWMtPmVuZCgpICYmIG1heFN0YWNrU2l6ZS0tOyArK2l0ZXIpIHsKKyAgICBBU1NFUlQo
ZXhlYyk7CisgICAgQ2FsbEZyYW1lKiBmcmFtZSA9IGV4ZWMtPnZtKCkudG9wQ2FsbEZyYW1lOwor
ICAgIFN0YWNrSXRlcmF0b3IgaXRlciA9IGZyYW1lLT5iZWdpbigpOworICAgIGZvciAoKytpdGVy
OyBpdGVyICE9IGZyYW1lLT5lbmQoKSAmJiBtYXhTdGFja1NpemUtLTsgKytpdGVyKSB7CiAgICAg
ICAgIC8vIFRoaXMgZWFybHkgZXhpdCBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gb3VyIG9sZCBi
ZWhhdmlvdXIKICAgICAgICAgLy8gYnV0IHRoZSBzdGFjayB0cmFjZSB3ZSBwcm9kdWNlIG5vdyBp
cyBjb21wbGV0ZSBhbmQgaGFuZGxlcyBhbGwKICAgICAgICAgLy8gd2F5cyBpbiB3aGljaCBjb2Rl
IG1heSBiZSBydW5uaW5nCg==
</data>
<flag name="review"
          id="226239"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>