<?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>54290</bug_id>
          
          <creation_ts>2011-02-11 10:03:52 -0800</creation_ts>
          <short_desc>rename Node::isContentEditable and all call sites to rendererIsEditable</short_desc>
          <delta_ts>2011-03-25 12:54:01 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>54292</dependson>
    
    <dependson>56421</dependson>
          <blocked>50636</blocked>
    
    <blocked>52058</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chang Shu">cshu</reporter>
          <assigned_to name="Chang Shu">cshu</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>349817</commentid>
    <comment_count>0</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-02-11 10:03:52 -0800</bug_when>
    <thetext>This effort is to differentiate Node::isContentEditable, which is for internal use, from HTMLElement::isContentEditable, which is a DOM interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349842</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-11 10:53:18 -0800</bug_when>
    <thetext>The prefix “fast” might be OK, but I think it has too positive a connotation. The fastGetAttribute function can almost always be used and is almost always faster. But fastIsContentEditable will often give you the wrong result so may need a less positive name.

Maybe isContentEditableWithoutStyleCalc (ugly, abbreviates a word, but more precise).

It would help if we had a clearer sense of when it’s safe to call Node::isContentEditable and when it will give an incorrect result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349844</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-11 10:55:16 -0800</bug_when>
    <thetext>Another possible name that’s not perfect but might be better than fastIsContentEditable would be rendererIsContentEditable. It communicates that this function is just a shortcut to ask the renderer this question and so is only safe to call when the renderer is known to be up to date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369059</commentid>
    <comment_count>3</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-17 08:51:40 -0700</bug_when>
    <thetext>do we need this any more after 56421 is done?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369088</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-17 09:43:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; do we need this any more after 56421 is done?

We do.  All I did in the bug 56421 was to combine Node::isContentEditable, HTMLElement::isContentEditable, and Document::isContentEditable into one function and made it iterative.  It doesn&apos;t solve the underlying problem we&apos;re trying to solve in this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369112</commentid>
    <comment_count>5</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-17 10:07:35 -0700</bug_when>
    <thetext>&gt; We do.  All I did in the bug 56421 was to combine Node::isContentEditable, HTMLElement::isContentEditable, and Document::isContentEditable into one function and made it iterative.  It doesn&apos;t solve the underlying problem we&apos;re trying to solve in this bug.

just want to confirm the following things to do:
1. rename node::isContentEditable to another name. this should be style-dependent.
2. add isContentEditable back to HTMLElement. This should be dom-dependent only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369193</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-17 11:57:39 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; 1. rename node::isContentEditable to another name. this should be style-dependent.
&gt; 2. add isContentEditable back to HTMLElement. This should be dom-dependent only.

I&apos;m not sure what you mean by 2 but HTMLElement::isContentEditable should be calling the function renamed in 1.  i.e. 2 should look like:

bool HTMLElement::isContentEditable()
{
    document()-&gt;updateStyleIfNeeded();
    return rendererIsEditable();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369209</commentid>
    <comment_count>7</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-17 12:16:17 -0700</bug_when>
    <thetext>&gt; &gt; 1. rename node::isContentEditable to another name. this should be style-dependent.
&gt; &gt; 2. add isContentEditable back to HTMLElement. This should be dom-dependent only.
&gt; 
&gt; I&apos;m not sure what you mean by 2 but HTMLElement::isContentEditable should be calling the function renamed in 1.  i.e. 2 should look like:
&gt; 
&gt; bool HTMLElement::isContentEditable()
&gt; {
&gt;     document()-&gt;updateStyleIfNeeded();
&gt;     return rendererIsEditable();
&gt; }

What I thought was that the above is part of step 1 (Not sure if we like to call updateStyle). So the JS interface won&apos;t break. 
As the next step, we should remove the call to Node::rendererIsEditable() in HTMLElement::isContentEditable (because it&apos;s not reliable) and check the DOM properties. The code may look like:
value = contentEditable();
if (value == &quot;inherit&quot;)
    return parent-&gt;contentEditable;
else
    return value;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369215</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-17 12:32:19 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; What I thought was that the above is part of step 1 (Not sure if we like to call updateStyle). So the JS interface won&apos;t break. 
&gt; As the next step, we should remove the call to Node::rendererIsEditable() in HTMLElement::isContentEditable (because it&apos;s not reliable) and check the DOM properties. The code may look like:
&gt; value = contentEditable();
&gt; if (value == &quot;inherit&quot;)
&gt;     return parent-&gt;contentEditable;
&gt; else
&gt;     return value;

Why?  That value must match that of isContentEditable, right?  Otherwise, WebCore treats the node as editable while script treats it non-editable.  How does that make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369234</commentid>
    <comment_count>9</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-17 13:04:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; What I thought was that the above is part of step 1 (Not sure if we like to call updateStyle). So the JS interface won&apos;t break. 
&gt; &gt; As the next step, we should remove the call to Node::rendererIsEditable() in HTMLElement::isContentEditable (because it&apos;s not reliable) and check the DOM properties. The code may look like:
&gt; &gt; value = contentEditable();
&gt; &gt; if (value == &quot;inherit&quot;)
&gt; &gt;     return parent-&gt;contentEditable;
&gt; &gt; else
&gt; &gt;     return value;
&gt; 
&gt; Why?  That value must match that of isContentEditable, right?  Otherwise, WebCore treats the node as editable while script treats it non-editable.  How does that make sense?

I thought we had some issues (performance?) by calling updateStyle in isContentEditable. Maybe it&apos;s no longer a problem after bug 54292? :)
Then, you are right. No need to call DOM properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369244</commentid>
    <comment_count>10</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-17 13:10:38 -0700</bug_when>
    <thetext>I saw the following code in WebCore/dom/Node.idl. Why is this necessary? This code prevents us renaming Node::isContentEdiable on Mac without doing something extra.

#if defined(LANGUAGE_OBJECTIVE_C) &amp;&amp; LANGUAGE_OBJECTIVE_C
        // Objective-C extensions
        readonly attribute boolean          isContentEditable;
#endif /* defined(LANGUAGE_OBJECTIVE_C) */</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369263</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-17 13:39:09 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I thought we had some issues (performance?) by calling updateStyle in isContentEditable. Maybe it&apos;s no longer a problem after bug 54292? :)
&gt; Then, you are right. No need to call DOM properties.

I don&apos;t think so.  We have security and performance implications if we were to add updateLayout in modify isContentEditable but if we won&apos;t have those problems if we&apos;re doing this rename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369304</commentid>
    <comment_count>12</comment_count>
      <attachid>86094</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-17 14:36:05 -0700</bug_when>
    <thetext>Created attachment 86094
fix patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369305</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-17 14:38:15 -0700</bug_when>
    <thetext>Attachment 86094 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/editing/IndentOutdentCommand.cpp:123:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/editing/htmlediting.cpp:760:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 2 in 51 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369318</commentid>
    <comment_count>14</comment_count>
      <attachid>86094</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-17 14:52:17 -0700</bug_when>
    <thetext>Comment on attachment 86094
fix patch

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

&gt; Source/WebCore/dom/Node.h:333
&gt; +#if PLATFORM(MAC)
&gt; +    // Objective-C extensions
&gt; +    bool isContentEditable() const { return rendererIsContentEditable(Editable); }
&gt; +#endif

This is OK for the short term, but not great.

Longer term the auto-generated isContentEditable method should be removed. If we implement custom methods for ObjC, then the method could go into a file such as DOMNodeCustom.mm. Or the method can go in the DOMNodeExtensions section of DOM.mm, where the boundingBox and lineBoxRects methods are.

The only problem I can think of with that is that the if we move the method to DOMNodeExtensions, then the property declaration would need to move from the DOMNode.h and DOMHTMLElement.h headers into the DOMExtensions.h header, which might break compilation of some existing code. It would be fine at runtime, just a problem at compile time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369320</commentid>
    <comment_count>15</comment_count>
      <attachid>86094</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-17 14:53:54 -0700</bug_when>
    <thetext>Comment on attachment 86094
fix patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:664
&gt; -        if (body &amp;&amp; body-&gt;isContentEditable())
&gt; +        if (body &amp;&amp; body-&gt;rendererIsContentEditable())

rendererIsContentEditable might be a verbose.  How about rendererIsEditable/rendererIsRichlyEditable?

&gt; Source/WebCore/dom/Document.cpp:322
&gt; -    ASSERT(node-&gt;isContentEditable());
&gt; +    ASSERT(node-&gt;rendererIsContentEditable());

I don&apos;t think this is right.  acceptsEditingFocus is called in Document::setFocusedNode immediately after dispatching focusoutEvent and DOMFocusOutEvent, both of which could modify DOM.  We should be calling isContentEditable() here so that style recalc. is trigged if needed.

&gt; Source/WebCore/dom/Node.cpp:743
&gt; -    return isContentEditable();
&gt; +    return rendererIsContentEditable();

This function is called in FocusController::setFocusedNode. For the same reason above, we need to be calling isContentEditable.

&gt; Source/WebCore/dom/Node.h:333
&gt; +#if PLATFORM(MAC)
&gt; +    // Objective-C extensions
&gt; +    bool isContentEditable() const { return rendererIsContentEditable(Editable); }
&gt; +#endif

I don&apos;t think this is right.  It needs to be a virtual function because we&apos;re overriding it in HTMLElement.  But I think a cleaner implementation is to add non-virtual Node::isContentEditable in all platforms.

&gt; Source/WebCore/html/HTMLElement.cpp:663
&gt; +bool HTMLElement::isContentEditable() const
&gt; +{
&gt; +    return rendererIsContentEditable();
&gt; +}

As I commented above, the correctness of this patch depends on the final version of this function that triggers style recalc. For that reason, I think we should do the rename and fix isContentEditable in one patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369328</commentid>
    <comment_count>16</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-17 15:01:43 -0700</bug_when>
    <thetext>&gt; This is OK for the short term, but not great.
&gt; 
&gt; Longer term the auto-generated isContentEditable method should be removed. If we implement custom methods for ObjC, then the method could go into a file such as DOMNodeCustom.mm. Or the method can go in the DOMNodeExtensions section of DOM.mm, where the boundingBox and lineBoxRects methods are.
&gt; 
&gt; The only problem I can think of with that is that the if we move the method to DOMNodeExtensions, then the property declaration would need to move from the DOMNode.h and DOMHTMLElement.h headers into the DOMExtensions.h header, which might break compilation of some existing code. It would be fine at runtime, just a problem at compile time.

Thanks, I was thinking doing this but I chose a lazy approach. :) I will do the custom method. Would it be possible to remove this support completely?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369334</commentid>
    <comment_count>17</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-17 15:05:27 -0700</bug_when>
    <thetext>Attachment 86094 did not build on win:
Build output: http://queues.webkit.org/results/8187942</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369336</commentid>
    <comment_count>18</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-17 15:10:20 -0700</bug_when>
    <thetext>&gt; rendererIsContentEditable might be a verbose.  How about rendererIsEditable/rendererIsRichlyEditable?

any other votes? :)

&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:322
&gt; &gt; -    ASSERT(node-&gt;isContentEditable());
&gt; &gt; +    ASSERT(node-&gt;rendererIsContentEditable());
&gt; 
&gt; I don&apos;t think this is right.  acceptsEditingFocus is called in Document::setFocusedNode immediately after dispatching focusoutEvent and DOMFocusOutEvent, both of which could modify DOM.  We should be calling isContentEditable() here so that style recalc. is trigged if needed.
&gt; 
&gt; &gt; Source/WebCore/dom/Node.cpp:743
&gt; &gt; -    return isContentEditable();
&gt; &gt; +    return rendererIsContentEditable();
&gt; 
&gt; This function is called in FocusController::setFocusedNode. For the same reason above, we need to be calling isContentEditable.
&gt; 
&gt; &gt; Source/WebCore/dom/Node.h:333
&gt; &gt; +#if PLATFORM(MAC)
&gt; &gt; +    // Objective-C extensions
&gt; &gt; +    bool isContentEditable() const { return rendererIsContentEditable(Editable); }
&gt; &gt; +#endif
&gt; 
&gt; I don&apos;t think this is right.  It needs to be a virtual function because we&apos;re overriding it in HTMLElement.  But I think a cleaner implementation is to add non-virtual Node::isContentEditable in all platforms.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLElement.cpp:663
&gt; &gt; +bool HTMLElement::isContentEditable() const
&gt; &gt; +{
&gt; &gt; +    return rendererIsContentEditable();
&gt; &gt; +}
&gt; 
&gt; As I commented above, the correctness of this patch depends on the final version of this function that triggers style recalc. For that reason, I think we should do the rename and fix isContentEditable in one patch.

For the comments above, the goal of this patch is to do the change literally without fixing any existing issues. If this patch does not break anything, I think we can split the work of renaming and fixing bugs. The updated test results should be included if I fix any existing issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369342</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-17 15:19:23 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; As I commented above, the correctness of this patch depends on the final version of this function that triggers style recalc. For that reason, I think we should do the rename and fix isContentEditable in one patch.
&gt; 
&gt; For the comments above, the goal of this patch is to do the change literally without fixing any existing issues. If this patch does not break anything, I think we can split the work of renaming and fixing bugs. The updated test results should be included if I fix any existing issues.

Okay. I guess that approach works as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370931</commentid>
    <comment_count>20</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-21 14:52:41 -0700</bug_when>
    <thetext>&gt; Longer term the auto-generated isContentEditable method should be removed. If we implement custom methods for ObjC, then the method could go into a file such as DOMNodeCustom.mm. Or the method can go in the DOMNodeExtensions section of DOM.mm, where the boundingBox and lineBoxRects methods are.
&gt; 
&gt; The only problem I can think of with that is that the if we move the method to DOMNodeExtensions, then the property declaration would need to move from the DOMNode.h and DOMHTMLElement.h headers into the DOMExtensions.h header, which might break compilation of some existing code. It would be fine at runtime, just a problem at compile time.

Would it be ok to put the method in DOM.mm but not inside the DOMExtensions section?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370936</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-21 15:02:28 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Would it be ok to put the method in DOM.mm but not inside the DOMExtensions section?

The method needs to be declared in a header as well as defined in an implementation file. The location of the definition is unimportant; the location of the declaration is important.

Does that answer your question?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371012</commentid>
    <comment_count>22</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-21 16:43:04 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; Would it be ok to put the method in DOM.mm but not inside the DOMExtensions section?
&gt; 
&gt; The method needs to be declared in a header as well as defined in an implementation file. The location of the definition is unimportant; the location of the declaration is important.
&gt; 
&gt; Does that answer your question?

Yeah, for one second, I thought the generated header file would have the declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371350</commentid>
    <comment_count>23</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-22 06:28:06 -0700</bug_when>
    <thetext>Hi, Darin, correct me if I am wrong. It looks to me the function is always declared in the generated header file (DOMNode.h) as long as isContentEditable is put in the idl file even it&apos;s custom type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371378</commentid>
    <comment_count>24</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-22 07:23:57 -0700</bug_when>
    <thetext>I guess I am a bit confused here. I added Custom to isContentEditable in Node.idl like this:
readonly attribute [Custom] boolean          isContentEditable;

But I don&apos;t see any changes in the generated .h and .mm files comparing to the ones generated without [Custom].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371625</commentid>
    <comment_count>25</comment_count>
      <attachid>86501</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-22 14:08:07 -0700</bug_when>
    <thetext>Created attachment 86501
fix patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371627</commentid>
    <comment_count>26</comment_count>
      <attachid>86501</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-22 14:09:05 -0700</bug_when>
    <thetext>Comment on attachment 86501
fix patch 2

[Custom] for ObjC is not working so I am back to the original hack for Node::isContentEditable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371646</commentid>
    <comment_count>27</comment_count>
      <attachid>86501</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-22 14:32:31 -0700</bug_when>
    <thetext>Comment on attachment 86501
fix patch 2

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

&gt; Source/WebCore/html/HTMLElement.h:61
&gt; +    virtual bool isContentEditable() const;
&gt; +

I don&apos;t think this function needs to virtual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371654</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-22 14:34:39 -0700</bug_when>
    <thetext>I guess we&apos;ll figure out what to do with objective C++ binding and replace some of call sites to call new version of isContentEditable in follow up bugs.  Is that right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371758</commentid>
    <comment_count>29</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-22 16:02:37 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; I guess we&apos;ll figure out what to do with objective C++ binding and replace some of call sites to call new version of isContentEditable in follow up bugs.  Is that right?

Yes, exactly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371760</commentid>
    <comment_count>30</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-22 16:03:17 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 86501 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86501&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLElement.h:61
&gt; &gt; +    virtual bool isContentEditable() const;
&gt; &gt; +
&gt; 
&gt; I don&apos;t think this function needs to virtual.

Right, will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371767</commentid>
    <comment_count>31</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-22 16:07:02 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; I guess we&apos;ll figure out what to do with objective C++ binding and replace some of call sites to call new version of isContentEditable in follow up bugs.  Is that right?
&gt; 
&gt; Yes, exactly.

Btw, to fix the call sites, shall we cast node to htmlelement and call isContentEditable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372321</commentid>
    <comment_count>32</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-23 12:10:30 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/html/HTMLElement.h:61
&gt; &gt; +    virtual bool isContentEditable() const;
&gt; 
&gt; I don&apos;t think this function needs to virtual.

any other comments, niwa?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372611</commentid>
    <comment_count>33</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-23 19:01:36 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; Btw, to fix the call sites, shall we cast node to htmlelement and call isContentEditable?

That doesn&apos;t sound right.  We probably need to add back Node::isContentEditable later.

(In reply to comment #32)
&gt; &gt; &gt; Source/WebCore/html/HTMLElement.h:61
&gt; &gt; &gt; +    virtual bool isContentEditable() const;
&gt; &gt; 
&gt; &gt; I don&apos;t think this function needs to virtual.
&gt; 
&gt; any other comments, niwa?

Not at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372787</commentid>
    <comment_count>34</comment_count>
      <attachid>86768</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-24 06:49:32 -0700</bug_when>
    <thetext>Created attachment 86768
fix patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373402</commentid>
    <comment_count>35</comment_count>
      <attachid>86768</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-25 01:45:09 -0700</bug_when>
    <thetext>Comment on attachment 86768
fix patch 3

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        Code optimization. No new tests.

Nit: this isn&apos;t really an optimization, right?  It&apos;s more of a refactoring.

&gt; Source/WebKit/chromium/src/WebNode.cpp:150
&gt; -    return m_private-&gt;isContentEditable();
&gt; +    return m_private-&gt;rendererIsEditable();

It&apos;s not great that WebKit code is referring to renderIsEditable.  Ideally, rendererIsEditable will be WebCore&apos;s implementation detail and won&apos;t be exposed to WebKit layer at all.  We can of course make such a change when you add updateStyleIfNeeded to isContentEditable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373441</commentid>
    <comment_count>36</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-25 04:57:24 -0700</bug_when>
    <thetext>&gt; Nit: this isn&apos;t really an optimization, right?  It&apos;s more of a refactoring.

Right, wrong wording. :)

&gt; It&apos;s not great that WebKit code is referring to renderIsEditable.  Ideally, rendererIsEditable will be WebCore&apos;s implementation detail and won&apos;t be exposed to WebKit layer at all.  We can of course make such a change when you add updateStyleIfNeeded to isContentEditable.

sure. The follow-up patch should come soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373471</commentid>
    <comment_count>37</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-25 06:23:22 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; &gt; Nit: this isn&apos;t really an optimization, right?  It&apos;s more of a refactoring.
&gt; 
&gt; Right, wrong wording. :)

Could you fix that for the landing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373478</commentid>
    <comment_count>38</comment_count>
      <attachid>86931</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-25 06:37:25 -0700</bug_when>
    <thetext>Created attachment 86931
fix wording</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373548</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-25 09:18:08 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 86931:

http/tests/websocket/tests/simple.html bug 55325 (author: abarth@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373551</commentid>
    <comment_count>40</comment_count>
      <attachid>86931</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-25 09:21:51 -0700</bug_when>
    <thetext>Comment on attachment 86931
fix wording

Clearing flags on attachment: 86931

Committed r81965: &lt;http://trac.webkit.org/changeset/81965&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373552</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-25 09:21:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373614</commentid>
    <comment_count>42</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2011-03-25 11:15:11 -0700</bug_when>
    <thetext>Hi, Ryosuke, Darin,
I still want to know you guys&apos; opinion on whether we bring back the virtual isContentEditable in Node, or cast the Node to HTMLElement in so many places.
Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373689</commentid>
    <comment_count>43</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-25 12:54:01 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Hi, Ryosuke, Darin,
&gt; I still want to know you guys&apos; opinion on whether we bring back the virtual isContentEditable in Node, or cast the Node to HTMLElement in so many places.

We should add back non-virtual isContentEditable back in Node.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86094</attachid>
            <date>2011-03-17 14:36:05 -0700</date>
            <delta_ts>2011-03-22 14:09:23 -0700</delta_ts>
            <desc>fix patch</desc>
            <filename>54290_1.patch</filename>
            <type>text/plain</type>
            <size>70158</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUyIEBACisyMDExLTAzLTE3ICBDaGFuZyBT
aHUgIDxjc2h1QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgcmVuYW1lIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlIGFuZCBhbGwgY2Fs
bCBzaXRlcyB0byBmYXN0SXNDb250ZW50RWRpdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MjkwCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9m
IHRoZSBlZmZvcnQgdG8gc2VwYXJhdGUgSlMgQVBJIEhUTUxFbGVtZW50IGlzQ29udGVudEVkaXRh
YmxlIGZyb20KKyAgICAgICAgaW50ZXJuYWwgTm9kZTo6cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJs
ZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRP
bmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphY2NlcHRzRWRpdGluZ0ZvY3VzKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNob3VsZFVzZUlucHV0TWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNhblN0YXJ0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnJvb3RFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjpyZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJl
bmRlcmVySXNDb250ZW50UmljaGx5RWRpdGFibGUpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpuZXh0UmVuZGVyZWRFZGl0YWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OmF0RWRpdGluZ0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpw
YXJlbnRFZGl0aW5nQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVwc3Ry
ZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpkb3duc3RyZWFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjppc0NhbmRpZGF0ZSk6CisgICAgICAgICogZG9tL1Bvc2l0aW9u
SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6aXNDYW5k
aWRhdGUpOgorICAgICAgICAqIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwZW5kTm9kZUNvbW1hbmQ6OkFwcGVuZE5vZGVDb21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGVuZE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGVuZE5vZGVDb21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnNOb25FZGl0YWJs
ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KToKKyAgICAgICAgKiBl
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlMaXN0SXRlbSk6CisgICAgICAgICogZWRp
dGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRGVs
ZXRhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdEZWxldGFibGVFbGVt
ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkpOgor
ICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRlbGV0ZVJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3Jh
bW1hcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp2ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Np
bmdCbG9ja1RvU3BsaXRUcmVlVG8pOgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRl
bnRQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0Fw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvVW5h
cHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6SW5zZXJ0Tm9kZUJlZm9y
ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmRv
QXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmRvVW5h
cHBseSk6CisgICAgICAgICogZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKb2luVGV4dE5vZGVzQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpKb2luVGV4dE5vZGVzQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAgKiBlZGl0
aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAq
IGVkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3Zl
Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9kZUNvbW1h
bmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVu
dEZyYWdtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGVtZW50
SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQpOgorICAgICAgICAqIGVkaXRpbmcvU3BsaXRFbGVtZW50
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRDb21tYW5kOjpleGVj
dXRlQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFw
cGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OlNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvUmVhcHBseSk6CisgICAgICAgICogZWRpdGluZy9T
cGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OmRvQXBwbHkpOgorICAg
ICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZp
c2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvV3Jh
cENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBD
b250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6
OldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6ZG9SZWFwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RFZGl0YWJs
ZVJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0RWRpdGFibGVBbmNlc3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjppc0VkaXRhYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNS
aWNobHlFZGl0YWJsZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0RWRpdGFibGVQ
b3NpdGlvbkFmdGVyUG9zaXRpb25JblJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kUmFu
Z2VUb1dyYXBwaW5nTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nTm9kZVdpdGhU
YWcpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nTm9kZU9mVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpj
YW5NZXJnZUxpc3RzKToKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6cHJldmlvdXNMZWFmV2l0aFNhbWVFZGl0YWJpbGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpwcmV2aW91c0xpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpuZXh0
TGVhZldpdGhTYW1lRWRpdGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dExpbmVQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzdGFydE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdl
YkNvcmU6OmVuZE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpzdXBwb3J0c0ZvY3Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpzZXRBY3RpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmNhblN0YXJ0U2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojp0cmVhdExpbmtBc0xpdmVGb3JF
dmVudFR5cGUpOgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgICogaHRt
bC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6c3VwcG9y
dHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6aXNDb250ZW50RWRpdGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmNvbnRlbnRFZGl0YWJsZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNhblByb2Nlc3NEcmFn
KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRF
ZGl0YWJsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBvc2l0aW9uRm9yUG9pbnRSZXNwZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhhc0xpbmVJZkVtcHR5KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNh
bkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpYmxl
UG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzRWRpdGFibGVMZWFmKToKKyAgICAgICAgKiBzdmcvU1ZHQUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorCiAy
MDExLTAzLTE3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkZWxlIFBldGVyc29uIGFuZCBFbnJpY2EgQ2FzdWNjaS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NjEsNyArNjYxLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRPbgog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgICAgICBIVE1MRWxlbWVudCog
Ym9keSA9IGRvY3VtZW50LT5ib2R5KCk7Ci0gICAgICAgIGlmIChib2R5ICYmIGJvZHktPmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChib2R5ICYmIGJvZHktPnJlbmRlcmVySXNDb250
ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICByZXR1
cm4gIWRvY3VtZW50LT5pbkRlc2lnbk1vZGUoKTsKQEAgLTY3NSw3ICs2NzUsNyBAQCBib29sIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUmVhZE9uCiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KGJveC0+bm9kZSgpKS0+cmVhZE9ubHkoKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gIW1fcmVuZGVyZXItPm5vZGUoKSB8fCAhbV9yZW5kZXJlci0+
bm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiAhbV9yZW5kZXJlci0+bm9k
ZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCktPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc09mZlNjcmVlbigpIGNvbnN0
CkBAIC0xODI5LDcgKzE4MjksNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFj
Y2Vzc2liCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBBbnl0aGluZyB0aGF0
IGlzIGNvbnRlbnQgZWRpdGFibGUgc2hvdWxkIG5vdCBiZSBpZ25vcmVkLgotICAgIC8vIEhvd2V2
ZXIsIG9uZSBjYW5ub3QganVzdCBjYWxsIG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgc2luY2Ug
dGhhdCB3aWxsIGFzayBpZiBpdHMgcGFyZW50cworICAgIC8vIEhvd2V2ZXIsIG9uZSBjYW5ub3Qg
anVzdCBjYWxsIG5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSBzaW5jZSB0aGF0IHdp
bGwgYXNrIGlmIGl0cyBwYXJlbnRzCiAgICAgLy8gYXJlIGFsc28gZWRpdGFibGUuIE9ubHkgdGhl
IHRvcCBsZXZlbCBjb250ZW50IGVkaXRhYmxlIHJlZ2lvbiBzaG91bGQgYmUgZXhwb3NlZC4KICAg
ICBpZiAobm9kZSAmJiBub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNyArMzE5LDcgQEAgc3RhdGljIFdpZGdldCog
d2lkZ2V0Rm9yTm9kZShOb2RlKiBmb2N1cwogc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1
cyhOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aXND
b250ZW50RWRpdGFibGUoKSk7CisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRp
dGFibGUoKSk7CiAKICAgICBOb2RlKiByb290ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzExLDcgKzcxMSw3IEBAIHZvaWQgTm9kZTo6ZGVwcmVj
YXRlZFBhcnNlckFkZENoaWxkKFBhc3MKIHsKIH0KIAotYm9vbCBOb2RlOjppc0NvbnRlbnRFZGl0
YWJsZShFZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwpIGNvbnN0Citib29sIE5vZGU6OnJlbmRl
cmVySXNDb250ZW50RWRpdGFibGUoRWRpdGFibGVMZXZlbCBlZGl0YWJsZUxldmVsKSBjb25zdAog
ewogICAgIGlmIChkb2N1bWVudCgpLT5pbkRlc2lnbk1vZGUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC03NDAsNyArNzQwLDcgQEAgYm9vbCBOb2RlOjppc0NvbnRlbnRFZGl0YWJsZShFZGl0
YWJsZUxldgogCiBib29sIE5vZGU6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gcmVuZGVyZXJJc0NvbnRl
bnRFZGl0YWJsZSgpOwogfQogCiBSZW5kZXJCb3gqIE5vZGU6OnJlbmRlckJveCgpIGNvbnN0CkBA
IC0xNTE0LDcgKzE1MTQsNyBAQCBpbnQgTm9kZTo6bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3QK
IC8vIGlzIG9idmlvdXNseSBtaXNwbGFjZWQuCiBib29sIE5vZGU6OmNhblN0YXJ0U2VsZWN0aW9u
KCkgY29uc3QKIHsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAocmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChy
ZW5kZXJlcigpKSB7CkBAIC0xNTkyLDcgKzE1OTIsNyBAQCBFbGVtZW50ICpOb2RlOjplbmNsb3Np
bmdCbG9ja0Zsb3dFbGVtZW50CiBFbGVtZW50KiBOb2RlOjpyb290RWRpdGFibGVFbGVtZW50KCkg
Y29uc3QKIHsKICAgICBFbGVtZW50KiByZXN1bHQgPSAwOwotICAgIGZvciAoTm9kZSogbiA9IGNv
bnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpOyBuICYmIG4tPmlzQ29udGVudEVkaXRhYmxlKCk7IG4gPSBu
LT5wYXJlbnROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG4gPSBjb25zdF9jYXN0PE5vZGUqPih0
aGlzKTsgbiAmJiBuLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCk7IG4gPSBuLT5wYXJlbnRO
b2RlKCkpIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIHJl
c3VsdCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05h
bWUoYm9keVRhZykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDgxMzg0KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDggKzMyNywxMiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVu
dCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAK
LSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaXNDb250ZW50RWRp
dGFibGUoRWRpdGFibGUpOyB9Ci0gICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKFJpY2hseUVkaXRhYmxlKTsgfQorI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAvLyBPYmplY3RpdmUtQyBleHRlbnNpb25zCisgICAgYm9vbCBpc0Nv
bnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVySXNDb250ZW50RWRpdGFibGUo
RWRpdGFibGUpOyB9CisjZW5kaWYKKyAgICBib29sIHJlbmRlcmVySXNDb250ZW50RWRpdGFibGUo
KSBjb25zdCB7IHJldHVybiByZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKEVkaXRhYmxlKTsgfQor
ICAgIGJvb2wgcmVuZGVyZXJJc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IHJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoUmljaGx5RWRpdGFibGUpOyB9CiAgICAgdmlydHVh
bCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0
IGdldFJlY3QoKSBjb25zdDsKICAgICBJbnRSZWN0IHJlbmRlclJlY3QoYm9vbCogaXNSZXBsYWNl
ZCk7CkBAIC02NjAsNyArNjY0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgZW51bSBFZGl0
YWJsZUxldmVsIHsgRWRpdGFibGUsIFJpY2hseUVkaXRhYmxlIH07Ci0gICAgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZShFZGl0YWJsZUxldmVsKSBjb25zdDsKKyAgICBib29sIHJlbmRlcmVySXNDb250
ZW50RWRpdGFibGUoRWRpdGFibGVMZXZlbCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFN0eWxlQ2hh
bmdlKFN0eWxlQ2hhbmdlVHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2
aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0
aWMgTm9kZSogbmV4dFJlbmRlcmVkRWRpdGFibGUoTm9kZSogbm9kZSkKIHsKICAgICB3aGlsZSAo
KG5vZGUgPSBub2RlLT5uZXh0TGVhZk5vZGUoKSkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRp
dGFibGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTYw
LDcgKzYwLDcgQEAgc3RhdGljIE5vZGUqIG5leHRSZW5kZXJlZEVkaXRhYmxlKE5vZGUqIAogc3Rh
dGljIE5vZGUqIHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShOb2RlKiBub2RlKQogewogICAgIHdo
aWxlICgobm9kZSA9IG5vZGUtPnByZXZpb3VzTGVhZk5vZGUoKSkpIHsKLSAgICAgICAgaWYgKCFu
b2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVySXND
b250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJl
cikKQEAgLTM0NSwxNSArMzQ1LDE1IEBAIGJvb2wgUG9zaXRpb246OmF0TGFzdEVkaXRpbmdQb3Np
dGlvbkZvck4KIGJvb2wgUG9zaXRpb246OmF0RWRpdGluZ0JvdW5kYXJ5KCkgY29uc3QKIHsKICAg
ICBQb3NpdGlvbiBuZXh0UG9zaXRpb24gPSBkb3duc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5k
YXJ5KTsKLSAgICBpZiAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBuZXh0UG9z
aXRpb24uaXNOb3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgp
ICYmIG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhbmV4dFBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIAogICAgIFBvc2l0aW9uIHByZXZQb3NpdGlvbiA9IHVwc3RyZWFtKENhbkNyb3Nz
RWRpdGluZ0JvdW5kYXJ5KTsKLSAgICBpZiAoYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgp
ICYmIHByZXZQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGF0TGFzdEVkaXRpbmdQb3NpdGlv
bkZvck5vZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAKLSAgICByZXR1cm4gbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgp
ICYmICFuZXh0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKQot
ICAgICAgICAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiBuZXh0UG9zaXRp
b24uaXNOb3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cklzQ29udGVudEVkaXRhYmxlKCkKKyAgICAgICAgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgp
ICYmICFwcmV2UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0
YWJsZSgpOwogfQogCiBOb2RlKiBQb3NpdGlvbjo6cGFyZW50RWRpdGluZ0JvdW5kYXJ5KCkgY29u
c3QKQEAgLTM2Niw3ICszNjYsNyBAQCBOb2RlKiBQb3NpdGlvbjo6cGFyZW50RWRpdGluZ0JvdW5k
YXJ5KCkgCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgTm9kZSogYm91bmRhcnkgPSBtX2FuY2hv
ck5vZGUuZ2V0KCk7Ci0gICAgd2hpbGUgKGJvdW5kYXJ5ICE9IGRvY3VtZW50RWxlbWVudCAmJiBi
b3VuZGFyeS0+cGFyZW50Tm9kZSgpICYmIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUo
KSA9PSBib3VuZGFyeS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIHdo
aWxlIChib3VuZGFyeSAhPSBkb2N1bWVudEVsZW1lbnQgJiYgYm91bmRhcnktPnBhcmVudE5vZGUo
KSAmJiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSA9PSBib3VuZGFy
eS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIGJv
dW5kYXJ5ID0gYm91bmRhcnktPnBhcmVudE5vZGUoKTsKICAgICAKICAgICByZXR1cm4gYm91bmRh
cnk7CkBAIC01MjUsMTcgKzUyNSwxNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRp
dGluZ0JvdW5kCiAgICAgLy8gRklYTUU6IFBvc2l0aW9uSXRlcmF0b3Igc2hvdWxkIHJlc3BlY3Qg
QmVmb3JlIGFuZCBBZnRlciBwb3NpdGlvbnMuCiAgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0Vmlz
aWJsZSA9IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBQb3NpdGlvbiht
X2FuY2hvck5vZGUsIGNhcmV0TWF4T2Zmc2V0KG1fYW5jaG9yTm9kZS5nZXQoKSkpIDogKnRoaXM7
CiAgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7Ci0gICAgYm9v
bCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIGJv
b2wgc3RhcnRFZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgp
OwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3RhcnROb2RlOwogICAgIGJvb2wgYm91bmRhcnlDcm9z
c2VkID0gZmFsc2U7CiAgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0U3RhcnQoKTsgY3VycmVudFBv
cy5kZWNyZW1lbnQoKSkgewogICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mu
bm9kZSgpOwogICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIGFuIGVkaXRhYmls
aXR5IGNoYW5nZSBpZiB3ZSBoYXZlbid0IG1vdmVkIHRvIGEgZGlmZmVyZW50IG5vZGUsCi0gICAg
ICAgIC8vIHRvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyBpc0NvbnRlbnRFZGl0YWJs
ZSgpLgorICAgICAgICAvLyB0byBhdm9pZCB0aGUgZXhwZW5zZSBvZiBjb21wdXRpbmcgcmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpLgogICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gbGFzdE5v
ZGUpIHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4KLSAgICAgICAg
ICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPmlzQ29udGVudEVkaXRhYmxl
KCk7CisgICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJlbnROb2RlLT5yZW5k
ZXJlcklzQ29udGVudEVkaXRhYmxlKCk7CiAgICAgICAgICAgICBpZiAoc3RhcnRFZGl0YWJsZSAh
PSBjdXJyZW50RWRpdGFibGUpIHsKICAgICAgICAgICAgICAgICBpZiAocnVsZSA9PSBDYW5ub3RD
cm9zc0VkaXRpbmdCb3VuZGFyeSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02NDcs
MTcgKzY0NywxNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91CiAg
ICAgLy8gRklYTUU6IFBvc2l0aW9uSXRlcmF0b3Igc2hvdWxkIHJlc3BlY3QgQmVmb3JlIGFuZCBB
ZnRlciBwb3NpdGlvbnMuCiAgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9IG1fYW5j
aG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBQb3NpdGlvbihtX2FuY2hvck5vZGUs
IGNhcmV0TWF4T2Zmc2V0KG1fYW5jaG9yTm9kZS5nZXQoKSkpIDogKnRoaXM7CiAgICAgUG9zaXRp
b25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7Ci0gICAgYm9vbCBzdGFydEVkaXRh
YmxlID0gc3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIGJvb2wgc3RhcnRFZGl0
YWJsZSA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpOwogICAgIE5vZGUq
IGxhc3ROb2RlID0gc3RhcnROb2RlOwogICAgIGJvb2wgYm91bmRhcnlDcm9zc2VkID0gZmFsc2U7
CiAgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0RW5kKCk7IGN1cnJlbnRQb3MuaW5jcmVtZW50KCkp
IHsgICAKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9zLm5vZGUoKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIERvbid0IGNoZWNrIGZvciBhbiBlZGl0YWJpbGl0eSBjaGFuZ2Ug
aWYgd2UgaGF2ZW4ndCBtb3ZlZCB0byBhIGRpZmZlcmVudCBub2RlLAotICAgICAgICAvLyB0byBh
dm9pZCB0aGUgZXhwZW5zZSBvZiBjb21wdXRpbmcgaXNDb250ZW50RWRpdGFibGUoKS4KKyAgICAg
ICAgLy8gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY29tcHV0aW5nIHJlbmRlcmVySXNDb250ZW50
RWRpdGFibGUoKS4KICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAg
ICAgICAgICAvLyBEb24ndCBjaGFuZ2UgZWRpdGFiaWxpdHkuCi0gICAgICAgICAgICBib29sIGN1
cnJlbnRFZGl0YWJsZSA9IGN1cnJlbnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgICAg
ICAgICAgYm9vbCBjdXJyZW50RWRpdGFibGUgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXJJc0NvbnRl
bnRFZGl0YWJsZSgpOwogICAgICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVudEVk
aXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzk5LDEwICs3OTksMTAg
QEAgYm9vbCBQb3NpdGlvbjo6aXNDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICBpZiAodG9SZW5k
ZXJCbG9jayhyZW5kZXJlciktPmhlaWdodCgpIHx8IG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShi
b2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKCFQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9u
eW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlz
VXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9h
bmNob3JOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNl
bGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSkgJiYgYXRFZGl0aW5nQm91bmRhcnkoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSAm
JiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0
RWRpdGluZ0JvdW5kYXJ5KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJu
IG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1Vz
ZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7Cisg
ICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSAm
JiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0
RWRpdGluZ0JvdW5kYXJ5KCk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5
LDcgKzE2OSw3IEBAIGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUoKSBjb24KICAg
ICAgICAgaWYgKHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5oZWlnaHQoKSB8fCBtX2FuY2hvck5v
ZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKICAgICAgICAgICAgIGlmICghUG9zaXRpb246Omhh
c1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gYXRTdGFydE9mTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlz
VXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBtX2FuY2hv
ck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0
Tm9uZShtX2FuY2hvck5vZGUpICYmIFBvc2l0aW9uKCp0aGlzKS5hdEVkaXRpbmdCb3VuZGFyeSgp
OworICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0
YWJsZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKSAm
JiBQb3NpdGlvbigqdGhpcykuYXRFZGl0aW5nQm91bmRhcnkoKTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgQXBwZW5kTm9kZUNvbW1h
bmQ6OkFwcGVuZE5vZGVDb21tYW5kKFBhcwogICAgIEFTU0VSVChtX25vZGUpOwogICAgIEFTU0VS
VCghbV9ub2RlLT5wYXJlbnROb2RlKCkpOwogCi0gICAgQVNTRVJUKG1fcGFyZW50LT5pc0NvbnRl
bnRFZGl0YWJsZSgpIHx8ICFtX3BhcmVudC0+YXR0YWNoZWQoKSk7CisgICAgQVNTRVJUKG1fcGFy
ZW50LT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkgfHwgIW1fcGFyZW50LT5hdHRhY2hlZCgp
KTsKIH0KIAogc3RhdGljIHZvaWQgc2VuZEFYVGV4dENoYW5nZWRJZ25vcmluZ0xpbmVCcmVha3Mo
Tm9kZSogbm9kZSwgQVhPYmplY3RDYWNoZTo6QVhUZXh0Q2hhbmdlIHRleHRDaGFuZ2UpCkBAIC01
Niw3ICs1Niw3IEBAIHN0YXRpYyB2b2lkIHNlbmRBWFRleHRDaGFuZ2VkSWdub3JpbmdMaW4KIAog
dm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgaWYgKCFtX3BhcmVudC0+
aXNDb250ZW50RWRpdGFibGUoKSAmJiBtX3BhcmVudC0+YXR0YWNoZWQoKSkKKyAgICBpZiAoIW1f
cGFyZW50LT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkgJiYgbV9wYXJlbnQtPmF0dGFjaGVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAg
LTY4LDcgKzY4LDcgQEAgdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQg
QXBwZW5kTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX3BhcmVudC0+aXND
b250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fcGFyZW50LT5yZW5kZXJlcklzQ29udGVudEVk
aXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gTmVlZCB0byBub3Rp
ZnkgdGhpcyBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIHRleHQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTM4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDE3LDEyICsxMDE3LDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZp
eFJhbmdlQW5kQXBwbHkKIAogc3RhdGljIGJvb2wgY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbihO
b2RlKiBub2RlKQogewotICAgIGlmICghbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBp
ZiAoIW5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBOb2RlKiBzaWJsaW5nID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwog
ICAgIGZvciAoTm9kZSogZGVzY2VuZGVudCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgZGVzY2VuZGVu
dCAmJiBkZXNjZW5kZW50ICE9IHNpYmxpbmc7IGRlc2NlbmRlbnQgPSBkZXNjZW5kZW50LT50cmF2
ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFkZXNjZW5kZW50LT5pc0NvbnRlbnRFZGl0
YWJsZSgpKQorICAgICAgICBpZiAoIWRlc2NlbmRlbnQtPnJlbmRlcmVySXNDb250ZW50RWRpdGFi
bGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTAzNywxMCArMTAz
NywxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgZm9y
IChSZWZQdHI8Tm9kZT4gbmV4dDsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0g
bmV4dC5nZXQoKSkgewogICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwog
Ci0gICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+aXNDb250ZW50RWRpdGFi
bGUoKSkKKyAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5yZW5kZXJlcklz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAg
ICAgIGlmICghbm9kZS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSAmJiBub2RlLT5pc0hUTUxF
bGVtZW50KCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcklzQ29udGVudFJpY2hseUVk
aXRhYmxlKCkgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBUaGlz
IGlzIGEgcGxhaW50ZXh0LW9ubHkgcmVnaW9uLiBPbmx5IHByb2NlZWQgaWYgaXQncyBmdWxseSBz
ZWxlY3RlZC4KICAgICAgICAgICAgIC8vIHBhc3RFbmROb2RlIGlzIHRoZSBub2RlIGFmdGVyIHRo
ZSBsYXN0IGZ1bGx5IHNlbGVjdGVkIG5vZGUsIHNvIGlmIGl0J3MgaW5zaWRlIG5vZGUgdGhlbgog
ICAgICAgICAgICAgLy8gbm9kZSBpc24ndCBmdWxseSBzZWxlY3RlZC4KQEAgLTEwNTksNyArMTA1
OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50
KCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jb250YWlucyhwYXN0RW5kTm9kZSkgfHwgY29u
dGFpbnNOb25FZGl0YWJsZVJlZ2lvbihub2RlKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zKHBhc3RFbmRO
b2RlKSB8fCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKG5vZGUpIHx8ICFub2RlLT5wYXJlbnRO
b2RlKCktPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpIHsKICAg
ICAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwpAQCAtMTEz
NCw3ICsxMTM0LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAog
ewogICAgIEFTU0VSVChlbGVtZW50KTsKIAotICAgIGlmICghZWxlbWVudC0+cGFyZW50Tm9kZSgp
IHx8ICFlbGVtZW50LT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYg
KCFlbGVtZW50LT5wYXJlbnROb2RlKCkgfHwgIWVsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
aXNTdHlsZWRJbmxpbmVFbGVtZW50VG9SZW1vdmUoZWxlbWVudC5nZXQoKSkpIHsKQEAgLTE2NTEs
MTMgKzE2NTEsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZwog
CiAgICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gZWxlbWVudC0+bmV4dFNpYmxpbmcoKTsK
ICAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNTaWJs
aW5nKCk7Ci0gICAgaWYgKG5leHRTaWJsaW5nICYmIG5leHRTaWJsaW5nLT5pc0VsZW1lbnROb2Rl
KCkgJiYgbmV4dFNpYmxpbmctPmlzQ29udGVudEVkaXRhYmxlKCkKKyAgICBpZiAobmV4dFNpYmxp
bmcgJiYgbmV4dFNpYmxpbmctPmlzRWxlbWVudE5vZGUoKSAmJiBuZXh0U2libGluZy0+cmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpCiAgICAgICAgICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGVs
ZW1lbnQuZ2V0KCksIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuZXh0U2libGluZy5nZXQoKSkpKQog
ICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQuZ2V0KCksIHN0YXRpY19jYXN0
PEVsZW1lbnQqPihuZXh0U2libGluZy5nZXQoKSkpOwogCi0gICAgaWYgKHByZXZpb3VzU2libGlu
ZyAmJiBwcmV2aW91c1NpYmxpbmctPmlzRWxlbWVudE5vZGUoKSAmJiBwcmV2aW91c1NpYmxpbmct
PmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICBpZiAocHJldmlvdXNTaWJsaW5nICYmIHByZXZp
b3VzU2libGluZy0+aXNFbGVtZW50Tm9kZSgpICYmIHByZXZpb3VzU2libGluZy0+cmVuZGVyZXJJ
c0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgIE5vZGUqIG1lcmdlZEVsZW1lbnQgPSBwcmV2
aW91c1NpYmxpbmctPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChtZXJnZWRFbGVtZW50LT5p
c0VsZW1lbnROb2RlKCkgJiYgbWVyZ2VkRWxlbWVudC0+aXNDb250ZW50RWRpdGFibGUoKQorICAg
ICAgICBpZiAobWVyZ2VkRWxlbWVudC0+aXNFbGVtZW50Tm9kZSgpICYmIG1lcmdlZEVsZW1lbnQt
PnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKQogICAgICAgICAgICAgJiYgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHByZXZpb3VzU2libGluZy5nZXQoKSksIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihtZXJnZWRFbGVtZW50KSkpCiAgICAgICAgICAgICBtZXJnZUlk
ZW50aWNhbEVsZW1lbnRzKHN0YXRpY19jYXN0PEVsZW1lbnQqPihwcmV2aW91c1NpYmxpbmcuZ2V0
KCkpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obWVyZ2VkRWxlbWVudCkpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShy
ZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBib29sIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wCiAgICAgLy8gRklYTUU6IENhbid0IHdlIGRv
IHNvbWV0aGluZyBiZXR0ZXIgd2hlbiB0aGUgaW1tZWRpYXRlIHBhcmVudCB3YXNuJ3QgYSBsaXN0
IG5vZGU/CiAgICAgaWYgKCFsaXN0Tm9kZQogICAgICAgICB8fCAoIWxpc3ROb2RlLT5oYXNUYWdO
YW1lKHVsVGFnKSAmJiAhbGlzdE5vZGUtPmhhc1RhZ05hbWUob2xUYWcpKQotICAgICAgICB8fCAh
bGlzdE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkKKyAgICAgICAgfHwgIWxpc3ROb2RlLT5yZW5k
ZXJlcklzQ29udGVudEVkaXRhYmxlKCkKICAgICAgICAgfHwgbGlzdE5vZGUgPT0gZW1wdHlMaXN0
SXRlbS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVy
LmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIERlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXI6OkRlbGV0ZUJ1dHRvbkNvbnQKIAogc3RhdGljIGJvb2wgaXNEZWxl
dGFibGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8ICFub2Rl
LT5pc0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmluRG9jdW1lbnQoKSB8fCAhbm9kZS0+aXNDb250
ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8
fCAhbm9kZS0+aW5Eb2N1bWVudCgpIHx8ICFub2RlLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEluIGdlbmVyYWwgd2Ugd2FudCB0
byBvbmx5IGRyYXcgdGhlIFVJIGFyb3VuZCBvYmplY3Qgb2YgYSBjZXJ0YWluIGFyZWEsIGJ1dCB3
ZSBzdGlsbCBrZWVwIHRoZSBtaW4gd2lkdGgvaGVpZ2h0IHRvCkBAIC0xNTYsNyArMTU2LDcgQEAg
c3RhdGljIEhUTUxFbGVtZW50KiBlbmNsb3NpbmdEZWxldGFibGVFbAogCiAgICAgLy8gVGhlIGVu
Y2xvc2luZ05vZGVPZlR5cGUgZnVuY3Rpb24gb25seSB3b3JrcyBvbiBub2RlcyB0aGF0IGFyZSBl
ZGl0YWJsZQogICAgIC8vICh3aGljaCBpcyBzdHJhbmdlLCBnaXZlbiBpdHMgbmFtZSkuCi0gICAg
aWYgKCFjb250YWluZXItPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFjb250YWluZXIt
PnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBO
b2RlKiBlbGVtZW50ID0gZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNv
bnRhaW5lciksICZpc0RlbGV0YWJsZUVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA4
MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBEZWxldGVGcm9tVGV4
dE5vZGVDb21tYW5kOjpkb0FwcGx5KAogewogICAgIEFTU0VSVChtX25vZGUpOwogCi0gICAgaWYg
KCFtX25vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFtX25vZGUtPnJlbmRlcmVy
SXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgRGVsZXRlRnJvbVRleHROb2RlQ29tbWFu
ZDo6ZG9VbmFwcGwKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKIAotICAgIGlmICghbV9ub2RlLT5p
c0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5yZW5kZXJlcklzQ29udGVudEVk
aXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBl
YzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNyArMzQyLDcg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKAogICAgICAgICAKICAg
ICBpZiAobV9zdGFydFJvb3QgIT0gbV9lbmRSb290ICYmICEobm9kZS0+aXNEZXNjZW5kYW50T2Yo
bV9zdGFydFJvb3QuZ2V0KCkpICYmIG5vZGUtPmlzRGVzY2VuZGFudE9mKG1fZW5kUm9vdC5nZXQo
KSkpKSB7CiAgICAgICAgIC8vIElmIGEgbm9kZSBpcyBub3QgaW4gYm90aCB0aGUgc3RhcnQgYW5k
IGVuZCBlZGl0YWJsZSByb290cywgcmVtb3ZlIGl0IG9ubHkgaWYgaXRzIGluc2lkZSBhbiBlZGl0
YWJsZSByZWdpb24uCi0gICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklz
Q29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAgICAgIC8vIERvbid0IHJlbW92ZSBub24tZWRp
dGFibGUgYXRvbWljIG5vZGVzLgogICAgICAgICAgICAgaWYgKCFub2RlLT5maXJzdENoaWxkKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4OSw3ICsyODksNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVsZXRl
UmFuZ2UoUmFuZ2UqIHJhbmdlCiAgICAgaWYgKCFzdGFydENvbnRhaW5lciB8fCAhZW5kQ29udGFp
bmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFzdGFydENvbnRhaW5l
ci0+aXNDb250ZW50RWRpdGFibGUoKSB8fCAhZW5kQ29udGFpbmVyLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQorICAgIGlmICghc3RhcnRDb250YWluZXItPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUo
KSB8fCAhZW5kQ29udGFpbmVyLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAocmFuZ2UtPmNvbGxhcHNlZChlYykpIHsKQEAg
LTIxNjIsNyArMjE2Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFt
bWEKICAgICAKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgYmFpbC4K
ICAgICBOb2RlKiBlZGl0YWJsZU5vZGUgPSBzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoKTsK
LSAgICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQorICAgIGlmICghZWRpdGFibGVOb2RlIHx8ICFlZGl0YWJsZU5vZGUtPnJlbmRlcmVySXND
b250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc1NwZWxsQ2hl
Y2tpbmdFbmFibGVkRm9yKGVkaXRhYmxlTm9kZSkpCkBAIC0yMjMzLDcgKzIyMzMsNyBAQCB2b2lk
IEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAKICAgICAvLyBJZiB3ZSdyZSBu
b3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgYmFpbC4KICAgICBOb2RlKiBlZGl0YWJsZU5vZGUgPSBz
cGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgIGlmICghZWRpdGFibGVOb2RlIHx8
ICFlZGl0YWJsZU5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFlZGl0YWJsZU5v
ZGUgfHwgIWVkaXRhYmxlTm9kZS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoZWRpdGFibGVO
b2RlKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2
aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgc3RhdGljIGludCB2ZXJ0aWNhbFNj
cm9sbERpc3RhbmNlKEZyYW1lKgogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmICghKHN0
eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMIHx8IHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPQVVU
TyB8fCBmb2N1c2VkTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkpCisgICAgaWYgKCEoc3R5bGUt
Pm92ZXJmbG93WSgpID09IE9TQ1JPTEwgfHwgc3R5bGUtPm92ZXJmbG93WSgpID09IE9BVVRPIHx8
IGZvY3VzZWROb2RlLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpKQogICAgICAgICByZXR1
cm4gMDsKICAgICBpbnQgaGVpZ2h0ID0gc3RkOjptaW48aW50Pih0b1JlbmRlckJveChyZW5kZXJl
ciktPmNsaWVudEhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1l
LT52aWV3KCktPnZpc2libGVIZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ5LDE0ICsxNDksMTQgQEAgTm9kZSogZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKE5vZGUq
IAogewogICAgIE5vZGUqIGxhc3RCbG9jayA9IHN0YXJ0Tm9kZTsKICAgICBmb3IgKE5vZGUqIG4g
PSBzdGFydE5vZGU7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFuLT5p
c0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW4tPnJlbmRlcmVySXNDb250ZW50RWRp
dGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBsYXN0QmxvY2s7Ci0gICAgICAgIGlmIChpc1Rh
YmxlQ2VsbChuKSB8fCBuLT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8ICFuLT5wYXJlbnROb2RlKCkg
fHwgIW4tPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSB8fCBpc0VsZW1lbnRGb3JG
b3JtYXRCbG9jayhuKSkKKyAgICAgICAgaWYgKGlzVGFibGVDZWxsKG4pIHx8IG4tPmhhc1RhZ05h
bWUoYm9keVRhZykgfHwgIW4tPnBhcmVudE5vZGUoKSB8fCAhbi0+cGFyZW50Tm9kZSgpLT5yZW5k
ZXJlcklzQ29udGVudEVkaXRhYmxlKCkgfHwgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2sobikpCiAg
ICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgaWYgKGlzQmxvY2sobikpCiAgICAgICAgICAg
ICBsYXN0QmxvY2sgPSBuOwogICAgICAgICBpZiAoaXNMaXN0RWxlbWVudChuKSkKLSAgICAgICAg
ICAgIHJldHVybiBuLT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkgPyBuLT5wYXJl
bnROb2RlKCkgOiBuOworICAgICAgICAgICAgcmV0dXJuIG4tPnBhcmVudE5vZGUoKS0+cmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpID8gbi0+cGFyZW50Tm9kZSgpIDogbjsKICAgICB9CiAgICAg
cmV0dXJuIGxhc3RCbG9jazsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50
T3V0ZGVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAsNyArMTIwLDcgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncgog
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kT2ZQYXJhZ3JhcGggPSBlbmRPZlBhcmFncmFw
aCh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaCk7CiAKICAgICBOb2RlKiBlbmNsb3NpbmdOb2RlID0g
ZW5jbG9zaW5nTm9kZU9mVHlwZSh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVu
dCgpLCAmaXNMaXN0T3JJbmRlbnRCbG9ja3F1b3RlKTsKLSAgICBpZiAoIWVuY2xvc2luZ05vZGUg
fHwgIWVuY2xvc2luZ05vZGUtPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkgIC8v
IFdlIGNhbid0IG91dGRlbnQgaWYgdGhlcmUgaXMgbm8gcGxhY2UgdG8gZ28hCisgICAgaWYgKCFl
bmNsb3NpbmdOb2RlIHx8ICFlbmNsb3NpbmdOb2RlLT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXND
b250ZW50RWRpdGFibGUoKSkgIC8vIFdlIGNhbid0IG91dGRlbnQgaWYgdGhlcmUgaXMgbm8gcGxh
Y2UgdG8gZ28hCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSBJbnNlcnRMaXN0Q29tbWFu
ZCB0byByZW1vdmUgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBsaXN0CkBAIC0xNTEsNyArMTUxLDcg
QEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncgogICAgICAgICAgICAg
aWYgKENvbnRhaW5lck5vZGUqIHNwbGl0UG9pbnRQYXJlbnQgPSBzcGxpdFBvaW50LT5wYXJlbnRO
b2RlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3BsaXRQb2ludFBhcmVudC0+aGFzVGFnTmFt
ZShibG9ja3F1b3RlVGFnKQogICAgICAgICAgICAgICAgICAgICAmJiAhc3BsaXRQb2ludC0+aGFz
VGFnTmFtZShibG9ja3F1b3RlVGFnKQotICAgICAgICAgICAgICAgICAgICAmJiBzcGxpdFBvaW50
UGFyZW50LT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpIC8vIFdlIGNhbid0IG91
dGRlbnQgaWYgdGhlcmUgaXMgbm8gcGxhY2UgdG8gZ28hCisgICAgICAgICAgICAgICAgICAgICYm
IHNwbGl0UG9pbnRQYXJlbnQtPnBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJs
ZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQogICAg
ICAgICAgICAgICAgICAgICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNwbGl0
UG9pbnRQYXJlbnQpLCBzcGxpdFBvaW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQuY3BwCShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcg
QEAgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleAogCiB2b2lkIEluc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICghbV9ub2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5yZW5kZXJlcklzQ29udGVudEVkaXRh
YmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjOwpAQCAt
NTYsNyArNTYsNyBAQCB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoCiAK
IHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBpZiAo
IW1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fbm9kZS0+cmVuZGVyZXJJ
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIE5l
ZWQgdG8gbm90aWZ5IHRoaXMgYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSB0ZXh0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5k
LmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydE5v
ZGVCZWZvcmVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDEzIEBAIElu
c2VydE5vZGVCZWZvcmVDb21tYW5kOjpJbnNlcnROb2RlQmVmb3IKICAgICBBU1NFUlQobV9yZWZD
aGlsZCk7CiAgICAgQVNTRVJUKG1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKSk7CiAKLSAgICBBU1NF
UlQobV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFtX3Jl
ZkNoaWxkLT5wYXJlbnROb2RlKCktPmF0dGFjaGVkKCkpOworICAgIEFTU0VSVChtX3JlZkNoaWxk
LT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSB8fCAhbV9yZWZDaGls
ZC0+cGFyZW50Tm9kZSgpLT5hdHRhY2hlZCgpKTsKIH0KIAogdm9pZCBJbnNlcnROb2RlQmVmb3Jl
Q29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9yZWZD
aGlsZC0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0NvbnRl
bnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjOwpA
QCAtNTksNyArNTksNyBAQCB2b2lkIEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpkb0FwcGx5KCkK
IAogdm9pZCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBpZiAo
IW1faW5zZXJ0Q2hpbGQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFtX2luc2VydENo
aWxkLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgLy8gTmVlZCB0byBub3RpZnkgdGhpcyBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcg
dGhlIHRleHQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSm9pblRleHROb2Rl
c0NvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Sm9pblRleHROb2Rlc0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IHZvaWQgSm9pblRleHROb2Rlc0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX3RleHQyLT5wYXJlbnROb2RlKCk7Ci0gICAg
aWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIXBh
cmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTYzLDcgKzYzLDcgQEAg
dm9pZCBKb2luVGV4dE5vZGVzQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9kZSgpOwotICAg
IGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFw
YXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3Bw
CShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIE1l
cmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpNZXJnZUlkZW4KIAogdm9pZCBNZXJnZUlkZW50
aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgaWYgKG1fZWxlbWVudDEtPm5l
eHRTaWJsaW5nKCkgIT0gbV9lbGVtZW50MiB8fCAhbV9lbGVtZW50MS0+aXNDb250ZW50RWRpdGFi
bGUoKSB8fCAhbV9lbGVtZW50Mi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAobV9lbGVt
ZW50MS0+bmV4dFNpYmxpbmcoKSAhPSBtX2VsZW1lbnQyIHx8ICFtX2VsZW1lbnQxLT5yZW5kZXJl
cklzQ29udGVudEVkaXRhYmxlKCkgfHwgIW1fZWxlbWVudDItPnJlbmRlcmVySXNDb250ZW50RWRp
dGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9hdENoaWxkID0gbV9lbGVtZW50Mi0+
Zmlyc3RDaGlsZCgpOwpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVu
dHNDb21tYW5kOjpkb1VuCiAgICAgUmVmUHRyPE5vZGU+IGF0Q2hpbGQgPSBtX2F0Q2hpbGQucmVs
ZWFzZSgpOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9lbGVtZW50Mi0+cGFyZW50
Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkp
CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA4
MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIFJlbW92ZU5vZGVDb21tYW5kOjpSZW1vdmVO
b2RlQ29tbWFuZChQYXMKIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewogICAg
IENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICgh
cGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJlbnQg
fHwgIXBhcmVudC0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3BhcmVudCA9IHBhcmVudDsKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBSZW1vdmVO
b2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFy
ZW50ID0gbV9wYXJlbnQucmVsZWFzZSgpOwogICAgIFJlZlB0cjxOb2RlPiByZWZDaGlsZCA9IG1f
cmVmQ2hpbGQucmVsZWFzZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0NvbnRl
bnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBA
QCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50CiAgICAgaWYgKCFlZGl0
YWJsZVJvb3QtPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLndlYmtpdEJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50KSAmJgogICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNl
IGNoZWNrcyBvbmNlIHRleHRhcmVhcyBhbmQgdGV4dGZpZWxkcyBhY3R1YWxseSByZWdpc3RlciBh
biBldmVudCBoYW5kbGVyLgogICAgICAgICAhKHNoYWRvd0FuY2VzdG9yTm9kZSAmJiBzaGFkb3dB
bmNlc3Rvck5vZGUtPnJlbmRlcmVyKCkgJiYgc2hhZG93QW5jZXN0b3JOb2RlLT5yZW5kZXJlcigp
LT5pc1RleHRDb250cm9sKCkpICYmCi0gICAgICAgIGVkaXRhYmxlUm9vdC0+aXNDb250ZW50Umlj
aGx5RWRpdGFibGUoKSkgeworICAgICAgICBlZGl0YWJsZVJvb3QtPnJlbmRlcmVySXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICByZW1vdmVJbnRlcmNoYW5nZU5vZGVzKG1fZnJh
Z21lbnQuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBA
IFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBlZGl0YWJsZVJvb3QtPmRpc3BhdGNoRXZlbnQoZXZ0LCBlYyk7CiAg
ICAgQVNTRVJUKGVjID09IDApOwotICAgIGlmICh0ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0
YWJsZVJvb3QtPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKKyAgICBpZiAodGV4dCAhPSBl
dnQtPnRleHQoKSB8fCAhZWRpdGFibGVSb290LT5yZW5kZXJlcklzQ29udGVudFJpY2hseUVkaXRh
YmxlKCkpIHsKICAgICAgICAgcmVzdG9yZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9s
ZGVyLmdldCgpKTsKICAgICAgICAgcmVtb3ZlTm9kZShob2xkZXIpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgx
Mzg0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZWxlY3RGcmFtZUVsZQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIFRo
aXMgbWV0aG9kJ3MgcHVycG9zZSBpcyBpdCB0byBtYWtlIGl0IGVhc2llciB0byBzZWxlY3QgaWZy
YW1lcyAoaW4gb3JkZXIgdG8gZGVsZXRlIHRoZW0pLiAgRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhl
IGlmcmFtZSBpc24ndCBkZWxldGFibGUuCi0gICAgaWYgKCFvd25lckVsZW1lbnRQYXJlbnQtPmlz
Q29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFvd25lckVsZW1lbnRQYXJlbnQtPnJlbmRlcmVy
SXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGNv
bXB1dGUgcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVsZW1lbnQuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9u
IDgxMzg0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFNwbGl0RWxlbWVudENvbW1h
bmQ6OmV4ZWN1dGVBcHBseSgpCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgCiAgICAg
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgpOwotICAgIGlm
ICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJl
bnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobV9lbGVtZW50MS5nZXQoKSwgbV9lbGVtZW50
Mi5nZXQoKSwgZWMpOwogICAgIGlmIChlYykKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTcGxpdEVs
ZW1lbnRDb21tYW5kOjpkb0FwcGx5KCkKIAogdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpkb1Vu
YXBwbHkoKQogewotICAgIGlmICghbV9lbGVtZW50MSB8fCAhbV9lbGVtZW50MS0+aXNDb250ZW50
RWRpdGFibGUoKSB8fCAhbV9lbGVtZW50Mi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAo
IW1fZWxlbWVudDEgfHwgIW1fZWxlbWVudDEtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSB8
fCAhbV9lbGVtZW50Mi0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gY2hpbGRyZW47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24g
ODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBTcGxpdFRleHROb2RlQ29tbWFuZDo6
U3BsaXRUZXh0Tm9kZUNvbW1hCiB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkK
IHsKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX3RleHQyLT5wYXJlbnROb2RlKCk7Ci0g
ICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAo
IXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNjgsNyArNjgsNyBAQCB2
b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIAogdm9pZCBTcGxpdFRleHROb2Rl
Q29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBpZiAoIW1fdGV4dDEgfHwgIW1fdGV4dDEtPmlz
Q29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFtX3RleHQxIHx8ICFtX3RleHQxLT5yZW5kZXJl
cklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX3Rl
eHQxLT5kb2N1bWVudCgpID09IGRvY3VtZW50KCkpOwpAQCAtODksNyArODksNyBAQCB2b2lkIFNw
bGl0VGV4dE5vZGVDb21tYW5kOjpkb1JlYXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBD
b250YWluZXJOb2RlKiBwYXJlbnQgPSBtX3RleHQyLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFw
YXJlbnQgfHwgIXBhcmVudC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8
fCAhcGFyZW50LT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGluc2VydFRleHQxQW5kVHJpbVRleHQyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVt
ZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENv
bW1hCiAgICAgc3BsaXRUZXh0Tm9kZShtX3RleHQuZ2V0KCksIG1fb2Zmc2V0KTsKIAogICAgIEVs
ZW1lbnQqIHBhcmVudCA9IG1fdGV4dC0+cGFyZW50RWxlbWVudCgpOwotICAgIGlmICghcGFyZW50
IHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKSB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkt
PmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50
RWxlbWVudCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+cmVuZGVyZXJJc0NvbnRlbnRF
ZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJl
bmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Myw3ICs0
NzMsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmNhbm9uaWNhbFBvc2l0CiAKICAgICAv
LyBUaGUgbmV3IHBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHNhbWUgZWRpdGFibGUgZWxlbWVudC4g
RW5mb3JjZSB0aGF0IGZpcnN0LgogICAgIC8vIFVubGVzcyB0aGUgZGVzY2VudCBpcyBmcm9tIGEg
bm9uLWVkaXRhYmxlIGh0bWwgZWxlbWVudCB0byBhbiBlZGl0YWJsZSBib2R5LgotICAgIGlmIChu
b2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgIW5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+Ym9keSgpICYmIG5vZGUtPmRvY3VtZW50KCktPmJv
ZHkoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdO
YW1lKGh0bWxUYWcpICYmICFub2RlLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkgJiYgbm9k
ZS0+ZG9jdW1lbnQoKS0+Ym9keSgpICYmIG5vZGUtPmRvY3VtZW50KCktPmJvZHkoKS0+cmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gbmV4dC5pc05vdE51bGwoKSA/
IG5leHQgOiBwcmV2OwogCiAgICAgTm9kZSogZWRpdGluZ1Jvb3QgPSBlZGl0YWJsZVJvb3RGb3JQ
b3NpdGlvbihwb3NpdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250
ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTM4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFdyYXBDb250ZW50
c0luRHVtbXlTcGFuQ29tbWFuZDo6ZG9VCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAKLSAg
ICBpZiAoIW1fZHVtbXlTcGFuIHx8ICFtX2VsZW1lbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisg
ICAgaWYgKCFtX2R1bW15U3BhbiB8fCAhbV9lbGVtZW50LT5yZW5kZXJlcklzQ29udGVudEVkaXRh
YmxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBjaGls
ZHJlbjsKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1h
bmQ6OmRvUgogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIAotICAgIGlmICghbV9kdW1t
eVNwYW4gfHwgIW1fZWxlbWVudC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fZHVt
bXlTcGFuIHx8ICFtX2VsZW1lbnQtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgZXhlY3V0ZUFwcGx5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBA
IE5vZGUqIGhpZ2hlc3RFZGl0YWJsZVJvb3QoY29uc3QgUG9zaXRpb24KICAgICAKICAgICBub2Rl
ID0gaGlnaGVzdFJvb3Q7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlz
Q29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcklzQ29udGVudEVk
aXRhYmxlKCkpCiAgICAgICAgICAgICBoaWdoZXN0Um9vdCA9IG5vZGU7CiAgICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTksNyAr
MTU5LDcgQEAgTm9kZSogbG93ZXN0RWRpdGFibGVBbmNlc3RvcihOb2RlKiBub2RlKQogICAgIAog
ICAgIE5vZGUgKmxvd2VzdFJvb3QgPSAwOwogICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlm
IChub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXJJ
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpCiAgICAg
ICAgICAgICBicmVhazsKQEAgLTE3OCw3ICsxNzgsNyBAQCBib29sIGlzRWRpdGFibGVQb3NpdGlv
bihjb25zdCBQb3NpdGlvbiYgCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVu
ZGVyZXIoKS0+aXNUYWJsZSgpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwog
ICAgIAotICAgIHJldHVybiBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiBu
b2RlLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKIGJvb2wgaXNBdFVuc3BsaXR0
YWJsZUVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKQEAgLTE5Nyw3ICsxOTcsNyBAQCBib29s
IGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpCiAgICAgaWYgKG5vZGUtPnJlbmRl
cmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQogICAgICAgICBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpOwogICAgIAotICAgIHJldHVybiBub2RlLT5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpOworICAgIHJldHVybiBub2RlLT5yZW5kZXJlcklzQ29udGVudFJpY2hseUVkaXRh
YmxlKCk7CiB9CiAKIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0
aW9uJiBwKQpAQCAtMjc1LDcgKzI3NSw3IEBAIFBvc2l0aW9uIHByZXZpb3VzVmlzdWFsbHlEaXN0
aW5jdENhbmRpZGEKIFZpc2libGVQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBv
c2l0aW9uSW5Sb290KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgTm9kZSogaGlnaGVzdFJvb3Qp
CiB7CiAgICAgLy8gcG9zaXRpb24gZmFsbHMgYmVmb3JlIGhpZ2hlc3RSb290LgotICAgIGlmIChj
b21wYXJlUG9zaXRpb25zKHBvc2l0aW9uLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290
KSkgPT0gLTEgJiYgaGlnaGVzdFJvb3QtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGNv
bXBhcmVQb3NpdGlvbnMocG9zaXRpb24sIGZpcnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3Qp
KSA9PSAtMSAmJiBoaWdoZXN0Um9vdC0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAg
ICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiAKICAgICBQb3Np
dGlvbiBwID0gcG9zaXRpb247CkBAIC01NjAsNyArNTYwLDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4g
ZXh0ZW5kUmFuZ2VUb1dyYXBwaW5nTgogICAgIE5vZGUqIGFuY2VzdG9yID0gcmFuZ2UtPmNvbW1v
bkFuY2VzdG9yQ29udGFpbmVyKGVjKTsvLyBmaW5kIHRoZSBjbG9lc2V0IGNvbW1vbiBhbmNlc3Rv
cgogICAgIE5vZGUqIGhpZ2hlc3ROb2RlID0gMDsKICAgICAvLyB0cmF2ZXJzZSB0aHJvdWdoIGFu
Y2VzdG9ycyBhcyBsb25nIGFzIHRoZXkgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHJhbmdlLCBj
b250ZW50LWVkaXRhYmxlLCBhbmQgYmVsb3cgcm9vdE5vZGUgKGNvdWxkIGJlID0wKS4KLSAgICB3
aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3ItPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgaXNOb2Rl
VmlzaWJseUNvbnRhaW5lZFdpdGhpbihhbmNlc3RvciwgbWF4aW11bVJhbmdlKSAmJiBhbmNlc3Rv
ciAhPSByb290Tm9kZSkgeworICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3Rvci0+cmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oYW5j
ZXN0b3IsIG1heGltdW1SYW5nZSkgJiYgYW5jZXN0b3IgIT0gcm9vdE5vZGUpIHsKICAgICAgICAg
aGlnaGVzdE5vZGUgPSBhbmNlc3RvcjsKICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFy
ZW50Tm9kZSgpOwogICAgIH0KQEAgLTU5MSw3ICs1OTEsNyBAQCBOb2RlKiBlbmNsb3NpbmdOb2Rl
V2l0aFRhZyhjb25zdCBQb3NpdGlvCiAgICAgICAgIAogICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0
RWRpdGFibGVSb290KHApOwogICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsg
bjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250
ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKHJvb3QgJiYgIW4tPnJlbmRlcmVySXNDb250ZW50
RWRpdGFibGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAobi0+aGFzVGFn
TmFtZSh0YWdOYW1lKSkKICAgICAgICAgICAgIHJldHVybiBuOwpAQCAtNjEzLDcgKzYxMyw3IEBA
IE5vZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24KICAgICBmb3IgKE5vZGUq
IG4gPSBwLmRlcHJlY2F0ZWROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgLy8gRG9uJ3QgcmV0dXJuIGEgbm9uLWVkaXRhYmxlIG5vZGUgaWYgdGhlIGlucHV0IHBvc2l0
aW9uIHdhcyBlZGl0YWJsZSwgc2luY2UKICAgICAgICAgLy8gdGhlIGNhbGxlcnMgZnJvbSBlZGl0
aW5nIHdpbGwgbm8gZG91YnQgd2FudCB0byBwZXJmb3JtIGVkaXRpbmcgaW5zaWRlIHRoZSByZXR1
cm5lZCBub2RlLgotICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICAgICAgaWYgKHJvb3QgJiYgIW4tPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAobm9kZUlzT2ZUeXBlKG4pKQogICAgICAg
ICAgICAgcmV0dXJuIG47CkBAIC02MjksNyArNjI5LDcgQEAgTm9kZSogaGlnaGVzdEVuY2xvc2lu
Z05vZGVPZlR5cGUoY29uc3QgUAogICAgIE5vZGUqIGhpZ2hlc3QgPSAwOwogICAgIE5vZGUqIHJv
b3QgPSBydWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxl
Um9vdChwKSA6IDA7CiAgICAgZm9yIChOb2RlKiBuID0gcC5kZXByZWNhdGVkTm9kZSgpOyBuOyBu
ID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChyb290ICYmICFuLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpKQorICAgICAgICBpZiAocm9vdCAmJiAhbi0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0
YWJsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChub2RlSXNPZlR5cGUo
bikpCiAgICAgICAgICAgICBoaWdoZXN0ID0gbjsKQEAgLTc1Nyw3ICs3NTcsNyBAQCBib29sIGNh
bk1lcmdlTGlzdHMoRWxlbWVudCogZmlyc3RMaXN0LCBFCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHJldHVybiBmaXJzdExpc3QtPmhhc1RhZ05hbWUoc2Vjb25kTGlzdC0+dGFnUU5hbWUo
KSkvLyBtYWtlIHN1cmUgdGhlIGxpc3QgdHlwZXMgbWF0Y2ggKG9sIHZzLiB1bCkKLSAgICAmJiBm
aXJzdExpc3QtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgc2Vjb25kTGlzdC0+aXNDb250ZW50RWRp
dGFibGUoKS8vIGJvdGggbGlzdHMgYXJlIGVkaXRhYmxlCisgICAgJiYgZmlyc3RMaXN0LT5yZW5k
ZXJlcklzQ29udGVudEVkaXRhYmxlKCkgJiYgc2Vjb25kTGlzdC0+cmVuZGVyZXJJc0NvbnRlbnRF
ZGl0YWJsZSgpLy8gYm90aCBsaXN0cyBhcmUgZWRpdGFibGUKICAgICAmJiBmaXJzdExpc3QtPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBzZWNvbmRMaXN0LT5yb290RWRpdGFibGVFbGVtZW50KCkv
LyBkb24ndCBjcm9zcyBlZGl0aW5nIGJvdW5kYXJpZXMKICAgICAmJiBpc1Zpc2libHlBZGphY2Vu
dChwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKGZpcnN0TGlzdCksIHBvc2l0aW9uSW5QYXJlbnRC
ZWZvcmVOb2RlKHNlY29uZExpc3QpKTsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gdmlz
aWJsZSBjb250ZW50IGJldHdlZW4gdGhpcyBsaSBhbmQgdGhlIHByZXZpb3VzIGxpc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gODEzODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzcsMTAgKzQ3NywxMCBAQCBib29sIGlzRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmCiAvLyBUaGUgZmlyc3QgbGVhZiBiZWZvcmUgbm9kZSB0aGF0IGhhcyB0aGUgc2Ft
ZSBlZGl0YWJpbGl0eSBhcyBub2RlLgogc3RhdGljIE5vZGUqIHByZXZpb3VzTGVhZldpdGhTYW1l
RWRpdGFiaWxpdHkoTm9kZSogbm9kZSkKIHsKLSAgICBib29sIGVkaXRhYmxlID0gbm9kZS0+aXND
b250ZW50RWRpdGFibGUoKTsKKyAgICBib29sIGVkaXRhYmxlID0gbm9kZS0+cmVuZGVyZXJJc0Nv
bnRlbnRFZGl0YWJsZSgpOwogICAgIE5vZGUqIG4gPSBub2RlLT5wcmV2aW91c0xlYWZOb2RlKCk7
CiAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKGVkaXRhYmxlID09IG4tPmlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgICAgIGlmIChlZGl0YWJsZSA9PSBuLT5yZW5kZXJlcklzQ29udGVudEVk
aXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgbiA9IG4tPnByZXZpb3Vz
TGVhZk5vZGUoKTsKICAgICB9CkBAIC01NzIsNyArNTcyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzTGluZVBvc2l0aW9uKGNvbgogICAgIC8vIENvdWxkIG5vdCBmaW5kIGEgcHJldmlvdXMg
bGluZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGFscmVhZHkgYmUgb24gdGhlIGZpcnN0IGxpbmUuCiAg
ICAgLy8gTW92ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbnRlbnQgaW4gdGhpcyBibG9jaywgd2hp
Y2ggZWZmZWN0aXZlbHkgbW92ZXMgdXMKICAgICAvLyB0byB0aGUgc3RhcnQgb2YgdGhlIGxpbmUg
d2UncmUgb24uCi0gICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5pc0NvbnRlbnRFZGl0
YWJsZSgpID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5yZW5k
ZXJlcklzQ29udGVudEVkaXRhYmxlKCkgPyBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiBu
b2RlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFbGVtZW50
KQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKHJvb3RFbGVtZW50KSwgRE9XTlNUUkVBTSk7CkBA
IC01ODAsMTIgKzU4MCwxMiBAQCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNMaW5lUG9zaXRpb24o
Y29uCiAKIHN0YXRpYyBOb2RlKiBuZXh0TGVhZldpdGhTYW1lRWRpdGFiaWxpdHkoTm9kZSogbm9k
ZSwgaW50IG9mZnNldCkKIHsKLSAgICBib29sIGVkaXRhYmxlID0gbm9kZS0+aXNDb250ZW50RWRp
dGFibGUoKTsKKyAgICBib29sIGVkaXRhYmxlID0gbm9kZS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0
YWJsZSgpOwogICAgIEFTU0VSVChvZmZzZXQgPj0gMCk7CiAgICAgTm9kZSogY2hpbGQgPSBub2Rl
LT5jaGlsZE5vZGUob2Zmc2V0KTsKICAgICBOb2RlKiBuID0gY2hpbGQgPyBjaGlsZC0+bmV4dExl
YWZOb2RlKCkgOiBub2RlLT5sYXN0RGVzY2VuZGFudCgpLT5uZXh0TGVhZk5vZGUoKTsKICAgICB3
aGlsZSAobikgewotICAgICAgICBpZiAoZWRpdGFibGUgPT0gbi0+aXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICAgICAgaWYgKGVkaXRhYmxlID09IG4tPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUo
KSkKICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICBuID0gbi0+bmV4dExlYWZOb2RlKCk7
CiAgICAgfQpAQCAtNTk3LDEwICs1OTcsMTAgQEAgc3RhdGljIE5vZGUqIG5leHRMZWFmV2l0aFNh
bWVFZGl0YWJpbGl0eQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0g
ICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBl
ZGl0YWJsZSA9IG5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKTsKICAgICBOb2RlKiBu
ID0gbm9kZS0+bmV4dExlYWZOb2RlKCk7CiAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKGVk
aXRhYmxlID09IG4tPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChlZGl0YWJsZSA9
PSBuLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gbjsK
ICAgICAgICAgbiA9IG4tPm5leHRMZWFmTm9kZSgpOwogICAgIH0KQEAgLTY3OSw3ICs2NzksNyBA
QCBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBWCiAgICAgLy8gQ291bGQg
bm90IGZpbmQgYSBuZXh0IGxpbmUuIFRoaXMgbWVhbnMgd2UgbXVzdCBhbHJlYWR5IGJlIG9uIHRo
ZSBsYXN0IGxpbmUuCiAgICAgLy8gTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGluIHRo
aXMgYmxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IG1vdmVzIHVzCiAgICAgLy8gdG8gdGhlIGVuZCBv
ZiB0aGUgbGluZSB3ZSdyZSBvbi4KLSAgICBFbGVtZW50KiByb290RWxlbWVudCA9IG5vZGUtPmlz
Q29udGVudEVkaXRhYmxlKCkgPyBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiBub2RlLT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiByb290RWxlbWVudCA9
IG5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmICgh
cm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShyb290RWxlbWVudCksIERPV05T
VFJFQU0pOwpAQCAtNzU5LDEwICs3NTksMTAgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJh
Z3JhcGgoY29uc3QgVgogCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikg
ewotICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkgJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RD
cm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBuLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkgIT0g
c3RhcnROb2RlLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENhblNraXBPdmVyRWRpdGlu
Z0JvdW5kYXJ5KSB7Ci0gICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpICE9IHN0YXJ0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgIHdoaWxl
IChuICYmIG4tPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRl
cmVySXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VQ
cmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CiAgICAgICAgICAgICBpZiAoIW4gfHwg
IW4tPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTgzMSwxMCArODMxLDEwIEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25z
dCBWaXMKIAogICAgIE5vZGUqIG4gPSBzdGFydE5vZGU7CiAgICAgd2hpbGUgKG4pIHsKLSAgICAg
ICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5
ICYmIG4tPmlzQ29udGVudEVkaXRhYmxlKCkgIT0gc3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQorICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0
aW5nQm91bmRhcnkgJiYgbi0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpICE9IHN0YXJ0Tm9k
ZS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5Ta2lwT3ZlckVkaXRpbmdCb3VuZGFy
eSkgewotICAgICAgICAgICAgd2hpbGUgKG4gJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBz
dGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICB3aGlsZSAobiAmJiBu
LT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkgIT0gc3RhcnROb2RlLT5yZW5kZXJlcklzQ29u
dGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
c3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNEZXNjZW5kYW50
T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDgxMzg0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcyLDcgKzcyLDcgQEAgc3RhdGljIHVuc2lnbmVkIHBhcnNlUG9ydEZyb21TdHJpbmdQb3NpdAog
CiBib29sIEhUTUxBbmNob3JFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICBp
ZiAoaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAocmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJs
ZSgpKQogICAgICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKICAgICAv
LyBJZiBub3QgYSBsaW5rIHdlIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIGZvY3VzIHRoZSBlbGVt
ZW50IGlmIGl0IGhhcyB0YWJJbmRleC4KICAgICByZXR1cm4gaXNMaW5rKCkgfHwgSFRNTEVsZW1l
bnQ6OnN1cHBvcnRzRm9jdXMoKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEhUTUxBbmNob3JF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkgeworICAgICAgICBpZiAocmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGtlZXBzIHRyYWNr
IG9mIHRoZSBlZGl0YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24gd2FzIGluIChpZiBpdCB3
YXMgaW4gb25lKSBqdXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tlZAogICAgICAgICAgICAg
Ly8gZm9yIHRoZSBMaXZlV2hlbk5vdEZvY3VzZWQgZWRpdGFibGUgbGluayBiZWhhdmlvcgogICAg
ICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZl
bnQpLT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgpLT5mcmFtZSgpICYmIGRv
Y3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpKSB7CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9p
ZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogCiB2b2lkIEhUTUxBbmNob3JF
bGVtZW50OjpzZXRBY3RpdmUoYm9vbCBkb3duLCBib29sIHBhdXNlKQogewotICAgIGlmIChpc0Nv
bnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKHJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSkg
ewogICAgICAgICBFZGl0YWJsZUxpbmtCZWhhdmlvciBlZGl0YWJsZUxpbmtCZWhhdmlvciA9IEVk
aXRhYmxlTGlua0RlZmF1bHRCZWhhdmlvcjsKICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCkpCiAgICAgICAgICAgICBlZGl0YWJsZUxpbmtCZWhh
dmlvciA9IHNldHRpbmdzLT5lZGl0YWJsZUxpbmtCZWhhdmlvcigpOwpAQCAtMjQ3LDcgKzI0Nyw3
IEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmNhblN0YXJ0U2VsZWN0aW8KICAgICAvLyBGSVhN
RTogV2UgcHJvYmFibHkgd2FudCB0aGlzIHNhbWUgYmVoYXZpb3IgaW4gU1ZHQUVsZW1lbnQgdG9v
CiAgICAgaWYgKCFpc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpjYW5TdGFy
dFNlbGVjdGlvbigpOwotICAgIHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVy
biByZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1l
bnQ6OmRyYWdnYWJsZSgpIGNvbnN0CkBAIC01MDEsNyArNTAxLDcgQEAgSFRNTEFuY2hvckVsZW1l
bnQ6OkV2ZW50VHlwZSBIVE1MQW5jaG9yRQogCiBib29sIEhUTUxBbmNob3JFbGVtZW50Ojp0cmVh
dExpbmtBc0xpdmVGb3JFdmVudFR5cGUoRXZlbnRUeXBlIGV2ZW50VHlwZSkgY29uc3QKIHsKLSAg
ICBpZiAoIWlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFyZW5kZXJlcklzQ29udGVudEVk
aXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEJvZHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxC
b2R5RWxlbWVudC5jcHAJKHJldmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgYm9v
bCBIVE1MQm9keUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dAogCiBib29sIEhUTUxCb2R5RWxl
bWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzQ29udGVudEVkaXRh
YmxlKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKKyAgICByZXR1cm4gcmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpIHx8IEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7CiB9
CiAKIFN0cmluZyBIVE1MQm9keUVsZW1lbnQ6OmFMaW5rKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTQsMTAgKzY1NCwxNSBA
QCB2b2lkIEhUTUxFbGVtZW50OjphZGRIVE1MQWxpZ25tZW50VG9TdHlsCiAKIGJvb2wgSFRNTEVs
ZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiBFbGVtZW50OjpzdXBw
b3J0c0ZvY3VzKCkgfHwgKGlzQ29udGVudEVkaXRhYmxlKCkgJiYgcGFyZW50Tm9kZSgpICYmICFw
YXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpOworICAgIHJldHVybiBFbGVtZW50Ojpz
dXBwb3J0c0ZvY3VzKCkgfHwgKHJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSAmJiBwYXJlbnRO
b2RlKCkgJiYgIXBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKTsKIH0K
IAotU3RyaW5nIEhUTUxFbGVtZW50Ojpjb250ZW50RWRpdGFibGUoKSBjb25zdCAKK2Jvb2wgSFRN
TEVsZW1lbnQ6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVy
ZXJJc0NvbnRlbnRFZGl0YWJsZSgpOworfQorCitTdHJpbmcgSFRNTEVsZW1lbnQ6OmNvbnRlbnRF
ZGl0YWJsZSgpIGNvbnN0CiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RH
ZXRBdHRyaWJ1dGUoY29udGVudGVkaXRhYmxlQXR0cik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmgJKHJldmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKKwogICAgIFN0cmluZyBjb250ZW50RWRpdGFibGUo
KSBjb25zdDsKICAgICB2b2lkIHNldENvbnRlbnRFZGl0YWJsZShjb25zdCBTdHJpbmcmLCBFeGNl
cHRpb25Db2RlJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNyArNTExLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y2FuUHJvY2Vzc0RyYWcoRHJhZwogICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnNGaWxlcygp
ICYmIGFzRmlsZUlucHV0KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPnJl
bmRlcmVySXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKG1fZGlkSW5pdGlhdGVEcmFnICYmIG1fZG9jdW1lbnRVbmRlck1vdXNlID09IG1fZHJhZ0lu
aXRpYXRvciAmJiByZXN1bHQuaXNTZWxlY3RlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxNiw3ICs3MTYsNyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlCiAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gbmV3U2VsZWN0aW9uOwogICAgICAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgp
OwogICAgICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJl
dEJyb3dzaW5nRW5hYmxlZCgpOwotICAgICAgICBpZiAobm9kZSAmJiAoY2FyZXRCcm93c2luZyB8
fCBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSAmJiBub2RlLT5yZW5kZXJlcigpKSB7CisgICAg
ICAgIGlmIChub2RlICYmIChjYXJldEJyb3dzaW5nIHx8IG5vZGUtPnJlbmRlcmVySXNDb250ZW50
RWRpdGFibGUoKSkgJiYgbm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHBvcyA9IG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZlbnQubG9j
YWxQb2ludCgpKTsKICAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24o
cG9zKTsKICAgICAgICAgfQpAQCAtMTE2OCw3ICsxMTY4LDcgQEAgQ3Vyc29yIEV2ZW50SGFuZGxl
cjo6c2VsZWN0Q3Vyc29yKGNvbnN0IAogCiAgICAgc3dpdGNoIChzdHlsZSA/IHN0eWxlLT5jdXJz
b3IoKSA6IENVUlNPUl9BVVRPKSB7CiAgICAgY2FzZSBDVVJTT1JfQVVUTzogewotICAgICAgICBi
b29sIGVkaXRhYmxlID0gKG5vZGUgJiYgbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7CisgICAg
ICAgIGJvb2wgZWRpdGFibGUgPSAobm9kZSAmJiBub2RlLT5yZW5kZXJlcklzQ29udGVudEVkaXRh
YmxlKCkpOwogICAgICAgICBib29sIGVkaXRhYmxlTGlua0VuYWJsZWQgPSBmYWxzZTsKIAogICAg
ICAgICAvLyBJZiB0aGUgbGluayBpcyBlZGl0YWJsZSwgdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIHRo
ZSBzZXR0aW5ncyB0byBzZWUgd2hldGhlciBvciBub3QgdGhlIGxpbmsgc2hvdWxkIGJlIGZvbGxv
d2VkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShy
ZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDcgKzUyNSw3IEBAIGJvb2wgSGl0VGVzdFJlc3Vs
dDo6aXNDb250ZW50RWRpdGFibGUoKSAKICAgICBpZiAobV9pbm5lck5vblNoYXJlZE5vZGUtPmhh
c1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKS0+aXNUZXh0RmllbGQoKTsKIAot
ICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAg
ICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUo
KTsKIH0KIAogYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0
KE5vZGUqIG5vZGUsIGludCB4LCBpbnQgeSwgY29uc3QgSW50UmVjdCYgcmVjdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gODEzODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDI3LDcgKzQwMjcsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
UG9pbnRSCiAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpOwogCiAgICAgLy8g
SWYgd2UgY2FuJ3QgZmluZCBhbiBhbmNlc3RvciB0byBjaGVjayBlZGl0YWJpbGl0eSBvbiwgb3Ig
ZWRpdGFiaWxpdHkgaXMgdW5jaGFuZ2VkLCB3ZSByZWN1ciBsaWtlIG5vcm1hbAotICAgIGlmICgh
YW5jZXN0b3IgfHwgYW5jZXN0b3ItPm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSA9PSBjaGls
ZE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFhbmNlc3RvciB8fCBhbmNlc3Rv
ci0+bm9kZSgpLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkgPT0gY2hpbGROb2RlLT5yZW5k
ZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBjaGlsZC0+cG9zaXRpb25G
b3JQb2ludChwb2ludEluQ2hpbGRDb29yZGluYXRlcyk7CiAKICAgICAvLyBPdGhlcndpc2UgcmV0
dXJuIGJlZm9yZSBvciBhZnRlciB0aGUgY2hpbGQsIGRlcGVuZGluZyBvbiBpZiB0aGUgY2xpY2sg
d2FzIHRvIHRoZSBsb2dpY2FsIGxlZnQgb3IgbG9naWNhbCByaWdodCBvZiB0aGUgY2hpbGQKQEAg
LTUwNTMsNyArNTA1Myw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc0xpbmVJZkVtcHR5KCkgY29u
c3QKICAgICBpZiAoIW5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlm
IChub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgbm9kZSgpLT5yb290RWRpdGFibGVFbGVt
ZW50KCkgPT0gbm9kZSgpKQorICAgIGlmIChub2RlKCktPnJlbmRlcmVySXNDb250ZW50RWRpdGFi
bGUoKSAmJiBub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBub2RlKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogICAgIGlmIChub2RlKCktPmlzU2hhZG93Um9vdCgpICYmIChu
b2RlKCktPnNoYWRvd0hvc3QoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJl
dmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDQsNyArMjEwNCw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUlubGluZUMKIHsKICAgICBpbnQgZW5kUGFkZGluZyA9
IGhhc092ZXJmbG93Q2xpcCgpID8gcGFkZGluZ0VuZCgpIDogMDsKICAgICAvLyBGSVhNRTogTmVl
ZCB0byBmaW5kIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMsIHNpbmNlIHNjcm9sbGJhcnMgY291bGQg
c2hvdyB3aGVuIHdlIGRvbid0IHdhbnQgdGhlbSB0by4KLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgIWVuZFBhZGRpbmcgJiYgbm9kZSgpICYmIG5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUo
KSAmJiBub2RlKCkgPT0gbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgJiYgc3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAh
ZW5kUGFkZGluZyAmJiBub2RlKCkgJiYgbm9kZSgpLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxl
KCkgJiYgbm9kZSgpID09IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICYmIHN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgZW5kUGFkZGluZyA9IDE7CiAgICAg
Zm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgIGFkZExheW91dE92ZXJmbG93KGN1cnItPnBh
ZGRlZExheW91dE92ZXJmbG93UmVjdChlbmRQYWRkaW5nKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM4LDcgKzYzOCw3
IEBAIGJvb2wgUmVuZGVyQm94OjpjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2wKICAgICAKIGJvb2wg
UmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAoc2Nyb2xsc092ZXJmbG93KCkgfHwgKG5v
ZGUoKSAmJiBub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpKSkgfHwgKG5vZGUoKSAmJiBub2Rl
KCktPmlzRG9jdW1lbnROb2RlKCkpOworICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
KHNjcm9sbHNPdmVyZmxvdygpIHx8IChub2RlKCkgJiYgbm9kZSgpLT5yZW5kZXJlcklzQ29udGVu
dEVkaXRhYmxlKCkpKSkgfHwgKG5vZGUoKSAmJiBub2RlKCktPmlzRG9jdW1lbnROb2RlKCkpOwog
fQogCiB2b2lkIFJlbmRlckJveDo6YXV0b3Njcm9sbCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0NCwx
NCArMjY0NCwxNCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiB7
CiAgICAgLy8gSWYgdGhpcyBpcyBhIG5vbi1hbm9ueW1vdXMgcmVuZGVyZXIgaW4gYW4gZWRpdGFi
bGUgYXJlYSwgdGhlbiBpdCdzIHNpbXBsZS4KICAgICBpZiAoTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAg
ICAgaWYgKCFub2RlLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAgICAg
IC8vIElmIGl0IGNhbiBiZSBmb3VuZCwgd2UgcHJlZmVyIGEgdmlzdWFsbHkgZXF1aXZhbGVudCBw
b3NpdGlvbiB0aGF0IGlzIGVkaXRhYmxlLiAKICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9u
KG5vZGUsIG9mZnNldCk7CiAgICAgICAgICAgICBQb3NpdGlvbiBjYW5kaWRhdGUgPSBwb3NpdGlv
bi5kb3duc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAgICAgICAgIGlmIChj
YW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAg
ICAgIGlmIChjYW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0
YWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2FuZGlkYXRl
LCBhZmZpbml0eSk7CiAgICAgICAgICAgICBjYW5kaWRhdGUgPSBwb3NpdGlvbi51cHN0cmVhbShD
YW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmRlcHJl
Y2F0ZWROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICBpZiAoY2FuZGlk
YXRlLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOwog
ICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9z
aXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3Bw
CShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDcgKzQ2MCw3IEBAIFJlbmRlckJsb2NrKiBS
b290SW5saW5lQm94OjpibG9jaygpIGNvbnMKIAogc3RhdGljIGJvb2wgaXNFZGl0YWJsZUxlYWYo
SW5saW5lQm94KiBsZWFmKQogewotICAgIHJldHVybiBsZWFmICYmIGxlYWYtPnJlbmRlcmVyKCkg
JiYgbGVhZi0+cmVuZGVyZXIoKS0+bm9kZSgpICYmIGxlYWYtPnJlbmRlcmVyKCktPm5vZGUoKS0+
aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbGVhZiAmJiBsZWFmLT5yZW5kZXJlcigp
ICYmIGxlYWYtPnJlbmRlcmVyKCktPm5vZGUoKSAmJiBsZWFmLT5yZW5kZXJlcigpLT5ub2RlKCkt
PnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogSW5saW5lQm94KiBSb290SW5saW5l
Qm94OjpjbG9zZXN0TGVhZkNoaWxkRm9yTG9naWNhbExlZnRQb3NpdGlvbihpbnQgbGVmdFBvc2l0
aW9uLCBib29sIG9ubHlFZGl0YWJsZUxlYXZlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVt
ZW50LmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBTVkdBRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdgogCiBib29sIFNWR0FFbGVtZW50OjpzdXBwb3J0c0Zv
Y3VzKCkgY29uc3QKIHsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAocmVu
ZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTM4NCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTEtMDMtMTcgIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZW5hbWUgTm9kZTo6aXNDb250ZW50
RWRpdGFibGUgYW5kIGFsbCBjYWxsIHNpdGVzIHRvIGZhc3RJc0NvbnRlbnRFZGl0YWJsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQyOTAKKworICAg
ICAgICBUaGlzIGlzIHBhcnQgb2YgdGhlIGVmZm9ydCB0byBzZXBhcmF0ZSBKUyBBUEkgSFRNTEVs
ZW1lbnQgaXNDb250ZW50RWRpdGFibGUgZnJvbQorICAgICAgICBpbnRlcm5hbCBOb2RlOjpyZW5k
ZXJlcklzQ29udGVudEVkaXRhYmxlLgorCisgICAgICAgICogc3JjL1dlYk5vZGUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAgICAgICogc3Jj
L1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEZvY3Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldENvbXBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbmZpcm1Db21wb3NpdGlvbik6CisKIDIwMTEtMDMt
MTcgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9k
ZS5jcHAJKHJldmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBib29sIFdlYk5vZGU6
OmlzVGV4dE5vZGUoKSBjb25zdAogCiBib29sIFdlYk5vZGU6OmlzQ29udGVudEVkaXRhYmxlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogYm9v
bCBXZWJOb2RlOjppc0VsZW1lbnROb2RlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUx
LDcgKzEyNTEsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRGb2N1cyhib29sIGVuYWJsZSkKICAg
ICAgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZv
Y3VzZWROb2RlKTsKICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNUZXh0Rm9ybUNvbnRy
b2woKSkKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+dXBkYXRlRm9jdXNBcHBlYXJhbmNl
KHRydWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvY3VzZWROb2RlLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9jdXNlZE5vZGUtPnJlbmRl
cmVySXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVG
b2N1c0FwcGVhcmFuY2UoKSBzZWxlY3RzIGFsbCB0aGUgdGV4dCBvZgogICAgICAgICAgICAgICAg
ICAgICAvLyBjb250ZW50c2VkaXRhYmxlIERJVnMuIFNvIHdlIHNldCB0aGUgc2VsZWN0aW9uIGV4
cGxpY2l0bHkKICAgICAgICAgICAgICAgICAgICAgLy8gaW5zdGVhZC4gTm90ZSB0aGF0IHRoaXMg
aGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBtb3ZpbmcgdGhlCkBAIC0xMzEzLDcgKzEzMTMsNyBAQCBi
b29sIFdlYlZpZXdJbXBsOjpzZXRDb21wb3NpdGlvbigKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlmIChyYW5nZSkgewogICAg
ICAgICBjb25zdCBOb2RlKiBub2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5yZW5kZXJlcklzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMzYyLDcgKzEzNjIsNyBAQCBib29sIFdlYlZpZXdJ
bXBsOjpjb25maXJtQ29tcG9zaXRpb24oY29uCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAocmFuZ2UpIHsKICAgICAgICAg
Y29uc3QgTm9kZSogbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgICAgICBpZiAo
IW5vZGUgfHwgIW5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmICghbm9kZSB8
fCAhbm9kZS0+cmVuZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMzg0
KQorKysgU291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNiBAQAorMjAxMS0wMy0xNyAgQ2hhbmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHJlbmFtZSBOb2Rl
Ojppc0NvbnRlbnRFZGl0YWJsZSBhbmQgYWxsIGNhbGwgc2l0ZXMgdG8gZmFzdElzQ29udGVudEVk
aXRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NDI5MAorCisgICAgICAgIFRoaXMgaXMgcGFydCBvZiB0aGUgZWZmb3J0IHRvIHNlcGFyYXRlIEpT
IEFQSSBIVE1MRWxlbWVudCBpc0NvbnRlbnRFZGl0YWJsZSBmcm9tCisgICAgICAgIGludGVybmFs
IE5vZGU6OnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGll
bnRIYWlrdTo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisKIDIwMTEtMDMtMDcgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24u
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhh
aWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudEhhaWt1LmNwcAkocmV2aXNpb24gODEzODQpCisrKyBTb3VyY2UvV2ViS2l0
L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmhhbmRsZUtleWJv
YXJkRXYKICAgICBpZiAoIXN0YXJ0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3RhcnQt
PmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICBpZiAoc3RhcnQtPnJlbmRlcmVySXNDb250ZW50
RWRpdGFibGUoKSkgewogICAgICAgICBzd2l0Y2ggKGtldmVudC0+d2luZG93c1ZpcnR1YWxLZXlD
b2RlKCkpIHsKICAgICAgICAgY2FzZSBWS19CQUNLOgogICAgICAgICAgICAgZnJhbWUtPmVkaXRv
cigpLT5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlvbkJhY2t3YXJkLApJbmRleDogU291cmNl
L1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDgxMzg0KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMy0xNyAgQ2hhbmcgU2h1ICA8Y3No
dUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIHJlbmFtZSBOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSBhbmQgYWxsIGNhbGwgc2l0ZXMg
dG8gZmFzdElzQ29udGVudEVkaXRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NDI5MAorCisgICAgICAgIFRoaXMgaXMgcGFydCBvZiB0aGUgZWZm
b3J0IHRvIHNlcGFyYXRlIEpTIEFQSSBIVE1MRWxlbWVudCBpc0NvbnRlbnRFZGl0YWJsZSBmcm9t
CisgICAgICAgIGludGVybmFsIE5vZGU6OnJlbmRlcmVySXNDb250ZW50RWRpdGFibGUuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisKIDIwMTEtMDMtMTYg
IEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA4MTM4
NCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6
aGFuZGxlS2V5Ym9hcmRFdmVudAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogcmVm
YWN0b3IgYWxsIG9mIHRoaXMgdG8gdXNlIEFjdGlvbnMgb3Igc29tZXRoaW5nIGxpa2UgdGhlbQot
ICAgIGlmIChzdGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAgIGlmIChzdGFydC0+cmVu
ZGVyZXJJc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgIGJvb2wgZG9TcGF0aWFsTmF2aWdh
dGlvbiA9IGZhbHNlOwogICAgICAgICBpZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZnJh
bWUpKSB7CiAgICAgICAgICAgICBpZiAoIWtldmVudC0+bW9kaWZpZXJzKCkpIHsK
</data>
<flag name="review"
          id="78322"
          type_id="1"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86501</attachid>
            <date>2011-03-22 14:08:07 -0700</date>
            <delta_ts>2011-03-24 06:49:32 -0700</delta_ts>
            <desc>fix patch 2</desc>
            <filename>54290_2.patch</filename>
            <type>text/plain</type>
            <size>70932</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNjkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU4IEBACisyMDExLTAzLTIyICBDaGFuZyBT
aHUgIDxjc2h1QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgcmVuYW1lIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlIGFuZCBhbGwgY2Fs
bCBzaXRlcyB0byByZW5kZXJlcklzRWRpdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MjkwCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIHRo
ZSBlZmZvcnQgdG8gc2VwYXJhdGUgSlMgQVBJIEhUTUxFbGVtZW50IGlzQ29udGVudEVkaXRhYmxl
IGZyb20KKyAgICAgICAgaW50ZXJuYWwgTm9kZTo6cmVuZGVyZXJJc0VkaXRhYmxlLgorCisgICAg
ICAgIENvZGUgb3B0aW1pemF0aW9uLiBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWNjZXB0c0VkaXRp
bmdGb2N1cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6cmVuZGVyZXJJc0VkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNob3VsZFVz
ZUlucHV0TWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNhblN0YXJ0U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0NvbnRlbnRFZGl0YWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW5kZXJlcklzRWRpdGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6cmVuZGVyZXJJc1JpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKiBk
b20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dFJlbmRlcmVkRWRpdGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNSZW5kZXJlZEVkaXRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjphdEVkaXRpbmdCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpQb3NpdGlvbjo6cGFyZW50RWRpdGluZ0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBv
c2l0aW9uOjp1cHN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVh
bSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aXNDYW5kaWRhdGUpOgorICAgICAgICAq
IGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRl
cmF0b3I6OmlzQ2FuZGlkYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZE5vZGVDb21tYW5kOjpBcHBlbmROb2RlQ29t
bWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBlbmROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAg
KiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRh
aW5zTm9uRWRpdGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCk6
CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0pOgor
ICAgICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppc0RlbGV0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5n
RGVsZXRhYmxlRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6
OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6
ZG9VbmFwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpjYW5EZWxldGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmVydGljYWxTY3JvbGxEaXN0YW5jZSk6
CisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKToKKyAgICAgICAgKiBlZGl0aW5nL0lu
ZGVudE91dGRlbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRD
b21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydEludG9U
ZXh0Tm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6Oklu
c2VydE5vZGVCZWZvcmVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZv
cmVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZvcmVD
b21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Sm9pblRleHROb2Rlc0NvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6Sm9pblRleHROb2Rlc0NvbW1hbmQ6OmRvVW5hcHBseSk6Cisg
ICAgICAgICogZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9BcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9VbmFwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbW92ZU5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bW92ZU5vZGVDb21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVu
dDo6UmVwbGFjZW1lbnRGcmFnbWVudCk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVj
dEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKiBl
ZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRF
bGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxl
bWVudENvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9B
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1JlYXBwbHkpOgor
ICAgICAgICAqIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21t
YW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmNhbm9uaWNhbFBvc2l0aW9uKToKKyAg
ICAgICAgKiBlZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OmRvVW5hcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OmRvUmVh
cHBseSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpoaWdoZXN0RWRpdGFibGVSb290KToKKyAgICAgICAgKFdlYkNvcmU6Omxvd2VzdEVkaXRh
YmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6aXNFZGl0YWJsZVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUmljaGx5RWRpdGFibGVQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dGVuZFJhbmdlVG9XcmFwcGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ05vZGVXaXRoVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVP
ZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6aGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuTWVyZ2VMaXN0cyk6CisgICAgICAgICogZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGVhZldpdGhTYW1lRWRp
dGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaW5lUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6bmV4dExlYWZXaXRoU2FtZUVkaXRhYmlsaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZlBhcmFn
cmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgICogaHRt
bC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxl
bWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxl
bWVudDo6c2V0QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojpj
YW5TdGFydFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6
dHJlYXRMaW5rQXNMaXZlRm9yRXZlbnRUeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OnN1cHBvcnRzRm9j
dXMpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1l
bnQ6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojpj
b250ZW50RWRpdGFibGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAgICAgICAg
KiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
OjpjYW5Qcm9jZXNzRHJhZyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6CisgICAgICAgICog
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVsaW5xdWlzaGVz
RWRpdGluZ0ZvY3VzKToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0
aW9uRm9yUG9pbnRSZXNwZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6Omhhc0xpbmVJZkVtcHR5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNh
bGx5U2Nyb2xsZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpYmxlUG9zaXRpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
RWRpdGFibGVMZWFmKToKKyAgICAgICAgKiBzdmcvU1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorCiAyMDExLTAzLTIyICBEYXZp
ZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBG
cmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjYxLDEwICs2NjEsMTAgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojppc1JlYWRPbgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAog
ICAgICAgICBIVE1MRWxlbWVudCogYm9keSA9IGRvY3VtZW50LT5ib2R5KCk7Ci0gICAgICAgIGlm
IChib2R5ICYmIGJvZHktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChib2R5ICYm
IGJvZHktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIHJldHVybiAhZG9jdW1lbnQtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgICAg
IHJldHVybiAhZG9jdW1lbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpOwogICAgIH0KIAogICAgIGlm
IChtX3JlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKQEAgLTY3NSw3ICs2NzUsNyBAQCBi
b29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUmVhZE9uCiAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KGJveC0+bm9kZSgpKS0+cmVhZE9u
bHkoKTsKICAgICB9CiAKLSAgICByZXR1cm4gIW1fcmVuZGVyZXItPm5vZGUoKSB8fCAhbV9yZW5k
ZXJlci0+bm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiAhbV9yZW5kZXJl
ci0+bm9kZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpOwog
fQogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyZWVuKCkgY29uc3QK
QEAgLTE4MjksNyArMTgyOSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNj
ZXNzaWIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIEFueXRoaW5nIHRoYXQg
aXMgY29udGVudCBlZGl0YWJsZSBzaG91bGQgbm90IGJlIGlnbm9yZWQuCi0gICAgLy8gSG93ZXZl
ciwgb25lIGNhbm5vdCBqdXN0IGNhbGwgbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSBzaW5jZSB0
aGF0IHdpbGwgYXNrIGlmIGl0cyBwYXJlbnRzCisgICAgLy8gSG93ZXZlciwgb25lIGNhbm5vdCBq
dXN0IGNhbGwgbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgc2luY2UgdGhhdCB3aWxsIGFzayBp
ZiBpdHMgcGFyZW50cwogICAgIC8vIGFyZSBhbHNvIGVkaXRhYmxlLiBPbmx5IHRoZSB0b3AgbGV2
ZWwgY29udGVudCBlZGl0YWJsZSByZWdpb24gc2hvdWxkIGJlIGV4cG9zZWQuCiAgICAgaWYgKG5v
ZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIHN0YXRpYyBXaWRnZXQqIHdpZGdldEZv
ck5vZGUoTm9kZSogZm9jdXMKIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0aW5nRm9jdXMoTm9kZSog
bm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkpOworICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CiAKICAg
ICBOb2RlKiByb290ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEZyYW1lKiBm
cmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShy
ZXZpc2lvbiA4MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzExLDcgKzcxMSw3IEBAIHZvaWQgTm9kZTo6ZGVwcmVjYXRlZFBhcnNlckFkZENo
aWxkKFBhc3MKIHsKIH0KIAotYm9vbCBOb2RlOjppc0NvbnRlbnRFZGl0YWJsZShFZGl0YWJsZUxl
dmVsIGVkaXRhYmxlTGV2ZWwpIGNvbnN0Citib29sIE5vZGU6OnJlbmRlcmVySXNFZGl0YWJsZShF
ZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGRvY3VtZW50KCkt
PmluRGVzaWduTW9kZSgpIHx8IChkb2N1bWVudCgpLT5mcmFtZSgpICYmIGRvY3VtZW50KCktPmZy
YW1lKCktPnBhZ2UoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCktPmlzRWRpdGFibGUo
KSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzQwLDcgKzc0MCw3IEBAIGJvb2wgTm9kZTo6
aXNDb250ZW50RWRpdGFibGUoRWRpdGFibGVMZXYKIAogYm9vbCBOb2RlOjpzaG91bGRVc2VJbnB1
dE1ldGhvZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCk7CisgICAg
cmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZSgpOwogfQogCiBSZW5kZXJCb3gqIE5vZGU6OnJlbmRl
ckJveCgpIGNvbnN0CkBAIC0xNTE0LDcgKzE1MTQsNyBAQCBpbnQgTm9kZTo6bWF4Q2hhcmFjdGVy
T2Zmc2V0KCkgY29uc3QKIC8vIGlzIG9idmlvdXNseSBtaXNwbGFjZWQuCiBib29sIE5vZGU6OmNh
blN0YXJ0U2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICBpZiAocmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgaWYgKHJlbmRlcmVyKCkpIHsKQEAgLTE1OTIsNyArMTU5Miw3IEBAIEVsZW1lbnQgKk5vZGU6
OmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQKIEVsZW1lbnQqIE5vZGU6OnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2Rl
KiBuID0gY29uc3RfY2FzdDxOb2RlKj4odGhpcyk7IG4gJiYgbi0+aXNDb250ZW50RWRpdGFibGUo
KTsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IGNvbnN0X2Nhc3Q8
Tm9kZSo+KHRoaXMpOyBuICYmIG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpOyBuID0gbi0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAgICAgICAgIGlmIChuLT5oYXNUYWdO
YW1lKGJvZHlUYWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA4MTY5MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw4ICszMjcsMTIgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZl
bnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0Owog
Ci0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzQ29udGVudEVk
aXRhYmxlKEVkaXRhYmxlKTsgfQotICAgIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSBj
b25zdCB7IHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZShSaWNobHlFZGl0YWJsZSk7IH0KKyNpZiBQ
TEFURk9STShNQUMpCisgICAgLy8gT2JqZWN0aXZlLUMgZXh0ZW5zaW9ucworICAgIGJvb2wgaXND
b250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcklzRWRpdGFibGUoRWRpdGFi
bGUpOyB9CisjZW5kaWYKKyAgICBib29sIHJlbmRlcmVySXNFZGl0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIHJlbmRlcmVySXNFZGl0YWJsZShFZGl0YWJsZSk7IH0KKyAgICBib29sIHJlbmRlcmVySXNS
aWNobHlFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZShSaWNobHlF
ZGl0YWJsZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25z
dDsKICAgICB2aXJ0dWFsIEludFJlY3QgZ2V0UmVjdCgpIGNvbnN0OwogICAgIEludFJlY3QgcmVu
ZGVyUmVjdChib29sKiBpc1JlcGxhY2VkKTsKQEAgLTY2MCw3ICs2NjQsNyBAQCBwcml2YXRlOgog
I2VuZGlmCiAKICAgICBlbnVtIEVkaXRhYmxlTGV2ZWwgeyBFZGl0YWJsZSwgUmljaGx5RWRpdGFi
bGUgfTsKLSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKEVkaXRhYmxlTGV2ZWwpIGNvbnN0Owor
ICAgIGJvb2wgcmVuZGVyZXJJc0VkaXRhYmxlKEVkaXRhYmxlTGV2ZWwpIGNvbnN0OwogCiAgICAg
dm9pZCBzZXRTdHlsZUNoYW5nZShTdHlsZUNoYW5nZVR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogc3RhdGljIE5vZGUqIG5leHRSZW5kZXJlZEVkaXRhYmxlKE5vZGUqIG5vZGUp
CiB7CiAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+bmV4dExlYWZOb2RlKCkpKSB7Ci0gICAgICAg
IGlmICghbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFub2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJl
cikKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIE5vZGUqIG5leHRSZW5kZXJlZEVkaXRhYmxlKE5v
ZGUqIAogc3RhdGljIE5vZGUqIHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShOb2RlKiBub2RlKQog
ewogICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnByZXZpb3VzTGVhZk5vZGUoKSkpIHsKLSAgICAg
ICAgaWYgKCFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW5vZGUtPnJl
bmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRl
cmVyKQpAQCAtMzQ1LDE1ICszNDUsMTUgQEAgYm9vbCBQb3NpdGlvbjo6YXRMYXN0RWRpdGluZ1Bv
c2l0aW9uRm9yTgogYm9vbCBQb3NpdGlvbjo6YXRFZGl0aW5nQm91bmRhcnkoKSBjb25zdAogewog
ICAgIFBvc2l0aW9uIG5leHRQb3NpdGlvbiA9IGRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91
bmRhcnkpOwotICAgIGlmIChhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmIG5leHRQ
b3NpdGlvbi5pc05vdE51bGwoKSAmJiAhbmV4dFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlz
Q29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0UG9zaXRpb24uZGVwcmVjYXRl
ZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAKICAgICBQb3NpdGlvbiBwcmV2UG9zaXRpb24gPSB1cHN0cmVhbShDYW5Dcm9zc0VkaXRp
bmdCb3VuZGFyeSk7Ci0gICAgaWYgKGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBw
cmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChhdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAKLSAgICByZXR1cm4gbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0UG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKQotICAgICAgICAmJiBw
cmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiBuZXh0UG9zaXRpb24uaXNOb3ROdWxs
KCkgJiYgIW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUo
KQorICAgICAgICAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKIH0KIAogTm9kZSogUG9zaXRp
b246OnBhcmVudEVkaXRpbmdCb3VuZGFyeSgpIGNvbnN0CkBAIC0zNjYsNyArMzY2LDcgQEAgTm9k
ZSogUG9zaXRpb246OnBhcmVudEVkaXRpbmdCb3VuZGFyeSgpIAogICAgICAgICByZXR1cm4gMDsK
IAogICAgIE5vZGUqIGJvdW5kYXJ5ID0gbV9hbmNob3JOb2RlLmdldCgpOwotICAgIHdoaWxlIChi
b3VuZGFyeSAhPSBkb2N1bWVudEVsZW1lbnQgJiYgYm91bmRhcnktPnBhcmVudE5vZGUoKSAmJiBt
X2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgPT0gYm91bmRhcnktPnBhcmVudE5vZGUo
KS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICB3aGlsZSAoYm91bmRhcnkgIT0gZG9jdW1lbnRF
bGVtZW50ICYmIGJvdW5kYXJ5LT5wYXJlbnROb2RlKCkgJiYgbV9hbmNob3JOb2RlLT5yZW5kZXJl
cklzRWRpdGFibGUoKSA9PSBib3VuZGFyeS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKICAgICAgICAgYm91bmRhcnkgPSBib3VuZGFyeS0+cGFyZW50Tm9kZSgpOwogICAgIAog
ICAgIHJldHVybiBib3VuZGFyeTsKQEAgLTUyNSwxNyArNTI1LDE3IEBAIFBvc2l0aW9uIFBvc2l0
aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRv
ciBzaG91bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KICAgICBQb3NpdGlv
bkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFu
Y2hvciA/IFBvc2l0aW9uKG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2Rl
LmdldCgpKSkgOiAqdGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0
VmlzaWJsZTsKLSAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCk7CisgICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2RlLT5yZW5kZXJlcklz
RWRpdGFibGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBib29sIGJv
dW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwogICAgIGZvciAoOyAhY3VycmVudFBvcy5hdFN0YXJ0KCk7
IGN1cnJlbnRQb3MuZGVjcmVtZW50KCkpIHsKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBj
dXJyZW50UG9zLm5vZGUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGNoZWNrIGZvciBh
biBlZGl0YWJpbGl0eSBjaGFuZ2UgaWYgd2UgaGF2ZW4ndCBtb3ZlZCB0byBhIGRpZmZlcmVudCBu
b2RlLAotICAgICAgICAvLyB0byBhdm9pZCB0aGUgZXhwZW5zZSBvZiBjb21wdXRpbmcgaXNDb250
ZW50RWRpdGFibGUoKS4KKyAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY29tcHV0
aW5nIHJlbmRlcmVySXNFZGl0YWJsZSgpLgogICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gbGFz
dE5vZGUpIHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4KLSAgICAg
ICAgICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCk7CisgICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJlbnROb2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICAgICAgICAgIGlmIChzdGFydEVkaXRhYmxlICE9IGN1
cnJlbnRFZGl0YWJsZSkgewogICAgICAgICAgICAgICAgIGlmIChydWxlID09IENhbm5vdENyb3Nz
RWRpdGluZ0JvdW5kYXJ5KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTY0NywxNyAr
NjQ3LDE3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKEVkaXRpbmdCb3UKICAgICAv
LyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVy
IHBvc2l0aW9ucy4KICAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JU
eXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IFBvc2l0aW9uKG1fYW5jaG9yTm9kZSwgY2Fy
ZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKICAgICBQb3NpdGlvbkl0
ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKLSAgICBib29sIHN0YXJ0RWRpdGFibGUg
PSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBzdGFydEVkaXRhYmxl
ID0gc3RhcnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9
IHN0YXJ0Tm9kZTsKICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwogICAgIGZvciAo
OyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zLmluY3JlbWVudCgpKSB7ICAgCiAgICAg
ICAgIE5vZGUqIGN1cnJlbnROb2RlID0gY3VycmVudFBvcy5ub2RlKCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBEb24ndCBjaGVjayBmb3IgYW4gZWRpdGFiaWxpdHkgY2hhbmdlIGlmIHdlIGhhdmVu
J3QgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbm9kZSwKLSAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGV4
cGVuc2Ugb2YgY29tcHV0aW5nIGlzQ29udGVudEVkaXRhYmxlKCkuCisgICAgICAgIC8vIHRvIGF2
b2lkIHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyByZW5kZXJlcklzRWRpdGFibGUoKS4KICAgICAg
ICAgaWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBj
aGFuZ2UgZWRpdGFiaWxpdHkuCi0gICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1
cnJlbnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgICAgICAgICAgYm9vbCBjdXJyZW50
RWRpdGFibGUgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CiAgICAgICAgICAg
ICBpZiAoc3RhcnRFZGl0YWJsZSAhPSBjdXJyZW50RWRpdGFibGUpIHsKICAgICAgICAgICAgICAg
ICBpZiAocnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC03OTksMTAgKzc5OSwxMCBAQCBib29sIFBvc2l0aW9uOjppc0NhbmRp
ZGF0ZSgpIGNvbnN0CiAgICAgICAgIGlmICh0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+aGVpZ2h0
KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CiAgICAgICAgICAgICBp
ZiAoIVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdo
dChyZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVk
Tm9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgp
KSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9k
ZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9u
ZShkZXByZWNhdGVkTm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxl
KCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAm
JiBhdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJl
Y2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CiAKICAgICByZXR1cm4gZmFsc2U7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lv
biA4MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6aXND
YW5kaWRhdGUoKSBjb24KICAgICAgICAgaWYgKHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5oZWln
aHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKICAgICAgICAgICAg
IGlmICghUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVp
Z2h0KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdGFydE9mTm9kZSgpICYm
ICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9u
Ojpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX2FuY2hvck5vZGUpICYmIFBvc2l0aW9uKCp0aGlzKS5h
dEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX2Fu
Y2hvck5vZGUpICYmIFBvc2l0aW9uKCp0aGlzKS5hdEVkaXRpbmdCb3VuZGFyeSgpOwogICAgICAg
ICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVD
b21tYW5kLmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fw
cGVuZE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBBcHBl
bmROb2RlQ29tbWFuZDo6QXBwZW5kTm9kZUNvbW1hbmQoUGFzCiAgICAgQVNTRVJUKG1fbm9kZSk7
CiAgICAgQVNTRVJUKCFtX25vZGUtPnBhcmVudE5vZGUoKSk7CiAKLSAgICBBU1NFUlQobV9wYXJl
bnQtPmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIW1fcGFyZW50LT5hdHRhY2hlZCgpKTsKKyAgICBB
U1NFUlQobV9wYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFtX3BhcmVudC0+YXR0YWNo
ZWQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbmRBWFRleHRDaGFuZ2VkSWdub3JpbmdMaW5lQnJl
YWtzKE5vZGUqIG5vZGUsIEFYT2JqZWN0Q2FjaGU6OkFYVGV4dENoYW5nZSB0ZXh0Q2hhbmdlKQpA
QCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBzZW5kQVhUZXh0Q2hhbmdlZElnbm9yaW5nTGlu
CiAKIHZvaWQgQXBwZW5kTm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICghbV9wYXJl
bnQtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgbV9wYXJlbnQtPmF0dGFjaGVkKCkpCisgICAgaWYg
KCFtX3BhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgbV9wYXJlbnQtPmF0dGFjaGVkKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAgLTY4
LDcgKzY4LDcgQEAgdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgQXBw
ZW5kTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX3BhcmVudC0+aXNDb250
ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fcGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBOZWVkIHRvIG5vdGlmeSB0aGlzIGJl
Zm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgdGV4dApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMTcsMTIgKzEwMTcsMTIgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRB
cHBseQogCiBzdGF0aWMgYm9vbCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKE5vZGUqIG5vZGUp
CiB7Ci0gICAgaWYgKCFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghbm9kZS0+
cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgTm9kZSog
c2libGluZyA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKICAgICBmb3IgKE5vZGUqIGRl
c2NlbmRlbnQgPSBub2RlLT5maXJzdENoaWxkKCk7IGRlc2NlbmRlbnQgJiYgZGVzY2VuZGVudCAh
PSBzaWJsaW5nOyBkZXNjZW5kZW50ID0gZGVzY2VuZGVudC0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7
Ci0gICAgICAgIGlmICghZGVzY2VuZGVudC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAg
aWYgKCFkZXNjZW5kZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtMTAzNywxMCArMTAzNywxMCBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbmV4dDsgbm9k
ZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gbmV4dC5nZXQoKSkgewogICAgICAgICBu
ZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogCi0gICAgICAgIGlmICghbm9kZS0+cmVu
ZGVyZXIoKSB8fCAhbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFub2Rl
LT5yZW5kZXJlcigpIHx8ICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLT5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAoIW5vZGUt
PnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZSgpICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewog
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHBsYWludGV4dC1vbmx5IHJlZ2lvbi4gT25seSBwcm9j
ZWVkIGlmIGl0J3MgZnVsbHkgc2VsZWN0ZWQuCiAgICAgICAgICAgICAvLyBwYXN0RW5kTm9kZSBp
cyB0aGUgbm9kZSBhZnRlciB0aGUgbGFzdCBmdWxseSBzZWxlY3RlZCBub2RlLCBzbyBpZiBpdCdz
IGluc2lkZSBub2RlIHRoZW4KICAgICAgICAgICAgIC8vIG5vZGUgaXNuJ3QgZnVsbHkgc2VsZWN0
ZWQuCkBAIC0xMDU5LDcgKzEwNTksNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlu
bGluZVN0eWxlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChu
b2RlLT5jaGlsZE5vZGVDb3VudCgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMo
cGFzdEVuZE5vZGUpIHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24obm9kZSkgfHwgIW5vZGUt
PnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgIGlmIChub2Rl
LT5jb250YWlucyhwYXN0RW5kTm9kZSkgfHwgY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbihub2Rl
KSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQo
bm9kZSkpIHsKICAgICAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGlu
ZygpOwpAQCAtMTEzNCw3ICsxMTM0LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3Zl
SW5saW5lU3R5bAogewogICAgIEFTU0VSVChlbGVtZW50KTsKIAotICAgIGlmICghZWxlbWVudC0+
cGFyZW50Tm9kZSgpIHx8ICFlbGVtZW50LT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxl
KCkpCisgICAgaWYgKCFlbGVtZW50LT5wYXJlbnROb2RlKCkgfHwgIWVsZW1lbnQtPnBhcmVudE5v
ZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92ZShlbGVtZW50LmdldCgpKSkgewpAQCAt
MTY1MSwxMyArMTY1MSwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzdXJyb3VuZE5vZGVS
YW5nCiAKICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcgPSBlbGVtZW50LT5uZXh0U2libGlu
ZygpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91
c1NpYmxpbmcoKTsKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxpbmctPmlzRWxlbWVu
dE5vZGUoKSAmJiBuZXh0U2libGluZy0+aXNDb250ZW50RWRpdGFibGUoKQorICAgIGlmIChuZXh0
U2libGluZyAmJiBuZXh0U2libGluZy0+aXNFbGVtZW50Tm9kZSgpICYmIG5leHRTaWJsaW5nLT5y
ZW5kZXJlcklzRWRpdGFibGUoKQogICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbGVt
ZW50LmdldCgpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obmV4dFNpYmxpbmcuZ2V0KCkpKSkKICAg
ICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obmV4dFNpYmxpbmcuZ2V0KCkpKTsKIAotICAgIGlmIChwcmV2aW91c1NpYmxpbmcg
JiYgcHJldmlvdXNTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkgJiYgcHJldmlvdXNTaWJsaW5nLT5p
c0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBwcmV2aW91
c1NpYmxpbmctPmlzRWxlbWVudE5vZGUoKSAmJiBwcmV2aW91c1NpYmxpbmctPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKSB7CiAgICAgICAgIE5vZGUqIG1lcmdlZEVsZW1lbnQgPSBwcmV2aW91c1NpYmxp
bmctPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChtZXJnZWRFbGVtZW50LT5pc0VsZW1lbnRO
b2RlKCkgJiYgbWVyZ2VkRWxlbWVudC0+aXNDb250ZW50RWRpdGFibGUoKQorICAgICAgICBpZiAo
bWVyZ2VkRWxlbWVudC0+aXNFbGVtZW50Tm9kZSgpICYmIG1lcmdlZEVsZW1lbnQtPnJlbmRlcmVy
SXNFZGl0YWJsZSgpCiAgICAgICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSwgc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG1lcmdlZEVsZW1lbnQpKSkKICAgICAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMo
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KHByZXZpb3VzU2libGluZy5nZXQoKSksIHN0YXRpY19jYXN0
PEVsZW1lbnQqPihtZXJnZWRFbGVtZW50KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNjkxKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNDgsNyArMTA0OCw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OmJyZWFrT3V0T2ZFbXAKICAgICAvLyBGSVhNRTogQ2FuJ3Qgd2UgZG8gc29tZXRoaW5nIGJldHRl
ciB3aGVuIHRoZSBpbW1lZGlhdGUgcGFyZW50IHdhc24ndCBhIGxpc3Qgbm9kZT8KICAgICBpZiAo
IWxpc3ROb2RlCiAgICAgICAgIHx8ICghbGlzdE5vZGUtPmhhc1RhZ05hbWUodWxUYWcpICYmICFs
aXN0Tm9kZS0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAgICAgIHx8ICFsaXN0Tm9kZS0+aXNDb250
ZW50RWRpdGFibGUoKQorICAgICAgICB8fCAhbGlzdE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgp
CiAgICAgICAgIHx8IGxpc3ROb2RlID09IGVtcHR5TGlzdEl0ZW0tPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgxNjkxKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpEZWxl
dGVCdXR0b25Db250CiAKIHN0YXRpYyBib29sIGlzRGVsZXRhYmxlRWxlbWVudChjb25zdCBOb2Rl
KiBub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFu
b2RlLT5pbkRvY3VtZW50KCkgfHwgIW5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYg
KCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmluRG9jdW1lbnQoKSB8
fCAhbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIEluIGdlbmVyYWwgd2Ugd2FudCB0byBvbmx5IGRyYXcgdGhlIFVJIGFyb3VuZCBvYmpl
Y3Qgb2YgYSBjZXJ0YWluIGFyZWEsIGJ1dCB3ZSBzdGlsbCBrZWVwIHRoZSBtaW4gd2lkdGgvaGVp
Z2h0IHRvCkBAIC0xNTYsNyArMTU2LDcgQEAgc3RhdGljIEhUTUxFbGVtZW50KiBlbmNsb3NpbmdE
ZWxldGFibGVFbAogCiAgICAgLy8gVGhlIGVuY2xvc2luZ05vZGVPZlR5cGUgZnVuY3Rpb24gb25s
eSB3b3JrcyBvbiBub2RlcyB0aGF0IGFyZSBlZGl0YWJsZQogICAgIC8vICh3aGljaCBpcyBzdHJh
bmdlLCBnaXZlbiBpdHMgbmFtZSkuCi0gICAgaWYgKCFjb250YWluZXItPmlzQ29udGVudEVkaXRh
YmxlKCkpCisgICAgaWYgKCFjb250YWluZXItPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIE5vZGUqIGVsZW1lbnQgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKGZp
cnN0UG9zaXRpb25Jbk5vZGUoY29udGFpbmVyKSwgJmlzRGVsZXRhYmxlRWxlbWVudCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBA
QCB2b2lkIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoCiB7CiAgICAgQVNTRVJU
KG1fbm9kZSk7CiAKLSAgICBpZiAoIW1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBp
ZiAoIW1fbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIERlbGV0ZUZyb21U
ZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBsCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7CiAKLSAgICBp
ZiAoIW1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fbm9kZS0+cmVuZGVy
ZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgRXhjZXB0aW9u
Q29kZSBlYzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNyAr
MzQyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKAogICAgICAg
ICAKICAgICBpZiAobV9zdGFydFJvb3QgIT0gbV9lbmRSb290ICYmICEobm9kZS0+aXNEZXNjZW5k
YW50T2YobV9zdGFydFJvb3QuZ2V0KCkpICYmIG5vZGUtPmlzRGVzY2VuZGFudE9mKG1fZW5kUm9v
dC5nZXQoKSkpKSB7CiAgICAgICAgIC8vIElmIGEgbm9kZSBpcyBub3QgaW4gYm90aCB0aGUgc3Rh
cnQgYW5kIGVuZCBlZGl0YWJsZSByb290cywgcmVtb3ZlIGl0IG9ubHkgaWYgaXRzIGluc2lkZSBh
biBlZGl0YWJsZSByZWdpb24uCi0gICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9kZSgpLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIG5vbi1lZGl0
YWJsZSBhdG9taWMgbm9kZXMuCiAgICAgICAgICAgICBpZiAoIW5vZGUtPmZpcnN0Q2hpbGQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CShyZXZpc2lvbiA4MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIGJvb2wgRWRpdG9yOjpjYW5EZWxldGVS
YW5nZShSYW5nZSogcmFuZ2UKICAgICBpZiAoIXN0YXJ0Q29udGFpbmVyIHx8ICFlbmRDb250YWlu
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXN0YXJ0Q29udGFpbmVy
LT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFlbmRDb250YWluZXItPmlzQ29udGVudEVkaXRhYmxl
KCkpCisgICAgaWYgKCFzdGFydENvbnRhaW5lci0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgfHwgIWVu
ZENvbnRhaW5lci0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICBpZiAocmFuZ2UtPmNvbGxhcHNlZChlYykpIHsKQEAgLTIxNjIsNyArMjE2Miw3
IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWEKICAgICAKICAgICAv
LyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgYmFpbC4KICAgICBOb2RlKiBlZGl0
YWJsZU5vZGUgPSBzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAoIWVkaXRh
YmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICgh
ZWRpdGFibGVOb2RlIHx8ICFlZGl0YWJsZU5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoZWRpdGFi
bGVOb2RlKSkKQEAgLTIyMzMsNyArMjIzMyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3IKIAogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhbiBlZGl0YWJsZSBub2Rl
LCBiYWlsLgogICAgIE5vZGUqIGVkaXRhYmxlTm9kZSA9IHNwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+aXNDb250
ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc1NwZWxs
Q2hlY2tpbmdFbmFibGVkRm9yKGVkaXRhYmxlTm9kZSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1
NCw3IEBAIHN0YXRpYyBpbnQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFtZSoKICAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICBpZiAoIXN0eWxlKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoIShzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCB8
fCBzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT0FVVE8gfHwgZm9jdXNlZE5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkpKQorICAgIGlmICghKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMIHx8IHN0
eWxlLT5vdmVyZmxvd1koKSA9PSBPQVVUTyB8fCBmb2N1c2VkTm9kZS0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgaGVpZ2h0ID0gc3RkOjptaW48aW50
Pih0b1JlbmRlckJveChyZW5kZXJlciktPmNsaWVudEhlaWdodCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZpc2lv
biA4MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDE0ICsxNDksMTQgQEAgTm9kZSogZW5jbG9zaW5nQmxv
Y2tUb1NwbGl0VHJlZVRvKE5vZGUqIAogewogICAgIE5vZGUqIGxhc3RCbG9jayA9IHN0YXJ0Tm9k
ZTsKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydE5vZGU7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkp
IHsKLSAgICAgICAgaWYgKCFuLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW4t
PnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RCbG9jazsKLSAg
ICAgICAgaWYgKGlzVGFibGVDZWxsKG4pIHx8IG4tPmhhc1RhZ05hbWUoYm9keVRhZykgfHwgIW4t
PnBhcmVudE5vZGUoKSB8fCAhbi0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8
IGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKG4pKQorICAgICAgICBpZiAoaXNUYWJsZUNlbGwobikg
fHwgbi0+aGFzVGFnTmFtZShib2R5VGFnKSB8fCAhbi0+cGFyZW50Tm9kZSgpIHx8ICFuLT5wYXJl
bnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8IGlzRWxlbWVudEZvckZvcm1hdEJsb2Nr
KG4pKQogICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgIGlmIChpc0Jsb2NrKG4pKQogICAg
ICAgICAgICAgbGFzdEJsb2NrID0gbjsKICAgICAgICAgaWYgKGlzTGlzdEVsZW1lbnQobikpCi0g
ICAgICAgICAgICByZXR1cm4gbi0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpID8g
bi0+cGFyZW50Tm9kZSgpIDogbjsKKyAgICAgICAgICAgIHJldHVybiBuLT5wYXJlbnROb2RlKCkt
PnJlbmRlcmVySXNFZGl0YWJsZSgpID8gbi0+cGFyZW50Tm9kZSgpIDogbjsKICAgICB9CiAgICAg
cmV0dXJuIGxhc3RCbG9jazsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50
T3V0ZGVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTY5MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAsNyArMTIwLDcgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncgog
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kT2ZQYXJhZ3JhcGggPSBlbmRPZlBhcmFncmFw
aCh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaCk7CiAKICAgICBOb2RlKiBlbmNsb3NpbmdOb2RlID0g
ZW5jbG9zaW5nTm9kZU9mVHlwZSh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVu
dCgpLCAmaXNMaXN0T3JJbmRlbnRCbG9ja3F1b3RlKTsKLSAgICBpZiAoIWVuY2xvc2luZ05vZGUg
fHwgIWVuY2xvc2luZ05vZGUtPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkgIC8v
IFdlIGNhbid0IG91dGRlbnQgaWYgdGhlcmUgaXMgbm8gcGxhY2UgdG8gZ28hCisgICAgaWYgKCFl
bmNsb3NpbmdOb2RlIHx8ICFlbmNsb3NpbmdOb2RlLT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdv
IQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2UgSW5zZXJ0TGlzdENvbW1hbmQgdG8gcmVt
b3ZlIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgbGlzdApAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQg
SW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3IKICAgICAgICAgICAgIGlmIChDb250
YWluZXJOb2RlKiBzcGxpdFBvaW50UGFyZW50ID0gc3BsaXRQb2ludC0+cGFyZW50Tm9kZSgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHNwbGl0UG9pbnRQYXJlbnQtPmhhc1RhZ05hbWUoYmxvY2tx
dW90ZVRhZykKICAgICAgICAgICAgICAgICAgICAgJiYgIXNwbGl0UG9pbnQtPmhhc1RhZ05hbWUo
YmxvY2txdW90ZVRhZykKLSAgICAgICAgICAgICAgICAgICAgJiYgc3BsaXRQb2ludFBhcmVudC0+
cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlm
IHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQorICAgICAgICAgICAgICAgICAgICAmJiBzcGxpdFBv
aW50UGFyZW50LT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKSAvLyBXZSBjYW4n
dCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQogICAgICAgICAgICAgICAgICAg
ICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNwbGl0UG9pbnRQYXJlbnQpLCBz
cGxpdFBvaW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCShyZXZp
c2lvbiA4MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleAogCiB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICghbV9ub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgp
KQorICAgIGlmICghbV9ub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgKIAogdm9pZCBJbnNlcnRJbnRvVGV4dE5v
ZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIGlmICghbV9ub2RlLT5pc0NvbnRlbnRFZGl0
YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICAvLyBOZWVkIHRvIG5vdGlmeSB0aGlzIGJlZm9yZSBhY3R1
YWxseSBkZWxldGluZyB0aGUgdGV4dApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnROb2RlQmVmb3JlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6SW5zZXJ0
Tm9kZUJlZm9yCiAgICAgQVNTRVJUKG1fcmVmQ2hpbGQpOwogICAgIEFTU0VSVChtX3JlZkNoaWxk
LT5wYXJlbnROb2RlKCkpOwogCi0gICAgQVNTRVJUKG1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+
aXNDb250ZW50RWRpdGFibGUoKSB8fCAhbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5hdHRhY2hl
ZCgpKTsKKyAgICBBU1NFUlQobV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRp
dGFibGUoKSB8fCAhbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5hdHRhY2hlZCgpKTsKIH0KIAog
dm9pZCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQ29udGFpbmVy
Tm9kZSogcGFyZW50ID0gbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50
IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJlbnQgfHwgIXBh
cmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQ6OmRvQXBwbHkoKQogCiB2b2lkIEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpkb1VuYXBwbHko
KQogewotICAgIGlmICghbV9pbnNlcnRDaGlsZC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBp
ZiAoIW1faW5zZXJ0Q2hpbGQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIC8vIE5lZWQgdG8gbm90aWZ5IHRoaXMgYmVmb3JlIGFjdHVhbGx5IGRl
bGV0aW5nIHRoZSB0ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0pvaW5UZXh0Tm9k
ZXNDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0pvaW5U
ZXh0Tm9kZXNDb21tYW5kLmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsNyBAQCB2b2lkIEpvaW5UZXh0Tm9kZXNDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9kZSgp
OwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAg
aWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTYzLDcgKzYzLDcgQEAg
dm9pZCBKb2luVGV4dE5vZGVzQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9kZSgpOwotICAg
IGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFw
YXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1l
bnRzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgTWVyZ2VJZGVu
dGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbgogCiB2b2lkIE1lcmdlSWRlbnRpY2FsRWxl
bWVudHNDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBpZiAobV9lbGVtZW50MS0+bmV4dFNpYmxp
bmcoKSAhPSBtX2VsZW1lbnQyIHx8ICFtX2VsZW1lbnQxLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8
ICFtX2VsZW1lbnQyLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChtX2VsZW1lbnQxLT5u
ZXh0U2libGluZygpICE9IG1fZWxlbWVudDIgfHwgIW1fZWxlbWVudDEtPnJlbmRlcmVySXNFZGl0
YWJsZSgpIHx8ICFtX2VsZW1lbnQyLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9hdENoaWxkID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgpOwpAQCAtNjgs
NyArNjgsNyBAQCB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuCiAgICAg
UmVmUHRyPE5vZGU+IGF0Q2hpbGQgPSBtX2F0Q2hpbGQucmVsZWFzZSgpOwogCiAgICAgQ29udGFp
bmVyTm9kZSogcGFyZW50ID0gbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFy
ZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJlbnQgfHwg
IXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVO
b2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1v
dmVOb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgUmVtb3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5vZGVDb21tYW5kKFBhcwogdm9pZCBSZW1vdmVO
b2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9u
b2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNDb250ZW50
RWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7CkBAIC01Niw3
ICs1Niw3IEBAIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7CiAgICAgUmVm
UHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG1fcGFyZW50LnJlbGVhc2UoKTsKICAgICBSZWZQ
dHI8Tm9kZT4gcmVmQ2hpbGQgPSBtX3JlZkNoaWxkLnJlbGVhc2UoKTsKLSAgICBpZiAoIXBhcmVu
dCB8fCAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghcGFyZW50IHx8ICFw
YXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0Nyw3ICsxNDcsNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50
CiAgICAgaWYgKCFlZGl0YWJsZVJvb3QtPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLndlYmtpdEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KSAmJgogICAgICAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoZXNlIGNoZWNrcyBvbmNlIHRleHRhcmVhcyBhbmQgdGV4dGZpZWxkcyBhY3R1
YWxseSByZWdpc3RlciBhbiBldmVudCBoYW5kbGVyLgogICAgICAgICAhKHNoYWRvd0FuY2VzdG9y
Tm9kZSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCkgJiYgc2hhZG93QW5jZXN0b3JO
b2RlLT5yZW5kZXJlcigpLT5pc1RleHRDb250cm9sKCkpICYmCi0gICAgICAgIGVkaXRhYmxlUm9v
dC0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBlZGl0YWJsZVJvb3QtPnJl
bmRlcmVySXNSaWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIHJlbW92ZUludGVyY2hhbmdlTm9k
ZXMobV9mcmFnbWVudC5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjIsNyAr
MTYyLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGVkaXRhYmxlUm9vdC0+ZGlzcGF0Y2hFdmVudChldnQs
IGVjKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgaWYgKHRleHQgIT0gZXZ0LT50ZXh0KCkg
fHwgIWVkaXRhYmxlUm9vdC0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgIGlmICh0
ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPnJlbmRlcmVySXNSaWNobHlFZGl0
YWJsZSgpKSB7CiAgICAgICAgIHJlc3RvcmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhv
bGRlci5nZXQoKSk7CiAgICAgICAgIHJlbW92ZU5vZGUoaG9sZGVyKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4
MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNjIsNyArMTM2Miw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6c2VsZWN0RnJhbWVFbGUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBU
aGlzIG1ldGhvZCdzIHB1cnBvc2UgaXMgaXQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2VsZWN0IGlm
cmFtZXMgKGluIG9yZGVyIHRvIGRlbGV0ZSB0aGVtKS4gIERvbid0IGRvIGFueXRoaW5nIGlmIHRo
ZSBpZnJhbWUgaXNuJ3QgZGVsZXRhYmxlLgotICAgIGlmICghb3duZXJFbGVtZW50UGFyZW50LT5p
c0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghb3duZXJFbGVtZW50UGFyZW50LT5yZW5kZXJl
cklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGNvbXB1dGUg
cG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVsZW1lbnQuCkBAIC0xODI0LDcgKzE4MjQs
NyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbkZyCiAKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIGJvb2wgY2FyZXRCcm93
c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+Y2FyZXRC
cm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgpIHx8ICEoZG9jdW1lbnQtPmlzQ29u
dGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykpCisgICAgaWYgKCFpc05vbmUoKSB8fCAh
KGRvY3VtZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5k
LmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxl
bWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgU3Bs
aXRFbGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KCkKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX2VsZW1lbnQyLT5wYXJlbnRO
b2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEuZ2V0KCksIG1f
ZWxlbWVudDIuZ2V0KCksIGVjKTsKICAgICBpZiAoZWMpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQg
U3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFu
ZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudDEgfHwgIW1fZWxlbWVudDEtPmlz
Q29udGVudEVkaXRhYmxlKCkgfHwgIW1fZWxlbWVudDItPmlzQ29udGVudEVkaXRhYmxlKCkpCisg
ICAgaWYgKCFtX2VsZW1lbnQxIHx8ICFtX2VsZW1lbnQxLT5yZW5kZXJlcklzRWRpdGFibGUoKSB8
fCAhbV9lbGVtZW50Mi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBjaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTY5MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxpdFRl
eHROb2RlQ29tbWEKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewogICAg
IENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fdGV4dDItPnBhcmVudE5vZGUoKTsKLSAgICBpZiAo
IXBhcmVudCB8fCAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghcGFyZW50
IHx8ICFwYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBTcGxpdFRleHRO
b2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5h
cHBseSgpCiB7Ci0gICAgaWYgKCFtX3RleHQxIHx8ICFtX3RleHQxLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQorICAgIGlmICghbV90ZXh0MSB8fCAhbV90ZXh0MS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX3RleHQxLT5kb2N1bWVudCgpID09IGRv
Y3VtZW50KCkpOwpAQCAtODksNyArODksNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpk
b1JlYXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQg
PSBtX3RleHQyLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXND
b250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklz
RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRUcmltVGV4
dDIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5p
bmdFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gODE2
OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgU3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWEKICAgICBzcGxpdFRleHROb2RlKG1fdGV4
dC5nZXQoKSwgbV9vZmZzZXQpOwogCiAgICAgRWxlbWVudCogcGFyZW50ID0gbV90ZXh0LT5wYXJl
bnRFbGVtZW50KCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50RWxlbWVudCgp
IHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBp
ZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVudC0+cGFyZW50
RWxlbWVudCgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHJldmlzaW9uIDgx
NjkxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpj
YW5vbmljYWxQb3NpdAogCiAgICAgLy8gVGhlIG5ldyBwb3NpdGlvbiBtdXN0IGJlIGluIHRoZSBz
YW1lIGVkaXRhYmxlIGVsZW1lbnQuIEVuZm9yY2UgdGhhdCBmaXJzdC4KICAgICAvLyBVbmxlc3Mg
dGhlIGRlc2NlbnQgaXMgZnJvbSBhIG5vbi1lZGl0YWJsZSBodG1sIGVsZW1lbnQgdG8gYW4gZWRp
dGFibGUgYm9keS4KLSAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYm
ICFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUtPmRvY3VtZW50KCktPmJvZHkoKSAm
JiBub2RlLT5kb2N1bWVudCgpLT5ib2R5KCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYg
KG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiAhbm9kZS0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+Ym9keSgpICYmIG5vZGUtPmRvY3VtZW50KCkt
PmJvZHkoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBuZXh0LmlzTm90
TnVsbCgpID8gbmV4dCA6IHByZXY7CiAKICAgICBOb2RlKiBlZGl0aW5nUm9vdCA9IGVkaXRhYmxl
Um9vdEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
V3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15
U3BhbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgV3Jh
cENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kOjpkb1UKIHsKICAgICBBU1NFUlQobV9lbGVtZW50
KTsKIAotICAgIGlmICghbV9kdW1teVNwYW4gfHwgIW1fZWxlbWVudC0+aXNDb250ZW50RWRpdGFi
bGUoKSkKKyAgICBpZiAoIW1fZHVtbXlTcGFuIHx8ICFtX2VsZW1lbnQtPnJlbmRlcmVySXNFZGl0
YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gY2hp
bGRyZW47CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21t
YW5kOjpkb1IKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICAKLSAgICBpZiAoIW1fZHVt
bXlTcGFuIHx8ICFtX2VsZW1lbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFtX2R1
bW15U3BhbiB8fCAhbV9lbGVtZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZXhlY3V0ZUFwcGx5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIE5vZGUq
IGhpZ2hlc3RFZGl0YWJsZVJvb3QoY29uc3QgUG9zaXRpb24KICAgICAKICAgICBub2RlID0gaGln
aGVzdFJvb3Q7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAg
ICAgICAgICAgIGhpZ2hlc3RSb290ID0gbm9kZTsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoYm9keVRhZykpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE2MCw3ICsxNjAsNyBAQCBOb2Rl
KiBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKE5vZGUqIG5vZGUpCiAgICAgCiAgICAgTm9kZSAqbG93
ZXN0Um9vdCA9IDA7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0x
NzksNyArMTc5LDcgQEAgYm9vbCBpc0VkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIAog
ICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzVGFibGUoKSkK
ICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAKLSAgICByZXR1cm4gbm9k
ZS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXJJc0VkaXRh
YmxlKCk7CiB9CiAKIGJvb2wgaXNBdFVuc3BsaXR0YWJsZUVsZW1lbnQoY29uc3QgUG9zaXRpb24m
IHBvcykKQEAgLTE5OCw3ICsxOTgsNyBAQCBib29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihj
b25zdCBQb3NpCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+
aXNUYWJsZSgpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIAotICAg
IHJldHVybiBub2RlLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJldHVybiBub2Rl
LT5yZW5kZXJlcklzUmljaGx5RWRpdGFibGUoKTsKIH0KIAogRWxlbWVudCogZWRpdGFibGVSb290
Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApCkBAIC0yNzYsNyArMjc2LDcgQEAgUG9zaXRp
b24gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYQogVmlzaWJsZVBvc2l0aW9uIGZpcnN0
RWRpdGFibGVQb3NpdGlvbkFmdGVyUG9zaXRpb25JblJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0
aW9uLCBOb2RlKiBoaWdoZXN0Um9vdCkKIHsKICAgICAvLyBwb3NpdGlvbiBmYWxscyBiZWZvcmUg
aGlnaGVzdFJvb3QuCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb24sIGZpcnN0UG9z
aXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpKSA9PSAtMSAmJiBoaWdoZXN0Um9vdC0+aXNDb250ZW50
RWRpdGFibGUoKSkKKyAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgZmlyc3RQb3Np
dGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IC0xICYmIGhpZ2hlc3RSb290LT5yZW5kZXJlcklz
RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJv
b3QpOwogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwpAQCAtNTYxLDcgKzU2MSw3IEBAIFBh
c3NSZWZQdHI8UmFuZ2U+IGV4dGVuZFJhbmdlVG9XcmFwcGluZ04KICAgICBOb2RlKiBhbmNlc3Rv
ciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyk7Ly8gZmluZCB0aGUgY2xvZXNl
dCBjb21tb24gYW5jZXN0b3IKICAgICBOb2RlKiBoaWdoZXN0Tm9kZSA9IDA7CiAgICAgLy8gdHJh
dmVyc2UgdGhyb3VnaCBhbmNlc3RvcnMgYXMgbG9uZyBhcyB0aGV5IGFyZSBjb250YWluZWQgd2l0
aGluIHRoZSByYW5nZSwgY29udGVudC1lZGl0YWJsZSwgYW5kIGJlbG93IHJvb3ROb2RlIChjb3Vs
ZCBiZSA9MCkuCi0gICAgd2hpbGUgKGFuY2VzdG9yICYmIGFuY2VzdG9yLT5pc0NvbnRlbnRFZGl0
YWJsZSgpICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oYW5jZXN0b3IsIG1heGltdW1S
YW5nZSkgJiYgYW5jZXN0b3IgIT0gcm9vdE5vZGUpIHsKKyAgICB3aGlsZSAoYW5jZXN0b3IgJiYg
YW5jZXN0b3ItPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmIGlzTm9kZVZpc2libHlDb250YWluZWRX
aXRoaW4oYW5jZXN0b3IsIG1heGltdW1SYW5nZSkgJiYgYW5jZXN0b3IgIT0gcm9vdE5vZGUpIHsK
ICAgICAgICAgaGlnaGVzdE5vZGUgPSBhbmNlc3RvcjsKICAgICAgICAgYW5jZXN0b3IgPSBhbmNl
c3Rvci0+cGFyZW50Tm9kZSgpOwogICAgIH0KQEAgLTU5Miw3ICs1OTIsNyBAQCBOb2RlKiBlbmNs
b3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3NpdGlvCiAgICAgICAgIAogICAgIE5vZGUqIHJvb3Qg
PSBoaWdoZXN0RWRpdGFibGVSb290KHApOwogICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRl
ZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocm9vdCAmJiAh
bi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKHJvb3QgJiYgIW4tPnJlbmRlcmVy
SXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKHRhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuIG47CkBAIC02MTQsNyArNjE0LDcg
QEAgTm9kZSogZW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbgogICAgIGZvciAoTm9k
ZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewogICAg
ICAgICAvLyBEb24ndCByZXR1cm4gYSBub24tZWRpdGFibGUgbm9kZSBpZiB0aGUgaW5wdXQgcG9z
aXRpb24gd2FzIGVkaXRhYmxlLCBzaW5jZQogICAgICAgICAvLyB0aGUgY2FsbGVycyBmcm9tIGVk
aXRpbmcgd2lsbCBubyBkb3VidCB3YW50IHRvIHBlcmZvcm0gZWRpdGluZyBpbnNpZGUgdGhlIHJl
dHVybmVkIG5vZGUuCi0gICAgICAgIGlmIChyb290ICYmICFuLT5pc0NvbnRlbnRFZGl0YWJsZSgp
KQorICAgICAgICBpZiAocm9vdCAmJiAhbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG5vZGVJc09mVHlwZShuKSkKICAgICAgICAgICAg
IHJldHVybiBuOwpAQCAtNjMwLDcgKzYzMCw3IEBAIE5vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2Rl
T2ZUeXBlKGNvbnN0IFAKICAgICBOb2RlKiBoaWdoZXN0ID0gMDsKICAgICBOb2RlKiByb290ID0g
cnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSA/IGhpZ2hlc3RFZGl0YWJsZVJvb3Qo
cCkgOiAwOwogICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4t
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250ZW50RWRpdGFi
bGUoKSkKKyAgICAgICAgaWYgKHJvb3QgJiYgIW4tPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChub2RlSXNPZlR5cGUobikpCiAgICAgICAg
ICAgICBoaWdoZXN0ID0gbjsKQEAgLTc1OCw3ICs3NTgsNyBAQCBib29sIGNhbk1lcmdlTGlzdHMo
RWxlbWVudCogZmlyc3RMaXN0LCBFCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biBmaXJzdExpc3QtPmhhc1RhZ05hbWUoc2Vjb25kTGlzdC0+dGFnUU5hbWUoKSkvLyBtYWtlIHN1
cmUgdGhlIGxpc3QgdHlwZXMgbWF0Y2ggKG9sIHZzLiB1bCkKLSAgICAmJiBmaXJzdExpc3QtPmlz
Q29udGVudEVkaXRhYmxlKCkgJiYgc2Vjb25kTGlzdC0+aXNDb250ZW50RWRpdGFibGUoKS8vIGJv
dGggbGlzdHMgYXJlIGVkaXRhYmxlCisgICAgJiYgZmlyc3RMaXN0LT5yZW5kZXJlcklzRWRpdGFi
bGUoKSAmJiBzZWNvbmRMaXN0LT5yZW5kZXJlcklzRWRpdGFibGUoKSAvLyBib3RoIGxpc3RzIGFy
ZSBlZGl0YWJsZQogICAgICYmIGZpcnN0TGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHNl
Y29uZExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS8vIGRvbid0IGNyb3NzIGVkaXRpbmcgYm91
bmRhcmllcwogICAgICYmIGlzVmlzaWJseUFkamFjZW50KHBvc2l0aW9uSW5QYXJlbnRBZnRlck5v
ZGUoZmlyc3RMaXN0KSwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoc2Vjb25kTGlzdCkpOwog
ICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyB2aXNpYmxlIGNvbnRlbnQgYmV0d2VlbiB0aGlz
IGxpIGFuZCB0aGUgcHJldmlvdXMgbGlzdApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA4MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NywxMCArNDc3LDEwIEBA
IGJvb2wgaXNFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYKIC8vIFRoZSBmaXJzdCBs
ZWFmIGJlZm9yZSBub2RlIHRoYXQgaGFzIHRoZSBzYW1lIGVkaXRhYmlsaXR5IGFzIG5vZGUuCiBz
dGF0aWMgTm9kZSogcHJldmlvdXNMZWFmV2l0aFNhbWVFZGl0YWJpbGl0eShOb2RlKiBub2RlKQog
ewotICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIGJv
b2wgZWRpdGFibGUgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICBOb2RlKiBuID0g
bm9kZS0+cHJldmlvdXNMZWFmTm9kZSgpOwogICAgIHdoaWxlIChuKSB7Ci0gICAgICAgIGlmIChl
ZGl0YWJsZSA9PSBuLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoZWRpdGFibGUg
PT0gbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAg
ICAgbiA9IG4tPnByZXZpb3VzTGVhZk5vZGUoKTsKICAgICB9CkBAIC01NzIsNyArNTcyLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbgogICAgIC8vIENvdWxkIG5v
dCBmaW5kIGEgcHJldmlvdXMgbGluZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGFscmVhZHkgYmUgb24g
dGhlIGZpcnN0IGxpbmUuCiAgICAgLy8gTW92ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbnRlbnQg
aW4gdGhpcyBibG9jaywgd2hpY2ggZWZmZWN0aXZlbHkgbW92ZXMgdXMKICAgICAvLyB0byB0aGUg
c3RhcnQgb2YgdGhlIGxpbmUgd2UncmUgb24uCi0gICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBu
b2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDog
bm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogcm9vdEVs
ZW1lbnQgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmICgh
cm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUocm9vdEVsZW1lbnQpLCBET1dO
U1RSRUFNKTsKQEAgLTU4MCwxMiArNTgwLDEyIEBAIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xp
bmVQb3NpdGlvbihjb24KIAogc3RhdGljIE5vZGUqIG5leHRMZWFmV2l0aFNhbWVFZGl0YWJpbGl0
eShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQogewotICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5p
c0NvbnRlbnRFZGl0YWJsZSgpOworICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5yZW5kZXJlcklz
RWRpdGFibGUoKTsKICAgICBBU1NFUlQob2Zmc2V0ID49IDApOwogICAgIE5vZGUqIGNoaWxkID0g
bm9kZS0+Y2hpbGROb2RlKG9mZnNldCk7CiAgICAgTm9kZSogbiA9IGNoaWxkID8gY2hpbGQtPm5l
eHRMZWFmTm9kZSgpIDogbm9kZS0+bGFzdERlc2NlbmRhbnQoKS0+bmV4dExlYWZOb2RlKCk7CiAg
ICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKGVkaXRhYmxlID09IG4tPmlzQ29udGVudEVkaXRh
YmxlKCkpCisgICAgICAgIGlmIChlZGl0YWJsZSA9PSBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICBuID0gbi0+bmV4dExlYWZOb2RlKCk7CiAg
ICAgfQpAQCAtNTk3LDEwICs1OTcsMTAgQEAgc3RhdGljIE5vZGUqIG5leHRMZWFmV2l0aFNhbWVF
ZGl0YWJpbGl0eQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAg
Ym9vbCBlZGl0YWJsZSA9IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBlZGl0
YWJsZSA9IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOwogICAgIE5vZGUqIG4gPSBub2RlLT5u
ZXh0TGVhZk5vZGUoKTsKICAgICB3aGlsZSAobikgewotICAgICAgICBpZiAoZWRpdGFibGUgPT0g
bi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKGVkaXRhYmxlID09IG4tPnJlbmRl
cmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgIG4gPSBuLT5u
ZXh0TGVhZk5vZGUoKTsKICAgICB9CkBAIC02NzksNyArNjc5LDcgQEAgVmlzaWJsZVBvc2l0aW9u
IG5leHRMaW5lUG9zaXRpb24oY29uc3QgVgogICAgIC8vIENvdWxkIG5vdCBmaW5kIGEgbmV4dCBs
aW5lLiBUaGlzIG1lYW5zIHdlIG11c3QgYWxyZWFkeSBiZSBvbiB0aGUgbGFzdCBsaW5lLgogICAg
IC8vIE1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgY29udGVudCBpbiB0aGlzIGJsb2NrLCB3aGljaCBl
ZmZlY3RpdmVseSBtb3ZlcyB1cwogICAgIC8vIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgd2UncmUg
b24uCi0gICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgp
ID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5yZW5kZXJlcklz
RWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQ
b3NpdGlvbkluTm9kZShyb290RWxlbWVudCksIERPV05TVFJFQU0pOwpAQCAtNzU5LDEwICs3NTks
MTAgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgogCiAgICAgTm9k
ZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikgewotICAgICAgICBpZiAoYm91bmRhcnlD
cm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgbi0+aXNDb250ZW50
RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlm
IChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBu
LT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9
PSBDYW5Ta2lwT3ZlckVkaXRpbmdCb3VuZGFyeSkgewotICAgICAgICAgICAgd2hpbGUgKG4gJiYg
bi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkp
CisgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFy
dE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIG4gPSBuLT50cmF2
ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKICAgICAgICAgICAgIGlmICgh
biB8fCAhbi0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtODMxLDEwICs4MzEsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBo
KGNvbnN0IFZpcwogCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikgewot
ICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91
bmRhcnkgJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RDcm9z
c0VkaXRpbmdCb3VuZGFyeSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUt
PnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChi
b3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5Ta2lwT3ZlckVkaXRpbmdCb3VuZGFyeSkgewotICAg
ICAgICAgICAgd2hpbGUgKG4gJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5yZW5kZXJl
cklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAg
ICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVCbG9jayk7CiAgICAg
ICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA4MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB1
bnNpZ25lZCBwYXJzZVBvcnRGcm9tU3RyaW5nUG9zaXQKIAogYm9vbCBIVE1MQW5jaG9yRWxlbWVu
dDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkp
CisgICAgaWYgKHJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gSFRNTEVsZW1l
bnQ6OnN1cHBvcnRzRm9jdXMoKTsKICAgICAvLyBJZiBub3QgYSBsaW5rIHdlIHNob3VsZCBzdGls
bCBiZSBhYmxlIHRvIGZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IGhhcyB0YWJJbmRleC4KICAgICBy
ZXR1cm4gaXNMaW5rKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKQEAgLTE1NCw3
ICsxNTQsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNDb250ZW50RWRpdGFi
bGUoKSkgeworICAgICAgICBpZiAocmVuZGVyZXJJc0VkaXRhYmxlKCkpIHsKICAgICAgICAgICAg
IC8vIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRhYmxlIGJsb2NrIHRoYXQgdGhlIHNlbGVj
dGlvbiB3YXMgaW4gKGlmIGl0IHdhcyBpbiBvbmUpIGp1c3QgYmVmb3JlIHRoZSBsaW5rIHdhcyBj
bGlja2VkCiAgICAgICAgICAgICAvLyBmb3IgdGhlIExpdmVXaGVuTm90Rm9jdXNlZCBlZGl0YWJs
ZSBsaW5rIGJlaGF2aW9yCiAgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19j
YXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIGRvY3Vt
ZW50KCktPmZyYW1lKCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkpIHsKQEAg
LTE3NCw3ICsxNzQsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
CiAKIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGRvd24sIGJvb2wgcGF1
c2UpCiB7Ci0gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICBpZiAocmVuZGVyZXJJ
c0VkaXRhYmxlKCkpIHsKICAgICAgICAgRWRpdGFibGVMaW5rQmVoYXZpb3IgZWRpdGFibGVMaW5r
QmVoYXZpb3IgPSBFZGl0YWJsZUxpbmtEZWZhdWx0QmVoYXZpb3I7CiAgICAgICAgIGlmIChTZXR0
aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpKQogICAgICAgICAgICAgZWRp
dGFibGVMaW5rQmVoYXZpb3IgPSBzZXR0aW5ncy0+ZWRpdGFibGVMaW5rQmVoYXZpb3IoKTsKQEAg
LTI0Nyw3ICsyNDcsNyBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50OjpjYW5TdGFydFNlbGVjdGlv
CiAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5IHdhbnQgdGhpcyBzYW1lIGJlaGF2aW9yIGluIFNW
R0FFbGVtZW50IHRvbwogICAgIGlmICghaXNMaW5rKCkpCiAgICAgICAgIHJldHVybiBIVE1MRWxl
bWVudDo6Y2FuU3RhcnRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gaXNDb250ZW50RWRpdGFibGUo
KTsKKyAgICByZXR1cm4gcmVuZGVyZXJJc0VkaXRhYmxlKCk7CiB9CiAKIGJvb2wgSFRNTEFuY2hv
ckVsZW1lbnQ6OmRyYWdnYWJsZSgpIGNvbnN0CkBAIC01MDEsNyArNTAxLDcgQEAgSFRNTEFuY2hv
ckVsZW1lbnQ6OkV2ZW50VHlwZSBIVE1MQW5jaG9yRQogCiBib29sIEhUTUxBbmNob3JFbGVtZW50
Ojp0cmVhdExpbmtBc0xpdmVGb3JFdmVudFR5cGUoRXZlbnRUeXBlIGV2ZW50VHlwZSkgY29uc3QK
IHsKLSAgICBpZiAoIWlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFyZW5kZXJlcklzRWRp
dGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Qm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJv
ZHlFbGVtZW50LmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxCb2R5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBib29s
IEhUTUxCb2R5RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0CiAKIGJvb2wgSFRNTEJvZHlFbGVt
ZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNDb250ZW50RWRpdGFi
bGUoKSB8fCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOworICAgIHJldHVybiByZW5kZXJl
cklzRWRpdGFibGUoKSB8fCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwogfQogCiBTdHJp
bmcgSFRNTEJvZHlFbGVtZW50OjphTGluaygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU0LDEwICs2NTQsMTUgQEAgdm9pZCBI
VE1MRWxlbWVudDo6YWRkSFRNTEFsaWdubWVudFRvU3R5bAogCiBib29sIEhUTUxFbGVtZW50Ojpz
dXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWxlbWVudDo6c3VwcG9ydHNGb2N1
cygpIHx8IChpc0NvbnRlbnRFZGl0YWJsZSgpICYmIHBhcmVudE5vZGUoKSAmJiAhcGFyZW50Tm9k
ZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICByZXR1cm4gRWxlbWVudDo6c3VwcG9ydHNG
b2N1cygpIHx8IChyZW5kZXJlcklzRWRpdGFibGUoKSAmJiBwYXJlbnROb2RlKCkgJiYgIXBhcmVu
dE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpOwogfQogCi1TdHJpbmcgSFRNTEVsZW1lbnQ6
OmNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IAorYm9vbCBIVE1MRWxlbWVudDo6aXNDb250ZW50RWRp
dGFibGUoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcklzRWRpdGFibGUoKTsKK30KKwor
U3RyaW5nIEhUTUxFbGVtZW50Ojpjb250ZW50RWRpdGFibGUoKSBjb25zdAogewogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKGNvbnRlbnRlZGl0YWJsZUF0
dHIpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lvbiA4MTY5MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygp
IGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CisK
ICAgICBTdHJpbmcgY29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb250ZW50
RWRpdGFibGUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcg
KzM1Myw3IEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkYKIHsKICAg
ICBBU1NFUlQoZHJhZ0RhdGEpOwogICAgIERvY3VtZW50KiBkb2MgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT5kb2N1bWVudEF0UG9pbnQoZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCkpOwotICAgIGlm
IChkb2MgJiYgKG1fZGlkSW5pdGlhdGVEcmFnIHx8IGRvYy0+aXNQbHVnaW5Eb2N1bWVudCgpIHx8
IGRvYy0+aXNDb250ZW50RWRpdGFibGUoKSkpCisgICAgaWYgKGRvYyAmJiAobV9kaWRJbml0aWF0
ZURyYWcgfHwgZG9jLT5pc1BsdWdpbkRvY3VtZW50KCkgfHwgZG9jLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkpCiAgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKICAgICByZXR1cm4gZHJh
Z09wZXJhdGlvbihkcmFnRGF0YSk7CiB9CkBAIC01MTEsNyArNTExLDcgQEAgYm9vbCBEcmFnQ29u
dHJvbGxlcjo6Y2FuUHJvY2Vzc0RyYWcoRHJhZwogICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnNG
aWxlcygpICYmIGFzRmlsZUlucHV0KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkt
PmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAobV9kaWRJbml0aWF0ZURyYWcgJiYgbV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFnSW5p
dGlhdG9yICYmIHJlc3VsdC5pc1NlbGVjdGVkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCShyZXZpc2lvbiA4MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzLDcgKzcyMyw3IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmUKICAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBuZXdTZWxlY3Rpb247CiAgICAgICAgIE5vZGUqIG5vZGUgPSBldmVudC50YXJnZXROb2RlKCk7
CiAgICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCktPmNhcmV0
QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChub2RlICYmIChjYXJldEJyb3dzaW5nIHx8
IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAg
ICAgaWYgKG5vZGUgJiYgKGNhcmV0QnJvd3NpbmcgfHwgbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkpICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBw
b3MgPSBub2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGV2ZW50LmxvY2FsUG9pbnQo
KSk7CiAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHBvcyk7CiAg
ICAgICAgIH0KQEAgLTExNzUsNyArMTE3NSw3IEBAIEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVj
dEN1cnNvcihjb25zdCAKIAogICAgIHN3aXRjaCAoc3R5bGUgPyBzdHlsZS0+Y3Vyc29yKCkgOiBD
VVJTT1JfQVVUTykgewogICAgIGNhc2UgQ1VSU09SX0FVVE86IHsKLSAgICAgICAgYm9vbCBlZGl0
YWJsZSA9IChub2RlICYmIG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpOworICAgICAgICBib29s
IGVkaXRhYmxlID0gKG5vZGUgJiYgbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpOwogICAgICAg
ICBib29sIGVkaXRhYmxlTGlua0VuYWJsZWQgPSBmYWxzZTsKIAogICAgICAgICAvLyBJZiB0aGUg
bGluayBpcyBlZGl0YWJsZSwgdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBzZXR0aW5ncyB0byBz
ZWUgd2hldGhlciBvciBub3QgdGhlIGxpbmsgc2hvdWxkIGJlIGZvbGxvd2VkCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4MTY5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAxLDcgKzMwMSw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3UK
IHN0YXRpYyBib29sIHJlbGlucXVpc2hlc0VkaXRpbmdGb2N1cyhOb2RlICpub2RlKQogewogICAg
IEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7Cisg
ICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKTsKIAogICAgIE5vZGUqIHJvb3Qg
PSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjUsNyArNTI1LDcgQEAg
Ym9vbCBIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSgpIAogICAgIGlmIChtX2lubmVy
Tm9uU2hhcmVkTm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpLT5p
c1RleHRGaWVsZCgpOwogCi0gICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlLT5pc0NvbnRl
bnRFZGl0YWJsZSgpOworICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+cmVuZGVyZXJJ
c0VkaXRhYmxlKCk7CiB9CiAKIGJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2Vk
VGVzdFJlc3VsdChOb2RlKiBub2RlLCBpbnQgeCwgaW50IHksIGNvbnN0IEludFJlY3QmIHJlY3Qp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9u
IDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDA0MCw3ICs0MDQwLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbkZvclBvaW50UgogICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKTsK
IAogICAgIC8vIElmIHdlIGNhbid0IGZpbmQgYW4gYW5jZXN0b3IgdG8gY2hlY2sgZWRpdGFiaWxp
dHkgb24sIG9yIGVkaXRhYmlsaXR5IGlzIHVuY2hhbmdlZCwgd2UgcmVjdXIgbGlrZSBub3JtYWwK
LSAgICBpZiAoIWFuY2VzdG9yIHx8IGFuY2VzdG9yLT5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxl
KCkgPT0gY2hpbGROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghYW5jZXN0b3Ig
fHwgYW5jZXN0b3ItPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgPT0gY2hpbGROb2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGNoaWxkLT5wb3NpdGlvbkZvclBv
aW50KHBvaW50SW5DaGlsZENvb3JkaW5hdGVzKTsKIAogICAgIC8vIE90aGVyd2lzZSByZXR1cm4g
YmVmb3JlIG9yIGFmdGVyIHRoZSBjaGlsZCwgZGVwZW5kaW5nIG9uIGlmIHRoZSBjbGljayB3YXMg
dG8gdGhlIGxvZ2ljYWwgbGVmdCBvciBsb2dpY2FsIHJpZ2h0IG9mIHRoZSBjaGlsZApAQCAtNTA2
Niw3ICs1MDY2LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzTGluZUlmRW1wdHkoKSBjb25zdAog
ICAgIGlmICghbm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG5v
ZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiBub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KSA9PSBub2RlKCkpCisgICAgaWYgKG5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgbm9k
ZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gbm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAKICAgICBpZiAobm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSAmJiAobm9kZSgpLT5zaGFk
b3dIb3N0KCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA4MTY5
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTIwLDcgKzIxMjAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGRPdmVyZmxvd0Zyb21JbmxpbmVDCiB7CiAgICAgaW50IGVuZFBhZGRpbmcgPSBoYXNPdmVyZmxv
d0NsaXAoKSA/IHBhZGRpbmdFbmQoKSA6IDA7CiAgICAgLy8gRklYTUU6IE5lZWQgdG8gZmluZCBh
bm90aGVyIHdheSB0byBkbyB0aGlzLCBzaW5jZSBzY3JvbGxiYXJzIGNvdWxkIHNob3cgd2hlbiB3
ZSBkb24ndCB3YW50IHRoZW0gdG8uCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFlbmRQ
YWRkaW5nICYmIG5vZGUoKSAmJiBub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgbm9kZSgp
ID09IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICYmIHN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWVuZFBhZGRpbmcg
JiYgbm9kZSgpICYmIG5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgbm9kZSgpID09IG5v
ZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICYmIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKICAgICAgICAgZW5kUGFkZGluZyA9IDE7CiAgICAgZm9yIChSb290SW5saW5lQm94
KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgp
KSB7CiAgICAgICAgIGFkZExheW91dE92ZXJmbG93KGN1cnItPnBhZGRlZExheW91dE92ZXJmbG93
UmVjdChlbmRQYWRkaW5nKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM4LDcgKzYzOCw3IEBAIGJvb2wgUmVuZGVyQm94
OjpjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2wKICAgICAKIGJvb2wgUmVuZGVyQm94OjpjYW5CZVBy
b2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChoYXNPdmVy
Zmxvd0NsaXAoKSAmJiAoc2Nyb2xsc092ZXJmbG93KCkgfHwgKG5vZGUoKSAmJiBub2RlKCktPmlz
Q29udGVudEVkaXRhYmxlKCkpKSkgfHwgKG5vZGUoKSAmJiBub2RlKCktPmlzRG9jdW1lbnROb2Rl
KCkpOworICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHNjcm9sbHNPdmVyZmxvdygp
IHx8IChub2RlKCkgJiYgbm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkpKSB8fCAobm9kZSgp
ICYmIG5vZGUoKS0+aXNEb2N1bWVudE5vZGUoKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjphdXRv
c2Nyb2xsKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CShyZXZpc2lvbiA4MTY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQ0LDE0ICsyNjQ0LDE0IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2kKIHsKICAgICAvLyBJZiB0aGlzIGlzIGEgbm9u
LWFub255bW91cyByZW5kZXJlciBpbiBhbiBlZGl0YWJsZSBhcmVhLCB0aGVuIGl0J3Mgc2ltcGxl
LgogICAgIGlmIChOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpKSB7Ci0gICAgICAgIGlmICghbm9k
ZS0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKSB7CiAgICAgICAgICAgICAvLyBJZiBpdCBjYW4gYmUgZm91bmQsIHdlIHByZWZl
ciBhIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb24gdGhhdCBpcyBlZGl0YWJsZS4gCiAgICAg
ICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbihub2RlLCBvZmZzZXQpOwogICAgICAgICAgICAgUG9z
aXRpb24gY2FuZGlkYXRlID0gcG9zaXRpb24uZG93bnN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3Vu
ZGFyeSk7Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2RlKCktPmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAgICAgICBjYW5kaWRhdGUgPSBw
b3NpdGlvbi51cHN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgICAgICAgICBp
ZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAg
ICAgICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBh
ZmZpbml0eSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kg
ZWRpdGluZyBwb3NpdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjIsNyArNDYyLDcgQEAgUmVu
ZGVyQmxvY2sqIFJvb3RJbmxpbmVCb3g6OmJsb2NrKCkgY29ucwogCiBzdGF0aWMgYm9vbCBpc0Vk
aXRhYmxlTGVhZihJbmxpbmVCb3gqIGxlYWYpCiB7Ci0gICAgcmV0dXJuIGxlYWYgJiYgbGVhZi0+
cmVuZGVyZXIoKSAmJiBsZWFmLT5yZW5kZXJlcigpLT5ub2RlKCkgJiYgbGVhZi0+cmVuZGVyZXIo
KS0+bm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiBsZWFmICYmIGxlYWYt
PnJlbmRlcmVyKCkgJiYgbGVhZi0+cmVuZGVyZXIoKS0+bm9kZSgpICYmIGxlYWYtPnJlbmRlcmVy
KCktPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CiB9CiAKIElubGluZUJveCogUm9vdElu
bGluZUJveDo6Y2xvc2VzdExlYWZDaGlsZEZvckxvZ2ljYWxMZWZ0UG9zaXRpb24oaW50IGxlZnRQ
b3NpdGlvbiwgYm9vbCBvbmx5RWRpdGFibGVMZWF2ZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
RWxlbWVudC5jcHAJKHJldmlzaW9uIDgxNjkxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgU1ZHQUVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXYKIAogYm9vbCBTVkdBRWxlbWVudDo6c3VwcG9y
dHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYg
KHJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTY5MikKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTEtMDMtMjIgIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZW5hbWUgTm9kZTo6aXNDb250ZW50RWRp
dGFibGUgYW5kIGFsbCBjYWxsIHNpdGVzIHRvIHJlbmRlcmVySXNFZGl0YWJsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQyOTAKKworICAgICAgICBU
aGlzIGlzIHBhcnQgb2YgdGhlIGVmZm9ydCB0byBzZXBhcmF0ZSBKUyBBUEkgSFRNTEVsZW1lbnQg
aXNDb250ZW50RWRpdGFibGUgZnJvbQorICAgICAgICBpbnRlcm5hbCBOb2RlOjpyZW5kZXJlcklz
RWRpdGFibGUuCisKKyAgICAgICAgKiBzcmMvV2ViTm9kZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYk5vZGU6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Rm9jdXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKToKKwogMjAxMS0wMy0yMiAgSmF5IENpdmVs
bGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQg
TGV2aW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcAkocmV2aXNp
b24gODE2OTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIGJvb2wgV2ViTm9kZTo6aXNUZXh0Tm9kZSgp
IGNvbnN0CiAKIGJvb2wgV2ViTm9kZTo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdAogewotICAg
IHJldHVybiBtX3ByaXZhdGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CiB9CiAKIGJvb2wgV2ViTm9kZTo6aXNFbGVtZW50
Tm9kZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCShyZXZpc2lvbiA4MTY5MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1NSw3ICsxMjU1LDcgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6c2V0Rm9jdXMoYm9vbCBlbmFibGUpCiAgICAgICAgICAgICAgICAgRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmb2N1c2VkTm9kZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGVsZW1lbnQtPmlzVGV4dEZvcm1Db250cm9sKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGVsZW1lbnQtPnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChmb2N1c2VkTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGZvY3VzZWROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoKSBzZWxlY3RzIGFs
bCB0aGUgdGV4dCBvZgogICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50c2VkaXRhYmxlIERJ
VnMuIFNvIHdlIHNldCB0aGUgc2VsZWN0aW9uIGV4cGxpY2l0bHkKICAgICAgICAgICAgICAgICAg
ICAgLy8gaW5zdGVhZC4gTm90ZSB0aGF0IHRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBtb3Zp
bmcgdGhlCkBAIC0xMzE3LDcgKzEzMTcsNyBAQCBib29sIFdlYlZpZXdJbXBsOjpzZXRDb21wb3Np
dGlvbigKICAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25S
YW5nZSgpOwogICAgIGlmIChyYW5nZSkgewogICAgICAgICBjb25zdCBOb2RlKiBub2RlID0gcmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNDb250
ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcklzRWRp
dGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEzNjYsNyAr
MTM2Niw3IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNvbmZpcm1Db21wb3NpdGlvbihjb24KICAgICBQ
YXNzUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25SYW5nZSgpOwogICAg
IGlmIChyYW5nZSkgewogICAgICAgICBjb25zdCBOb2RlKiBub2RlID0gcmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCk7Ci0gICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvaGFp
a3UvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9n
CShyZXZpc2lvbiA4MTY5MikKKysrIFNvdXJjZS9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMjIgIENoYW5nIFNodSAgPGNzaHVA
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICByZW5hbWUgTm9kZTo6aXNDb250ZW50RWRpdGFibGUgYW5kIGFsbCBjYWxsIHNpdGVzIHRv
IHJlbmRlcmVySXNFZGl0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTQyOTAKKworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgdGhlIGVmZm9ydCB0
byBzZXBhcmF0ZSBKUyBBUEkgSFRNTEVsZW1lbnQgaXNDb250ZW50RWRpdGFibGUgZnJvbQorICAg
ICAgICBpbnRlcm5hbCBOb2RlOjpyZW5kZXJlcklzRWRpdGFibGUuCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3JDbGllbnRIYWlrdTo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisKIDIwMTEtMDMtMDcgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2Fy
bHNzb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2Uv
V2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmhhbmRs
ZUtleWJvYXJkRXYKICAgICBpZiAoIXN0YXJ0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
c3RhcnQtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICBpZiAoc3RhcnQtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKSB7CiAgICAgICAgIHN3aXRjaCAoa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNv
ZGUoKSkgewogICAgICAgICBjYXNlIFZLX0JBQ0s6CiAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPmRlbGV0ZVdpdGhEaXJlY3Rpb24oRGlyZWN0aW9uQmFja3dhcmQsCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gODE2OTIpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTAzLTIyICBDaGFuZyBTaHUgIDxjc2h1
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgcmVuYW1lIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlIGFuZCBhbGwgY2FsbCBzaXRlcyB0
byByZW5kZXJlcklzRWRpdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU0MjkwCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIHRoZSBlZmZvcnQg
dG8gc2VwYXJhdGUgSlMgQVBJIEhUTUxFbGVtZW50IGlzQ29udGVudEVkaXRhYmxlIGZyb20KKyAg
ICAgICAgaW50ZXJuYWwgTm9kZTo6cmVuZGVyZXJJc0VkaXRhYmxlLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Q2xpZW50UXQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorCiAyMDExLTAzLTIyICBBbmRyZXcgV2Fz
b24gIDxyZWN0YWxvZ2ljQHJlY3RhbG9naWMuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJl
bmphbWluIFBvdWxhaW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIwLDcgKzQyMCw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUtleWJvYXJkRXZl
bnQKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IHJlZmFjdG9yIGFsbCBvZiB0aGlz
IHRvIHVzZSBBY3Rpb25zIG9yIHNvbWV0aGluZyBsaWtlIHRoZW0KLSAgICBpZiAoc3RhcnQtPmlz
Q29udGVudEVkaXRhYmxlKCkpIHsKKyAgICBpZiAoc3RhcnQtPnJlbmRlcmVySXNFZGl0YWJsZSgp
KSB7CiAgICAgICAgIGJvb2wgZG9TcGF0aWFsTmF2aWdhdGlvbiA9IGZhbHNlOwogICAgICAgICBp
ZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZnJhbWUpKSB7CiAgICAgICAgICAgICBpZiAo
IWtldmVudC0+bW9kaWZpZXJzKCkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86768</attachid>
            <date>2011-03-24 06:49:32 -0700</date>
            <delta_ts>2011-03-25 06:37:25 -0700</delta_ts>
            <desc>fix patch 3</desc>
            <filename>54290_3.patch</filename>
            <type>text/plain</type>
            <size>70940</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU4IEBACisyMDExLTAzLTIyICBDaGFuZyBT
aHUgIDxjc2h1QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgcmVuYW1lIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlIGFuZCBhbGwgY2Fs
bCBzaXRlcyB0byByZW5kZXJlcklzRWRpdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MjkwCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIHRo
ZSBlZmZvcnQgdG8gc2VwYXJhdGUgSlMgQVBJIEhUTUxFbGVtZW50IGlzQ29udGVudEVkaXRhYmxl
IGZyb20KKyAgICAgICAgaW50ZXJuYWwgTm9kZTo6cmVuZGVyZXJJc0VkaXRhYmxlLgorCisgICAg
ICAgIENvZGUgb3B0aW1pemF0aW9uLiBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWNjZXB0c0VkaXRp
bmdGb2N1cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6cmVuZGVyZXJJc0VkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNob3VsZFVz
ZUlucHV0TWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNhblN0YXJ0U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0NvbnRlbnRFZGl0YWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW5kZXJlcklzRWRpdGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6cmVuZGVyZXJJc1JpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKiBk
b20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dFJlbmRlcmVkRWRpdGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNSZW5kZXJlZEVkaXRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjphdEVkaXRpbmdCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpQb3NpdGlvbjo6cGFyZW50RWRpdGluZ0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBv
c2l0aW9uOjp1cHN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVh
bSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aXNDYW5kaWRhdGUpOgorICAgICAgICAq
IGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRl
cmF0b3I6OmlzQ2FuZGlkYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZE5vZGVDb21tYW5kOjpBcHBlbmROb2RlQ29t
bWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBlbmROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAg
KiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRh
aW5zTm9uRWRpdGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCk6
CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0pOgor
ICAgICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppc0RlbGV0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5n
RGVsZXRhYmxlRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6
OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6
ZG9VbmFwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpjYW5EZWxldGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmVydGljYWxTY3JvbGxEaXN0YW5jZSk6
CisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKToKKyAgICAgICAgKiBlZGl0aW5nL0lu
ZGVudE91dGRlbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRD
b21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydEludG9U
ZXh0Tm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6Oklu
c2VydE5vZGVCZWZvcmVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZv
cmVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZvcmVD
b21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Sm9pblRleHROb2Rlc0NvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6Sm9pblRleHROb2Rlc0NvbW1hbmQ6OmRvVW5hcHBseSk6Cisg
ICAgICAgICogZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9BcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9VbmFwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbW92ZU5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bW92ZU5vZGVDb21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVu
dDo6UmVwbGFjZW1lbnRGcmFnbWVudCk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVj
dEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKiBl
ZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRF
bGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxl
bWVudENvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9B
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1JlYXBwbHkpOgor
ICAgICAgICAqIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21t
YW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmNhbm9uaWNhbFBvc2l0aW9uKToKKyAg
ICAgICAgKiBlZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OmRvVW5hcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OmRvUmVh
cHBseSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpoaWdoZXN0RWRpdGFibGVSb290KToKKyAgICAgICAgKFdlYkNvcmU6Omxvd2VzdEVkaXRh
YmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6aXNFZGl0YWJsZVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUmljaGx5RWRpdGFibGVQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dGVuZFJhbmdlVG9XcmFwcGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ05vZGVXaXRoVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVP
ZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6aGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuTWVyZ2VMaXN0cyk6CisgICAgICAgICogZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGVhZldpdGhTYW1lRWRp
dGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaW5lUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6bmV4dExlYWZXaXRoU2FtZUVkaXRhYmlsaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZlBhcmFn
cmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgICogaHRt
bC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxl
bWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxl
bWVudDo6c2V0QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojpj
YW5TdGFydFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6
dHJlYXRMaW5rQXNMaXZlRm9yRXZlbnRUeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OnN1cHBvcnRzRm9j
dXMpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1l
bnQ6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojpj
b250ZW50RWRpdGFibGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAgICAgICAg
KiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
OjpjYW5Qcm9jZXNzRHJhZyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6CisgICAgICAgICog
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVsaW5xdWlzaGVz
RWRpdGluZ0ZvY3VzKToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0
aW9uRm9yUG9pbnRSZXNwZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6Omhhc0xpbmVJZkVtcHR5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNh
bGx5U2Nyb2xsZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpYmxlUG9zaXRpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
RWRpdGFibGVMZWFmKToKKyAgICAgICAgKiBzdmcvU1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorCiAyMDExLTAzLTIzICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDgxNzY4
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYxLDEwICs2NjEsMTAgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRPbgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIAogICAgICAgICBIVE1MRWxlbWVudCogYm9keSA9IGRvY3VtZW50LT5ib2R5KCk7Ci0g
ICAgICAgIGlmIChib2R5ICYmIGJvZHktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlm
IChib2R5ICYmIGJvZHktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIHJldHVybiAhZG9jdW1lbnQtPmlzQ29udGVudEVkaXRhYmxlKCk7
CisgICAgICAgIHJldHVybiAhZG9jdW1lbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpOwogICAgIH0K
IAogICAgIGlmIChtX3JlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKQEAgLTY3NSw3ICs2
NzUsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUmVhZE9uCiAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KGJveC0+bm9kZSgp
KS0+cmVhZE9ubHkoKTsKICAgICB9CiAKLSAgICByZXR1cm4gIW1fcmVuZGVyZXItPm5vZGUoKSB8
fCAhbV9yZW5kZXJlci0+bm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiAh
bV9yZW5kZXJlci0+bm9kZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCktPnJlbmRlcmVySXNFZGl0
YWJsZSgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyZWVu
KCkgY29uc3QKQEAgLTE4MjksNyArMTgyOSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWNjZXNzaWIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIEFueXRo
aW5nIHRoYXQgaXMgY29udGVudCBlZGl0YWJsZSBzaG91bGQgbm90IGJlIGlnbm9yZWQuCi0gICAg
Ly8gSG93ZXZlciwgb25lIGNhbm5vdCBqdXN0IGNhbGwgbm9kZS0+aXNDb250ZW50RWRpdGFibGUo
KSBzaW5jZSB0aGF0IHdpbGwgYXNrIGlmIGl0cyBwYXJlbnRzCisgICAgLy8gSG93ZXZlciwgb25l
IGNhbm5vdCBqdXN0IGNhbGwgbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgc2luY2UgdGhhdCB3
aWxsIGFzayBpZiBpdHMgcGFyZW50cwogICAgIC8vIGFyZSBhbHNvIGVkaXRhYmxlLiBPbmx5IHRo
ZSB0b3AgbGV2ZWwgY29udGVudCBlZGl0YWJsZSByZWdpb24gc2hvdWxkIGJlIGV4cG9zZWQuCiAg
ICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIHN0YXRpYyBXaWRnZXQq
IHdpZGdldEZvck5vZGUoTm9kZSogZm9jdXMKIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0aW5nRm9j
dXMoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlz
Q29udGVudEVkaXRhYmxlKCkpOworICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUo
KSk7CiAKICAgICBOb2RlKiByb290ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAg
IEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzExLDcgKzcxMSw3IEBAIHZvaWQgTm9kZTo6ZGVwcmVjYXRlZFBh
cnNlckFkZENoaWxkKFBhc3MKIHsKIH0KIAotYm9vbCBOb2RlOjppc0NvbnRlbnRFZGl0YWJsZShF
ZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwpIGNvbnN0Citib29sIE5vZGU6OnJlbmRlcmVySXNF
ZGl0YWJsZShFZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGRv
Y3VtZW50KCktPmluRGVzaWduTW9kZSgpIHx8IChkb2N1bWVudCgpLT5mcmFtZSgpICYmIGRvY3Vt
ZW50KCktPmZyYW1lKCktPnBhZ2UoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCktPmlz
RWRpdGFibGUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzQwLDcgKzc0MCw3IEBAIGJv
b2wgTm9kZTo6aXNDb250ZW50RWRpdGFibGUoRWRpdGFibGVMZXYKIAogYm9vbCBOb2RlOjpzaG91
bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxl
KCk7CisgICAgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZSgpOwogfQogCiBSZW5kZXJCb3gqIE5v
ZGU6OnJlbmRlckJveCgpIGNvbnN0CkBAIC0xNTE0LDcgKzE1MTQsNyBAQCBpbnQgTm9kZTo6bWF4
Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3QKIC8vIGlzIG9idmlvdXNseSBtaXNwbGFjZWQuCiBib29s
IE5vZGU6OmNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoaXNDb250ZW50RWRp
dGFibGUoKSkKKyAgICBpZiAocmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgaWYgKHJlbmRlcmVyKCkpIHsKQEAgLTE1OTIsNyArMTU5Miw3IEBAIEVsZW1l
bnQgKk5vZGU6OmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQKIEVsZW1lbnQqIE5vZGU6OnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHJlc3VsdCA9IDA7Ci0gICAg
Zm9yIChOb2RlKiBuID0gY29uc3RfY2FzdDxOb2RlKj4odGhpcyk7IG4gJiYgbi0+aXNDb250ZW50
RWRpdGFibGUoKTsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IGNv
bnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpOyBuICYmIG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpOyBuID0g
bi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAg
ICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAgICAgICAgIGlmIChu
LT5oYXNUYWdOYW1lKGJvZHlUYWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA4MTc2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw4ICsz
MjcsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtl
eWJvYXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgp
IGNvbnN0OwogCi0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlz
Q29udGVudEVkaXRhYmxlKEVkaXRhYmxlKTsgfQotICAgIGJvb2wgaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKSBjb25zdCB7IHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZShSaWNobHlFZGl0YWJsZSk7
IH0KKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gT2JqZWN0aXZlLUMgZXh0ZW5zaW9ucworICAg
IGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcklzRWRpdGFi
bGUoRWRpdGFibGUpOyB9CisjZW5kaWYKKyAgICBib29sIHJlbmRlcmVySXNFZGl0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZShFZGl0YWJsZSk7IH0KKyAgICBib29sIHJl
bmRlcmVySXNSaWNobHlFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJs
ZShSaWNobHlFZGl0YWJsZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRo
b2QoKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFJlY3QgZ2V0UmVjdCgpIGNvbnN0OwogICAgIElu
dFJlY3QgcmVuZGVyUmVjdChib29sKiBpc1JlcGxhY2VkKTsKQEAgLTY2MCw3ICs2NjQsNyBAQCBw
cml2YXRlOgogI2VuZGlmCiAKICAgICBlbnVtIEVkaXRhYmxlTGV2ZWwgeyBFZGl0YWJsZSwgUmlj
aGx5RWRpdGFibGUgfTsKLSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKEVkaXRhYmxlTGV2ZWwp
IGNvbnN0OworICAgIGJvb2wgcmVuZGVyZXJJc0VkaXRhYmxlKEVkaXRhYmxlTGV2ZWwpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRTdHlsZUNoYW5nZShTdHlsZUNoYW5nZVR5cGUpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIE5vZGUqIG5leHRSZW5kZXJlZEVkaXRhYmxlKE5v
ZGUqIG5vZGUpCiB7CiAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+bmV4dExlYWZOb2RlKCkpKSB7
Ci0gICAgICAgIGlmICghbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFu
b2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYg
KCFyZW5kZXJlcikKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIE5vZGUqIG5leHRSZW5kZXJlZEVk
aXRhYmxlKE5vZGUqIAogc3RhdGljIE5vZGUqIHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShOb2Rl
KiBub2RlKQogewogICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnByZXZpb3VzTGVhZk5vZGUoKSkp
IHsKLSAgICAgICAgaWYgKCFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAo
IW5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBp
ZiAoIXJlbmRlcmVyKQpAQCAtMzQ1LDE1ICszNDUsMTUgQEAgYm9vbCBQb3NpdGlvbjo6YXRMYXN0
RWRpdGluZ1Bvc2l0aW9uRm9yTgogYm9vbCBQb3NpdGlvbjo6YXRFZGl0aW5nQm91bmRhcnkoKSBj
b25zdAogewogICAgIFBvc2l0aW9uIG5leHRQb3NpdGlvbiA9IGRvd25zdHJlYW0oQ2FuQ3Jvc3NF
ZGl0aW5nQm91bmRhcnkpOwotICAgIGlmIChhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgp
ICYmIG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhbmV4dFBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGF0Rmlyc3RFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0UG9zaXRpb24u
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAKICAgICBQb3NpdGlvbiBwcmV2UG9zaXRpb24gPSB1cHN0cmVhbShDYW5D
cm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgaWYgKGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChhdExhc3RFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAKLSAgICByZXR1cm4gbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYm
ICFuZXh0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKQotICAg
ICAgICAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiBuZXh0UG9zaXRpb24u
aXNOb3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklz
RWRpdGFibGUoKQorICAgICAgICAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQ
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKIH0KIAogTm9k
ZSogUG9zaXRpb246OnBhcmVudEVkaXRpbmdCb3VuZGFyeSgpIGNvbnN0CkBAIC0zNjYsNyArMzY2
LDcgQEAgTm9kZSogUG9zaXRpb246OnBhcmVudEVkaXRpbmdCb3VuZGFyeSgpIAogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIE5vZGUqIGJvdW5kYXJ5ID0gbV9hbmNob3JOb2RlLmdldCgpOwotICAg
IHdoaWxlIChib3VuZGFyeSAhPSBkb2N1bWVudEVsZW1lbnQgJiYgYm91bmRhcnktPnBhcmVudE5v
ZGUoKSAmJiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgPT0gYm91bmRhcnktPnBh
cmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICB3aGlsZSAoYm91bmRhcnkgIT0g
ZG9jdW1lbnRFbGVtZW50ICYmIGJvdW5kYXJ5LT5wYXJlbnROb2RlKCkgJiYgbV9hbmNob3JOb2Rl
LT5yZW5kZXJlcklzRWRpdGFibGUoKSA9PSBib3VuZGFyeS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJl
cklzRWRpdGFibGUoKSkKICAgICAgICAgYm91bmRhcnkgPSBib3VuZGFyeS0+cGFyZW50Tm9kZSgp
OwogICAgIAogICAgIHJldHVybiBib3VuZGFyeTsKQEAgLTUyNSwxNyArNTI1LDE3IEBAIFBvc2l0
aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAvLyBGSVhNRTogUG9zaXRp
b25JdGVyYXRvciBzaG91bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KICAg
ICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9u
SXNBZnRlckFuY2hvciA/IFBvc2l0aW9uKG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9h
bmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQ
b3MgPSBsYXN0VmlzaWJsZTsKLSAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmlz
Q29udGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKICAg
ICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwogICAgIGZvciAoOyAhY3VycmVudFBvcy5h
dFN0YXJ0KCk7IGN1cnJlbnRQb3MuZGVjcmVtZW50KCkpIHsKICAgICAgICAgTm9kZSogY3VycmVu
dE5vZGUgPSBjdXJyZW50UG9zLm5vZGUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGNo
ZWNrIGZvciBhbiBlZGl0YWJpbGl0eSBjaGFuZ2UgaWYgd2UgaGF2ZW4ndCBtb3ZlZCB0byBhIGRp
ZmZlcmVudCBub2RlLAotICAgICAgICAvLyB0byBhdm9pZCB0aGUgZXhwZW5zZSBvZiBjb21wdXRp
bmcgaXNDb250ZW50RWRpdGFibGUoKS4KKyAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGV4cGVuc2Ug
b2YgY29tcHV0aW5nIHJlbmRlcmVySXNFZGl0YWJsZSgpLgogICAgICAgICBpZiAoY3VycmVudE5v
ZGUgIT0gbGFzdE5vZGUpIHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0
eS4KLSAgICAgICAgICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPmlzQ29u
dGVudEVkaXRhYmxlKCk7CisgICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJl
bnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICAgICAgICAgIGlmIChzdGFydEVkaXRh
YmxlICE9IGN1cnJlbnRFZGl0YWJsZSkgewogICAgICAgICAgICAgICAgIGlmIChydWxlID09IENh
bm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTY0NywxNyArNjQ3LDE3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKEVkaXRpbmdC
b3UKICAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91bGQgcmVzcGVjdCBCZWZvcmUg
YW5kIEFmdGVyIHBvc2l0aW9ucy4KICAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0g
bV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IFBvc2l0aW9uKG1fYW5jaG9y
Tm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKICAgICBQ
b3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKLSAgICBib29sIHN0YXJ0
RWRpdGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBzdGFy
dEVkaXRhYmxlID0gc3RhcnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICBOb2RlKiBs
YXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwog
ICAgIGZvciAoOyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zLmluY3JlbWVudCgpKSB7
ICAgCiAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gY3VycmVudFBvcy5ub2RlKCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBEb24ndCBjaGVjayBmb3IgYW4gZWRpdGFiaWxpdHkgY2hhbmdlIGlm
IHdlIGhhdmVuJ3QgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbm9kZSwKLSAgICAgICAgLy8gdG8gYXZv
aWQgdGhlIGV4cGVuc2Ugb2YgY29tcHV0aW5nIGlzQ29udGVudEVkaXRhYmxlKCkuCisgICAgICAg
IC8vIHRvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyByZW5kZXJlcklzRWRpdGFibGUo
KS4KICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAv
LyBEb24ndCBjaGFuZ2UgZWRpdGFiaWxpdHkuCi0gICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0
YWJsZSA9IGN1cnJlbnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgICAgICAgICAgYm9v
bCBjdXJyZW50RWRpdGFibGUgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CiAg
ICAgICAgICAgICBpZiAoc3RhcnRFZGl0YWJsZSAhPSBjdXJyZW50RWRpdGFibGUpIHsKICAgICAg
ICAgICAgICAgICBpZiAocnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03OTksMTAgKzc5OSwxMCBAQCBib29sIFBvc2l0aW9u
Ojppc0NhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIGlmICh0b1JlbmRlckJsb2NrKHJlbmRlcmVy
KS0+aGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CiAgICAg
ICAgICAgICBpZiAoIVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRz
V2l0aEhlaWdodChyZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShk
ZXByZWNhdGVkTm9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29u
dGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNh
dGVkTm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICAgICAgcmV0dXJuIG1f
YW5jaG9yTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2Vy
U2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVk
Tm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICByZXR1cm4gbV9hbmNob3JO
b2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3RO
b25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CiAKICAgICByZXR1
cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIGJvb2wgUG9zaXRpb25JdGVy
YXRvcjo6aXNDYW5kaWRhdGUoKSBjb24KICAgICAgICAgaWYgKHRvUmVuZGVyQmxvY2socmVuZGVy
ZXIpLT5oZWlnaHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKICAg
ICAgICAgICAgIGlmICghUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFu
dHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdGFydE9m
Tm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKTsK
LSAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYg
IVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX2FuY2hvck5vZGUpICYmIFBvc2l0aW9u
KCp0aGlzKS5hdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9y
Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0
Tm9uZShtX2FuY2hvck5vZGUpICYmIFBvc2l0aW9uKCp0aGlzKS5hdEVkaXRpbmdCb3VuZGFyeSgp
OwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVu
ZE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fw
cGVuZE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQCBBcHBlbmROb2RlQ29tbWFuZDo6QXBwZW5kTm9kZUNvbW1hbmQoUGFzCiAgICAgQVNTRVJU
KG1fbm9kZSk7CiAgICAgQVNTRVJUKCFtX25vZGUtPnBhcmVudE5vZGUoKSk7CiAKLSAgICBBU1NF
UlQobV9wYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIW1fcGFyZW50LT5hdHRhY2hlZCgp
KTsKKyAgICBBU1NFUlQobV9wYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFtX3BhcmVu
dC0+YXR0YWNoZWQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbmRBWFRleHRDaGFuZ2VkSWdub3Jp
bmdMaW5lQnJlYWtzKE5vZGUqIG5vZGUsIEFYT2JqZWN0Q2FjaGU6OkFYVGV4dENoYW5nZSB0ZXh0
Q2hhbmdlKQpAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBzZW5kQVhUZXh0Q2hhbmdlZEln
bm9yaW5nTGluCiAKIHZvaWQgQXBwZW5kTm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlm
ICghbV9wYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgbV9wYXJlbnQtPmF0dGFjaGVkKCkp
CisgICAgaWYgKCFtX3BhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgbV9wYXJlbnQtPmF0
dGFjaGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBl
YzsKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAK
IHZvaWQgQXBwZW5kTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX3BhcmVu
dC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fcGFyZW50LT5yZW5kZXJlcklzRWRp
dGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBOZWVkIHRvIG5vdGlm
eSB0aGlzIGJlZm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgdGV4dApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMTcsMTIgKzEwMTcsMTIgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4
UmFuZ2VBbmRBcHBseQogCiBzdGF0aWMgYm9vbCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlm
ICghbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgTm9kZSogc2libGluZyA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKICAgICBmb3Ig
KE5vZGUqIGRlc2NlbmRlbnQgPSBub2RlLT5maXJzdENoaWxkKCk7IGRlc2NlbmRlbnQgJiYgZGVz
Y2VuZGVudCAhPSBzaWJsaW5nOyBkZXNjZW5kZW50ID0gZGVzY2VuZGVudC0+dHJhdmVyc2VOZXh0
Tm9kZSgpKSB7Ci0gICAgICAgIGlmICghZGVzY2VuZGVudC0+aXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICAgICAgaWYgKCFkZXNjZW5kZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTAzNywxMCArMTAzNywxMCBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgZm9yIChSZWZQdHI8Tm9kZT4g
bmV4dDsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gbmV4dC5nZXQoKSkgewog
ICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogCi0gICAgICAgIGlmICgh
bm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAg
aWYgKCFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLT5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBp
ZiAoIW5vZGUtPnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZSgpICYmIG5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHBsYWludGV4dC1vbmx5IHJlZ2lvbi4g
T25seSBwcm9jZWVkIGlmIGl0J3MgZnVsbHkgc2VsZWN0ZWQuCiAgICAgICAgICAgICAvLyBwYXN0
RW5kTm9kZSBpcyB0aGUgbm9kZSBhZnRlciB0aGUgbGFzdCBmdWxseSBzZWxlY3RlZCBub2RlLCBz
byBpZiBpdCdzIGluc2lkZSBub2RlIHRoZW4KICAgICAgICAgICAgIC8vIG5vZGUgaXNuJ3QgZnVs
bHkgc2VsZWN0ZWQuCkBAIC0xMDU5LDcgKzEwNTksNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChub2RlLT5jaGlsZE5vZGVDb3VudCgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+
Y29udGFpbnMocGFzdEVuZE5vZGUpIHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24obm9kZSkg
fHwgIW5vZGUtPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAg
IGlmIChub2RlLT5jb250YWlucyhwYXN0RW5kTm9kZSkgfHwgY29udGFpbnNOb25FZGl0YWJsZVJl
Z2lvbihub2RlKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jl
c0NvbnRlbnQobm9kZSkpIHsKICAgICAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VO
ZXh0U2libGluZygpOwpAQCAtMTEzNCw3ICsxMTM0LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlSW5saW5lU3R5bAogewogICAgIEFTU0VSVChlbGVtZW50KTsKIAotICAgIGlmICgh
ZWxlbWVudC0+cGFyZW50Tm9kZSgpIHx8ICFlbGVtZW50LT5wYXJlbnROb2RlKCktPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgaWYgKCFlbGVtZW50LT5wYXJlbnROb2RlKCkgfHwgIWVsZW1lbnQt
PnBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92ZShlbGVtZW50LmdldCgp
KSkgewpAQCAtMTY1MSwxMyArMTY1MSwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzdXJy
b3VuZE5vZGVSYW5nCiAKICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcgPSBlbGVtZW50LT5u
ZXh0U2libGluZygpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBlbGVtZW50
LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxpbmct
PmlzRWxlbWVudE5vZGUoKSAmJiBuZXh0U2libGluZy0+aXNDb250ZW50RWRpdGFibGUoKQorICAg
IGlmIChuZXh0U2libGluZyAmJiBuZXh0U2libGluZy0+aXNFbGVtZW50Tm9kZSgpICYmIG5leHRT
aWJsaW5nLT5yZW5kZXJlcklzRWRpdGFibGUoKQogICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVt
ZW50cyhlbGVtZW50LmdldCgpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obmV4dFNpYmxpbmcuZ2V0
KCkpKSkKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obmV4dFNpYmxpbmcuZ2V0KCkpKTsKIAotICAgIGlmIChwcmV2aW91
c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkgJiYgcHJldmlvdXNT
aWJsaW5nLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKHByZXZpb3VzU2libGluZyAm
JiBwcmV2aW91c1NpYmxpbmctPmlzRWxlbWVudE5vZGUoKSAmJiBwcmV2aW91c1NpYmxpbmctPnJl
bmRlcmVySXNFZGl0YWJsZSgpKSB7CiAgICAgICAgIE5vZGUqIG1lcmdlZEVsZW1lbnQgPSBwcmV2
aW91c1NpYmxpbmctPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChtZXJnZWRFbGVtZW50LT5p
c0VsZW1lbnROb2RlKCkgJiYgbWVyZ2VkRWxlbWVudC0+aXNDb250ZW50RWRpdGFibGUoKQorICAg
ICAgICBpZiAobWVyZ2VkRWxlbWVudC0+aXNFbGVtZW50Tm9kZSgpICYmIG1lcmdlZEVsZW1lbnQt
PnJlbmRlcmVySXNFZGl0YWJsZSgpCiAgICAgICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50
cyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSwgc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG1lcmdlZEVsZW1lbnQpKSkKICAgICAgICAgICAgIG1lcmdlSWRlbnRpY2Fs
RWxlbWVudHMoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHByZXZpb3VzU2libGluZy5nZXQoKSksIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihtZXJnZWRFbGVtZW50KSk7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9u
IDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDgsNyArMTA0OCw3IEBAIGJvb2wgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICAvLyBGSVhNRTogQ2FuJ3Qgd2UgZG8gc29tZXRo
aW5nIGJldHRlciB3aGVuIHRoZSBpbW1lZGlhdGUgcGFyZW50IHdhc24ndCBhIGxpc3Qgbm9kZT8K
ICAgICBpZiAoIWxpc3ROb2RlCiAgICAgICAgIHx8ICghbGlzdE5vZGUtPmhhc1RhZ05hbWUodWxU
YWcpICYmICFsaXN0Tm9kZS0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAgICAgIHx8ICFsaXN0Tm9k
ZS0+aXNDb250ZW50RWRpdGFibGUoKQorICAgICAgICB8fCAhbGlzdE5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpCiAgICAgICAgIHx8IGxpc3ROb2RlID09IGVtcHR5TGlzdEl0ZW0tPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBEZWxldGVCdXR0b25Db250cm9s
bGVyOjpEZWxldGVCdXR0b25Db250CiAKIHN0YXRpYyBib29sIGlzRGVsZXRhYmxlRWxlbWVudChj
b25zdCBOb2RlKiBub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVu
dCgpIHx8ICFub2RlLT5pbkRvY3VtZW50KCkgfHwgIW5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkp
CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmluRG9j
dW1lbnQoKSB8fCAhbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIEluIGdlbmVyYWwgd2Ugd2FudCB0byBvbmx5IGRyYXcgdGhlIFVJIGFy
b3VuZCBvYmplY3Qgb2YgYSBjZXJ0YWluIGFyZWEsIGJ1dCB3ZSBzdGlsbCBrZWVwIHRoZSBtaW4g
d2lkdGgvaGVpZ2h0IHRvCkBAIC0xNTYsNyArMTU2LDcgQEAgc3RhdGljIEhUTUxFbGVtZW50KiBl
bmNsb3NpbmdEZWxldGFibGVFbAogCiAgICAgLy8gVGhlIGVuY2xvc2luZ05vZGVPZlR5cGUgZnVu
Y3Rpb24gb25seSB3b3JrcyBvbiBub2RlcyB0aGF0IGFyZSBlZGl0YWJsZQogICAgIC8vICh3aGlj
aCBpcyBzdHJhbmdlLCBnaXZlbiBpdHMgbmFtZSkuCi0gICAgaWYgKCFjb250YWluZXItPmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFjb250YWluZXItPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIE5vZGUqIGVsZW1lbnQgPSBlbmNsb3NpbmdOb2Rl
T2ZUeXBlKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29udGFpbmVyKSwgJmlzRGVsZXRhYmxlRWxlbWVu
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRl
eHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNyBAQCB2b2lkIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoCiB7CiAg
ICAgQVNTRVJUKG1fbm9kZSk7CiAKLSAgICBpZiAoIW1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICBpZiAoIW1fbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIERl
bGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBsCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7
CiAKLSAgICBpZiAoIW1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fbm9k
ZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
RXhjZXB0aW9uQ29kZSBlYzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDIsNyArMzQyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2Rl
KAogICAgICAgICAKICAgICBpZiAobV9zdGFydFJvb3QgIT0gbV9lbmRSb290ICYmICEobm9kZS0+
aXNEZXNjZW5kYW50T2YobV9zdGFydFJvb3QuZ2V0KCkpICYmIG5vZGUtPmlzRGVzY2VuZGFudE9m
KG1fZW5kUm9vdC5nZXQoKSkpKSB7CiAgICAgICAgIC8vIElmIGEgbm9kZSBpcyBub3QgaW4gYm90
aCB0aGUgc3RhcnQgYW5kIGVuZCBlZGl0YWJsZSByb290cywgcmVtb3ZlIGl0IG9ubHkgaWYgaXRz
IGluc2lkZSBhbiBlZGl0YWJsZSByZWdpb24uCi0gICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9k
ZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9k
ZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgcmVtb3Zl
IG5vbi1lZGl0YWJsZSBhdG9taWMgbm9kZXMuCiAgICAgICAgICAgICBpZiAoIW5vZGUtPmZpcnN0
Q2hpbGQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIGJvb2wgRWRpdG9yOjpj
YW5EZWxldGVSYW5nZShSYW5nZSogcmFuZ2UKICAgICBpZiAoIXN0YXJ0Q29udGFpbmVyIHx8ICFl
bmRDb250YWluZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXN0YXJ0
Q29udGFpbmVyLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFlbmRDb250YWluZXItPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgaWYgKCFzdGFydENvbnRhaW5lci0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkgfHwgIWVuZENvbnRhaW5lci0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBpZiAocmFuZ2UtPmNvbGxhcHNlZChlYykpIHsKQEAgLTIxNjIs
NyArMjE2Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWEKICAg
ICAKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgYmFpbC4KICAgICBO
b2RlKiBlZGl0YWJsZU5vZGUgPSBzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICBp
ZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQor
ICAgIGlmICghZWRpdGFibGVOb2RlIHx8ICFlZGl0YWJsZU5vZGUtPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRG
b3IoZWRpdGFibGVOb2RlKSkKQEAgLTIyMzMsNyArMjIzMyw3IEBAIHZvaWQgRWRpdG9yOjptYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKIAogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhbiBlZGl0
YWJsZSBub2RlLCBiYWlsLgogICAgIE5vZGUqIGVkaXRhYmxlTm9kZSA9IHNwZWxsaW5nUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9k
ZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFi
bGVOb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KCFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGVkaXRhYmxlTm9kZSkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU0LDcgKzI1NCw3IEBAIHN0YXRpYyBpbnQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFtZSoK
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICBpZiAoIXN0
eWxlKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIShzdHlsZS0+b3ZlcmZsb3dZKCkgPT0g
T1NDUk9MTCB8fCBzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT0FVVE8gfHwgZm9jdXNlZE5vZGUtPmlz
Q29udGVudEVkaXRhYmxlKCkpKQorICAgIGlmICghKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NS
T0xMIHx8IHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPQVVUTyB8fCBmb2N1c2VkTm9kZS0+cmVuZGVy
ZXJJc0VkaXRhYmxlKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgaGVpZ2h0ID0gc3Rk
OjptaW48aW50Pih0b1JlbmRlckJveChyZW5kZXJlciktPmNsaWVudEhlaWdodCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
CShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDE0ICsxNDksMTQgQEAgTm9kZSogZW5j
bG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKE5vZGUqIAogewogICAgIE5vZGUqIGxhc3RCbG9jayA9
IHN0YXJ0Tm9kZTsKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydE5vZGU7IG47IG4gPSBuLT5wYXJl
bnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFuLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAg
ICBpZiAoIW4tPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RC
bG9jazsKLSAgICAgICAgaWYgKGlzVGFibGVDZWxsKG4pIHx8IG4tPmhhc1RhZ05hbWUoYm9keVRh
ZykgfHwgIW4tPnBhcmVudE5vZGUoKSB8fCAhbi0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0
YWJsZSgpIHx8IGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKG4pKQorICAgICAgICBpZiAoaXNUYWJs
ZUNlbGwobikgfHwgbi0+aGFzVGFnTmFtZShib2R5VGFnKSB8fCAhbi0+cGFyZW50Tm9kZSgpIHx8
ICFuLT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8IGlzRWxlbWVudEZvckZv
cm1hdEJsb2NrKG4pKQogICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgIGlmIChpc0Jsb2Nr
KG4pKQogICAgICAgICAgICAgbGFzdEJsb2NrID0gbjsKICAgICAgICAgaWYgKGlzTGlzdEVsZW1l
bnQobikpCi0gICAgICAgICAgICByZXR1cm4gbi0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0
YWJsZSgpID8gbi0+cGFyZW50Tm9kZSgpIDogbjsKKyAgICAgICAgICAgIHJldHVybiBuLT5wYXJl
bnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpID8gbi0+cGFyZW50Tm9kZSgpIDogbjsKICAg
ICB9CiAgICAgcmV0dXJuIGxhc3RCbG9jazsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVu
dFBhcmFncgogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kT2ZQYXJhZ3JhcGggPSBlbmRP
ZlBhcmFncmFwaCh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaCk7CiAKICAgICBOb2RlKiBlbmNsb3Np
bmdOb2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZSh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVw
RXF1aXZhbGVudCgpLCAmaXNMaXN0T3JJbmRlbnRCbG9ja3F1b3RlKTsKLSAgICBpZiAoIWVuY2xv
c2luZ05vZGUgfHwgIWVuY2xvc2luZ05vZGUtPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFi
bGUoKSkgIC8vIFdlIGNhbid0IG91dGRlbnQgaWYgdGhlcmUgaXMgbm8gcGxhY2UgdG8gZ28hCisg
ICAgaWYgKCFlbmNsb3NpbmdOb2RlIHx8ICFlbmNsb3NpbmdOb2RlLT5wYXJlbnROb2RlKCktPnJl
bmRlcmVySXNFZGl0YWJsZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBs
YWNlIHRvIGdvIQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2UgSW5zZXJ0TGlzdENvbW1h
bmQgdG8gcmVtb3ZlIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgbGlzdApAQCAtMTUxLDcgKzE1MSw3
IEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3IKICAgICAgICAgICAg
IGlmIChDb250YWluZXJOb2RlKiBzcGxpdFBvaW50UGFyZW50ID0gc3BsaXRQb2ludC0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNwbGl0UG9pbnRQYXJlbnQtPmhhc1RhZ05h
bWUoYmxvY2txdW90ZVRhZykKICAgICAgICAgICAgICAgICAgICAgJiYgIXNwbGl0UG9pbnQtPmhh
c1RhZ05hbWUoYmxvY2txdW90ZVRhZykKLSAgICAgICAgICAgICAgICAgICAgJiYgc3BsaXRQb2lu
dFBhcmVudC0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSAvLyBXZSBjYW4ndCBv
dXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQorICAgICAgICAgICAgICAgICAgICAm
JiBzcGxpdFBvaW50UGFyZW50LT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKSAv
LyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQogICAgICAgICAg
ICAgICAgICAgICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNwbGl0UG9pbnRQ
YXJlbnQpLCBzcGxpdFBvaW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQu
Y3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50
b1RleHROb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleAogCiB2b2lkIEluc2VydEludG9U
ZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICghbV9ub2RlLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC01Niw3ICs1Niw3IEBA
IHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgKIAogdm9pZCBJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIGlmICghbV9ub2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBOZWVkIHRvIG5vdGlmeSB0aGlzIGJl
Zm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgdGV4dApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBJbnNlcnROb2RlQmVmb3JlQ29tbWFu
ZDo6SW5zZXJ0Tm9kZUJlZm9yCiAgICAgQVNTRVJUKG1fcmVmQ2hpbGQpOwogICAgIEFTU0VSVCht
X3JlZkNoaWxkLT5wYXJlbnROb2RlKCkpOwogCi0gICAgQVNTRVJUKG1fcmVmQ2hpbGQtPnBhcmVu
dE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSB8fCAhbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgp
LT5hdHRhY2hlZCgpKTsKKyAgICBBU1NFUlQobV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSB8fCAhbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5hdHRhY2hlZCgp
KTsKIH0KIAogdm9pZCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAg
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpOwotICAgIGlm
ICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJl
bnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQ6OmRvQXBwbHkoKQogCiB2b2lkIEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpk
b1VuYXBwbHkoKQogewotICAgIGlmICghbV9pbnNlcnRDaGlsZC0+aXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICBpZiAoIW1faW5zZXJ0Q2hpbGQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIE5lZWQgdG8gbm90aWZ5IHRoaXMgYmVmb3JlIGFj
dHVhbGx5IGRlbGV0aW5nIHRoZSB0ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0pv
aW5UZXh0Tm9kZXNDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNyArNDYsNyBAQCB2b2lkIEpvaW5UZXh0Tm9kZXNDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFy
ZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxl
KCkpCisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTYzLDcg
KzYzLDcgQEAgdm9pZCBKb2luVGV4dE5vZGVzQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9k
ZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisg
ICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50
aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAg
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbgogCiB2b2lkIE1lcmdlSWRl
bnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBpZiAobV9lbGVtZW50MS0+
bmV4dFNpYmxpbmcoKSAhPSBtX2VsZW1lbnQyIHx8ICFtX2VsZW1lbnQxLT5pc0NvbnRlbnRFZGl0
YWJsZSgpIHx8ICFtX2VsZW1lbnQyLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChtX2Vs
ZW1lbnQxLT5uZXh0U2libGluZygpICE9IG1fZWxlbWVudDIgfHwgIW1fZWxlbWVudDEtPnJlbmRl
cmVySXNFZGl0YWJsZSgpIHx8ICFtX2VsZW1lbnQyLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9hdENoaWxkID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgp
OwpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpk
b1VuCiAgICAgUmVmUHRyPE5vZGU+IGF0Q2hpbGQgPSBtX2F0Q2hpbGQucmVsZWFzZSgpOwogCiAg
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgpOwotICAg
IGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFw
YXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgUmVtb3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5vZGVDb21tYW5kKFBhcwogdm9p
ZCBSZW1vdmVOb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogcGFy
ZW50ID0gbV9ub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+
aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJl
cklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7
CkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7
CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG1fcGFyZW50LnJlbGVhc2UoKTsK
ICAgICBSZWZQdHI8Tm9kZT4gcmVmQ2hpbGQgPSBtX3JlZkNoaWxkLnJlbGVhc2UoKTsKLSAgICBp
ZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghcGFy
ZW50IHx8ICFwYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVu
dEZyYWdtZW50CiAgICAgaWYgKCFlZGl0YWJsZVJvb3QtPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLndlYmtpdEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KSAmJgogICAgICAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGNoZWNrcyBvbmNlIHRleHRhcmVhcyBhbmQgdGV4dGZp
ZWxkcyBhY3R1YWxseSByZWdpc3RlciBhbiBldmVudCBoYW5kbGVyLgogICAgICAgICAhKHNoYWRv
d0FuY2VzdG9yTm9kZSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCkgJiYgc2hhZG93
QW5jZXN0b3JOb2RlLT5yZW5kZXJlcigpLT5pc1RleHRDb250cm9sKCkpICYmCi0gICAgICAgIGVk
aXRhYmxlUm9vdC0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBlZGl0YWJs
ZVJvb3QtPnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIHJlbW92ZUludGVy
Y2hhbmdlTm9kZXMobV9mcmFnbWVudC5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xNjIsNyArMTYyLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVu
dAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGVkaXRhYmxlUm9vdC0+ZGlzcGF0Y2hF
dmVudChldnQsIGVjKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgaWYgKHRleHQgIT0gZXZ0
LT50ZXh0KCkgfHwgIWVkaXRhYmxlUm9vdC0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewor
ICAgIGlmICh0ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPnJlbmRlcmVySXNS
aWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIHJlc3RvcmVUZXN0UmVuZGVyaW5nTm9kZXNUb0Zy
YWdtZW50KGhvbGRlci5nZXQoKSk7CiAgICAgICAgIHJlbW92ZU5vZGUoaG9sZGVyKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjIsNyArMTM2Miw3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICAvLyBUaGlzIG1ldGhvZCdzIHB1cnBvc2UgaXMgaXQgdG8gbWFrZSBpdCBlYXNpZXIgdG8g
c2VsZWN0IGlmcmFtZXMgKGluIG9yZGVyIHRvIGRlbGV0ZSB0aGVtKS4gIERvbid0IGRvIGFueXRo
aW5nIGlmIHRoZSBpZnJhbWUgaXNuJ3QgZGVsZXRhYmxlLgotICAgIGlmICghb3duZXJFbGVtZW50
UGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghb3duZXJFbGVtZW50UGFyZW50
LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRl
IGNvbXB1dGUgcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVsZW1lbnQuCkBAIC0xODI0
LDcgKzE4MjQsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbkZyCiAK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIGJvb2wg
Y2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3Mo
KS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgpIHx8ICEoZG9jdW1l
bnQtPmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykpCisgICAgaWYgKCFpc05v
bmUoKSB8fCAhKGRvY3VtZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5n
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
IHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KCkKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX2VsZW1lbnQy
LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNDb250ZW50RWRp
dGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEu
Z2V0KCksIG1fZWxlbWVudDIuZ2V0KCksIGVjKTsKICAgICBpZiAoZWMpCkBAIC03OCw3ICs3OCw3
IEBAIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU3BsaXRFbGVt
ZW50Q29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudDEgfHwgIW1fZWxl
bWVudDEtPmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIW1fZWxlbWVudDItPmlzQ29udGVudEVkaXRh
YmxlKCkpCisgICAgaWYgKCFtX2VsZW1lbnQxIHx8ICFtX2VsZW1lbnQxLT5yZW5kZXJlcklzRWRp
dGFibGUoKSB8fCAhbV9lbGVtZW50Mi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBjaGlsZHJlbjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCShyZXZpc2lv
biA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIFNwbGl0VGV4dE5vZGVDb21tYW5k
OjpTcGxpdFRleHROb2RlQ29tbWEKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHko
KQogewogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fdGV4dDItPnBhcmVudE5vZGUoKTsK
LSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlm
ICghcGFyZW50IHx8ICFwYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBT
cGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1h
bmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX3RleHQxIHx8ICFtX3RleHQxLT5pc0NvbnRl
bnRFZGl0YWJsZSgpKQorICAgIGlmICghbV90ZXh0MSB8fCAhbV90ZXh0MS0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX3RleHQxLT5kb2N1bWVu
dCgpID09IGRvY3VtZW50KCkpOwpAQCAtODksNyArODksNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVD
b21tYW5kOjpkb1JlYXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnQgPSBtX3RleHQyLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBh
cmVudC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5zZXJ0VGV4dDFB
bmRUcmltVGV4dDIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9k
ZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcAkocmV2
aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBA
IHZvaWQgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWEKICAgICBzcGxpdFRleHRO
b2RlKG1fdGV4dC5nZXQoKSwgbV9vZmZzZXQpOwogCiAgICAgRWxlbWVudCogcGFyZW50ID0gbV90
ZXh0LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50
RWxlbWVudCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVu
dC0+cGFyZW50RWxlbWVudCgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHJl
dmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgUG9zaXRpb24gVmlzaWJsZVBv
c2l0aW9uOjpjYW5vbmljYWxQb3NpdAogCiAgICAgLy8gVGhlIG5ldyBwb3NpdGlvbiBtdXN0IGJl
IGluIHRoZSBzYW1lIGVkaXRhYmxlIGVsZW1lbnQuIEVuZm9yY2UgdGhhdCBmaXJzdC4KICAgICAv
LyBVbmxlc3MgdGhlIGRlc2NlbnQgaXMgZnJvbSBhIG5vbi1lZGl0YWJsZSBodG1sIGVsZW1lbnQg
dG8gYW4gZWRpdGFibGUgYm9keS4KLSAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGh0
bWxUYWcpICYmICFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUtPmRvY3VtZW50KCkt
PmJvZHkoKSAmJiBub2RlLT5kb2N1bWVudCgpLT5ib2R5KCktPmlzQ29udGVudEVkaXRhYmxlKCkp
CisgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiAhbm9kZS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+Ym9keSgpICYmIG5vZGUtPmRv
Y3VtZW50KCktPmJvZHkoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBu
ZXh0LmlzTm90TnVsbCgpID8gbmV4dCA6IHByZXY7CiAKICAgICBOb2RlKiBlZGl0aW5nUm9vdCA9
IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9XcmFwQ29udGVu
dHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBA
IHZvaWQgV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kOjpkb1UKIHsKICAgICBBU1NFUlQo
bV9lbGVtZW50KTsKIAotICAgIGlmICghbV9kdW1teVNwYW4gfHwgIW1fZWxlbWVudC0+aXNDb250
ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fZHVtbXlTcGFuIHx8ICFtX2VsZW1lbnQtPnJlbmRl
cmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4gY2hpbGRyZW47CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgV3JhcENvbnRlbnRzSW5EdW1t
eVNwYW5Db21tYW5kOjpkb1IKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICAKLSAgICBp
ZiAoIW1fZHVtbXlTcGFuIHx8ICFtX2VsZW1lbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAg
aWYgKCFtX2R1bW15U3BhbiB8fCAhbV9lbGVtZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgZXhlY3V0ZUFwcGx5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3
IEBAIE5vZGUqIGhpZ2hlc3RFZGl0YWJsZVJvb3QoY29uc3QgUG9zaXRpb24KICAgICAKICAgICBu
b2RlID0gaGlnaGVzdFJvb3Q7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKICAgICAgICAgICAgIGhpZ2hlc3RSb290ID0gbm9kZTsKICAgICAgICAgaWYgKG5vZGUt
Pmhhc1RhZ05hbWUoYm9keVRhZykpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE2MCw3ICsxNjAs
NyBAQCBOb2RlKiBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKE5vZGUqIG5vZGUpCiAgICAgCiAgICAg
Tm9kZSAqbG93ZXN0Um9vdCA9IDA7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5v
ZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcklzRWRp
dGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7
CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKQogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xNzksNyArMTc5LDcgQEAgYm9vbCBpc0VkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9z
aXRpb24mIAogICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlz
VGFibGUoKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAKLSAgICBy
ZXR1cm4gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVy
ZXJJc0VkaXRhYmxlKCk7CiB9CiAKIGJvb2wgaXNBdFVuc3BsaXR0YWJsZUVsZW1lbnQoY29uc3Qg
UG9zaXRpb24mIHBvcykKQEAgLTE5OCw3ICsxOTgsNyBAQCBib29sIGlzUmljaGx5RWRpdGFibGVQ
b3NpdGlvbihjb25zdCBQb3NpCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVu
ZGVyZXIoKS0+aXNUYWJsZSgpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwog
ICAgIAotICAgIHJldHVybiBub2RlLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJl
dHVybiBub2RlLT5yZW5kZXJlcklzUmljaGx5RWRpdGFibGUoKTsKIH0KIAogRWxlbWVudCogZWRp
dGFibGVSb290Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApCkBAIC0yNzYsNyArMjc2LDcg
QEAgUG9zaXRpb24gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYQogVmlzaWJsZVBvc2l0
aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVyUG9zaXRpb25JblJvb3QoY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uLCBOb2RlKiBoaWdoZXN0Um9vdCkKIHsKICAgICAvLyBwb3NpdGlvbiBmYWxs
cyBiZWZvcmUgaGlnaGVzdFJvb3QuCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb24s
IGZpcnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpKSA9PSAtMSAmJiBoaWdoZXN0Um9vdC0+
aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwg
Zmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IC0xICYmIGhpZ2hlc3RSb290LT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUo
aGlnaGVzdFJvb3QpOwogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwpAQCAtNTYxLDcgKzU2
MSw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IGV4dGVuZFJhbmdlVG9XcmFwcGluZ04KICAgICBOb2Rl
KiBhbmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyk7Ly8gZmluZCB0
aGUgY2xvZXNldCBjb21tb24gYW5jZXN0b3IKICAgICBOb2RlKiBoaWdoZXN0Tm9kZSA9IDA7CiAg
ICAgLy8gdHJhdmVyc2UgdGhyb3VnaCBhbmNlc3RvcnMgYXMgbG9uZyBhcyB0aGV5IGFyZSBjb250
YWluZWQgd2l0aGluIHRoZSByYW5nZSwgY29udGVudC1lZGl0YWJsZSwgYW5kIGJlbG93IHJvb3RO
b2RlIChjb3VsZCBiZSA9MCkuCi0gICAgd2hpbGUgKGFuY2VzdG9yICYmIGFuY2VzdG9yLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oYW5jZXN0b3Is
IG1heGltdW1SYW5nZSkgJiYgYW5jZXN0b3IgIT0gcm9vdE5vZGUpIHsKKyAgICB3aGlsZSAoYW5j
ZXN0b3IgJiYgYW5jZXN0b3ItPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmIGlzTm9kZVZpc2libHlD
b250YWluZWRXaXRoaW4oYW5jZXN0b3IsIG1heGltdW1SYW5nZSkgJiYgYW5jZXN0b3IgIT0gcm9v
dE5vZGUpIHsKICAgICAgICAgaGlnaGVzdE5vZGUgPSBhbmNlc3RvcjsKICAgICAgICAgYW5jZXN0
b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogICAgIH0KQEAgLTU5Miw3ICs1OTIsNyBAQCBO
b2RlKiBlbmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3NpdGlvCiAgICAgICAgIAogICAgIE5v
ZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwogICAgIGZvciAoTm9kZSogbiA9IHAu
ZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAo
cm9vdCAmJiAhbi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKHJvb3QgJiYgIW4t
PnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlm
IChuLT5oYXNUYWdOYW1lKHRhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuIG47CkBAIC02MTQs
NyArNjE0LDcgQEAgTm9kZSogZW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbgogICAg
IGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUo
KSkgewogICAgICAgICAvLyBEb24ndCByZXR1cm4gYSBub24tZWRpdGFibGUgbm9kZSBpZiB0aGUg
aW5wdXQgcG9zaXRpb24gd2FzIGVkaXRhYmxlLCBzaW5jZQogICAgICAgICAvLyB0aGUgY2FsbGVy
cyBmcm9tIGVkaXRpbmcgd2lsbCBubyBkb3VidCB3YW50IHRvIHBlcmZvcm0gZWRpdGluZyBpbnNp
ZGUgdGhlIHJldHVybmVkIG5vZGUuCi0gICAgICAgIGlmIChyb290ICYmICFuLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpKQorICAgICAgICBpZiAocm9vdCAmJiAhbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG5vZGVJc09mVHlwZShuKSkKICAg
ICAgICAgICAgIHJldHVybiBuOwpAQCAtNjMwLDcgKzYzMCw3IEBAIE5vZGUqIGhpZ2hlc3RFbmNs
b3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFAKICAgICBOb2RlKiBoaWdoZXN0ID0gMDsKICAgICBOb2Rl
KiByb290ID0gcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSA/IGhpZ2hlc3RFZGl0
YWJsZVJvb3QocCkgOiAwOwogICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsg
bjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250
ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKHJvb3QgJiYgIW4tPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChub2RlSXNPZlR5cGUobikp
CiAgICAgICAgICAgICBoaWdoZXN0ID0gbjsKQEAgLTc1OCw3ICs3NTgsNyBAQCBib29sIGNhbk1l
cmdlTGlzdHMoRWxlbWVudCogZmlyc3RMaXN0LCBFCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHJldHVybiBmaXJzdExpc3QtPmhhc1RhZ05hbWUoc2Vjb25kTGlzdC0+dGFnUU5hbWUoKSkv
LyBtYWtlIHN1cmUgdGhlIGxpc3QgdHlwZXMgbWF0Y2ggKG9sIHZzLiB1bCkKLSAgICAmJiBmaXJz
dExpc3QtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgc2Vjb25kTGlzdC0+aXNDb250ZW50RWRpdGFi
bGUoKS8vIGJvdGggbGlzdHMgYXJlIGVkaXRhYmxlCisgICAgJiYgZmlyc3RMaXN0LT5yZW5kZXJl
cklzRWRpdGFibGUoKSAmJiBzZWNvbmRMaXN0LT5yZW5kZXJlcklzRWRpdGFibGUoKSAvLyBib3Ro
IGxpc3RzIGFyZSBlZGl0YWJsZQogICAgICYmIGZpcnN0TGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpID09IHNlY29uZExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS8vIGRvbid0IGNyb3NzIGVk
aXRpbmcgYm91bmRhcmllcwogICAgICYmIGlzVmlzaWJseUFkamFjZW50KHBvc2l0aW9uSW5QYXJl
bnRBZnRlck5vZGUoZmlyc3RMaXN0KSwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoc2Vjb25k
TGlzdCkpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyB2aXNpYmxlIGNvbnRlbnQgYmV0
d2VlbiB0aGlzIGxpIGFuZCB0aGUgcHJldmlvdXMgbGlzdApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NywxMCAr
NDc3LDEwIEBAIGJvb2wgaXNFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYKIC8vIFRo
ZSBmaXJzdCBsZWFmIGJlZm9yZSBub2RlIHRoYXQgaGFzIHRoZSBzYW1lIGVkaXRhYmlsaXR5IGFz
IG5vZGUuCiBzdGF0aWMgTm9kZSogcHJldmlvdXNMZWFmV2l0aFNhbWVFZGl0YWJpbGl0eShOb2Rl
KiBub2RlKQogewotICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgp
OworICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICBO
b2RlKiBuID0gbm9kZS0+cHJldmlvdXNMZWFmTm9kZSgpOwogICAgIHdoaWxlIChuKSB7Ci0gICAg
ICAgIGlmIChlZGl0YWJsZSA9PSBuLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAo
ZWRpdGFibGUgPT0gbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4g
bjsKICAgICAgICAgbiA9IG4tPnByZXZpb3VzTGVhZk5vZGUoKTsKICAgICB9CkBAIC01NzIsNyAr
NTcyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbgogICAgIC8v
IENvdWxkIG5vdCBmaW5kIGEgcHJldmlvdXMgbGluZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGFscmVh
ZHkgYmUgb24gdGhlIGZpcnN0IGxpbmUuCiAgICAgLy8gTW92ZSB0byB0aGUgc3RhcnQgb2YgdGhl
IGNvbnRlbnQgaW4gdGhpcyBibG9jaywgd2hpY2ggZWZmZWN0aXZlbHkgbW92ZXMgdXMKICAgICAv
LyB0byB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgd2UncmUgb24uCi0gICAgRWxlbWVudCogcm9vdEVs
ZW1lbnQgPSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgRWxlbWVu
dCogcm9vdEVsZW1lbnQgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSA/IG5vZGUtPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwog
ICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsK
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUocm9vdEVsZW1l
bnQpLCBET1dOU1RSRUFNKTsKQEAgLTU4MCwxMiArNTgwLDEyIEBAIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c0xpbmVQb3NpdGlvbihjb24KIAogc3RhdGljIE5vZGUqIG5leHRMZWFmV2l0aFNhbWVF
ZGl0YWJpbGl0eShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQogewotICAgIGJvb2wgZWRpdGFibGUg
PSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICBBU1NFUlQob2Zmc2V0ID49IDApOwogICAgIE5vZGUq
IGNoaWxkID0gbm9kZS0+Y2hpbGROb2RlKG9mZnNldCk7CiAgICAgTm9kZSogbiA9IGNoaWxkID8g
Y2hpbGQtPm5leHRMZWFmTm9kZSgpIDogbm9kZS0+bGFzdERlc2NlbmRhbnQoKS0+bmV4dExlYWZO
b2RlKCk7CiAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKGVkaXRhYmxlID09IG4tPmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChlZGl0YWJsZSA9PSBuLT5yZW5kZXJlcklzRWRp
dGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICBuID0gbi0+bmV4dExlYWZO
b2RlKCk7CiAgICAgfQpAQCAtNTk3LDEwICs1OTcsMTAgQEAgc3RhdGljIE5vZGUqIG5leHRMZWFm
V2l0aFNhbWVFZGl0YWJpbGl0eQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCi0gICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAg
Ym9vbCBlZGl0YWJsZSA9IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOwogICAgIE5vZGUqIG4g
PSBub2RlLT5uZXh0TGVhZk5vZGUoKTsKICAgICB3aGlsZSAobikgewotICAgICAgICBpZiAoZWRp
dGFibGUgPT0gbi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKGVkaXRhYmxlID09
IG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAg
IG4gPSBuLT5uZXh0TGVhZk5vZGUoKTsKICAgICB9CkBAIC02NzksNyArNjc5LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVgogICAgIC8vIENvdWxkIG5vdCBmaW5k
IGEgbmV4dCBsaW5lLiBUaGlzIG1lYW5zIHdlIG11c3QgYWxyZWFkeSBiZSBvbiB0aGUgbGFzdCBs
aW5lLgogICAgIC8vIE1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgY29udGVudCBpbiB0aGlzIGJsb2Nr
LCB3aGljaCBlZmZlY3RpdmVseSBtb3ZlcyB1cwogICAgIC8vIHRvIHRoZSBlbmQgb2YgdGhlIGxp
bmUgd2UncmUgb24uCi0gICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogbm9kZS0+ZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IG5vZGUt
PmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKGxhc3RQb3NpdGlvbkluTm9kZShyb290RWxlbWVudCksIERPV05TVFJFQU0pOwpAQCAtNzU5
LDEwICs3NTksMTAgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgog
CiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikgewotICAgICAgICBpZiAo
Ym91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgbi0+
aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisg
ICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3Vu
ZGFyeSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChib3VuZGFyeUNyb3Nz
aW5nUnVsZSA9PSBDYW5Ta2lwT3ZlckVkaXRpbmdCb3VuZGFyeSkgewotICAgICAgICAgICAgd2hp
bGUgKG4gJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUo
KSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIG4g
PSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKICAgICAgICAg
ICAgIGlmICghbiB8fCAhbi0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtODMxLDEwICs4MzEsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9m
UGFyYWdyYXBoKGNvbnN0IFZpcwogCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGls
ZSAobikgewotICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NF
ZGl0aW5nQm91bmRhcnkgJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlz
Q29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBD
YW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBz
dGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5Ta2lwT3ZlckVkaXRpbmdCb3VuZGFy
eSkgewotICAgICAgICAgICAgd2hpbGUgKG4gJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBz
dGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICB3aGlsZSAobiAmJiBu
LT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQogICAgICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVCbG9j
ayk7CiAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290
KSkKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBA
IHN0YXRpYyB1bnNpZ25lZCBwYXJzZVBvcnRGcm9tU3RyaW5nUG9zaXQKIAogYm9vbCBIVE1MQW5j
aG9yRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgaWYgKGlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgaWYgKHJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4g
SFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKICAgICAvLyBJZiBub3QgYSBsaW5rIHdlIHNo
b3VsZCBzdGlsbCBiZSBhYmxlIHRvIGZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IGhhcyB0YWJJbmRl
eC4KICAgICByZXR1cm4gaXNMaW5rKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsK
QEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNDb250
ZW50RWRpdGFibGUoKSkgeworICAgICAgICBpZiAocmVuZGVyZXJJc0VkaXRhYmxlKCkpIHsKICAg
ICAgICAgICAgIC8vIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRhYmxlIGJsb2NrIHRoYXQg
dGhlIHNlbGVjdGlvbiB3YXMgaW4gKGlmIGl0IHdhcyBpbiBvbmUpIGp1c3QgYmVmb3JlIHRoZSBs
aW5rIHdhcyBjbGlja2VkCiAgICAgICAgICAgICAvLyBmb3IgdGhlIExpdmVXaGVuTm90Rm9jdXNl
ZCBlZGl0YWJsZSBsaW5rIGJlaGF2aW9yCiAgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYm
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9u
ICYmIGRvY3VtZW50KCktPmZyYW1lKCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9u
KCkpIHsKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kCiAKIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGRvd24s
IGJvb2wgcGF1c2UpCiB7Ci0gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICBpZiAo
cmVuZGVyZXJJc0VkaXRhYmxlKCkpIHsKICAgICAgICAgRWRpdGFibGVMaW5rQmVoYXZpb3IgZWRp
dGFibGVMaW5rQmVoYXZpb3IgPSBFZGl0YWJsZUxpbmtEZWZhdWx0QmVoYXZpb3I7CiAgICAgICAg
IGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpKQogICAgICAg
ICAgICAgZWRpdGFibGVMaW5rQmVoYXZpb3IgPSBzZXR0aW5ncy0+ZWRpdGFibGVMaW5rQmVoYXZp
b3IoKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50OjpjYW5TdGFy
dFNlbGVjdGlvCiAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5IHdhbnQgdGhpcyBzYW1lIGJlaGF2
aW9yIGluIFNWR0FFbGVtZW50IHRvbwogICAgIGlmICghaXNMaW5rKCkpCiAgICAgICAgIHJldHVy
biBIVE1MRWxlbWVudDo6Y2FuU3RhcnRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gaXNDb250ZW50
RWRpdGFibGUoKTsKKyAgICByZXR1cm4gcmVuZGVyZXJJc0VkaXRhYmxlKCk7CiB9CiAKIGJvb2wg
SFRNTEFuY2hvckVsZW1lbnQ6OmRyYWdnYWJsZSgpIGNvbnN0CkBAIC01MDEsNyArNTAxLDcgQEAg
SFRNTEFuY2hvckVsZW1lbnQ6OkV2ZW50VHlwZSBIVE1MQW5jaG9yRQogCiBib29sIEhUTUxBbmNo
b3JFbGVtZW50Ojp0cmVhdExpbmtBc0xpdmVGb3JFdmVudFR5cGUoRXZlbnRUeXBlIGV2ZW50VHlw
ZSkgY29uc3QKIHsKLSAgICBpZiAoIWlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFyZW5k
ZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEJvZHlFbGVtZW50LmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAs
NyBAQCBib29sIEhUTUxCb2R5RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0CiAKIGJvb2wgSFRN
TEJvZHlFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNDb250
ZW50RWRpdGFibGUoKSB8fCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOworICAgIHJldHVy
biByZW5kZXJlcklzRWRpdGFibGUoKSB8fCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwog
fQogCiBTdHJpbmcgSFRNTEJvZHlFbGVtZW50OjphTGluaygpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU0LDEwICs2NTQsMTUg
QEAgdm9pZCBIVE1MRWxlbWVudDo6YWRkSFRNTEFsaWdubWVudFRvU3R5bAogCiBib29sIEhUTUxF
bGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWxlbWVudDo6c3Vw
cG9ydHNGb2N1cygpIHx8IChpc0NvbnRlbnRFZGl0YWJsZSgpICYmIHBhcmVudE5vZGUoKSAmJiAh
cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICByZXR1cm4gRWxlbWVudDo6
c3VwcG9ydHNGb2N1cygpIHx8IChyZW5kZXJlcklzRWRpdGFibGUoKSAmJiBwYXJlbnROb2RlKCkg
JiYgIXBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpOwogfQogCi1TdHJpbmcgSFRN
TEVsZW1lbnQ6OmNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IAorYm9vbCBIVE1MRWxlbWVudDo6aXND
b250ZW50RWRpdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcklzRWRpdGFibGUo
KTsKK30KKworU3RyaW5nIEhUTUxFbGVtZW50Ojpjb250ZW50RWRpdGFibGUoKSBjb25zdAogewog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKGNvbnRlbnRl
ZGl0YWJsZUF0dHIpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lv
biA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNiArNTcsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNGb2N1cygpIGNvbnN0OwogCisgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Owor
CiAgICAgU3RyaW5nIGNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29udGVu
dEVkaXRhYmxlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3
ICszNTMsNyBAQCBEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25GCiB7CiAg
ICAgQVNTRVJUKGRyYWdEYXRhKTsKICAgICBEb2N1bWVudCogZG9jID0gbV9wYWdlLT5tYWluRnJh
bWUoKS0+ZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpKTsKLSAgICBp
ZiAoZG9jICYmIChtX2RpZEluaXRpYXRlRHJhZyB8fCBkb2MtPmlzUGx1Z2luRG9jdW1lbnQoKSB8
fCBkb2MtPmlzQ29udGVudEVkaXRhYmxlKCkpKQorICAgIGlmIChkb2MgJiYgKG1fZGlkSW5pdGlh
dGVEcmFnIHx8IGRvYy0+aXNQbHVnaW5Eb2N1bWVudCgpIHx8IGRvYy0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkpKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgcmV0dXJuIGRy
YWdPcGVyYXRpb24oZHJhZ0RhdGEpOwogfQpAQCAtNTExLDcgKzUxMSw3IEBAIGJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OmNhblByb2Nlc3NEcmFnKERyYWcKICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5z
RmlsZXMoKSAmJiBhc0ZpbGVJbnB1dChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9k
ZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKG1fZGlkSW5pdGlhdGVEcmFnICYmIG1fZG9jdW1lbnRVbmRlck1vdXNlID09IG1fZHJhZ0lu
aXRpYXRvciAmJiByZXN1bHQuaXNTZWxlY3RlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyMyw3ICs3MjMsNyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlCiAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gbmV3U2VsZWN0aW9uOwogICAgICAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgp
OwogICAgICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJl
dEJyb3dzaW5nRW5hYmxlZCgpOwotICAgICAgICBpZiAobm9kZSAmJiAoY2FyZXRCcm93c2luZyB8
fCBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSAmJiBub2RlLT5yZW5kZXJlcigpKSB7CisgICAg
ICAgIGlmIChub2RlICYmIChjYXJldEJyb3dzaW5nIHx8IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKSAmJiBub2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24g
cG9zID0gbm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChldmVudC5sb2NhbFBvaW50
KCkpOwogICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihwb3MpOwog
ICAgICAgICB9CkBAIC0xMTc1LDcgKzExNzUsNyBAQCBDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxl
Y3RDdXJzb3IoY29uc3QgCiAKICAgICBzd2l0Y2ggKHN0eWxlID8gc3R5bGUtPmN1cnNvcigpIDog
Q1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNPUl9BVVRPOiB7Ci0gICAgICAgIGJvb2wgZWRp
dGFibGUgPSAobm9kZSAmJiBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICAgICAgYm9v
bCBlZGl0YWJsZSA9IChub2RlICYmIG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKTsKICAgICAg
ICAgYm9vbCBlZGl0YWJsZUxpbmtFbmFibGVkID0gZmFsc2U7CiAKICAgICAgICAgLy8gSWYgdGhl
IGxpbmsgaXMgZWRpdGFibGUsIHRoZW4gd2UgbmVlZCB0byBjaGVjayB0aGUgc2V0dGluZ3MgdG8g
c2VlIHdoZXRoZXIgb3Igbm90IHRoZSBsaW5rIHNob3VsZCBiZSBmb2xsb3dlZApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMSw3ICszMDEsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1
CiBzdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoTm9kZSAqbm9kZSkKIHsKICAg
ICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpOwor
ICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CiAKICAgICBOb2RlKiByb290
ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUt
PmRvY3VtZW50KCktPmZyYW1lKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDcgKzUyNSw3IEBA
IGJvb2wgSGl0VGVzdFJlc3VsdDo6aXNDb250ZW50RWRpdGFibGUoKSAKICAgICBpZiAobV9pbm5l
ck5vblNoYXJlZE5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKS0+
aXNUZXh0RmllbGQoKTsKIAotICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aXNDb250
ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVy
SXNFZGl0YWJsZSgpOwogfQogCiBib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNl
ZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgaW50IHgsIGludCB5LCBjb25zdCBJbnRSZWN0JiByZWN0
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lv
biA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwNTMsNyArNDA1Myw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb25Gb3JQb2ludFIKICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCk7
CiAKICAgICAvLyBJZiB3ZSBjYW4ndCBmaW5kIGFuIGFuY2VzdG9yIHRvIGNoZWNrIGVkaXRhYmls
aXR5IG9uLCBvciBlZGl0YWJpbGl0eSBpcyB1bmNoYW5nZWQsIHdlIHJlY3VyIGxpa2Ugbm9ybWFs
Ci0gICAgaWYgKCFhbmNlc3RvciB8fCBhbmNlc3Rvci0+bm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpID09IGNoaWxkTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIWFuY2VzdG9y
IHx8IGFuY2VzdG9yLT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpID09IGNoaWxkTm9kZS0+
cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBjaGlsZC0+cG9zaXRpb25Gb3JQ
b2ludChwb2ludEluQ2hpbGRDb29yZGluYXRlcyk7CiAKICAgICAvLyBPdGhlcndpc2UgcmV0dXJu
IGJlZm9yZSBvciBhZnRlciB0aGUgY2hpbGQsIGRlcGVuZGluZyBvbiBpZiB0aGUgY2xpY2sgd2Fz
IHRvIHRoZSBsb2dpY2FsIGxlZnQgb3IgbG9naWNhbCByaWdodCBvZiB0aGUgY2hpbGQKQEAgLTUw
NzksNyArNTA3OSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc0xpbmVJZkVtcHR5KCkgY29uc3QK
ICAgICBpZiAoIW5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChu
b2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50
KCkgPT0gbm9kZSgpKQorICAgIGlmIChub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmIG5v
ZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IG5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCiAgICAgaWYgKG5vZGUoKS0+aXNTaGFkb3dSb290KCkgJiYgKG5vZGUoKS0+c2hh
ZG93SG9zdCgpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gODE3
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEyMiw3ICsyMTIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWRkT3ZlcmZsb3dGcm9tSW5saW5lQwogewogICAgIGludCBlbmRQYWRkaW5nID0gaGFzT3ZlcmZs
b3dDbGlwKCkgPyBwYWRkaW5nRW5kKCkgOiAwOwogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGZpbmQg
YW5vdGhlciB3YXkgdG8gZG8gdGhpcywgc2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93IHdoZW4g
d2UgZG9uJ3Qgd2FudCB0aGVtIHRvLgotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhZW5k
UGFkZGluZyAmJiBub2RlKCkgJiYgbm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUo
KSA9PSBub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFlbmRQYWRkaW5n
ICYmIG5vZGUoKSAmJiBub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmIG5vZGUoKSA9PSBu
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkpCiAgICAgICAgIGVuZFBhZGRpbmcgPSAxOwogICAgIGZvciAoUm9vdElubGluZUJv
eCogY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3go
KSkgewogICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhjdXJyLT5wYWRkZWRMYXlvdXRPdmVyZmxv
d1JlY3QoZW5kUGFkZGluZykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MSw3ICs2NDEsNyBAQCBib29sIFJlbmRlckJv
eDo6Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sCiAgICAgCiBib29sIFJlbmRlckJveDo6Y2FuQmVQ
cm9ncmFtYXRpY2FsbHlTY3JvbGxlZChib29sKSBjb25zdAogewotICAgIHJldHVybiAoaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IChub2RlKCkgJiYgbm9kZSgpLT5p
c0NvbnRlbnRFZGl0YWJsZSgpKSkpIHx8IChub2RlKCkgJiYgbm9kZSgpLT5pc0RvY3VtZW50Tm9k
ZSgpKTsKKyAgICByZXR1cm4gKGhhc092ZXJmbG93Q2xpcCgpICYmIChzY3JvbGxzT3ZlcmZsb3co
KSB8fCAobm9kZSgpICYmIG5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpKSkgfHwgKG5vZGUo
KSAmJiBub2RlKCktPmlzRG9jdW1lbnROb2RlKCkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YXV0
b3Njcm9sbCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0NSwxNCArMjY0NSwxNCBAQCBWaXNpYmxlUG9z
aXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiB7CiAgICAgLy8gSWYgdGhpcyBpcyBhIG5v
bi1hbm9ueW1vdXMgcmVuZGVyZXIgaW4gYW4gZWRpdGFibGUgYXJlYSwgdGhlbiBpdCdzIHNpbXBs
ZS4KICAgICBpZiAoTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKSkgewotICAgICAgICBpZiAoIW5v
ZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcklz
RWRpdGFibGUoKSkgewogICAgICAgICAgICAgLy8gSWYgaXQgY2FuIGJlIGZvdW5kLCB3ZSBwcmVm
ZXIgYSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHRoYXQgaXMgZWRpdGFibGUuIAogICAg
ICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24obm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgIFBv
c2l0aW9uIGNhbmRpZGF0ZSA9IHBvc2l0aW9uLmRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91
bmRhcnkpOwotICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9k
ZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOwogICAgICAgICAgICAgY2FuZGlkYXRlID0g
cG9zaXRpb24udXBzdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgICAgICAgICAg
aWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAg
ICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwg
YWZmaW5pdHkpOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5
IGVkaXRpbmcgcG9zaXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYyLDcgKzQ2Miw3IEBAIFJl
bmRlckJsb2NrKiBSb290SW5saW5lQm94OjpibG9jaygpIGNvbnMKIAogc3RhdGljIGJvb2wgaXNF
ZGl0YWJsZUxlYWYoSW5saW5lQm94KiBsZWFmKQogewotICAgIHJldHVybiBsZWFmICYmIGxlYWYt
PnJlbmRlcmVyKCkgJiYgbGVhZi0+cmVuZGVyZXIoKS0+bm9kZSgpICYmIGxlYWYtPnJlbmRlcmVy
KCktPm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbGVhZiAmJiBsZWFm
LT5yZW5kZXJlcigpICYmIGxlYWYtPnJlbmRlcmVyKCktPm5vZGUoKSAmJiBsZWFmLT5yZW5kZXJl
cigpLT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpOwogfQogCiBJbmxpbmVCb3gqIFJvb3RJ
bmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JMb2dpY2FsTGVmdFBvc2l0aW9uKGludCBsZWZ0
UG9zaXRpb24sIGJvb2wgb25seUVkaXRhYmxlTGVhdmVzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QUVsZW1lbnQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFNWR0FF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2CiAKIGJvb2wgU1ZHQUVsZW1lbnQ6OnN1cHBv
cnRzRm9jdXMoKSBjb25zdAogewotICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlm
IChyZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisy
MDExLTAzLTIyICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcmVuYW1lIE5vZGU6OmlzQ29udGVudEVk
aXRhYmxlIGFuZCBhbGwgY2FsbCBzaXRlcyB0byByZW5kZXJlcklzRWRpdGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MjkwCisKKyAgICAgICAg
VGhpcyBpcyBwYXJ0IG9mIHRoZSBlZmZvcnQgdG8gc2VwYXJhdGUgSlMgQVBJIEhUTUxFbGVtZW50
IGlzQ29udGVudEVkaXRhYmxlIGZyb20KKyAgICAgICAgaW50ZXJuYWwgTm9kZTo6cmVuZGVyZXJJ
c0VkaXRhYmxlLgorCisgICAgICAgICogc3JjL1dlYk5vZGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEZvY3VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmNvbmZpcm1Db21wb3NpdGlvbik6CisKIDIwMTEtMDMtMjMgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI4MTY4Ni4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
Yk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5v
ZGUuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
Yk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgYm9vbCBXZWJOb2Rl
Ojppc1RleHROb2RlKCkgY29uc3QKIAogYm9vbCBXZWJOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKIH0KIAogYm9vbCBXZWJO
b2RlOjppc0VsZW1lbnROb2RlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU1LDcgKzEy
NTUsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRGb2N1cyhib29sIGVuYWJsZSkKICAgICAgICAg
ICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZvY3VzZWRO
b2RlKTsKICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNUZXh0Rm9ybUNvbnRyb2woKSkK
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+dXBkYXRlRm9jdXNBcHBlYXJhbmNlKHRydWUp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvY3VzZWROb2RlLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9jdXNlZE5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUZvY3VzQXBwZWFyYW5j
ZSgpIHNlbGVjdHMgYWxsIHRoZSB0ZXh0IG9mCiAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRl
bnRzZWRpdGFibGUgRElWcy4gU28gd2Ugc2V0IHRoZSBzZWxlY3Rpb24gZXhwbGljaXRseQogICAg
ICAgICAgICAgICAgICAgICAvLyBpbnN0ZWFkLiBOb3RlIHRoYXQgdGhpcyBoYXMgdGhlIHNpZGUg
ZWZmZWN0IG9mIG1vdmluZyB0aGUKQEAgLTEzMTcsNyArMTMxNyw3IEBAIGJvb2wgV2ViVmlld0lt
cGw6OnNldENvbXBvc2l0aW9uKAogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9y
LT5jb21wb3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIGNvbnN0IE5v
ZGUqIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICAgICAgaWYgKCFub2RlIHx8
ICFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApAQCAtMTM2Niw3ICsxMzY2LDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6Y29uZmlybUNvbXBvc2l0
aW9uKGNvbgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlv
blJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBy
YW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9o
YWlrdS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYktpdC9oYWlrdS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMy0yMiAgQ2hh
bmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIHJlbmFtZSBOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSBhbmQgYWxs
IGNhbGwgc2l0ZXMgdG8gcmVuZGVyZXJJc0VkaXRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDI5MAorCisgICAgICAgIFRoaXMgaXMgcGFydCBv
ZiB0aGUgZWZmb3J0IHRvIHNlcGFyYXRlIEpTIEFQSSBIVE1MRWxlbWVudCBpc0NvbnRlbnRFZGl0
YWJsZSBmcm9tCisgICAgICAgIGludGVybmFsIE5vZGU6OnJlbmRlcmVySXNFZGl0YWJsZS4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKwogMjAx
MS0wMy0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
aGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuY3BwCShyZXZpc2lvbiA4MTc2
OCkKKysrIFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFp
a3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBFZGl0b3JDbGll
bnRIYWlrdTo6aGFuZGxlS2V5Ym9hcmRFdgogICAgIGlmICghc3RhcnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChzdGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAgIGlmIChzdGFy
dC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpIHsKICAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRv
d3NWaXJ0dWFsS2V5Q29kZSgpKSB7CiAgICAgICAgIGNhc2UgVktfQkFDSzoKICAgICAgICAgICAg
IGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERpcmVjdGlvbihEaXJlY3Rpb25CYWNrd2FyZCwK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMjIgIENo
YW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICByZW5hbWUgTm9kZTo6aXNDb250ZW50RWRpdGFibGUgYW5kIGFs
bCBjYWxsIHNpdGVzIHRvIHJlbmRlcmVySXNFZGl0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQyOTAKKworICAgICAgICBUaGlzIGlzIHBhcnQg
b2YgdGhlIGVmZm9ydCB0byBzZXBhcmF0ZSBKUyBBUEkgSFRNTEVsZW1lbnQgaXNDb250ZW50RWRp
dGFibGUgZnJvbQorICAgICAgICBpbnRlcm5hbCBOb2RlOjpyZW5kZXJlcklzRWRpdGFibGUuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisKIDIwMTEtMDMt
MjMgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5
Ym9hcmRFdmVudAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogcmVmYWN0b3IgYWxs
IG9mIHRoaXMgdG8gdXNlIEFjdGlvbnMgb3Igc29tZXRoaW5nIGxpa2UgdGhlbQotICAgIGlmIChz
dGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAgIGlmIChzdGFydC0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkpIHsKICAgICAgICAgYm9vbCBkb1NwYXRpYWxOYXZpZ2F0aW9uID0gZmFsc2U7CiAg
ICAgICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChmcmFtZSkpIHsKICAgICAgICAg
ICAgIGlmICgha2V2ZW50LT5tb2RpZmllcnMoKSkgewo=
</data>
<flag name="review"
          id="79096"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="79282"
          type_id="3"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86931</attachid>
            <date>2011-03-25 06:37:25 -0700</date>
            <delta_ts>2011-03-25 09:21:51 -0700</delta_ts>
            <desc>fix wording</desc>
            <filename>54290_3.patch</filename>
            <type>text/plain</type>
            <size>70931</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU4IEBACisyMDExLTAzLTIyICBDaGFuZyBT
aHUgIDxjc2h1QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdh
LgorCisgICAgICAgIHJlbmFtZSBOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSBhbmQgYWxsIGNhbGwg
c2l0ZXMgdG8gcmVuZGVyZXJJc0VkaXRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDI5MAorCisgICAgICAgIFRoaXMgaXMgcGFydCBvZiB0aGUg
ZWZmb3J0IHRvIHNlcGFyYXRlIEpTIEFQSSBIVE1MRWxlbWVudCBpc0NvbnRlbnRFZGl0YWJsZSBm
cm9tCisgICAgICAgIGludGVybmFsIE5vZGU6OnJlbmRlcmVySXNFZGl0YWJsZS4KKworICAgICAg
ICBDb2RlIHJlZmFjdG9yaW5nLiBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWNjZXB0c0VkaXRpbmdG
b2N1cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
cmVuZGVyZXJJc0VkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNob3VsZFVzZUlu
cHV0TWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNhblN0YXJ0U2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW5kZXJlcklzRWRpdGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6cmVuZGVyZXJJc1JpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKiBkb20v
UG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dFJlbmRlcmVkRWRpdGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNSZW5kZXJlZEVkaXRhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjphdEVkaXRpbmdCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6cGFyZW50RWRpdGluZ0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0
aW9uOjp1cHN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aXNDYW5kaWRhdGUpOgorICAgICAgICAqIGRv
bS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0
b3I6OmlzQ2FuZGlkYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZE5vZGVDb21tYW5kOjpBcHBlbmROb2RlQ29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBlbmROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5z
Tm9uRWRpdGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0
eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCk6Cisg
ICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0pOgorICAg
ICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppc0RlbGV0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nRGVs
ZXRhYmxlRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRv
QXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6ZG9V
bmFwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
YW5EZWxldGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmVydGljYWxTY3JvbGxEaXN0YW5jZSk6Cisg
ICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKToKKyAgICAgICAgKiBlZGl0aW5nL0luZGVu
dE91dGRlbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRDb21t
YW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydEludG9UZXh0
Tm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6Okluc2Vy
dE5vZGVCZWZvcmVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZvcmVD
b21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZvcmVDb21t
YW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Sm9pblRleHROb2Rlc0NvbW1hbmQ6OmRvQXBwbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Sm9pblRleHROb2Rlc0NvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9BcHBseSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9VbmFwcGx5KToK
KyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbW92ZU5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92
ZU5vZGVDb21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6
UmVwbGFjZW1lbnRGcmFnbWVudCk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEZy
YW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKiBlZGl0
aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRFbGVt
ZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVu
dENvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1JlYXBwbHkpOgorICAg
ICAgICAqIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5k
Ojpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmNhbm9uaWNhbFBvc2l0aW9uKToKKyAgICAg
ICAgKiBlZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OmRvVW5hcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OmRvUmVhcHBs
eSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpoaWdoZXN0RWRpdGFibGVSb290KToKKyAgICAgICAgKFdlYkNvcmU6Omxvd2VzdEVkaXRhYmxl
QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6aXNFZGl0YWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzUmljaGx5RWRpdGFibGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KToKKyAgICAgICAgKFdl
YkNvcmU6OmV4dGVuZFJhbmdlVG9XcmFwcGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmVu
Y2xvc2luZ05vZGVXaXRoVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVPZlR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6aGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuTWVyZ2VMaXN0cyk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxl
X3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGVhZldpdGhTYW1lRWRpdGFi
aWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaW5lUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6bmV4dExlYWZXaXRoU2FtZUVkaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZlBhcmFncmFw
aCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgICogaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVu
dDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVu
dDo6c2V0QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpjYW5T
dGFydFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6dHJl
YXRMaW5rQXNMaXZlRm9yRXZlbnRUeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMp
OgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6
OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojpjb250
ZW50RWRpdGFibGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAgICAgICAgKiBw
YWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
OjpvcGVyYXRpb25Gb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpj
YW5Qcm9jZXNzRHJhZyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6CisgICAgICAgICogcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVsaW5xdWlzaGVzRWRp
dGluZ0ZvY3VzKToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9u
Rm9yUG9pbnRSZXNwZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6Omhhc0xpbmVJZkVtcHR5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRP
dmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5
U2Nyb2xsZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpYmxlUG9zaXRpb24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWRp
dGFibGVMZWFmKToKKyAgICAgICAgKiBzdmcvU1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorCiAyMDExLTAzLTIzICBZdXJ5IFNl
bWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBh
dmVsIEZlbGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDgxNzY4KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYxLDEwICs2NjEsMTAgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRPbgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIAogICAgICAgICBIVE1MRWxlbWVudCogYm9keSA9IGRvY3VtZW50LT5ib2R5KCk7Ci0gICAg
ICAgIGlmIChib2R5ICYmIGJvZHktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChi
b2R5ICYmIGJvZHktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIHJldHVybiAhZG9jdW1lbnQtPmlzQ29udGVudEVkaXRhYmxlKCk7Cisg
ICAgICAgIHJldHVybiAhZG9jdW1lbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpOwogICAgIH0KIAog
ICAgIGlmIChtX3JlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKQEAgLTY3NSw3ICs2NzUs
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUmVhZE9uCiAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KGJveC0+bm9kZSgpKS0+
cmVhZE9ubHkoKTsKICAgICB9CiAKLSAgICByZXR1cm4gIW1fcmVuZGVyZXItPm5vZGUoKSB8fCAh
bV9yZW5kZXJlci0+bm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiAhbV9y
ZW5kZXJlci0+bm9kZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJs
ZSgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyZWVuKCkg
Y29uc3QKQEAgLTE4MjksNyArMTgyOSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6YWNjZXNzaWIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIEFueXRoaW5n
IHRoYXQgaXMgY29udGVudCBlZGl0YWJsZSBzaG91bGQgbm90IGJlIGlnbm9yZWQuCi0gICAgLy8g
SG93ZXZlciwgb25lIGNhbm5vdCBqdXN0IGNhbGwgbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSBz
aW5jZSB0aGF0IHdpbGwgYXNrIGlmIGl0cyBwYXJlbnRzCisgICAgLy8gSG93ZXZlciwgb25lIGNh
bm5vdCBqdXN0IGNhbGwgbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgc2luY2UgdGhhdCB3aWxs
IGFzayBpZiBpdHMgcGFyZW50cwogICAgIC8vIGFyZSBhbHNvIGVkaXRhYmxlLiBPbmx5IHRoZSB0
b3AgbGV2ZWwgY29udGVudCBlZGl0YWJsZSByZWdpb24gc2hvdWxkIGJlIGV4cG9zZWQuCiAgICAg
aWYgKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIHN0YXRpYyBXaWRnZXQqIHdp
ZGdldEZvck5vZGUoTm9kZSogZm9jdXMKIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0aW5nRm9jdXMo
Tm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlzQ29u
dGVudEVkaXRhYmxlKCkpOworICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7
CiAKICAgICBOb2RlKiByb290ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEZy
YW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzExLDcgKzcxMSw3IEBAIHZvaWQgTm9kZTo6ZGVwcmVjYXRlZFBhcnNl
ckFkZENoaWxkKFBhc3MKIHsKIH0KIAotYm9vbCBOb2RlOjppc0NvbnRlbnRFZGl0YWJsZShFZGl0
YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwpIGNvbnN0Citib29sIE5vZGU6OnJlbmRlcmVySXNFZGl0
YWJsZShFZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGRvY3Vt
ZW50KCktPmluRGVzaWduTW9kZSgpIHx8IChkb2N1bWVudCgpLT5mcmFtZSgpICYmIGRvY3VtZW50
KCktPmZyYW1lKCktPnBhZ2UoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCktPmlzRWRp
dGFibGUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzQwLDcgKzc0MCw3IEBAIGJvb2wg
Tm9kZTo6aXNDb250ZW50RWRpdGFibGUoRWRpdGFibGVMZXYKIAogYm9vbCBOb2RlOjpzaG91bGRV
c2VJbnB1dE1ldGhvZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCk7
CisgICAgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZSgpOwogfQogCiBSZW5kZXJCb3gqIE5vZGU6
OnJlbmRlckJveCgpIGNvbnN0CkBAIC0xNTE0LDcgKzE1MTQsNyBAQCBpbnQgTm9kZTo6bWF4Q2hh
cmFjdGVyT2Zmc2V0KCkgY29uc3QKIC8vIGlzIG9idmlvdXNseSBtaXNwbGFjZWQuCiBib29sIE5v
ZGU6OmNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFi
bGUoKSkKKyAgICBpZiAocmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgaWYgKHJlbmRlcmVyKCkpIHsKQEAgLTE1OTIsNyArMTU5Miw3IEBAIEVsZW1lbnQg
Kk5vZGU6OmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQKIEVsZW1lbnQqIE5vZGU6OnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHJlc3VsdCA9IDA7Ci0gICAgZm9y
IChOb2RlKiBuID0gY29uc3RfY2FzdDxOb2RlKj4odGhpcyk7IG4gJiYgbi0+aXNDb250ZW50RWRp
dGFibGUoKTsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IGNvbnN0
X2Nhc3Q8Tm9kZSo+KHRoaXMpOyBuICYmIG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpOyBuID0gbi0+
cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAg
ICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAgICAgICAgIGlmIChuLT5o
YXNUYWdOYW1lKGJvZHlUYWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA4MTc2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw4ICszMjcs
MTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJv
YXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNv
bnN0OwogCi0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzQ29u
dGVudEVkaXRhYmxlKEVkaXRhYmxlKTsgfQotICAgIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFi
bGUoKSBjb25zdCB7IHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZShSaWNobHlFZGl0YWJsZSk7IH0K
KyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gT2JqZWN0aXZlLUMgZXh0ZW5zaW9ucworICAgIGJv
b2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcklzRWRpdGFibGUo
RWRpdGFibGUpOyB9CisjZW5kaWYKKyAgICBib29sIHJlbmRlcmVySXNFZGl0YWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZShFZGl0YWJsZSk7IH0KKyAgICBib29sIHJlbmRl
cmVySXNSaWNobHlFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZShS
aWNobHlFZGl0YWJsZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2Qo
KSBjb25zdDsKICAgICB2aXJ0dWFsIEludFJlY3QgZ2V0UmVjdCgpIGNvbnN0OwogICAgIEludFJl
Y3QgcmVuZGVyUmVjdChib29sKiBpc1JlcGxhY2VkKTsKQEAgLTY2MCw3ICs2NjQsNyBAQCBwcml2
YXRlOgogI2VuZGlmCiAKICAgICBlbnVtIEVkaXRhYmxlTGV2ZWwgeyBFZGl0YWJsZSwgUmljaGx5
RWRpdGFibGUgfTsKLSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKEVkaXRhYmxlTGV2ZWwpIGNv
bnN0OworICAgIGJvb2wgcmVuZGVyZXJJc0VkaXRhYmxlKEVkaXRhYmxlTGV2ZWwpIGNvbnN0Owog
CiAgICAgdm9pZCBzZXRTdHlsZUNoYW5nZShTdHlsZUNoYW5nZVR5cGUpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIE5vZGUqIG5leHRSZW5kZXJlZEVkaXRhYmxlKE5vZGUq
IG5vZGUpCiB7CiAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+bmV4dExlYWZOb2RlKCkpKSB7Ci0g
ICAgICAgIGlmICghbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFub2Rl
LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFy
ZW5kZXJlcikKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIE5vZGUqIG5leHRSZW5kZXJlZEVkaXRh
YmxlKE5vZGUqIAogc3RhdGljIE5vZGUqIHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShOb2RlKiBu
b2RlKQogewogICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnByZXZpb3VzTGVhZk5vZGUoKSkpIHsK
LSAgICAgICAgaWYgKCFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW5v
ZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAo
IXJlbmRlcmVyKQpAQCAtMzQ1LDE1ICszNDUsMTUgQEAgYm9vbCBQb3NpdGlvbjo6YXRMYXN0RWRp
dGluZ1Bvc2l0aW9uRm9yTgogYm9vbCBQb3NpdGlvbjo6YXRFZGl0aW5nQm91bmRhcnkoKSBjb25z
dAogewogICAgIFBvc2l0aW9uIG5leHRQb3NpdGlvbiA9IGRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0
aW5nQm91bmRhcnkpOwotICAgIGlmIChhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYm
IG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhbmV4dFBvc2l0aW9uLmRlcHJlY2F0ZWROb2Rl
KCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0UG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAKICAgICBQb3NpdGlvbiBwcmV2UG9zaXRpb24gPSB1cHN0cmVhbShDYW5Dcm9z
c0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgaWYgKGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUo
KSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChhdExhc3RFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRpb24u
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAKLSAgICByZXR1cm4gbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFu
ZXh0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKQotICAgICAg
ICAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiBuZXh0UG9zaXRpb24uaXNO
b3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRp
dGFibGUoKQorICAgICAgICAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKIH0KIAogTm9kZSog
UG9zaXRpb246OnBhcmVudEVkaXRpbmdCb3VuZGFyeSgpIGNvbnN0CkBAIC0zNjYsNyArMzY2LDcg
QEAgTm9kZSogUG9zaXRpb246OnBhcmVudEVkaXRpbmdCb3VuZGFyeSgpIAogICAgICAgICByZXR1
cm4gMDsKIAogICAgIE5vZGUqIGJvdW5kYXJ5ID0gbV9hbmNob3JOb2RlLmdldCgpOwotICAgIHdo
aWxlIChib3VuZGFyeSAhPSBkb2N1bWVudEVsZW1lbnQgJiYgYm91bmRhcnktPnBhcmVudE5vZGUo
KSAmJiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgPT0gYm91bmRhcnktPnBhcmVu
dE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICB3aGlsZSAoYm91bmRhcnkgIT0gZG9j
dW1lbnRFbGVtZW50ICYmIGJvdW5kYXJ5LT5wYXJlbnROb2RlKCkgJiYgbV9hbmNob3JOb2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSA9PSBib3VuZGFyeS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklz
RWRpdGFibGUoKSkKICAgICAgICAgYm91bmRhcnkgPSBib3VuZGFyeS0+cGFyZW50Tm9kZSgpOwog
ICAgIAogICAgIHJldHVybiBib3VuZGFyeTsKQEAgLTUyNSwxNyArNTI1LDE3IEBAIFBvc2l0aW9u
IFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAvLyBGSVhNRTogUG9zaXRpb25J
dGVyYXRvciBzaG91bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KICAgICBQ
b3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNB
ZnRlckFuY2hvciA/IFBvc2l0aW9uKG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNo
b3JOb2RlLmdldCgpKSkgOiAqdGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3Mg
PSBsYXN0VmlzaWJsZTsKLSAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmlzQ29u
dGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBi
b29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwogICAgIGZvciAoOyAhY3VycmVudFBvcy5hdFN0
YXJ0KCk7IGN1cnJlbnRQb3MuZGVjcmVtZW50KCkpIHsKICAgICAgICAgTm9kZSogY3VycmVudE5v
ZGUgPSBjdXJyZW50UG9zLm5vZGUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGNoZWNr
IGZvciBhbiBlZGl0YWJpbGl0eSBjaGFuZ2UgaWYgd2UgaGF2ZW4ndCBtb3ZlZCB0byBhIGRpZmZl
cmVudCBub2RlLAotICAgICAgICAvLyB0byBhdm9pZCB0aGUgZXhwZW5zZSBvZiBjb21wdXRpbmcg
aXNDb250ZW50RWRpdGFibGUoKS4KKyAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2Yg
Y29tcHV0aW5nIHJlbmRlcmVySXNFZGl0YWJsZSgpLgogICAgICAgICBpZiAoY3VycmVudE5vZGUg
IT0gbGFzdE5vZGUpIHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4K
LSAgICAgICAgICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCk7CisgICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJlbnRO
b2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICAgICAgICAgIGlmIChzdGFydEVkaXRhYmxl
ICE9IGN1cnJlbnRFZGl0YWJsZSkgewogICAgICAgICAgICAgICAgIGlmIChydWxlID09IENhbm5v
dENyb3NzRWRpdGluZ0JvdW5kYXJ5KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTY0
NywxNyArNjQ3LDE3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKEVkaXRpbmdCb3UK
ICAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91bGQgcmVzcGVjdCBCZWZvcmUgYW5k
IEFmdGVyIHBvc2l0aW9ucy4KICAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9h
bmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IFBvc2l0aW9uKG1fYW5jaG9yTm9k
ZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKICAgICBQb3Np
dGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKLSAgICBib29sIHN0YXJ0RWRp
dGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBzdGFydEVk
aXRhYmxlID0gc3RhcnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICBOb2RlKiBsYXN0
Tm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwogICAg
IGZvciAoOyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zLmluY3JlbWVudCgpKSB7ICAg
CiAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gY3VycmVudFBvcy5ub2RlKCk7CiAgICAgICAg
IAogICAgICAgICAvLyBEb24ndCBjaGVjayBmb3IgYW4gZWRpdGFiaWxpdHkgY2hhbmdlIGlmIHdl
IGhhdmVuJ3QgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbm9kZSwKLSAgICAgICAgLy8gdG8gYXZvaWQg
dGhlIGV4cGVuc2Ugb2YgY29tcHV0aW5nIGlzQ29udGVudEVkaXRhYmxlKCkuCisgICAgICAgIC8v
IHRvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyByZW5kZXJlcklzRWRpdGFibGUoKS4K
ICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBE
b24ndCBjaGFuZ2UgZWRpdGFiaWxpdHkuCi0gICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJs
ZSA9IGN1cnJlbnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgICAgICAgICAgYm9vbCBj
dXJyZW50RWRpdGFibGUgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CiAgICAg
ICAgICAgICBpZiAoc3RhcnRFZGl0YWJsZSAhPSBjdXJyZW50RWRpdGFibGUpIHsKICAgICAgICAg
ICAgICAgICBpZiAocnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC03OTksMTAgKzc5OSwxMCBAQCBib29sIFBvc2l0aW9uOjpp
c0NhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIGlmICh0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+
aGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CiAgICAgICAg
ICAgICBpZiAoIVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0
aEhlaWdodChyZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXBy
ZWNhdGVkTm9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVk
Tm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYW5j
aG9yTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2Vs
ZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9k
ZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICByZXR1cm4gbV9hbmNob3JOb2Rl
LT5yZW5kZXJlcklzRWRpdGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25l
KGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CiAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShy
ZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIGJvb2wgUG9zaXRpb25JdGVyYXRv
cjo6aXNDYW5kaWRhdGUoKSBjb24KICAgICAgICAgaWYgKHRvUmVuZGVyQmxvY2socmVuZGVyZXIp
LT5oZWlnaHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKICAgICAg
ICAgICAgIGlmICghUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNX
aXRoSGVpZ2h0KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdGFydE9mTm9k
ZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKTsKLSAg
ICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBv
c2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX2FuY2hvck5vZGUpICYmIFBvc2l0aW9uKCp0
aGlzKS5hdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9k
ZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9u
ZShtX2FuY2hvck5vZGUpICYmIFBvc2l0aW9uKCp0aGlzKS5hdEVkaXRpbmdCb3VuZGFyeSgpOwog
ICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5v
ZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVu
ZE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBBcHBlbmROb2RlQ29tbWFuZDo6QXBwZW5kTm9kZUNvbW1hbmQoUGFzCiAgICAgQVNTRVJUKG1f
bm9kZSk7CiAgICAgQVNTRVJUKCFtX25vZGUtPnBhcmVudE5vZGUoKSk7CiAKLSAgICBBU1NFUlQo
bV9wYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIW1fcGFyZW50LT5hdHRhY2hlZCgpKTsK
KyAgICBBU1NFUlQobV9wYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFtX3BhcmVudC0+
YXR0YWNoZWQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbmRBWFRleHRDaGFuZ2VkSWdub3JpbmdM
aW5lQnJlYWtzKE5vZGUqIG5vZGUsIEFYT2JqZWN0Q2FjaGU6OkFYVGV4dENoYW5nZSB0ZXh0Q2hh
bmdlKQpAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBzZW5kQVhUZXh0Q2hhbmdlZElnbm9y
aW5nTGluCiAKIHZvaWQgQXBwZW5kTm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICgh
bV9wYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgbV9wYXJlbnQtPmF0dGFjaGVkKCkpCisg
ICAgaWYgKCFtX3BhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgbV9wYXJlbnQtPmF0dGFj
aGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsK
QEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZv
aWQgQXBwZW5kTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX3BhcmVudC0+
aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fcGFyZW50LT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBOZWVkIHRvIG5vdGlmeSB0
aGlzIGJlZm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgdGV4dApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMTcsMTIgKzEwMTcsMTIgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFu
Z2VBbmRBcHBseQogCiBzdGF0aWMgYm9vbCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKE5vZGUq
IG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICgh
bm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
Tm9kZSogc2libGluZyA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKICAgICBmb3IgKE5v
ZGUqIGRlc2NlbmRlbnQgPSBub2RlLT5maXJzdENoaWxkKCk7IGRlc2NlbmRlbnQgJiYgZGVzY2Vu
ZGVudCAhPSBzaWJsaW5nOyBkZXNjZW5kZW50ID0gZGVzY2VuZGVudC0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7Ci0gICAgICAgIGlmICghZGVzY2VuZGVudC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAg
ICAgICAgaWYgKCFkZXNjZW5kZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTAzNywxMCArMTAzNywxMCBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbmV4
dDsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gbmV4dC5nZXQoKSkgewogICAg
ICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogCi0gICAgICAgIGlmICghbm9k
ZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYg
KCFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLT5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSgpICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAo
IW5vZGUtPnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZSgpICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHBsYWludGV4dC1vbmx5IHJlZ2lvbi4gT25s
eSBwcm9jZWVkIGlmIGl0J3MgZnVsbHkgc2VsZWN0ZWQuCiAgICAgICAgICAgICAvLyBwYXN0RW5k
Tm9kZSBpcyB0aGUgbm9kZSBhZnRlciB0aGUgbGFzdCBmdWxseSBzZWxlY3RlZCBub2RlLCBzbyBp
ZiBpdCdzIGluc2lkZSBub2RlIHRoZW4KICAgICAgICAgICAgIC8vIG5vZGUgaXNuJ3QgZnVsbHkg
c2VsZWN0ZWQuCkBAIC0xMDU5LDcgKzEwNTksNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAg
IGlmIChub2RlLT5jaGlsZE5vZGVDb3VudCgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y29u
dGFpbnMocGFzdEVuZE5vZGUpIHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24obm9kZSkgfHwg
IW5vZGUtPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgIGlm
IChub2RlLT5jb250YWlucyhwYXN0RW5kTm9kZSkgfHwgY29udGFpbnNOb25FZGl0YWJsZVJlZ2lv
bihub2RlKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0Nv
bnRlbnQobm9kZSkpIHsKICAgICAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0
U2libGluZygpOwpAQCAtMTEzNCw3ICsxMTM0LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6
cmVtb3ZlSW5saW5lU3R5bAogewogICAgIEFTU0VSVChlbGVtZW50KTsKIAotICAgIGlmICghZWxl
bWVudC0+cGFyZW50Tm9kZSgpIHx8ICFlbGVtZW50LT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgaWYgKCFlbGVtZW50LT5wYXJlbnROb2RlKCkgfHwgIWVsZW1lbnQtPnBh
cmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92ZShlbGVtZW50LmdldCgpKSkg
ewpAQCAtMTY1MSwxMyArMTY1MSwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzdXJyb3Vu
ZE5vZGVSYW5nCiAKICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcgPSBlbGVtZW50LT5uZXh0
U2libGluZygpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBlbGVtZW50LT5w
cmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxpbmctPmlz
RWxlbWVudE5vZGUoKSAmJiBuZXh0U2libGluZy0+aXNDb250ZW50RWRpdGFibGUoKQorICAgIGlm
IChuZXh0U2libGluZyAmJiBuZXh0U2libGluZy0+aXNFbGVtZW50Tm9kZSgpICYmIG5leHRTaWJs
aW5nLT5yZW5kZXJlcklzRWRpdGFibGUoKQogICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50
cyhlbGVtZW50LmdldCgpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obmV4dFNpYmxpbmcuZ2V0KCkp
KSkKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obmV4dFNpYmxpbmcuZ2V0KCkpKTsKIAotICAgIGlmIChwcmV2aW91c1Np
YmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkgJiYgcHJldmlvdXNTaWJs
aW5nLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBw
cmV2aW91c1NpYmxpbmctPmlzRWxlbWVudE5vZGUoKSAmJiBwcmV2aW91c1NpYmxpbmctPnJlbmRl
cmVySXNFZGl0YWJsZSgpKSB7CiAgICAgICAgIE5vZGUqIG1lcmdlZEVsZW1lbnQgPSBwcmV2aW91
c1NpYmxpbmctPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChtZXJnZWRFbGVtZW50LT5pc0Vs
ZW1lbnROb2RlKCkgJiYgbWVyZ2VkRWxlbWVudC0+aXNDb250ZW50RWRpdGFibGUoKQorICAgICAg
ICBpZiAobWVyZ2VkRWxlbWVudC0+aXNFbGVtZW50Tm9kZSgpICYmIG1lcmdlZEVsZW1lbnQtPnJl
bmRlcmVySXNFZGl0YWJsZSgpCiAgICAgICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhz
dGF0aWNfY2FzdDxFbGVtZW50Kj4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSwgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG1lcmdlZEVsZW1lbnQpKSkKICAgICAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxl
bWVudHMoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHByZXZpb3VzU2libGluZy5nZXQoKSksIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihtZXJnZWRFbGVtZW50KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDgx
NzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNDgsNyArMTA0OCw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICAvLyBGSVhNRTogQ2FuJ3Qgd2UgZG8gc29tZXRoaW5n
IGJldHRlciB3aGVuIHRoZSBpbW1lZGlhdGUgcGFyZW50IHdhc24ndCBhIGxpc3Qgbm9kZT8KICAg
ICBpZiAoIWxpc3ROb2RlCiAgICAgICAgIHx8ICghbGlzdE5vZGUtPmhhc1RhZ05hbWUodWxUYWcp
ICYmICFsaXN0Tm9kZS0+aGFzVGFnTmFtZShvbFRhZykpCi0gICAgICAgIHx8ICFsaXN0Tm9kZS0+
aXNDb250ZW50RWRpdGFibGUoKQorICAgICAgICB8fCAhbGlzdE5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpCiAgICAgICAgIHx8IGxpc3ROb2RlID09IGVtcHR5TGlzdEl0ZW0tPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgx
NzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBEZWxldGVCdXR0b25Db250cm9sbGVy
OjpEZWxldGVCdXR0b25Db250CiAKIHN0YXRpYyBib29sIGlzRGVsZXRhYmxlRWxlbWVudChjb25z
dCBOb2RlKiBub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgp
IHx8ICFub2RlLT5pbkRvY3VtZW50KCkgfHwgIW5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisg
ICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmluRG9jdW1l
bnQoKSB8fCAhbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIEluIGdlbmVyYWwgd2Ugd2FudCB0byBvbmx5IGRyYXcgdGhlIFVJIGFyb3Vu
ZCBvYmplY3Qgb2YgYSBjZXJ0YWluIGFyZWEsIGJ1dCB3ZSBzdGlsbCBrZWVwIHRoZSBtaW4gd2lk
dGgvaGVpZ2h0IHRvCkBAIC0xNTYsNyArMTU2LDcgQEAgc3RhdGljIEhUTUxFbGVtZW50KiBlbmNs
b3NpbmdEZWxldGFibGVFbAogCiAgICAgLy8gVGhlIGVuY2xvc2luZ05vZGVPZlR5cGUgZnVuY3Rp
b24gb25seSB3b3JrcyBvbiBub2RlcyB0aGF0IGFyZSBlZGl0YWJsZQogICAgIC8vICh3aGljaCBp
cyBzdHJhbmdlLCBnaXZlbiBpdHMgbmFtZSkuCi0gICAgaWYgKCFjb250YWluZXItPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgaWYgKCFjb250YWluZXItPnJlbmRlcmVySXNFZGl0YWJsZSgpKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIE5vZGUqIGVsZW1lbnQgPSBlbmNsb3NpbmdOb2RlT2ZU
eXBlKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29udGFpbmVyKSwgJmlzRGVsZXRhYmxlRWxlbWVudCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsNyBAQCB2b2lkIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoCiB7CiAgICAg
QVNTRVJUKG1fbm9kZSk7CiAKLSAgICBpZiAoIW1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICBpZiAoIW1fbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIERlbGV0
ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBsCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7CiAK
LSAgICBpZiAoIW1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fbm9kZS0+
cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDIsNyArMzQyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKAog
ICAgICAgICAKICAgICBpZiAobV9zdGFydFJvb3QgIT0gbV9lbmRSb290ICYmICEobm9kZS0+aXNE
ZXNjZW5kYW50T2YobV9zdGFydFJvb3QuZ2V0KCkpICYmIG5vZGUtPmlzRGVzY2VuZGFudE9mKG1f
ZW5kUm9vdC5nZXQoKSkpKSB7CiAgICAgICAgIC8vIElmIGEgbm9kZSBpcyBub3QgaW4gYm90aCB0
aGUgc3RhcnQgYW5kIGVuZCBlZGl0YWJsZSByb290cywgcmVtb3ZlIGl0IG9ubHkgaWYgaXRzIGlu
c2lkZSBhbiBlZGl0YWJsZSByZWdpb24uCi0gICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9kZSgp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9kZSgp
LT5yZW5kZXJlcklzRWRpdGFibGUoKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIG5v
bi1lZGl0YWJsZSBhdG9taWMgbm9kZXMuCiAgICAgICAgICAgICBpZiAoIW5vZGUtPmZpcnN0Q2hp
bGQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIGJvb2wgRWRpdG9yOjpjYW5E
ZWxldGVSYW5nZShSYW5nZSogcmFuZ2UKICAgICBpZiAoIXN0YXJ0Q29udGFpbmVyIHx8ICFlbmRD
b250YWluZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXN0YXJ0Q29u
dGFpbmVyLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFlbmRDb250YWluZXItPmlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgaWYgKCFzdGFydENvbnRhaW5lci0+cmVuZGVyZXJJc0VkaXRhYmxlKCkg
fHwgIWVuZENvbnRhaW5lci0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBpZiAocmFuZ2UtPmNvbGxhcHNlZChlYykpIHsKQEAgLTIxNjIsNyAr
MjE2Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWEKICAgICAK
ICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgYmFpbC4KICAgICBOb2Rl
KiBlZGl0YWJsZU5vZGUgPSBzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAo
IWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAg
IGlmICghZWRpdGFibGVOb2RlIHx8ICFlZGl0YWJsZU5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
ZWRpdGFibGVOb2RlKSkKQEAgLTIyMzMsNyArMjIzMyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3IKIAogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhbiBlZGl0YWJs
ZSBub2RlLCBiYWlsLgogICAgIE5vZGUqIGVkaXRhYmxlTm9kZSA9IHNwZWxsaW5nUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+
aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVO
b2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFp
c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGVkaXRhYmxlTm9kZSkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0
LDcgKzI1NCw3IEBAIHN0YXRpYyBpbnQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFtZSoKICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICBpZiAoIXN0eWxl
KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIShzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ND
Uk9MTCB8fCBzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT0FVVE8gfHwgZm9jdXNlZE5vZGUtPmlzQ29u
dGVudEVkaXRhYmxlKCkpKQorICAgIGlmICghKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xM
IHx8IHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPQVVUTyB8fCBmb2N1c2VkTm9kZS0+cmVuZGVyZXJJ
c0VkaXRhYmxlKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgaGVpZ2h0ID0gc3RkOjpt
aW48aW50Pih0b1JlbmRlckJveChyZW5kZXJlciktPmNsaWVudEhlaWdodCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShy
ZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDE0ICsxNDksMTQgQEAgTm9kZSogZW5jbG9z
aW5nQmxvY2tUb1NwbGl0VHJlZVRvKE5vZGUqIAogewogICAgIE5vZGUqIGxhc3RCbG9jayA9IHN0
YXJ0Tm9kZTsKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydE5vZGU7IG47IG4gPSBuLT5wYXJlbnRO
b2RlKCkpIHsKLSAgICAgICAgaWYgKCFuLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBp
ZiAoIW4tPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RCbG9j
azsKLSAgICAgICAgaWYgKGlzVGFibGVDZWxsKG4pIHx8IG4tPmhhc1RhZ05hbWUoYm9keVRhZykg
fHwgIW4tPnBhcmVudE5vZGUoKSB8fCAhbi0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpIHx8IGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKG4pKQorICAgICAgICBpZiAoaXNUYWJsZUNl
bGwobikgfHwgbi0+aGFzVGFnTmFtZShib2R5VGFnKSB8fCAhbi0+cGFyZW50Tm9kZSgpIHx8ICFu
LT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8IGlzRWxlbWVudEZvckZvcm1h
dEJsb2NrKG4pKQogICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgIGlmIChpc0Jsb2NrKG4p
KQogICAgICAgICAgICAgbGFzdEJsb2NrID0gbjsKICAgICAgICAgaWYgKGlzTGlzdEVsZW1lbnQo
bikpCi0gICAgICAgICAgICByZXR1cm4gbi0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpID8gbi0+cGFyZW50Tm9kZSgpIDogbjsKKyAgICAgICAgICAgIHJldHVybiBuLT5wYXJlbnRO
b2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpID8gbi0+cGFyZW50Tm9kZSgpIDogbjsKICAgICB9
CiAgICAgcmV0dXJuIGxhc3RCbG9jazsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBh
cmFncgogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kT2ZQYXJhZ3JhcGggPSBlbmRPZlBh
cmFncmFwaCh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaCk7CiAKICAgICBOb2RlKiBlbmNsb3NpbmdO
b2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZSh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1
aXZhbGVudCgpLCAmaXNMaXN0T3JJbmRlbnRCbG9ja3F1b3RlKTsKLSAgICBpZiAoIWVuY2xvc2lu
Z05vZGUgfHwgIWVuY2xvc2luZ05vZGUtPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUo
KSkgIC8vIFdlIGNhbid0IG91dGRlbnQgaWYgdGhlcmUgaXMgbm8gcGxhY2UgdG8gZ28hCisgICAg
aWYgKCFlbmNsb3NpbmdOb2RlIHx8ICFlbmNsb3NpbmdOb2RlLT5wYXJlbnROb2RlKCktPnJlbmRl
cmVySXNFZGl0YWJsZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNl
IHRvIGdvIQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2UgSW5zZXJ0TGlzdENvbW1hbmQg
dG8gcmVtb3ZlIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgbGlzdApAQCAtMTUxLDcgKzE1MSw3IEBA
IHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3IKICAgICAgICAgICAgIGlm
IChDb250YWluZXJOb2RlKiBzcGxpdFBvaW50UGFyZW50ID0gc3BsaXRQb2ludC0+cGFyZW50Tm9k
ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNwbGl0UG9pbnRQYXJlbnQtPmhhc1RhZ05hbWUo
YmxvY2txdW90ZVRhZykKICAgICAgICAgICAgICAgICAgICAgJiYgIXNwbGl0UG9pbnQtPmhhc1Rh
Z05hbWUoYmxvY2txdW90ZVRhZykKLSAgICAgICAgICAgICAgICAgICAgJiYgc3BsaXRQb2ludFBh
cmVudC0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSAvLyBXZSBjYW4ndCBvdXRk
ZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQorICAgICAgICAgICAgICAgICAgICAmJiBz
cGxpdFBvaW50UGFyZW50LT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKSAvLyBX
ZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQogICAgICAgICAgICAg
ICAgICAgICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNwbGl0UG9pbnRQYXJl
bnQpLCBzcGxpdFBvaW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3Bw
CShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleAogCiB2b2lkIEluc2VydEludG9UZXh0
Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICghbV9ub2RlLT5pc0NvbnRlbnRFZGl0
YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC01Niw3ICs1Niw3IEBAIHZv
aWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgKIAogdm9pZCBJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIGlmICghbV9ub2RlLT5pc0NvbnRl
bnRFZGl0YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBOZWVkIHRvIG5vdGlmeSB0aGlzIGJlZm9y
ZSBhY3R1YWxseSBkZWxldGluZyB0aGUgdGV4dApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6
SW5zZXJ0Tm9kZUJlZm9yCiAgICAgQVNTRVJUKG1fcmVmQ2hpbGQpOwogICAgIEFTU0VSVChtX3Jl
ZkNoaWxkLT5wYXJlbnROb2RlKCkpOwogCi0gICAgQVNTRVJUKG1fcmVmQ2hpbGQtPnBhcmVudE5v
ZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSB8fCAhbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5h
dHRhY2hlZCgpKTsKKyAgICBBU1NFUlQobV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJl
cklzRWRpdGFibGUoKSB8fCAhbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5hdHRhY2hlZCgpKTsK
IH0KIAogdm9pZCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQ29u
dGFpbmVyTm9kZSogcGFyZW50ID0gbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpOwotICAgIGlmICgh
cGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJlbnQg
fHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSW5zZXJ0Tm9kZUJlZm9y
ZUNvbW1hbmQ6OmRvQXBwbHkoKQogCiB2b2lkIEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpkb1Vu
YXBwbHkoKQogewotICAgIGlmICghbV9pbnNlcnRDaGlsZC0+aXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICBpZiAoIW1faW5zZXJ0Q2hpbGQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIC8vIE5lZWQgdG8gbm90aWZ5IHRoaXMgYmVmb3JlIGFjdHVh
bGx5IGRlbGV0aW5nIHRoZSB0ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0pvaW5U
ZXh0Tm9kZXNDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCB2b2lkIEpvaW5UZXh0Tm9kZXNDb21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50
Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkp
CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBKb2luVGV4dE5vZGVzQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9kZSgp
OwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAg
aWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNh
bEVsZW1lbnRzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgTWVy
Z2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbgogCiB2b2lkIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBpZiAobV9lbGVtZW50MS0+bmV4
dFNpYmxpbmcoKSAhPSBtX2VsZW1lbnQyIHx8ICFtX2VsZW1lbnQxLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpIHx8ICFtX2VsZW1lbnQyLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChtX2VsZW1l
bnQxLT5uZXh0U2libGluZygpICE9IG1fZWxlbWVudDIgfHwgIW1fZWxlbWVudDEtPnJlbmRlcmVy
SXNFZGl0YWJsZSgpIHx8ICFtX2VsZW1lbnQyLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9hdENoaWxkID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgpOwpA
QCAtNjgsNyArNjgsNyBAQCB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1Vu
CiAgICAgUmVmUHRyPE5vZGU+IGF0Q2hpbGQgPSBtX2F0Q2hpbGQucmVsZWFzZSgpOwogCiAgICAg
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgpOwotICAgIGlm
ICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJl
bnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZW1vdmVOb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAgUmVtb3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5vZGVDb21tYW5kKFBhcwogdm9pZCBS
ZW1vdmVOb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50
ID0gbV9ub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXND
b250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklz
RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7CkBA
IC01Niw3ICs1Niw3IEBAIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7CiAg
ICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG1fcGFyZW50LnJlbGVhc2UoKTsKICAg
ICBSZWZQdHI8Tm9kZT4gcmVmQ2hpbGQgPSBtX3JlZkNoaWxkLnJlbGVhc2UoKTsKLSAgICBpZiAo
IXBhcmVudCB8fCAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghcGFyZW50
IHx8ICFwYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZy
YWdtZW50CiAgICAgaWYgKCFlZGl0YWJsZVJvb3QtPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLndlYmtpdEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KSAmJgogICAgICAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoZXNlIGNoZWNrcyBvbmNlIHRleHRhcmVhcyBhbmQgdGV4dGZpZWxk
cyBhY3R1YWxseSByZWdpc3RlciBhbiBldmVudCBoYW5kbGVyLgogICAgICAgICAhKHNoYWRvd0Fu
Y2VzdG9yTm9kZSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCkgJiYgc2hhZG93QW5j
ZXN0b3JOb2RlLT5yZW5kZXJlcigpLT5pc1RleHRDb250cm9sKCkpICYmCi0gICAgICAgIGVkaXRh
YmxlUm9vdC0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBlZGl0YWJsZVJv
b3QtPnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIHJlbW92ZUludGVyY2hh
bmdlTm9kZXMobV9mcmFnbWVudC5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
NjIsNyArMTYyLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGVkaXRhYmxlUm9vdC0+ZGlzcGF0Y2hFdmVu
dChldnQsIGVjKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgaWYgKHRleHQgIT0gZXZ0LT50
ZXh0KCkgfHwgIWVkaXRhYmxlUm9vdC0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAg
IGlmICh0ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPnJlbmRlcmVySXNSaWNo
bHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIHJlc3RvcmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdt
ZW50KGhvbGRlci5nZXQoKSk7CiAgICAgICAgIHJlbW92ZU5vZGUoaG9sZGVyKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjIsNyArMTM2Miw3IEBAIHZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICAvLyBUaGlzIG1ldGhvZCdzIHB1cnBvc2UgaXMgaXQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2Vs
ZWN0IGlmcmFtZXMgKGluIG9yZGVyIHRvIGRlbGV0ZSB0aGVtKS4gIERvbid0IGRvIGFueXRoaW5n
IGlmIHRoZSBpZnJhbWUgaXNuJ3QgZGVsZXRhYmxlLgotICAgIGlmICghb3duZXJFbGVtZW50UGFy
ZW50LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghb3duZXJFbGVtZW50UGFyZW50LT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGNv
bXB1dGUgcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVsZW1lbnQuCkBAIC0xODI0LDcg
KzE4MjQsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbkZyCiAKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIGJvb2wgY2Fy
ZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+
Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgpIHx8ICEoZG9jdW1lbnQt
PmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykpCisgICAgaWYgKCFpc05vbmUo
KSB8fCAhKGRvY3VtZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRD
b21tYW5kLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
bGl0RWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHZv
aWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KCkKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX2VsZW1lbnQyLT5w
YXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNDb250ZW50RWRpdGFi
bGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEuZ2V0
KCksIG1fZWxlbWVudDIuZ2V0KCksIGVjKTsKICAgICBpZiAoZWMpCkBAIC03OCw3ICs3OCw3IEBA
IHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU3BsaXRFbGVtZW50
Q29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudDEgfHwgIW1fZWxlbWVu
dDEtPmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIW1fZWxlbWVudDItPmlzQ29udGVudEVkaXRhYmxl
KCkpCisgICAgaWYgKCFtX2VsZW1lbnQxIHx8ICFtX2VsZW1lbnQxLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSB8fCAhbV9lbGVtZW50Mi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBjaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA4
MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpT
cGxpdFRleHROb2RlQ29tbWEKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQog
ewogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fdGV4dDItPnBhcmVudE5vZGUoKTsKLSAg
ICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICgh
cGFyZW50IHx8ICFwYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBTcGxp
dFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6
OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX3RleHQxIHx8ICFtX3RleHQxLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpKQorICAgIGlmICghbV90ZXh0MSB8fCAhbV90ZXh0MS0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX3RleHQxLT5kb2N1bWVudCgp
ID09IGRvY3VtZW50KCkpOwpAQCAtODksNyArODksNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21t
YW5kOjpkb1JlYXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBDb250YWluZXJOb2RlKiBw
YXJlbnQgPSBtX3RleHQyLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVu
dC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRU
cmltVGV4dDIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNp
b24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHZv
aWQgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWEKICAgICBzcGxpdFRleHROb2Rl
KG1fdGV4dC5nZXQoKSwgbV9vZmZzZXQpOwogCiAgICAgRWxlbWVudCogcGFyZW50ID0gbV90ZXh0
LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50RWxl
bWVudCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVudC0+
cGFyZW50RWxlbWVudCgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHJldmlz
aW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0
aW9uOjpjYW5vbmljYWxQb3NpdAogCiAgICAgLy8gVGhlIG5ldyBwb3NpdGlvbiBtdXN0IGJlIGlu
IHRoZSBzYW1lIGVkaXRhYmxlIGVsZW1lbnQuIEVuZm9yY2UgdGhhdCBmaXJzdC4KICAgICAvLyBV
bmxlc3MgdGhlIGRlc2NlbnQgaXMgZnJvbSBhIG5vbi1lZGl0YWJsZSBodG1sIGVsZW1lbnQgdG8g
YW4gZWRpdGFibGUgYm9keS4KLSAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGh0bWxU
YWcpICYmICFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUtPmRvY3VtZW50KCktPmJv
ZHkoKSAmJiBub2RlLT5kb2N1bWVudCgpLT5ib2R5KCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisg
ICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiAhbm9kZS0+cmVuZGVy
ZXJJc0VkaXRhYmxlKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+Ym9keSgpICYmIG5vZGUtPmRvY3Vt
ZW50KCktPmJvZHkoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBuZXh0
LmlzTm90TnVsbCgpID8gbmV4dCA6IHByZXY7CiAKICAgICBOb2RlKiBlZGl0aW5nUm9vdCA9IGVk
aXRhYmxlUm9vdEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9XcmFwQ29udGVudHNJ
bkR1bW15U3BhbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHZv
aWQgV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kOjpkb1UKIHsKICAgICBBU1NFUlQobV9l
bGVtZW50KTsKIAotICAgIGlmICghbV9kdW1teVNwYW4gfHwgIW1fZWxlbWVudC0+aXNDb250ZW50
RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fZHVtbXlTcGFuIHx8ICFtX2VsZW1lbnQtPnJlbmRlcmVy
SXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4gY2hpbGRyZW47CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgV3JhcENvbnRlbnRzSW5EdW1teVNw
YW5Db21tYW5kOjpkb1IKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICAKLSAgICBpZiAo
IW1fZHVtbXlTcGFuIHx8ICFtX2VsZW1lbnQtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYg
KCFtX2R1bW15U3BhbiB8fCAhbV9lbGVtZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgZXhlY3V0ZUFwcGx5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBA
IE5vZGUqIGhpZ2hlc3RFZGl0YWJsZVJvb3QoY29uc3QgUG9zaXRpb24KICAgICAKICAgICBub2Rl
ID0gaGlnaGVzdFJvb3Q7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlz
Q29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUo
KSkKICAgICAgICAgICAgIGhpZ2hlc3RSb290ID0gbm9kZTsKICAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoYm9keVRhZykpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE2MCw3ICsxNjAsNyBA
QCBOb2RlKiBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKE5vZGUqIG5vZGUpCiAgICAgCiAgICAgTm9k
ZSAqbG93ZXN0Um9vdCA9IDA7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAg
ICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKQogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xNzksNyArMTc5LDcgQEAgYm9vbCBpc0VkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9zaXRp
b24mIAogICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzVGFi
bGUoKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAKLSAgICByZXR1
cm4gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXJJ
c0VkaXRhYmxlKCk7CiB9CiAKIGJvb2wgaXNBdFVuc3BsaXR0YWJsZUVsZW1lbnQoY29uc3QgUG9z
aXRpb24mIHBvcykKQEAgLTE5OCw3ICsxOTgsNyBAQCBib29sIGlzUmljaGx5RWRpdGFibGVQb3Np
dGlvbihjb25zdCBQb3NpCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVy
ZXIoKS0+aXNUYWJsZSgpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAg
IAotICAgIHJldHVybiBub2RlLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJldHVy
biBub2RlLT5yZW5kZXJlcklzUmljaGx5RWRpdGFibGUoKTsKIH0KIAogRWxlbWVudCogZWRpdGFi
bGVSb290Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApCkBAIC0yNzYsNyArMjc2LDcgQEAg
UG9zaXRpb24gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYQogVmlzaWJsZVBvc2l0aW9u
IGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVyUG9zaXRpb25JblJvb3QoY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uLCBOb2RlKiBoaWdoZXN0Um9vdCkKIHsKICAgICAvLyBwb3NpdGlvbiBmYWxscyBi
ZWZvcmUgaGlnaGVzdFJvb3QuCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb24sIGZp
cnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpKSA9PSAtMSAmJiBoaWdoZXN0Um9vdC0+aXND
b250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgZmly
c3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IC0xICYmIGhpZ2hlc3RSb290LT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUoaGln
aGVzdFJvb3QpOwogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwpAQCAtNTYxLDcgKzU2MSw3
IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IGV4dGVuZFJhbmdlVG9XcmFwcGluZ04KICAgICBOb2RlKiBh
bmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyk7Ly8gZmluZCB0aGUg
Y2xvZXNldCBjb21tb24gYW5jZXN0b3IKICAgICBOb2RlKiBoaWdoZXN0Tm9kZSA9IDA7CiAgICAg
Ly8gdHJhdmVyc2UgdGhyb3VnaCBhbmNlc3RvcnMgYXMgbG9uZyBhcyB0aGV5IGFyZSBjb250YWlu
ZWQgd2l0aGluIHRoZSByYW5nZSwgY29udGVudC1lZGl0YWJsZSwgYW5kIGJlbG93IHJvb3ROb2Rl
IChjb3VsZCBiZSA9MCkuCi0gICAgd2hpbGUgKGFuY2VzdG9yICYmIGFuY2VzdG9yLT5pc0NvbnRl
bnRFZGl0YWJsZSgpICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oYW5jZXN0b3IsIG1h
eGltdW1SYW5nZSkgJiYgYW5jZXN0b3IgIT0gcm9vdE5vZGUpIHsKKyAgICB3aGlsZSAoYW5jZXN0
b3IgJiYgYW5jZXN0b3ItPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmIGlzTm9kZVZpc2libHlDb250
YWluZWRXaXRoaW4oYW5jZXN0b3IsIG1heGltdW1SYW5nZSkgJiYgYW5jZXN0b3IgIT0gcm9vdE5v
ZGUpIHsKICAgICAgICAgaGlnaGVzdE5vZGUgPSBhbmNlc3RvcjsKICAgICAgICAgYW5jZXN0b3Ig
PSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogICAgIH0KQEAgLTU5Miw3ICs1OTIsNyBAQCBOb2Rl
KiBlbmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3NpdGlvCiAgICAgICAgIAogICAgIE5vZGUq
IHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwogICAgIGZvciAoTm9kZSogbiA9IHAuZGVw
cmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocm9v
dCAmJiAhbi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKHJvb3QgJiYgIW4tPnJl
bmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChu
LT5oYXNUYWdOYW1lKHRhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuIG47CkBAIC02MTQsNyAr
NjE0LDcgQEAgTm9kZSogZW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbgogICAgIGZv
ciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkg
ewogICAgICAgICAvLyBEb24ndCByZXR1cm4gYSBub24tZWRpdGFibGUgbm9kZSBpZiB0aGUgaW5w
dXQgcG9zaXRpb24gd2FzIGVkaXRhYmxlLCBzaW5jZQogICAgICAgICAvLyB0aGUgY2FsbGVycyBm
cm9tIGVkaXRpbmcgd2lsbCBubyBkb3VidCB3YW50IHRvIHBlcmZvcm0gZWRpdGluZyBpbnNpZGUg
dGhlIHJldHVybmVkIG5vZGUuCi0gICAgICAgIGlmIChyb290ICYmICFuLT5pc0NvbnRlbnRFZGl0
YWJsZSgpKQorICAgICAgICBpZiAocm9vdCAmJiAhbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG5vZGVJc09mVHlwZShuKSkKICAgICAg
ICAgICAgIHJldHVybiBuOwpAQCAtNjMwLDcgKzYzMCw3IEBAIE5vZGUqIGhpZ2hlc3RFbmNsb3Np
bmdOb2RlT2ZUeXBlKGNvbnN0IFAKICAgICBOb2RlKiBoaWdoZXN0ID0gMDsKICAgICBOb2RlKiBy
b290ID0gcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSA/IGhpZ2hlc3RFZGl0YWJs
ZVJvb3QocCkgOiAwOwogICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsg
biA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250ZW50
RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKHJvb3QgJiYgIW4tPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChub2RlSXNPZlR5cGUobikpCiAg
ICAgICAgICAgICBoaWdoZXN0ID0gbjsKQEAgLTc1OCw3ICs3NTgsNyBAQCBib29sIGNhbk1lcmdl
TGlzdHMoRWxlbWVudCogZmlyc3RMaXN0LCBFCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHJldHVybiBmaXJzdExpc3QtPmhhc1RhZ05hbWUoc2Vjb25kTGlzdC0+dGFnUU5hbWUoKSkvLyBt
YWtlIHN1cmUgdGhlIGxpc3QgdHlwZXMgbWF0Y2ggKG9sIHZzLiB1bCkKLSAgICAmJiBmaXJzdExp
c3QtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgc2Vjb25kTGlzdC0+aXNDb250ZW50RWRpdGFibGUo
KS8vIGJvdGggbGlzdHMgYXJlIGVkaXRhYmxlCisgICAgJiYgZmlyc3RMaXN0LT5yZW5kZXJlcklz
RWRpdGFibGUoKSAmJiBzZWNvbmRMaXN0LT5yZW5kZXJlcklzRWRpdGFibGUoKSAvLyBib3RoIGxp
c3RzIGFyZSBlZGl0YWJsZQogICAgICYmIGZpcnN0TGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
ID09IHNlY29uZExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS8vIGRvbid0IGNyb3NzIGVkaXRp
bmcgYm91bmRhcmllcwogICAgICYmIGlzVmlzaWJseUFkamFjZW50KHBvc2l0aW9uSW5QYXJlbnRB
ZnRlck5vZGUoZmlyc3RMaXN0KSwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoc2Vjb25kTGlz
dCkpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyB2aXNpYmxlIGNvbnRlbnQgYmV0d2Vl
biB0aGlzIGxpIGFuZCB0aGUgcHJldmlvdXMgbGlzdApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NywxMCArNDc3
LDEwIEBAIGJvb2wgaXNFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYKIC8vIFRoZSBm
aXJzdCBsZWFmIGJlZm9yZSBub2RlIHRoYXQgaGFzIHRoZSBzYW1lIGVkaXRhYmlsaXR5IGFzIG5v
ZGUuCiBzdGF0aWMgTm9kZSogcHJldmlvdXNMZWFmV2l0aFNhbWVFZGl0YWJpbGl0eShOb2RlKiBu
b2RlKQogewotICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwor
ICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICBOb2Rl
KiBuID0gbm9kZS0+cHJldmlvdXNMZWFmTm9kZSgpOwogICAgIHdoaWxlIChuKSB7Ci0gICAgICAg
IGlmIChlZGl0YWJsZSA9PSBuLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBpZiAoZWRp
dGFibGUgPT0gbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gbjsK
ICAgICAgICAgbiA9IG4tPnByZXZpb3VzTGVhZk5vZGUoKTsKICAgICB9CkBAIC01NzIsNyArNTcy
LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbgogICAgIC8vIENv
dWxkIG5vdCBmaW5kIGEgcHJldmlvdXMgbGluZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGFscmVhZHkg
YmUgb24gdGhlIGZpcnN0IGxpbmUuCiAgICAgLy8gTW92ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNv
bnRlbnQgaW4gdGhpcyBibG9jaywgd2hpY2ggZWZmZWN0aXZlbHkgbW92ZXMgdXMKICAgICAvLyB0
byB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgd2UncmUgb24uCi0gICAgRWxlbWVudCogcm9vdEVsZW1l
bnQgPSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgRWxlbWVudCog
cm9vdEVsZW1lbnQgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogICAg
IGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUocm9vdEVsZW1lbnQp
LCBET1dOU1RSRUFNKTsKQEAgLTU4MCwxMiArNTgwLDEyIEBAIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91c0xpbmVQb3NpdGlvbihjb24KIAogc3RhdGljIE5vZGUqIG5leHRMZWFmV2l0aFNhbWVFZGl0
YWJpbGl0eShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQogewotICAgIGJvb2wgZWRpdGFibGUgPSBu
b2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKTsKICAgICBBU1NFUlQob2Zmc2V0ID49IDApOwogICAgIE5vZGUqIGNo
aWxkID0gbm9kZS0+Y2hpbGROb2RlKG9mZnNldCk7CiAgICAgTm9kZSogbiA9IGNoaWxkID8gY2hp
bGQtPm5leHRMZWFmTm9kZSgpIDogbm9kZS0+bGFzdERlc2NlbmRhbnQoKS0+bmV4dExlYWZOb2Rl
KCk7CiAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKGVkaXRhYmxlID09IG4tPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChlZGl0YWJsZSA9PSBuLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICBuID0gbi0+bmV4dExlYWZOb2Rl
KCk7CiAgICAgfQpAQCAtNTk3LDEwICs1OTcsMTAgQEAgc3RhdGljIE5vZGUqIG5leHRMZWFmV2l0
aFNhbWVFZGl0YWJpbGl0eQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
Ci0gICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9v
bCBlZGl0YWJsZSA9IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOwogICAgIE5vZGUqIG4gPSBu
b2RlLT5uZXh0TGVhZk5vZGUoKTsKICAgICB3aGlsZSAobikgewotICAgICAgICBpZiAoZWRpdGFi
bGUgPT0gbi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKGVkaXRhYmxlID09IG4t
PnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgIG4g
PSBuLT5uZXh0TGVhZk5vZGUoKTsKICAgICB9CkBAIC02NzksNyArNjc5LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVgogICAgIC8vIENvdWxkIG5vdCBmaW5kIGEg
bmV4dCBsaW5lLiBUaGlzIG1lYW5zIHdlIG11c3QgYWxyZWFkeSBiZSBvbiB0aGUgbGFzdCBsaW5l
LgogICAgIC8vIE1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgY29udGVudCBpbiB0aGlzIGJsb2NrLCB3
aGljaCBlZmZlY3RpdmVseSBtb3ZlcyB1cwogICAgIC8vIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUg
d2UncmUgb24uCi0gICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5pc0NvbnRlbnRFZGl0
YWJsZSgpID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KGxhc3RQb3NpdGlvbkluTm9kZShyb290RWxlbWVudCksIERPV05TVFJFQU0pOwpAQCAtNzU5LDEw
ICs3NTksMTAgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgogCiAg
ICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikgewotICAgICAgICBpZiAoYm91
bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgbi0+aXND
b250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAg
ICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFy
eSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5n
UnVsZSA9PSBDYW5Ta2lwT3ZlckVkaXRpbmdCb3VuZGFyeSkgewotICAgICAgICAgICAgd2hpbGUg
KG4gJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCkpCisgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAh
PSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIG4gPSBu
LT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKICAgICAgICAgICAg
IGlmICghbiB8fCAhbi0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtODMxLDEwICs4MzEsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFy
YWdyYXBoKGNvbnN0IFZpcwogCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAo
bikgewotICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0
aW5nQm91bmRhcnkgJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5u
b3RDcm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFy
dE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5Ta2lwT3ZlckVkaXRpbmdCb3VuZGFyeSkg
ewotICAgICAgICAgICAgd2hpbGUgKG4gJiYgbi0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBzdGFy
dE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQog
ICAgICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVCbG9jayk7
CiAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkK
ICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0
YXRpYyB1bnNpZ25lZCBwYXJzZVBvcnRGcm9tU3RyaW5nUG9zaXQKIAogYm9vbCBIVE1MQW5jaG9y
RWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgaWYgKGlzQ29udGVudEVkaXRh
YmxlKCkpCisgICAgaWYgKHJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gSFRN
TEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKICAgICAvLyBJZiBub3QgYSBsaW5rIHdlIHNob3Vs
ZCBzdGlsbCBiZSBhYmxlIHRvIGZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IGhhcyB0YWJJbmRleC4K
ICAgICByZXR1cm4gaXNMaW5rKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKQEAg
LTE1NCw3ICsxNTQsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNDb250ZW50
RWRpdGFibGUoKSkgeworICAgICAgICBpZiAocmVuZGVyZXJJc0VkaXRhYmxlKCkpIHsKICAgICAg
ICAgICAgIC8vIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRhYmxlIGJsb2NrIHRoYXQgdGhl
IHNlbGVjdGlvbiB3YXMgaW4gKGlmIGl0IHdhcyBpbiBvbmUpIGp1c3QgYmVmb3JlIHRoZSBsaW5r
IHdhcyBjbGlja2VkCiAgICAgICAgICAgICAvLyBmb3IgdGhlIExpdmVXaGVuTm90Rm9jdXNlZCBl
ZGl0YWJsZSBsaW5rIGJlaGF2aW9yCiAgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYm
IGRvY3VtZW50KCktPmZyYW1lKCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkp
IHsKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kCiAKIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGRvd24sIGJv
b2wgcGF1c2UpCiB7Ci0gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICBpZiAocmVu
ZGVyZXJJc0VkaXRhYmxlKCkpIHsKICAgICAgICAgRWRpdGFibGVMaW5rQmVoYXZpb3IgZWRpdGFi
bGVMaW5rQmVoYXZpb3IgPSBFZGl0YWJsZUxpbmtEZWZhdWx0QmVoYXZpb3I7CiAgICAgICAgIGlm
IChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpKQogICAgICAgICAg
ICAgZWRpdGFibGVMaW5rQmVoYXZpb3IgPSBzZXR0aW5ncy0+ZWRpdGFibGVMaW5rQmVoYXZpb3Io
KTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50OjpjYW5TdGFydFNl
bGVjdGlvCiAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5IHdhbnQgdGhpcyBzYW1lIGJlaGF2aW9y
IGluIFNWR0FFbGVtZW50IHRvbwogICAgIGlmICghaXNMaW5rKCkpCiAgICAgICAgIHJldHVybiBI
VE1MRWxlbWVudDo6Y2FuU3RhcnRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gaXNDb250ZW50RWRp
dGFibGUoKTsKKyAgICByZXR1cm4gcmVuZGVyZXJJc0VkaXRhYmxlKCk7CiB9CiAKIGJvb2wgSFRN
TEFuY2hvckVsZW1lbnQ6OmRyYWdnYWJsZSgpIGNvbnN0CkBAIC01MDEsNyArNTAxLDcgQEAgSFRN
TEFuY2hvckVsZW1lbnQ6OkV2ZW50VHlwZSBIVE1MQW5jaG9yRQogCiBib29sIEhUTUxBbmNob3JF
bGVtZW50Ojp0cmVhdExpbmtBc0xpdmVGb3JFdmVudFR5cGUoRXZlbnRUeXBlIGV2ZW50VHlwZSkg
Y29uc3QKIHsKLSAgICBpZiAoIWlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFyZW5kZXJl
cklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEJvZHlFbGVtZW50LmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBA
QCBib29sIEhUTUxCb2R5RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0CiAKIGJvb2wgSFRNTEJv
ZHlFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNDb250ZW50
RWRpdGFibGUoKSB8fCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOworICAgIHJldHVybiBy
ZW5kZXJlcklzRWRpdGFibGUoKSB8fCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwogfQog
CiBTdHJpbmcgSFRNTEJvZHlFbGVtZW50OjphTGluaygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU0LDEwICs2NTQsMTUgQEAg
dm9pZCBIVE1MRWxlbWVudDo6YWRkSFRNTEFsaWdubWVudFRvU3R5bAogCiBib29sIEhUTUxFbGVt
ZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWxlbWVudDo6c3VwcG9y
dHNGb2N1cygpIHx8IChpc0NvbnRlbnRFZGl0YWJsZSgpICYmIHBhcmVudE5vZGUoKSAmJiAhcGFy
ZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICByZXR1cm4gRWxlbWVudDo6c3Vw
cG9ydHNGb2N1cygpIHx8IChyZW5kZXJlcklzRWRpdGFibGUoKSAmJiBwYXJlbnROb2RlKCkgJiYg
IXBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpOwogfQogCi1TdHJpbmcgSFRNTEVs
ZW1lbnQ6OmNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IAorYm9vbCBIVE1MRWxlbWVudDo6aXNDb250
ZW50RWRpdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcklzRWRpdGFibGUoKTsK
K30KKworU3RyaW5nIEhUTUxFbGVtZW50Ojpjb250ZW50RWRpdGFibGUoKSBjb25zdAogewogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKGNvbnRlbnRlZGl0
YWJsZUF0dHIpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lvbiA4
MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNiArNTcsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
b2N1cygpIGNvbnN0OwogCisgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OworCiAg
ICAgU3RyaW5nIGNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29udGVudEVk
aXRhYmxlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3ICsz
NTMsNyBAQCBEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25GCiB7CiAgICAg
QVNTRVJUKGRyYWdEYXRhKTsKICAgICBEb2N1bWVudCogZG9jID0gbV9wYWdlLT5tYWluRnJhbWUo
KS0+ZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpKTsKLSAgICBpZiAo
ZG9jICYmIChtX2RpZEluaXRpYXRlRHJhZyB8fCBkb2MtPmlzUGx1Z2luRG9jdW1lbnQoKSB8fCBk
b2MtPmlzQ29udGVudEVkaXRhYmxlKCkpKQorICAgIGlmIChkb2MgJiYgKG1fZGlkSW5pdGlhdGVE
cmFnIHx8IGRvYy0+aXNQbHVnaW5Eb2N1bWVudCgpIHx8IGRvYy0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkpKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgcmV0dXJuIGRyYWdP
cGVyYXRpb24oZHJhZ0RhdGEpOwogfQpAQCAtNTExLDcgKzUxMSw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNhblByb2Nlc3NEcmFnKERyYWcKICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zRmls
ZXMoKSAmJiBhc0ZpbGVJbnB1dChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5p
c0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KG1fZGlkSW5pdGlhdGVEcmFnICYmIG1fZG9jdW1lbnRVbmRlck1vdXNlID09IG1fZHJhZ0luaXRp
YXRvciAmJiByZXN1bHQuaXNTZWxlY3RlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyMyw3ICs3MjMsNyBAQCBib29sIEV2ZW50
SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlCiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
bmV3U2VsZWN0aW9uOwogICAgICAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOwog
ICAgICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJldEJy
b3dzaW5nRW5hYmxlZCgpOwotICAgICAgICBpZiAobm9kZSAmJiAoY2FyZXRCcm93c2luZyB8fCBu
b2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSAmJiBub2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAg
IGlmIChub2RlICYmIChjYXJldEJyb3dzaW5nIHx8IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgp
KSAmJiBub2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9z
ID0gbm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChldmVudC5sb2NhbFBvaW50KCkp
OwogICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihwb3MpOwogICAg
ICAgICB9CkBAIC0xMTc1LDcgKzExNzUsNyBAQCBDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RD
dXJzb3IoY29uc3QgCiAKICAgICBzd2l0Y2ggKHN0eWxlID8gc3R5bGUtPmN1cnNvcigpIDogQ1VS
U09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNPUl9BVVRPOiB7Ci0gICAgICAgIGJvb2wgZWRpdGFi
bGUgPSAobm9kZSAmJiBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICAgICAgYm9vbCBl
ZGl0YWJsZSA9IChub2RlICYmIG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKTsKICAgICAgICAg
Ym9vbCBlZGl0YWJsZUxpbmtFbmFibGVkID0gZmFsc2U7CiAKICAgICAgICAgLy8gSWYgdGhlIGxp
bmsgaXMgZWRpdGFibGUsIHRoZW4gd2UgbmVlZCB0byBjaGVjayB0aGUgc2V0dGluZ3MgdG8gc2Vl
IHdoZXRoZXIgb3Igbm90IHRoZSBsaW5rIHNob3VsZCBiZSBmb2xsb3dlZApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODE3NjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
MSw3ICszMDEsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1CiBz
dGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoTm9kZSAqbm9kZSkKIHsKICAgICBB
U1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpOworICAg
IEFTU0VSVChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CiAKICAgICBOb2RlKiByb290ID0g
bm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDcgKzUyNSw3IEBAIGJv
b2wgSGl0VGVzdFJlc3VsdDo6aXNDb250ZW50RWRpdGFibGUoKSAKICAgICBpZiAobV9pbm5lck5v
blNoYXJlZE5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKS0+aXNU
ZXh0RmllbGQoKTsKIAotICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aXNDb250ZW50
RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpOwogfQogCiBib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRl
c3RSZXN1bHQoTm9kZSogbm9kZSwgaW50IHgsIGludCB5LCBjb25zdCBJbnRSZWN0JiByZWN0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA4
MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwNTMsNyArNDA1Myw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb25Gb3JQb2ludFIKICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCk7CiAK
ICAgICAvLyBJZiB3ZSBjYW4ndCBmaW5kIGFuIGFuY2VzdG9yIHRvIGNoZWNrIGVkaXRhYmlsaXR5
IG9uLCBvciBlZGl0YWJpbGl0eSBpcyB1bmNoYW5nZWQsIHdlIHJlY3VyIGxpa2Ugbm9ybWFsCi0g
ICAgaWYgKCFhbmNlc3RvciB8fCBhbmNlc3Rvci0+bm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgp
ID09IGNoaWxkTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoIWFuY2VzdG9yIHx8
IGFuY2VzdG9yLT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpID09IGNoaWxkTm9kZS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBjaGlsZC0+cG9zaXRpb25Gb3JQb2lu
dChwb2ludEluQ2hpbGRDb29yZGluYXRlcyk7CiAKICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIGJl
Zm9yZSBvciBhZnRlciB0aGUgY2hpbGQsIGRlcGVuZGluZyBvbiBpZiB0aGUgY2xpY2sgd2FzIHRv
IHRoZSBsb2dpY2FsIGxlZnQgb3IgbG9naWNhbCByaWdodCBvZiB0aGUgY2hpbGQKQEAgLTUwNzks
NyArNTA3OSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc0xpbmVJZkVtcHR5KCkgY29uc3QKICAg
ICBpZiAoIW5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChub2Rl
KCktPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkg
PT0gbm9kZSgpKQorICAgIGlmIChub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmIG5vZGUo
KS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IG5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgCiAgICAgaWYgKG5vZGUoKS0+aXNTaGFkb3dSb290KCkgJiYgKG5vZGUoKS0+c2hhZG93
SG9zdCgpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gODE3Njgp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEyMiw3ICsyMTIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRk
T3ZlcmZsb3dGcm9tSW5saW5lQwogewogICAgIGludCBlbmRQYWRkaW5nID0gaGFzT3ZlcmZsb3dD
bGlwKCkgPyBwYWRkaW5nRW5kKCkgOiAwOwogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGZpbmQgYW5v
dGhlciB3YXkgdG8gZG8gdGhpcywgc2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93IHdoZW4gd2Ug
ZG9uJ3Qgd2FudCB0aGVtIHRvLgotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhZW5kUGFk
ZGluZyAmJiBub2RlKCkgJiYgbm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUoKSA9
PSBub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFlbmRQYWRkaW5nICYm
IG5vZGUoKSAmJiBub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmIG5vZGUoKSA9PSBub2Rl
KCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCiAgICAgICAgIGVuZFBhZGRpbmcgPSAxOwogICAgIGZvciAoUm9vdElubGluZUJveCog
Y3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkg
ewogICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhjdXJyLT5wYWRkZWRMYXlvdXRPdmVyZmxvd1Jl
Y3QoZW5kUGFkZGluZykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MSw3ICs2NDEsNyBAQCBib29sIFJlbmRlckJveDo6
Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sCiAgICAgCiBib29sIFJlbmRlckJveDo6Y2FuQmVQcm9n
cmFtYXRpY2FsbHlTY3JvbGxlZChib29sKSBjb25zdAogewotICAgIHJldHVybiAoaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IChub2RlKCkgJiYgbm9kZSgpLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKSkpIHx8IChub2RlKCkgJiYgbm9kZSgpLT5pc0RvY3VtZW50Tm9kZSgp
KTsKKyAgICByZXR1cm4gKGhhc092ZXJmbG93Q2xpcCgpICYmIChzY3JvbGxzT3ZlcmZsb3coKSB8
fCAobm9kZSgpICYmIG5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpKSkgfHwgKG5vZGUoKSAm
JiBub2RlKCktPmlzRG9jdW1lbnROb2RlKCkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YXV0b3Nj
cm9sbCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0NSwxNCArMjY0NSwxNCBAQCBWaXNpYmxlUG9zaXRp
b24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiB7CiAgICAgLy8gSWYgdGhpcyBpcyBhIG5vbi1h
bm9ueW1vdXMgcmVuZGVyZXIgaW4gYW4gZWRpdGFibGUgYXJlYSwgdGhlbiBpdCdzIHNpbXBsZS4K
ICAgICBpZiAoTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcklzRWRp
dGFibGUoKSkgewogICAgICAgICAgICAgLy8gSWYgaXQgY2FuIGJlIGZvdW5kLCB3ZSBwcmVmZXIg
YSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHRoYXQgaXMgZWRpdGFibGUuIAogICAgICAg
ICAgICAgUG9zaXRpb24gcG9zaXRpb24obm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgIFBvc2l0
aW9uIGNhbmRpZGF0ZSA9IHBvc2l0aW9uLmRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRh
cnkpOwotICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRl
bnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgp
LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOwogICAgICAgICAgICAgY2FuZGlkYXRlID0gcG9z
aXRpb24udXBzdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgICAgICAgICAgaWYg
KGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAg
ICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZm
aW5pdHkpOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVk
aXRpbmcgcG9zaXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYyLDcgKzQ2Miw3IEBAIFJlbmRl
ckJsb2NrKiBSb290SW5saW5lQm94OjpibG9jaygpIGNvbnMKIAogc3RhdGljIGJvb2wgaXNFZGl0
YWJsZUxlYWYoSW5saW5lQm94KiBsZWFmKQogewotICAgIHJldHVybiBsZWFmICYmIGxlYWYtPnJl
bmRlcmVyKCkgJiYgbGVhZi0+cmVuZGVyZXIoKS0+bm9kZSgpICYmIGxlYWYtPnJlbmRlcmVyKCkt
Pm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbGVhZiAmJiBsZWFmLT5y
ZW5kZXJlcigpICYmIGxlYWYtPnJlbmRlcmVyKCktPm5vZGUoKSAmJiBsZWFmLT5yZW5kZXJlcigp
LT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpOwogfQogCiBJbmxpbmVCb3gqIFJvb3RJbmxp
bmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JMb2dpY2FsTGVmdFBvc2l0aW9uKGludCBsZWZ0UG9z
aXRpb24sIGJvb2wgb25seUVkaXRhYmxlTGVhdmVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFNWR0FFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2CiAKIGJvb2wgU1ZHQUVsZW1lbnQ6OnN1cHBvcnRz
Rm9jdXMoKSBjb25zdAogewotICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChy
ZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEx
LTAzLTIyICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIHJlbmFtZSBOb2RlOjppc0NvbnRlbnRFZGl0YWJs
ZSBhbmQgYWxsIGNhbGwgc2l0ZXMgdG8gcmVuZGVyZXJJc0VkaXRhYmxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDI5MAorCisgICAgICAgIFRoaXMg
aXMgcGFydCBvZiB0aGUgZWZmb3J0IHRvIHNlcGFyYXRlIEpTIEFQSSBIVE1MRWxlbWVudCBpc0Nv
bnRlbnRFZGl0YWJsZSBmcm9tCisgICAgICAgIGludGVybmFsIE5vZGU6OnJlbmRlcmVySXNFZGl0
YWJsZS4KKworICAgICAgICAqIHNyYy9XZWJOb2RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Tm9kZTo6aXNDb250ZW50RWRpdGFibGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpjb25maXJtQ29tcG9zaXRpb24pOgorCiAyMDExLTAzLTIzICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByODE2ODYuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNw
cAkocmV2aXNpb24gODE3NjgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIGJvb2wgV2ViTm9kZTo6aXNU
ZXh0Tm9kZSgpIGNvbnN0CiAKIGJvb2wgV2ViTm9kZTo6aXNDb250ZW50RWRpdGFibGUoKSBjb25z
dAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CiB9CiAKIGJvb2wgV2ViTm9kZTo6
aXNFbGVtZW50Tm9kZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1NSw3ICsxMjU1LDcg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Rm9jdXMoYm9vbCBlbmFibGUpCiAgICAgICAgICAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmb2N1c2VkTm9kZSk7
CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzVGV4dEZvcm1Db250cm9sKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnQtPnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChmb2N1c2VkTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkg
eworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvY3VzZWROb2RlLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoKSBz
ZWxlY3RzIGFsbCB0aGUgdGV4dCBvZgogICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50c2Vk
aXRhYmxlIERJVnMuIFNvIHdlIHNldCB0aGUgc2VsZWN0aW9uIGV4cGxpY2l0bHkKICAgICAgICAg
ICAgICAgICAgICAgLy8gaW5zdGVhZC4gTm90ZSB0aGF0IHRoaXMgaGFzIHRoZSBzaWRlIGVmZmVj
dCBvZiBtb3ZpbmcgdGhlCkBAIC0xMzE3LDcgKzEzMTcsNyBAQCBib29sIFdlYlZpZXdJbXBsOjpz
ZXRDb21wb3NpdGlvbigKICAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29t
cG9zaXRpb25SYW5nZSgpOwogICAgIGlmIChyYW5nZSkgewogICAgICAgICBjb25zdCBOb2RlKiBu
b2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAg
LTEzNjYsNyArMTM2Niw3IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNvbmZpcm1Db21wb3NpdGlvbihj
b24KICAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25SYW5n
ZSgpOwogICAgIGlmIChyYW5nZSkgewogICAgICAgICBjb25zdCBOb2RlKiBub2RlID0gcmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNDb250ZW50
RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaGFpa3Uv
Q2hhbmdlTG9nCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJLaXQvaGFpa3UvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMjIgIENoYW5nIFNo
dSAgPGNzaHVAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2Eu
CisKKyAgICAgICAgcmVuYW1lIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlIGFuZCBhbGwgY2FsbCBz
aXRlcyB0byByZW5kZXJlcklzRWRpdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU0MjkwCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIHRoZSBl
ZmZvcnQgdG8gc2VwYXJhdGUgSlMgQVBJIEhUTUxFbGVtZW50IGlzQ29udGVudEVkaXRhYmxlIGZy
b20KKyAgICAgICAgaW50ZXJuYWwgTm9kZTo6cmVuZGVyZXJJc0VkaXRhYmxlLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorCiAyMDExLTAzLTA3
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5k
ZXJzIENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9oYWlrdS9X
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5jcHAJKHJldmlzaW9uIDgxNzY4KQorKysg
U291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIEVkaXRvckNsaWVudEhhaWt1
OjpoYW5kbGVLZXlib2FyZEV2CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKHN0YXJ0LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKHN0YXJ0LT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkgewogICAgICAgICBzd2l0Y2ggKGtldmVudC0+d2luZG93c1ZpcnR1
YWxLZXlDb2RlKCkpIHsKICAgICAgICAgY2FzZSBWS19CQUNLOgogICAgICAgICAgICAgZnJhbWUt
PmVkaXRvcigpLT5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlvbkJhY2t3YXJkLApJbmRleDog
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNzY4KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMy0yMiAgQ2hhbmcgU2h1
ICA8Y3NodUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4K
KworICAgICAgICByZW5hbWUgTm9kZTo6aXNDb250ZW50RWRpdGFibGUgYW5kIGFsbCBjYWxsIHNp
dGVzIHRvIHJlbmRlcmVySXNFZGl0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQyOTAKKworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgdGhlIGVm
Zm9ydCB0byBzZXBhcmF0ZSBKUyBBUEkgSFRNTEVsZW1lbnQgaXNDb250ZW50RWRpdGFibGUgZnJv
bQorICAgICAgICBpbnRlcm5hbCBOb2RlOjpyZW5kZXJlcklzRWRpdGFibGUuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisKIDIwMTEtMDMtMjMgIFl1cnkg
U2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
UGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA4MTc2OCkKKysrIFNvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MjAsNyArNDIwLDcgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVu
dAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogcmVmYWN0b3IgYWxsIG9mIHRoaXMg
dG8gdXNlIEFjdGlvbnMgb3Igc29tZXRoaW5nIGxpa2UgdGhlbQotICAgIGlmIChzdGFydC0+aXND
b250ZW50RWRpdGFibGUoKSkgeworICAgIGlmIChzdGFydC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkp
IHsKICAgICAgICAgYm9vbCBkb1NwYXRpYWxOYXZpZ2F0aW9uID0gZmFsc2U7CiAgICAgICAgIGlm
IChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChmcmFtZSkpIHsKICAgICAgICAgICAgIGlmICgh
a2V2ZW50LT5tb2RpZmllcnMoKSkgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>