<?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>102919</bug_id>
          
          <creation_ts>2012-11-21 03:34:33 -0800</creation_ts>
          <short_desc>[Shadow DOM]: custom pseudo in styles in shadow dom trees doesn&apos;t work</short_desc>
          <delta_ts>2015-10-16 00:57:19 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>
          
          <blocked>97282</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Takashi Sakamoto">tasak</reporter>
          <assigned_to name="Takashi Sakamoto">tasak</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>772763</commentid>
    <comment_count>0</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-11-21 03:34:33 -0800</bug_when>
    <thetext>Since a treescope where the style is registered is different from a treescope where the style is applied to.

 &lt;#shadow-root1&gt;
           |
           +---&lt;style id=A&gt; progress::-webkit-progress-value...
           |
           +---&lt;progress&gt; ----&lt;#shadow-root2&gt;
                                                     |
                                                     +---&lt;div id=-webkit-progress-bar&gt;
                                                                 |
                                                                +---&lt;div id=-webkit-progress-value&gt;

The current implementation:
- &lt;style id=A&gt; is registered with &lt;#shadow-root1&gt;.
- when resolving &lt;div id=-webkit-progress-value&gt;&apos;s style, &lt;style id=A&gt; is in the different treescope from &lt;#shadow-root2&gt;. So no style will applied to the div.
- however, the rule, i.e. progress::-webkit-progress-value..., should be applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772764</commentid>
    <comment_count>1</comment_count>
      <attachid>175406</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-11-21 03:35:00 -0800</bug_when>
    <thetext>Created attachment 175406
repro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791519</commentid>
    <comment_count>2</comment_count>
      <attachid>179464</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-14 03:38:29 -0800</bug_when>
    <thetext>Created attachment 179464
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791523</commentid>
    <comment_count>3</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-14 03:51:18 -0800</bug_when>
    <thetext>My patch is still &quot;WIP&quot;, however I would like to ask feedbacks. I&apos;m afraid that I&apos;m on the wrong way to fix this issue.

What I&apos;m trying to do is:
- custom pseudo in UA stylesheets
   --&gt; should check whether elements in any treescope match or not.

e.g.
html.css:
progress:-webkit-progress-value { ... }

#shadow-root
    #shadow-root
       div::-webkit-progress-value &lt;--- always apply above rule


- custom pseudo in an author stylesheet 
   --&gt; should check whether elements in any child treescopes of document and in some treescopes whose parent treescopes have apply-author-styles true. If so, try to apply. Otherwise, ignore.

e.g.
document:
&lt;style&gt;
div::x-foo { ... }
&lt;/style&gt;

#shadow-root
   div::x-foo &lt;--- apply
   #shadow-root
       #shadow-root
           div::x-foo &lt;--- not apply

- custom pseudo in some stylesheet in a shadow dom tree
  --&gt; for the given element, looking at enclosing shadow dom trees from the element&apos;s parent treescope:
      - an enclosing shadow dom tree has apply-author-styles false, stop.
      - check all custom pseudo styles in the current shadow dom tree,
      - walk up to an shadow dom tree which encloses the current one.

e.g.
#shadow-root
   &lt;style&gt; div::x-foo { ... }
   #shadow-root (apply-author-styles: true)
       #shadow-root
           div::x-foo &lt;--- apply

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791609</commentid>
    <comment_count>4</comment_count>
      <attachid>179464</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-14 07:54:22 -0800</bug_when>
    <thetext>Comment on attachment 179464
WIP

Attachment 179464 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15353001

New failing tests:
fast/dom/shadow/shadow-nested-pseudo-id.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791636</commentid>
    <comment_count>5</comment_count>
      <attachid>179464</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-14 08:41:21 -0800</bug_when>
    <thetext>Comment on attachment 179464
WIP

Attachment 179464 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15343003

New failing tests:
fast/dom/shadow/shadow-nested-pseudo-id.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792447</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-16 19:50:30 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; My patch is still &quot;WIP&quot;, however I would like to ask feedbacks. I&apos;m afraid that I&apos;m on the wrong way to fix this issue.
&gt; 
&gt; What I&apos;m trying to do is:
&gt; - custom pseudo in UA stylesheets
&gt;    --&gt; should check whether elements in any treescope match or not.
&gt; 
&gt; e.g.
&gt; html.css:
&gt; progress:-webkit-progress-value { ... }
&gt; 
&gt; #shadow-root
&gt;     #shadow-root
&gt;        div::-webkit-progress-value &lt;--- always apply above rule

I am assuming that by &quot;div::-webkit-progress-value&quot; you mean &quot;div[pseudo=-webkit-progress-value]&quot;. Right?

In this case, yes. (naturally, only if the host of the tree in which the div is located has tag name &quot;progress&quot;)

I apologize, I didn&apos;t have a chance to look at this over the weekend, but I&apos;ll attack this Monday! :)

&gt; 
&gt; 
&gt; - custom pseudo in an author stylesheet 
&gt;    --&gt; should check whether elements in any child treescopes of document and in some treescopes whose parent treescopes have apply-author-styles true. If so, try to apply. Otherwise, ignore.
&gt; 
&gt; e.g.
&gt; document:
&gt; &lt;style&gt;
&gt; div::x-foo { ... }
&gt; &lt;/style&gt;
&gt; 
&gt; #shadow-root
&gt;    div::x-foo &lt;--- apply
&gt;    #shadow-root
&gt;        #shadow-root
&gt;            div::x-foo &lt;--- not apply
&gt; 
&gt; - custom pseudo in some stylesheet in a shadow dom tree
&gt;   --&gt; for the given element, looking at enclosing shadow dom trees from the element&apos;s parent treescope:
&gt;       - an enclosing shadow dom tree has apply-author-styles false, stop.
&gt;       - check all custom pseudo styles in the current shadow dom tree,
&gt;       - walk up to an shadow dom tree which encloses the current one.
&gt; 
&gt; e.g.
&gt; #shadow-root
&gt;    &lt;style&gt; div::x-foo { ... }
&gt;    #shadow-root (apply-author-styles: true)
&gt;        #shadow-root
&gt;            div::x-foo &lt;--- apply
&gt; 
&gt; Best regards,
&gt; Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792477</commentid>
    <comment_count>7</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-16 22:59:28 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #3)
&gt; &gt; My patch is still &quot;WIP&quot;, however I would like to ask feedbacks. I&apos;m afraid that I&apos;m on the wrong way to fix this issue.
&gt; &gt; 
&gt; &gt; What I&apos;m trying to do is:
&gt; &gt; - custom pseudo in UA stylesheets
&gt; &gt;    --&gt; should check whether elements in any treescope match or not.
&gt; &gt; 
&gt; &gt; e.g.
&gt; &gt; html.css:
&gt; &gt; progress:-webkit-progress-value { ... }
&gt; &gt; 
&gt; &gt; #shadow-root
&gt; &gt;     #shadow-root
&gt; &gt;        div::-webkit-progress-value &lt;--- always apply above rule
&gt; 
&gt; I am assuming that by &quot;div::-webkit-progress-value&quot; you mean &quot;div[pseudo=-webkit-progress-value]&quot;. Right?

Yes, right. Sorry for writing ambiguous things.

&gt; In this case, yes. (naturally, only if the host of the tree in which the div is located has tag name &quot;progress&quot;)
&gt; 
&gt; I apologize, I didn&apos;t have a chance to look at this over the weekend, but I&apos;ll attack this Monday! :)

Thank you!

So I updated my ambiguous diagrams...

&gt; &gt; - custom pseudo in an author stylesheet 
&gt; &gt;    --&gt; should check whether elements in any child treescopes of document and in some treescopes whose parent treescopes have apply-author-styles true. If so, try to apply. Otherwise, ignore.
&gt; &gt; 
&gt; &gt; e.g.
&gt; &gt; document:
&gt; &gt; &lt;style&gt;
&gt; &gt; div::x-foo { ... }
&gt; &gt; &lt;/style&gt;
&gt; &gt; 
&gt; &gt; #shadow-root
&gt; &gt;    div::x-foo &lt;--- apply
&gt; &gt;    #shadow-root
&gt; &gt;        #shadow-root
&gt; &gt;            div::x-foo &lt;--- not apply

#document:
&lt;style&gt;
div::x-foo { ... }
&lt;/style&gt;

div
  #shadow-root
      div[pseudo=x-foo] &lt;--- apply
...
      div
          #shadow-root
             div
                 #shadow-root
                     div[pseudo=x-foo] &lt;--- not apply


With apply-author-styles,

#document:

div
  #shadow-root
      &lt;style&gt;
          div::x-foo { ... }
      &lt;/style&gt;
...
      div
          #shadow-root (apply-author-styles: true)
             div
                 #shadow-root (apply-author-styles: false)
                     div[pseudo=x-foo] &lt;--- apply

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792527</commentid>
    <comment_count>8</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-17 00:32:20 -0800</bug_when>
    <thetext>I missed the following case, reported by layout test: shadow-netsted-pseudo-id.html:

p::x-shadow-child::x-nested-shadow-child {
  background-color: green;
}

So I think, we need scopeOfLastElement in SelectorChecker, introduced by hayato@ in https://bugs.webkit.org/show_bug.cgi?id=82169,

#if ENABLE(SHADOW_DOM)
        if (context.scopeOfLastElement) {
            // FIXME: Check the scope more strictly.                            
            // Obtained from https://bugs.webkit.org/attachment.cgi?id=176892   
            // Should wait till the original bug is fixed.                      
            return context.scopeOfLastElement-&gt;treeScope() == context.element-&gt;\
treeScope() ? SelectorMatches : SelectorFailsLocally;
        }
#endif

I&apos;m thinking of:
- for author stylesheets (not scoped), set scopeOfLastElement document. So I can fix:

New failing tests:
fast/dom/shadow/shadow-nested-pseudo-id.html

I will update the patch which uses hayato@&apos;s code.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792602</commentid>
    <comment_count>9</comment_count>
      <attachid>179709</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-17 03:21:27 -0800</bug_when>
    <thetext>Created attachment 179709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792603</commentid>
    <comment_count>10</comment_count>
      <attachid>179709</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-17 03:28:34 -0800</bug_when>
    <thetext>Comment on attachment 179709
Patch

Attachment 179709 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15378623</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793155</commentid>
    <comment_count>11</comment_count>
      <attachid>179709</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-17 16:41:02 -0800</bug_when>
    <thetext>Comment on attachment 179709
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:641
&gt; +void StyleResolver::collectMatchingRulesForPseudo(RuleSet* rules, int&amp; firstRuleIndex, int&amp; lastRuleIndex, const MatchOptions&amp; options)

collectMatchingPseudoElementRules</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793160</commentid>
    <comment_count>12</comment_count>
      <attachid>179709</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-17 16:43:48 -0800</bug_when>
    <thetext>Comment on attachment 179709
Patch

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

&gt; Source/WebCore/css/StyleScopeResolver.cpp:161
&gt; +    applyAuthorStyles = false;
&gt; +    // m_stackParentBoundsIndex + 1 doesn&apos;t match any items in m_stack.
&gt; +    if (element-&gt;shadowPseudoId().isEmpty())
&gt; +        return m_stackParentBoundsIndex + 1;

This seems like it could just be moved outside of this function.

&gt; Source/WebCore/css/StyleScopeResolver.cpp:167
&gt; +    for (; parent &amp;&amp; !parent-&gt;isShadowRoot(); parent = parent-&gt;parentOrHostNode()) { }

Why can&apos;t we just go parentTreeScope = m_stackParent-&gt;treeScope()?

&gt; Source/WebCore/css/StyleScopeResolver.cpp:174
&gt; +    return toShadowRoot(parent)-&gt;applyAuthorStyles() ? m_stackParentBoundsIndex : m_stackParentBoundsIndex - 1;

So it&apos;s always either at the end of the stack or just preceding it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793161</commentid>
    <comment_count>13</comment_count>
      <attachid>179709</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-17 16:44:12 -0800</bug_when>
    <thetext>Comment on attachment 179709
Patch

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

&gt; Source/WebCore/css/StyleResolver.h:375
&gt; +    bool checkSelector(const RuleData&amp;, const ContainerNode* scope, const ContainerNode* scopeOfLastElement);

This is nasty :-\</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793316</commentid>
    <comment_count>14</comment_count>
      <attachid>179709</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-17 20:45:22 -0800</bug_when>
    <thetext>Comment on attachment 179709
Patch

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

&gt; Source/WebCore/css/SelectorChecker.cpp:481
&gt; +            return context.scopeOfLastElement-&gt;treeScope() == context.element-&gt;treeScope() ? SelectorMatches : SelectorFailsLocally;

Why are we doing this in checkSelector? I should know this way above (at the level of a rule) whether the tree scope will match. This is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793384</commentid>
    <comment_count>15</comment_count>
      <attachid>179709</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-17 22:57:07 -0800</bug_when>
    <thetext>Comment on attachment 179709
Patch

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

Thank you for reviewing.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:481
&gt;&gt; +            return context.scopeOfLastElement-&gt;treeScope() == context.element-&gt;treeScope() ? SelectorMatches : SelectorFailsLocally;
&gt; 
&gt; Why are we doing this in checkSelector? I should know this way above (at the level of a rule) whether the tree scope will match. This is wrong.

I wrote the document about this:
https://docs.google.com/document/d/1yu-zVrNAO79JFEbnfjI20yrfZ428l3hqKf82k5CU69Q/edit

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:641
&gt;&gt; +void StyleResolver::collectMatchingRulesForPseudo(RuleSet* rules, int&amp; firstRuleIndex, int&amp; lastRuleIndex, const MatchOptions&amp; options)
&gt; 
&gt; collectMatchingPseudoElementRules

Done.

&gt;&gt; Source/WebCore/css/StyleResolver.h:375
&gt;&gt; +    bool checkSelector(const RuleData&amp;, const ContainerNode* scope, const ContainerNode* scopeOfLastElement);
&gt; 
&gt; This is nasty :-\

I see. I checked to use &quot;const MatchOptions&amp;&quot;.

&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:161
&gt;&gt; +        return m_stackParentBoundsIndex + 1;
&gt; 
&gt; This seems like it could just be moved outside of this function.

Done.

&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:167
&gt;&gt; +    for (; parent &amp;&amp; !parent-&gt;isShadowRoot(); parent = parent-&gt;parentOrHostNode()) { }
&gt; 
&gt; Why can&apos;t we just go parentTreeScope = m_stackParent-&gt;treeScope()?

Done.

&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:174
&gt;&gt; +    return toShadowRoot(parent)-&gt;applyAuthorStyles() ? m_stackParentBoundsIndex : m_stackParentBoundsIndex - 1;
&gt; 
&gt; So it&apos;s always either at the end of the stack or just preceding it?

Yeah.  m_stackParentBoundsIndex always have m_stackParent&apos;s shadow root&apos;s bounds index. So,

- If m_stackParent&apos;s shadow root has apply-author-styles true, the parent tree scope of m_stackParent has the same bounds index.
- Otherwise, since ++m_stackParentBoundsIndex when we find a shadow root whose apply-author-styles is false, m_stackParentBoundsIndex-1 is the same as the parent tree scope&apos;s bounds index.

https://docs.google.com/document/d/1HRlJdq6kIFWKHzXL4uDSspsCmnHyiGxwwVbROpySrOg/edit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793385</commentid>
    <comment_count>16</comment_count>
      <attachid>179881</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-17 22:58:21 -0800</bug_when>
    <thetext>Created attachment 179881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794059</commentid>
    <comment_count>17</comment_count>
      <attachid>179881</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-18 14:32:35 -0800</bug_when>
    <thetext>Comment on attachment 179881
Patch

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

&gt; Source/WebCore/css/StyleScopeResolver.cpp:154
&gt; +int StyleScopeResolver::findStyleBoundsOfParentTreeScope(const Element* element, bool&amp; applyAuthorStyles) const

You don&apos;t need element arg anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794068</commentid>
    <comment_count>18</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-18 14:38:35 -0800</bug_when>
    <thetext>(In reply to comment #15)

&gt; I wrote the document about this:
&gt; https://docs.google.com/document/d/1yu-zVrNAO79JFEbnfjI20yrfZ428l3hqKf82k5CU69Q/edit

I read the doc. It seems that you&apos;ve arrived at the same conclusion as I have (in solution 1) -- the number of pseudo-elements should be stored with StyleRule (since it&apos;s known at parsing and does not change for each style recalc), and certainly not re-determined for each checkSelector.

That stored number of pseudo-elements is exactly the increment to determine the scope on which to match elements.

Or am I still missing something?

&gt; 
&gt; I see. I checked to use &quot;const MatchOptions&amp;&quot;.

The reason why I thought it was nasty is because this does not belong in checking selector. This information is known well before we get to individual selector checking. We can discard an entire rule simply based on the number of pseudo-elements it contains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794290</commentid>
    <comment_count>19</comment_count>
      <attachid>180078</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-18 19:59:15 -0800</bug_when>
    <thetext>Created attachment 180078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794297</commentid>
    <comment_count>20</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-18 20:07:02 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #15)
&gt; 
&gt; &gt; I wrote the document about this:
&gt; &gt; https://docs.google.com/document/d/1yu-zVrNAO79JFEbnfjI20yrfZ428l3hqKf82k5CU69Q/edit
&gt; 
&gt; I read the doc. It seems that you&apos;ve arrived at the same conclusion as I have (in solution 1) -- the number of pseudo-elements should be stored with StyleRule (since it&apos;s known at parsing and does not change for each style recalc), and certainly not re-determined for each checkSelector.
&gt; 
&gt; That stored number of pseudo-elements is exactly the increment to determine the scope on which to match elements.
&gt; 
&gt; Or am I still missing something?

Yeah. For fixing only this issue, I agree that we don&apos;t need solution2 (=lastScopeOfElement).  I forgot to add the reason why we need solution2, not solution1 to the document.

The idea, lastScopeOfElement comes from https://bugs.webkit.org/show_bug.cgi?id=82169, &quot;implement /select/ reference combinator&quot;. To implement the function, we will need solution2, because number of /select/ doesn&apos;t provide any information about how many treescopes we have to check.

So I think, it would be better to re-use lastScopeOfElement for fixing this issue. If this reason is weak, I will add 82169 to &quot;Depends on&quot; and will wait till hayato-san&apos;s patch is landed.

&gt; &gt; I see. I checked to use &quot;const MatchOptions&amp;&quot;.
&gt; 
&gt; The reason why I thought it was nasty is because this does not belong in checking selector. This information is known well before we get to individual selector checking. We can discard an entire rule simply based on the number of pseudo-elements it contains.

The changes about checkSelector(...)  also comes from https://bugs.webkit.org/show_bug.cgi?id=82169.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794298</commentid>
    <comment_count>21</comment_count>
      <attachid>179881</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-12-18 20:07:19 -0800</bug_when>
    <thetext>Comment on attachment 179881
Patch

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

&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:154
&gt;&gt; +int StyleScopeResolver::findStyleBoundsOfParentTreeScope(const Element* element, bool&amp; applyAuthorStyles) const
&gt; 
&gt; You don&apos;t need element arg anymore.

Thank you. I missed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794309</commentid>
    <comment_count>22</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-18 20:30:13 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #15)
&gt; &gt; 
&gt; &gt; &gt; I wrote the document about this:
&gt; &gt; &gt; https://docs.google.com/document/d/1yu-zVrNAO79JFEbnfjI20yrfZ428l3hqKf82k5CU69Q/edit
&gt; &gt; 
&gt; &gt; I read the doc. It seems that you&apos;ve arrived at the same conclusion as I have (in solution 1) -- the number of pseudo-elements should be stored with StyleRule (since it&apos;s known at parsing and does not change for each style recalc), and certainly not re-determined for each checkSelector.
&gt; &gt; 
&gt; &gt; That stored number of pseudo-elements is exactly the increment to determine the scope on which to match elements.
&gt; &gt; 
&gt; &gt; Or am I still missing something?
&gt; 
&gt; Yeah. For fixing only this issue, I agree that we don&apos;t need solution2 (=lastScopeOfElement).  I forgot to add the reason why we need solution2, not solution1 to the document.
&gt; 
&gt; The idea, lastScopeOfElement comes from https://bugs.webkit.org/show_bug.cgi?id=82169, &quot;implement /select/ reference combinator&quot;. To implement the function, we will need solution2, because number of /select/ doesn&apos;t provide any information about how many treescopes we have to check.
&gt; 
&gt; So I think, it would be better to re-use lastScopeOfElement for fixing this issue. If this reason is weak, I will add 82169 to &quot;Depends on&quot; and will wait till hayato-san&apos;s patch is landed.

That patch won&apos;t ever land, since the syntax is changing. Also, I don&apos;t think this is the right approach anyway. Let&apos;s not do this. Please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801140</commentid>
    <comment_count>23</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-06 20:18:56 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I wrote the document about this:
&gt; &gt; &gt; &gt; https://docs.google.com/document/d/1yu-zVrNAO79JFEbnfjI20yrfZ428l3hqKf82k5CU69Q/edit
&gt; &gt; &gt; 
&gt; &gt; &gt; I read the doc. It seems that you&apos;ve arrived at the same conclusion as I have (in solution 1) -- the number of pseudo-elements should be stored with StyleRule (since it&apos;s known at parsing and does not change for each style recalc), and certainly not re-determined for each checkSelector.
&gt; &gt; &gt; 
&gt; &gt; &gt; That stored number of pseudo-elements is exactly the increment to determine the scope on which to match elements.
&gt; &gt; &gt; 
&gt; &gt; &gt; Or am I still missing something?
&gt; &gt; 
&gt; &gt; Yeah. For fixing only this issue, I agree that we don&apos;t need solution2 (=lastScopeOfElement).  I forgot to add the reason why we need solution2, not solution1 to the document.
&gt; &gt; 
&gt; &gt; The idea, lastScopeOfElement comes from https://bugs.webkit.org/show_bug.cgi?id=82169, &quot;implement /select/ reference combinator&quot;. To implement the function, we will need solution2, because number of /select/ doesn&apos;t provide any information about how many treescopes we have to check.
&gt; &gt; 
&gt; &gt; So I think, it would be better to re-use lastScopeOfElement for fixing this issue. If this reason is weak, I will add 82169 to &quot;Depends on&quot; and will wait till hayato-san&apos;s patch is landed.
&gt; 
&gt; That patch won&apos;t ever land, since the syntax is changing. Also, I don&apos;t think this is the right approach anyway. Let&apos;s not do this. Please.

I know. I&apos;m not sure whether hayato-san will re-use the existing bug or file a new bug for the new syntax. However his new patch for the new syntax still requires lastScopeOfElement as far as I know.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802026</commentid>
    <comment_count>24</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-07 22:22:58 -0800</bug_when>
    <thetext>Because dglazkov prefers the counting solution, and because bug 82169 is blocked on the CSS4 selectors spec, let’s use the counting approach to unblock this work. Let’s abandon &quot;solution 2&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802126</commentid>
    <comment_count>25</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-08 01:07:11 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Because dglazkov prefers the counting solution, and because bug 82169 is blocked on the CSS4 selectors spec, let’s use the counting approach to unblock this work. Let’s abandon &quot;solution 2&quot;.

However if we have some css selector which has both :distributed and x-???, &quot;solution 1&quot;(i.e. couting) doesn&apos;t work.
After :distributed patch is landed, we will have to remove &quot;solution 1&quot; code and to re-add &quot;solution 2&quot;.

Is this good approach? If so, I will implement &quot;solution 1&quot; and wait for &quot;:distributed&quot;.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803020</commentid>
    <comment_count>26</comment_count>
      <attachid>180078</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-08 22:01:08 -0800</bug_when>
    <thetext>Comment on attachment 180078
Patch

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

Some nits inline. I am having a hard time following the code change because I am not very familiar with selector checking.

&gt; LayoutTests/fast/dom/shadow/pseudo-style-in-shadow.html:11
&gt; +var host = document.getElementById(&quot;host&quot;);

I think it is neater to use &apos; for JavaScript string literals. That way you use the same quotes (&quot;) for attributes both in markup, as on line 4, and markup in JavaScript string literals, as on line 13.

Line 31, etc. will also be much cleaner if you use &apos;.

&gt; LayoutTests/fast/dom/shadow/pseudo-style-in-shadow.html:30
&gt; +debug(&quot;Case1: A pseudo style is in the same treescope as div with x-foo pseudo.&quot;);

It would be typical to put a space after &quot;Case&quot;.

&gt; LayoutTests/fast/dom/shadow/pseudo-style-in-shadow.html:67
&gt; +&lt;/html&gt;

What about successfullyParsed and including js-test-post.js?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803029</commentid>
    <comment_count>27</comment_count>
      <attachid>180078</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-08 22:08:21 -0800</bug_when>
    <thetext>Comment on attachment 180078
Patch

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

&gt; LayoutTests/fast/dom/shadow/pseudo-style-in-shadow.html:1
&gt; +&lt;!doctype html&gt;

You should add tests with multiple shadow roots and reprojection through &lt;shadow&gt; and &lt;content&gt; as well as nesting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803030</commentid>
    <comment_count>28</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-08 22:12:37 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; … if we have some css selector which has both :distributed and x-???, &quot;solution 1&quot;(i.e. couting) doesn&apos;t work.

My intuition is that CSS selectors should work compositionally, and anywhere they don’t is a bad sign!

The reason you think counting does not work is because given a rule R:

A::distributed(::x-foo) { … }

The scope associated with R (A’s scope) has no countable relationship to the scope of ::x-foo because of reprojection.

However can’t you simply treat the subselector ::distributed(…) is matching as a separate selector? Set the count to zero, and interpret relative to the scope of the current element (ie wherever ::distributed tried to start matching?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803175</commentid>
    <comment_count>29</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-09 02:42:14 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #25)
&gt; &gt; … if we have some css selector which has both :distributed and x-???, &quot;solution 1&quot;(i.e. couting) doesn&apos;t work.
&gt; 
&gt; My intuition is that CSS selectors should work compositionally, and anywhere they don’t is a bad sign!
&gt; 
&gt; The reason you think counting does not work is because given a rule R:
&gt; 
&gt; A::distributed(::x-foo) { … }
&gt; 
&gt; The scope associated with R (A’s scope) has no countable relationship to the scope of ::x-foo because of reprojection.
&gt; 
&gt; However can’t you simply treat the subselector ::distributed(…) is matching as a separate selector? Set the count to zero, and interpret relative to the scope of the current element (ie wherever ::distributed tried to start matching?)

I found that we can ignore all custom pseudo in ::distributed. So talking about the above example,
we don&apos;t need to check &quot;count&quot;. However, if we have

   C::x-foobar &gt; A::x-bar::distributed(B::x-foo)

we have to count all custom pseudo outside of ::distributed, e.g. 2 (x-foobar and x-bar), in CSSParser.

... however after ::distributed patch is landed, we will have lastScopeOfElement.
I don&apos;t know any good reason why we have to use both &quot;count&quot; and &quot;lastScopeOfElement&quot; at the same time or why we have to select &quot;count&quot; solution or &quot;lastScopeOfElement&quot; solution in StyleResolver (or somewhere). Just we can set lastScopeOfElement as the scope of matched rules.

Best regards,
Takashi Sakamoto






Since all selector matches from right to left order, firstly we have to check whether the given element matches ::x-foo or not. Next, we will see ::distributed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803176</commentid>
    <comment_count>30</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-09 02:43:07 -0800</bug_when>
    <thetext>(In reply to comment #29)

I&apos;m sorry. I forgot to delete the following sentence. Please ignore this.

&gt; Since all selector matches from right to left order, firstly we have to check whether the given element matches ::x-foo or not. Next, we will see ::distributed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803202</commentid>
    <comment_count>31</comment_count>
      <attachid>181890</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-09 03:33:39 -0800</bug_when>
    <thetext>Created attachment 181890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803203</commentid>
    <comment_count>32</comment_count>
      <attachid>180078</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-09 03:35:22 -0800</bug_when>
    <thetext>Comment on attachment 180078
Patch

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

Thank you for reviewing.

&gt;&gt; LayoutTests/fast/dom/shadow/pseudo-style-in-shadow.html:1
&gt;&gt; +&lt;!doctype html&gt;
&gt; 
&gt; You should add tests with multiple shadow roots and reprojection through &lt;shadow&gt; and &lt;content&gt; as well as nesting.

I see. Done.

&gt;&gt; LayoutTests/fast/dom/shadow/pseudo-style-in-shadow.html:11
&gt;&gt; +var host = document.getElementById(&quot;host&quot;);
&gt; 
&gt; I think it is neater to use &apos; for JavaScript string literals. That way you use the same quotes (&quot;) for attributes both in markup, as on line 4, and markup in JavaScript string literals, as on line 13.
&gt; 
&gt; Line 31, etc. will also be much cleaner if you use &apos;.

Done.

&gt;&gt; LayoutTests/fast/dom/shadow/pseudo-style-in-shadow.html:30
&gt;&gt; +debug(&quot;Case1: A pseudo style is in the same treescope as div with x-foo pseudo.&quot;);
&gt; 
&gt; It would be typical to put a space after &quot;Case&quot;.

Done.

&gt;&gt; LayoutTests/fast/dom/shadow/pseudo-style-in-shadow.html:67
&gt;&gt; +&lt;/html&gt;
&gt; 
&gt; What about successfullyParsed and including js-test-post.js?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803792</commentid>
    <comment_count>33</comment_count>
      <attachid>181890</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-01-09 15:57:36 -0800</bug_when>
    <thetext>Comment on attachment 181890
Patch

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

The vision of the actual architecture eludes me, but all this new code makes me wonder why we make a distinction between scoped styles and document styles. After all, they are simply styles scoped at the document. I think this is where the path to the right architecture lies.

&gt; Source/WebCore/css/StyleResolver.cpp:752
&gt; +        bool elementHasShadowPseudo = !m_element-&gt;shadowPseudoId().isEmpty();

This is a bad smell. We do this earlier in collectMatchingPseudoElementRules, and this logic looks like duplication, but not quite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803970</commentid>
    <comment_count>34</comment_count>
      <attachid>181890</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-09 19:37:36 -0800</bug_when>
    <thetext>Comment on attachment 181890
Patch

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

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:752
&gt;&gt; +        bool elementHasShadowPseudo = !m_element-&gt;shadowPseudoId().isEmpty();
&gt; 
&gt; This is a bad smell. We do this earlier in collectMatchingPseudoElementRules, and this logic looks like duplication, but not quite.

So... do you mean we have to always invoke collectMatchingPseudoElementRules even if a given element has no pseudo id?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803986</commentid>
    <comment_count>35</comment_count>
      <attachid>181890</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-09 19:49:36 -0800</bug_when>
    <thetext>Comment on attachment 181890
Patch

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

&gt;&gt;&gt; Source/WebCore/css/StyleResolver.cpp:752
&gt;&gt;&gt; +        bool elementHasShadowPseudo = !m_element-&gt;shadowPseudoId().isEmpty();
&gt;&gt; 
&gt;&gt; This is a bad smell. We do this earlier in collectMatchingPseudoElementRules, and this logic looks like duplication, but not quite.
&gt; 
&gt; So... do you mean we have to always invoke collectMatchingPseudoElementRules even if a given element has no pseudo id?

I mean, if possible, I would like to do in the following way:

if (hasPseudoId) {
   // loop with collectMatchingPseudoElementRules
   for ( ... ) {
      // ...
      collectMatchingPseudoElementRuels(...);
      ...
      if (documnetScope &amp;&amp; ... ) {
         collectMatchingRules(...);
         ...
      }
   }
} else {
   // loop without collectMatchingPseudoElementRules
   for ( ... ) {
      // This is the same as the code before applying this patch.
   }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804221</commentid>
    <comment_count>36</comment_count>
      <attachid>182106</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-10 03:27:23 -0800</bug_when>
    <thetext>Created attachment 182106
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804222</commentid>
    <comment_count>37</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-10 03:28:44 -0800</bug_when>
    <thetext>I tried to make bad layout tests, which look like fuzzer, better.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133790</commentid>
    <comment_count>38</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-10-16 00:57:19 -0700</bug_when>
    <thetext>This bug is no longer relevant since the old shadow DOM implementation has been replaced by a new one.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>175406</attachid>
            <date>2012-11-21 03:35:00 -0800</date>
            <delta_ts>2012-11-21 03:35:00 -0800</delta_ts>
            <desc>repro</desc>
            <filename>repro.html</filename>
            <type>text/html</type>
            <size>433</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">PCFkb2N0eXBlIGh0bWw+CjxodG1sPgo8aGVhZD4KPHNjcmlwdD4KZnVuY3Rpb24gcnVuVGVzdCgp
IHsKICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hvc3QnKTsKICAgIHZh
ciBzaGFkb3dSb290ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CiAgICBzaGFkb3dSb290
LmlubmVySFRNTCA9ICc8c3R5bGU+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUgeyBi
YWNrZ3JvdW5kLWNvbG9yOiByZWQ7IH0gcHJvZ3Jlc3MgeyAtd2Via2l0LWFwcGVhcmFuY2U6IG5v
bmU7IH08L3N0eWxlPjxwcm9ncmVzcyB2YWx1ZT0iNTAiIG1heD0iMTAwIj48L3Byb2dyZXNzPic7
Cn0KPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgogIDxkaXYgaWQ9
Imhvc3QiPlRlc3Q8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179464</attachid>
            <date>2012-12-14 03:38:29 -0800</date>
            <delta_ts>2012-12-17 03:21:23 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-102919-20121214203548.patch</filename>
            <type>text/plain</type>
            <size>17841</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODY2N2MwZmE3ZmQ2NDNm
MDNhYTk2MDM3YWZhZmFkMmMwZTFlNDg4MS4uMzJmZjczNDcyZGM0NzU4ODEyMzdiMWQ2YzJjMjYy
Mzg4NTdhNWYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTEyLTE0ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV06
IGN1c3RvbSBwc2V1ZG8gaW4gc3R5bGVzIGluIHNoYWRvdyBkb20gdHJlZXMgZG9lc24ndCB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI5MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXN0b20g
cHNldWRvIHN0eWxlcyBkZWNsYXJlZCBpbiBhIHBhcmVudCB0cmVlc2NvcGUgc2hvdWxkIGJlIGNo
ZWNrZWQKKyAgICAgICAgZm9yIGVsZW1lbnRzIGluIHRoZSB0cmVlc2NvcGUuIEN1c3RvbSBwc2V1
ZG8gc3R5bGVzIGluIGFuIGF1dGhvcgorICAgICAgICBzdHlsZXNoZWV0IHNob3VsZCBvbmx5IGFw
cGx5IHRvIGVsZW1lbnRzIGluIGEgY2hpbGQgdHJlZSBzY29wZSBvZgorICAgICAgICBkb2N1bWVu
dCBvciBpbiBzb21lIHRyZWVzY29wZSB3aG9zZSBwYXJlbnQgdHJlZXNjb3BlIGhhcworICAgICAg
ICBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hh
ZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cuaHRtbAorCisgICAgICAgICogY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzUGVyU2NvcGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
TWF0Y2hPcHRpb25zOjpNYXRjaE9wdGlvbnMpOgorICAgICAgICAoTWF0Y2hPcHRpb25zKToKKyAg
ICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVNjb3BlUmVzb2x2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZmluZFN0eWxlQm91bmRzT2ZQYXJlbnRU
cmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVS
ZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVyKToKKwogMjAxMi0xMi0xNCAg
S3VuaWhpa28gU2FrYW1vdG8gIDxrc2FrYW1vdG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEhv
dXJzIGZpZWxkIG9mIGRhdGUvdGltZSBpbnB1dCBVSSBzaG91bGQgcmVzcGVjdCBzdGVwIGF0dHJp
YnV0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGQwNjVkODU5OGFmOGI4
OTUyMmQ1Njc4MWVkMGU4NDMwYzA5ZTJiZGUuLjE0YWQxOWYyMzdjN2U4N2Y0MWU5NzA1MjQ3MDgw
Yzk4MWQ2MzRkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTYzOCwx
NiArNjM4LDM2IEBAIGlubGluZSBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5n
VUFSdWxlcygpCiAKIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVz
ID0gZmFsc2U7CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoUnVs
ZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29u
c3QgTWF0Y2hPcHRpb25zJiBvcHRpb25zKQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclBzZXVkbyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAg
QVNTRVJUKHJ1bGVzKTsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIAogICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7Ci0gICAgaWYg
KCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7
Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+c2hhZG93UHNldWRv
RWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUlu
ZGV4LCBvcHRpb25zKTsKKyAgICBpZiAocHNldWRvSWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKKworICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChydWxlcy0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmlt
cGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKK30KKwordm9p
ZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgQVNTRVJUKHJ1bGVzKTsKKyAgICBBU1NFUlQobV9lbGVtZW50KTsK
KworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIGlmIChvcHRpb25zLm1hdGNoUHNldWRvKSB7
CisjZW5kaWYKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IG1fZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKTsKKyAgICAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChtX3N0eWxlZEVsZW1lbnQpOworICAgICAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNl
dWRvSWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwor
ICAgICAgICB9CisjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgfQorI2VuZGlmCiAKICAgICAv
LyBDaGVjayB3aGV0aGVyIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGFyZSBhcHBsaWNhYmxlIGluIHRo
ZSBjdXJyZW50IHRyZWUgc2NvcGUuIENyaXRlcmlhIGZvciB0aGlzOgogICAgIC8vIGEpIGl0J3Mg
YSBVQSBydWxlCkBAIC03MjAsNiArNzQwLDIzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFu
ZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgfQogfQogCisj
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCit2b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXNQZXJTY29wZShNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0
YWNrRnJhbWUmIGZyYW1lLCBib29sIHBzZXVkb09ubHkpCit7CisgICAgbV9tYXRjaGVkUnVsZXMu
Y2xlYXIoKTsKKyAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CisKKyAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNs
dWRlRW1wdHlSdWxlcywgZnJhbWUubV9zY29wZSk7CisgICAgaWYgKHBzZXVkb09ubHkpCisgICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUHNldWRvKGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0
LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9w
dGlvbnMpOworICAgIGVsc2UgeworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhmcmFtZS5t
X3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxh
c3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JS
ZWdpb24oZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVz
dWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgfQorICAgIHNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworfQorI2VuZGlmCisKIHZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShT
SEFET1dfRE9NKQpAQCAtNzMxLDI0ICs3NjgsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQK
ICAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IG1fZWxlbWVudC0+dHJlZVNjb3BlKCkt
PmFwcGx5QXV0aG9yU3R5bGVzKCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7
CiAgICAgICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXpl
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewot
ICAgICAgICAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0g
MTsKIAorICAgICAgICAvLyBUbyBhcHBseSBwc2V1ZG8gc3R5bGVzLCBuZWVkIHRvIHNlZSBzdHls
ZXMgd2hvc2Ugc2NvcGluZyBlbGVtZW50cworICAgICAgICAvLyBhcmUgaW4gYSBwYXJlbnQgdHJl
ZSBzY29wZS4gQWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwYXJlbnQgdHJlZQorICAgICAgICAv
LyBzY29wZSdzIGFwcGx5LWF1dGhvci1zdHlsZXMgZmxhZy4KKyAgICAgICAgYm9vbCBwYXJlbnRB
cHBseUF1dGhvclN0eWxlcyA9IGZhbHNlOworICAgICAgICBpbnQgcGFyZW50VHJlZVNjb3BlQm91
bmRzSW5kZXggPSBtX3Njb3BlUmVzb2x2ZXItPmZpbmRTdHlsZUJvdW5kc09mUGFyZW50VHJlZVNj
b3BlKG1fZWxlbWVudCwgcGFyZW50QXBwbHlBdXRob3JTdHlsZXMpOworCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewogICAgICAgICAgICAgY29uc3Qg
U3R5bGVTY29wZVJlc29sdmVyOjpTdGFja0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+
c3RhY2tGcmFtZUF0KGkpOwogICAgICAgICAgICAgZG9jdW1lbnRTY29wZSA9IGRvY3VtZW50U2Nv
cGUgJiYgIWZyYW1lLm1fc2NvcGUtPmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAgICAgICBpZiAo
ZG9jdW1lbnRTY29wZSkgewotICAgICAgICAgICAgICAgIGlmICghYXBwbHlBdXRob3JTdHlsZXMp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChhcHBs
eUF1dGhvclN0eWxlcyB8fCBwYXJlbnRBcHBseUF1dGhvclN0eWxlcykKKyAgICAgICAgICAgICAg
ICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzUGVyU2NvcGUocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxl
cywgZnJhbWUsICFhcHBseUF1dGhvclN0eWxlcyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGlmICghbV9zY29wZVJlc29sdmVyLT5tYXRjaGVzU3R5bGVCb3VuZHMoZnJh
bWUpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBib29s
IG1hdGNoQm91bmRzID0gbV9zY29wZVJlc29sdmVyLT5tYXRjaGVzU3R5bGVCb3VuZHMoZnJhbWUp
OworICAgICAgICAgICAgICAgIGlmIChtYXRjaEJvdW5kcyB8fCBmcmFtZS5tX2F1dGhvclN0eWxl
Qm91bmRzSW5kZXggPT0gcGFyZW50VHJlZVNjb3BlQm91bmRzSW5kZXgpCisgICAgICAgICAgICAg
ICAgICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXNQZXJTY29wZShyZXN1bHQsIGluY2x1ZGVFbXB0
eVJ1bGVzLCBmcmFtZSwgIW1hdGNoQm91bmRzKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMsIGZyYW1lLm1fc2NvcGUp
OwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCByZXN1
bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwg
b3B0aW9ucyk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFt
ZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2Vz
Lmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKLSAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC04MDEsNyArODM4LDE0
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzCiAKICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9y
IHJ1bGVzLgogICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyNp
ZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICBpZiAoVHJlZVNjb3BlKiBwYXJlbnRUcmVlU2NvcGUg
PSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpLT5wYXJlbnRUcmVlU2NvcGUoKSkKKyAgICAgICAgb3B0
aW9ucy5tYXRjaFBzZXVkbyA9IHBhcmVudFRyZWVTY29wZSA9PSBkb2N1bWVudCgpIHx8IHBhcmVu
dFRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKKyNlbmRpZgogICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyNpZiBFTkFCTEUo
U0hBRE9XX0RPTSkKKyAgICBvcHRpb25zLm1hdGNoUHNldWRvID0gdHJ1ZTsKKyNlbmRpZgogICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3Vs
dC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBv
cHRpb25zKTsKICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggOTdiY2YxNjk0MDgzZTBhMjZhZGQ0NmFmNGE5
OThkNThmNTRkYjc2ZS4uZGNiMGM0ZDE4ZDYwMTE2ZjMyMmNjZTU5MGU5MzViYzUxNDdmNGI1MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0zNDUsOSArMzQ1LDEwIEBAIHByaXZh
dGU6CiAgICAgfTsKIAogICAgIHN0cnVjdCBNYXRjaE9wdGlvbnMgewotICAgICAgICBNYXRjaE9w
dGlvbnMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUg
PSAwKSA6IHNjb3BlKHNjb3BlKSwgaW5jbHVkZUVtcHR5UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMp
IHsgfQorICAgICAgICBNYXRjaE9wdGlvbnMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUgPSAwLCBib29sIG1hdGNoUHNldWRvID0gdHJ1ZSkgOiBzY29w
ZShzY29wZSksIGluY2x1ZGVFbXB0eVJ1bGVzKGluY2x1ZGVFbXB0eVJ1bGVzKSwgbWF0Y2hQc2V1
ZG8obWF0Y2hQc2V1ZG8pIHsgfQogICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsK
ICAgICAgICAgYm9vbCBpbmNsdWRlRW1wdHlSdWxlczsKKyAgICAgICAgYm9vbCBtYXRjaFBzZXVk
bzsKICAgICB9OwogCiAgICAgc3RhdGljIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hS
ZXN1bHQmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0g
MCwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIGJv
b2wgaW5SZWdpb25SdWxlID0gZmFsc2UpOwpAQCAtMzU5LDggKzM2MCwxMiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1
bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwg
RU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXNQZXJT
Y29wZShNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZWRFbXB0eVJ1bGVzLCBjb25zdCBTdHlsZVNj
b3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmLCBib29sIHBzZXVkb09ubHkpOworI2VuZGlmCiAgICAg
dm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CisgICAgdm9p
ZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclBzZXVkbyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lk
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYp
OwogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCmluZGV4IDczMDA1MGQ2YzRk
ODE3MmU1NTRiZTg2MDI4ZDliYjU3YzdiMTJiOTUuLjYzOGUxMTYzZmQ2YjAzODIyNzUyM2U4NzM2
ZWUxNmYwNDJhYmVjOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3Bl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIu
Y3BwCkBAIC0xMzEsNiArMTMxLDcgQEAgdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnB1c2goY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHMKIAogICAgIGlm
IChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9vdChzY29wZSktPmFwcGx5QXV0
aG9yU3R5bGVzKCkpCiAgICAgICAgICsrbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OworCiAgICAg
Ly8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUgcGFyZW50IG9udG8gdGhlIHN0YWNrLgogICAgIFJ1
bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yKHNjb3BlKTsKICAgICBpZiAocnVsZVNldCkKQEAg
LTE1MCw2ICsxNTEsMjkgQEAgdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnBvcChjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSkKICAgICB9CiB9CiAKK2ludCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmZp
bmRTdHlsZUJvdW5kc09mUGFyZW50VHJlZVNjb3BlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGJv
b2wmIGFwcGx5QXV0aG9yU3R5bGVzKSBjb25zdAoreworICAgIEFTU0VSVChlbGVtZW50KTsKKwor
ICAgIGFwcGx5QXV0aG9yU3R5bGVzID0gZmFsc2U7CisgICAgLy8gbV9zdGFja1BhcmVudEJvdW5k
c0luZGV4ICsgMSBkb2Vzbid0IG1hdGNoIGFueSBpdGVtcyBpbiBtX3N0YWNrLgorICAgIGlmIChl
bGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fc3Rh
Y2tQYXJlbnRCb3VuZHNJbmRleCArIDE7CisKKyAgICBpZiAoIW1fc3RhY2tQYXJlbnQgfHwgIW1f
c3RhY2tQYXJlbnQtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiBtX3N0YWNrUGFy
ZW50Qm91bmRzSW5kZXggKyAxOworCisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
bV9zdGFja1BhcmVudDsKKyAgICBmb3IgKDsgcGFyZW50ICYmICFwYXJlbnQtPmlzU2hhZG93Um9v
dCgpOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9ySG9zdE5vZGUoKSkgeyB9CisgICAgaWYgKCFw
YXJlbnQpCisgICAgICAgIHJldHVybiBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXggLSAxOworICAg
IAorICAgIGlmIChUcmVlU2NvcGUqIHBhcmVudFRyZWVTY29wZSA9IHRvU2hhZG93Um9vdChwYXJl
bnQpLT5wYXJlbnRUcmVlU2NvcGUoKSkKKyAgICAgICAgYXBwbHlBdXRob3JTdHlsZXMgPSBwYXJl
bnRUcmVlU2NvcGUtPmFwcGx5QXV0aG9yU3R5bGVzKCk7CisKKyAgICByZXR1cm4gdG9TaGFkb3dS
b290KHBhcmVudCktPmFwcGx5QXV0aG9yU3R5bGVzKCkgPyBtX3N0YWNrUGFyZW50Qm91bmRzSW5k
ZXggOiBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXggLSAxOworfQorCiB2b2lkIFN0eWxlU2NvcGVS
ZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKQogewog
ICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5i
ZWdpbigpOyBpdCAhPSBtX2F1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAppbmRleCAzYmUzZmY0ZjcwYzczNzViZDAxNDI2YTAwYmE0
MjQxMjg0NjJjYzBlLi4yZTYyNTBiMGUyMzYwOWQ1MmExOWNlZGFjNWRhMWZkM2M2Yjk1YzBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCkBAIC03Myw2ICs3Myw3IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
LnNpemUoKTsgfQogICAgIGNvbnN0IFN0YWNrRnJhbWUmIHN0YWNrRnJhbWVBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5hdChpbmRleCk7IH0KICAgICBib29sIG1hdGNo
ZXNTdHlsZUJvdW5kcyhjb25zdCBTdGFja0ZyYW1lJiBmcmFtZSkgY29uc3QgeyByZXR1cm4gZnJh
bWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsg
fQorICAgIGludCBmaW5kU3R5bGVCb3VuZHNPZlBhcmVudFRyZWVTY29wZShjb25zdCBFbGVtZW50
KiwgYm9vbCYgYXBwbHlBdXRob3JTdHlsZXMpIGNvbnN0OwogICAgIHZvaWQgY29sbGVjdEZlYXR1
cmVzVG8oUnVsZUZlYXR1cmVTZXQmKTsKIAogICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxl
SG9zdCosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDQwY2IzNWFjN2JlZDJmZGYyYjE4OTFlMmQzYWFkZTU4ZTkxYjZl
MzQuLmU1MzNmYTVmZWU1OTQyMTJjYTZiOTVjZGYxMjI4MTg5ODg3N2QwYWEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxMi0xMi0xNCAgVGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5j
b20+CisKKyAgICAgICAgW1NoYWRvdyBET01dOiBjdXN0b20gcHNldWRvIGluIHN0eWxlcyBpbiBz
aGFkb3cgZG9tIHRyZWVzIGRvZXNuJ3Qgd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyOTE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNo
YWRvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9wc2V1
ZG8tc3R5bGUtaW4tc2hhZG93Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTEyLTE0ICBLdW5paGlrbyBT
YWthbW90byAgPGtzYWthbW90b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSG91cnMgZmllbGQg
b2YgZGF0ZS90aW1lIGlucHV0IFVJIHNob3VsZCByZXNwZWN0IHN0ZXAgYXR0cmlidXRlCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRv
dy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxl
LWluLXNoYWRvdy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWUxMjM4ZmYyY2I4OTQwNWZkOTI5
NmY0Y2JiM2JlNTlhYzEyMGI4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE3IEBACitDYXNlMTogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHNhbWUgdHJlZXNjb3BlIGFz
IGRpdiB3aXRoIHgtZm9vIHBzZXVkby4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNv
bG9yIGlzICJyZ2IoMCwgMCwgMCkiCitDYXNlMjogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHBh
cmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLgorUEFTUyBnZXRDb21wdXRl
ZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorQ2FzZTM6IEEgcHNldWRv
IHN0eWxlIGlzIGluIHRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9vIHBzZXVk
by4gVGhlIGRpdidzIHRyZWVzY29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLgorUEFT
UyBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorQ2Fz
ZTQ6IEEgcHNldWRvIHN0eWxlIGlzIGluIHRoZSBncmFuZC1wYXJlbnQgdHJlZXNjb3BlIG9mIGRp
diB3aXRoIHgtZm9vIHBzZXVkby4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9y
IGlzICJyZ2IoMCwgMCwgMCkiCitDYXNlNTogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIGdyYW5k
LXBhcmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiBUaGUgcGFyZW50IHRy
ZWVzY29wZSBvZiB0aGUgZGl2IGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCitQQVNTIGdl
dENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciBpcyAicmdiKDAsIDAsIDI1NSkiCitDYXNlNjog
UHNldWRvIHN0eWxlcyBhcmUgaW4gdGhlIHBhcmVudCBhbmQgZ3JhbmQtcGFyZW50IHRyZWVzY29w
ZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRoZSBk
aXYgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0
YXJnZXQpLmNvbG9yIGlzICJyZ2IoMCwgMTI4LCAwKSIKK0Nhc2U3OiBBIHBzZXVkbyBzdHlsZSBp
cyBpbiBkb2N1bWVudC4gTm8gdHJlZXNjb3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUu
CitQQVNTIGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciBpcyAicmdiKDAsIDAsIDApIgor
Q2FzZTg6IEEgcHNldWRvIHN0eWxlIGlzIGluIGRvY3VtZW50LiBUaGUgcGFyZW50IHRyZWVzY29w
ZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRh
cmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRvdy5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41OWRhZmI0MzVlZDY1OGExM2M1MGU1NzgyNDE5YTViMzc4M2I5NzllCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cu
aHRtbApAQCAtMCwwICsxLDY5IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcG9seWZpbGwuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+CisgIDxkaXYgaWQ9Imhvc3QiPjwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KK3ZhciBo
b3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKK3ZhciBzaGFkb3dSb290ID0g
aG9zdC53ZWJraXRDcmVhdGVTaGFkb3dSb290KCk7CitzaGFkb3dSb290LmlubmVySFRNTCA9ICI8
ZGl2IGlkPSdpbm5lci1ob3N0Jz48L2Rpdj4iOworCit2YXIgaW5uZXJIb3N0ID0gc2hhZG93Um9v
dC5nZXRFbGVtZW50QnlJZCgiaW5uZXItaG9zdCIpOwordmFyIGlubmVyU2hhZG93ID0gaW5uZXJI
b3N0LndlYmtpdENyZWF0ZVNoYWRvd1Jvb3QoKTsKK2lubmVyU2hhZG93LmlubmVySFRNTCA9ICI8
ZGl2IGlkPSdpbm5lci1tb3N0LWhvc3QnPjwvZGl2PiIKKwordmFyIGlubmVyTW9zdEhvc3QgPSBp
bm5lclNoYWRvdy5nZXRFbGVtZW50QnlJZCgiaW5uZXItbW9zdC1ob3N0Iik7Cit2YXIgaW5uZXJN
b3N0U2hhZG93ID0gaW5uZXJNb3N0SG9zdC53ZWJraXRDcmVhdGVTaGFkb3dSb290KCk7CisKK3Zh
ciB0YXJnZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK3RhcmdldC53ZWJraXRQ
c2V1ZG8gPSAneC1mb28nOworaW5uZXJNb3N0U2hhZG93LmFwcGVuZENoaWxkKHRhcmdldCk7CisK
K3ZhciBwc2V1ZG9TdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Citwc2V1
ZG9TdHlsZS5pbm5lckhUTUwgPSAiZGl2Ojp4LWZvbyB7IGNvbG9yOiBibHVlOyB9IjsKK2lubmVy
TW9zdFNoYWRvdy5hcHBlbmRDaGlsZChwc2V1ZG9TdHlsZSk7CisKK2RlYnVnKCJDYXNlMTogQSBw
c2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHNhbWUgdHJlZXNjb3BlIGFzIGRpdiB3aXRoIHgtZm9vIHBz
ZXVkby4iKTsKK3Nob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IiLCAnInJn
YigwLCAwLCAwKSInKTsKKworZGVidWcoIkNhc2UyOiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUg
cGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIik7Citpbm5lclNoYWRv
dy5hcHBlbmRDaGlsZChwc2V1ZG9TdHlsZSk7CitzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0
YXJnZXQpLmNvbG9yIiwgJyJyZ2IoMCwgMCwgMjU1KSInKTsKKworZGVidWcoIkNhc2UzOiBBIHBz
ZXVkbyBzdHlsZSBpcyBpbiB0aGUgcGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBw
c2V1ZG8uIFRoZSBkaXYncyB0cmVlc2NvcGUgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4i
KTsKK2lubmVyTW9zdFNoYWRvdy5hcHBseUF1dGhvclN0eWxlcyA9IHRydWU7CitzaG91bGRCZSgi
Z2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIiwgJyJyZ2IoMCwgMCwgMjU1KSInKTsKKwor
ZGVidWcoIkNhc2U0OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgZ3JhbmQtcGFyZW50IHRyZWVz
Y29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIik7Citpbm5lck1vc3RTaGFkb3cuYXBwbHlB
dXRob3JTdHlsZXMgPSBmYWxzZTsKK3NoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQocHNldWRvU3R5bGUp
Oworc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDAs
IDApIicpOworCitkZWJ1ZygiQ2FzZTU6IEEgcHNldWRvIHN0eWxlIGlzIGluIHRoZSBncmFuZC1w
YXJlbnQgdHJlZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9vIHBzZXVkby4gVGhlIHBhcmVudCB0cmVl
c2NvcGUgb2YgdGhlIGRpdiBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLiIpOworaW5uZXJT
aGFkb3cuYXBwbHlBdXRob3JTdHlsZXMgPSB0cnVlOworc2hvdWxkQmUoImdldENvbXB1dGVkU3R5
bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDAsIDI1NSkiJyk7CisKK2RlYnVnKCJDYXNlNjog
UHNldWRvIHN0eWxlcyBhcmUgaW4gdGhlIHBhcmVudCBhbmQgZ3JhbmQtcGFyZW50IHRyZWVzY29w
ZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRoZSBk
aXYgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4iKTsKK3ZhciBwc2V1ZG9TdHlsZTIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOworcHNldWRvU3R5bGUyLmlubmVySFRNTCA9
ICJkaXY6OngtZm9vIHsgY29sb3I6IGdyZWVuOyB9IjsKK2lubmVyU2hhZG93LmFwcGVuZENoaWxk
KHBzZXVkb1N0eWxlMik7CitzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9y
IiwgJyJyZ2IoMCwgMTI4LCAwKSInKTsKKworZGVidWcoIkNhc2U3OiBBIHBzZXVkbyBzdHlsZSBp
cyBpbiBkb2N1bWVudC4gTm8gdHJlZXNjb3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUu
Iik7CitzaGFkb3dSb290LnJlbW92ZUNoaWxkKHBzZXVkb1N0eWxlKTsKK2lubmVyU2hhZG93LnJl
bW92ZUNoaWxkKHBzZXVkb1N0eWxlMik7Citkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHBzZXVk
b1N0eWxlKTsKK2lubmVyU2hhZG93LmFwcGx5QXV0aG9yU3R5bGVzID0gZmFsc2U7CitzaG91bGRC
ZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIiwgJyJyZ2IoMCwgMCwgMCkiJyk7CisK
K2RlYnVnKCJDYXNlODogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gZG9jdW1lbnQuIFRoZSBwYXJlbnQg
dHJlZXNjb3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuIik7Citpbm5lclNoYWRvdy5h
cHBseUF1dGhvclN0eWxlcyA9IHRydWU7CitzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJn
ZXQpLmNvbG9yIiwgJyJyZ2IoMCwgMCwgMjU1KSInKTsKKzwvc2NyaXB0PgorPC9odG1sPgorCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179709</attachid>
            <date>2012-12-17 03:21:27 -0800</date>
            <delta_ts>2012-12-17 22:58:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102919-20121217201844.patch</filename>
            <type>text/plain</type>
            <size>26661</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3ODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ExMDMwNjk1YWRmMDkw
ZTc0Y2Q4YmZjODk5MjViOTFhMjUzOTA5OS4uY2UxMTE5M2M3MTgwZGRiNmY4YzBlZGRmNjZkMTYw
YjE3NmM0MWY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTEyLTE0ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV06
IGN1c3RvbSBwc2V1ZG8gaW4gc3R5bGVzIGluIHNoYWRvdyBkb20gdHJlZXMgZG9lc24ndCB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI5MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXN0b20g
cHNldWRvIHN0eWxlcyBkZWNsYXJlZCBpbiBhIHBhcmVudCB0cmVlc2NvcGUgc2hvdWxkIGJlIGNo
ZWNrZWQKKyAgICAgICAgZm9yIGVsZW1lbnRzIGluIHRoZSB0cmVlc2NvcGUuIEN1c3RvbSBwc2V1
ZG8gc3R5bGVzIGluIGFuIGF1dGhvcgorICAgICAgICBzdHlsZXNoZWV0IHNob3VsZCBvbmx5IGFw
cGx5IHRvIGVsZW1lbnRzIGluIGEgY2hpbGQgdHJlZSBzY29wZSBvZgorICAgICAgICBkb2N1bWVu
dCBvciBpbiBzb21lIHRyZWVzY29wZSB3aG9zZSBwYXJlbnQgdHJlZXNjb3BlIGhhcworICAgICAg
ICBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hh
ZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cuaHRtbAorCisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Vs
ZWN0b3IpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ6OlNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0KToKKyAgICAgICAgKFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KToKKyAgICAg
ICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclBzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKiBjc3MvU3R5
bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6TWF0Y2hPcHRp
b25zOjpNYXRjaE9wdGlvbnMpOgorICAgICAgICAoTWF0Y2hPcHRpb25zKToKKyAgICAgICAgKFN0
eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZmluZFN0eWxlQm91bmRzT2ZQYXJlbnRUcmVlU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5o
OgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVyKToKKwogMjAxMi0xMi0xNiAgTGV2aSBXZWlu
dHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUHVzaCBwaXhlbCBzbmFwcGlu
ZyBsb2dpYyBpbnRvIFRyYW5zZm9ybVN0YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCmluZGV4IGE1MzA1ZTM1MmZlMjY0YmNlY2MxYjcyZmNiYzQ4Zjg0ZDU1ZTQzNzUuLmVj
ZTA1NGYxMWQ2OTFmYzA0YzUzZWFhOTllNDQzYzAxZmJmNmJmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC00NzIsOCArNDcyLDE3IEBAIFNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoY29uc3QgU2Vs
ZWN0b3JDaGVjCiAKICAgICAvLyBQcmVwYXJlIG5leHQgc2VsZWN0b3IKICAgICBDU1NTZWxlY3Rv
ciogaGlzdG9yeVNlbGVjdG9yID0gY29udGV4dC5zZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwotICAg
IGlmICghaGlzdG9yeVNlbGVjdG9yKQorICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKSB7CisjaWYg
RU5BQkxFKFNIQURPV19ET00pCisgICAgICAgIGlmIChjb250ZXh0LnNjb3BlT2ZMYXN0RWxlbWVu
dCkgeworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIHRoZSBzY29wZSBtb3JlIHN0cmljdGx5
LgorICAgICAgICAgICAgLy8gT2J0YWluZWQgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9h
dHRhY2htZW50LmNnaT9pZD0xNzY4OTIKKyAgICAgICAgICAgIC8vIFNob3VsZCB3YWl0IHRpbGwg
dGhlIG9yaWdpbmFsIGJ1ZyBpcyBmaXhlZC4KKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnNj
b3BlT2ZMYXN0RWxlbWVudC0+dHJlZVNjb3BlKCkgPT0gY29udGV4dC5lbGVtZW50LT50cmVlU2Nv
cGUoKSA/IFNlbGVjdG9yTWF0Y2hlcyA6IFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICB9
CisjZW5kaWYKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKKyAgICB9CiAKICAgICBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29u
dGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuaAppbmRleCA5YmRiNjY5YjI0NmVlNjQzZDVlMmVlMjJiNWExYTI0ZWUwOTE4ZTZhLi40
N2IzOTBjZTc5YTE4OTRiNWQ0YmQyOTZiMDMyNWE1ZmY2NTIyYjRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5oCkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICwgaXNTdWJTZWxlY3RvcihmYWxzZSkKICAgICAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRv
KGZhbHNlKQogICAgICAgICAgICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8oZmFsc2UpCisgICAgICAg
ICAgICAsIHNjb3BlT2ZMYXN0RWxlbWVudCgwKQogICAgICAgICB7IH0KIAogICAgICAgICBDU1NT
ZWxlY3Rvciogc2VsZWN0b3I7CkBAIC03OSw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBpc1N1YlNlbGVjdG9yOwogICAgICAgICBib29sIGhhc1Njcm9sbGJhclBzZXVkbzsKICAgICAg
ICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlT2ZMYXN0RWxlbWVudDsKICAgICB9OwogCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENT
U1NlbGVjdG9yKiwgRWxlbWVudCosIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxz
ZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggODUxMDgyNWYw
NzFmOTg4NzRiMzJlYzcyZjFiMjA2NWM1MDg2MzVkOC4uY2NkYzg1MDQ5N2E5ZTIzNzIyMGZkMGFm
Yzc3MDBkMWRkNDk5ODBmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAt
NjM4LDE2ICs2MzgsMjQgQEAgaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0
Y2hpbmdVQVJ1bGVzKCkKIAogYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VB
UnVsZXMgPSBmYWxzZTsKIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUHNldWRvKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKIHsK
ICAgICBBU1NFUlQocnVsZXMpOwogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogCiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKLSAg
ICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVt
ZW50KTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQ
c2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgsIG9wdGlvbnMpOwotICAgIH0KKyAgICBpZiAocHNldWRvSWQuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKKworICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVz
KHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25z
KTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0
KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBN
YXRjaE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgQVNTRVJUKHJ1bGVzKTsKKyAgICBBU1NFUlQo
bV9lbGVtZW50KTsKIAogICAgIC8vIENoZWNrIHdoZXRoZXIgb3RoZXIgdHlwZXMgb2YgcnVsZXMg
YXJlIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJlbnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRo
aXM6CiAgICAgLy8gYSkgaXQncyBhIFVBIHJ1bGUKQEAgLTY4Nyw2ICs2OTUsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVz
LCBpbnQmIGZpcnN0UnVsZQogICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25T
ZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVnaW9uRm9yU3R5bGluZy0+bm9kZSgp
KSkpIHsKICAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gcnVsZXMtPm1fcmVnaW9u
U2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAgICAgICAgICAgIEFT
U0VSVChyZWdpb25SdWxlcyk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclBz
ZXVkbyhyZWdpb25SdWxlcywgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMp
OwogICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocmVnaW9uUnVsZXMsIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKICAgICAgICAgfQogICAgIH0KQEAgLTcz
MSwyMyArNzQwLDI2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAgICAgICAgIGJvb2wgYXBw
bHlBdXRob3JTdHlsZXMgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxl
cygpOwogICAgICAgICBib29sIGRvY3VtZW50U2NvcGUgPSB0cnVlOwogICAgICAgICB1bnNpZ25l
ZCBzY29wZVNpemUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNrU2l6ZSgpOworCisgICAgICAgIGJv
b2wgcGFyZW50QXBwbHlBdXRob3JTdHlsZXMgPSBmYWxzZTsKKyAgICAgICAgaW50IHBhcmVudFRy
ZWVTY29wZUJvdW5kc0luZGV4ID0gbV9zY29wZVJlc29sdmVyLT5maW5kU3R5bGVCb3VuZHNPZlBh
cmVudFRyZWVTY29wZShtX2VsZW1lbnQsIHBhcmVudEFwcGx5QXV0aG9yU3R5bGVzKTsKKwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2NvcGVTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3Bl
UmVzb2x2ZXItPnN0YWNrRnJhbWVBdChpKTsKICAgICAgICAgICAgIG1fbWF0Y2hlZFJ1bGVzLmNs
ZWFyKCk7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICAgICAgICAgIGNvbnN0IFN0eWxl
U2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNr
RnJhbWVBdChpKTsKICAgICAgICAgICAgIGRvY3VtZW50U2NvcGUgPSBkb2N1bWVudFNjb3BlICYm
ICFmcmFtZS5tX3Njb3BlLT5pc0luU2hhZG93VHJlZSgpOwotICAgICAgICAgICAgaWYgKGRvY3Vt
ZW50U2NvcGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWFwcGx5QXV0aG9yU3R5bGVzKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPm1hdGNoZXNTdHlsZUJvdW5kcyhmcmFtZSkp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcywgZnJhbWUubV9zY29w
ZSk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhmcmFtZS5tX3J1bGVTZXQsIHJl
c3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxl
LCBvcHRpb25zKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGZy
YW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5n
ZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgICAgICAgICAgb3B0aW9ucy5zY29wZU9m
TGFzdEVsZW1lbnQgPSAoZG9jdW1lbnRTY29wZSAmJiBwYXJlbnRBcHBseUF1dGhvclN0eWxlcykg
fHwgZnJhbWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09IHBhcmVudFRyZWVTY29wZUJvdW5k
c0luZGV4ID8gMCA6IGZyYW1lLm1fc2NvcGU7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0ZvclBzZXVkbyhmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKworICAgICAgICAg
ICAgaWYgKChkb2N1bWVudFNjb3BlICYmIGFwcGx5QXV0aG9yU3R5bGVzKSB8fCBtX3Njb3BlUmVz
b2x2ZXItPm1hdGNoZXNTdHlsZUJvdW5kcyhmcmFtZSkpIHsKKyAgICAgICAgICAgICAgICBvcHRp
b25zLnNjb3BlT2ZMYXN0RWxlbWVudCA9IDA7CisgICAgICAgICAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwg
cmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgICAgICAgICAgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFu
Z2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9u
cyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVs
ZXMocmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTc4Miw4ICs3OTQsMTAgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQogICAgICAgICByZXR1cm47CiAKICAgICBNYXRjaE9wdGlvbnMgb3B0
aW9ucyhpbmNsdWRlRW1wdHlSdWxlcywgbV9lbGVtZW50KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKQorICAgIGZvciAodW5zaWduZWQgaSA9
IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JQc2V1ZG8obWF0Y2hlZFJ1bGVzLmF0KGktMSksIHJlc3VsdC5yYW5nZXMuZmly
c3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKICAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hlZFJ1bGVzLmF0KGktMSksIHJlc3VsdC5y
YW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRp
b25zKTsKKyAgICB9CiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwpAQCAtODAxLDYgKzgxNSwxNiBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcwogCiAgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBydWxlcy4K
ICAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisjaWYgRU5BQkxF
KFNIQURPV19ET00pCisgICAgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQgPSBkb2N1bWVudCgp
OworICAgIGlmIChUcmVlU2NvcGUqIHBhcmVudFRyZWVTY29wZSA9IG1fZWxlbWVudC0+dHJlZVNj
b3BlKCktPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICBpZiAocGFyZW50VHJlZVNjb3BlLT5h
cHBseUF1dGhvclN0eWxlcygpKQorICAgICAgICAgICAgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1l
bnQgPSAwOworI2VuZGlmCisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JQc2V1ZG8obV9hdXRo
b3JTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5n
ZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAg
IG9wdGlvbnMuc2NvcGVPZkxhc3RFbGVtZW50ID0gMDsKKyNlbmRpZgogICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2Vz
LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7
CiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CkBAIC04MTYsNiArODQw
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7
CiAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcy5zaXplKCkgLSAxOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUHNldWRvKG1fdXNl
clN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMu
bGFzdFVzZXJSdWxlLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMobV91c2VyU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgcmVzdWx0
LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX3VzZXJTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJz
dFVzZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgaW5jbHVkZUVtcHR5UnVsZXMp
OwogCkBAIC04MjcsNiArODUyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMpCiAgICAgbV9tYXRjaGVkUnVsZXMu
Y2xlYXIoKTsKICAgICAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclBz
ZXVkbyhydWxlcywgcmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0
VUFSdWxlLCBmYWxzZSk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocnVsZXMsIHJlc3VsdC5y
YW5nZXMuZmlyc3RVQVJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwogCiAg
ICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CkBAIC04MzksNyArODY1LDEx
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpCiAKICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1h
eSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRk
bGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZlLgogICAgIC8vIEFuY2VzdG9yIGlkZW50aWZp
ZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1
c2UgdGhlIGZhc3QgcGF0aC4KKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICBib29sIGNhblVz
ZUZhc3RSZWplY3QgPSBtX2NoZWNrZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQobV9wYXJlbnRO
b2RlKSAmJiAhb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQ7CisjZWxzZQogICAgIGJvb2wgY2Fu
VXNlRmFzdFJlamVjdCA9IG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVu
dE5vZGUpOworI2VuZGlmCiAKICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC04NDksNyArODc5LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKIAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBy
dWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBj
b29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUoZG9jdW1lbnQo
KSwgcnVsZSwgdGhpcyk7Ci0gICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhLCBvcHRp
b25zLnNjb3BlKSkgeworICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0YSwgb3B0aW9u
cy5zY29wZSwgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQpKSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4g
dGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
cHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIGlmICghcHJvcGVy
dGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFvcHRpb25zLmluY2x1ZGVFbXB0eVJ1
bGVzKSkgewpAQCAtMTA1Myw2ICsxMDgzLDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNo
YXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQogCiAgICAgaW50
IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXggPSAtMTsKICAgICBtX2NoZWNrZXIu
c2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlcyk7CisgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JQc2V1ZG8ocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IGZhbHNlKTsKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhydWxlU2V0LCBmaXJzdFJ1bGVJbmRl
eCwgbGFzdFJ1bGVJbmRleCwgZmFsc2UpOwogICAgIG1fY2hlY2tlci5zZXRNb2RlKFNlbGVjdG9y
Q2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwogICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5
KCkpCkBAIC0yMjI5LDcgKzIyNjAsNyBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJl
c29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQcwogICAgIHJl
dHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlKQoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tTZWxlY3Rvcihj
b25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZU9mTGFzdEVsZW1lbnQpCiB7CiAgICAgbV9keW5hbWljUHNl
dWRvID0gTk9QU0VVRE87CiAKQEAgLTIyNTQsNiArMjI4NSw3IEBAIGlubGluZSBib29sIFN0eWxl
UmVzb2x2ZXI6OmNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBD
b250YWluCiAgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdHlsZSgpOwogICAgIGNvbnRleHQu
ZWxlbWVudFBhcmVudFN0eWxlID0gbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJT
dHlsZSgpIDogMDsKICAgICBjb250ZXh0LnNjb3BlID0gc2NvcGU7CisgICAgY29udGV4dC5zY29w
ZU9mTGFzdEVsZW1lbnQgPSBzY29wZU9mTGFzdEVsZW1lbnQ7CiAgICAgY29udGV4dC5wc2V1ZG9T
dHlsZSA9IG1fcHNldWRvU3R5bGU7CiAgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNo
IG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IoY29udGV4dCwgbV9keW5hbWljUHNldWRv
KTsKICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA5N2JjZjE2OTQwODNlMGEyNmFkZDQ2YWY0
YTk5OGQ1OGY1NGRiNzZlLi40ODVkOWExNzFhNDZjZjAzZWY5YzI4N2YyNmEzMTU1MThhYjM5YjA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTM0NSw5ICszNDUsMTAgQEAgcHJp
dmF0ZToKICAgICB9OwogCiAgICAgc3RydWN0IE1hdGNoT3B0aW9ucyB7Ci0gICAgICAgIE1hdGNo
T3B0aW9ucyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSA9IDApIDogc2NvcGUoc2NvcGUpLCBpbmNsdWRlRW1wdHlSdWxlcyhpbmNsdWRlRW1wdHlSdWxl
cykgeyB9CisgICAgICAgIE1hdGNoT3B0aW9ucyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlT2ZM
YXN0RWxlbWVudCA9IDApIDogc2NvcGUoc2NvcGUpLCBpbmNsdWRlRW1wdHlSdWxlcyhpbmNsdWRl
RW1wdHlSdWxlcyksIHNjb3BlT2ZMYXN0RWxlbWVudCgwKSB7IH0KICAgICAgICAgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGU7CiAgICAgICAgIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXM7CisgICAg
ICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlT2ZMYXN0RWxlbWVudDsKICAgICB9OwogCiAg
ICAgc3RhdGljIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5zaWduZWQgbGlu
a01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIGJvb2wgaW5SZWdpb25SdWxl
ID0gZmFsc2UpOwpAQCAtMzU5LDE1ICszNjAsMTkgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNo
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2
b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7
CiAgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcyk7CisjaWYgRU5BQkxFKFNIQURPV19ET00pIHx8IEVOQUJMRShTVFlMRV9T
Q09QRUQpCisgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzUGVyU2NvcGUoTWF0Y2hSZXN1
bHQmLCBib29sIGluY2x1ZGVkRW1wdHlSdWxlcywgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpT
dGFja0ZyYW1lJiwgYm9vbCBwc2V1ZG9Pbmx5KTsKKyNlbmRpZgogICAgIHZvaWQgbWF0Y2hIb3N0
UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNv
bGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOworICAgIHZvaWQgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JQc2V1ZG8oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFz
dFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRl
eCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICBib29sIGZh
c3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgc29ydE1h
dGNoZWRSdWxlcygpOwogICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNo
UmVzdWx0Jik7CiAKLSAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmLCBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1
bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlT2ZMYXN0RWxlbWVudCk7CiAgICAgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKENTU1Nl
bGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCk7CiAgICAgdm9p
ZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVu
dCopOwogICAgIGVudW0gU3R5bGVBcHBsaWNhdGlvblBhc3MgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTY29wZVJlc29sdmVyLmNwcAppbmRleCA3MzAwNTBkNmM0ZDgxNzJlNTU0YmU4NjAyOGQ5
YmI1N2M3YjEyYjk1Li42MzhlMTE2M2ZkNmIwMzgyMjc1MjNlODczNmVlMTZmMDQyYWJlYzk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcApAQCAtMTMxLDYgKzEz
MSw3IEBAIHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzCiAKICAgICBpZiAoc2NvcGUtPmlzU2hhZG93
Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQogICAg
ICAgICArK21fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKKwogICAgIC8vIE90aGVyd2lzZSBqdXN0
IHB1c2ggdGhlIHBhcmVudCBvbnRvIHRoZSBzdGFjay4KICAgICBSdWxlU2V0KiBydWxlU2V0ID0g
cnVsZVNldEZvcihzY29wZSk7CiAgICAgaWYgKHJ1bGVTZXQpCkBAIC0xNTAsNiArMTUxLDI5IEBA
IHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpwb3AoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUp
CiAgICAgfQogfQogCitpbnQgU3R5bGVTY29wZVJlc29sdmVyOjpmaW5kU3R5bGVCb3VuZHNPZlBh
cmVudFRyZWVTY29wZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBib29sJiBhcHBseUF1dGhvclN0
eWxlcykgY29uc3QKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisKKyAgICBhcHBseUF1dGhvclN0
eWxlcyA9IGZhbHNlOworICAgIC8vIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCArIDEgZG9lc24n
dCBtYXRjaCBhbnkgaXRlbXMgaW4gbV9zdGFjay4KKyAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNl
dWRvSWQoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX3N0YWNrUGFyZW50Qm91bmRzSW5k
ZXggKyAxOworCisgICAgaWYgKCFtX3N0YWNrUGFyZW50IHx8ICFtX3N0YWNrUGFyZW50LT5pc0lu
U2hhZG93VHJlZSgpKQorICAgICAgICByZXR1cm4gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4ICsg
MTsKKworICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fc3RhY2tQYXJlbnQ7Cisg
ICAgZm9yICg7IHBhcmVudCAmJiAhcGFyZW50LT5pc1NoYWRvd1Jvb3QoKTsgcGFyZW50ID0gcGFy
ZW50LT5wYXJlbnRPckhvc3ROb2RlKCkpIHsgfQorICAgIGlmICghcGFyZW50KQorICAgICAgICBy
ZXR1cm4gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4IC0gMTsKKyAgICAKKyAgICBpZiAoVHJlZVNj
b3BlKiBwYXJlbnRUcmVlU2NvcGUgPSB0b1NoYWRvd1Jvb3QocGFyZW50KS0+cGFyZW50VHJlZVNj
b3BlKCkpCisgICAgICAgIGFwcGx5QXV0aG9yU3R5bGVzID0gcGFyZW50VHJlZVNjb3BlLT5hcHBs
eUF1dGhvclN0eWxlcygpOworCisgICAgcmV0dXJuIHRvU2hhZG93Um9vdChwYXJlbnQpLT5hcHBs
eUF1dGhvclN0eWxlcygpID8gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4IDogbV9zdGFja1BhcmVu
dEJvdW5kc0luZGV4IC0gMTsKK30KKwogdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmNvbGxlY3RG
ZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcykKIHsKICAgICBmb3IgKFNjb3BlZFJ1
bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9h
dXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTY29wZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29s
dmVyLmgKaW5kZXggM2JlM2ZmNGY3MGM3Mzc1YmQwMTQyNmEwMGJhNDI0MTI4NDYyY2MwZS4uMmU2
MjUwYjBlMjM2MDlkNTJhMTljZWRhYzVkYTFmZDNjNmI5NWMwZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNjb3BlUmVzb2x2ZXIuaApAQCAtNzMsNiArNzMsNyBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KICAgICBj
b25zdCBTdGFja0ZyYW1lJiBzdGFja0ZyYW1lQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhY2suYXQoaW5kZXgpOyB9CiAgICAgYm9vbCBtYXRjaGVzU3R5bGVCb3VuZHMoY29u
c3QgU3RhY2tGcmFtZSYgZnJhbWUpIGNvbnN0IHsgcmV0dXJuIGZyYW1lLm1fYXV0aG9yU3R5bGVC
b3VuZHNJbmRleCA9PSBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7IH0KKyAgICBpbnQgZmluZFN0
eWxlQm91bmRzT2ZQYXJlbnRUcmVlU2NvcGUoY29uc3QgRWxlbWVudCosIGJvb2wmIGFwcGx5QXV0
aG9yU3R5bGVzKSBjb25zdDsKICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJl
U2V0Jik7CiAKICAgICB2b2lkIGFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqLCBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAyNzE3MWNmMTk1ZGI0OTdlOGY1YThmMWVlODY5ODA2NDI5Y2ZiMmI4Li4xMzQ5ZmI3NWEzYTcx
NDY2ZmFlZTgzZmM4ZmI3ZDMxNDZjMDViNzU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTIt
MTItMTQgIFRha2FzaGkgU2FrYW1vdG8gIDx0YXNha0Bnb29nbGUuY29tPgorCisgICAgICAgIFtT
aGFkb3cgRE9NXTogY3VzdG9tIHBzZXVkbyBpbiBzdHlsZXMgaW4gc2hhZG93IGRvbSB0cmVlcyBk
b2Vzbid0IHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMjkxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRv
dy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3RlZC1w
c2V1ZG8taWQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ct
bmVzdGVkLXBzZXVkby1pZC5odG1sOgorICAgICAgICBhOjp4LW5lc3RlZC1zaGFkb3ctY2hpbGQg
cnVsZSBpcyBkZWNsYXJlZCBpbiBhIGRvY3VtZW50IGJ1dCB0aGUgZWxlbWVudAorICAgICAgICBp
cyBpbiBhIHNoYWRvdyBkb20gdHJlZS4gU28gYTo6eC1uZXN0ZWQtc2hhZG93LWNoaWxkIHJ1bGUg
c2hvdWxkIG5vdAorICAgICAgICBiZSBhcHBseS4KKwogMjAxMi0xMi0xNiAgS2VudGFybyBIYXJh
ICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmViYXNlbGlu
ZWQgdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9zY3JvbGxiYXJzL3Njcm9sbGJhci1v
cmllbnRhdGlvbi5odG1sLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3BzZXVkby1zdHlsZS1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFlMTIzOGZmMmNiODk0MDVmZDkyOTZmNGNiYjNiZTU5YWMxMjBiOGUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRvdy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorQ2FzZTE6IEEgcHNldWRvIHN0eWxlIGlzIGlu
IHRoZSBzYW1lIHRyZWVzY29wZSBhcyBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uCitQQVNTIGdldENv
bXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciBpcyAicmdiKDAsIDAsIDApIgorQ2FzZTI6IEEgcHNl
dWRvIHN0eWxlIGlzIGluIHRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9vIHBz
ZXVkby4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIGlzICJyZ2IoMCwgMCwg
MjU1KSIKK0Nhc2UzOiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgcGFyZW50IHRyZWVzY29wZSBv
ZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSBkaXYncyB0cmVlc2NvcGUgaGFzIGFwcGx5LWF1
dGhvci1zdHlsZXMgdHJ1ZS4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIGlz
ICJyZ2IoMCwgMCwgMjU1KSIKK0Nhc2U0OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgZ3JhbmQt
cGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uCitQQVNTIGdldENvbXB1
dGVkU3R5bGUodGFyZ2V0KS5jb2xvciBpcyAicmdiKDAsIDAsIDApIgorQ2FzZTU6IEEgcHNldWRv
IHN0eWxlIGlzIGluIHRoZSBncmFuZC1wYXJlbnQgdHJlZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9v
IHBzZXVkby4gVGhlIHBhcmVudCB0cmVlc2NvcGUgb2YgdGhlIGRpdiBoYXMgYXBwbHktYXV0aG9y
LXN0eWxlcyB0cnVlLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJn
YigwLCAwLCAyNTUpIgorQ2FzZTY6IFBzZXVkbyBzdHlsZXMgYXJlIGluIHRoZSBwYXJlbnQgYW5k
IGdyYW5kLXBhcmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiBUaGUgcGFy
ZW50IHRyZWVzY29wZSBvZiB0aGUgZGl2IGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCitQ
QVNTIGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciBpcyAicmdiKDAsIDEyOCwgMCkiCitD
YXNlNzogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gZG9jdW1lbnQuIE5vIHRyZWVzY29wZSBoYXMgYXBw
bHktYXV0aG9yLXN0eWxlcyB0cnVlLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29s
b3IgaXMgInJnYigwLCAwLCAwKSIKK0Nhc2U4OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiBkb2N1bWVu
dC4gVGhlIHBhcmVudCB0cmVlc2NvcGUgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4KK1BB
U1MgZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIGlzICJyZ2IoMCwgMCwgMjU1KSIKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1z
aGFkb3cuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4t
c2hhZG93Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTlkYWZiNDM1ZWQ2NThhMTNjNTBlNTc4MjQxOWE1YjM3
ODNiOTc5ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9w
c2V1ZG8tc3R5bGUtaW4tc2hhZG93Lmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPCFkb2N0eXBlIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlmaWxsLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICA8ZGl2IGlkPSJob3N0Ij48L2Rpdj4KKzwv
Ym9keT4KKzxzY3JpcHQ+Cit2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0
Iik7Cit2YXIgc2hhZG93Um9vdCA9IGhvc3Qud2Via2l0Q3JlYXRlU2hhZG93Um9vdCgpOworc2hh
ZG93Um9vdC5pbm5lckhUTUwgPSAiPGRpdiBpZD0naW5uZXItaG9zdCc+PC9kaXY+IjsKKwordmFy
IGlubmVySG9zdCA9IHNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoImlubmVyLWhvc3QiKTsKK3Zh
ciBpbm5lclNoYWRvdyA9IGlubmVySG9zdC53ZWJraXRDcmVhdGVTaGFkb3dSb290KCk7Citpbm5l
clNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdiBpZD0naW5uZXItbW9zdC1ob3N0Jz48L2Rpdj4iCisK
K3ZhciBpbm5lck1vc3RIb3N0ID0gaW5uZXJTaGFkb3cuZ2V0RWxlbWVudEJ5SWQoImlubmVyLW1v
c3QtaG9zdCIpOwordmFyIGlubmVyTW9zdFNoYWRvdyA9IGlubmVyTW9zdEhvc3Qud2Via2l0Q3Jl
YXRlU2hhZG93Um9vdCgpOworCit2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7Cit0YXJnZXQud2Via2l0UHNldWRvID0gJ3gtZm9vJzsKK2lubmVyTW9zdFNoYWRvdy5h
cHBlbmRDaGlsZCh0YXJnZXQpOworCit2YXIgcHNldWRvU3R5bGUgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzdHlsZSIpOworcHNldWRvU3R5bGUuaW5uZXJIVE1MID0gImRpdjo6eC1mb28geyBj
b2xvcjogYmx1ZTsgfSI7Citpbm5lck1vc3RTaGFkb3cuYXBwZW5kQ2hpbGQocHNldWRvU3R5bGUp
OworCitkZWJ1ZygiQ2FzZTE6IEEgcHNldWRvIHN0eWxlIGlzIGluIHRoZSBzYW1lIHRyZWVzY29w
ZSBhcyBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIik7CitzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHls
ZSh0YXJnZXQpLmNvbG9yIiwgJyJyZ2IoMCwgMCwgMCkiJyk7CisKK2RlYnVnKCJDYXNlMjogQSBw
c2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHBhcmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28g
cHNldWRvLiIpOworaW5uZXJTaGFkb3cuYXBwZW5kQ2hpbGQocHNldWRvU3R5bGUpOworc2hvdWxk
QmUoImdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDAsIDI1NSkiJyk7
CisKK2RlYnVnKCJDYXNlMzogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHBhcmVudCB0cmVlc2Nv
cGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiBUaGUgZGl2J3MgdHJlZXNjb3BlIGhhcyBhcHBs
eS1hdXRob3Itc3R5bGVzIHRydWUuIik7Citpbm5lck1vc3RTaGFkb3cuYXBwbHlBdXRob3JTdHls
ZXMgPSB0cnVlOworc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciIsICci
cmdiKDAsIDAsIDI1NSkiJyk7CisKK2RlYnVnKCJDYXNlNDogQSBwc2V1ZG8gc3R5bGUgaXMgaW4g
dGhlIGdyYW5kLXBhcmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiIpOwor
aW5uZXJNb3N0U2hhZG93LmFwcGx5QXV0aG9yU3R5bGVzID0gZmFsc2U7CitzaGFkb3dSb290LmFw
cGVuZENoaWxkKHBzZXVkb1N0eWxlKTsKK3Nob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHRhcmdl
dCkuY29sb3IiLCAnInJnYigwLCAwLCAwKSInKTsKKworZGVidWcoIkNhc2U1OiBBIHBzZXVkbyBz
dHlsZSBpcyBpbiB0aGUgZ3JhbmQtcGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBw
c2V1ZG8uIFRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRoZSBkaXYgaGFzIGFwcGx5LWF1dGhvci1z
dHlsZXMgdHJ1ZS4iKTsKK2lubmVyU2hhZG93LmFwcGx5QXV0aG9yU3R5bGVzID0gdHJ1ZTsKK3No
b3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IiLCAnInJnYigwLCAwLCAyNTUp
IicpOworCitkZWJ1ZygiQ2FzZTY6IFBzZXVkbyBzdHlsZXMgYXJlIGluIHRoZSBwYXJlbnQgYW5k
IGdyYW5kLXBhcmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiBUaGUgcGFy
ZW50IHRyZWVzY29wZSBvZiB0aGUgZGl2IGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuIik7
Cit2YXIgcHNldWRvU3R5bGUyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKK3Bz
ZXVkb1N0eWxlMi5pbm5lckhUTUwgPSAiZGl2Ojp4LWZvbyB7IGNvbG9yOiBncmVlbjsgfSI7Citp
bm5lclNoYWRvdy5hcHBlbmRDaGlsZChwc2V1ZG9TdHlsZTIpOworc2hvdWxkQmUoImdldENvbXB1
dGVkU3R5bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDEyOCwgMCkiJyk7CisKK2RlYnVnKCJD
YXNlNzogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gZG9jdW1lbnQuIE5vIHRyZWVzY29wZSBoYXMgYXBw
bHktYXV0aG9yLXN0eWxlcyB0cnVlLiIpOworc2hhZG93Um9vdC5yZW1vdmVDaGlsZChwc2V1ZG9T
dHlsZSk7Citpbm5lclNoYWRvdy5yZW1vdmVDaGlsZChwc2V1ZG9TdHlsZTIpOworZG9jdW1lbnQu
aGVhZC5hcHBlbmRDaGlsZChwc2V1ZG9TdHlsZSk7Citpbm5lclNoYWRvdy5hcHBseUF1dGhvclN0
eWxlcyA9IGZhbHNlOworc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciIs
ICcicmdiKDAsIDAsIDApIicpOworCitkZWJ1ZygiQ2FzZTg6IEEgcHNldWRvIHN0eWxlIGlzIGlu
IGRvY3VtZW50LiBUaGUgcGFyZW50IHRyZWVzY29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0
cnVlLiIpOworaW5uZXJTaGFkb3cuYXBwbHlBdXRob3JTdHlsZXMgPSB0cnVlOworc2hvdWxkQmUo
ImdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDAsIDI1NSkiJyk7Cis8
L3NjcmlwdD4KKzwvaHRtbD4KKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvc2hhZG93LW5lc3RlZC1wc2V1ZG8taWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3NoYWRvdy1uZXN0ZWQtcHNldWRvLWlkLWV4cGVjdGVkLnR4dAppbmRl
eCA5MDU4ZDZiNTA0ODM1MWQzZDJjYjc1MjkxODg2MWZiYTRjYzJmNGRiLi44MzBkOGNkZjZlYTI3
NTM3MjFhMDdkOWM1YzhjMDhkNjg0NWUyNTU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LW5lc3RlZC1wc2V1ZG8taWQtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctbmVzdGVkLXBzZXVkby1pZC1leHBlY3Rl
ZC50eHQKQEAgLTQsNyArNCw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiAKIAogUEFTUyB3
aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0dXBsZS5zaGFkb3dDaGlsZCkuY29sb3IgaXMgJ3JnYigy
NTUsIDAsIDApJwotUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFk
b3dDaGlsZCkuY29sb3IgaXMgJ3JnYigwLCAwLCAyNTUpJworUEFTUyB3aW5kb3cuZ2V0Q29tcHV0
ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCkuY29sb3IgaXMgJ3JnYigyNTUsIDAsIDAp
JwogUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCku
YmFja2dyb3VuZENvbG9yIGlzICdyZ2IoMCwgMTI4LCAwKScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3No
YWRvdy1uZXN0ZWQtcHNldWRvLWlkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
c2hhZG93LW5lc3RlZC1wc2V1ZG8taWQuaHRtbAppbmRleCA0YTRiYWE4Nzc5NzkxMjM3Zjc5NmEy
YWFlMzExOWMxMjhiZWFhNjJiLi4wMmVhODAyNjFiMjVjNmY1ZmY1OTExMmNjZGUzZGExNjdhYjJh
YTYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3Rl
ZC1wc2V1ZG8taWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93
LW5lc3RlZC1wc2V1ZG8taWQuaHRtbApAQCAtNDIsNyArNDIsOSBAQCB2YXIgaG9zdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CiB2YXIgdHVwbGUgPSBidWlsZFNoYWRvd1dpdGhP
bmVDaGlsZChob3N0LCAiYSIsICJ4LXNoYWRvdy1jaGlsZCIpOwogc2hvdWxkQmUoIndpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlKHR1cGxlLnNoYWRvd0NoaWxkKS5jb2xvciIsICIncmdiKDI1NSwgMCwg
MCknIik7CiB2YXIgc2hhZG93VHVwbGUgPSBidWlsZFNoYWRvd1dpdGhPbmVDaGlsZCh0dXBsZS5z
aGFkb3dDaGlsZCwgImIiLCAieC1uZXN0ZWQtc2hhZG93LWNoaWxkIik7Ci1zaG91bGRCZSgid2lu
ZG93LmdldENvbXB1dGVkU3R5bGUoc2hhZG93VHVwbGUuc2hhZG93Q2hpbGQpLmNvbG9yIiwgIidy
Z2IoMCwgMCwgMjU1KSciKTsKKy8vIFNpbmNlIDxhPiBpbiBhIHNoYWRvdyBkb20gdHJlZSBhbmQg
YTo6eC1uZXN0ZWQtc2hhZG93LWNoaWxkJ3MgcnVsZSBpcworLy8gZGVjbGFyZWQgaW4gYSBkb2N1
bWVudCB0cmVlLCB3ZSBjYW5ub3QgYXBwbHkgdGhlIHJ1bGUgdG8gdGhlIDxhPi4KK3Nob3VsZEJl
KCJ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCkuY29sb3Ii
LCAiJ3JnYigyNTUsIDAsIDApJyIpOwogc2hvdWxkQmUoIndpbmRvdy5nZXRDb21wdXRlZFN0eWxl
KHNoYWRvd1R1cGxlLnNoYWRvd0NoaWxkKS5iYWNrZ3JvdW5kQ29sb3IiLCAiJ3JnYigwLCAxMjgs
IDApJyIpOwogCiB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179881</attachid>
            <date>2012-12-17 22:58:21 -0800</date>
            <delta_ts>2012-12-18 20:07:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102919-20121218155539.patch</filename>
            <type>text/plain</type>
            <size>27558</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3OTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDk4YzRlMDkwZmNiYWFi
M2YwYzgyZjYyOWU1NjM5OWI1NDhkNDU3MC4uZjlmZGRkYTA1MTNjYjQyYTlhMTU5ZDU4MzA0Njli
NDhhMTJhZWQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEyLTE3ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV06
IGN1c3RvbSBwc2V1ZG8gaW4gc3R5bGVzIGluIHNoYWRvdyBkb20gdHJlZXMgZG9lc24ndCB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI5MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXN0b20g
cHNldWRvIHN0eWxlcyBkZWNsYXJlZCBpbiBhIHBhcmVudCB0cmVlc2NvcGUgc2hvdWxkIGJlIGNo
ZWNrZWQKKyAgICAgICAgZm9yIGVsZW1lbnRzIGluIHRoZSB0cmVlc2NvcGUuIEN1c3RvbSBwc2V1
ZG8gc3R5bGVzIGluIGFuIGF1dGhvcgorICAgICAgICBzdHlsZXNoZWV0IHNob3VsZCBvbmx5IGFw
cGx5IHRvIGVsZW1lbnRzIGluIGEgY2hpbGQgdHJlZSBzY29wZSBvZgorICAgICAgICBkb2N1bWVu
dCBvciBpbiBzb21lIHRyZWVzY29wZSB3aG9zZSBwYXJlbnQgdHJlZXNjb3BlIGhhcworICAgICAg
ICBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hh
ZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cuaHRtbAorCisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Vs
ZWN0b3IpOgorICAgICAgICBNb2RpZmllZCB0byBjaGVjayB3aGV0aGVyIHRoZSBsYXN0IG1hdGNo
ZWQgZWxlbWVudCBtYXRjaGVzIHRoZSBnaXZlbgorICAgICAgICBzY29wZSBvciBub3QuCisgICAg
ICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQp
OgorICAgICAgICAoU2VsZWN0b3JDaGVja2luZ0NvbnRleHQpOgorICAgICAgICBBZGRlZCBhIG5l
dyBtZW1iZXIgdmFyaWFibGU6IHNjb3BlT2ZMYXN0RWxlbWVudC4KKyAgICAgICAgKiBjc3MvU3R5
bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMpOgorICAgICAgICBNb3ZlZCB0aGUgY29kZSBmcm9t
IGNvbGxlY3RNYXRjaGluZ1J1bGVzLiBUaGlzIG1ldGhvZCBvbmx5IGNvbGxlY3RzCisgICAgICAg
IG1hdGNoZWQgcHNldWRvIHJ1bGVzIGZyb20gdGhlIGdpdmVuIHJ1bGVzZXQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGlu
Z1J1bGVzKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
VUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIFNpbmNlIHRoZSBjb2RlIGZvciBjb2xs
ZWN0aW5nIHBzZXVkbyBydWxlcyBpcyBtb3ZlZCBmcm9tCisgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzIHRvIGNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1lbnRSdWxlcywgbmVlZCB0bworICAg
ICAgICBpbnZva2UgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24gYmVmb3JlIGNvbGxlY3RN
YXRjaGluZ1J1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29w
ZWRBdXRob3JSdWxlcyk6CisgICAgICAgIEFkZGVkIGNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1l
bnRSdWxlcyBmb3IgZWFjaCBwYXJlbnQgdHJlZSBzY29wZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICBOZWVkIHRvIHByb3ZpZGUgc2Nv
cGVPZkxhc3RFbGVtZW50IGluZm9ybWF0aW9uLCBtb2RpZmllZCB0aGUgc2Vjb25kCisgICAgICAg
IGFyZ3VtZW50IGZyb20gImNvbnN0IENvbnRhaW5lck5vZGUqIiB0byAiY29uc3QgTWF0Y2hPcHRp
b25zJiIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QpOgorICAgICAgICBTaW5jZSBjaGVja1NlbGVjdG9yIGlzIG1vZGlmaWVkLCB1
cGRhdGVkLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpNYXRjaE9wdGlvbnM6Ok1hdGNoT3B0aW9ucyk6CisgICAgICAgIChN
YXRjaE9wdGlvbnMpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIEFkZGVkIGEg
bmV3IG1lbWJlciB2YXJpYWJsZSwgc2NvcGVPZkxhc3RFbGVtZW50LgorICAgICAgICAqIGNzcy9T
dHlsZVNjb3BlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29s
dmVyOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZmluZFN0
eWxlQm91bmRzT2ZQYXJlbnRUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVy
KToKKwogMjAxMi0xMi0xNyAgS3l1bmdUYWUgS2ltICA8a3RmLmtpbUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBQZXJjZW50YWdlIHdpZHRoIHJlcGxhY2VkIGVsZW1lbnQgaW5jb3JyZWN0bHkgcmVu
ZGVyZWQgd2hlbiBpbnRyaW5zaWMgc2l6ZSBjaGFuZ2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCmluZGV4IDU3YTFkOWY5NzM4ODFmZTU1YmVkZjUxNDA4MGQyZmEyNjAwM2Nl
ZTEuLmQxZGFmNTViODU3NWNkMWRmOWUzMTJlMWJiZWI5ZGE5ZmQxMWZjN2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC00NzIsOCArNDcyLDE3IEBAIFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoY29u
c3QgU2VsZWN0b3JDaGVjCiAKICAgICAvLyBQcmVwYXJlIG5leHQgc2VsZWN0b3IKICAgICBDU1NT
ZWxlY3RvciogaGlzdG9yeVNlbGVjdG9yID0gY29udGV4dC5zZWxlY3Rvci0+dGFnSGlzdG9yeSgp
OwotICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKQorICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKSB7
CisjaWYgRU5BQkxFKFNIQURPV19ET00pCisgICAgICAgIGlmIChjb250ZXh0LnNjb3BlT2ZMYXN0
RWxlbWVudCkgeworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIHRoZSBzY29wZSBtb3JlIHN0
cmljdGx5LgorICAgICAgICAgICAgLy8gT2J0YWluZWQgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9hdHRhY2htZW50LmNnaT9pZD0xNzY4OTIKKyAgICAgICAgICAgIC8vIFNob3VsZCB3YWl0
IHRpbGwgdGhlIG9yaWdpbmFsIGJ1ZyBpcyBmaXhlZC4KKyAgICAgICAgICAgIHJldHVybiBjb250
ZXh0LnNjb3BlT2ZMYXN0RWxlbWVudC0+dHJlZVNjb3BlKCkgPT0gY29udGV4dC5lbGVtZW50LT50
cmVlU2NvcGUoKSA/IFNlbGVjdG9yTWF0Y2hlcyA6IFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAg
ICAgICB9CisjZW5kaWYKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKKyAgICB9CiAK
ICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBu
ZXh0Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuaAppbmRleCA5YmRiNjY5YjI0NmVlNjQzZDVlMmVlMjJiNWExYTI0ZWUwOTE4
ZTZhLi40N2IzOTBjZTc5YTE4OTRiNWQ0YmQyOTZiMDMyNWE1ZmY2NTIyYjRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICwgaXNTdWJTZWxlY3RvcihmYWxzZSkKICAgICAgICAgICAgICwgaGFzU2Nyb2xsYmFy
UHNldWRvKGZhbHNlKQogICAgICAgICAgICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8oZmFsc2UpCisg
ICAgICAgICAgICAsIHNjb3BlT2ZMYXN0RWxlbWVudCgwKQogICAgICAgICB7IH0KIAogICAgICAg
ICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CkBAIC03OSw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgYm9vbCBpc1N1YlNlbGVjdG9yOwogICAgICAgICBib29sIGhhc1Njcm9sbGJhclBzZXVkbzsK
ICAgICAgICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlT2ZMYXN0RWxlbWVudDsKICAgICB9OwogCiAgICAgYm9vbCBjaGVja1NlbGVj
dG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ig
PSBmYWxzZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggZjZm
ZjNkNGU5NjI3OTMxZTk1MzY5YmI1MjI0NjVjMzU3NTg3YzNhYS4uOWY4ZjRiMWIzZjQ1OWRkNDBk
YzExZTA0MzQ5ZWM5NDRlZDBkOWFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cApAQCAtNjM4LDE2ICs2MzgsMjQgQEAgaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6
OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKIAogYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRj
aGluZ1VBUnVsZXMgPSBmYWxzZTsKIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6
OmNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1lbnRSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9w
dGlvbnMpCiB7CiAgICAgQVNTRVJUKHJ1bGVzKTsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIAog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVk
b0lkKCk7Ci0gICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKG1f
c3R5bGVkRWxlbWVudCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxl
cy0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKLSAgICB9CisgICAgaWYgKHBzZXVkb0lkLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7
CisKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPnNoYWRvd1BzZXVkb0Vs
ZW1lbnRSdWxlcyhwc2V1ZG9JZC5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCwgY29uc3QgTWF0Y2hPcHRpb25zJiBvcHRpb25zKQoreworICAgIEFTU0VSVChydWxlcyk7Cisg
ICAgQVNTRVJUKG1fZWxlbWVudCk7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYg
KG1fZWxlbWVudC0+aXNXZWJWVFROb2RlKCkpCkBAIC02OTEsNiArNjk5LDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlcywg
aW50JiBmaXJzdFJ1bGUKICAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2Vs
ZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3JlZ2lvbkZvclN0eWxpbmctPm5vZGUoKSkp
KSB7CiAgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVzLT5tX3JlZ2lvblNl
bGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7CiAgICAgICAgICAgICBBU1NF
UlQocmVnaW9uUnVsZXMpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVu
dFJ1bGVzKHJlZ2lvblJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9u
cyk7CiAgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhyZWdpb25SdWxlcywgZmlyc3RS
dWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NzM1LDIzICs3NDQsMzEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1
bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKICAgICAgICAgYm9vbCBh
cHBseUF1dGhvclN0eWxlcyA9IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5
bGVzKCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7CiAgICAgICAgIHVuc2ln
bmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7CisKKyAgICAgICAg
Ym9vbCBlbGVtZW50SGFzU2hhZG93UHNldWRvID0gIW1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQo
KS5pc0VtcHR5KCk7CisgICAgICAgIGJvb2wgcGFyZW50QXBwbHlBdXRob3JTdHlsZXMgPSBmYWxz
ZTsKKyAgICAgICAgaW50IHBhcmVudFRyZWVTY29wZUJvdW5kc0luZGV4ID0gMDsKKyAgICAgICAg
aWYgKGVsZW1lbnRIYXNTaGFkb3dQc2V1ZG8pCisgICAgICAgICAgICBwYXJlbnRUcmVlU2NvcGVC
b3VuZHNJbmRleCA9IG1fc2NvcGVSZXNvbHZlci0+ZmluZFN0eWxlQm91bmRzT2ZQYXJlbnRUcmVl
U2NvcGUobV9lbGVtZW50LCBwYXJlbnRBcHBseUF1dGhvclN0eWxlcyk7CisKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBjb25z
dCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVy
LT5zdGFja0ZyYW1lQXQoaSk7CiAgICAgICAgICAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwog
ICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5zaXplKCkgLSAxOwogCi0gICAgICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVz
b2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQo
aSk7CiAgICAgICAgICAgICBkb2N1bWVudFNjb3BlID0gZG9jdW1lbnRTY29wZSAmJiAhZnJhbWUu
bV9zY29wZS0+aXNJblNoYWRvd1RyZWUoKTsKLSAgICAgICAgICAgIGlmIChkb2N1bWVudFNjb3Bl
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcHBseUF1dGhvclN0eWxlcykKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmICghbV9zY29wZVJlc29sdmVyLT5tYXRjaGVzU3R5bGVCb3VuZHMoZnJhbWUpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTWF0
Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMsIGZyYW1lLm1fc2NvcGUpOwotICAg
ICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFu
Z2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9u
cyk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFtZS5tX3J1
bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RB
dXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50SGFzU2hhZG93UHNl
dWRvKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQgPSAoZG9j
dW1lbnRTY29wZSAmJiBwYXJlbnRBcHBseUF1dGhvclN0eWxlcykgfHwgZnJhbWUubV9hdXRob3JT
dHlsZUJvdW5kc0luZGV4ID09IHBhcmVudFRyZWVTY29wZUJvdW5kc0luZGV4ID8gMCA6IGZyYW1l
Lm1fc2NvcGU7CisgICAgICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1
bGVzKGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoKGRvY3VtZW50U2NvcGUgJiYgYXBwbHlBdXRob3JTdHlsZXMpIHx8IG1fc2Nv
cGVSZXNvbHZlci0+bWF0Y2hlc1N0eWxlQm91bmRzKGZyYW1lKSkgeworICAgICAgICAgICAgICAg
IG9wdGlvbnMuc2NvcGVPZkxhc3RFbGVtZW50ID0gMDsKKyAgICAgICAgICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlcyhmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFtZS5tX3J1bGVTZXQsIHJlc3Vs
dC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBv
cHRpb25zKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNo
ZWRSdWxlcyhyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzg2LDggKzgwMywxMCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAgICAgICAgIHJldHVybjsKIAogICAgIE1hdGNoT3B0aW9u
cyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzLCBtX2VsZW1lbnQpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkgeworICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMobWF0Y2hlZFJ1bGVzLmF0KGktMSksIHJlc3VsdC5y
YW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRp
b25zKTsKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hlZFJ1bGVzLmF0KGktMSks
IHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlLCBvcHRpb25zKTsKKyAgICB9CiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJl
c3VsdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwpAQCAtODA1LDYgKzgyNCwx
NiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogCiAgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1dGhv
ciBydWxlcy4KICAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7Cisj
aWYgRU5BQkxFKFNIQURPV19ET00pCisgICAgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQgPSBk
b2N1bWVudCgpOworICAgIGlmIChUcmVlU2NvcGUqIHBhcmVudFRyZWVTY29wZSA9IG1fZWxlbWVu
dC0+dHJlZVNjb3BlKCktPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICBpZiAocGFyZW50VHJl
ZVNjb3BlLT5hcHBseUF1dGhvclN0eWxlcygpKQorICAgICAgICAgICAgb3B0aW9ucy5zY29wZU9m
TGFzdEVsZW1lbnQgPSAwOworI2VuZGlmCisgICAgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVu
dFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxl
LCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyNpZiBFTkFCTEUoU0hB
RE9XX0RPTSkKKyAgICBvcHRpb25zLnNjb3BlT2ZMYXN0RWxlbWVudCA9IDA7CisjZW5kaWYKICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2Vz
LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7
CiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9hdXRob3JTdHlsZS5nZXQoKSwg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIG9wdGlvbnMpOwogICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwpA
QCAtODIwLDYgKzg0OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICAgICBtX21hdGNoZWRS
dWxlcy5jbGVhcigpOwogCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUgPSByZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdQc2V1ZG9F
bGVtZW50UnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVs
ZSwgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJz
dFVzZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgaW5jbHVkZUVtcHR5UnVsZXMp
OwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fdXNlclN0eWxlLmdldCgpLCBy
ZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBp
bmNsdWRlRW1wdHlSdWxlcyk7CiAKQEAgLTgzMSw2ICs4NjEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKICAg
ICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVB
UnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOworICAgIGNvbGxlY3RN
YXRjaGluZ1BzZXVkb0VsZW1lbnRSdWxlcyhydWxlcywgcmVzdWx0LnJhbmdlcy5maXJzdFVBUnVs
ZSwgcmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBmYWxzZSk7CiAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMocnVsZXMsIHJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIHJlc3VsdC5yYW5nZXMubGFz
dFVBUnVsZSwgZmFsc2UpOwogCiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3Vs
dCk7CkBAIC04NDMsNyArODc0LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpCiAKICAgICAv
LyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3IgcmFuZG9t
IGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZlLgogICAg
IC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUgaW4gdGhh
dCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KKyNpZiBFTkFCTEUoU0hBRE9X
X0RPTSkKKyAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX2NoZWNrZXIucGFyZW50U3RhY2tJ
c0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKSAmJiAhb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQ7
CisjZWxzZQogICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fY2hlY2tlci5wYXJlbnRTdGFj
a0lzQ29uc2lzdGVudChtX3BhcmVudE5vZGUpOworI2VuZGlmCiAKICAgICB1bnNpZ25lZCBzaXpl
ID0gcnVsZXMtPnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CkBAIC04NTMsNyArODg4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKIAogICAgICAg
ICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxNYXRjaFJ1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7Ci0gICAgICAgIGlmIChjaGVja1Nl
bGVjdG9yKHJ1bGVEYXRhLCBvcHRpb25zLnNjb3BlKSkgeworICAgICAgICBpZiAoY2hlY2tTZWxl
Y3RvcihydWxlRGF0YSwgb3B0aW9ucykpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhh
cyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVn
IG1vZGUuCiAgICAgICAgICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0g
cnVsZS0+cHJvcGVydGllcygpOwogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzIHx8IChwcm9w
ZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW9wdGlvbnMuaW5jbHVkZUVtcHR5UnVsZXMpKSB7CkBAIC0x
MDU3LDYgKzEwOTIsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCiAKICAgICBpbnQgZmlyc3RSdWxlSW5k
ZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIG1fY2hlY2tlci5zZXRNb2RlKFNlbGVj
dG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdQc2V1ZG9FbGVt
ZW50UnVsZXMocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGZhbHNlKTsK
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhydWxlU2V0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1
bGVJbmRleCwgZmFsc2UpOwogICAgIG1fY2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6
UmVzb2x2aW5nU3R5bGUpOwogICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCkBAIC0y
MjMzLDcgKzIyNjksNyBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpw
c2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQcwogICAgIHJldHVybiBtX3J1
bGVMaXN0LnJlbGVhc2UoKTsKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tT
ZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlKQoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxl
RGF0YSYgcnVsZURhdGEsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBtX2R5
bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIApAQCAtMjI1Nyw3ICsyMjkzLDggQEAgaW5saW5lIGJv
b2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEs
IGNvbnN0IENvbnRhaW4KICAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBTZWxlY3RvckNoZWNr
ZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOwogICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gc3R5
bGUoKTsKICAgICBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA9IG1fcGFyZW50Tm9kZSA/IG1f
cGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7Ci0gICAgY29udGV4dC5zY29wZSA9IHNjb3Bl
OworICAgIGNvbnRleHQuc2NvcGUgPSBvcHRpb25zLnNjb3BlOworICAgIGNvbnRleHQuc2NvcGVP
Zkxhc3RFbGVtZW50ID0gb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQ7CiAgICAgY29udGV4dC5w
c2V1ZG9TdHlsZSA9IG1fcHNldWRvU3R5bGU7CiAgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IoY29udGV4dCwgbV9keW5hbWlj
UHNldWRvKTsKICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNo
ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA5N2JjZjE2OTQwODNlMGEyNmFk
ZDQ2YWY0YTk5OGQ1OGY1NGRiNzZlLi42ZDBkYWJkMDU2ZjY0YjljMjdiYTBhNjdmNGI5NTllYTgz
NTJmMzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTM0NSw5ICszNDUsMTAg
QEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgc3RydWN0IE1hdGNoT3B0aW9ucyB7Ci0gICAgICAg
IE1hdGNoT3B0aW9ucyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBjb25zdCBDb250YWluZXJOb2Rl
KiBzY29wZSA9IDApIDogc2NvcGUoc2NvcGUpLCBpbmNsdWRlRW1wdHlSdWxlcyhpbmNsdWRlRW1w
dHlSdWxlcykgeyB9CisgICAgICAgIE1hdGNoT3B0aW9ucyhib29sIGluY2x1ZGVFbXB0eVJ1bGVz
LCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlT2ZMYXN0RWxlbWVudCA9IDApIDogc2NvcGUoc2NvcGUpLCBpbmNsdWRlRW1wdHlSdWxlcyhp
bmNsdWRlRW1wdHlSdWxlcyksIHNjb3BlT2ZMYXN0RWxlbWVudChzY29wZU9mTGFzdEVsZW1lbnQp
IHsgfQogICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKICAgICAgICAgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlczsKKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVPZkxh
c3RFbGVtZW50OwogICAgIH07CiAKICAgICBzdGF0aWMgdm9pZCBhZGRNYXRjaGVkUHJvcGVydGll
cyhNYXRjaFJlc3VsdCYsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxl
UnVsZSogPSAwLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRj
aEFsbCwgYm9vbCBpblJlZ2lvblJ1bGUgPSBmYWxzZSk7CkBAIC0zNTksMTUgKzM2MCwxOSBAQCBw
cml2YXRlOgogICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmLCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMo
TWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyNpZiBFTkFCTEUoU0hBRE9X
X0RPTSkgfHwgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9y
UnVsZXNQZXJTY29wZShNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZWRFbXB0eVJ1bGVzLCBjb25z
dCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmLCBib29sIHBzZXVkb09ubHkpOworI2Vu
ZGlmCiAgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCosIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7
CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMoUnVsZVNldCosIGlu
dCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25z
Jik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMm
KTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVs
ZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBN
YXRjaE9wdGlvbnMmKTsKICAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0
YSYpIGNvbnN0OwogICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOwogICAgIHZvaWQgc29ydEFu
ZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAKLSAgICBib29sIGNoZWNrU2Vs
ZWN0b3IoY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CisgICAg
Ym9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgTWF0Y2hPcHRpb25zJik7
CiAgICAgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3Rv
ciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCk7CiAgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOwogICAgIGVudW0gU3R5bGVB
cHBsaWNhdGlvblBhc3MgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2Nv
cGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNw
cAppbmRleCA3MzAwNTBkNmM0ZDgxNzJlNTU0YmU4NjAyOGQ5YmI1N2M3YjEyYjk1Li5kNjFhYTJk
NmRkNGRhZjkyNDU1N2NiZmZlNWJiNDg3OTU4NDVlODIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTY29wZVJlc29sdmVyLmNwcApAQCAtMTMxLDYgKzEzMSw3IEBAIHZvaWQgU3R5bGVTY29w
ZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWlu
ZXJOb2RlKiBzCiAKICAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jv
b3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQogICAgICAgICArK21fc3RhY2tQYXJlbnRC
b3VuZHNJbmRleDsKKwogICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBhcmVudCBvbnRv
IHRoZSBzdGFjay4KICAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvcihzY29wZSk7CiAg
ICAgaWYgKHJ1bGVTZXQpCkBAIC0xNTAsNiArMTUxLDIzIEBAIHZvaWQgU3R5bGVTY29wZVJlc29s
dmVyOjpwb3AoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiAgICAgfQogfQogCitpbnQgU3R5
bGVTY29wZVJlc29sdmVyOjpmaW5kU3R5bGVCb3VuZHNPZlBhcmVudFRyZWVTY29wZShjb25zdCBF
bGVtZW50KiBlbGVtZW50LCBib29sJiBhcHBseUF1dGhvclN0eWxlcykgY29uc3QKK3sKKyAgICBB
U1NFUlQoZWxlbWVudCk7CisKKyAgICBhcHBseUF1dGhvclN0eWxlcyA9IGZhbHNlOworCisgICAg
Ly8gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4ICsgMSBkb2Vzbid0IG1hdGNoIGFueSBpdGVtcyBp
biBtX3N0YWNrLgorICAgIGlmICghbV9zdGFja1BhcmVudCB8fCAhbV9zdGFja1BhcmVudC0+aXNJ
blNoYWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJuIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCAr
IDE7CisKKyAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG1fc3RhY2tQYXJlbnQtPnRyZWVTY29w
ZSgpOworICAgIGlmIChUcmVlU2NvcGUqIHBhcmVudFRyZWVTY29wZSA9IHRyZWVTY29wZS0+cGFy
ZW50VHJlZVNjb3BlKCkpCisgICAgICAgIGFwcGx5QXV0aG9yU3R5bGVzID0gcGFyZW50VHJlZVNj
b3BlLT5hcHBseUF1dGhvclN0eWxlcygpOworCisgICAgcmV0dXJuIHRyZWVTY29wZS0+YXBwbHlB
dXRob3JTdHlsZXMoKSA/IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCA6IG1fc3RhY2tQYXJlbnRC
b3VuZHNJbmRleCAtIDE7Cit9CisKIHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpjb2xsZWN0RmVh
dHVyZXNUbyhSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMpCiB7CiAgICAgZm9yIChTY29wZWRSdWxl
U2V0TWFwOjppdGVyYXRvciBpdCA9IG1fYXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fYXV0
aG9yU3R5bGVzLmVuZCgpOyArK2l0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlU2NvcGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZl
ci5oCmluZGV4IDNiZTNmZjRmNzBjNzM3NWJkMDE0MjZhMDBiYTQyNDEyODQ2MmNjMGUuLjJlNjI1
MGIwZTIzNjA5ZDUyYTE5Y2VkYWM1ZGExZmQzYzZiOTVjMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTY29wZVJlc29sdmVyLmgKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAgICAgY29u
c3QgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3N0YWNrLmF0KGluZGV4KTsgfQogICAgIGJvb2wgbWF0Y2hlc1N0eWxlQm91bmRzKGNvbnN0
IFN0YWNrRnJhbWUmIGZyYW1lKSBjb25zdCB7IHJldHVybiBmcmFtZS5tX2F1dGhvclN0eWxlQm91
bmRzSW5kZXggPT0gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OyB9CisgICAgaW50IGZpbmRTdHls
ZUJvdW5kc09mUGFyZW50VHJlZVNjb3BlKGNvbnN0IEVsZW1lbnQqLCBib29sJiBhcHBseUF1dGhv
clN0eWxlcykgY29uc3Q7CiAgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNl
dCYpOwogCiAgICAgdm9pZCBhZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0KiwgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
YzIwMzY2MjllZTA2NmNjNGZkODJhNWUxZmQ4MGE3ZmJmYWRmY2EzYS4uMmJiMmY2ZDMyMzU2YzJh
M2FkMmMxNjE0ZWExZGI0OWU3ZGI4NWQxMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTEy
LTE3ICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hh
ZG93IERPTV06IGN1c3RvbSBwc2V1ZG8gaW4gc3R5bGVzIGluIHNoYWRvdyBkb20gdHJlZXMgZG9l
c24ndCB3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDI5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGZhc3QvZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1uZXN0ZWQtcHNl
dWRvLWlkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5l
c3RlZC1wc2V1ZG8taWQuaHRtbDoKKyAgICAgICAgYTo6eC1uZXN0ZWQtc2hhZG93LWNoaWxkIHJ1
bGUgaXMgZGVjbGFyZWQgaW4gYSBkb2N1bWVudCBidXQgdGhlIGVsZW1lbnQKKyAgICAgICAgaXMg
aW4gYSBzaGFkb3cgZG9tIHRyZWUuIFNvIGE6OngtbmVzdGVkLXNoYWRvdy1jaGlsZCBydWxlIHNo
b3VsZCBub3QKKyAgICAgICAgYmUgYXBwbHkuCisKIDIwMTItMTItMTcgIEt5dW5nVGFlIEtpbSAg
PGt0Zi5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgUGVyY2VudGFnZSB3aWR0aCByZXBsYWNl
ZCBlbGVtZW50IGluY29ycmVjdGx5IHJlbmRlcmVkIHdoZW4gaW50cmluc2ljIHNpemUgY2hhbmdl
ZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1p
bi1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVk
by1zdHlsZS1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlMTIzOGZmMmNiODk0
MDVmZDkyOTZmNGNiYjNiZTU5YWMxMjBiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRvdy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxNyBAQAorQ2FzZTE6IEEgcHNldWRvIHN0eWxlIGlzIGluIHRoZSBzYW1lIHRyZWVz
Y29wZSBhcyBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uCitQQVNTIGdldENvbXB1dGVkU3R5bGUodGFy
Z2V0KS5jb2xvciBpcyAicmdiKDAsIDAsIDApIgorQ2FzZTI6IEEgcHNldWRvIHN0eWxlIGlzIGlu
IHRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9vIHBzZXVkby4KK1BBU1MgZ2V0
Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIGlzICJyZ2IoMCwgMCwgMjU1KSIKK0Nhc2UzOiBB
IHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgcGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZv
byBwc2V1ZG8uIFRoZSBkaXYncyB0cmVlc2NvcGUgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1
ZS4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIGlzICJyZ2IoMCwgMCwgMjU1
KSIKK0Nhc2U0OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgZ3JhbmQtcGFyZW50IHRyZWVzY29w
ZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uCitQQVNTIGdldENvbXB1dGVkU3R5bGUodGFyZ2V0
KS5jb2xvciBpcyAicmdiKDAsIDAsIDApIgorQ2FzZTU6IEEgcHNldWRvIHN0eWxlIGlzIGluIHRo
ZSBncmFuZC1wYXJlbnQgdHJlZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9vIHBzZXVkby4gVGhlIHBh
cmVudCB0cmVlc2NvcGUgb2YgdGhlIGRpdiBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLgor
UEFTUyBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgor
Q2FzZTY6IFBzZXVkbyBzdHlsZXMgYXJlIGluIHRoZSBwYXJlbnQgYW5kIGdyYW5kLXBhcmVudCB0
cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiBUaGUgcGFyZW50IHRyZWVzY29wZSBv
ZiB0aGUgZGl2IGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCitQQVNTIGdldENvbXB1dGVk
U3R5bGUodGFyZ2V0KS5jb2xvciBpcyAicmdiKDAsIDEyOCwgMCkiCitDYXNlNzogQSBwc2V1ZG8g
c3R5bGUgaXMgaW4gZG9jdW1lbnQuIE5vIHRyZWVzY29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxl
cyB0cnVlLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAw
LCAwKSIKK0Nhc2U4OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiBkb2N1bWVudC4gVGhlIHBhcmVudCB0
cmVlc2NvcGUgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4KK1BBU1MgZ2V0Q29tcHV0ZWRT
dHlsZSh0YXJnZXQpLmNvbG9yIGlzICJyZ2IoMCwgMCwgMjU1KSIKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTlkYWZiNDM1ZWQ2NThhMTNjNTBlNTc4MjQxOWE1YjM3ODNiOTc5ZQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4t
c2hhZG93Lmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorICA8ZGl2IGlkPSJob3N0Ij48L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQ+
Cit2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7Cit2YXIgc2hhZG93
Um9vdCA9IGhvc3Qud2Via2l0Q3JlYXRlU2hhZG93Um9vdCgpOworc2hhZG93Um9vdC5pbm5lckhU
TUwgPSAiPGRpdiBpZD0naW5uZXItaG9zdCc+PC9kaXY+IjsKKwordmFyIGlubmVySG9zdCA9IHNo
YWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoImlubmVyLWhvc3QiKTsKK3ZhciBpbm5lclNoYWRvdyA9
IGlubmVySG9zdC53ZWJraXRDcmVhdGVTaGFkb3dSb290KCk7Citpbm5lclNoYWRvdy5pbm5lckhU
TUwgPSAiPGRpdiBpZD0naW5uZXItbW9zdC1ob3N0Jz48L2Rpdj4iCisKK3ZhciBpbm5lck1vc3RI
b3N0ID0gaW5uZXJTaGFkb3cuZ2V0RWxlbWVudEJ5SWQoImlubmVyLW1vc3QtaG9zdCIpOwordmFy
IGlubmVyTW9zdFNoYWRvdyA9IGlubmVyTW9zdEhvc3Qud2Via2l0Q3JlYXRlU2hhZG93Um9vdCgp
OworCit2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Cit0YXJnZXQu
d2Via2l0UHNldWRvID0gJ3gtZm9vJzsKK2lubmVyTW9zdFNoYWRvdy5hcHBlbmRDaGlsZCh0YXJn
ZXQpOworCit2YXIgcHNldWRvU3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIp
OworcHNldWRvU3R5bGUuaW5uZXJIVE1MID0gImRpdjo6eC1mb28geyBjb2xvcjogYmx1ZTsgfSI7
Citpbm5lck1vc3RTaGFkb3cuYXBwZW5kQ2hpbGQocHNldWRvU3R5bGUpOworCitkZWJ1ZygiQ2Fz
ZTE6IEEgcHNldWRvIHN0eWxlIGlzIGluIHRoZSBzYW1lIHRyZWVzY29wZSBhcyBkaXYgd2l0aCB4
LWZvbyBwc2V1ZG8uIik7CitzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9y
IiwgJyJyZ2IoMCwgMCwgMCkiJyk7CisKK2RlYnVnKCJDYXNlMjogQSBwc2V1ZG8gc3R5bGUgaXMg
aW4gdGhlIHBhcmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiIpOworaW5u
ZXJTaGFkb3cuYXBwZW5kQ2hpbGQocHNldWRvU3R5bGUpOworc2hvdWxkQmUoImdldENvbXB1dGVk
U3R5bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDAsIDI1NSkiJyk7CisKK2RlYnVnKCJDYXNl
MzogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHBhcmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGgg
eC1mb28gcHNldWRvLiBUaGUgZGl2J3MgdHJlZXNjb3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVz
IHRydWUuIik7Citpbm5lck1vc3RTaGFkb3cuYXBwbHlBdXRob3JTdHlsZXMgPSB0cnVlOworc2hv
dWxkQmUoImdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDAsIDI1NSki
Jyk7CisKK2RlYnVnKCJDYXNlNDogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIGdyYW5kLXBhcmVu
dCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiIpOworaW5uZXJNb3N0U2hhZG93
LmFwcGx5QXV0aG9yU3R5bGVzID0gZmFsc2U7CitzaGFkb3dSb290LmFwcGVuZENoaWxkKHBzZXVk
b1N0eWxlKTsKK3Nob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IiLCAnInJn
YigwLCAwLCAwKSInKTsKKworZGVidWcoIkNhc2U1OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUg
Z3JhbmQtcGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSBwYXJl
bnQgdHJlZXNjb3BlIG9mIHRoZSBkaXYgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4iKTsK
K2lubmVyU2hhZG93LmFwcGx5QXV0aG9yU3R5bGVzID0gdHJ1ZTsKK3Nob3VsZEJlKCJnZXRDb21w
dXRlZFN0eWxlKHRhcmdldCkuY29sb3IiLCAnInJnYigwLCAwLCAyNTUpIicpOworCitkZWJ1Zygi
Q2FzZTY6IFBzZXVkbyBzdHlsZXMgYXJlIGluIHRoZSBwYXJlbnQgYW5kIGdyYW5kLXBhcmVudCB0
cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiBUaGUgcGFyZW50IHRyZWVzY29wZSBv
ZiB0aGUgZGl2IGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuIik7Cit2YXIgcHNldWRvU3R5
bGUyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKK3BzZXVkb1N0eWxlMi5pbm5l
ckhUTUwgPSAiZGl2Ojp4LWZvbyB7IGNvbG9yOiBncmVlbjsgfSI7Citpbm5lclNoYWRvdy5hcHBl
bmRDaGlsZChwc2V1ZG9TdHlsZTIpOworc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUodGFyZ2V0
KS5jb2xvciIsICcicmdiKDAsIDEyOCwgMCkiJyk7CisKK2RlYnVnKCJDYXNlNzogQSBwc2V1ZG8g
c3R5bGUgaXMgaW4gZG9jdW1lbnQuIE5vIHRyZWVzY29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxl
cyB0cnVlLiIpOworc2hhZG93Um9vdC5yZW1vdmVDaGlsZChwc2V1ZG9TdHlsZSk7Citpbm5lclNo
YWRvdy5yZW1vdmVDaGlsZChwc2V1ZG9TdHlsZTIpOworZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGls
ZChwc2V1ZG9TdHlsZSk7Citpbm5lclNoYWRvdy5hcHBseUF1dGhvclN0eWxlcyA9IGZhbHNlOwor
c2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDAsIDAp
IicpOworCitkZWJ1ZygiQ2FzZTg6IEEgcHNldWRvIHN0eWxlIGlzIGluIGRvY3VtZW50LiBUaGUg
cGFyZW50IHRyZWVzY29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLiIpOworaW5uZXJT
aGFkb3cuYXBwbHlBdXRob3JTdHlsZXMgPSB0cnVlOworc2hvdWxkQmUoImdldENvbXB1dGVkU3R5
bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDAsIDI1NSkiJyk7Cis8L3NjcmlwdD4KKzwvaHRt
bD4KKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5l
c3RlZC1wc2V1ZG8taWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3NoYWRvdy1uZXN0ZWQtcHNldWRvLWlkLWV4cGVjdGVkLnR4dAppbmRleCA5MDU4ZDZiNTA0ODM1
MWQzZDJjYjc1MjkxODg2MWZiYTRjYzJmNGRiLi44MzBkOGNkZjZlYTI3NTM3MjFhMDdkOWM1Yzhj
MDhkNjg0NWUyNTU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LW5lc3RlZC1wc2V1ZG8taWQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy9zaGFkb3ctbmVzdGVkLXBzZXVkby1pZC1leHBlY3RlZC50eHQKQEAgLTQsNyAr
NCw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiAKIAogUEFTUyB3aW5kb3cuZ2V0Q29tcHV0
ZWRTdHlsZSh0dXBsZS5zaGFkb3dDaGlsZCkuY29sb3IgaXMgJ3JnYigyNTUsIDAsIDApJwotUEFT
UyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCkuY29sb3Ig
aXMgJ3JnYigwLCAwLCAyNTUpJworUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dU
dXBsZS5zaGFkb3dDaGlsZCkuY29sb3IgaXMgJ3JnYigyNTUsIDAsIDApJwogUEFTUyB3aW5kb3cu
Z2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCkuYmFja2dyb3VuZENvbG9y
IGlzICdyZ2IoMCwgMTI4LCAwKScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1uZXN0ZWQtcHNl
dWRvLWlkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3RlZC1w
c2V1ZG8taWQuaHRtbAppbmRleCA0YTRiYWE4Nzc5NzkxMjM3Zjc5NmEyYWFlMzExOWMxMjhiZWFh
NjJiLi4wMmVhODAyNjFiMjVjNmY1ZmY1OTExMmNjZGUzZGExNjdhYjJhYTYxIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3RlZC1wc2V1ZG8taWQuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3RlZC1wc2V1ZG8t
aWQuaHRtbApAQCAtNDIsNyArNDIsOSBAQCB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJob3N0Iik7CiB2YXIgdHVwbGUgPSBidWlsZFNoYWRvd1dpdGhPbmVDaGlsZChob3N0LCAi
YSIsICJ4LXNoYWRvdy1jaGlsZCIpOwogc2hvdWxkQmUoIndpbmRvdy5nZXRDb21wdXRlZFN0eWxl
KHR1cGxlLnNoYWRvd0NoaWxkKS5jb2xvciIsICIncmdiKDI1NSwgMCwgMCknIik7CiB2YXIgc2hh
ZG93VHVwbGUgPSBidWlsZFNoYWRvd1dpdGhPbmVDaGlsZCh0dXBsZS5zaGFkb3dDaGlsZCwgImIi
LCAieC1uZXN0ZWQtc2hhZG93LWNoaWxkIik7Ci1zaG91bGRCZSgid2luZG93LmdldENvbXB1dGVk
U3R5bGUoc2hhZG93VHVwbGUuc2hhZG93Q2hpbGQpLmNvbG9yIiwgIidyZ2IoMCwgMCwgMjU1KSci
KTsKKy8vIFNpbmNlIDxhPiBpbiBhIHNoYWRvdyBkb20gdHJlZSBhbmQgYTo6eC1uZXN0ZWQtc2hh
ZG93LWNoaWxkJ3MgcnVsZSBpcworLy8gZGVjbGFyZWQgaW4gYSBkb2N1bWVudCB0cmVlLCB3ZSBj
YW5ub3QgYXBwbHkgdGhlIHJ1bGUgdG8gdGhlIDxhPi4KK3Nob3VsZEJlKCJ3aW5kb3cuZ2V0Q29t
cHV0ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCkuY29sb3IiLCAiJ3JnYigyNTUsIDAs
IDApJyIpOwogc2hvdWxkQmUoIndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHNoYWRvd1R1cGxlLnNo
YWRvd0NoaWxkKS5iYWNrZ3JvdW5kQ29sb3IiLCAiJ3JnYigwLCAxMjgsIDApJyIpOwogCiB2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180078</attachid>
            <date>2012-12-18 19:59:15 -0800</date>
            <delta_ts>2013-01-09 03:35:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102919-20121219125631.patch</filename>
            <type>text/plain</type>
            <size>27383</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjA5Y2UyYzI2YTU3NjZh
Mjk4ODYyODFmNGRmYTkzZTgxZDk4Yjc1Ni4uZmJhM2Y4MWExNzFiYWMwOWVjYzgyOGUyMzhlMzRl
ZjIzY2YyODZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEyLTE3ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV06
IGN1c3RvbSBwc2V1ZG8gaW4gc3R5bGVzIGluIHNoYWRvdyBkb20gdHJlZXMgZG9lc24ndCB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI5MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXN0b20g
cHNldWRvIHN0eWxlcyBkZWNsYXJlZCBpbiBhIHBhcmVudCB0cmVlc2NvcGUgc2hvdWxkIGJlIGNo
ZWNrZWQKKyAgICAgICAgZm9yIGVsZW1lbnRzIGluIHRoZSB0cmVlc2NvcGUuIEN1c3RvbSBwc2V1
ZG8gc3R5bGVzIGluIGFuIGF1dGhvcgorICAgICAgICBzdHlsZXNoZWV0IHNob3VsZCBvbmx5IGFw
cGx5IHRvIGVsZW1lbnRzIGluIGEgY2hpbGQgdHJlZSBzY29wZSBvZgorICAgICAgICBkb2N1bWVu
dCBvciBpbiBzb21lIHRyZWVzY29wZSB3aG9zZSBwYXJlbnQgdHJlZXNjb3BlIGhhcworICAgICAg
ICBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hh
ZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cuaHRtbAorCisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Vs
ZWN0b3IpOgorICAgICAgICBNb2RpZmllZCB0byBjaGVjayB3aGV0aGVyIHRoZSBsYXN0IG1hdGNo
ZWQgZWxlbWVudCBtYXRjaGVzIHRoZSBnaXZlbgorICAgICAgICBzY29wZSBvciBub3QuCisgICAg
ICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQp
OgorICAgICAgICAoU2VsZWN0b3JDaGVja2luZ0NvbnRleHQpOgorICAgICAgICBBZGRlZCBhIG5l
dyBtZW1iZXIgdmFyaWFibGU6IHNjb3BlT2ZMYXN0RWxlbWVudC4KKyAgICAgICAgKiBjc3MvU3R5
bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMpOgorICAgICAgICBNb3ZlZCB0aGUgY29kZSBmcm9t
IGNvbGxlY3RNYXRjaGluZ1J1bGVzLiBUaGlzIG1ldGhvZCBvbmx5IGNvbGxlY3RzCisgICAgICAg
IG1hdGNoZWQgcHNldWRvIHJ1bGVzIGZyb20gdGhlIGdpdmVuIHJ1bGVzZXQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGlu
Z1J1bGVzKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
VUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIFNpbmNlIHRoZSBjb2RlIGZvciBjb2xs
ZWN0aW5nIHBzZXVkbyBydWxlcyBpcyBtb3ZlZCBmcm9tCisgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzIHRvIGNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1lbnRSdWxlcywgbmVlZCB0bworICAg
ICAgICBpbnZva2UgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24gYmVmb3JlIGNvbGxlY3RN
YXRjaGluZ1J1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29w
ZWRBdXRob3JSdWxlcyk6CisgICAgICAgIEFkZGVkIGNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1l
bnRSdWxlcyBmb3IgZWFjaCBwYXJlbnQgdHJlZSBzY29wZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICBOZWVkIHRvIHByb3ZpZGUgc2Nv
cGVPZkxhc3RFbGVtZW50IGluZm9ybWF0aW9uLCBtb2RpZmllZCB0aGUgc2Vjb25kCisgICAgICAg
IGFyZ3VtZW50IGZyb20gImNvbnN0IENvbnRhaW5lck5vZGUqIiB0byAiY29uc3QgTWF0Y2hPcHRp
b25zJiIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QpOgorICAgICAgICBTaW5jZSBjaGVja1NlbGVjdG9yIGlzIG1vZGlmaWVkLCB1
cGRhdGVkLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpNYXRjaE9wdGlvbnM6Ok1hdGNoT3B0aW9ucyk6CisgICAgICAgIChN
YXRjaE9wdGlvbnMpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIEFkZGVkIGEg
bmV3IG1lbWJlciB2YXJpYWJsZSwgc2NvcGVPZkxhc3RFbGVtZW50LgorICAgICAgICAqIGNzcy9T
dHlsZVNjb3BlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29s
dmVyOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZmluZFN0
eWxlQm91bmRzT2ZQYXJlbnRUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVy
KToKKwogMjAxMi0xMi0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgRml4ZWQgYmFkIG1lcmdlIGluICJJbml0aWFsIHJlZmFjdG9yaW5nIG9mIGRhdGFiYXNlIGZ1
bmN0aW9uYWxpdHkgaW50byB0aGUgbWFuYWdlciBhbmQgc2VydmVyIi4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNTdhMWQ5Zjk3Mzg4MWZlNTViZWRmNTE0MDgwZDJm
YTI2MDAzY2VlMS4uZDFkYWY1NWI4NTc1Y2QxZGY5ZTMxMmUxYmJlYjlkYTlmZDExZmM3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTQ3Miw4ICs0NzIsMTcgQEAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxl
Y3Rvcihjb25zdCBTZWxlY3RvckNoZWMKIAogICAgIC8vIFByZXBhcmUgbmV4dCBzZWxlY3Rvcgog
ICAgIENTU1NlbGVjdG9yKiBoaXN0b3J5U2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yLT50YWdI
aXN0b3J5KCk7Ci0gICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpCisgICAgaWYgKCFoaXN0b3J5U2Vs
ZWN0b3IpIHsKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICAgICAgaWYgKGNvbnRleHQuc2Nv
cGVPZkxhc3RFbGVtZW50KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgdGhlIHNjb3Bl
IG1vcmUgc3RyaWN0bHkuCisgICAgICAgICAgICAvLyBPYnRhaW5lZCBmcm9tIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL2F0dGFjaG1lbnQuY2dpP2lkPTE3Njg5MgorICAgICAgICAgICAgLy8gU2hv
dWxkIHdhaXQgdGlsbCB0aGUgb3JpZ2luYWwgYnVnIGlzIGZpeGVkLgorICAgICAgICAgICAgcmV0
dXJuIGNvbnRleHQuc2NvcGVPZkxhc3RFbGVtZW50LT50cmVlU2NvcGUoKSA9PSBjb250ZXh0LmVs
ZW1lbnQtPnRyZWVTY29wZSgpID8gU2VsZWN0b3JNYXRjaGVzIDogU2VsZWN0b3JGYWlsc0xvY2Fs
bHk7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICByZXR1cm4gU2VsZWN0b3JNYXRjaGVzOwor
ICAgIH0KIAogICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IG5leHRDb250ZXh0KGNvbnRleHQp
OwogICAgIG5leHRDb250ZXh0LnNlbGVjdG9yID0gaGlzdG9yeVNlbGVjdG9yOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDliZGI2NjliMjQ2ZWU2NDNkNWUyZWUyMmI1YTFh
MjRlZTA5MThlNmEuLjQ3YjM5MGNlNzlhMTg5NGI1ZDRiZDI5NmIwMzI1YTVmZjY1MjJiNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgLCBpc1N1YlNlbGVjdG9yKGZhbHNlKQogICAgICAgICAgICAgLCBoYXNT
Y3JvbGxiYXJQc2V1ZG8oZmFsc2UpCiAgICAgICAgICAgICAsIGhhc1NlbGVjdGlvblBzZXVkbyhm
YWxzZSkKKyAgICAgICAgICAgICwgc2NvcGVPZkxhc3RFbGVtZW50KDApCiAgICAgICAgIHsgfQog
CiAgICAgICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcjsKQEAgLTc5LDYgKzgwLDcgQEAgcHVibGlj
OgogICAgICAgICBib29sIGlzU3ViU2VsZWN0b3I7CiAgICAgICAgIGJvb2wgaGFzU2Nyb2xsYmFy
UHNldWRvOwogICAgICAgICBib29sIGhhc1NlbGVjdGlvblBzZXVkbzsKKyAgICAgICAgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGVPZkxhc3RFbGVtZW50OwogICAgIH07CiAKICAgICBib29sIGNo
ZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgYm9vbCBpc0Zhc3RDaGVja2FibGVT
ZWxlY3RvciA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApp
bmRleCBmNmZmM2Q0ZTk2Mjc5MzFlOTUzNjliYjUyMjQ2NWMzNTc1ODdjM2FhLi45MDlmODJjZGJj
MmY0ODBjNTEwNTNjM2M1ZTU1YzQ2MGQ0NDk3NmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCkBAIC02MzgsMTYgKzYzOCwyNCBAQCBpbmxpbmUgYm9vbCBNYXRjaGluZ1VBUnVs
ZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogCiBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3Bl
OjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQm
IGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1bGVzKFJ1bGVTZXQqIHJ1bGVz
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0
aW9ucyYgb3B0aW9ucykKIHsKICAgICBBU1NFUlQocnVsZXMpOwogICAgIEFTU0VSVChtX2VsZW1l
bnQpOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IG1fZWxlbWVudC0+c2hh
ZG93UHNldWRvSWQoKTsKLSAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgewotICAgICAgICBB
U1NFUlQobV9zdHlsZWRFbGVtZW50KTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgZmly
c3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwotICAgIH0KKyAgICBpZiAocHNl
dWRvSWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdHlsZWRF
bGVtZW50KTsKKworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+c2hhZG93
UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0
UnVsZUluZGV4LCBvcHRpb25zKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgQVNTRVJUKHJ1
bGVzKTsKKyAgICBBU1NFUlQobV9lbGVtZW50KTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykK
ICAgICBpZiAobV9lbGVtZW50LT5pc1dlYlZUVE5vZGUoKSkKQEAgLTY5MSw2ICs2OTksNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQq
IHJ1bGVzLCBpbnQmIGZpcnN0UnVsZQogICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3Rvcihy
ZWdpb25TZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVnaW9uRm9yU3R5bGluZy0+
bm9kZSgpKSkpIHsKICAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gcnVsZXMtPm1f
cmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAgICAgICAg
ICAgIEFTU0VSVChyZWdpb25SdWxlcyk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdQc2V1
ZG9FbGVtZW50UnVsZXMocmVnaW9uUnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4
LCBvcHRpb25zKTsKICAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJlZ2lvblJ1bGVz
LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC03MzUsMjMgKzc0NCwzMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVk
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogICAgICAg
ICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKS0+YXBwbHlB
dXRob3JTdHlsZXMoKTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKICAgICAg
ICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKKwor
ICAgICAgICBib29sIGVsZW1lbnRIYXNTaGFkb3dQc2V1ZG8gPSAhbV9lbGVtZW50LT5zaGFkb3dQ
c2V1ZG9JZCgpLmlzRW1wdHkoKTsKKyAgICAgICAgYm9vbCBwYXJlbnRBcHBseUF1dGhvclN0eWxl
cyA9IGZhbHNlOworICAgICAgICBpbnQgcGFyZW50VHJlZVNjb3BlQm91bmRzSW5kZXggPSAwOwor
ICAgICAgICBpZiAoZWxlbWVudEhhc1NoYWRvd1BzZXVkbykKKyAgICAgICAgICAgIHBhcmVudFRy
ZWVTY29wZUJvdW5kc0luZGV4ID0gbV9zY29wZVJlc29sdmVyLT5maW5kU3R5bGVCb3VuZHNPZlBh
cmVudFRyZWVTY29wZShwYXJlbnRBcHBseUF1dGhvclN0eWxlcyk7CisKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBT
dHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5z
dGFja0ZyYW1lQXQoaSk7CiAgICAgICAgICAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwogICAg
ICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxOwogCi0gICAgICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2
ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7
CiAgICAgICAgICAgICBkb2N1bWVudFNjb3BlID0gZG9jdW1lbnRTY29wZSAmJiAhZnJhbWUubV9z
Y29wZS0+aXNJblNoYWRvd1RyZWUoKTsKLSAgICAgICAgICAgIGlmIChkb2N1bWVudFNjb3BlKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFhcHBseUF1dGhvclN0eWxlcykKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm
ICghbV9zY29wZVJlc29sdmVyLT5tYXRjaGVzU3R5bGVCb3VuZHMoZnJhbWUpKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTWF0Y2hP
cHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMsIGZyYW1lLm1fc2NvcGUpOwotICAgICAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFuZ2Vz
LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7
Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFtZS5tX3J1bGVT
ZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50SGFzU2hhZG93UHNldWRv
KSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQgPSAoZG9jdW1l
bnRTY29wZSAmJiBwYXJlbnRBcHBseUF1dGhvclN0eWxlcykgfHwgZnJhbWUubV9hdXRob3JTdHls
ZUJvdW5kc0luZGV4ID09IHBhcmVudFRyZWVTY29wZUJvdW5kc0luZGV4ID8gMCA6IGZyYW1lLm1f
c2NvcGU7CisgICAgICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1bGVz
KGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoKGRvY3VtZW50U2NvcGUgJiYgYXBwbHlBdXRob3JTdHlsZXMpIHx8IG1fc2NvcGVS
ZXNvbHZlci0+bWF0Y2hlc1N0eWxlQm91bmRzKGZyYW1lKSkgeworICAgICAgICAgICAgICAgIG9w
dGlvbnMuc2NvcGVPZkxhc3RFbGVtZW50ID0gMDsKKyAgICAgICAgICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxl
LCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5y
YW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRp
b25zKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyhyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzg2LDggKzgwMywxMCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpCiAgICAgICAgIHJldHVybjsKIAogICAgIE1hdGNoT3B0aW9ucyBv
cHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzLCBtX2VsZW1lbnQpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkgeworICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMobWF0Y2hlZFJ1bGVzLmF0KGktMSksIHJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25z
KTsKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hlZFJ1bGVzLmF0KGktMSksIHJl
c3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxl
LCBvcHRpb25zKTsKKyAgICB9CiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3Vs
dCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwpAQCAtODA1LDYgKzgyNCwxNiBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogCiAgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBy
dWxlcy4KICAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisjaWYg
RU5BQkxFKFNIQURPV19ET00pCisgICAgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQgPSBkb2N1
bWVudCgpOworICAgIGlmIChUcmVlU2NvcGUqIHBhcmVudFRyZWVTY29wZSA9IG1fZWxlbWVudC0+
dHJlZVNjb3BlKCktPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICBpZiAocGFyZW50VHJlZVNj
b3BlLT5hcHBseUF1dGhvclN0eWxlcygpKQorICAgICAgICAgICAgb3B0aW9ucy5zY29wZU9mTGFz
dEVsZW1lbnQgPSAwOworI2VuZGlmCisgICAgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1
bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBy
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyNpZiBFTkFCTEUoU0hBRE9X
X0RPTSkKKyAgICBvcHRpb25zLnNjb3BlT2ZMYXN0RWxlbWVudCA9IDA7CisjZW5kaWYKICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZp
cnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CiAg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9hdXRob3JTdHlsZS5nZXQoKSwgcmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUs
IG9wdGlvbnMpOwogICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwpAQCAt
ODIwLDYgKzg0OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hS
ZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICAgICBtX21hdGNoZWRSdWxl
cy5jbGVhcigpOwogCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUgPSByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdQc2V1ZG9FbGVt
ZW50UnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwg
cmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdFVz
ZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgaW5jbHVkZUVtcHR5UnVsZXMpOwog
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fdXNlclN0eWxlLmdldCgpLCByZXN1
bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBpbmNs
dWRlRW1wdHlSdWxlcyk7CiAKQEAgLTgzMSw2ICs4NjEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKICAgICBt
X21hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVs
ZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOworICAgIGNvbGxlY3RNYXRj
aGluZ1BzZXVkb0VsZW1lbnRSdWxlcyhydWxlcywgcmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwg
cmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBmYWxzZSk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMocnVsZXMsIHJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVB
UnVsZSwgZmFsc2UpOwogCiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7
CkBAIC04NDMsNyArODc0LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpCiAKICAgICAvLyBJ
biBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3IgcmFuZG9tIGVs
ZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZlLgogICAgIC8v
IEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUgaW4gdGhhdCBj
YXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KKyNpZiBFTkFCTEUoU0hBRE9XX0RP
TSkKKyAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX2NoZWNrZXIucGFyZW50U3RhY2tJc0Nv
bnNpc3RlbnQobV9wYXJlbnROb2RlKSAmJiAhb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQ7Cisj
ZWxzZQogICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fY2hlY2tlci5wYXJlbnRTdGFja0lz
Q29uc2lzdGVudChtX3BhcmVudE5vZGUpOworI2VuZGlmCiAKICAgICB1bnNpZ25lZCBzaXplID0g
cnVsZXMtPnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CkBAIC04NTMsNyArODg4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKIAogICAgICAgICBT
dHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxN
YXRjaFJ1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7Ci0gICAgICAgIGlmIChjaGVja1NlbGVj
dG9yKHJ1bGVEYXRhLCBvcHRpb25zLnNjb3BlKSkgeworICAgICAgICBpZiAoY2hlY2tTZWxlY3Rv
cihydWxlRGF0YSwgb3B0aW9ucy5zY29wZSwgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQpKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwg
dGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAgICAgICAgY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKICAgICAg
ICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFvcHRp
b25zLmluY2x1ZGVFbXB0eVJ1bGVzKSkgewpAQCAtMTA1Nyw2ICsxMDkyLDcgQEAgYm9vbCBTdHls
ZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0KiBy
dWxlU2V0KQogCiAgICAgaW50IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXggPSAt
MTsKICAgICBtX2NoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlcyk7
CisgICAgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1bGVzKHJ1bGVTZXQsIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBmYWxzZSk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMo
cnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGZhbHNlKTsKICAgICBtX2No
ZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKICAgICBpZiAo
bV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQpAQCAtMjIzMyw3ICsyMjY5LDcgQEAgUGFzc1JlZlB0
cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQo
RWxlbWVudCogZSwgUHMKICAgICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7CiB9CiAKLWlu
bGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1
bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK2lubGluZSBib29sIFN0eWxlUmVz
b2x2ZXI6OmNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVPZkxhc3RFbGVtZW50
KQogewogICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogCkBAIC0yMjU4LDYgKzIyOTQs
NyBAQCBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVE
YXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbgogICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0g
c3R5bGUoKTsKICAgICBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA9IG1fcGFyZW50Tm9kZSA/
IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7CiAgICAgY29udGV4dC5zY29wZSA9IHNj
b3BlOworICAgIGNvbnRleHQuc2NvcGVPZkxhc3RFbGVtZW50ID0gc2NvcGVPZkxhc3RFbGVtZW50
OwogICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBtX3BzZXVkb1N0eWxlOwogICAgIFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBtYXRjaCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKGNv
bnRleHQsIG1fZHluYW1pY1BzZXVkbyk7CiAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JNYXRjaGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggOTdi
Y2YxNjk0MDgzZTBhMjZhZGQ0NmFmNGE5OThkNThmNTRkYjc2ZS4uMjhkMjhlY2VkNWFhNjg2ZjQ0
Y2YyYWMzYjZjYmQxNTcwZjJlNGViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBA
IC0zNDUsOSArMzQ1LDEwIEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIHN0cnVjdCBNYXRjaE9w
dGlvbnMgewotICAgICAgICBNYXRjaE9wdGlvbnMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKSA6IHNjb3BlKHNjb3BlKSwgaW5jbHVkZUVtcHR5
UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMpIHsgfQorICAgICAgICBNYXRjaE9wdGlvbnMoYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcywgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwLCBjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZU9mTGFzdEVsZW1lbnQgPSAwKSA6IHNjb3BlKHNjb3BlKSwgaW5j
bHVkZUVtcHR5UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMpLCBzY29wZU9mTGFzdEVsZW1lbnQoc2Nv
cGVPZkxhc3RFbGVtZW50KSB7IH0KICAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGU7
CiAgICAgICAgIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXM7CisgICAgICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlT2ZMYXN0RWxlbWVudDsKICAgICB9OwogCiAgICAgc3RhdGljIHZvaWQgYWRk
TWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBw
cm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIGJvb2wgaW5SZWdpb25SdWxlID0gZmFsc2UpOwpAQCAtMzU5
LDE1ICszNjAsMTkgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hS
ZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoVXNlclJ1bGVz
KE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFNj
b3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Cisj
aWYgRU5BQkxFKFNIQURPV19ET00pIHx8IEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgdm9pZCBt
YXRjaFNjb3BlZEF1dGhvclJ1bGVzUGVyU2NvcGUoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVk
RW1wdHlSdWxlcywgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpTdGFja0ZyYW1lJiwgYm9vbCBw
c2V1ZG9Pbmx5KTsKKyNlbmRpZgogICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQm
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0
IE1hdGNoT3B0aW9ucyYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1
bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNv
bnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdp
b24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29u
c3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qo
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0
b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsK
ICAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYpOwogCi0g
ICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUpOworICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYsIGNvbnN0
IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZU9mTGFzdEVs
ZW1lbnQpOwogICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3RvcihDU1NTZWxlY3RvciogcmVnaW9u
U2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwogICAgIHZvaWQgYXBwbHlNYXRjaGVk
UHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQqKTsKICAgICBlbnVt
IFN0eWxlQXBwbGljYXRpb25QYXNzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNv
bHZlci5jcHAKaW5kZXggNzMwMDUwZDZjNGQ4MTcyZTU1NGJlODYwMjhkOWJiNTdjN2IxMmI5NS4u
NGViZmIyOGE3MWNiNmZlNzNjZWVhZjQzYmQ1YzAwZjYyZjJkZGUxZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKQEAgLTEzMSw2ICsxMzEsNyBAQCB2b2lkIFN0
eWxlU2NvcGVSZXNvbHZlcjo6cHVzaChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3Qg
Q29udGFpbmVyTm9kZSogcwogCiAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9T
aGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKICAgICAgICAgKyttX3N0YWNr
UGFyZW50Qm91bmRzSW5kZXg7CisKICAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBwYXJl
bnQgb250byB0aGUgc3RhY2suCiAgICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3Ioc2Nv
cGUpOwogICAgIGlmIChydWxlU2V0KQpAQCAtMTUwLDYgKzE1MSwyMSBAQCB2b2lkIFN0eWxlU2Nv
cGVSZXNvbHZlcjo6cG9wKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQogICAgIH0KIH0KIAor
aW50IFN0eWxlU2NvcGVSZXNvbHZlcjo6ZmluZFN0eWxlQm91bmRzT2ZQYXJlbnRUcmVlU2NvcGUo
Ym9vbCYgYXBwbHlBdXRob3JTdHlsZXMpIGNvbnN0Cit7CisgICAgYXBwbHlBdXRob3JTdHlsZXMg
PSBmYWxzZTsKKworICAgIC8vIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCArIDEgZG9lc24ndCBt
YXRjaCBhbnkgaXRlbXMgaW4gbV9zdGFjay4KKyAgICBpZiAoIW1fc3RhY2tQYXJlbnQgfHwgIW1f
c3RhY2tQYXJlbnQtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiBtX3N0YWNrUGFy
ZW50Qm91bmRzSW5kZXggKyAxOworCisgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBtX3N0YWNr
UGFyZW50LT50cmVlU2NvcGUoKTsKKyAgICBpZiAoVHJlZVNjb3BlKiBwYXJlbnRUcmVlU2NvcGUg
PSB0cmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICBhcHBseUF1dGhvclN0eWxl
cyA9IHBhcmVudFRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKKworICAgIHJldHVybiB0
cmVlU2NvcGUtPmFwcGx5QXV0aG9yU3R5bGVzKCkgPyBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXgg
OiBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXggLSAxOworfQorCiB2b2lkIFN0eWxlU2NvcGVSZXNv
bHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKQogewogICAg
IGZvciAoU2NvcGVkUnVsZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5iZWdp
bigpOyBpdCAhPSBtX2F1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNjb3BlUmVzb2x2ZXIuaAppbmRleCAzYmUzZmY0ZjcwYzczNzViZDAxNDI2YTAwYmE0MjQx
Mjg0NjJjYzBlLi5iYmNjYjU4YjE0NjBjMGIzNGEwNDExOTY1MzAyY2FlN2JkZDM5MzE4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCkBAIC03Myw2ICs3Myw3IEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNp
emUoKTsgfQogICAgIGNvbnN0IFN0YWNrRnJhbWUmIHN0YWNrRnJhbWVBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5hdChpbmRleCk7IH0KICAgICBib29sIG1hdGNoZXNT
dHlsZUJvdW5kcyhjb25zdCBTdGFja0ZyYW1lJiBmcmFtZSkgY29uc3QgeyByZXR1cm4gZnJhbWUu
bV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsgfQor
ICAgIGludCBmaW5kU3R5bGVCb3VuZHNPZlBhcmVudFRyZWVTY29wZShib29sJiBhcHBseUF1dGhv
clN0eWxlcykgY29uc3Q7CiAgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNl
dCYpOwogCiAgICAgdm9pZCBhZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0KiwgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
NGMxNGY0OTg1Njg4ZGExY2Q0Mzc1YTU1N2UyYTc0Zjg5ODVmNGI1OC4uMzFmYTczOTk3MWFiNDYw
OWE4MzlhZDhmMWU0Mjc4NWIxNjM3OTc1NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTEy
LTE3ICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hh
ZG93IERPTV06IGN1c3RvbSBwc2V1ZG8gaW4gc3R5bGVzIGluIHNoYWRvdyBkb20gdHJlZXMgZG9l
c24ndCB3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDI5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGZhc3QvZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1uZXN0ZWQtcHNl
dWRvLWlkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5l
c3RlZC1wc2V1ZG8taWQuaHRtbDoKKyAgICAgICAgYTo6eC1uZXN0ZWQtc2hhZG93LWNoaWxkIHJ1
bGUgaXMgZGVjbGFyZWQgaW4gYSBkb2N1bWVudCBidXQgdGhlIGVsZW1lbnQKKyAgICAgICAgaXMg
aW4gYSBzaGFkb3cgZG9tIHRyZWUuIFNvIGE6OngtbmVzdGVkLXNoYWRvdy1jaGlsZCBydWxlIHNo
b3VsZCBub3QKKyAgICAgICAgYmUgYXBwbHkuCisKIDIwMTItMTItMTggIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIHRlc3QgZGVzY3JpcHRpb24uCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNo
YWRvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0
eWxlLWluLXNoYWRvdy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWUxMjM4ZmYyY2I4OTQwNWZk
OTI5NmY0Y2JiM2JlNTlhYzEyMGI4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDE3IEBACitDYXNlMTogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHNhbWUgdHJlZXNjb3Bl
IGFzIGRpdiB3aXRoIHgtZm9vIHBzZXVkby4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQp
LmNvbG9yIGlzICJyZ2IoMCwgMCwgMCkiCitDYXNlMjogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhl
IHBhcmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLgorUEFTUyBnZXRDb21w
dXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorQ2FzZTM6IEEgcHNl
dWRvIHN0eWxlIGlzIGluIHRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9vIHBz
ZXVkby4gVGhlIGRpdidzIHRyZWVzY29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLgor
UEFTUyBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgor
Q2FzZTQ6IEEgcHNldWRvIHN0eWxlIGlzIGluIHRoZSBncmFuZC1wYXJlbnQgdHJlZXNjb3BlIG9m
IGRpdiB3aXRoIHgtZm9vIHBzZXVkby4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNv
bG9yIGlzICJyZ2IoMCwgMCwgMCkiCitDYXNlNTogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIGdy
YW5kLXBhcmVudCB0cmVlc2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLiBUaGUgcGFyZW50
IHRyZWVzY29wZSBvZiB0aGUgZGl2IGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCitQQVNT
IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciBpcyAicmdiKDAsIDAsIDI1NSkiCitDYXNl
NjogUHNldWRvIHN0eWxlcyBhcmUgaW4gdGhlIHBhcmVudCBhbmQgZ3JhbmQtcGFyZW50IHRyZWVz
Y29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRo
ZSBkaXYgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHls
ZSh0YXJnZXQpLmNvbG9yIGlzICJyZ2IoMCwgMTI4LCAwKSIKK0Nhc2U3OiBBIHBzZXVkbyBzdHls
ZSBpcyBpbiBkb2N1bWVudC4gTm8gdHJlZXNjb3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRy
dWUuCitQQVNTIGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciBpcyAicmdiKDAsIDAsIDAp
IgorQ2FzZTg6IEEgcHNldWRvIHN0eWxlIGlzIGluIGRvY3VtZW50LiBUaGUgcGFyZW50IHRyZWVz
Y29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLgorUEFTUyBnZXRDb21wdXRlZFN0eWxl
KHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRvdy5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41OWRhZmI0MzVlZDY1OGExM2M1MGU1NzgyNDE5YTViMzc4M2I5NzllCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFk
b3cuaHRtbApAQCAtMCwwICsxLDY5IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcG9seWZpbGwuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+CisgIDxkaXYgaWQ9Imhvc3QiPjwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KK3Zh
ciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKK3ZhciBzaGFkb3dSb290
ID0gaG9zdC53ZWJraXRDcmVhdGVTaGFkb3dSb290KCk7CitzaGFkb3dSb290LmlubmVySFRNTCA9
ICI8ZGl2IGlkPSdpbm5lci1ob3N0Jz48L2Rpdj4iOworCit2YXIgaW5uZXJIb3N0ID0gc2hhZG93
Um9vdC5nZXRFbGVtZW50QnlJZCgiaW5uZXItaG9zdCIpOwordmFyIGlubmVyU2hhZG93ID0gaW5u
ZXJIb3N0LndlYmtpdENyZWF0ZVNoYWRvd1Jvb3QoKTsKK2lubmVyU2hhZG93LmlubmVySFRNTCA9
ICI8ZGl2IGlkPSdpbm5lci1tb3N0LWhvc3QnPjwvZGl2PiIKKwordmFyIGlubmVyTW9zdEhvc3Qg
PSBpbm5lclNoYWRvdy5nZXRFbGVtZW50QnlJZCgiaW5uZXItbW9zdC1ob3N0Iik7Cit2YXIgaW5u
ZXJNb3N0U2hhZG93ID0gaW5uZXJNb3N0SG9zdC53ZWJraXRDcmVhdGVTaGFkb3dSb290KCk7CisK
K3ZhciB0YXJnZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK3RhcmdldC53ZWJr
aXRQc2V1ZG8gPSAneC1mb28nOworaW5uZXJNb3N0U2hhZG93LmFwcGVuZENoaWxkKHRhcmdldCk7
CisKK3ZhciBwc2V1ZG9TdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Citw
c2V1ZG9TdHlsZS5pbm5lckhUTUwgPSAiZGl2Ojp4LWZvbyB7IGNvbG9yOiBibHVlOyB9IjsKK2lu
bmVyTW9zdFNoYWRvdy5hcHBlbmRDaGlsZChwc2V1ZG9TdHlsZSk7CisKK2RlYnVnKCJDYXNlMTog
QSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHNhbWUgdHJlZXNjb3BlIGFzIGRpdiB3aXRoIHgtZm9v
IHBzZXVkby4iKTsKK3Nob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IiLCAn
InJnYigwLCAwLCAwKSInKTsKKworZGVidWcoIkNhc2UyOiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0
aGUgcGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIik7Citpbm5lclNo
YWRvdy5hcHBlbmRDaGlsZChwc2V1ZG9TdHlsZSk7CitzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHls
ZSh0YXJnZXQpLmNvbG9yIiwgJyJyZ2IoMCwgMCwgMjU1KSInKTsKKworZGVidWcoIkNhc2UzOiBB
IHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgcGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZv
byBwc2V1ZG8uIFRoZSBkaXYncyB0cmVlc2NvcGUgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1
ZS4iKTsKK2lubmVyTW9zdFNoYWRvdy5hcHBseUF1dGhvclN0eWxlcyA9IHRydWU7CitzaG91bGRC
ZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIiwgJyJyZ2IoMCwgMCwgMjU1KSInKTsK
KworZGVidWcoIkNhc2U0OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgZ3JhbmQtcGFyZW50IHRy
ZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIik7Citpbm5lck1vc3RTaGFkb3cuYXBw
bHlBdXRob3JTdHlsZXMgPSBmYWxzZTsKK3NoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQocHNldWRvU3R5
bGUpOworc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAs
IDAsIDApIicpOworCitkZWJ1ZygiQ2FzZTU6IEEgcHNldWRvIHN0eWxlIGlzIGluIHRoZSBncmFu
ZC1wYXJlbnQgdHJlZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9vIHBzZXVkby4gVGhlIHBhcmVudCB0
cmVlc2NvcGUgb2YgdGhlIGRpdiBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLiIpOworaW5u
ZXJTaGFkb3cuYXBwbHlBdXRob3JTdHlsZXMgPSB0cnVlOworc2hvdWxkQmUoImdldENvbXB1dGVk
U3R5bGUodGFyZ2V0KS5jb2xvciIsICcicmdiKDAsIDAsIDI1NSkiJyk7CisKK2RlYnVnKCJDYXNl
NjogUHNldWRvIHN0eWxlcyBhcmUgaW4gdGhlIHBhcmVudCBhbmQgZ3JhbmQtcGFyZW50IHRyZWVz
Y29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRo
ZSBkaXYgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4iKTsKK3ZhciBwc2V1ZG9TdHlsZTIg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOworcHNldWRvU3R5bGUyLmlubmVySFRN
TCA9ICJkaXY6OngtZm9vIHsgY29sb3I6IGdyZWVuOyB9IjsKK2lubmVyU2hhZG93LmFwcGVuZENo
aWxkKHBzZXVkb1N0eWxlMik7CitzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNv
bG9yIiwgJyJyZ2IoMCwgMTI4LCAwKSInKTsKKworZGVidWcoIkNhc2U3OiBBIHBzZXVkbyBzdHls
ZSBpcyBpbiBkb2N1bWVudC4gTm8gdHJlZXNjb3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRy
dWUuIik7CitzaGFkb3dSb290LnJlbW92ZUNoaWxkKHBzZXVkb1N0eWxlKTsKK2lubmVyU2hhZG93
LnJlbW92ZUNoaWxkKHBzZXVkb1N0eWxlMik7Citkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHBz
ZXVkb1N0eWxlKTsKK2lubmVyU2hhZG93LmFwcGx5QXV0aG9yU3R5bGVzID0gZmFsc2U7CitzaG91
bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIiwgJyJyZ2IoMCwgMCwgMCkiJyk7
CisKK2RlYnVnKCJDYXNlODogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gZG9jdW1lbnQuIFRoZSBwYXJl
bnQgdHJlZXNjb3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuIik7Citpbm5lclNoYWRv
dy5hcHBseUF1dGhvclN0eWxlcyA9IHRydWU7CitzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0
YXJnZXQpLmNvbG9yIiwgJyJyZ2IoMCwgMCwgMjU1KSInKTsKKzwvc2NyaXB0PgorPC9odG1sPgor
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctbmVzdGVk
LXBzZXVkby1pZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LW5lc3RlZC1wc2V1ZG8taWQtZXhwZWN0ZWQudHh0CmluZGV4IDkwNThkNmI1MDQ4MzUxZDNk
MmNiNzUyOTE4ODYxZmJhNGNjMmY0ZGIuLjgzMGQ4Y2RmNmVhMjc1MzcyMWEwN2Q5YzVjOGMwOGQ2
ODQ1ZTI1NTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ct
bmVzdGVkLXBzZXVkby1pZC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L3NoYWRvdy1uZXN0ZWQtcHNldWRvLWlkLWV4cGVjdGVkLnR4dApAQCAtNCw3ICs0LDcg
QEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUKIAogCiBQQVNTIHdpbmRvdy5nZXRDb21wdXRlZFN0
eWxlKHR1cGxlLnNoYWRvd0NoaWxkKS5jb2xvciBpcyAncmdiKDI1NSwgMCwgMCknCi1QQVNTIHdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlKHNoYWRvd1R1cGxlLnNoYWRvd0NoaWxkKS5jb2xvciBpcyAn
cmdiKDAsIDAsIDI1NSknCitQQVNTIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHNoYWRvd1R1cGxl
LnNoYWRvd0NoaWxkKS5jb2xvciBpcyAncmdiKDI1NSwgMCwgMCknCiBQQVNTIHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlKHNoYWRvd1R1cGxlLnNoYWRvd0NoaWxkKS5iYWNrZ3JvdW5kQ29sb3IgaXMg
J3JnYigwLCAxMjgsIDApJwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3RlZC1wc2V1ZG8t
aWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctbmVzdGVkLXBzZXVk
by1pZC5odG1sCmluZGV4IDRhNGJhYTg3Nzk3OTEyMzdmNzk2YTJhYWUzMTE5YzEyOGJlYWE2MmIu
LjAyZWE4MDI2MWIyNWM2ZjVmZjU5MTEyY2NkZTNkYTE2N2FiMmFhNjEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctbmVzdGVkLXBzZXVkby1pZC5odG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctbmVzdGVkLXBzZXVkby1pZC5o
dG1sCkBAIC00Miw3ICs0Miw5IEBAIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Imhvc3QiKTsKIHZhciB0dXBsZSA9IGJ1aWxkU2hhZG93V2l0aE9uZUNoaWxkKGhvc3QsICJhIiwg
Ingtc2hhZG93LWNoaWxkIik7CiBzaG91bGRCZSgid2luZG93LmdldENvbXB1dGVkU3R5bGUodHVw
bGUuc2hhZG93Q2hpbGQpLmNvbG9yIiwgIidyZ2IoMjU1LCAwLCAwKSciKTsKIHZhciBzaGFkb3dU
dXBsZSA9IGJ1aWxkU2hhZG93V2l0aE9uZUNoaWxkKHR1cGxlLnNoYWRvd0NoaWxkLCAiYiIsICJ4
LW5lc3RlZC1zaGFkb3ctY2hpbGQiKTsKLXNob3VsZEJlKCJ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHls
ZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCkuY29sb3IiLCAiJ3JnYigwLCAwLCAyNTUpJyIpOwor
Ly8gU2luY2UgPGE+IGluIGEgc2hhZG93IGRvbSB0cmVlIGFuZCBhOjp4LW5lc3RlZC1zaGFkb3ct
Y2hpbGQncyBydWxlIGlzCisvLyBkZWNsYXJlZCBpbiBhIGRvY3VtZW50IHRyZWUsIHdlIGNhbm5v
dCBhcHBseSB0aGUgcnVsZSB0byB0aGUgPGE+Lgorc2hvdWxkQmUoIndpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlKHNoYWRvd1R1cGxlLnNoYWRvd0NoaWxkKS5jb2xvciIsICIncmdiKDI1NSwgMCwgMCkn
Iik7CiBzaG91bGRCZSgid2luZG93LmdldENvbXB1dGVkU3R5bGUoc2hhZG93VHVwbGUuc2hhZG93
Q2hpbGQpLmJhY2tncm91bmRDb2xvciIsICIncmdiKDAsIDEyOCwgMCknIik7CiAKIHZhciBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181890</attachid>
            <date>2013-01-09 03:33:39 -0800</date>
            <delta_ts>2013-01-10 03:27:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102919-20130109203043.patch</filename>
            <type>text/plain</type>
            <size>29733</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjgzMGU5OWI4MDg4YTA3
ZGMxYzAzODJjZjI2NDAxZGMyNmFhMDVkZS4uZTFlODVlZmU0MjVkODk2ZDMwNDcyNzZmYjQ5ZWZh
MmNlODY5MGJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEyLTE3ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV06
IGN1c3RvbSBwc2V1ZG8gaW4gc3R5bGVzIGluIHNoYWRvdyBkb20gdHJlZXMgZG9lc24ndCB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI5MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXN0b20g
cHNldWRvIHN0eWxlcyBkZWNsYXJlZCBpbiBhIHBhcmVudCB0cmVlc2NvcGUgc2hvdWxkIGJlIGNo
ZWNrZWQKKyAgICAgICAgZm9yIGVsZW1lbnRzIGluIHRoZSB0cmVlc2NvcGUuIEN1c3RvbSBwc2V1
ZG8gc3R5bGVzIGluIGFuIGF1dGhvcgorICAgICAgICBzdHlsZXNoZWV0IHNob3VsZCBvbmx5IGFw
cGx5IHRvIGVsZW1lbnRzIGluIGEgY2hpbGQgdHJlZSBzY29wZSBvZgorICAgICAgICBkb2N1bWVu
dCBvciBpbiBzb21lIHRyZWVzY29wZSB3aG9zZSBwYXJlbnQgdHJlZXNjb3BlIGhhcworICAgICAg
ICBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hh
ZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cuaHRtbAorCisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Vs
ZWN0b3IpOgorICAgICAgICBNb2RpZmllZCB0byBjaGVjayB3aGV0aGVyIHRoZSBsYXN0IG1hdGNo
ZWQgZWxlbWVudCBtYXRjaGVzIHRoZSBnaXZlbgorICAgICAgICBzY29wZSBvciBub3QuCisgICAg
ICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQp
OgorICAgICAgICAoU2VsZWN0b3JDaGVja2luZ0NvbnRleHQpOgorICAgICAgICBBZGRlZCBhIG5l
dyBtZW1iZXIgdmFyaWFibGU6IHNjb3BlT2ZMYXN0RWxlbWVudC4KKyAgICAgICAgKiBjc3MvU3R5
bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMpOgorICAgICAgICBNb3ZlZCB0aGUgY29kZSBmcm9t
IGNvbGxlY3RNYXRjaGluZ1J1bGVzLiBUaGlzIG1ldGhvZCBvbmx5IGNvbGxlY3RzCisgICAgICAg
IG1hdGNoZWQgcHNldWRvIHJ1bGVzIGZyb20gdGhlIGdpdmVuIHJ1bGVzZXQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGlu
Z1J1bGVzKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
VUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIFNpbmNlIHRoZSBjb2RlIGZvciBjb2xs
ZWN0aW5nIHBzZXVkbyBydWxlcyBpcyBtb3ZlZCBmcm9tCisgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzIHRvIGNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1lbnRSdWxlcywgbmVlZCB0bworICAg
ICAgICBpbnZva2UgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24gYmVmb3JlIGNvbGxlY3RN
YXRjaGluZ1J1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29w
ZWRBdXRob3JSdWxlcyk6CisgICAgICAgIEFkZGVkIGNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1l
bnRSdWxlcyBmb3IgZWFjaCBwYXJlbnQgdHJlZSBzY29wZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICBOZWVkIHRvIHByb3ZpZGUgc2Nv
cGVPZkxhc3RFbGVtZW50IGluZm9ybWF0aW9uLCBtb2RpZmllZCB0aGUgc2Vjb25kCisgICAgICAg
IGFyZ3VtZW50IGZyb20gImNvbnN0IENvbnRhaW5lck5vZGUqIiB0byAiY29uc3QgTWF0Y2hPcHRp
b25zJiIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QpOgorICAgICAgICBTaW5jZSBjaGVja1NlbGVjdG9yIGlzIG1vZGlmaWVkLCB1
cGRhdGVkLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpNYXRjaE9wdGlvbnM6Ok1hdGNoT3B0aW9ucyk6CisgICAgICAgIChN
YXRjaE9wdGlvbnMpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIEFkZGVkIGEg
bmV3IG1lbWJlciB2YXJpYWJsZSwgc2NvcGVPZkxhc3RFbGVtZW50LgorICAgICAgICAqIGNzcy9T
dHlsZVNjb3BlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29s
dmVyOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZmluZFN0
eWxlQm91bmRzT2ZQYXJlbnRUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVy
KToKKwogMjAxMy0wMS0wOCAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBnb29nbGUuY29tPgogCiAg
ICAgICAgIENvbG9yIGJsZWVkaW5nIHdpdGggcm91bmRlZCByZWN0YW5nbGVzIG9uIGhpZ2ggZHBp
IGRpc3BsYXlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IGNhNzNh
YTRmMjY2NmY3ZWU4YjZjNTgyMTRmNzJkMTRlODlkZjdhODMuLjFmM2JjOWI4YjlmOWFkOWNlMjRm
NDdjODYzMzk2OTVhNmU4YmU1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwCkBAIC0yODEsOCArMjgxLDE3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVjCiAKICAgICAv
LyBQcmVwYXJlIG5leHQgc2VsZWN0b3IKICAgICBDU1NTZWxlY3RvciogaGlzdG9yeVNlbGVjdG9y
ID0gY29udGV4dC5zZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwotICAgIGlmICghaGlzdG9yeVNlbGVj
dG9yKQorICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKSB7CisjaWYgRU5BQkxFKFNIQURPV19ET00p
CisgICAgICAgIGlmIChjb250ZXh0LnNjb3BlT2ZMYXN0RWxlbWVudCkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IENoZWNrIHRoZSBzY29wZSBtb3JlIHN0cmljdGx5LgorICAgICAgICAgICAgLy8g
T2J0YWluZWQgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9hdHRhY2htZW50LmNnaT9pZD0x
NzY4OTIKKyAgICAgICAgICAgIC8vIFNob3VsZCB3YWl0IHRpbGwgdGhlIG9yaWdpbmFsIGJ1ZyBp
cyBmaXhlZC4KKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnNjb3BlT2ZMYXN0RWxlbWVudC0+
dHJlZVNjb3BlKCkgPT0gY29udGV4dC5lbGVtZW50LT50cmVlU2NvcGUoKSA/IFNlbGVjdG9yTWF0
Y2hlcyA6IFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICB9CisjZW5kaWYKICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKKyAgICB9CiAKICAgICBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhp
c3RvcnlTZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCAzMzE5
M2Y3NmJjMzI4MjZhZDBkM2VlNjE0NTE1YjliYWM1ZDI1MjBiLi5kOTY2ZDJlNTdkODVmNDA0NTZk
MDFhNjZhYzIyMGIxNzQ4ODIwYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5o
CkBAIC02Myw2ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgaXNTdWJTZWxlY3Rvcihm
YWxzZSkKICAgICAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNlKQogICAgICAgICAg
ICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8oZmFsc2UpCisgICAgICAgICAgICAsIHNjb3BlT2ZMYXN0
RWxlbWVudCgwKQogICAgICAgICB7IH0KIAogICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7
CkBAIC03NSw2ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc1N1YlNlbGVjdG9yOwog
ICAgICAgICBib29sIGhhc1Njcm9sbGJhclBzZXVkbzsKICAgICAgICAgYm9vbCBoYXNTZWxlY3Rp
b25Qc2V1ZG87CisgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlT2ZMYXN0RWxlbWVu
dDsKICAgICB9OwogCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVu
dCosIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMDk4ZTBkNTdjMGI3ZTFkNzRlZDE1MDhmN2U5
MDBkNTE2YzJlOTcwZC4uZjYxMjJiOTZiYzRkZjljYzc1YWFlZDQxMGQzMGEwZTE2MTU3NWJiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNjQyLDE2ICs2NDIsMjQgQEAg
aW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKIAog
Ym9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKIAot
dm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlv
bnMmIG9wdGlvbnMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1BzZXVkb0Vs
ZW1lbnRSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgQVNTRVJUKHJ1
bGVzKTsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
cHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7Ci0gICAgaWYgKCFwc2V1ZG9J
ZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7Ci0gICAgICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+c2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRp
b25zKTsKLSAgICB9CisgICAgaWYgKHBzZXVkb0lkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7CisKKyAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QocnVsZXMtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhwc2V1ZG9JZC5pbXBs
KCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJiBv
cHRpb25zKQoreworICAgIEFTU0VSVChydWxlcyk7CisgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKG1fZWxlbWVudC0+aXNXZWJWVFROb2Rl
KCkpCkBAIC02OTUsNiArNzAzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGUKICAgICAgICAg
aWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1l
bnQqPihtX3JlZ2lvbkZvclN0eWxpbmctPm5vZGUoKSkpKSB7CiAgICAgICAgICAgICBSdWxlU2V0
KiByZWdpb25SdWxlcyA9IHJ1bGVzLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkp
LnJ1bGVTZXQuZ2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOworICAgICAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1bGVzKHJlZ2lvblJ1bGVzLCBmaXJz
dFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CiAgICAgICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlcyhyZWdpb25SdWxlcywgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IG9wdGlvbnMpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzM5LDIzICs3NDgsMzEgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHQKICAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IG1fZWxl
bWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CiAgICAgICAgIGJvb2wgZG9j
dW1lbnRTY29wZSA9IHRydWU7CiAgICAgICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVS
ZXNvbHZlci0+c3RhY2tTaXplKCk7CisKKyAgICAgICAgYm9vbCBlbGVtZW50SGFzU2hhZG93UHNl
dWRvID0gIW1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKS5pc0VtcHR5KCk7CisgICAgICAgIGJv
b2wgcGFyZW50QXBwbHlBdXRob3JTdHlsZXMgPSBmYWxzZTsKKyAgICAgICAgaW50IHBhcmVudFRy
ZWVTY29wZUJvdW5kc0luZGV4ID0gMDsKKyAgICAgICAgaWYgKGVsZW1lbnRIYXNTaGFkb3dQc2V1
ZG8pCisgICAgICAgICAgICBwYXJlbnRUcmVlU2NvcGVCb3VuZHNJbmRleCA9IG1fc2NvcGVSZXNv
bHZlci0+ZmluZFN0eWxlQm91bmRzT2ZQYXJlbnRUcmVlU2NvcGUocGFyZW50QXBwbHlBdXRob3JT
dHlsZXMpOworCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsr
aSkgeworICAgICAgICAgICAgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpTdGFja0ZyYW1lJiBm
cmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwogICAgICAgICAgICAgbV9t
YXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhv
clJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAotICAgICAgICAg
ICAgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpTdGFja0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVS
ZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwogICAgICAgICAgICAgZG9jdW1lbnRTY29wZSA9IGRv
Y3VtZW50U2NvcGUgJiYgIWZyYW1lLm1fc2NvcGUtPmlzSW5TaGFkb3dUcmVlKCk7Ci0gICAgICAg
ICAgICBpZiAoZG9jdW1lbnRTY29wZSkgewotICAgICAgICAgICAgICAgIGlmICghYXBwbHlBdXRo
b3JTdHlsZXMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlci0+bWF0Y2hlc1N0eWxl
Qm91bmRzKGZyYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVz
LCBmcmFtZS5tX3Njb3BlKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKGZyYW1l
Lm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMu
bGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JSZWdpb24oZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVs
ZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgICAgICAgICBp
ZiAoZWxlbWVudEhhc1NoYWRvd1BzZXVkbykgeworICAgICAgICAgICAgICAgIG9wdGlvbnMuc2Nv
cGVPZkxhc3RFbGVtZW50ID0gKGRvY3VtZW50U2NvcGUgJiYgcGFyZW50QXBwbHlBdXRob3JTdHls
ZXMpIHx8IGZyYW1lLm1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleCA9PSBwYXJlbnRUcmVlU2NvcGVC
b3VuZHNJbmRleCA/IDAgOiBmcmFtZS5tX3Njb3BlOworICAgICAgICAgICAgICAgIGNvbGxlY3RN
YXRjaGluZ1BzZXVkb0VsZW1lbnRSdWxlcyhmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMu
Zmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChkb2N1bWVudFNjb3BlICYmIGFwcGx5
QXV0aG9yU3R5bGVzKSB8fCBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoZXNTdHlsZUJvdW5kcyhmcmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLnNjb3BlT2ZMYXN0RWxlbWVudCA9IDA7Cisg
ICAgICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCByZXN1
bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwg
b3B0aW9ucyk7CisgICAgICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24o
ZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKICAgICAgICAgfQogICAgIH0K
QEAgLTc5MCw4ICs4MDcsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogICAgICAgICByZXR1
cm47CiAKICAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcywgbV9lbGVt
ZW50KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsg
LS1pKQorICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAt
LWkpIHsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1bGVzKG1hdGNoZWRS
dWxlcy5hdChpLTEpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdl
cy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CiAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KG1hdGNoZWRSdWxlcy5hdChpLTEpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVz
dWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgfQogICAgIHNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVz
dWx0KTsKQEAgLTgwOSw2ICs4MjgsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhv
clJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMKIAogICAg
IC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCiAgICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMo
aW5jbHVkZUVtcHR5UnVsZXMpOworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIG9wdGlvbnMu
c2NvcGVPZkxhc3RFbGVtZW50ID0gZG9jdW1lbnQoKTsKKyAgICBpZiAoVHJlZVNjb3BlKiBwYXJl
bnRUcmVlU2NvcGUgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpLT5wYXJlbnRUcmVlU2NvcGUoKSkK
KyAgICAgICAgaWYgKHBhcmVudFRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKKyAgICAg
ICAgICAgIG9wdGlvbnMuc2NvcGVPZkxhc3RFbGVtZW50ID0gMDsKKyNlbmRpZgorICAgIGNvbGxl
Y3RNYXRjaGluZ1BzZXVkb0VsZW1lbnRSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQu
cmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0
aW9ucyk7CisjaWYgRU5BQkxFKFNIQURPV19ET00pCisgICAgb3B0aW9ucy5zY29wZU9mTGFzdEVs
ZW1lbnQgPSAwOworI2VuZGlmCiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobV9hdXRob3JTdHls
ZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUsIG9wdGlvbnMpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9u
KG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1
bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKICAgICBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMocmVzdWx0KTsKQEAgLTgyNCw2ICs4NTMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKIAogICAgIHJlc3VsdC5yYW5nZXMu
bGFzdFVzZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CisgICAg
Y29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCByZXN1
bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBpbmNs
dWRlRW1wdHlSdWxlcyk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobV91c2VyU3R5bGUuZ2V0
KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1
bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lv
bihtX3VzZXJTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCByZXN1bHQu
cmFuZ2VzLmxhc3RVc2VyUnVsZSwgaW5jbHVkZUVtcHR5UnVsZXMpOwogCkBAIC04MzUsNiArODY1
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgUnVsZVNldCogcnVsZXMpCiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICAKICAg
ICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpIC0gMTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMocnVsZXMsIHJl
c3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2Up
OwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVzLCByZXN1bHQucmFuZ2VzLmZpcnN0VUFS
dWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKIAogICAgIHNvcnRBbmRUcmFu
c2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwpAQCAtODQ3LDcgKzg3OCwxMSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURh
dGE+KiBydWxlcywgaQogCiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tp
bmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJz
aXZlIHRyZWUgcmVzb2x2ZS4KICAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24n
dCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBh
dGguCisjaWYgRU5BQkxFKFNIQURPV19ET00pCisgICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0g
bV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5vZGUpICYm
ICFvcHRpb25zLnNjb3BlT2ZMYXN0RWxlbWVudDsKKyNlbHNlCiAgICAgYm9vbCBjYW5Vc2VGYXN0
UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVu
dE5vZGUpOworI2VuZGlmCiAKICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC04NTcsNyArODkyLDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGkKIAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBy
dWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBj
b29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUoZG9jdW1lbnQo
KSwgcnVsZSwgdGhpcyk7Ci0gICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhLCBvcHRp
b25zLnNjb3BlKSkgeworICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0YSwgb3B0aW9u
cy5zY29wZSwgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1lbnQpKSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4g
dGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
cHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIGlmICghcHJvcGVy
dGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFvcHRpb25zLmluY2x1ZGVFbXB0eVJ1
bGVzKSkgewpAQCAtMTA2MSw2ICsxMDk2LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNo
YXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQogCiAgICAgaW50
IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXggPSAtMTsKICAgICBtX3NlbGVjdG9y
Q2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKKyAgICBjb2xs
ZWN0TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxh
c3RSdWxlSW5kZXgsIGZhbHNlKTsKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhydWxlU2V0LCBm
aXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgZmFsc2UpOwogICAgIG1fc2VsZWN0b3JDaGVj
a2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7CiAgICAgaWYgKG1f
bWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKQEAgLTIyMzgsNyArMjI3NCw3IEBAIFBhc3NSZWZQdHI8
Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVs
ZW1lbnQqIGUsIFBzCiAgICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOwogfQogCi1pbmxp
bmUgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxl
RGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCitpbmxpbmUgYm9vbCBTdHlsZVJlc29s
dmVyOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlT2ZMYXN0RWxlbWVudCkK
IHsKICAgICBtX2R5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIApAQCAtMjI2Myw2ICsyMjk5LDcg
QEAgaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0
YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW4KICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0
eWxlKCk7CiAgICAgY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgPSBtX3BhcmVudE5vZGUgPyBt
X3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOwogICAgIGNvbnRleHQuc2NvcGUgPSBzY29w
ZTsKKyAgICBjb250ZXh0LnNjb3BlT2ZMYXN0RWxlbWVudCA9IHNjb3BlT2ZMYXN0RWxlbWVudDsK
ICAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gbV9wc2V1ZG9TdHlsZTsKICAgICBTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX3NlbGVjdG9yQ2hlY2tlci5jaGVja1NlbGVj
dG9yKGNvbnRleHQsIG1fZHluYW1pY1BzZXVkbyk7CiAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5k
ZXggNWJkMjk0MGU1N2YyOTgyMWZlNjEzZWEwZThhMzliZmRmYjg4ZDA3ZC4uZGQ4YjM4Njc3MmMw
OWRlZGE5MzNiMWNjMWY5NDc0ZWJlM2JjY2U4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCkBAIC0zNDMsOSArMzQzLDEwIEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIHN0cnVjdCBN
YXRjaE9wdGlvbnMgewotICAgICAgICBNYXRjaE9wdGlvbnMoYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cywgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKSA6IHNjb3BlKHNjb3BlKSwgaW5jbHVk
ZUVtcHR5UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMpIHsgfQorICAgICAgICBNYXRjaE9wdGlvbnMo
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcywgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwLCBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZU9mTGFzdEVsZW1lbnQgPSAwKSA6IHNjb3BlKHNjb3Bl
KSwgaW5jbHVkZUVtcHR5UnVsZXMoaW5jbHVkZUVtcHR5UnVsZXMpLCBzY29wZU9mTGFzdEVsZW1l
bnQoc2NvcGVPZkxhc3RFbGVtZW50KSB7IH0KICAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGU7CiAgICAgICAgIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXM7CisgICAgICAgIGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlT2ZMYXN0RWxlbWVudDsKICAgICB9OwogCiAgICAgc3RhdGljIHZv
aWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBjb25zdCBTdHlsZVByb3BlcnR5
U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIGJvb2wgaW5SZWdpb25SdWxlID0gZmFsc2UpOwpA
QCAtMzU3LDE1ICszNTgsMTkgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMo
TWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoVXNl
clJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBt
YXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisjaWYgRU5BQkxFKFNIQURPV19ET00pIHx8IEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAg
dm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzUGVyU2NvcGUoTWF0Y2hSZXN1bHQmLCBib29sIGlu
Y2x1ZGVkRW1wdHlSdWxlcywgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpTdGFja0ZyYW1lJiwg
Ym9vbCBwc2V1ZG9Pbmx5KTsKKyNlbmRpZgogICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoTWF0Y2hS
ZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgs
IGNvbnN0IE1hdGNoT3B0aW9ucyYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUHNldWRvRWxl
bWVudFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5k
ZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JSZWdpb24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgYm9vbCBmYXN0UmVqZWN0
U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRNYXRjaGVkUnVs
ZXMoKTsKICAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYp
OwogCi0gICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUpOworICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYs
IGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZU9m
TGFzdEVsZW1lbnQpOwogICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3RvcihDU1NTZWxlY3Rvciog
cmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwogICAgIHZvaWQgYXBwbHlN
YXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQqKTsKICAg
ICBlbnVtIFN0eWxlQXBwbGljYXRpb25QYXNzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2Nv
cGVSZXNvbHZlci5jcHAKaW5kZXggZmRlYmRhNGNjODA2MGJiMWZmOTNjZWFjZTIzOWE2MmFjNWVk
NGZhNy4uYzE0ZGEwNTFjNWIzMGM1MzdiYjZjOTM1Zjk3OTEzOTBhNGQ0YTdhNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKQEAgLTEzMiw2ICsxMzIsNyBAQCB2
b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6cHVzaChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwg
Y29uc3QgQ29udGFpbmVyTm9kZSogcwogCiAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAm
JiAhdG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKICAgICAgICAgKytt
X3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7CisKICAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRo
ZSBwYXJlbnQgb250byB0aGUgc3RhY2suCiAgICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRG
b3Ioc2NvcGUpOwogICAgIGlmIChydWxlU2V0KQpAQCAtMTUxLDYgKzE1MiwyMSBAQCB2b2lkIFN0
eWxlU2NvcGVSZXNvbHZlcjo6cG9wKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQogICAgIH0K
IH0KIAoraW50IFN0eWxlU2NvcGVSZXNvbHZlcjo6ZmluZFN0eWxlQm91bmRzT2ZQYXJlbnRUcmVl
U2NvcGUoYm9vbCYgYXBwbHlBdXRob3JTdHlsZXMpIGNvbnN0Cit7CisgICAgYXBwbHlBdXRob3JT
dHlsZXMgPSBmYWxzZTsKKworICAgIC8vIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCArIDEgZG9l
c24ndCBtYXRjaCBhbnkgaXRlbXMgaW4gbV9zdGFjay4KKyAgICBpZiAoIW1fc3RhY2tQYXJlbnQg
fHwgIW1fc3RhY2tQYXJlbnQtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiBtX3N0
YWNrUGFyZW50Qm91bmRzSW5kZXggKyAxOworCisgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBt
X3N0YWNrUGFyZW50LT50cmVlU2NvcGUoKTsKKyAgICBpZiAoVHJlZVNjb3BlKiBwYXJlbnRUcmVl
U2NvcGUgPSB0cmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICBhcHBseUF1dGhv
clN0eWxlcyA9IHBhcmVudFRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKKworICAgIHJl
dHVybiB0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU3R5bGVzKCkgPyBtX3N0YWNrUGFyZW50Qm91bmRz
SW5kZXggOiBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXggLSAxOworfQorCiB2b2lkIFN0eWxlU2Nv
cGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKQog
ewogICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxl
cy5iZWdpbigpOyBpdCAhPSBtX2F1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAppbmRleCAzYmUzZmY0ZjcwYzczNzViZDAxNDI2YTAw
YmE0MjQxMjg0NjJjYzBlLi5iYmNjYjU4YjE0NjBjMGIzNGEwNDExOTY1MzAyY2FlN2JkZDM5MzE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCkBAIC03Myw2ICs3Myw3
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0
YWNrLnNpemUoKTsgfQogICAgIGNvbnN0IFN0YWNrRnJhbWUmIHN0YWNrRnJhbWVBdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5hdChpbmRleCk7IH0KICAgICBib29sIG1h
dGNoZXNTdHlsZUJvdW5kcyhjb25zdCBTdGFja0ZyYW1lJiBmcmFtZSkgY29uc3QgeyByZXR1cm4g
ZnJhbWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRl
eDsgfQorICAgIGludCBmaW5kU3R5bGVCb3VuZHNPZlBhcmVudFRyZWVTY29wZShib29sJiBhcHBs
eUF1dGhvclN0eWxlcykgY29uc3Q7CiAgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVh
dHVyZVNldCYpOwogCiAgICAgdm9pZCBhZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0KiwgYm9vbCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggNWI0YTk0NmQwZGNiMDRmOWNiZWUzZDU0Zjg4YjkyZDQ2MTY3YWNiNi4uYjU1ODg5NmE5
NjcwNjJlODc1NTZhOTM0NmFkNzI2MmY0NzU2OTgzYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDEyLTEyLTE3ICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBbU2hhZG93IERPTV06IGN1c3RvbSBwc2V1ZG8gaW4gc3R5bGVzIGluIHNoYWRvdyBkb20gdHJl
ZXMgZG9lc24ndCB3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDI5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93LWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1z
aGFkb3cuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1uZXN0
ZWQtcHNldWRvLWlkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LW5lc3RlZC1wc2V1ZG8taWQuaHRtbDoKKyAgICAgICAgYTo6eC1uZXN0ZWQtc2hhZG93LWNo
aWxkIHJ1bGUgaXMgZGVjbGFyZWQgaW4gYSBkb2N1bWVudCBidXQgdGhlIGVsZW1lbnQKKyAgICAg
ICAgaXMgaW4gYSBzaGFkb3cgZG9tIHRyZWUuIFNvIGE6OngtbmVzdGVkLXNoYWRvdy1jaGlsZCBy
dWxlIHNob3VsZCBub3QKKyAgICAgICAgYmUgYXBwbHkuCisKIDIwMTMtMDEtMDggIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBDb2xvciBibGVlZGluZyB3aXRo
IHJvdW5kZWQgcmVjdGFuZ2xlcyBvbiBoaWdoIGRwaSBkaXNwbGF5cwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3ctZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3ct
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyZDM1MDMzNTQ3MjZjYTExNjQ1MzNkZDUzZjUzMGEz
Y2U5YWM4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
cHNldWRvLXN0eWxlLWluLXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOCBAQAorQ2Fz
ZSAxOiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgc2FtZSB0cmVlc2NvcGUgYXMgZGl2IHdpdGgg
eC1mb28gcHNldWRvLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJn
YigwLCAwLCAwKSIKK0Nhc2UgMjogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHBhcmVudCB0cmVl
c2NvcGUgb2YgZGl2IHdpdGggeC1mb28gcHNldWRvLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRh
cmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorQ2FzZSAzOiBBIHBzZXVkbyBzdHlsZSBp
cyBpbiB0aGUgcGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSB0
cmVlc2NvcGUgb2YgdGhlIGRpdiBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLgorUEFTUyBn
ZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorQ2FzZSA0
OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgZ3JhbmQtcGFyZW50IHRyZWVzY29wZSBvZiBkaXYg
d2l0aCB4LWZvbyBwc2V1ZG8uCitQQVNTIGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciBp
cyAicmdiKDAsIDAsIDApIgorQ2FzZSA1OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgZ3JhbmQt
cGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSBwYXJlbnQgdHJl
ZXNjb3BlIG9mIHRoZSBkaXYgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4KK1BBU1MgZ2V0
Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yIGlzICJyZ2IoMCwgMCwgMjU1KSIKK0Nhc2UgNjog
UHNldWRvIHN0eWxlcyBhcmUgaW4gdGhlIHBhcmVudCBhbmQgZ3JhbmQtcGFyZW50IHRyZWVzY29w
ZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRoZSBk
aXYgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0
YXJnZXQpLmNvbG9yIGlzICJyZ2IoMCwgMTI4LCAwKSIKK0Nhc2UgNzogQSBwc2V1ZG8gc3R5bGUg
aXMgaW4gZG9jdW1lbnQuIE5vIHRyZWVzY29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVl
LgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAwKSIK
K0Nhc2UgODogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gZG9jdW1lbnQuIFRoZSBwYXJlbnQgdHJlZXNj
b3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCitQQVNTIGdldENvbXB1dGVkU3R5bGUo
dGFyZ2V0KS5jb2xvciBpcyAicmdiKDAsIDAsIDI1NSkiCitDYXNlIDk6IEEgcHNldWRvIHN0eWxl
IGlzIGluIHRoZSBzYW1lIHRyZWVzY29wZSBhcyB0YXJnZXQuIFRoZSB0YXJnZXQgaXMgZGlzdHJp
YnV0ZWQgaW50byBjb250ZW50IGluc2VydGlvbiBwb2ludCB3aGljaCBpcyBpbiBhIGNoaWxkIG9m
IHRhcmdldCB0cmVlc2NvcGUuCitQQVNTIGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvciBp
cyAicmdiKDAsIDAsIDApIgorQ2FzZSAxMDogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHBhcmVu
dCB0cmVlc2NvcGUgb2YgdGFyZ2V0LiBUaGUgdGFyZ2V0IGlzIGRpc3RyaWJ1dGVkIGludG8gY29u
dGVudCBpbnNlcnRpb24gcG9pbnQgd2hpY2ggaXMgaW4gYSBjaGlsZCBvZiB0YXJnZXQgdHJlZXNj
b3BlLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAy
NTUpIgorQ2FzZSAxMTogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHNhbWUgdHJlZXNjb3BlIGFz
IHRhcmdldC4gVGhlIHRhcmdldCBpcyBkaXN0cmlidXRlZCBpbnRvIHNoYWRvdyBpbnNlcnRpb24g
cG9pbnQgd2hpY2ggaXMgaW4gYSBjaGlsZCBvZiB0YXJnZXQgdHJlZXNjb3BlLgorUEFTUyBnZXRD
b21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAwKSIKK0Nhc2UgMTI6IEEg
cHNldWRvIHN0eWxlIGlzIGluIHRoZSBwYXJlbnQgdHJlZXNjb3BlIGFzIHRhcmdldC4gVGhlIHRh
cmdldCBpcyBkaXN0cmlidXRlZCBpbnRvIHNoYWRvdyBpbnNlcnRpb24gcG9pbnQgd2hpY2ggaXMg
aW4gYSBjaGlsZCBvZiB0YXJnZXQgdHJlZXNjb3BlLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRh
cmdldCkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRvdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhN2Vj
NGJjZWUwM2RiMjA0ZjFkOGMzZmY1ZWNkMTQzNjZkMzBkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRvdy5odG1sCkBA
IC0wLDAgKzEsODkgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KyAgPGRpdiBpZD0iaG9zdCI+PC9kaXY+Cis8L2JvZHk+Cis8c2NyaXB0PgordmFyIGhvc3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaG9zdCcpOwordmFyIHNoYWRvd1Jvb3QgPSBob3N0Lndl
YmtpdENyZWF0ZVNoYWRvd1Jvb3QoKTsKK3NoYWRvd1Jvb3QuaW5uZXJIVE1MID0gJzxkaXYgaWQ9
ImlubmVyLWhvc3QiPjwvZGl2Pic7CisKK3ZhciBpbm5lckhvc3QgPSBzaGFkb3dSb290LmdldEVs
ZW1lbnRCeUlkKCdpbm5lci1ob3N0Jyk7Cit2YXIgaW5uZXJTaGFkb3cgPSBpbm5lckhvc3Qud2Vi
a2l0Q3JlYXRlU2hhZG93Um9vdCgpOworaW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxkaXYgaWQ9
ImlubmVyLW1vc3QtaG9zdCI+PC9kaXY+JzsKKwordmFyIGlubmVyTW9zdEhvc3QgPSBpbm5lclNo
YWRvdy5nZXRFbGVtZW50QnlJZCgnaW5uZXItbW9zdC1ob3N0Jyk7Cit2YXIgaW5uZXJNb3N0U2hh
ZG93ID0gaW5uZXJNb3N0SG9zdC53ZWJraXRDcmVhdGVTaGFkb3dSb290KCk7CisKK3ZhciB0YXJn
ZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK3RhcmdldC53ZWJraXRQc2V1ZG8g
PSAneC1mb28nOworaW5uZXJNb3N0U2hhZG93LmFwcGVuZENoaWxkKHRhcmdldCk7CisKK3ZhciBw
c2V1ZG9TdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7Citwc2V1ZG9TdHls
ZS5pbm5lckhUTUwgPSAnZGl2Ojp4LWZvbyB7IGNvbG9yOiBibHVlOyB9JzsKK2lubmVyTW9zdFNo
YWRvdy5hcHBlbmRDaGlsZChwc2V1ZG9TdHlsZSk7CisKK2RlYnVnKCdDYXNlIDE6IEEgcHNldWRv
IHN0eWxlIGlzIGluIHRoZSBzYW1lIHRyZWVzY29wZSBhcyBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8u
Jyk7CitzaG91bGRCZSgnZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yJywgJyJyZ2IoMCwg
MCwgMCkiJyk7CisKK2RlYnVnKCdDYXNlIDI6IEEgcHNldWRvIHN0eWxlIGlzIGluIHRoZSBwYXJl
bnQgdHJlZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9vIHBzZXVkby4nKTsKK2lubmVyU2hhZG93LmFw
cGVuZENoaWxkKHBzZXVkb1N0eWxlKTsKK3Nob3VsZEJlKCdnZXRDb21wdXRlZFN0eWxlKHRhcmdl
dCkuY29sb3InLCAnInJnYigwLCAwLCAyNTUpIicpOworCitkZWJ1ZygnQ2FzZSAzOiBBIHBzZXVk
byBzdHlsZSBpcyBpbiB0aGUgcGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1
ZG8uIFRoZSB0cmVlc2NvcGUgb2YgdGhlIGRpdiBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVl
LicpOworaW5uZXJNb3N0U2hhZG93LmFwcGx5QXV0aG9yU3R5bGVzID0gdHJ1ZTsKK3Nob3VsZEJl
KCdnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3InLCAnInJnYigwLCAwLCAyNTUpIicpOwor
CitkZWJ1ZygnQ2FzZSA0OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgZ3JhbmQtcGFyZW50IHRy
ZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uJyk7Citpbm5lck1vc3RTaGFkb3cuYXBw
bHlBdXRob3JTdHlsZXMgPSBmYWxzZTsKK3NoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQocHNldWRvU3R5
bGUpOworc2hvdWxkQmUoJ2dldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvcicsICcicmdiKDAs
IDAsIDApIicpOworCitkZWJ1ZygnQ2FzZSA1OiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0aGUgZ3Jh
bmQtcGFyZW50IHRyZWVzY29wZSBvZiBkaXYgd2l0aCB4LWZvbyBwc2V1ZG8uIFRoZSBwYXJlbnQg
dHJlZXNjb3BlIG9mIHRoZSBkaXYgaGFzIGFwcGx5LWF1dGhvci1zdHlsZXMgdHJ1ZS4nKTsKK2lu
bmVyU2hhZG93LmFwcGx5QXV0aG9yU3R5bGVzID0gdHJ1ZTsKK3Nob3VsZEJlKCdnZXRDb21wdXRl
ZFN0eWxlKHRhcmdldCkuY29sb3InLCAnInJnYigwLCAwLCAyNTUpIicpOworCitkZWJ1ZygnQ2Fz
ZSA2OiBQc2V1ZG8gc3R5bGVzIGFyZSBpbiB0aGUgcGFyZW50IGFuZCBncmFuZC1wYXJlbnQgdHJl
ZXNjb3BlIG9mIGRpdiB3aXRoIHgtZm9vIHBzZXVkby4gVGhlIHBhcmVudCB0cmVlc2NvcGUgb2Yg
dGhlIGRpdiBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLicpOwordmFyIHBzZXVkb1N0eWxl
MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7Citwc2V1ZG9TdHlsZTIuaW5uZXJI
VE1MID0gJ2Rpdjo6eC1mb28geyBjb2xvcjogZ3JlZW47IH0nOworaW5uZXJTaGFkb3cuYXBwZW5k
Q2hpbGQocHNldWRvU3R5bGUyKTsKK3Nob3VsZEJlKCdnZXRDb21wdXRlZFN0eWxlKHRhcmdldCku
Y29sb3InLCAnInJnYigwLCAxMjgsIDApIicpOworCitkZWJ1ZygnQ2FzZSA3OiBBIHBzZXVkbyBz
dHlsZSBpcyBpbiBkb2N1bWVudC4gTm8gdHJlZXNjb3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVz
IHRydWUuJyk7CitzaGFkb3dSb290LnJlbW92ZUNoaWxkKHBzZXVkb1N0eWxlKTsKK2lubmVyU2hh
ZG93LnJlbW92ZUNoaWxkKHBzZXVkb1N0eWxlMik7Citkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxk
KHBzZXVkb1N0eWxlKTsKK2lubmVyU2hhZG93LmFwcGx5QXV0aG9yU3R5bGVzID0gZmFsc2U7Citz
aG91bGRCZSgnZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmNvbG9yJywgJyJyZ2IoMCwgMCwgMCki
Jyk7CisKK2RlYnVnKCdDYXNlIDg6IEEgcHNldWRvIHN0eWxlIGlzIGluIGRvY3VtZW50LiBUaGUg
cGFyZW50IHRyZWVzY29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLicpOworaW5uZXJT
aGFkb3cuYXBwbHlBdXRob3JTdHlsZXMgPSB0cnVlOworc2hvdWxkQmUoJ2dldENvbXB1dGVkU3R5
bGUodGFyZ2V0KS5jb2xvcicsICcicmdiKDAsIDAsIDI1NSkiJyk7Citpbm5lclNoYWRvdy5hcHBs
eUF1dGhvclN0eWxlcyA9IGZhbHNlOworCitkZWJ1ZygnQ2FzZSA5OiBBIHBzZXVkbyBzdHlsZSBp
cyBpbiB0aGUgc2FtZSB0cmVlc2NvcGUgYXMgdGFyZ2V0LiBUaGUgdGFyZ2V0IGlzIGRpc3RyaWJ1
dGVkIGludG8gY29udGVudCBpbnNlcnRpb24gcG9pbnQgd2hpY2ggaXMgaW4gYSBjaGlsZCBvZiB0
YXJnZXQgdHJlZXNjb3BlLicpOworaW5uZXJTaGFkb3cuYXBwZW5kQ2hpbGQocHNldWRvU3R5bGUp
OworaW5uZXJTaGFkb3cuYXBwZW5kQ2hpbGQodGFyZ2V0KTsKK2lubmVyTW9zdFNoYWRvdy5pbm5l
ckhUTUwgPSAnPGNvbnRlbnQ+JzsKK3Nob3VsZEJlKCdnZXRDb21wdXRlZFN0eWxlKHRhcmdldCku
Y29sb3InLCAnInJnYigwLCAwLCAwKSInKTsKKworZGVidWcoJ0Nhc2UgMTA6IEEgcHNldWRvIHN0
eWxlIGlzIGluIHRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRhcmdldC4gVGhlIHRhcmdldCBpcyBk
aXN0cmlidXRlZCBpbnRvIGNvbnRlbnQgaW5zZXJ0aW9uIHBvaW50IHdoaWNoIGlzIGluIGEgY2hp
bGQgb2YgdGFyZ2V0IHRyZWVzY29wZS4nKTsKK3NoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQocHNldWRv
U3R5bGUpOworc2hvdWxkQmUoJ2dldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvcicsICcicmdi
KDAsIDAsIDI1NSkiJyk7CisKK2RlYnVnKCdDYXNlIDExOiBBIHBzZXVkbyBzdHlsZSBpcyBpbiB0
aGUgc2FtZSB0cmVlc2NvcGUgYXMgdGFyZ2V0LiBUaGUgdGFyZ2V0IGlzIGRpc3RyaWJ1dGVkIGlu
dG8gc2hhZG93IGluc2VydGlvbiBwb2ludCB3aGljaCBpcyBpbiBhIGNoaWxkIG9mIHRhcmdldCB0
cmVlc2NvcGUuJyk7Citpbm5lclNoYWRvdy5hcHBlbmRDaGlsZChwc2V1ZG9TdHlsZSk7Cit2YXIg
eW91bmdlcklubmVyTW9zdFNoYWRvdyA9IGlubmVyTW9zdEhvc3Qud2Via2l0Q3JlYXRlU2hhZG93
Um9vdCgpOworeW91bmdlcklubmVyTW9zdFNoYWRvdy5pbm5lckhUTUwgPSAnPHNoYWRvdz4nOwor
c2hvdWxkQmUoJ2dldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5jb2xvcicsICcicmdiKDAsIDAsIDAp
IicpOworCitkZWJ1ZygnQ2FzZSAxMjogQSBwc2V1ZG8gc3R5bGUgaXMgaW4gdGhlIHBhcmVudCB0
cmVlc2NvcGUgYXMgdGFyZ2V0LiBUaGUgdGFyZ2V0IGlzIGRpc3RyaWJ1dGVkIGludG8gc2hhZG93
IGluc2VydGlvbiBwb2ludCB3aGljaCBpcyBpbiBhIGNoaWxkIG9mIHRhcmdldCB0cmVlc2NvcGUu
Jyk7CitzaGFkb3dSb290LmFwcGVuZENoaWxkKHBzZXVkb1N0eWxlKTsKK3Nob3VsZEJlKCdnZXRD
b21wdXRlZFN0eWxlKHRhcmdldCkuY29sb3InLCAnInJnYigwLCAwLCAyNTUpIicpOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
c2hhZG93LW5lc3RlZC1wc2V1ZG8taWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2hhZG93L3NoYWRvdy1uZXN0ZWQtcHNldWRvLWlkLWV4cGVjdGVkLnR4dAppbmRleCA5MDU4
ZDZiNTA0ODM1MWQzZDJjYjc1MjkxODg2MWZiYTRjYzJmNGRiLi44MzBkOGNkZjZlYTI3NTM3MjFh
MDdkOWM1YzhjMDhkNjg0NWUyNTU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvc2hhZG93LW5lc3RlZC1wc2V1ZG8taWQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctbmVzdGVkLXBzZXVkby1pZC1leHBlY3RlZC50eHQK
QEAgLTQsNyArNCw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiAKIAogUEFTUyB3aW5kb3cu
Z2V0Q29tcHV0ZWRTdHlsZSh0dXBsZS5zaGFkb3dDaGlsZCkuY29sb3IgaXMgJ3JnYigyNTUsIDAs
IDApJwotUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFkb3dDaGls
ZCkuY29sb3IgaXMgJ3JnYigwLCAwLCAyNTUpJworUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHls
ZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCkuY29sb3IgaXMgJ3JnYigyNTUsIDAsIDApJwogUEFT
UyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCkuYmFja2dy
b3VuZENvbG9yIGlzICdyZ2IoMCwgMTI4LCAwKScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1u
ZXN0ZWQtcHNldWRvLWlkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93
LW5lc3RlZC1wc2V1ZG8taWQuaHRtbAppbmRleCA0YTRiYWE4Nzc5NzkxMjM3Zjc5NmEyYWFlMzEx
OWMxMjhiZWFhNjJiLi4wMmVhODAyNjFiMjVjNmY1ZmY1OTExMmNjZGUzZGExNjdhYjJhYTYxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3RlZC1wc2V1
ZG8taWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3Rl
ZC1wc2V1ZG8taWQuaHRtbApAQCAtNDIsNyArNDIsOSBAQCB2YXIgaG9zdCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJob3N0Iik7CiB2YXIgdHVwbGUgPSBidWlsZFNoYWRvd1dpdGhPbmVDaGls
ZChob3N0LCAiYSIsICJ4LXNoYWRvdy1jaGlsZCIpOwogc2hvdWxkQmUoIndpbmRvdy5nZXRDb21w
dXRlZFN0eWxlKHR1cGxlLnNoYWRvd0NoaWxkKS5jb2xvciIsICIncmdiKDI1NSwgMCwgMCknIik7
CiB2YXIgc2hhZG93VHVwbGUgPSBidWlsZFNoYWRvd1dpdGhPbmVDaGlsZCh0dXBsZS5zaGFkb3dD
aGlsZCwgImIiLCAieC1uZXN0ZWQtc2hhZG93LWNoaWxkIik7Ci1zaG91bGRCZSgid2luZG93Lmdl
dENvbXB1dGVkU3R5bGUoc2hhZG93VHVwbGUuc2hhZG93Q2hpbGQpLmNvbG9yIiwgIidyZ2IoMCwg
MCwgMjU1KSciKTsKKy8vIFNpbmNlIDxhPiBpbiBhIHNoYWRvdyBkb20gdHJlZSBhbmQgYTo6eC1u
ZXN0ZWQtc2hhZG93LWNoaWxkJ3MgcnVsZSBpcworLy8gZGVjbGFyZWQgaW4gYSBkb2N1bWVudCB0
cmVlLCB3ZSBjYW5ub3QgYXBwbHkgdGhlIHJ1bGUgdG8gdGhlIDxhPi4KK3Nob3VsZEJlKCJ3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dUdXBsZS5zaGFkb3dDaGlsZCkuY29sb3IiLCAiJ3Jn
YigyNTUsIDAsIDApJyIpOwogc2hvdWxkQmUoIndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHNoYWRv
d1R1cGxlLnNoYWRvd0NoaWxkKS5iYWNrZ3JvdW5kQ29sb3IiLCAiJ3JnYigwLCAxMjgsIDApJyIp
OwogCiB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182106</attachid>
            <date>2013-01-10 03:27:23 -0800</date>
            <delta_ts>2013-01-10 03:27:23 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-102919-20130110202426.patch</filename>
            <type>text/plain</type>
            <size>33604</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg1ZTM0NDQ2MmNlODQy
MTdhOTkxOTM0ZmFjNmU2YThiMWExMDNmNS4uZmNlZWI2MDBjNWIzNDQyNDg5Y2NiOGI5NDgwYzAy
ZmU3NDE3ZGFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEyLTE3ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV06
IGN1c3RvbSBwc2V1ZG8gaW4gc3R5bGVzIGluIHNoYWRvdyBkb20gdHJlZXMgZG9lc24ndCB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI5MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXN0b20g
cHNldWRvIHN0eWxlcyBkZWNsYXJlZCBpbiBhIHBhcmVudCB0cmVlc2NvcGUgc2hvdWxkIGJlIGNo
ZWNrZWQKKyAgICAgICAgZm9yIGVsZW1lbnRzIGluIHRoZSB0cmVlc2NvcGUuIEN1c3RvbSBwc2V1
ZG8gc3R5bGVzIGluIGFuIGF1dGhvcgorICAgICAgICBzdHlsZXNoZWV0IHNob3VsZCBvbmx5IGFw
cGx5IHRvIGVsZW1lbnRzIGluIGEgY2hpbGQgdHJlZSBzY29wZSBvZgorICAgICAgICBkb2N1bWVu
dCBvciBpbiBzb21lIHRyZWVzY29wZSB3aG9zZSBwYXJlbnQgdHJlZXNjb3BlIGhhcworICAgICAg
ICBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hh
ZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3cuaHRtbAorCisgICAgICAgICogY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Vs
ZWN0b3IpOgorICAgICAgICBNb2RpZmllZCB0byBjaGVjayB3aGV0aGVyIHRoZSBsYXN0IG1hdGNo
ZWQgZWxlbWVudCBtYXRjaGVzIHRoZSBnaXZlbgorICAgICAgICBzY29wZSBvciBub3QuCisgICAg
ICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQp
OgorICAgICAgICAoU2VsZWN0b3JDaGVja2luZ0NvbnRleHQpOgorICAgICAgICBBZGRlZCBhIG5l
dyBtZW1iZXIgdmFyaWFibGU6IHNjb3BlT2ZMYXN0RWxlbWVudC4KKyAgICAgICAgKiBjc3MvU3R5
bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMpOgorICAgICAgICBNb3ZlZCB0aGUgY29kZSBmcm9t
IGNvbGxlY3RNYXRjaGluZ1J1bGVzLiBUaGlzIG1ldGhvZCBvbmx5IGNvbGxlY3RzCisgICAgICAg
IG1hdGNoZWQgcHNldWRvIHJ1bGVzIGZyb20gdGhlIGdpdmVuIHJ1bGVzZXQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGlu
Z1J1bGVzKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
VUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIFNpbmNlIHRoZSBjb2RlIGZvciBjb2xs
ZWN0aW5nIHBzZXVkbyBydWxlcyBpcyBtb3ZlZCBmcm9tCisgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzIHRvIGNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1lbnRSdWxlcywgbmVlZCB0bworICAg
ICAgICBpbnZva2UgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24gYmVmb3JlIGNvbGxlY3RN
YXRjaGluZ1J1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29w
ZWRBdXRob3JSdWxlcyk6CisgICAgICAgIEFkZGVkIGNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1l
bnRSdWxlcyBmb3IgZWFjaCBwYXJlbnQgdHJlZSBzY29wZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICBOZWVkIHRvIHByb3ZpZGUgc2Nv
cGVPZkxhc3RFbGVtZW50IGluZm9ybWF0aW9uLCBtb2RpZmllZCB0aGUgc2Vjb25kCisgICAgICAg
IGFyZ3VtZW50IGZyb20gImNvbnN0IENvbnRhaW5lck5vZGUqIiB0byAiY29uc3QgTWF0Y2hPcHRp
b25zJiIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QpOgorICAgICAgICBTaW5jZSBjaGVja1NlbGVjdG9yIGlzIG1vZGlmaWVkLCB1
cGRhdGVkLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpNYXRjaE9wdGlvbnM6Ok1hdGNoT3B0aW9ucyk6CisgICAgICAgIChN
YXRjaE9wdGlvbnMpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIEFkZGVkIGEg
bmV3IG1lbWJlciB2YXJpYWJsZSwgc2NvcGVPZkxhc3RFbGVtZW50LgorICAgICAgICAqIGNzcy9T
dHlsZVNjb3BlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29s
dmVyOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZmluZFN0
eWxlQm91bmRzT2ZQYXJlbnRUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVy
KToKKwogMjAxMy0wMS0wOSAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJlbW92ZSB1bnVzZWQgaW5jbHVkZXMgZnJvbSBIVE1MVHJlZUJ1aWxkZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggY2E3M2FhNGYyNjY2ZjdlZThi
NmM1ODIxNGY3MmQxNGU4OWRmN2E4My4uMWYzYmM5YjhiOWY5YWQ5Y2UyNGY0N2M4NjMzOTY5NWE2
ZThiZTUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTI4MSw4
ICsyODEsMTcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWMKIAogICAgIC8vIFByZXBhcmUgbmV4
dCBzZWxlY3RvcgogICAgIENTU1NlbGVjdG9yKiBoaXN0b3J5U2VsZWN0b3IgPSBjb250ZXh0LnNl
bGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0gICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpCisgICAgaWYg
KCFoaXN0b3J5U2VsZWN0b3IpIHsKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICAgICAgaWYg
KGNvbnRleHQuc2NvcGVPZkxhc3RFbGVtZW50KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2hl
Y2sgdGhlIHNjb3BlIG1vcmUgc3RyaWN0bHkuCisgICAgICAgICAgICAvLyBPYnRhaW5lZCBmcm9t
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL2F0dGFjaG1lbnQuY2dpP2lkPTE3Njg5MgorICAgICAg
ICAgICAgLy8gU2hvdWxkIHdhaXQgdGlsbCB0aGUgb3JpZ2luYWwgYnVnIGlzIGZpeGVkLgorICAg
ICAgICAgICAgcmV0dXJuIGNvbnRleHQuc2NvcGVPZkxhc3RFbGVtZW50LT50cmVlU2NvcGUoKSA9
PSBjb250ZXh0LmVsZW1lbnQtPnRyZWVTY29wZSgpID8gU2VsZWN0b3JNYXRjaGVzIDogU2VsZWN0
b3JGYWlsc0xvY2FsbHk7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICByZXR1cm4gU2VsZWN0
b3JNYXRjaGVzOworICAgIH0KIAogICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IG5leHRDb250
ZXh0KGNvbnRleHQpOwogICAgIG5leHRDb250ZXh0LnNlbGVjdG9yID0gaGlzdG9yeVNlbGVjdG9y
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDMzMTkzZjc2YmMzMjgyNmFk
MGQzZWU2MTQ1MTViOWJhYzVkMjUyMGIuLmQ5NjZkMmU1N2Q4NWY0MDQ1NmQwMWE2NmFjMjIwYjE3
NDg4MjBjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTYzLDYgKzYz
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBpc1N1YlNlbGVjdG9yKGZhbHNlKQogICAgICAg
ICAgICAgLCBoYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCiAgICAgICAgICAgICAsIGhhc1NlbGVj
dGlvblBzZXVkbyhmYWxzZSkKKyAgICAgICAgICAgICwgc2NvcGVPZkxhc3RFbGVtZW50KDApCiAg
ICAgICAgIHsgfQogCiAgICAgICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcjsKQEAgLTc1LDYgKzc2
LDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlzU3ViU2VsZWN0b3I7CiAgICAgICAgIGJvb2wg
aGFzU2Nyb2xsYmFyUHNldWRvOwogICAgICAgICBib29sIGhhc1NlbGVjdGlvblBzZXVkbzsKKyAg
ICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVPZkxhc3RFbGVtZW50OwogICAgIH07CiAK
ICAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgYm9vbCBpc0Zh
c3RDaGVja2FibGVTZWxlY3RvciA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcAppbmRleCAwOThlMGQ1N2MwYjdlMWQ3NGVkMTUwOGY3ZTkwMGQ1MTZjMmU5NzBk
Li5mNjEyMmI5NmJjNGRmOWNjNzVhYWVkNDEwZDMwYTBlMTYxNTc1YmI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC02NDIsMTYgKzY0MiwyNCBAQCBpbmxpbmUgYm9vbCBN
YXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogCiBib29sIE1hdGNoaW5n
VUFSdWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUHNldWRvRWxlbWVudFJ1bGVzKFJ1
bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNv
bnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBBU1NFUlQocnVsZXMpOwogICAgIEFT
U0VSVChtX2VsZW1lbnQpOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IG1f
ZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKLSAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkg
ewotICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKLSAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQu
aW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwotICAgIH0K
KyAgICBpZiAocHNldWRvSWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV9zdHlsZWRFbGVtZW50KTsKKworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChy
dWxlcy0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRl
eCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCit7Cisg
ICAgQVNTRVJUKHJ1bGVzKTsKKyAgICBBU1NFUlQobV9lbGVtZW50KTsKIAogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKICAgICBpZiAobV9lbGVtZW50LT5pc1dlYlZUVE5vZGUoKSkKQEAgLTY5NSw2
ICs3MDMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZQogICAgICAgICBpZiAoY2hlY2tSZWdp
b25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVnaW9u
Rm9yU3R5bGluZy0+bm9kZSgpKSkpIHsKICAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVz
ID0gcnVsZXMtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQo
KTsKICAgICAgICAgICAgIEFTU0VSVChyZWdpb25SdWxlcyk7CisgICAgICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMocmVnaW9uUnVsZXMsIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBvcHRpb25zKTsKICAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KHJlZ2lvblJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC03MzksMjMgKzc0OCwzMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRl
RW1wdAogICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVtZW50LT50cmVlU2Nv
cGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0g
dHJ1ZTsKICAgICAgICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFj
a1NpemUoKTsKKworICAgICAgICBib29sIGVsZW1lbnRIYXNTaGFkb3dQc2V1ZG8gPSAhbV9lbGVt
ZW50LT5zaGFkb3dQc2V1ZG9JZCgpLmlzRW1wdHkoKTsKKyAgICAgICAgYm9vbCBwYXJlbnRBcHBs
eUF1dGhvclN0eWxlcyA9IGZhbHNlOworICAgICAgICBpbnQgcGFyZW50VHJlZVNjb3BlQm91bmRz
SW5kZXggPSAwOworICAgICAgICBpZiAoZWxlbWVudEhhc1NoYWRvd1BzZXVkbykKKyAgICAgICAg
ICAgIHBhcmVudFRyZWVTY29wZUJvdW5kc0luZGV4ID0gbV9zY29wZVJlc29sdmVyLT5maW5kU3R5
bGVCb3VuZHNPZlBhcmVudFRyZWVTY29wZShwYXJlbnRBcHBseUF1dGhvclN0eWxlcyk7CisKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7CisgICAgICAg
ICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29w
ZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CiAgICAgICAgICAgICBtX21hdGNoZWRSdWxlcy5j
bGVhcigpOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCi0gICAgICAgICAgICBjb25zdCBTdHls
ZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFj
a0ZyYW1lQXQoaSk7CiAgICAgICAgICAgICBkb2N1bWVudFNjb3BlID0gZG9jdW1lbnRTY29wZSAm
JiAhZnJhbWUubV9zY29wZS0+aXNJblNoYWRvd1RyZWUoKTsKLSAgICAgICAgICAgIGlmIChkb2N1
bWVudFNjb3BlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcHBseUF1dGhvclN0eWxlcykKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmICghbV9zY29wZVJlc29sdmVyLT5tYXRjaGVzU3R5bGVCb3VuZHMoZnJhbWUp
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMsIGZyYW1lLm1fc2Nv
cGUpOwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCBy
ZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZSwgb3B0aW9ucyk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihm
cmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFu
Z2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50SGFz
U2hhZG93UHNldWRvKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5zY29wZU9mTGFzdEVsZW1l
bnQgPSAoZG9jdW1lbnRTY29wZSAmJiBwYXJlbnRBcHBseUF1dGhvclN0eWxlcykgfHwgZnJhbWUu
bV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09IHBhcmVudFRyZWVTY29wZUJvdW5kc0luZGV4ID8g
MCA6IGZyYW1lLm1fc2NvcGU7CisgICAgICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUHNldWRv
RWxlbWVudFJ1bGVzKGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1
bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoKGRvY3VtZW50U2NvcGUgJiYgYXBwbHlBdXRob3JTdHlsZXMp
IHx8IG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hlc1N0eWxlQm91bmRzKGZyYW1lKSkgeworICAgICAg
ICAgICAgICAgIG9wdGlvbnMuc2NvcGVPZkxhc3RFbGVtZW50ID0gMDsKKyAgICAgICAgICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhmcmFtZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmly
c3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAg
ICAgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFtZS5tX3J1bGVT
ZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNvcnRBbmRUcmFu
c2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzkwLDggKzgw
NywxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAgICAgICAgIHJldHVybjsKIAogICAgIE1h
dGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzLCBtX2VsZW1lbnQpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkgeworICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMobWF0Y2hlZFJ1bGVzLmF0KGktMSks
IHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlLCBvcHRpb25zKTsKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hlZFJ1bGVz
LmF0KGktMSksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxh
c3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICB9CiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKHJlc3VsdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwpAQCAtODA5
LDYgKzgyOCwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hS
ZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogCiAgICAgLy8gTWF0Y2ggZ2xv
YmFsIGF1dGhvciBydWxlcy4KICAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlS
dWxlcyk7CisjaWYgRU5BQkxFKFNIQURPV19ET00pCisgICAgb3B0aW9ucy5zY29wZU9mTGFzdEVs
ZW1lbnQgPSBkb2N1bWVudCgpOworICAgIGlmIChUcmVlU2NvcGUqIHBhcmVudFRyZWVTY29wZSA9
IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICBpZiAo
cGFyZW50VHJlZVNjb3BlLT5hcHBseUF1dGhvclN0eWxlcygpKQorICAgICAgICAgICAgb3B0aW9u
cy5zY29wZU9mTGFzdEVsZW1lbnQgPSAwOworI2VuZGlmCisgICAgY29sbGVjdE1hdGNoaW5nUHNl
dWRvRWxlbWVudFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyNpZiBF
TkFCTEUoU0hBRE9XX0RPTSkKKyAgICBvcHRpb25zLnNjb3BlT2ZMYXN0RWxlbWVudCA9IDA7Cisj
ZW5kaWYKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1
bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwg
b3B0aW9ucyk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9hdXRob3JTdHls
ZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUsIG9wdGlvbnMpOwogICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhy
ZXN1bHQpOwpAQCAtODI0LDYgKzg1Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2Vy
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICAgICBt
X21hdGNoZWRSdWxlcy5jbGVhcigpOwogCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUg
PSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKKyAgICBjb2xsZWN0TWF0Y2hp
bmdQc2V1ZG9FbGVtZW50UnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmly
c3RVc2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgcmVzdWx0LnJh
bmdlcy5maXJzdFVzZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgaW5jbHVkZUVt
cHR5UnVsZXMpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fdXNlclN0eWxl
LmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVz
ZXJSdWxlLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAKQEAgLTgzNSw2ICs4NjUsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBy
dWxlcykKICAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIAogICAgIHJlc3VsdC5yYW5n
ZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOworICAg
IGNvbGxlY3RNYXRjaGluZ1BzZXVkb0VsZW1lbnRSdWxlcyhydWxlcywgcmVzdWx0LnJhbmdlcy5m
aXJzdFVBUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBmYWxzZSk7CiAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXMocnVsZXMsIHJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIHJlc3VsdC5y
YW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwogCiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKHJlc3VsdCk7CkBAIC04NDcsNyArODc4LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBp
CiAKICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBm
b3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNv
bHZlLgogICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRh
dGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KKyNpZiBFTkFC
TEUoU0hBRE9XX0RPTSkKKyAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmls
dGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFyZW50Tm9kZSkgJiYgIW9wdGlvbnMuc2Nv
cGVPZkxhc3RFbGVtZW50OworI2Vsc2UKICAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX3Nl
bGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFyZW50Tm9kZSk7CisjZW5k
aWYKIAogICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+c2l6ZSgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTg1Nyw3ICs4OTIsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURh
dGE+KiBydWxlcywgaQogCiAgICAgICAgIFN0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUo
KTsKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlz
KTsKLSAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEsIG9wdGlvbnMuc2NvcGUpKSB7
CisgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhLCBvcHRpb25zLnNjb3BlLCBvcHRp
b25zLnNjb3BlT2ZMYXN0RWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhh
cyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVn
IG1vZGUuCiAgICAgICAgICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0g
cnVsZS0+cHJvcGVydGllcygpOwogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzIHx8IChwcm9w
ZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW9wdGlvbnMuaW5jbHVkZUVtcHR5UnVsZXMpKSB7CkBAIC0x
MDYxLDYgKzEwOTYsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCiAKICAgICBpbnQgZmlyc3RSdWxlSW5k
ZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1v
ZGUoU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMpOworICAgIGNvbGxlY3RNYXRjaGluZ1Bz
ZXVkb0VsZW1lbnRSdWxlcyhydWxlU2V0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwg
ZmFsc2UpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4LCBmYWxzZSk7CiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShT
ZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKICAgICBpZiAobV9tYXRjaGVkUnVsZXMu
aXNFbXB0eSgpKQpAQCAtMjIzOCw3ICsyMjc0LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4g
U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMK
ICAgICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7CiB9CiAKLWlubGluZSBib29sIFN0eWxl
UmVzb2x2ZXI6OmNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSkKK2lubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrU2Vs
ZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGVPZkxhc3RFbGVtZW50KQogewogICAgIG1fZHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOwogCkBAIC0yMjYzLDYgKzIyOTksNyBAQCBpbmxpbmUgYm9v
bCBTdHlsZVJlc29sdmVyOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwg
Y29uc3QgQ29udGFpbgogICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gc3R5bGUoKTsKICAgICBj
b250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA9IG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+
cmVuZGVyU3R5bGUoKSA6IDA7CiAgICAgY29udGV4dC5zY29wZSA9IHNjb3BlOworICAgIGNvbnRl
eHQuc2NvcGVPZkxhc3RFbGVtZW50ID0gc2NvcGVPZkxhc3RFbGVtZW50OwogICAgIGNvbnRleHQu
cHNldWRvU3R5bGUgPSBtX3BzZXVkb1N0eWxlOwogICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JNYXRjaCBtYXRjaCA9IG1fc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0b3IoY29udGV4dCwg
bV9keW5hbWljUHNldWRvKTsKICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3Rvck1hdGNoZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA1YmQyOTQwZTU3
ZjI5ODIxZmU2MTNlYTBlOGEzOWJmZGZiODhkMDdkLi5kZDhiMzg2NzcyYzA5ZGVkYTkzM2IxY2Mx
Zjk0NzRlYmUzYmNjZThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTM0Myw5
ICszNDMsMTAgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgc3RydWN0IE1hdGNoT3B0aW9ucyB7
Ci0gICAgICAgIE1hdGNoT3B0aW9ucyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSA9IDApIDogc2NvcGUoc2NvcGUpLCBpbmNsdWRlRW1wdHlSdWxlcyhp
bmNsdWRlRW1wdHlSdWxlcykgeyB9CisgICAgICAgIE1hdGNoT3B0aW9ucyhib29sIGluY2x1ZGVF
bXB0eVJ1bGVzLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDAsIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlT2ZMYXN0RWxlbWVudCA9IDApIDogc2NvcGUoc2NvcGUpLCBpbmNsdWRlRW1w
dHlSdWxlcyhpbmNsdWRlRW1wdHlSdWxlcyksIHNjb3BlT2ZMYXN0RWxlbWVudChzY29wZU9mTGFz
dEVsZW1lbnQpIHsgfQogICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKICAgICAg
ICAgYm9vbCBpbmNsdWRlRW1wdHlSdWxlczsKKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGVPZkxhc3RFbGVtZW50OwogICAgIH07CiAKICAgICBzdGF0aWMgdm9pZCBhZGRNYXRjaGVk
UHJvcGVydGllcyhNYXRjaFJlc3VsdCYsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRp
ZXMsIFN0eWxlUnVsZSogPSAwLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaEFsbCwgYm9vbCBpblJlZ2lvblJ1bGUgPSBmYWxzZSk7CkBAIC0zNTcsMTUgKzM1
OCwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hS
ZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoU2NvcGVkQXV0
aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyNpZiBFTkFC
TEUoU0hBRE9XX0RPTSkgfHwgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICB2b2lkIG1hdGNoU2Nv
cGVkQXV0aG9yUnVsZXNQZXJTY29wZShNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZWRFbXB0eVJ1
bGVzLCBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmLCBib29sIHBzZXVkb09u
bHkpOworI2VuZGlmCiAgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNl
dCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hP
cHRpb25zJik7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdQc2V1ZG9FbGVtZW50UnVsZXMoUnVs
ZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0
Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxl
U2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRj
aE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBW
ZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihjb25z
dCBSdWxlRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOwogICAgIHZv
aWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAKLSAgICBib29s
IGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSk7CisgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlT2ZMYXN0RWxlbWVudCk7
CiAgICAgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3Rv
ciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCk7CiAgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOwogICAgIGVudW0gU3R5bGVB
cHBsaWNhdGlvblBhc3MgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2Nv
cGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNw
cAppbmRleCBmZGViZGE0Y2M4MDYwYmIxZmY5M2NlYWNlMjM5YTYyYWM1ZWQ0ZmE3Li5jMTRkYTA1
MWM1YjMwYzUzN2JiNmM5MzVmOTc5MTM5MGE0ZDRhN2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTY29wZVJlc29sdmVyLmNwcApAQCAtMTMyLDYgKzEzMiw3IEBAIHZvaWQgU3R5bGVTY29w
ZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWlu
ZXJOb2RlKiBzCiAKICAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jv
b3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQogICAgICAgICArK21fc3RhY2tQYXJlbnRC
b3VuZHNJbmRleDsKKwogICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIHBhcmVudCBvbnRv
IHRoZSBzdGFjay4KICAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvcihzY29wZSk7CiAg
ICAgaWYgKHJ1bGVTZXQpCkBAIC0xNTEsNiArMTUyLDIxIEBAIHZvaWQgU3R5bGVTY29wZVJlc29s
dmVyOjpwb3AoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiAgICAgfQogfQogCitpbnQgU3R5
bGVTY29wZVJlc29sdmVyOjpmaW5kU3R5bGVCb3VuZHNPZlBhcmVudFRyZWVTY29wZShib29sJiBh
cHBseUF1dGhvclN0eWxlcykgY29uc3QKK3sKKyAgICBhcHBseUF1dGhvclN0eWxlcyA9IGZhbHNl
OworCisgICAgLy8gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4ICsgMSBkb2Vzbid0IG1hdGNoIGFu
eSBpdGVtcyBpbiBtX3N0YWNrLgorICAgIGlmICghbV9zdGFja1BhcmVudCB8fCAhbV9zdGFja1Bh
cmVudC0+aXNJblNoYWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJuIG1fc3RhY2tQYXJlbnRCb3Vu
ZHNJbmRleCArIDE7CisKKyAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG1fc3RhY2tQYXJlbnQt
PnRyZWVTY29wZSgpOworICAgIGlmIChUcmVlU2NvcGUqIHBhcmVudFRyZWVTY29wZSA9IHRyZWVT
Y29wZS0+cGFyZW50VHJlZVNjb3BlKCkpCisgICAgICAgIGFwcGx5QXV0aG9yU3R5bGVzID0gcGFy
ZW50VHJlZVNjb3BlLT5hcHBseUF1dGhvclN0eWxlcygpOworCisgICAgcmV0dXJuIHRyZWVTY29w
ZS0+YXBwbHlBdXRob3JTdHlsZXMoKSA/IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCA6IG1fc3Rh
Y2tQYXJlbnRCb3VuZHNJbmRleCAtIDE7Cit9CisKIHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpj
b2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMpCiB7CiAgICAgZm9yIChT
Y29wZWRSdWxlU2V0TWFwOjppdGVyYXRvciBpdCA9IG1fYXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0
ICE9IG1fYXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2Nv
cGVSZXNvbHZlci5oCmluZGV4IDNiZTNmZjRmNzBjNzM3NWJkMDE0MjZhMDBiYTQyNDEyODQ2MmNj
MGUuLmJiY2NiNThiMTQ2MGMwYjM0YTA0MTE5NjUzMDJjYWU3YmRkMzkzMTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9
CiAgICAgY29uc3QgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZUF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3N0YWNrLmF0KGluZGV4KTsgfQogICAgIGJvb2wgbWF0Y2hlc1N0eWxlQm91
bmRzKGNvbnN0IFN0YWNrRnJhbWUmIGZyYW1lKSBjb25zdCB7IHJldHVybiBmcmFtZS5tX2F1dGhv
clN0eWxlQm91bmRzSW5kZXggPT0gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OyB9CisgICAgaW50
IGZpbmRTdHlsZUJvdW5kc09mUGFyZW50VHJlZVNjb3BlKGJvb2wmIGFwcGx5QXV0aG9yU3R5bGVz
KSBjb25zdDsKICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0Jik7CiAK
ICAgICB2b2lkIGFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqLCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyZGYxMDcw
MWUyNjZjNTlmMTQwZDI5NmNjNjZkODQ3MzBjZTIxNzdiLi42YTY4ZjczM2RkZGJiMTFlNGY3NDZh
YWY4ODA1MjE1NTVlZWJhMmI0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMTItMTcgIFRh
a2FzaGkgU2FrYW1vdG8gIDx0YXNha0Bnb29nbGUuY29tPgorCisgICAgICAgIFtTaGFkb3cgRE9N
XTogY3VzdG9tIHBzZXVkbyBpbiBzdHlsZXMgaW4gc2hhZG93IGRvbSB0cmVlcyBkb2Vzbid0IHdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjkx
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFz
dC9kb20vc2hhZG93L3BzZXVkby1zdHlsZS1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRvdy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3RlZC1wc2V1ZG8taWQt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctbmVzdGVkLXBz
ZXVkby1pZC5odG1sOgorICAgICAgICBhOjp4LW5lc3RlZC1zaGFkb3ctY2hpbGQgcnVsZSBpcyBk
ZWNsYXJlZCBpbiBhIGRvY3VtZW50IGJ1dCB0aGUgZWxlbWVudAorICAgICAgICBpcyBpbiBhIHNo
YWRvdyBkb20gdHJlZS4gU28gYTo6eC1uZXN0ZWQtc2hhZG93LWNoaWxkIHJ1bGUgc2hvdWxkIG5v
dAorICAgICAgICBiZSBhcHBseS4KKwogMjAxMy0wMS0wOSAgTWF4IFZ1am92aWMgIDxtdnVqb3Zp
Y0BhZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkZXJzXSBEZXRhY2hlZCBpZGVudGlmaWVy
IGFmdGVyIG1lc2ggYm94IHR5cGUgaXMgbm90IGFwcGxpZWQKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MzUyMDI5ZmFhNjI1NzQ2MmFjM2UzYTA3N2Y3MDdiY2VkZWQx
NTcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVk
by1zdHlsZS1pbi1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0EgY3VzdG9t
IHBzZXVkbyBzdHlsZSBzaG91bGQgbm90IGJlIGFwcGxpZWQgd2hlbiB0aGUgc3R5bGUgZWxlbWVu
dCBhbmQgaXRzIHRhcmdldCBlbGVtZW50IGFyZSBpbiB0aGUgc2FtZSB0cmVlc2NvcGUuCitQQVNT
IGdldENvbXB1dGVkU3R5bGUoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCJob3N0L2hvc3QtZGVw
dGgxL2ZvbyIpKS5jb2xvciBpcyAicmdiKDAsIDAsIDApIgorQSBjdXN0b20gcHNldWRvIHN0eWxl
LCBkaXY6OngtZm9vIHNob3VsZCBiZSBhcHBsaWVkIHdoZW4gdGhlIHN0eWxlIGVsZW1lbnQgaXMg
aW4gdGhlIHBhcmVudCB0cmVlc2NvcGUgb2YgdGhlIHRhcmdldCBlbGVtZW50LgorUEFTUyBnZXRD
b21wdXRlZFN0eWxlKGdldE5vZGVJblNoYWRvd1RyZWVTdGFjaygiaG9zdC9ob3N0LWRlcHRoMS9m
b28iKSkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorQSBjdXN0b20gcHNldWRvIHN0eWxlLCBk
aXY6OngtZm9vIHNob3VsZCBub3QgYmUgYXBwbGllZCB3aGVuIHRoZSBzdHlsZSBlbGVtZW50IGlz
IGluIHRoZSBncmFuZHBhcmVudCB0cmVlc2NvcGUgb2YgdGhlIHRhcmdldCBlbGVtZW50LgorUEFT
UyBnZXRDb21wdXRlZFN0eWxlKGdldE5vZGVJblNoYWRvd1RyZWVTdGFjaygiaG9zdC9ob3N0LWRl
cHRoMS9ob3N0LWRlcHRoMi9mb28iKSkuY29sb3IgaXMgInJnYigwLCAwLCAwKSIKK0EgY3VzdG9t
IHBzZXVkbyBzdHlsZSwgZGl2Ojp4LWZvbyBzaG91bGQgYmUgYXBwbGllZCB3aGVuIHRoZSBzdHls
ZSBlbGVtZW50IGlzIGluIHRoZSBncmFuZHBhcmVudCB0cmVlc2NvcGUgb2YgdGhlIHRhcmdldCBl
bGVtZW50IGFuZCB0aGUgcGFyZW50IHRyZWVzY29wZSBoYXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0
cnVlLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKGdldE5vZGVJblNoYWRvd1RyZWVTdGFjaygiaG9z
dC9ob3N0LWRlcHRoMS9ob3N0LWRlcHRoMi9mb28iKSkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUp
IgorQSBjdXN0b20gcHNldWRvIHN0eWxlLCBkaXY6OngtZm9vLCBzaG91bGQgYmUgYXBwbGllZCBp
biBjYXNjYWRpbmcgb3JkZXIgd2hlbiB0aGUgc2FtZSBwc2V1ZG8gc3R5bGUgaXMgZGVjbGFyZWQg
aW4gYm90aCB0aGUgZ3JhbmRwYXJlbnQgdHJlZXNjb3BlIGFuZCB0aGUgcGFyZW50IHRyZWVzY29w
ZSBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIHRoZSBwYXJlbnQgdHJlZXNjb3BlIGhhcyBhcHBs
eS1hdXRob3Itc3R5bGVzIHRydWUuCitQQVNTIGdldENvbXB1dGVkU3R5bGUoZ2V0Tm9kZUluU2hh
ZG93VHJlZVN0YWNrKCJob3N0L2hvc3QtZGVwdGgxL2hvc3QtZGVwdGgyL2ZvbyIpKS5jb2xvciBp
cyAicmdiKDAsIDAsIDI1NSkiCitBIGN1c3RvbSBwc2V1ZG8gc3R5bGUsIGRpdjo6eC1mb28sIGlu
IGRvY3VtZW50IHNob3VsZCBub3QgYmUgYXBwbGllZCB3aXRob3V0IGFwcGx5LWF1dGhvci1zdHls
ZXMuCitQQVNTIGdldENvbXB1dGVkU3R5bGUoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCJob3N0
L2hvc3QtZGVwdGgxL2hvc3QtZGVwdGgyL2ZvbyIpKS5jb2xvciBpcyAicmdiKDAsIDAsIDApIgor
QSBjdXN0b20gcHNldWRvIHN0eWxlLCBkaXY6OngtZm9vLCBpbiBkb2N1bWVudCBzaG91bGQgYmUg
YXBwbGllZCB3aGVuIHRoZSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRoZSB0YXJnZXQgZWxlbWVudCBo
YXMgYXBwbHktYXV0aG9yLXN0eWxlcyB0cnVlLgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKGdldE5v
ZGVJblNoYWRvd1RyZWVTdGFjaygiaG9zdC9ob3N0LWRlcHRoMS9ob3N0LWRlcHRoMi9mb28iKSku
Y29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorQSBjdXN0b20gcHNldWRvIHN0eWxlLCBkaXY6Ongt
Zm9vLCBpbiBhIHBhcmVudCB0cmVlc2NvcGUgb2YgYSBjb250ZW50IGluc2VydGlvbiBwb2ludCBz
aG91bGQgbm90IGJlIGFwcGxpZWQuIEEgY3VzdG9tIHBzZXVkbyBzdHlsZSBpbiBhIHBhcmVudCB0
cmVlc2NvcGUgb2YgdGhlIHRhcmdldCBlbGVtZW50LCB3aGljaCBpcyBkaXN0cmlidXRlZCwgc2hv
dWxkIGJlIGFwcGxpZWQuCitQQVNTIGdldENvbXB1dGVkU3R5bGUoZ2V0Tm9kZUluU2hhZG93VHJl
ZVN0YWNrKCJob3N0L2hvc3QtZGVwdGgxL2ZvbyIpKS5jb2xvciBpcyAicmdiKDAsIDAsIDI1NSki
CitBIGN1c3RvbSBwc2V1ZG8gc3R5bGUsIGRpdjo6eC1mb28sIGluIGEgcGFyZW50IHRyZWVzY29w
ZSBvZiBhIHNoYWRvdyBpbnNlcnRpb24gcG9pbnQgc2hvdWxkIG5vdCBiZSBhcHBsaWVkLiBBIGN1
c3RvbSBwc2V1ZG8gc3R5bGUgaW4gYSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRoZSB0YXJnZXQgZWxl
bWVudCwgd2hpY2ggaXMgZGlzdHJpYnV0ZWQsIHNob3VsZCBiZSBhcHBsaWVkLgorUEFTUyBnZXRD
b21wdXRlZFN0eWxlKGdldE5vZGVJblNoYWRvd1RyZWVTdGFjaygiaG9zdC9ob3N0LWRlcHRoMS9m
b28iKSkuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy9wc2V1ZG8tc3R5bGUtaW4tc2hhZG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRvdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4ZWFm
MmUyMTg1OGE3YzljMzNiOTg2YjlkNjY4NDI1MmI2YzE5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLXN0eWxlLWluLXNoYWRvdy5odG1sCkBA
IC0wLDAgKzEsMTY1IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvc2hhZG93LWRvbS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgaWQ9InNhbmRib3giPjwvZGl2PgorPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8
c2NyaXB0PgorZnVuY3Rpb24gdGV4dChjb250ZW50cykKK3sKKyAgICByZXR1cm4gZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoY29udGVudHMpOworfQorCitmdW5jdGlvbiBjcmVhdGVTdHlsZShjb250
ZW50cykKK3sKKyAgICByZXR1cm4gY3JlYXRlRE9NKCdzdHlsZScsIHt9LCB0ZXh0KGNvbnRlbnRz
KSk7Cit9CisKK2Z1bmN0aW9uIHNoYWRvd1Jvb3RXaXRoQXBwbHlBdXRob3JTdHlsZXMoKQorewor
ICAgIHJldHVybiBjcmVhdGVTaGFkb3dSb290V2l0aEF0dHJpYnV0ZXMoeydhcHBseUF1dGhvclN0
eWxlcyc6IHRydWV9LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTsKK30K
KworZnVuY3Rpb24gY2xlYW51cEZvck5leHRUZXN0KCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc2FuZGJveCcpLmlubmVySFRNTCA9ICcnOworfQorCitkZWJ1ZygnQSBjdXN0b20g
cHNldWRvIHN0eWxlIHNob3VsZCBub3QgYmUgYXBwbGllZCB3aGVuIHRoZSBzdHlsZSBlbGVtZW50
IGFuZCBpdHMgdGFyZ2V0IGVsZW1lbnQgYXJlIGluIHRoZSBzYW1lIHRyZWVzY29wZS4nKTsKKwor
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbmRib3gnKS5hcHBlbmRDaGlsZCgKKyAgICBjcmVh
dGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdCd9LAorICAgICAgICBjcmVhdGVTaGFkb3dSb290KAor
ICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2hvc3QtZGVwdGgxJ30sCisgICAg
ICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRl
U3R5bGUoJ2Rpdjo6eC1mb28geyBjb2xvcjogYmx1ZSB9JyksCisgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZURPTSgnc3BhbicsIHsnaWQnOiAnZm9vJywgJ3BzZXVkbyc6ICd4LWZvbyd9KSkpKSkp
OworCitzaG91bGRCZSgnZ2V0Q29tcHV0ZWRTdHlsZShnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2so
Imhvc3QvaG9zdC1kZXB0aDEvZm9vIikpLmNvbG9yJywgJyJyZ2IoMCwgMCwgMCkiJyk7CitjbGVh
bnVwRm9yTmV4dFRlc3QoKTsKKworZGVidWcoJ0EgY3VzdG9tIHBzZXVkbyBzdHlsZSwgZGl2Ojp4
LWZvbyBzaG91bGQgYmUgYXBwbGllZCB3aGVuIHRoZSBzdHlsZSBlbGVtZW50IGlzIGluIHRoZSBw
YXJlbnQgdHJlZXNjb3BlIG9mIHRoZSB0YXJnZXQgZWxlbWVudC4nKTsKKworZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3NhbmRib3gnKS5hcHBlbmRDaGlsZCgKKyAgICBjcmVhdGVET00oJ2Rpdics
IHsnaWQnOiAnaG9zdCd9LAorICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAg
Y3JlYXRlU3R5bGUoJ2Rpdjo6eC1mb28geyBjb2xvcjogYmx1ZSB9JyksCisgICAgICAgICAgICBj
cmVhdGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdC1kZXB0aDEnfSwKKyAgICAgICAgICAgICAgICBj
cmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ3NwYW4nLCB7
J2lkJzogJ2ZvbycsICdwc2V1ZG8nOiAneC1mb28nfSkpKSkpKTsKKworc2hvdWxkQmUoJ2dldENv
bXB1dGVkU3R5bGUoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCJob3N0L2hvc3QtZGVwdGgxL2Zv
byIpKS5jb2xvcicsICcicmdiKDAsIDAsIDI1NSkiJyk7CitjbGVhbnVwRm9yTmV4dFRlc3QoKTsK
KworZGVidWcoJ0EgY3VzdG9tIHBzZXVkbyBzdHlsZSwgZGl2Ojp4LWZvbyBzaG91bGQgbm90IGJl
IGFwcGxpZWQgd2hlbiB0aGUgc3R5bGUgZWxlbWVudCBpcyBpbiB0aGUgZ3JhbmRwYXJlbnQgdHJl
ZXNjb3BlIG9mIHRoZSB0YXJnZXQgZWxlbWVudC4nKTsKKworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3NhbmRib3gnKS5hcHBlbmRDaGlsZCgKKyAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAn
aG9zdCd9LAorICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgY3JlYXRlU3R5
bGUoJ2Rpdjo6eC1mb28geyBjb2xvcjogYmx1ZSB9JyksCisgICAgICAgICAgICBjcmVhdGVET00o
J2RpdicsIHsnaWQnOiAnaG9zdC1kZXB0aDEnfSwKKyAgICAgICAgICAgICAgICBjcmVhdGVTaGFk
b3dSb290KAorICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnaG9z
dC1kZXB0aDInfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdzcGFuJywgeydpZCc6ICdmb28n
LCAncHNldWRvJzoneC1mb28nfSkpKSkpKSkpOworc2hvdWxkQmUoJ2dldENvbXB1dGVkU3R5bGUo
Z2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCJob3N0L2hvc3QtZGVwdGgxL2hvc3QtZGVwdGgyL2Zv
byIpKS5jb2xvcicsICcicmdiKDAsIDAsIDApIicpOworY2xlYW51cEZvck5leHRUZXN0KCk7CisK
K2RlYnVnKCdBIGN1c3RvbSBwc2V1ZG8gc3R5bGUsIGRpdjo6eC1mb28gc2hvdWxkIGJlIGFwcGxp
ZWQgd2hlbiB0aGUgc3R5bGUgZWxlbWVudCBpcyBpbiB0aGUgZ3JhbmRwYXJlbnQgdHJlZXNjb3Bl
IG9mIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgdGhlIHBhcmVudCB0cmVlc2NvcGUgaGFzIGFwcGx5
LWF1dGhvci1zdHlsZXMgdHJ1ZS4nKTsKKworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbmRi
b3gnKS5hcHBlbmRDaGlsZCgKKyAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdCd9LAor
ICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgY3JlYXRlU3R5bGUoJ2Rpdjo6
eC1mb28geyBjb2xvcjogYmx1ZSB9JyksCisgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsn
aWQnOiAnaG9zdC1kZXB0aDEnfSwKKyAgICAgICAgICAgICAgICBzaGFkb3dSb290V2l0aEFwcGx5
QXV0aG9yU3R5bGVzKAorICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQn
OiAnaG9zdC1kZXB0aDInfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jv
b3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdzcGFuJywgeydpZCc6
ICdmb28nLCAncHNldWRvJzoneC1mb28nfSkpKSkpKSkpOworCitzaG91bGRCZSgnZ2V0Q29tcHV0
ZWRTdHlsZShnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2soImhvc3QvaG9zdC1kZXB0aDEvaG9zdC1k
ZXB0aDIvZm9vIikpLmNvbG9yJywgJyJyZ2IoMCwgMCwgMjU1KSInKTsKK2NsZWFudXBGb3JOZXh0
VGVzdCgpOworCitkZWJ1ZygnQSBjdXN0b20gcHNldWRvIHN0eWxlLCBkaXY6OngtZm9vLCBzaG91
bGQgYmUgYXBwbGllZCBpbiBjYXNjYWRpbmcgb3JkZXIgd2hlbiB0aGUgc2FtZSBwc2V1ZG8gc3R5
bGUgaXMgZGVjbGFyZWQgaW4gYm90aCB0aGUgZ3JhbmRwYXJlbnQgdHJlZXNjb3BlIGFuZCB0aGUg
cGFyZW50IHRyZWVzY29wZSBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIHRoZSBwYXJlbnQgdHJl
ZXNjb3BlIGhhcyBhcHBseS1hdXRob3Itc3R5bGVzIHRydWUuJyk7CisKK2RvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdzYW5kYm94JykuYXBwZW5kQ2hpbGQoCisgICAgY3JlYXRlRE9NKCdkaXYnLCB7
J2lkJzogJ2hvc3QnfSwKKyAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgIGNy
ZWF0ZVN0eWxlKCdkaXY6OngtZm9vIHsgY29sb3I6IHJlZCB9JyksCisgICAgICAgICAgICBjcmVh
dGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdC1kZXB0aDEnfSwKKyAgICAgICAgICAgICAgICBzaGFk
b3dSb290V2l0aEFwcGx5QXV0aG9yU3R5bGVzKAorICAgICAgICAgICAgICAgICAgICBjcmVhdGVT
dHlsZSgnZGl2Ojp4LWZvbyB7IGNvbG9yOiBibHVlIH0nKSwKKyAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2hvc3QtZGVwdGgyJ30sCisgICAgICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZURPTSgnc3BhbicsIHsnaWQnOiAnZm9vJywgJ3BzZXVkbyc6J3gtZm9vJ30pKSkpKSkpKTsK
Kworc2hvdWxkQmUoJ2dldENvbXB1dGVkU3R5bGUoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKCJo
b3N0L2hvc3QtZGVwdGgxL2hvc3QtZGVwdGgyL2ZvbyIpKS5jb2xvcicsICcicmdiKDAsIDAsIDI1
NSkiJyk7CitjbGVhbnVwRm9yTmV4dFRlc3QoKTsKKworZGVidWcoJ0EgY3VzdG9tIHBzZXVkbyBz
dHlsZSwgZGl2Ojp4LWZvbywgaW4gZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhcHBsaWVkIHdpdGhv
dXQgYXBwbHktYXV0aG9yLXN0eWxlcy4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW5k
Ym94JykuYXBwZW5kQ2hpbGQoCisgICAgY3JlYXRlU3R5bGUoJ2Rpdjo6eC1mb28geyBjb2xvcjog
Ymx1ZSB9JykpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbmRib3gnKS5hcHBlbmRDaGls
ZCgKKyAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdCd9LAorICAgICAgICBjcmVhdGVT
aGFkb3dSb290KAorICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2hvc3QtZGVw
dGgxJ30sCisgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2hvc3QtZGVwdGgyJ30sCisgICAgICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNyZWF0ZURPTSgnc3BhbicsIHsnaWQnOiAnZm9vJywgJ3BzZXVkbyc6J3gtZm9vJ30pKSkp
KSkpKTsKK3Nob3VsZEJlKCdnZXRDb21wdXRlZFN0eWxlKGdldE5vZGVJblNoYWRvd1RyZWVTdGFj
aygiaG9zdC9ob3N0LWRlcHRoMS9ob3N0LWRlcHRoMi9mb28iKSkuY29sb3InLCAnInJnYigwLCAw
LCAwKSInKTsKK2NsZWFudXBGb3JOZXh0VGVzdCgpOworCitkZWJ1ZygnQSBjdXN0b20gcHNldWRv
IHN0eWxlLCBkaXY6OngtZm9vLCBpbiBkb2N1bWVudCBzaG91bGQgYmUgYXBwbGllZCB3aGVuIHRo
ZSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgYXBwbHktYXV0aG9y
LXN0eWxlcyB0cnVlLicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbmRib3gnKS5hcHBl
bmRDaGlsZCgKKyAgICBjcmVhdGVTdHlsZSgnZGl2Ojp4LWZvbyB7IGNvbG9yOiBibHVlIH0nKSk7
Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FuZGJveCcpLmFwcGVuZENoaWxkKAorICAgIGNy
ZWF0ZURPTSgnZGl2JywgeydpZCc6ICdob3N0J30sCisgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3Qo
CisgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdC1kZXB0aDEnfSwKKyAg
ICAgICAgICAgICAgICBzaGFkb3dSb290V2l0aEFwcGx5QXV0aG9yU3R5bGVzKAorICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdC1kZXB0aDInfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlRE9NKCdzcGFuJywgeydpZCc6ICdmb28nLCAncHNldWRvJzoneC1mb28n
fSkpKSkpKSkpOworc2hvdWxkQmUoJ2dldENvbXB1dGVkU3R5bGUoZ2V0Tm9kZUluU2hhZG93VHJl
ZVN0YWNrKCJob3N0L2hvc3QtZGVwdGgxL2hvc3QtZGVwdGgyL2ZvbyIpKS5jb2xvcicsICcicmdi
KDAsIDAsIDI1NSkiJyk7CitjbGVhbnVwRm9yTmV4dFRlc3QoKTsKKworZGVidWcoJ0EgY3VzdG9t
IHBzZXVkbyBzdHlsZSwgZGl2Ojp4LWZvbywgaW4gYSBwYXJlbnQgdHJlZXNjb3BlIG9mIGEgY29u
dGVudCBpbnNlcnRpb24gcG9pbnQgc2hvdWxkIG5vdCBiZSBhcHBsaWVkLiBBIGN1c3RvbSBwc2V1
ZG8gc3R5bGUgaW4gYSBwYXJlbnQgdHJlZXNjb3BlIG9mIHRoZSB0YXJnZXQgZWxlbWVudCwgd2hp
Y2ggaXMgZGlzdHJpYnV0ZWQsIHNob3VsZCBiZSBhcHBsaWVkLicpOworZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3NhbmRib3gnKS5hcHBlbmRDaGlsZCgKKyAgICBjcmVhdGVET00oJ2RpdicsIHsn
aWQnOiAnaG9zdCd9LAorICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgY3Jl
YXRlU3R5bGUoJ2Rpdjo6eC1mb28geyBjb2xvcjogYmx1ZSB9JyksCisgICAgICAgICAgICBjcmVh
dGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdC1kZXB0aDEnfSwKKyAgICAgICAgICAgICAgICBjcmVh
dGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdHlsZSgnZGl2Ojp4LWZv
byB7IGNvbG9yOiByZWQgfScpLAorICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Rpdics
IHsnaWQnOiAnaG9zdC1kZXB0aDInfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNo
YWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50
JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdzcGFuJywgeydpZCc6ICdm
b28nLCAncHNldWRvJzoneC1mb28nfSkpKSkpKSk7CitzaG91bGRCZSgnZ2V0Q29tcHV0ZWRTdHls
ZShnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2soImhvc3QvaG9zdC1kZXB0aDEvZm9vIikpLmNvbG9y
JywgJyJyZ2IoMCwgMCwgMjU1KSInKTsKK2NsZWFudXBGb3JOZXh0VGVzdCgpOworCitkZWJ1Zygn
QSBjdXN0b20gcHNldWRvIHN0eWxlLCBkaXY6OngtZm9vLCBpbiBhIHBhcmVudCB0cmVlc2NvcGUg
b2YgYSBzaGFkb3cgaW5zZXJ0aW9uIHBvaW50IHNob3VsZCBub3QgYmUgYXBwbGllZC4gQSBjdXN0
b20gcHNldWRvIHN0eWxlIGluIGEgcGFyZW50IHRyZWVzY29wZSBvZiB0aGUgdGFyZ2V0IGVsZW1l
bnQsIHdoaWNoIGlzIGRpc3RyaWJ1dGVkLCBzaG91bGQgYmUgYXBwbGllZC4nKTsKK2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdzYW5kYm94JykuYXBwZW5kQ2hpbGQoCisgICAgY3JlYXRlRE9NKCdk
aXYnLCB7J2lkJzogJ2hvc3QnfSwKKyAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAg
ICAgIGNyZWF0ZVN0eWxlKCdkaXY6OngtZm9vIHsgY29sb3I6IGJsdWUgfScpLAorICAgICAgICAg
ICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2hvc3QtZGVwdGgxJ30sCisgICAgICAgICAgICAg
ICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlU3R5bGUoJ2Rp
djo6eC1mb28geyBjb2xvcjogcmVkIH0nKSwKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9N
KCdkaXYnLCB7J2lkJzogJ2hvc3QtZGVwdGgyJ30sCisgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgn
Y29udGVudCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdzaGFkb3cnKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ3NwYW4nLCB7J2lkJzogJ2ZvbycsICdwc2V1ZG8n
Oid4LWZvbyd9KSkpKSkpKTsKK3Nob3VsZEJlKCdnZXRDb21wdXRlZFN0eWxlKGdldE5vZGVJblNo
YWRvd1RyZWVTdGFjaygiaG9zdC9ob3N0LWRlcHRoMS9mb28iKSkuY29sb3InLCAnInJnYigwLCAw
LCAyNTUpIicpOworY2xlYW51cEZvck5leHRUZXN0KCk7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRv
dy1uZXN0ZWQtcHNldWRvLWlkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3No
YWRvdy9zaGFkb3ctbmVzdGVkLXBzZXVkby1pZC1leHBlY3RlZC50eHQKaW5kZXggOTA1OGQ2YjUw
NDgzNTFkM2QyY2I3NTI5MTg4NjFmYmE0Y2MyZjRkYi4uODMwZDhjZGY2ZWEyNzUzNzIxYTA3ZDlj
NWM4YzA4ZDY4NDVlMjU1OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3NoYWRvdy1uZXN0ZWQtcHNldWRvLWlkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvc2hhZG93LW5lc3RlZC1wc2V1ZG8taWQtZXhwZWN0ZWQudHh0CkBAIC00
LDcgKzQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogCiAKIFBBU1Mgd2luZG93LmdldENv
bXB1dGVkU3R5bGUodHVwbGUuc2hhZG93Q2hpbGQpLmNvbG9yIGlzICdyZ2IoMjU1LCAwLCAwKScK
LVBBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUoc2hhZG93VHVwbGUuc2hhZG93Q2hpbGQpLmNv
bG9yIGlzICdyZ2IoMCwgMCwgMjU1KScKK1BBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUoc2hh
ZG93VHVwbGUuc2hhZG93Q2hpbGQpLmNvbG9yIGlzICdyZ2IoMjU1LCAwLCAwKScKIFBBU1Mgd2lu
ZG93LmdldENvbXB1dGVkU3R5bGUoc2hhZG93VHVwbGUuc2hhZG93Q2hpbGQpLmJhY2tncm91bmRD
b2xvciBpcyAncmdiKDAsIDEyOCwgMCknCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctbmVzdGVk
LXBzZXVkby1pZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1uZXN0
ZWQtcHNldWRvLWlkLmh0bWwKaW5kZXggNGE0YmFhODc3OTc5MTIzN2Y3OTZhMmFhZTMxMTljMTI4
YmVhYTYyYi4uMDJlYTgwMjYxYjI1YzZmNWZmNTkxMTJjY2RlM2RhMTY3YWIyYWE2MSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1uZXN0ZWQtcHNldWRvLWlk
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1uZXN0ZWQtcHNl
dWRvLWlkLmh0bWwKQEAgLTQyLDcgKzQyLDkgQEAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaG9zdCIpOwogdmFyIHR1cGxlID0gYnVpbGRTaGFkb3dXaXRoT25lQ2hpbGQoaG9z
dCwgImEiLCAieC1zaGFkb3ctY2hpbGQiKTsKIHNob3VsZEJlKCJ3aW5kb3cuZ2V0Q29tcHV0ZWRT
dHlsZSh0dXBsZS5zaGFkb3dDaGlsZCkuY29sb3IiLCAiJ3JnYigyNTUsIDAsIDApJyIpOwogdmFy
IHNoYWRvd1R1cGxlID0gYnVpbGRTaGFkb3dXaXRoT25lQ2hpbGQodHVwbGUuc2hhZG93Q2hpbGQs
ICJiIiwgIngtbmVzdGVkLXNoYWRvdy1jaGlsZCIpOwotc2hvdWxkQmUoIndpbmRvdy5nZXRDb21w
dXRlZFN0eWxlKHNoYWRvd1R1cGxlLnNoYWRvd0NoaWxkKS5jb2xvciIsICIncmdiKDAsIDAsIDI1
NSknIik7CisvLyBTaW5jZSA8YT4gaW4gYSBzaGFkb3cgZG9tIHRyZWUgYW5kIGE6OngtbmVzdGVk
LXNoYWRvdy1jaGlsZCdzIHJ1bGUgaXMKKy8vIGRlY2xhcmVkIGluIGEgZG9jdW1lbnQgdHJlZSwg
d2UgY2Fubm90IGFwcGx5IHRoZSBydWxlIHRvIHRoZSA8YT4uCitzaG91bGRCZSgid2luZG93Lmdl
dENvbXB1dGVkU3R5bGUoc2hhZG93VHVwbGUuc2hhZG93Q2hpbGQpLmNvbG9yIiwgIidyZ2IoMjU1
LCAwLCAwKSciKTsKIHNob3VsZEJlKCJ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzaGFkb3dUdXBs
ZS5zaGFkb3dDaGlsZCkuYmFja2dyb3VuZENvbG9yIiwgIidyZ2IoMCwgMTI4LCAwKSciKTsKIAog
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>