<?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>79790</bug_id>
          
          <creation_ts>2012-02-28 07:28:24 -0800</creation_ts>
          <short_desc>Introduce SMIL overrideStyle, to make SVG stop mutating CSS styles directly</short_desc>
          <delta_ts>2012-03-04 11:08:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>79784</dependson>
          <blocked>41761</blocked>
    
    <blocked>12437</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>abarth</cc>
    
    <cc>adamk</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>krit</cc>
    
    <cc>levin+threading</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ojan</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>566652</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-28 07:28:24 -0800</bug_when>
    <thetext>Introduce SMIL overrideStyle, to make SVG SMIL animations stop mutating target element CSS styles directly.
Similar to the inline style declaration, that Element holds, I&apos;m adding a SMIL override style declaration that SVGElementRareData holds, in case a SMIL animation is running on the associated SVGElement, that modifies CSS attributes.

This is blocking the introduction of animVal support in SMIL, we need to fix CSS first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566661</commentid>
    <comment_count>1</comment_count>
      <attachid>129252</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-28 07:36:44 -0800</bug_when>
    <thetext>Created attachment 129252
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566687</commentid>
    <comment_count>2</comment_count>
      <attachid>129255</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-28 08:03:09 -0800</bug_when>
    <thetext>Created attachment 129255
Patch v2

Forgot to remove one line, after the SVGUseElement rewrite, the setNeedsStyleRecalc is no longer needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566693</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-28 08:12:21 -0800</bug_when>
    <thetext>I hope Andreas/Antti can have a look, if the CSS stuff is fine?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566798</commentid>
    <comment_count>4</comment_count>
      <attachid>129255</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-28 09:42:09 -0800</bug_when>
    <thetext>Comment on attachment 129255
Patch v2

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

CSS parts look fine to me, though I&apos;d avoid introducing new names containing &quot;Decl&quot; if possible.

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:339
&gt; +    if (value.isNull()) {
&gt; +        targetElement-&gt;overrideStyle()-&gt;removeProperty(attributeName.localName(), ASSERT_NO_EXCEPTION);
&gt;          return;
&gt; +    }
&gt; +    targetElement-&gt;overrideStyle()-&gt;setProperty(attributeName.localName(), value, emptyString(), ASSERT_NO_EXCEPTION);

Can&apos;t you operate on the StylePropertySet here instead of forcing the creation of CSSOM wrappers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566799</commentid>
    <comment_count>5</comment_count>
      <attachid>129255</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-28 09:42:11 -0800</bug_when>
    <thetext>Comment on attachment 129255
Patch v2

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

CSS parts look fine to me, though I&apos;d avoid introducing new names containing &quot;Decl&quot; if possible.

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:339
&gt; +    if (value.isNull()) {
&gt; +        targetElement-&gt;overrideStyle()-&gt;removeProperty(attributeName.localName(), ASSERT_NO_EXCEPTION);
&gt;          return;
&gt; +    }
&gt; +    targetElement-&gt;overrideStyle()-&gt;setProperty(attributeName.localName(), value, emptyString(), ASSERT_NO_EXCEPTION);

Can&apos;t you operate on the StylePropertySet here instead of forcing the creation of CSSOM wrappers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566907</commentid>
    <comment_count>6</comment_count>
      <attachid>129255</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-28 11:26:22 -0800</bug_when>
    <thetext>Comment on attachment 129255
Patch v2

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

&gt; Source/WebCore/svg/SVGElement.h:112
&gt; +    CSSStyleDeclaration* overrideStyle() { return ensureOverrideStyleDecl()-&gt;ensureInlineCSSStyleDeclaration(this); }

This is wrong. OverrideStyle is not exposed in the DOM. There are no valid reasons to instantiate an external API object (CSSStyleDeclaration) for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567483</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-29 01:04:11 -0800</bug_when>
    <thetext>(In reply to comment #5)

Thanks Andreas/Antti for your quick comments!

&gt; CSS parts look fine to me, though I&apos;d avoid introducing new names containing &quot;Decl&quot; if possible.
I named it &quot;overrideStylePropertySet&quot;.

&gt; Can&apos;t you operate on the StylePropertySet here instead of forcing the creation of CSSOM wrappers?
..
&gt; This is wrong. OverrideStyle is not exposed in the DOM. There are no valid reasons to instantiate an external API object (CSSStyleDeclaration) for it.

Wonderful, I didn&apos;t realize how far you already are with the refactoring - no more CSSOM wrappers needed to set/remove properties - that&apos;s excellent! It also simplifies my destruction logic, as I can guarantee that no CSS OM wrappers are built for my override style, I don&apos;t need to call clearParentElement at all, as there are no wrappers that could need a clear.

Uploading a new patch soon...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567495</commentid>
    <comment_count>8</comment_count>
      <attachid>129412</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-29 01:22:38 -0800</bug_when>
    <thetext>Created attachment 129412
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567515</commentid>
    <comment_count>9</comment_count>
      <attachid>129412</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-29 01:49:31 -0800</bug_when>
    <thetext>Comment on attachment 129412
Patch v3

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

r=me, with some tweaks.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:765
&gt; +inline bool CSSStyleSelector::addMatchedPropertiesIfPossible(MatchResult&amp; result, StylePropertySet* properties)
&gt; +{

Something like addElementStyleProperties would be a better name. 

Instead of returning a bool, this should take a bool argument that tells if the property set is cacheable (setting result.isCacheable = false if needed).

&gt; Source/WebCore/css/CSSStyleSelector.h:295
&gt; +    inline bool addMatchedPropertiesIfPossible(MatchResult&amp;, StylePropertySet*);

inline keyword here does nothing and should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567525</commentid>
    <comment_count>10</comment_count>
      <attachid>129412</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-29 02:08:20 -0800</bug_when>
    <thetext>Comment on attachment 129412
Patch v3

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

New failing tests:
fast/parser/nested-fragment-parser-crash.html
editing/deleting/pruning-after-merge-1.html
inspector/elements/elements-panel-styles.html
fast/css/text-align-webkit-match-parent.html
fast/css/inline-properties-important.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567563</commentid>
    <comment_count>11</comment_count>
      <attachid>129434</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-29 03:30:24 -0800</bug_when>
    <thetext>Created attachment 129434
Patch v4

Fixed Anttis comments &amp; cr-ews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567602</commentid>
    <comment_count>12</comment_count>
      <attachid>129434</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-29 07:20:46 -0800</bug_when>
    <thetext>Comment on attachment 129434
Patch v4

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

&gt; Source/WebCore/svg/SVGElement.h:111
&gt; +    StylePropertySet* overrideStylePropertySet() const;
&gt; +    StylePropertySet* ensureOverrideStylePropertySet();

I would prefer name &quot;overrideStyleProperties&quot; here. That&apos;s the pattern we are following elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567632</commentid>
    <comment_count>13</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-29 08:07:56 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I would prefer name &quot;overrideStyleProperties&quot; here. That&apos;s the pattern we are following elsewhere.
Renamed all instances of this - will include it when landing the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567653</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-02-29 08:52:09 -0800</bug_when>
    <thetext>Niko, can we discuss this before you land it please? There are some points that I want to discuss before you land the patch.

First override style is not the best approach! Even if SMIL talks about override style, that is definitely not what we want. Also this is on the agenda for the SVG WG meeting tomorrow. We would like to come up with a new definition that possibly goes into CSS3 Animation.

I hope I don&apos;t have to r- the patch in the meantime to prevent you from landing as is. I&apos;d like to take a look at it as well after a meeting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567670</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-29 09:10:13 -0800</bug_when>
    <thetext>If you are not landing this as a whole, please separate the CSSStyleSelector part and land that. That is a nice refactoring!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567675</commentid>
    <comment_count>16</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-29 09:15:15 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Niko, can we discuss this before you land it please? There are some points that I want to discuss before you land the patch.
&gt; 
&gt; First override style is not the best approach! Even if SMIL talks about override style, that is definitely not what we want. Also this is on the agenda for the SVG WG meeting tomorrow. We would like to come up with a new definition that possibly goes into CSS3 Animation.
You&apos;re mixing up things. When SMIL talks about &quot;override style&quot; it means the CSS OM getOverrideStyle() method, that neither we nor Firefox implement.
See firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=45424.
Daniel Holbert wrote here in 2008 &quot;FWIW, this feature -- getOverrideStyle() -- is probably needed to support SVG/SMIL Animation of CSS properties.&quot;.

New comment from 2012: &quot;(Just to follow up on this -- we didn&apos;t end up needing this for SMIL -- we ended up going with a custom SMIL-specific override stylesheet that&apos;s not exposed via the DOM at all.  For reference, see bug 474049 comment 10, first bullet-point.)&quot;

That&apos;s exactly the same solution that I&apos;ve chosen - this is not related to SMILs getOverrideStyle(). We just need a separated style declaration where we can apply CSS properties to, to avoid mutating the target style directly - that&apos;s all.

We can of course now decide when to apply these rules. SMIL says after the inline style declarations have been applied - so that&apos;s what I&apos;m doing, consistent with both Opera &amp; FF.
 
&gt; I hope I don&apos;t have to r- the patch in the meantime to prevent you from landing as is. I&apos;d like to take a look at it as well after a meeting.
Heh, no need to r-, the patch is still valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567708</commentid>
    <comment_count>17</comment_count>
      <attachid>129434</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-02-29 10:26:47 -0800</bug_when>
    <thetext>Comment on attachment 129434
Patch v4

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

Sorry, you changed the behavior without testing it. r-

A great patch in general. But I am still skeptical of shouldApplyAnimation. This needs more testing and verifications. I would also like to discuss the role of attributeType on SVG WG first.

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:409
&gt; +        // For attributeType=&quot;auto&quot;, try CSS first. If that fails, try XML.

Difficult, this might not be future confident. We will move more attributes to presentation attributes like &apos;transform&apos;, for theses properties, it might be better to use XML as default (in theory). So that we can use the XML parser for parsing. Alternatively we could extend SVG only rules to the CSS parser. Not sure if the last suggestion is the best approach.

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:414
&gt; +        // If attributeName is unknown and ttributeType is not &apos;auto&apos;, don&apos;t apply the animation.

s/ttributeType/attributeType/

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:415
&gt; +        if (attributeType == AttributeTypeCSS)

&lt;animate attributeName=&quot;width&quot; attributeType=&quot;CSS&quot;&gt; won&apos;t animate? Did you check this on other browsers? This is a change of the current behavior! Did you add tests for that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567719</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-02-29 10:39:42 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #14)
&gt; &gt; Niko, can we discuss this before you land it please? There are some points that I want to discuss before you land the patch.
&gt; &gt; 
&gt; &gt; First override style is not the best approach! Even if SMIL talks about override style, that is definitely not what we want. Also this is on the agenda for the SVG WG meeting tomorrow. We would like to come up with a new definition that possibly goes into CSS3 Animation.
&gt; You&apos;re mixing up things. When SMIL talks about &quot;override style&quot; it means the CSS OM getOverrideStyle() method, that neither we nor Firefox implement.
We are on the same side! I know what FF is doing and we definitely don&apos;t want to use override style in the sense of DOM2 and SMIL animation. But that is exactly the point. We should come up with another name. SMIL animation style is not that bad actually. CSS animation uses CSS Animation as well. So why not align with it?


&gt; See firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=45424.
&gt; Daniel Holbert wrote here in 2008 &quot;FWIW, this feature -- getOverrideStyle() -- is probably needed to support SVG/SMIL Animation of CSS properties.&quot;.
&gt; 
&gt; New comment from 2012: &quot;(Just to follow up on this -- we didn&apos;t end up needing this for SMIL -- we ended up going with a custom SMIL-specific override stylesheet that&apos;s not exposed via the DOM at all.  For reference, see bug 474049 comment 10, first bullet-point.)&quot;
Yes, it is not specified at the moment. I would like to have you on the call tomorrow so that we get a resolution for that. In my eyes it should go to CSS3 Animations, at the end it is just necessary that we know what we want to do.

&gt; 
&gt; That&apos;s exactly the same solution that I&apos;ve chosen - this is not related to SMILs getOverrideStyle(). We just need a separated style declaration where we can apply CSS properties to, to avoid mutating the target style directly - that&apos;s all.
That sounds like CSS animation overrides SMIL animations. That is what FF is doing. Because CSS animation/transition modify RenderStyle, it sounds hard to do it the other way around (SVG animation overrides CSS animations). That would be great to know.

&gt; 
&gt; We can of course now decide when to apply these rules. SMIL says after the inline style declarations have been applied - so that&apos;s what I&apos;m doing, consistent with both Opera &amp; FF.
You can just partly compare Opera here, since they don&apos;t have CSS animations and transitions for SVG CSS properties implemented. This should definitely get viewed in a bigger scope with the whole animation sandwich model. 

&gt; 
&gt; &gt; I hope I don&apos;t have to r- the patch in the meantime to prevent you from landing as is. I&apos;d like to take a look at it as well after a meeting.
&gt; Heh, no need to r-, the patch is still valid.
It is not. Sorry. You changed the behavior without testing it and I am not sure if the new behavior is correct, or should be correct. This needs more verification (also verification what other vendors are doing). Just some examples:

XML attributes get not animated anymore when you use attributeType=&quot;CSS&quot;
Animate the XML attribute on CSS properties when you use attributeType=&quot;XML&quot; which is absolutely inconsistent with FF and Opera. (For FF they animate the XML attribute as well in this case, but getAttribute() will still give you the base value, not the animatedVal what it will for you know).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567740</commentid>
    <comment_count>19</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-29 10:57:42 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; Niko, can we discuss this before you land it please? There are some points that I want to discuss before you land the patch.
&gt; &gt; &gt; 
&gt; &gt; &gt; First override style is not the best approach! Even if SMIL talks about override style, that is definitely not what we want. Also this is on the agenda for the SVG WG meeting tomorrow. We would like to come up with a new definition that possibly goes into CSS3 Animation.
&gt; &gt; You&apos;re mixing up things. When SMIL talks about &quot;override style&quot; it means the CSS OM getOverrideStyle() method, that neither we nor Firefox implement.\

&gt; We are on the same side! I know what FF is doing and we definitely don&apos;t want to use override style in the sense of DOM2 and SMIL animation. But that is exactly the point. We should come up with another name. SMIL animation style is not that bad actually. CSS animation uses CSS Animation as well. So why not align with it?
Okay with &quot;smilAnimationStyle&quot; ?

&gt; Yes, it is not specified at the moment. I would like to have you on the call tomorrow so that we get a resolution for that. In my eyes it should go to CSS3 Animations, at the end it is just necessary that we know what we want to do.
go to css3 anims??

&gt; 
&gt; &gt; 
&gt; &gt; That&apos;s exactly the same solution that I&apos;ve chosen - this is not related to SMILs getOverrideStyle(). We just need a separated style declaration where we can apply CSS properties to, to avoid mutating the target style directly - that&apos;s all.
&gt; That sounds like CSS animation overrides SMIL animations. That is what FF is doing. Because CSS animation/transition modify RenderStyle, it sounds hard to do it the other way around (SVG animation overrides CSS animations). That would be great to know.
I didn&apos;t change what gets preference: it stayed the same. I&apos;m just splitting of the &quot;SMIL animation style&quot; from the regular style, and keep the order as-it-is-now.

&gt; &gt; 
&gt; &gt; We can of course now decide when to apply these rules. SMIL says after the inline style declarations have been applied - so that&apos;s what I&apos;m doing, consistent with both Opera &amp; FF.
&gt; You can just partly compare Opera here, since they don&apos;t have CSS animations and transitions for SVG CSS properties implemented. This should definitely get viewed in a bigger scope with the whole animation sandwich model. 
Right, for now I&apos;m just correcting old mistakes: mutating the DOM directly. This can be avoided with a separated set of style properties, which is what I&apos;m doing here. When it should be applied, before or after CSS animations/transitions etc. is out of scope for this patch.

&gt; &gt; &gt; I hope I don&apos;t have to r- the patch in the meantime to prevent you from landing as is. I&apos;d like to take a look at it as well after a meeting.
&gt; &gt; Heh, no need to r-, the patch is still valid.
&gt; It is not. Sorry. You changed the behavior without testing it and I am not sure if the new behavior is correct, or should be correct. This needs more verification (also verification what other vendors are doing). Just some examples:
&gt; 
&gt; XML attributes get not animated anymore when you use attributeType=&quot;CSS&quot;
Erm, this is per spec? http://www.w3.org/TR/SVG/animate.html#TargetAttributes

&gt; Animate the XML attribute on CSS properties when you use attributeType=&quot;XML&quot; which is absolutely inconsistent with FF and Opera. (For FF they animate the XML attribute as well in this case, but getAttribute() will still give you the base value, not the animatedVal what it will for you know).

This is not correct, pleaser reread 19.2.5:
attributeType = &quot;CSS | XML | auto&quot;
Specifies the namespace in which the target attribute and its associated values are defined. The attribute value is one of the following (values are case-sensitive):

CSS
This specifies that the value of ‘attributeName’ is the name of a CSS property defined as animatable in this specification.

XML
This specifies that the value of ‘attributeName’ is the name of an XML attribute defined in the default XML namespace for the target element. If the value for ‘attributeName’ has an XMLNS prefix, the implementation must use the associated namespace as defined in the scope of the target element. The attribute must be defined as animatable in this specification.

auto
The implementation should match the ‘attributeName’ to an attribute for the target element. The implementation must first search through the list of CSS properties for a matching property name, and if none is found, search the default XML namespace for the element.

The new shouldApplyAnimation is a transcription from this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567743</commentid>
    <comment_count>20</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-02-29 10:58:38 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; It is not. Sorry. You changed the behavior without testing it and I am not sure if the new behavior is correct, or should be correct. This needs more verification (also verification what other vendors are doing). Just some examples:
I still don&apos;t see where I changed behaviour? shouldApplyAnimation was refactoring existing behavior.
Can you give an example?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568462</commentid>
    <comment_count>21</comment_count>
      <attachid>129434</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-03-01 01:21:55 -0800</bug_when>
    <thetext>Comment on attachment 129434
Patch v4

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

&gt; Source/WebCore/svg/SVGAnimateElement.h:68
&gt; +    virtual void endedActiveInterval();

This name of this passive form is strange to me. activeIntervalEnded?

&gt; Source/WebCore/svg/SVGElementRareData.h:89
&gt; +        m_overrideStylePropertySet = 0;

I think it has a .clear() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568490</commentid>
    <comment_count>22</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-01 02:23:43 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 129434 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129434&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimateElement.h:68
&gt; &gt; +    virtual void endedActiveInterval();
&gt; 
&gt; This name of this passive form is strange to me. activeIntervalEnded?
I&apos;d need to rename startedActiveInterval as well - I&apos;d prefer to do this in another patch.

 &gt; &gt; Source/WebCore/svg/SVGElementRareData.h:89 
&gt; I think it has a .clear() method.
Fixed.

New patch with better ChangeLog coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568492</commentid>
    <comment_count>23</comment_count>
      <attachid>129670</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-01 02:28:16 -0800</bug_when>
    <thetext>Created attachment 129670
Patch v5

Add new testcase covering attributeTypes, to demonstrate that I didn&apos;t change behaviour - works just like in trunk. Should please Dirks concerns, also adresses Zoltans suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568505</commentid>
    <comment_count>24</comment_count>
      <attachid>129670</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-03-01 02:51:29 -0800</bug_when>
    <thetext>Comment on attachment 129670
Patch v5

thanks for the fixes. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568609</commentid>
    <comment_count>25</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-01 06:01:20 -0800</bug_when>
    <thetext>Committed r109342: &lt;http://trac.webkit.org/changeset/109342&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568698</commentid>
    <comment_count>26</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-01 08:58:24 -0800</bug_when>
    <thetext>The last patch did not consider any of my doubts! I have strongly to protest against the r+ from Zoltan.

Zoltan you can not r+ a patch without reading the concerns of previews reviewers that denied a patch!

1. The patch changes behavior without layout tests
2. The patch changes the behavior in a significant way that we might not want to have in WebKit! It is potentially doing the opposite of what other viewers are doing!

This either needs to get fixed as soon as possible or it needs to get rolled out! I vote for the later one, because the patch violates the rules of WebKit.

Also a reviewer that adds concerns should have time to comment on a bug. You should give him at least a day. In the past we had the unwritten rule that if a reviewer denies a patch than the reviewer must have the chance to review any new patch. This is definitely not the case here!

I reopen this bug, since it violates WebKit rules in any way. And Niko should know of these rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568713</commentid>
    <comment_count>27</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-01 09:26:39 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; &gt; Niko, can we discuss this before you land it please? There are some points that I want to discuss before you land the patch.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; First override style is not the best approach! Even if SMIL talks about override style, that is definitely not what we want. Also this is on the agenda for the SVG WG meeting tomorrow. We would like to come up with a new definition that possibly goes into CSS3 Animation.
&gt; &gt; &gt; You&apos;re mixing up things. When SMIL talks about &quot;override style&quot; it means the CSS OM getOverrideStyle() method, that neither we nor Firefox implement.\
&gt; 
&gt; &gt; We are on the same side! I know what FF is doing and we definitely don&apos;t want to use override style in the sense of DOM2 and SMIL animation. But that is exactly the point. We should come up with another name. SMIL animation style is not that bad actually. CSS animation uses CSS Animation as well. So why not align with it?
&gt; Okay with &quot;smilAnimationStyle&quot; ?
Definitely!

&gt; 
&gt; &gt; Yes, it is not specified at the moment. I would like to have you on the call tomorrow so that we get a resolution for that. In my eyes it should go to CSS3 Animations, at the end it is just necessary that we know what we want to do.
&gt; go to css3 anims??
&gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; That&apos;s exactly the same solution that I&apos;ve chosen - this is not related to SMILs getOverrideStyle(). We just need a separated style declaration where we can apply CSS properties to, to avoid mutating the target style directly - that&apos;s all.
&gt; &gt; That sounds like CSS animation overrides SMIL animations. That is what FF is doing. Because CSS animation/transition modify RenderStyle, it sounds hard to do it the other way around (SVG animation overrides CSS animations). That would be great to know.
&gt; I didn&apos;t change what gets preference: it stayed the same. I&apos;m just splitting of the &quot;SMIL animation style&quot; from the regular style, and keep the order as-it-is-now.
&gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; We can of course now decide when to apply these rules. SMIL says after the inline style declarations have been applied - so that&apos;s what I&apos;m doing, consistent with both Opera &amp; FF.
&gt; &gt; You can just partly compare Opera here, since they don&apos;t have CSS animations and transitions for SVG CSS properties implemented. This should definitely get viewed in a bigger scope with the whole animation sandwich model. 
&gt; Right, for now I&apos;m just correcting old mistakes: mutating the DOM directly. This can be avoided with a separated set of style properties, which is what I&apos;m doing here. When it should be applied, before or after CSS animations/transitions etc. is out of scope for this patch.
At first you wanted to correct the CSSOM mutation if I understand it correctly. And even if we definitely should not animate the inline style and even if it is the correct approach to add a new style for SMIL animations, it definitely changes behavior. Just changing the tests to use computed style instead of asking inline style is not enough!

We need tests that the inline style stays the same. We need tests what happens if you set the inline style during an animation, for the both cases that we use additive=&quot;sum&quot; for animations and that we don&apos;t use it (even if it might not matter since the base value is the intrinsic style). This needs comparison to other browsers. And if you add a new style sheet you have of course to know how it affects CSS animations or transitions! So we need a test case for this as well. See mail from Daniel Holbert about potential risks of &quot;circle of death&quot;[1]. This is definitely in the scope of this patch!

&gt; 
&gt; &gt; &gt; &gt; I hope I don&apos;t have to r- the patch in the meantime to prevent you from landing as is. I&apos;d like to take a look at it as well after a meeting.
&gt; &gt; &gt; Heh, no need to r-, the patch is still valid.
&gt; &gt; It is not. Sorry. You changed the behavior without testing it and I am not sure if the new behavior is correct, or should be correct. This needs more verification (also verification what other vendors are doing). Just some examples:
&gt; &gt; 
&gt; &gt; XML attributes get not animated anymore when you use attributeType=&quot;CSS&quot;
&gt; Erm, this is per spec? http://www.w3.org/TR/SVG/animate.html#TargetAttributes
At first this patch is changing behavior in multiple ways. And you did not add tests for that even if I asked you to do that in my review. That you land the patch without giving the reviewer the change to re-review it who denies the patch is not fair play in WebKit. Even if I don&apos;t know if we have a strict rule that this should get reviewed by this reviewer again, we have at least an unwritten rule to give him the chance to review again. You know that!

Second this part of the spec gets interpreted in different ways, why we have different implementations. Even with your patch you do it not according to the specification, because for attributeType=&quot;XML&quot; you overwrite the presentation attribute value. The user can not get the base value during the animation. No browser is doing that as far as I know. Even Firefox does it different, which has the best implementation according to this rule as far as I can say.

&gt; 
&gt; &gt; Animate the XML attribute on CSS properties when you use attributeType=&quot;XML&quot; which is absolutely inconsistent with FF and Opera. (For FF they animate the XML attribute as well in this case, but getAttribute() will still give you the base value, not the animatedVal what it will for you know).
&gt; 
&gt; This is not correct, pleaser reread 19.2.5:
&gt; attributeType = &quot;CSS | XML | auto&quot;
&gt; Specifies the namespace in which the target attribute and its associated values are defined. The attribute value is one of the following (values are case-sensitive):
&gt; 
&gt; CSS
&gt; This specifies that the value of ‘attributeName’ is the name of a CSS property defined as animatable in this specification.
&gt; 
&gt; XML
&gt; This specifies that the value of ‘attributeName’ is the name of an XML attribute defined in the default XML namespace for the target element. If the value for ‘attributeName’ has an XMLNS prefix, the implementation must use the associated namespace as defined in the scope of the target element. The attribute must be defined as animatable in this specification.
&gt; 
&gt; auto
&gt; The implementation should match the ‘attributeName’ to an attribute for the target element. The implementation must first search through the list of CSS properties for a matching property name, and if none is found, search the default XML namespace for the element.
&gt; 
&gt; The new shouldApplyAnimation is a transcription from this.

Now to the second part of your patch that should get separated from you original patch, since it has nothing to do with the mutation of CSS style (even if you interpret it that way). This is second time that you change the behavior without adding results. And it might also break existing content (even if it would be very rare).

Int the past we did the following:

    bool attributeIsCSSProperty = isTargetAttributeCSSProperty(targetElement, attributeName);
    // Stop animation, if attributeType is set to CSS by the user, but the attribute itself is not a CSS property.
    if (!attributeIsCSSProperty &amp;&amp; attributeType() == AttributeTypeCSS)
        return;

    ExceptionCode ec;
    if (attributeIsCSSProperty) {
        // FIXME: This should set the override style, not the inline style.
        // Sadly override styles are not yet implemented.
        targetElement-&gt;style()-&gt;setProperty(attributeName.localName(), value, &quot;&quot;, ec);
    } else {
        // FIXME: This should set the &apos;presentation&apos; value, not the actual 
        // attribute value. Whatever that means in practice.
        targetElement-&gt;setAttribute(attributeName, value);
    }

To the first if: We returned earlier, if the property is an XML attribute (no CSS property) but the user specified attributeType=&quot;CSS&quot; which is ok.

After that we don&apos;t care about what the other has specified. If the user specifies XML for an CSS property, we still animated the CSS property and not the presentation attribute. If the other specifies the attributeType CSS for an pure XML attribute, we still animate the attribute. You changes this significantly with the excuse of http://www.w3.org/TR/SVG/animate.html#TargetAttributes. Which is partly OK.

But
First: You changed the behavior according to the spec without testing it!
Second: We don&apos;t support a lot of cases now, which we did support before. The behavior in the spec for CSS property and attributeType XML is quite unspecified. What should get animated for an SVG attribute if we don&apos;t have SVG DOM (baseVal and animVal) which is the case for presentation attributes.You animate the attribute directly, which overwrites the content of the attribute, which is not correct and against the behavior for SVG attributes with SVG DOM, against any existing implementation and definitely not specified that way!
Third: SVG attributes (no CSS properties) can not animated if attributeType is CSS anymore. No test on your patch covers that. I bet you didn&apos;t even check what FF or Opera is doing. SVG Animation does not say that we shouldn&apos;t  animate the attribute for this case! So you changed another peace without any technical reference!


The second part of the patch makes me think we should roll out the patch and reland the first part but with enough tests!



[1] http://lists.w3.org/Archives/Public/www-svg/2012Feb/0088.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568837</commentid>
    <comment_count>28</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-01 12:54:39 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; The last patch did not consider any of my doubts! I have strongly to protest against the r+ from Zoltan.
&gt; 
&gt; Zoltan you can not r+ a patch without reading the concerns of previews reviewers that denied a patch!
Calm down a bit and relax :-)
&gt; 
&gt; 1. The patch changes behavior without layout tests
I added a testcase covering attributeType, to prove nothing changed compared to trunk.

&gt; 2. The patch changes the behavior in a significant way that we might not want to have in WebKit! It is potentially doing the opposite of what other viewers are doing!
I don&apos;t see that but okay.

&gt; 
&gt; This either needs to get fixed as soon as possible or it needs to get rolled out! I vote for the later one, because the patch violates the rules of WebKit.
&gt; 
&gt; Also a reviewer that adds concerns should have time to comment on a bug. You should give him at least a day. In the past we had the unwritten rule that if a reviewer denies a patch than the reviewer must have the chance to review any new patch. This is definitely not the case here!
Well we both thought that we adressed your comments, otherwise Zoltan wouldn&apos;t have r+ it, right?
 
&gt; I reopen this bug, since it violates WebKit rules in any way. And Niko should know of these rules.
Sorry, we didn&apos;t know you still had concerns.

Going to answer your next comment seperated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568844</commentid>
    <comment_count>29</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-01 13:15:59 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; &gt; Okay with &quot;smilAnimationStyle&quot; ?
&gt; Definitely!
Phew :-)

&gt; At first you wanted to correct the CSSOM mutation if I understand it correctly. And even if we definitely should not animate the inline style and even if it is the correct approach to add a new style for SMIL animations, it definitely changes behavior. Just changing the tests to use computed style instead of asking inline style is not enough!
This patch should mark just the beginning of this work - I could do this in a branch if you prefer?
I really don&apos;t mean to ship a version of WebKit with this, I should have been more clear on this.
 
&gt; We need tests that the inline style stays the same.
I&apos;m testing that everywhere.

&gt; We need tests what happens if you set the inline style during an animation, for the both cases that we use additive=&quot;sum&quot; for animations and that we don&apos;t use it (even if it might not matter since the base value is the intrinsic style).
Completely correct! We don&apos;t have testcases at the moment for this, but I started on this as you might have noticed: the anim-elem-0*-t-drt.js testcase framework.

&gt; This needs comparison to other browsers.
It can be run in Opera/FF as well now, the whole harness! I compared against those of course, I should have written this down.

&gt; And if you add a new style sheet you have of course to know how it affects CSS animations or transitions! So we need a test case for this as well.
Yes sure! But my patch doesn&apos;t change that, and as we have no test coverage for this, I prefered to let it this way for now! As you also know it&apos;s yet undecided what role CSS anims/transitions play, so I didn&apos;t want to include this here in this patch.

&gt;See mail from Daniel Holbert about potential risks of &quot;circle of death&quot;[1]. This is definitely in the scope of this patch!
I read that as well :-) But that&apos;s really unrelated to the refactoring of these style properties IMHO. It for sure needs to be considred, but why in this patch? (To restate: the pure introduction of the SMIL animation style does NOT affect how CSS trafos/anims are applied, even the order stayed just the same).

But you&apos;re right that I could have written a testcase for that as well to include here, to raise your worries.

&gt; 
&gt; At first this patch is changing behavior in multiple ways. And you did not add tests for that even if I asked you to do that in my review. That you land the patch without giving the reviewer the change to re-review it who denies the patch is not fair play in WebKit. Even if I don&apos;t know if we have a strict rule that this should get reviewed by this reviewer again, we have at least an unwritten rule to give him the chance to review again. You know that!
Really sorry that you feel this way - didn&apos;t mean to make you angry. Your initial comment was that you&apos;re concerned about the attributeType change, most specifically shouldApplyAnimation:

&quot;A great patch in general. But I am still skeptical of shouldApplyAnimation. This needs more testing and verifications. I would also like to discuss the role of attributeType on SVG WG first.&quot;

And I added a test just for attributeType, as you asked for. So I felt I adressed your concerns, okay?
 
&gt; Second this part of the spec gets interpreted in different ways, why we have different implementations. Even with your patch you do it not according to the specification, because for attributeType=&quot;XML&quot; you overwrite the presentation attribute value. The user can not get the base value during the animation. No browser is doing that as far as I know. Even Firefox does it different, which has the best implementation according to this rule as far as I can say.
I can&apos;t follow here. For attributeType=&quot;XML&quot; everything stayed the same? attributeType=&quot;XML&quot; and animating eg. fill=&quot;&quot; still goes through setAttribute() - so there&apos;s no change in behaviour. Sure that&apos;s wrong but I didn&apos;t change it.

All our svg/animation testcases are runable in Opera as well, and work just fine there - we share the same behaviour now after this patch - I compared most of them manually.

&gt; &gt; &gt; Animate the XML attribute on CSS properties when you use attributeType=&quot;XML&quot; which is absolutely inconsistent with FF and Opera. (For FF they animate the XML attribute as well in this case, but getAttribute() will still give you the base value, not the animatedVal what it will for you know).
Animate the XML attribute on CSS properties when you use attributeType=&quot;XML&quot; is as demanded by the spec. getAttribute() doesn&apos;t work correctly for us in that case, as we override the DOM value, and thus the &apos;baseVal&apos;. I&apos;m adressing that in a seperated patch series which enables animVal.

For me these issues are completly de-coupled, and I wanted to minimize patch size.
To restate again, please check again in detail, I didn&apos;t change attributeType=&quot;&quot; behaviour at all. If I did there&apos;s a bug! Otherwise I would have added testcases for that...

&gt; Now to the second part of your patch that should get separated from you original patch, since it has nothing to do with the mutation of CSS style (even if you interpret it that way). This is second time that you change the behavior without adding results. And it might also break existing content (even if it would be very rare).
Second part of my patch?

&gt; 
&gt; Int the past we did the following:
&gt; 
&gt;     bool attributeIsCSSProperty = isTargetAttributeCSSProperty(targetElement, attributeName);
&gt;     // Stop animation, if attributeType is set to CSS by the user, but the attribute itself is not a CSS property.
&gt;     if (!attributeIsCSSProperty &amp;&amp; attributeType() == AttributeTypeCSS)
&gt;         return;
&gt; 
&gt;     ExceptionCode ec;
&gt;     if (attributeIsCSSProperty) {
&gt;         // FIXME: This should set the override style, not the inline style.
&gt;         // Sadly override styles are not yet implemented.
&gt;         targetElement-&gt;style()-&gt;setProperty(attributeName.localName(), value, &quot;&quot;, ec);
&gt;     } else {
&gt;         // FIXME: This should set the &apos;presentation&apos; value, not the actual 
&gt;         // attribute value. Whatever that means in practice.
&gt;         targetElement-&gt;setAttribute(attributeName, value);
&gt;     }
&gt; 
&gt; To the first if: We returned earlier, if the property is an XML attribute (no CSS property) but the user specified attributeType=&quot;CSS&quot; which is ok.
&gt; 
&gt; After that we don&apos;t care about what the other has specified. If the user specifies XML for an CSS property, we still animated the CSS property and not the presentation attribute. If the other specifies the attributeType CSS for an pure XML attribute, we still animate the attribute. You changes this significantly with the excuse of http://www.w3.org/TR/SVG/animate.html#TargetAttributes. Which is partly OK.
&gt; First: You changed the behavior according to the spec without testing it!
.. it&apos;s just a bug, I didn&apos;t mean to change behavior! You make it sound like I&apos;m intentionally not writing testcases -- I also make mistakes, just to remind you ;-)

&gt; Second: We don&apos;t support a lot of cases now, which we did support before. The behavior in the spec for CSS property and attributeType XML is quite unspecified. What should get animated for an SVG attribute if we don&apos;t have SVG DOM (baseVal and animVal) which is the case for presentation attributes.You animate the attribute directly, which overwrites the content of the attribute, which is not correct and against the behavior for SVG attributes with SVG DOM, against any existing implementation and definitely not specified that way!
Errrm, that&apos;s how we used to implement SMIL since the beginning? I&apos;m just changing that!
This patch covers animating CSS properties, and the animVal patch (to be uploaded next) covers the XML part.

&gt; Third: SVG attributes (no CSS properties) can not animated if attributeType is CSS anymore. No test on your patch covers that. I bet you didn&apos;t even check what FF or Opera is doing. SVG Animation does not say that we shouldn&apos;t  animate the attribute for this case! So you changed another peace without any technical reference!
I checked with Opera, but I seems I&apos;m hit by a bug. I was under the impression that this was actually specified, so it&apos;s definitely wrong! Good catch after all, that&apos;s the part changing behavior that you meant.

Anyhow, clearly a miscommunication, I thought you had concerns regarding attributeType=&quot;&quot; that I covered with a testcase, but I missed the problematic part.

Do you want to roll it-out or shall I post follow-up fixes?
--
P.S. I don&apos;t understand your frustration though, we both thought your comments were adressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568918</commentid>
    <comment_count>30</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-03-01 14:27:01 -0800</bug_when>
    <thetext>This has started to crash in Chromium debug layout tests:

http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;tests=svg%2FW3C-SVG-1.1%2Fanimate-elem-32-t.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568922</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-03-01 14:29:32 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; This has started to crash in Chromium debug layout tests:
&gt; 
&gt; http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;tests=svg%2FW3C-SVG-1.1%2Fanimate-elem-32-t.svg

Here&apos;s a sample stack trace:

[44225:44225:16152245608809:ERROR:process_util_posix.cc(142)] Received signal 11
	base::debug::StackTrace::StackTrace() [0x735fc6]
	base::(anonymous namespace)::StackDumpSignalHandler() [0x6efba9]
	0x7f6527079af0
	WebCore::SVGElementInstance::invalidateAllInstancesOfElement() [0x1b6b521]
	WebCore::SVGElementInstance::InvalidationGuard::~InvalidationGuard() [0x1b3e7af]
	WebCore::SVGCircleElement::svgAttributeChanged() [0x1b4c86d]
	WebCore::SVGElement::attributeChanged() [0x1b6661c]
	WebCore::Element::didModifyAttribute() [0xd5203d]
	WebCore::Element::setAttributeInternal() [0xd54fe8]
	WebCore::Element::setAttribute() [0xd4cc43]
	WebCore::setTargetAttributeAnimatedXMLValue() [0x1b49440]
	WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue() [0x1b494f6]
	WebCore::SVGAnimateElement::applyResultsToTarget() [0x1b42a23]
	WebCore::SMILTimeContainer::updateAnimations() [0x1bfcae7]
	WebCore::SMILTimeContainer::timerFired() [0x1bfc0eb]
	WebCore::Timer&lt;&gt;::fired() [0x1bd7f5a]
	WebCore::ThreadTimers::sharedTimerFiredInternal() [0xf60dac]
	WebCore::ThreadTimers::sharedTimerFired() [0xf60ce3]
	webkit_glue::WebKitPlatformSupportImpl::DoTimeout() [0x1cb51ec]
	base::BaseTimer&lt;&gt;::TimerTask::Run() [0x1cb58f7]
	base::internal::RunnableAdapter&lt;&gt;::Run() [0x1f09f39]
	base::internal::InvokeHelper&lt;&gt;::MakeItSo() [0x1f09ebd]
	base::internal::Invoker&lt;&gt;::Run() [0x1f09e69]
	base::Callback&lt;&gt;::Run() [0x6ac077]
	MessageLoop::RunTask() [0x6c74e4]
	MessageLoop::DeferOrRunPendingTask() [0x6c75fb]
	MessageLoop::DoWork() [0x6c7e1d]
	base::MessagePumpGlib::RunWithDispatcher() [0x727108]
	base::MessagePumpGlib::Run() [0x7274e8]
	MessageLoop::RunInternal() [0x6c71ab]
	MessageLoop::RunHandler() [0x6c705e]
	MessageLoop::Run() [0x6c6993]
	webkit_support::RunMessageLoop() [0x631eab]
	TestShell::waitTestFinished() [0x4723ca]
	TestShell::runFileTest() [0x46aa4f]
	runTest() [0x433784]
	main [0x43428b]
	0x7f6527064c4d
	0x41fad9
None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568928</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-03-01 14:31:46 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; This has started to crash in Chromium debug layout tests:
&gt; &gt; 
&gt; &gt; http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;tests=svg%2FW3C-SVG-1.1%2Fanimate-elem-32-t.svg
&gt; 
&gt; Here&apos;s a sample stack trace:

Sorry, this was missing the assertion at the top:

ASSERTION FAILED: (*it)-&gt;shadowTreeElement()-&gt;correspondingElement()
third_party/WebKit/Source/WebCore/svg/SVGElementInstance.cpp(124) : static void WebCore::SVGElementInstance::invalidateAllInstancesOfElement(WebCore::SVGElement*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568947</commentid>
    <comment_count>33</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-03-01 14:46:38 -0800</bug_when>
    <thetext>Filed assertion failure as https://bugs.webkit.org/show_bug.cgi?id=80053</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569468</commentid>
    <comment_count>34</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-02 02:30:18 -0800</bug_when>
    <thetext>(In reply to comment #18)
After some hours of good sleep, a summary of this patch, future work, and mistakes:

&gt; That sounds like CSS animation overrides SMIL animations. That is what FF is doing. Because CSS animation/transition modify RenderStyle, it sounds hard to do it the other way around (SVG animation overrides CSS animations). That would be great to know.

Fair enough, I&apos;ll explain you what I have/had in mind. First of all lets crawl through matchAllRules() in CSSStyleSelector to precisely understand the order of cascades: (I&apos;ll mark steps irrelevant to our discussion with braces (..) )

-  User-Agent rules are matched first (eg. our default svg.css)
(- Then user style sheets (eg. injected by Safari, if I want to override defaults, or set completely custom styles applied to every page))
- Presentation attributes mapped from HTML/SVG XML DOM attributes to CSS properties
(- &quot;Additional&quot; style declarations (only used by HTMLTable*Element) )
(- Another special case for HTML elements only: text-direction)
- Author rules (all style sheets for this Document, etc.)
- Inline style declarations
- SMIL animation override style

matchAllRules() is used by CSSStyleSelector::styleForElement(). It returns a new PassRefPtr&lt;RenderStyle&gt; corresponding to the matched style. This doesn&apos;t contain any information about CSS animations/transitions at this point.

To outline how CSS animations/transitions are applied, a (simplified!) example is given:
A CSS animation is running on a &lt;div&gt; element animating the &apos;left&apos; CSS property from 0 to 100 in 4s, starting at 0s. Let&apos;s look at any time t &gt; 0, and see how CSS animations are applied.

The AnimationControllers animation timer fires (AnimationControllerPrivate::animationTimerFired) and calls AnimationControllerPrivate::updateAnimations(). Among other things, the most important to notice is that the &lt;div&gt; is marked for &quot;setNeedsStyleRecalc(SyntheticStyleChange)&quot; and then the Documents style is updated (document()-&gt;updateStyleIfNeeded()).

This will cause the whole recalcStyle() machinery to run. Once it reaches the &lt;div&gt; it will create a new RenderStyle for it by asking CSSStyleSelector::styleForElement for it (this contains the whole user/author rules, inline rules, etc. see above). Then it calls renderer-&gt;setAnimatableStyle(newStyle).

void RenderObject::setAnimatableStyle(PassRefPtr&lt;RenderStyle&gt; style)
{
    if (!isText() &amp;&amp; style)
        setStyle(animation()-&gt;updateAnimations(this, style.get()));
    else
        setStyle(style);
}

The new style is then passed to AnimationController::updateAnimations(), which will call style-&gt;setLeft(100 * currentProgress) on the passed in RenderStyle. CSS transitions/animations thus only affect the computed value (aka. the _current_ RenderStyle belonging to a certain renderer, reachable from CSS OM via getComputedStyle).

I&apos;ve simplified the whole process a bit, to only show the important things. Here&apos;s a sample backtrace that should be understandable with above comments:

#0  WebCore::AnimationBase::blendProperties (anim=0x1082905e0, prop=1082, dst=0x108241dd0, a=0x1082906f0, b=0x1082908f0, progress=0.12588589191436766) at /Users/nzimmermann/Coding/WebKit/Source/WebCore/page/animation/AnimationBase.cpp:1233
#1  0x0000000102488732 in WebCore::KeyframeAnimation::animate (this=0x1082905e0, targetStyle=0x10829ba30, animatedStyle=@0x7fff5fbfd848) at /Users/nzimmermann/Coding/WebKit/Source/WebCore/page/animation/KeyframeAnimation.cpp:191
#2  0x00000001015d6b99 in WebCore::CompositeAnimation::animate (this=0x1082904a0, renderer=0x108290268, currentStyle=0x10852b590, targetStyle=0x10829ba30) at /Users/nzimmermann/Coding/WebKit/Source/WebCore/page/animation/CompositeAnimation.cpp:303
#3  0x000000010146c2b3 in WebCore::AnimationController::updateAnimations (this=0x108828898, renderer=0x108290268, newStyle=0x10829ba30) at /Users/nzimmermann/Coding/WebKit/Source/WebCore/page/animation/AnimationController.cpp:530
#4  0x0000000102789a0d in WebCore::RenderObject::setAnimatableStyle (this=0x108290268, style=@0x7fff5fbfd9c0) at /Users/nzimmermann/Coding/WebKit/Source/WebCore/rendering/RenderObject.cpp:1681
#5  0x000000010254a963 in WebCore::Node::setRenderStyle (this=0x10828fa90, s=@0x7fff5fbfdb08) at /Users/nzimmermann/Coding/WebKit/Source/WebCore/dom/Node.cpp:1452
#6  0x0000000101a44b14 in WebCore::Element::recalcStyle (this=0x10828fa90, change=WebCore::Node::NoChange)
....

To summarize:
I kept stating that my patch doesn&apos;t affect the behavior of how CSS animation/transitions are applied. The patch only changes things in the CSSStyleSelector stage --  CSS anims/transitions always come last in WebKit . They don&apos;t &quot;override&quot; a style, they only act on the RenderStyles currently set in the RenderObjects, which is completely different from SMIL.

Another SMIL1/2/3/ quote:
When animation is applied to CSS properties of a particular element, the base value to be animated is read using the (readonly) getComputedStyle() method on that element. The values produced by the animation are written into an override stylesheet for that element, which may be obtained using the getOverrideStyle() method. Note that it is assumed that before reading the value, the override stylesheet is cleared so that the animation works on the original document value. These new values then affect the cascade and are reflected in a new computed value (and thus, modified presentation). This means that the effect of animation overrides all style sheet rules, except for user rules with the !important property. This enables !important user style settings to have priority over animations, an important requirement for accessibility. Note that the animation may have side effects upon the document layout.
--

Most noticeable: &quot;which may be obtained using the getOverrideStyle() method&quot; - it doesn&apos;t say you need to use getOverrideStyle() for this. Both my patch &amp; FF implement this using an override style sheet, but not obtained through getOverrideStyle() - it&apos;s just not needed, and not implemented for both of us.

Next thing: &quot;These new values then affect the cascade and are reflected in a new computed value (and thus, modified presentation).&quot;
That&apos;s exactly what I&apos;ve done: The SMIL animation style is hooked into the CSSStyleSelector part, thus affecting the RenderStyle currently present in the renderers, and thus also the computed style&quot;.

Now you could argue, why did I apply the SMIL animation style after the inline style declarations?
&quot;This means that the effect of animation overrides all style sheet rules...&quot;

It overrides all style sheet rules, but it doesn&apos;t override CSS anims/transitions, as they&apos;re applied at a later stage. I think, despite bugs of course, the new design is correct.
NOTE: It would be costly, but possible to apply SMIL animations after CSS anims, but I think we should settle down on the former, as FF already does it that way, and we follow. Of course things like Daniels death-circle still need to be considered and fixed, no doubt.

I hope that sheds some more light in the dark. I&apos;ve realized that I should have written this mail _before_ submitting my patch for review, that would have saved the trouble.

&gt; &gt; We can of course now decide when to apply these rules. SMIL says after the inline style declarations have been applied - so that&apos;s what I&apos;m doing, consistent with both Opera &amp; FF.
&gt; You can just partly compare Opera here, since they don&apos;t have CSS animations and transitions for SVG CSS properties implemented. This should definitely get viewed in a bigger scope with the whole animation sandwich model. 
Exactly! I&apos;ve quoted http://www.w3.org/TR/smil-animation/#AnimationSandwichModel above. It stayed roughly the same across SMIL1-3. The CSS property part I&apos;m referring to at least - it&apos;s really also consistent this way, I like the FF solution, and followed it.

Wow, I&apos;ve completely missed those two comments below! I didn&apos;t realize you actually posted these before I submitted patch v5.


&gt; XML attributes get not animated anymore when you use attributeType=&quot;CSS&quot;
Gotcha, so sad we have no test coverage for this. I&apos;m happy that the new harness makes it easy, fortunately, to write such tests - and compare with other browsers (which was not possible before).

&gt; Animate the XML attribute on CSS properties when you use attributeType=&quot;XML&quot; which is absolutely inconsistent with FF and Opera. (For FF they animate the XML attribute as well in this case, but getAttribute() will still give you the base value, not the animatedVal what it will for you know).
Ditto. I made attributeType mandatory, which is wrong. I&apos;ll address this ASAP.

Phew, tricky topic. Long post.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569488</commentid>
    <comment_count>35</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-02 03:02:42 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; &gt; XML attributes get not animated anymore when you use attributeType=&quot;CSS&quot;
&gt; Gotcha, so sad we have no test coverage for this. I&apos;m happy that the new harness makes it easy, fortunately, to write such tests - and compare with other browsers (which was not possible before).

Erm, I should have added that the testcase svg/animations/attributeTypes.svg that I&apos;ve added in trunk, covers this:

&lt;!-- &apos;width&apos; is a XML attribute, attributeType is set to &quot;CSS&quot;. &apos;width&apos; is not a presentation attribute, so this animation won&apos;t run. --&gt;
&lt;rect x=&quot;150&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;green&quot;&gt;
    &lt;animate id=&quot;an2&quot; attributeType=&quot;CSS&quot; attributeName=&quot;width&quot; fill=&quot;freeze&quot; from=&quot;100&quot; to=&quot;10&quot; begin=&quot;0s&quot; dur=&quot;4s&quot;/&gt;
&lt;/rect&gt;

You&apos;re right that neither SVG nor SMIL say that the animation should stop if the attributeType is wrong. But that&apos;s actually what both Opera &amp; FireFox nighties are doing! And I didn&apos;t change that behavior at all, see, your own snippet:
Int the past we did the following:

    bool attributeIsCSSProperty = isTargetAttributeCSSProperty(targetElement, attributeName);
    // Stop animation, if attributeType is set to CSS by the user, but the attribute itself is not a CSS property.
    if (!attributeIsCSSProperty &amp;&amp; attributeType() == AttributeTypeCSS)
        return;

My example above animates &apos;width&apos;, which is not a css property, so attributeIsCSSProperty=false.
And as attributeType is set to CSS, the animation is not applied. I preserved this behavior in my patch, proofed with the new testcase. Do you agree? (Did you misread the new code?)


&gt; &gt; Animate the XML attribute on CSS properties when you use attributeType=&quot;XML&quot; which is absolutely inconsistent with FF and Opera. (For FF they animate the XML attribute as well in this case, but getAttribute() will still give you the base value, not the animatedVal what it will for you know).
I misread, about this. I still think this is a fix. When attributeType=&quot;XML&quot; is specified, we&apos;re currently using the old legacy setAttribute() code path which mutates the DOM. Once animVal is enabled, setAttribute() call would go away, and the underlying base value wouldn&apos;t be affected.

If you want, my patch aligns us more with FF, we can only fix it fully if we enable animVal, and avoid DOM mutations for XML attribute changes.
(I have a local patch which differentiates between ApplyCSSAnimation/ApplySVGAnimation, where the former operates on the SMIL animation style and the latter purely on SVGLength, SVGLengthList, etc. objects in the SVG DOM - this is the ultimate goal of all of this).

&gt; Ditto. I made attributeType mandatory, which is wrong. I&apos;ll address this ASAP.
Reply to myself: Nothing to adress, it&apos;s correct as-is. Unless you can proof me wrong :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569631</commentid>
    <comment_count>36</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-02 07:06:37 -0800</bug_when>
    <thetext>I don&apos;t reply line by line on every single statement, otherwise the bug report gets to long. 

Your general description is covered by the graphic at [1]. An image is sometimes better than a long description :)

But two things where I still oppose. You are not doing it like Firefox:

1) CSS properties with attributeType CSS: FF has an override style and it comes after the intrinsic style[2] directly, just like you described it. BUT CSS Animations _override_ SVG animations, they are not applied both, but just one of both. And both interact directly on intrinsic style! If you specify both, than CSS animations wins.

2) CSS properties with attributeType XML don&apos;t animate the XML attribute but just the presentation attribute style[1]. You won&apos;t see the animated value with getAttribute() till the end of an animation. And it will just affect the presentation attribute value at the end of an animation if fill=&quot;freeze&quot; was set.

And the second point makes me sad. I even dislike the behavior of FF, but your new introduced behavior is even worst. I wouldn&apos;t over interpret the description of attributeType in the spec. I assume that it was introduced to help viewers to decide if an animated property is CSS or XML. Talking to some of the authors here at Adobe, that was really the intention. The authors did not respect that we have to check the type ourselves anyway and we can&apos;t trust the user input. Nowadays I would interpret the property as &quot;For XML use the SVG parser to parse the values, for CSS use the CSS parser to parse values and follow the animation rules of SMIL 3.0 Animation&quot; which always animates the the intrinsic style.

And that you changed the code to fallback to setAttribute animation is completely wrong for me. I would like that you change that back. Opera for instance doesn&apos;t animate the presentation attribute nor its style. That is the best approach in my eyes. Otherwise all animations get override by author styles, but we still have to animate the value which is stupid and a totally overhead.

I will try to get this on the agenda of the next week SVG WG meeting. I still think you should go back to our old behavior for now, so that other SVG guys don&apos;t assume that we think that it is the way to go. Because I don&apos;t think that it was the intention of the SVG spec authors nor that it is the desired behavior.

But we definitely need to have test of all new behaviors. And please verify that your patch does not cause the assertions. Thanks.

[1] http://www.w3.org/Graphics/fx/wiki/SVG_attribute_to_presentation_attribute
[2] http://www.w3.org/TR/css3-animations/#animation-behavior-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569637</commentid>
    <comment_count>37</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-02 07:19:03 -0800</bug_when>
    <thetext>(In reply to comment #36)

&gt; 1) CSS properties with attributeType CSS: FF has an override style and it comes after the intrinsic style[2] directly, just like you described it. BUT CSS Animations _override_ SVG animations, they are not applied both, but just one of both. And both interact directly on intrinsic style! If you specify both, than CSS animations wins.
The same is true in WebKit, with and without my patch.
 
&gt; 2) CSS properties with attributeType XML don&apos;t animate the XML attribute but just the presentation attribute style[1]. You won&apos;t see the animated value with getAttribute() till the end of an animation. And it will just affect the presentation attribute value at the end of an animation if fill=&quot;freeze&quot; was set.
Correct.
 
&gt; And the second point makes me sad. I even dislike the behavior of FF, but your new introduced behavior is even worst.
Which new behavior? I have to ask again, because you&apos;re not replying on this.
I am consistent with Opera &amp; FF.

&gt; I wouldn&apos;t over interpret the description of attributeType in the spec. I assume that it was introduced to help viewers to decide if an animated property is CSS or XML. Talking to some of the authors here at Adobe, that was really the intention. The authors did not respect that we have to check the type ourselves anyway and we can&apos;t trust the user input. Nowadays I would interpret the property as &quot;For XML use the SVG parser to parse the values, for CSS use the CSS parser to parse values and follow the animation rules of SMIL 3.0 Animation&quot; which always animates the the intrinsic style.
 
&gt; And that you changed the code to fallback to setAttribute animation is completely wrong for me. I would like that you change that back.
*SIGH* Again, which change? You&apos;ve stated several times that I changed something, and I replied several times that I see no change. Please create a testcase which proves that my patch has changed something. Otherwise this is getting nowhere.

&gt; Opera for instance doesn&apos;t animate the presentation attribute nor its style. That is the best approach in my eyes. Otherwise all animations get override by author styles, but we still have to animate the value which is stupid and a totally overhead.
&gt; 
&gt; I will try to get this on the agenda of the next week SVG WG meeting. I still think you should go back to our old behavior for now, so that other SVG guys don&apos;t assume that we think that it is the way to go. Because I don&apos;t think that it was the intention of the SVG spec authors nor that it is the desired behavior.
Please proof with links.
 
&gt; But we definitely need to have test of all new behaviors. And please verify that your patch does not cause the assertions. Thanks.
Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569641</commentid>
    <comment_count>38</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-02 07:29:54 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; &gt; 2) CSS properties with attributeType XML don&apos;t animate the XML attribute but just the presentation attribute style[1]. You won&apos;t see the animated value with getAttribute() till the end of an animation. And it will just affect the presentation attribute value at the end of an animation if fill=&quot;freeze&quot; was set.
Do you mean this is now happening after my patch, or before the patch, or shall this be the correct behaviour?

...
&gt; &gt; And the second point makes me sad. I even dislike the behavior of FF, but your new introduced behavior is even worst.

&lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;red&quot;&gt;
  &lt;animate attributeName=&quot;fill&quot; attributeType=&quot;XML&quot; from=&quot;red&quot; to=&quot;green&quot; dur=&quot;3s&quot; fill=&quot;freeze&quot; /&gt;
&lt;/rect&gt;

This example is using ApplyXMLAnimation, as attributeType=&quot;XML&quot;, and thus uses setAttribute() in both the old trunk before my patch, and now. Behaviour didn&apos;t change for this. (Of course that should only mutate the animVal, never the baseVal, but that&apos;s another topic)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569643</commentid>
    <comment_count>39</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-02 07:33:17 -0800</bug_when>
    <thetext>You&apos;re for sure thinking of http://www.w3.org/Graphics/fx/wiki/SVG_attribute_to_presentation_attribute:
Issue 5: Different behavior on attributeType=&quot;XML&quot; and attributeType=&quot;CSS&quot;

&lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;green&quot;&gt;
  &lt;animate attributeName=&quot;fill&quot; attributeType=&quot;XML|CSS&quot; from=&quot;red&quot; to=&quot;green&quot; dur=&quot;3s&quot; /&gt;
&lt;/rect&gt;

Solutions: (Recommend) No difference between CSS and XML, both animate the animated presentation attribute style (see Issue 4)
--

For attributeType=&quot;CSS&quot; we&apos;d animate the pres attr style, and for attributeType=&quot;XML&quot; we&apos;d use the XML attribute at present. This can be changed of course, but this is the behaviour that also existed before my patch....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569698</commentid>
    <comment_count>40</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-02 09:16:11 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; You&apos;re for sure thinking of http://www.w3.org/Graphics/fx/wiki/SVG_attribute_to_presentation_attribute:
&gt; Issue 5: Different behavior on attributeType=&quot;XML&quot; and attributeType=&quot;CSS&quot;
&gt; 
&gt; &lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;green&quot;&gt;
&gt;   &lt;animate attributeName=&quot;fill&quot; attributeType=&quot;XML|CSS&quot; from=&quot;red&quot; to=&quot;green&quot; dur=&quot;3s&quot; /&gt;
&gt; &lt;/rect&gt;
&gt; 
&gt; Solutions: (Recommend) No difference between CSS and XML, both animate the animated presentation attribute style (see Issue 4)
&gt; --
&gt; 
&gt; For attributeType=&quot;CSS&quot; we&apos;d animate the pres attr style, and for attributeType=&quot;XML&quot; we&apos;d use the XML attribute at present. This can be changed of course, but this is the behaviour that also existed before my patch....

   if (!attributeIsCSSProperty &amp;&amp; attributeType() == AttributeTypeCSS)
        return;

    ExceptionCode ec;
    if (attributeIsCSSProperty) {
        // FIXME: This should set the override style, not the inline style.
        // Sadly override styles are not yet implemented.
        targetElement-&gt;style()-&gt;setProperty(attributeName.localName(), value, &quot;&quot;, ec);
    } else {
        // FIXME: This should set the &apos;presentation&apos; value, not the actual 
        // attribute value. Whatever that means in practice.
        targetElement-&gt;setAttribute(attributeName, value);
    }

Again the same code snippet.

No, it did not exist before. We always animated the inline style, never the attribute! It is new behavior in WebKit that you introduced. I can copy the same snippet a third time if zoo want. But it will result in the same conclusion: For SVG presentation attributes we _always_ animated the inline style, but never the attribute value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569708</commentid>
    <comment_count>41</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-02 09:28:24 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; 
&gt; &gt; 1) CSS properties with attributeType CSS: FF has an override style and it comes after the intrinsic style[2] directly, just like you described it. BUT CSS Animations _override_ SVG animations, they are not applied both, but just one of both. And both interact directly on intrinsic style! If you specify both, than CSS animations wins.
&gt; The same is true in WebKit, with and without my patch.

That would be sad, because than your patch would do nothing ;) You created the new style which FF calls override style, even if it is not override style. You called in smilAnimationStyle. But it is not the same like the old code. And more, you are contrary to your previous comment. In your long description you said that UA styles, author styles and smile animation get to the computed style in RenderStyle. This is what CSS animations take into account. So SMIL animations are not overridden but belong to the &quot;base value&quot; for CSS animations (my tests seem to verify that). This is different to Firefox. In Firefox the result on the screen is as if you would not have SMIL animations applied, even if they are running in the background.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570118</commentid>
    <comment_count>42</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-02 23:33:36 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; No, it did not exist before. We always animated the inline style, never the attribute! It is new behavior in WebKit that you introduced. I can copy the same snippet a third time if zoo want. But it will result in the same conclusion: For SVG presentation attributes we _always_ animated the inline style, but never the attribute value.

I agree that this is the desired behaviour.

Let&apos;s rephrase:
Consider we have proper SMIL support, that never mutates the DOM, but only &quot;presentation values&quot; (aka. SMIL override style for CSS, and animVal for any SVGLength, etc. animation).

Once we have that, we have no option but animating the inline style for presentation attributes like &quot;fill&quot;.

Now why did I change this?
Before we animated the fill CSS property, which gets mapped to the fill presentation attribute, and vis-a-vis. Before my patch, getAttribute(&quot;fill&quot;) was actually reflecting the current animation state, while animating, due the mapping.

Now with the SMIL override style, that doesn&apos;t happen anymore. So in order to keep the current behaviour, I decided to animate the fill XML attribute, so that the changes are still visible.

I am aware that this is not correct, but I wanted to preserve _existing_ behaviour.
*sigh* I should work faster on the animVal patch, which resolves all of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570120</commentid>
    <comment_count>43</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-02 23:37:05 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; (In reply to comment #37)
&gt; &gt; (In reply to comment #36)
&gt; &gt; 
&gt; &gt; &gt; 1) CSS properties with attributeType CSS: FF has an override style and it comes after the intrinsic style[2] directly, just like you described it. BUT CSS Animations _override_ SVG animations, they are not applied both, but just one of both. And both interact directly on intrinsic style! If you specify both, than CSS animations wins.
&gt; &gt; The same is true in WebKit, with and without my patch.


&gt; That would be sad, because than your patch would do nothing ;) You created the new style which FF calls override style, even if it is not override style. You called in smilAnimationStyle. But it is not the same like the old code. And more, you are contrary to your previous comment. In your long description you said that UA styles, author styles and smile animation get to the computed style in RenderStyle.
Get to the? You mean contribute to the computed style? If so, that&apos;s true.

&gt; This is what CSS animations take into account. So SMIL animations are not overridden but belong to the &quot;base value&quot; for CSS animations (my tests seem to verify that).
Exactly! And that behaviour stayed the same. Previously the SMIL animation were part of the &quot;author rules&quot; now they&apos;re in their own smil animation rules set, applied _after_ the inline decls, before it was applied before the inline style decls. That&apos;s the only change. It does NOT affect CSS anims/trafos in any way. The behaviour stayed the same.

&gt; This is different to Firefox. In Firefox the result on the screen is as if you would not have SMIL animations applied, even if they are running in the background.
I didn&apos;t compare this to FF, I only assured that my patch preserves current WebKit behavior.

If you don&apos;t see that my patch doesn&apos;t affect CSS animation/transitions, you should re-read the long description and/or debug yourself, to convince yourself, that this stayed the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570138</commentid>
    <comment_count>44</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-03 03:58:12 -0800</bug_when>
    <thetext>Ok, let&apos;s move forward with this. A concrete proposal:
1. I&apos;ll bake out the controversial ApplyXMLAnimation change, to let presentation attributes with attributeType=&quot;XML&quot; animated through CSS again. (even this has some downsides until animVal is fully done)

2. My animVal patch is done for SVGLength &amp; SVGLengthList, the two hardest candidates. In general all properties &amp; properties lists (except SVGPathSegList, another topic) are ready for animVal locally now. I plan to turn on animVal support step by step, one type after the other.

I&apos;ll put up a fully working patch, covering only SVGLength (for simplicity), to bug 12437 (animations update baseVal instead of animVal) to show you how everything falls together.

What this fixes:
I&apos;ve contained testcases that change the baseValue of an animation while the animation is running, inspecting the SVG DOM effects, when either fill=&quot;remove&quot; or fill=&quot;freeze&quot; is set.
An ideal candidate for testing baseValue mutations by script, while a SMIL animation is running, is additive=&quot;sum&quot; + values animation.

&lt;rect x=&quot;10&quot;&gt; &lt;animate dur=&quot;6s&quot; additive=&quot;sum&quot; values=&quot;0; 50; 100&quot;/&gt;..
At t=0s (before anim runs), x is 10
At t&gt;0s &lt;= 3s it animates from x=10 to x=60 (originally from 0..50 but 10 has to be added as its the base value).
At t&gt;3s &lt;= 6s it animates from x=60 to x=110

This already works fine in WebKit trunk w/o any of these patches. What we don&apos;t support is changing the baseValue like rect.setAttribute(&quot;x&quot;, &quot;666&quot;) while the animation is running, it had no effect on additive=&quot;sum&quot;+values animation, as we cache the base values only once in SMILTimeContainer, and never see any changes to that. Using my animVal patch I don&apos;t need to utilize this code path anymore ( as restoring to base value happens automatically when animation ends (updateAnimVal logic)).

Example: normally if we reach t=5s, we&apos;re at x = 100/(6s)*(5s) + 10 = 93.333333.
If I now change the base value via rect.x.baseVal.value to 100 (while the additive-values animation is running) it properly recalculates x = 100 / (6s)*(5s) + 100 = 183.33333.

This already works in FF &amp; Opera, now we support it as well.
...
Once we agree the draft patch is the way to go....

3) Split up the draft patch into smaller patches, preparing animVal support (for for properties, then lists, then turn on SVGLength + change/add tests, then turn on SVGLengthList + change/add tests, etc..)

Good plan?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570152</commentid>
    <comment_count>45</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-03 07:57:42 -0800</bug_when>
    <thetext>
(In reply to comment #43)
&gt; &gt; This is different to Firefox. In Firefox the result on the screen is as if you would not have SMIL animations applied, even if they are running in the background.
&gt; I didn&apos;t compare this to FF, I only assured that my patch preserves current WebKit behavior.
&gt; 
&gt; If you don&apos;t see that my patch doesn&apos;t affect CSS animation/transitions, you should re-read the long description and/or debug yourself, to convince yourself, that this stayed the same.

That is correct, but we run in to consensus here before. That is not what I am worry anymore beside the missing description in the Changelog. But don&apos;t say that this is what FF is doing, because it isn&apos;t.

(In reply to comment #42)
&gt; (In reply to comment #40)
&gt; &gt; No, it did not exist before. We always animated the inline style, never the attribute! It is new behavior in WebKit that you introduced. I can copy the same snippet a third time if zoo want. But it will result in the same conclusion: For SVG presentation attributes we _always_ animated the inline style, but never the attribute value.
&gt; 
&gt; I agree that this is the desired behaviour.
&gt; 
&gt; Let&apos;s rephrase:
&gt; Consider we have proper SMIL support, that never mutates the DOM, but only &quot;presentation values&quot; (aka. SMIL override style for CSS, and animVal for any SVGLength, etc. animation).
&gt; 
&gt; Once we have that, we have no option but animating the inline style for presentation attributes like &quot;fill&quot;.
&gt; 
&gt; Now why did I change this?
&gt; Before we animated the fill CSS property, which gets mapped to the fill presentation attribute, and vis-a-vis. Before my patch, getAttribute(&quot;fill&quot;) was actually reflecting the current animation state, while animating, due the mapping.
&gt; 
&gt; Now with the SMIL override style, that doesn&apos;t happen anymore. So in order to keep the current behaviour, I decided to animate the fill XML attribute, so that the changes are still visible.
&gt; 
&gt; I am aware that this is not correct, but I wanted to preserve _existing_ behaviour.
&gt; *sigh* I should work faster on the animVal patch, which resolves all of this.

NO IT IS NOT EXISTING BEHAVIOR! We never mutated DOM for presentation attributes! At least not as far as I understand you comment that we changed the value of the attribute. What we did is element.style.property = animValue; but independent of the attributeType value! And getAttribute(&quot;fill&quot;) did never reflect animate values but the base value of the attribute, because the attribute points to the presentation attribute style and animations are done on the inline style!

I don&apos;t know how often I should repeat that. It seems that you did not understand how animation of presentation attributes worked.

(In reply to comment #44)
&gt; Ok, let&apos;s move forward with this. A concrete proposal:
&gt; 1. I&apos;ll bake out the controversial ApplyXMLAnimation change, to let presentation attributes with attributeType=&quot;XML&quot; animated through CSS again. (even this has some downsides until animVal is fully done)
Which are the downsides? You can access the base value of the presentation *attribute* and with the new style it does not affect inline style.

&gt; 
&gt; 2. My animVal patch is done for SVGLength &amp; SVGLengthList, the two hardest candidates. In general all properties &amp; properties lists (except SVGPathSegList, another topic) are ready for animVal locally now. I plan to turn on animVal support step by step, one type after the other.
That is great. Remember that current presentation attributes don&apos;t have SVG DOM interfaces (no animVal or baseVal). But it is a good investment in the future to think about that now.

&gt; 
&gt; I&apos;ll put up a fully working patch, covering only SVGLength (for simplicity), to bug 12437 (animations update baseVal instead of animVal) to show you how everything falls together.
Great.

&gt; 
&gt; What this fixes:
&gt; I&apos;ve contained testcases that change the baseValue of an animation while the animation is running, inspecting the SVG DOM effects, when either fill=&quot;remove&quot; or fill=&quot;freeze&quot; is set.
&gt; An ideal candidate for testing baseValue mutations by script, while a SMIL animation is running, is additive=&quot;sum&quot; + values animation.
I agree.

&gt; 
&gt; &lt;rect x=&quot;10&quot;&gt; &lt;animate dur=&quot;6s&quot; additive=&quot;sum&quot; values=&quot;0; 50; 100&quot;/&gt;..
&gt; At t=0s (before anim runs), x is 10
&gt; At t&gt;0s &lt;= 3s it animates from x=10 to x=60 (originally from 0..50 but 10 has to be added as its the base value).
&gt; At t&gt;3s &lt;= 6s it animates from x=60 to x=110
&gt; 
&gt; This already works fine in WebKit trunk w/o any of these patches. What we don&apos;t support is changing the baseValue like rect.setAttribute(&quot;x&quot;, &quot;666&quot;) while the animation is running, it had no effect on additive=&quot;sum&quot;+values animation, as we cache the base values only once in SMILTimeContainer, and never see any changes to that. Using my animVal patch I don&apos;t need to utilize this code path anymore ( as restoring to base value happens automatically when animation ends (updateAnimVal logic)).
&gt; 
&gt; Example: normally if we reach t=5s, we&apos;re at x = 100/(6s)*(5s) + 10 = 93.333333.
&gt; If I now change the base value via rect.x.baseVal.value to 100 (while the additive-values animation is running) it properly recalculates x = 100 / (6s)*(5s) + 100 = 183.33333.
&gt; 
&gt; This already works in FF &amp; Opera, now we support it as well.
&gt; ...
&gt; Once we agree the draft patch is the way to go....
Point two is great, nevertheless I don&apos;t see the relation to our current discussion for presentation attributes.

&gt; 
&gt; 3) Split up the draft patch into smaller patches, preparing animVal support (for for properties, then lists, then turn on SVGLength + change/add tests, then turn on SVGLengthList + change/add tests, etc..)
&gt; 
&gt; Good plan?
It is. But not what I criticize on this patch.

To summaries the presentation attribute changes, since animVal and baseVal are unrelated to you SVG DOM changes:

1) I do not question the biggest change, the new style for SMIL animations. That is great! But it needs testing. As far as I can see there is no test that inline style gets not changed during SMIL animations. Which must be tested, because of the behavior change. Correct me if I am wrong.

2) Brake out the changes for ApplyXMLAnimation, or at least use your SMIL animation style independent of the attributeType value for presentation attributes. Mutating the DOM attribute is not desired, against the specification and not done by any other SVG viewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570171</commentid>
    <comment_count>46</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-03 13:45:44 -0800</bug_when>
    <thetext>(In reply to comment #45)

This is really wrong:
&gt; &gt; Before we animated the fill CSS property, which gets mapped to the fill presentation attribute, and vis-a-vis. Before my patch, getAttribute(&quot;fill&quot;) was actually reflecting the current animation state, while animating, due the mapping.
&gt; &gt; Now with the SMIL override style, that doesn&apos;t happen anymore. So in order to keep the current behaviour, I decided to animate the fill XML attribute, so that the changes are still visible.
....

I realize now that my getAttribute() example from above only works for non-presentation attributes. Especially for fill, you are right, we never animated any XML property - for eg. &quot;x&quot; attribute of &lt;rect&gt; we did that.

Now why didn&apos;t I spot this logic error when you pasted the code?
346     bool attributeIsCSSProperty = isTargetAttributeCSSProperty(targetElement, attributeName);
347     // Stop animation, if attributeType is set to CSS by the user, but the attribute itself is not a CSS property.
348     if (!attributeIsCSSProperty &amp;&amp; attributeType() == AttributeTypeCSS)
349         return;


I somehow had in mind that isTargetAttributeCSSProperty always returned false for attributeType=&quot;XML&quot;. That&apos;s my wrong assumption, which lead to the whole confusion. SCNR...

&gt; I don&apos;t know how often I should repeat that. It seems that you did not understand how animation of  presentation attributes worked.
I did understand that, but not together with attributeType=&quot;XML&quot;. For that we now get it wrong with my patch, agreed.

I&apos;ll switch presentation attributes animations back to CSS, no matter what attributeType says.

 410    case AttributeTypeCSS:
 411        // If attributeName is a known animatable SVG CSS property, apply the animation.
 412        if (isTargetAttributeCSSProperty(targetElement, attributeName))
 413            return ApplyCSSAnimation;
 414        // If attributeName is unknown and ttributeType is not &apos;auto&apos;, don&apos;t apply the animation.
 415        if (attributeType == AttributeTypeCSS)
 416            return DontApplyAnimation;
 417        // For attributeType=&quot;auto&quot;, try XML animation now.
 418    case AttributeTypeXML:
 419        return ApplyXMLAnimation;

It&apos;s just a matter of moving the case AttributeTypeXML below the AttributeTypeCSS case.

&gt; 1) I do not question the biggest change, the new style for SMIL animations. That is great! But it needs testing. As far as I can see there is no test that inline style gets not changed during SMIL animations. Which must be tested, because of the behavior change. Correct me if I am wrong.
That is tested in my patch, correct me if I&apos;m wrong. I&apos;m checking both getComputedStyle(rect) and rect.style.fill, to verify only the former gets affected, not the latter.

&gt;  2) Brake out the changes for ApplyXMLAnimation, or at least use your SMIL animation style independent of the attributeType value for presentation attributes. Mutating the DOM attribute is not desired, against the specification and not done by any other SVG viewer.

I&apos;d like you to understand that I had a misconception about animating presentation attributes with attributeType=&quot;XML&quot; set. I assumed that would go through the setAttribute() code path already, so that&apos;s why I said I&apos;m only preserving &quot;existing behaviour&quot;. That&apos;s of course wrong. We only used the setAttribute() code path for NON presentation attributes, and attributeType=&quot;XML&quot; set.

I was aware before that _any_ DOM mutation is actually wrong. But as I was under the impression we mutated DOM for presentation attributes, I tried to keep this behaviour in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570202</commentid>
    <comment_count>47</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-03 19:29:15 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; 
&gt; This is really wrong:
&gt; &gt; &gt; Before we animated the fill CSS property, which gets mapped to the fill presentation attribute, and vis-a-vis. Before my patch, getAttribute(&quot;fill&quot;) was actually reflecting the current animation state, while animating, due the mapping.
&gt; &gt; &gt; Now with the SMIL override style, that doesn&apos;t happen anymore. So in order to keep the current behaviour, I decided to animate the fill XML attribute, so that the changes are still visible.
&gt; ....
&gt; 
&gt; I realize now that my getAttribute() example from above only works for non-presentation attributes. Especially for fill, you are right, we never animated any XML property - for eg. &quot;x&quot; attribute of &lt;rect&gt; we did that.
&gt; 
&gt; Now why didn&apos;t I spot this logic error when you pasted the code?
&gt; 346     bool attributeIsCSSProperty = isTargetAttributeCSSProperty(targetElement, attributeName);
&gt; 347     // Stop animation, if attributeType is set to CSS by the user, but the attribute itself is not a CSS property.
&gt; 348     if (!attributeIsCSSProperty &amp;&amp; attributeType() == AttributeTypeCSS)
&gt; 349         return;
&gt; 
&gt; 
&gt; I somehow had in mind that isTargetAttributeCSSProperty always returned false for attributeType=&quot;XML&quot;. That&apos;s my wrong assumption, which lead to the whole confusion. SCNR...
&gt; 
&gt; &gt; I don&apos;t know how often I should repeat that. It seems that you did not understand how animation of  presentation attributes worked.
&gt; I did understand that, but not together with attributeType=&quot;XML&quot;. For that we now get it wrong with my patch, agreed.
&gt; 
&gt; I&apos;ll switch presentation attributes animations back to CSS, no matter what attributeType says.
&gt; 
&gt;  410    case AttributeTypeCSS:
&gt;  411        // If attributeName is a known animatable SVG CSS property, apply the animation.
&gt;  412        if (isTargetAttributeCSSProperty(targetElement, attributeName))
&gt;  413            return ApplyCSSAnimation;
&gt;  414        // If attributeName is unknown and ttributeType is not &apos;auto&apos;, don&apos;t apply the animation.
&gt;  415        if (attributeType == AttributeTypeCSS)
&gt;  416            return DontApplyAnimation;
&gt;  417        // For attributeType=&quot;auto&quot;, try XML animation now.
&gt;  418    case AttributeTypeXML:
&gt;  419        return ApplyXMLAnimation;
&gt; 
&gt; It&apos;s just a matter of moving the case AttributeTypeXML below the AttributeTypeCSS case.
&gt; 
&gt; &gt; 1) I do not question the biggest change, the new style for SMIL animations. That is great! But it needs testing. As far as I can see there is no test that inline style gets not changed during SMIL animations. Which must be tested, because of the behavior change. Correct me if I am wrong.
&gt; That is tested in my patch, correct me if I&apos;m wrong. I&apos;m checking both getComputedStyle(rect) and rect.style.fill, to verify only the former gets affected, not the latter.
Just checked it again. You are right, computed style vs. style.property get checked.

&gt; 
&gt; &gt;  2) Brake out the changes for ApplyXMLAnimation, or at least use your SMIL animation style independent of the attributeType value for presentation attributes. Mutating the DOM attribute is not desired, against the specification and not done by any other SVG viewer.
&gt; 
&gt; I&apos;d like you to understand that I had a misconception about animating presentation attributes with attributeType=&quot;XML&quot; set. I assumed that would go through the setAttribute() code path already, so that&apos;s why I said I&apos;m only preserving &quot;existing behaviour&quot;. That&apos;s of course wrong. We only used the setAttribute() code path for NON presentation attributes, and attributeType=&quot;XML&quot; set.
&gt; 
&gt; I was aware before that _any_ DOM mutation is actually wrong. But as I was under the impression we mutated DOM for presentation attributes, I tried to keep this behaviour in the patch.

Great! So the follow up patch will be quite small.

Btw. Have you seen the problems in comment 31? Is that caused by your patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570237</commentid>
    <comment_count>48</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-04 07:47:09 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; Great! So the follow up patch will be quite small.
Yes uploading it now, with extended tests.
 
&gt; Btw. Have you seen the problems in comment 31? Is that caused by your patch?
Will check that as well today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570238</commentid>
    <comment_count>49</comment_count>
      <attachid>130025</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-04 07:49:29 -0800</bug_when>
    <thetext>Created attachment 130025
Follow-up patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570241</commentid>
    <comment_count>50</comment_count>
      <attachid>130026</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-04 08:08:05 -0800</bug_when>
    <thetext>Created attachment 130026
Follow-up patch v2

Follow-up patch v2 also fixes the regression Adam found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570242</commentid>
    <comment_count>51</comment_count>
      <attachid>130026</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-04 08:21:10 -0800</bug_when>
    <thetext>Comment on attachment 130026
Follow-up patch v2

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

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:362
&gt; +    if (targetElement-&gt;isStyled())
&gt; +        static_cast&lt;SVGStyledElement*&gt;(targetElement)-&gt;setInstanceUpdatesBlocked(true);
&gt; +

In the past we had the early return after this line:

343	    if (targetElement-&gt;isStyled())
344	        static_cast&lt;SVGStyledElement*&gt;(targetElement)-&gt;setInstanceUpdatesBlocked(true);
345	       
346	    bool attributeIsCSSProperty = isTargetAttributeCSSProperty(targetElement, attributeName);
347	    // Stop animation, if attributeType is set to CSS by the user, but the attribute itself is not a CSS property.
348	    if (!attributeIsCSSProperty &amp;&amp; attributeType() == AttributeTypeCSS)
349	        return;

Does this matter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570246</commentid>
    <comment_count>52</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-04 08:41:48 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; In the past we had the early return after this line
&gt; Does this matter?

Well we kept blocking the instance updates if an animation couldn&apos;t be applied. I could construct test cases where it mattered - the old behavior is just wrong, we should only ever block instance updates if we call setAttribute, not if we return early.

Note: the follow-up patch introduces another regression, I&apos;ll have to re-update it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570247</commentid>
    <comment_count>53</comment_count>
      <attachid>130027</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-04 08:46:55 -0800</bug_when>
    <thetext>Created attachment 130027
Follow-up patch v3

Final patch, no regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570248</commentid>
    <comment_count>54</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-04 08:47:16 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; (In reply to comment #51)
&gt; &gt; In the past we had the early return after this line
&gt; &gt; Does this matter?
&gt; 
&gt; Well we kept blocking the instance updates if an animation couldn&apos;t be applied. I could construct test cases where it mattered - the old behavior is just wrong, we should only ever block instance updates if we call setAttribute, not if we return early.
&gt; 
&gt; Note: the follow-up patch introduces another regression, I&apos;ll have to re-update it.

Can you add the test that shows the old failure with instance update to your new patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570250</commentid>
    <comment_count>55</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-04 08:47:34 -0800</bug_when>
    <thetext>*** Bug 80053 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570263</commentid>
    <comment_count>56</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-04 10:57:50 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; Can you add the test that shows the old failure with instance update to your new patch?
It&apos;s animate-elem-31/32-t.svg - pixel test fails with patch v2, works again with v3. Should be sufficient, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570264</commentid>
    <comment_count>57</comment_count>
      <attachid>130027</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-04 11:01:52 -0800</bug_when>
    <thetext>Comment on attachment 130027
Follow-up patch v3

LGTM. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570265</commentid>
    <comment_count>58</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-04 11:06:39 -0800</bug_when>
    <thetext>(In reply to comment #57)
&gt; (From update of attachment 130027 [details])
&gt; LGTM. r=me.
Thanks! Next time I&apos;ll hurry less, to make sure we get it right from the beginning, and we&apos;re all on the same track!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570266</commentid>
    <comment_count>59</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-04 11:08:15 -0800</bug_when>
    <thetext>Committed r109679: &lt;http://trac.webkit.org/changeset/109679&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129252</attachid>
            <date>2012-02-28 07:36:44 -0800</date>
            <delta_ts>2012-02-28 08:02:59 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-79790-20120228163644.patch</filename>
            <type>text/plain</type>
            <size>31376</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTIyMGQwOTAzMDc0NjQy
YWM5MWEwMWYxYTE5YWNlNmE2ZWUzOTQwNS4uYjU0NGYxN2UzODUyMDFjNTYxNGI0ODIxNmY3NWVh
MTNlNmQzNWZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTAyLTI4ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxl
cyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZXh0IHN0ZXAgdG93YXJkcyBlbmFibGluZyBhbmltVmFsIHN1cHBvcnQgZm9yIFhNTCBhdHRy
aWJ1dGUgYW5pbWF0aW9ucy4KKyAgICAgICAgV2hlbiBTVkcgQ1NTIHByb3BlcnRpZXMgYXJlIGFu
aW1hdGVkIHVzaW5nIFNNSUwsIHdlIGN1cnJlbnRseSBtdXRhdGUKKyAgICAgICAgdGhlIHRhcmdl
dCBlbGVtZW50cyBzdHlsZSwgYW5kIGhhdmUgdG8ga2VlcCBhIGJhc2VWYWx1ZSBhcm91bmQgYXMg
U3RyaW5nCisgICAgICAgIHRvIGJlIGFibGUgdG8gcmVjb3ZlciBmcm9tIHRoZSBET00gbXV0YXRp
b25zIGF0IHRoZSBlbmQsIGlmIGZpbGwhPSJmcmVlemUiLgorCisgICAgICAgIFRoZSBhcHByb2Fj
aCByZXF1aXJlZCBieSBTTUlMIGlzIHRvIGtlZXAgYXJvdW5kIGFuIG92ZXJyaWRlIHN0eWxlIGRl
Y2xhcmF0aW9uCisgICAgICAgIHNldCBhbmQgYXBwbHkgaXQgcmlnaHQgYWZ0ZXIgdGhlIGlubGlu
ZSBzdHlsZSBkZWNsYXJhdGlvbnMuIEltcGxlbWVudCB0aGF0CisgICAgICAgIGZpbmFsbHksIHRv
IGF2b2lkIG11dGF0aW5nIHN0eWxlcyBkaXJlY3RseS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OlNWR0FuaW1hdGVFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjphcHBseVJlc3VsdHNUb1RhcmdldCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6ZW5kZWRBY3RpdmVJbnRlcnZhbCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAg
ICAgKFNWR0FuaW1hdGVFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZENTU1Zh
bHVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0VGFyZ2V0QXR0
cmlidXRlQW5pbWF0ZWRYTUxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0QW5pbWF0aW9uU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2hvdWxkQXBwbHlBbmltYXRpb24pOgorICAg
ICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6b3ZlcnJpZGVTdHlsZURlY2wpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjplbnN1cmVPdmVycmlkZVN0
eWxlRGVjbCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKFNWR0VsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6b3ZlcnJpZGVTdHlsZSk6CisgICAg
ICAgICogc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxl
bWVudFJhcmVEYXRhOjpvdmVycmlkZVN0eWxlRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50UmFyZURhdGE6OmVuc3VyZU92ZXJyaWRlU3R5bGVEZWNsKToKKyAgICAgICAgKFNWR0Vs
ZW1lbnRSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmRl
c3Ryb3lPdmVycmlkZVN0eWxlRGVjbCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5oOgorICAgICAgICAoU1ZHU01JTEVsZW1lbnQpOgorCiAyMDEyLTAyLTI4ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNob3cgcmVzb3VyY2UgZGl2aWRlcnMgb24gbWVtb3J5IGNvdW50ZXIgZ3JhcGhzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggMDQ1MjI4NzA3OTU3YjIzNmNh
NWI0YTQzN2M5Yjk1ODE2NjI3YjI3Ny4uOTQ0NGQ3OWYzMTI5Y2FkYzc5YjZiOWJjZGViYmU0ODg5
ZWNmNGJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtMTIx
LDYgKzEyMSw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHRWxl
bWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjZW5kaWYKIApAQCAtMTA2OSw2ICsxMDcw
LDIwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0KQogICAgICAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1h
dGlvbiBvdmVycmlkZSBzdHlsZS4KKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMg
JiYgbV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsK
KyAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogb3ZlcnJpZGVEZWNsID0gc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPm92ZXJyaWRlU3R5bGVEZWNsKCk7CisgICAgICAg
IGlmIChvdmVycmlkZURlY2wpIHsKKyAgICAgICAgICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhv
clJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOworICAgICAgICAgICAgaWYg
KHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlID09IC0xKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlID0gcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZTsKKyAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgb3ZlcnJpZGVEZWNs
KTsKKyAgICAgICAgICAgIHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVt
ZW50KEVsZW1lbnQqIGUpCkBAIC0xMTI0LDYgKzExMzksMTAgQEAgTm9kZSogQ1NTU3R5bGVTZWxl
Y3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVk
Tm9kZUMKICAgICBTdHlsZWRFbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+
KHBhcmVudCk7CiAgICAgaWYgKHAtPmlubGluZVN0eWxlRGVjbCgpKQogICAgICAgICByZXR1cm4g
MDsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlmIChwLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4ocCktPm92ZXJyaWRlU3R5bGVEZWNsKCkpCisgICAgICAgIHJldHVy
biAwOworI2VuZGlmCiAgICAgaWYgKHAtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVz
LmNvbnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTEyNzIsNiArMTI5MSwxMCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoZWxlbWVudC0+
aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5vdmVy
cmlkZVN0eWxlRGVjbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKICAgICBpZiAo
ISFlbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpICE9ICEhbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1
dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlzTGlu
aygpICE9IG1fZWxlbWVudC0+aXNMaW5rKCkpCkBAIC0xMzY5LDYgKzEzOTIsMTAgQEAgUmVuZGVy
U3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAvLyBJZiB0
aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KICAgICBp
ZiAobV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgcmV0dXJuIDA7
CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQo
KSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdHlsZWRFbGVtZW50KS0+b3ZlcnJpZGVT
dHlsZURlY2woKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKICAgICAvLyBJZHMgc3RvcCBz
dHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCiAgICAgaWYg
KG1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFp
bnMobV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAg
ICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKaW5k
ZXggMTNmN2NmOTZiMDdhM2UzN2I5MjE5ZjI0NDQyOWU5MGJlMTBiNjMzMS4uY2FjZjQ4OGUwODFh
OGYxNDhkODYwNmE4YjBiY2JhODg4MThmZGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZUVsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFNW
R0FuaW1hdGVFbGVtZW50OjpTVkdBbmltYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBTVkdBbmltYXRpb25FbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KQogICAgICwgbV9hbmltYXRlZFByb3BlcnR5VHlwZShBbmltYXRlZFN0
cmluZykKKyAgICAsIG1fYWJvdXRUb1N0b3BBbmltYXRpb24oZmFsc2UpCiAgICAgLCBtX2Zyb21Q
cm9wZXJ0eVZhbHVlVHlwZShSZWd1bGFyUHJvcGVydHlWYWx1ZSkKICAgICAsIG1fdG9Qcm9wZXJ0
eVZhbHVlVHlwZShSZWd1bGFyUHJvcGVydHlWYWx1ZSkKIHsKQEAgLTIzMCw2ICsyMzEsMTIgQEAg
dm9pZCBTVkdBbmltYXRlRWxlbWVudDo6YXBwbHlSZXN1bHRzVG9UYXJnZXQoKQogICAgIEFTU0VS
VChtX2FuaW1hdGVkUHJvcGVydHlUeXBlICE9IEFuaW1hdGVkVW5rbm93bik7CiAgICAgQVNTRVJU
KG1fYW5pbWF0ZWRUeXBlKTsKIAorICAgIGlmIChtX2Fib3V0VG9TdG9wQW5pbWF0aW9uKSB7Cisg
ICAgICAgIG1fYWJvdXRUb1N0b3BBbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgcmVzZXRBbmlt
YXRpb25TdGF0ZShtX2FuaW1hdGVkVHlwZS0+dmFsdWVBc1N0cmluZygpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUobV9hbmlt
YXRlZFR5cGUtPnZhbHVlQXNTdHJpbmcoKSk7CiB9CiAgICAgCkBAIC0yNjAsNSArMjY3LDExIEBA
IFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBTVkdBbmltYXRlRWxlbWVudDo6ZW5zdXJlQW5pbWF0
b3IoKQogICAgIHJldHVybiBtX2FuaW1hdG9yLmdldCgpOwogfQogCit2b2lkIFNWR0FuaW1hdGVF
bGVtZW50OjplbmRlZEFjdGl2ZUludGVydmFsKCkKK3sKKyAgICBTVkdBbmltYXRpb25FbGVtZW50
OjplbmRlZEFjdGl2ZUludGVydmFsKCk7CisgICAgbV9hYm91dFRvU3RvcEFuaW1hdGlvbiA9IHRy
dWU7Cit9CisKIH0KICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZUVsZW1lbnQuaAppbmRleCA2OWNiOWE2ZWQ5MjJiOGVhMTE5MWIxMTAzZDUyYjVlNjQ2M2Vl
Y2I2Li5mZWJjMzRkN2MyNWMzNDc1N2ViZGQ3ZDc0Y2ZmYjk1YmFkMjc2Y2JjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaApAQCAtNjUsNiArNjUsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5UmVzdWx0c1RvVGFyZ2V0KCk7CiAgICAgdmlydHVhbCBm
bG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0
cmluZyYgdG9TdHJpbmcpOwogCisgICAgdmlydHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwo
KTsKICAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0RWxlbWVudERpZENoYW5nZShTVkdFbGVtZW50KiB0
YXJnZXRFbGVtZW50KSBPVkVSUklERTsKIAogcHJpdmF0ZToKQEAgLTcyLDYgKzczLDcgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCk7CiAg
ICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgbV9hbmltYXRlZFByb3BlcnR5VHlwZTsKKyAgICBib29s
IG1fYWJvdXRUb1N0b3BBbmltYXRpb247CiAKICAgICBBbmltYXRlZFByb3BlcnR5VmFsdWVUeXBl
IG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlOwogICAgIEFuaW1hdGVkUHJvcGVydHlWYWx1ZVR5cGUg
bV90b1Byb3BlcnR5VmFsdWVUeXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCmluZGV4IDI2NTlkZDlkZjk2ZTZhOTZjNzg5OGExNDcxMDJhNjc5ODNmOGE1MDQu
LjczYTljZGRkYjA0OGNmMzY1YTNkZjA3OWZmMTMyYWQ3YmJmOGMwYTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKQEAgLTMzMCw1MyArMzMwLDk3IEBAIGJv
b2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eShTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50CiAgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5p
bWF0YWJsZUNTU1Byb3BlcnR5KGF0dHJpYnV0ZU5hbWUpOwogfQogCi12b2lkIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZENTU1Zh
bHVlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFoYXNWYWxpZEF0dHJp
YnV0ZVR5cGUoKSkKKyAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgdGFyZ2V0RWxl
bWVudC0+b3ZlcnJpZGVTdHlsZSgpLT5yZW1vdmVQcm9wZXJ0eShhdHRyaWJ1dGVOYW1lLmxvY2Fs
TmFtZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICB0YXJnZXRFbGVtZW50LT5vdmVycmlkZVN0eWxlKCktPnNldFByb3BlcnR5KGF0dHJpYnV0ZU5h
bWUubG9jYWxOYW1lKCksIHZhbHVlLCBlbXB0eVN0cmluZygpLCBBU1NFUlRfTk9fRVhDRVBUSU9O
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkWE1M
VmFsdWUoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICAvLyBGSVhNRTogRGV0YWNo
IGFuaW1WYWwsIGlmIHZhbHVlLmlzTnVsbCgpIC0gb25jZSBhbmltVmFsIHN1cHBvcnQgaXMgZW5h
YmxlZC4KKyAgICB0YXJnZXRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFs
dWUpOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZUFu
aW1hdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKICAgICBTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOwotICAgIFF1YWxpZmllZE5hbWUgYXR0
cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKLSAgICBpZiAoIXRhcmdldEVsZW1l
bnQgfHwgYXR0cmlidXRlTmFtZSA9PSBhbnlRTmFtZSgpIHx8IHZhbHVlLmlzTnVsbCgpKQorICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1l
KCk7CisgICAgU2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkgPSBzaG91bGRBcHBseUFu
aW1hdGlvbih0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICBpZiAoc2hvdWxkQXBw
bHkgPT0gRG9udEFwcGx5QW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBk
b24ndCB3YW50IHRoZSBpbnN0YW5jZSB0cmVlIHRvIGdldCByZWJ1aWxkLiBJbnN0YW5jZXMgYXJl
IHVwZGF0ZWQgaW4gdGhlIGxvb3AgYmVsb3cuCisgICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5
Q1NTQW5pbWF0aW9uKQorICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZENTU1ZhbHVl
KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKKyAgICBlbHNlCisgICAgICAg
IHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkWE1MVmFsdWUodGFyZ2V0RWxlbWVudCwgYXR0cmli
dXRlTmFtZSwgdmFsdWUpOworCiAgICAgaWYgKHRhcmdldEVsZW1lbnQtPmlzU3R5bGVkKCkpCiAg
ICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KS0+c2V0
SW5zdGFuY2VVcGRhdGVzQmxvY2tlZCh0cnVlKTsKLSAgICAgICAgCi0gICAgYm9vbCBhdHRyaWJ1
dGVJc0NTU1Byb3BlcnR5ID0gaXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eSh0YXJnZXRFbGVt
ZW50LCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAvLyBTdG9wIGFuaW1hdGlvbiwgaWYgYXR0cmlidXRl
VHlwZSBpcyBzZXQgdG8gQ1NTIGJ5IHRoZSB1c2VyLCBidXQgdGhlIGF0dHJpYnV0ZSBpdHNlbGYg
aXMgbm90IGEgQ1NTIHByb3BlcnR5LgotICAgIGlmICghYXR0cmlidXRlSXNDU1NQcm9wZXJ0eSAm
JiBhdHRyaWJ1dGVUeXBlKCkgPT0gQXR0cmlidXRlVHlwZUNTUykKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAoYXR0cmlidXRlSXNDU1NQcm9wZXJ0eSkg
ewotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgc2V0IHRoZSBvdmVycmlkZSBzdHlsZSwg
bm90IHRoZSBpbmxpbmUgc3R5bGUuCi0gICAgICAgIC8vIFNhZGx5IG92ZXJyaWRlIHN0eWxlcyBh
cmUgbm90IHlldCBpbXBsZW1lbnRlZC4KLSAgICAgICAgdGFyZ2V0RWxlbWVudC0+c3R5bGUoKS0+
c2V0UHJvcGVydHkoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSwgdmFsdWUsICIiLCBlYyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHNldCB0aGUgJ3ByZXNl
bnRhdGlvbicgdmFsdWUsIG5vdCB0aGUgYWN0dWFsIAotICAgICAgICAvLyBhdHRyaWJ1dGUgdmFs
dWUuIFdoYXRldmVyIHRoYXQgbWVhbnMgaW4gcHJhY3RpY2UuCi0gICAgICAgIHRhcmdldEVsZW1l
bnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7Ci0gICAgfQotICAgIAotICAg
IGlmICh0YXJnZXRFbGVtZW50LT5pc1N0eWxlZCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQo
ZmFsc2UpOwotICAgIAotICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBpcyB1c2VkIGluIGFu
IDx1c2U+IGluc3RhbmNlIHRyZWUsIHVwZGF0ZSB0aGF0IGFzIHdlbGwuCisgICAgLy8gSWYgdGhl
IHRhcmdldCBlbGVtZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyBy
ZXF1aXJpbmcgdGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KICAgICBjb25zdCBIYXNoU2V0
PFNWR0VsZW1lbnRJbnN0YW5jZSo+JiBpbnN0YW5jZXMgPSB0YXJnZXRFbGVtZW50LT5pbnN0YW5j
ZXNGb3JFbGVtZW50KCk7CiAgICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxT
VkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFNWR0VsZW1lbnQqIHNoYWRvd1RyZWVFbGVt
ZW50ID0gKCppdCktPnNoYWRvd1RyZWVFbGVtZW50KCk7CiAgICAgICAgIGlmICghc2hhZG93VHJl
ZUVsZW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZUlz
Q1NTUHJvcGVydHkpCi0gICAgICAgICAgICBzaGFkb3dUcmVlRWxlbWVudC0+c3R5bGUoKS0+c2V0
UHJvcGVydHkoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSwgdmFsdWUsICIiLCBlYyk7CisKKyAg
ICAgICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5Q1NTQW5pbWF0aW9uKQorICAgICAgICAgICAg
c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRDU1NWYWx1ZShzaGFkb3dUcmVlRWxlbWVudCwgYXR0
cmlidXRlTmFtZSwgdmFsdWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaGFkb3dUcmVl
RWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAg
IHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkQ1NTVmFsdWUoc2hhZG93VHJlZUVsZW1lbnQsIGF0
dHJpYnV0ZU5hbWUsIHZhbHVlKTsKKwogICAgICAgICAoKml0KS0+Y29ycmVzcG9uZGluZ1VzZUVs
ZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KKworICAgIGlmICh0YXJnZXRF
bGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50
Kj4odGFyZ2V0RWxlbWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoZmFsc2UpOwogfQot
ICAgIAorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0QW5pbWF0aW9uU3RhdGUoY29u
c3QgU3RyaW5nJiBiYXNlVmFsdWUpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZXh0cmEgY2hlY2sg
d2lsbCBnbyBhd2F5LCBvbmNlIGFuaW1WYWwgaXMgZW5hYmxlZC4KKyAgICBTVkdFbGVtZW50KiB0
YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7CisgICAgU2hvdWxk
QXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkgPSBzaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRF
bGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gRG9udEFwcGx5
QW5pbWF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNGcm96ZW4oKSB8fCBzaG91
bGRBcHBseSA9PSBBcHBseVhNTEFuaW1hdGlvbikKKyAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRl
QW5pbWF0ZWRWYWx1ZShiYXNlVmFsdWUpOworICAgIGVsc2UgLy8gT25seSBDU1MgYW5pbWF0aW9u
cyBzdXBwb3J0IGRldGFjaGluZyBwcmV2aW91c2x5IGFuaW1hdGVkIHByb3BlcnRpZXMgc28gZmFy
LCBpbmRpY2F0aW5nIGJ5IHBhc3NpbmcgYSBudWxsLXN0cmluZy4KKyAgICAgICAgc2V0VGFyZ2V0
QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShTdHJpbmcoKSk7Cit9CisKK1NWR0FuaW1hdGlvbkVsZW1l
bnQ6OlNob3VsZEFwcGx5QW5pbWF0aW9uIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNob3VsZEFwcGx5
QW5pbWF0aW9uKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUpCit7CisgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSB8fCAh
dGFyZ2V0RWxlbWVudCB8fCBhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkpCisgICAgICAgIHJl
dHVybiBEb250QXBwbHlBbmltYXRpb247CisKKyAgICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5
cGUgPSB0aGlzLT5hdHRyaWJ1dGVUeXBlKCk7CisgICAgc3dpdGNoIChhdHRyaWJ1dGVUeXBlKSB7
CisgICAgY2FzZSBBdHRyaWJ1dGVUeXBlQXV0bzoKKyAgICAgICAgLy8gRm9yIGF0dHJpYnV0ZVR5
cGU9ImF1dG8iLCB0cnkgQ1NTIGZpcnN0LiBJZiB0aGF0IGZhaWxzLCB0cnkgWE1MLgorICAgIGNh
c2UgQXR0cmlidXRlVHlwZUNTUzoKKyAgICAgICAgLy8gSWYgYXR0cmlidXRlTmFtZSBpcyBhIGtu
b3duIGFuaW1hdGFibGUgU1ZHIENTUyBwcm9wZXJ0eSwgYXBwbHkgdGhlIGFuaW1hdGlvbi4KKyAg
ICAgICAgaWYgKGlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVudCwgYXR0
cmlidXRlTmFtZSkpCisgICAgICAgICAgICByZXR1cm4gQXBwbHlDU1NBbmltYXRpb247CisgICAg
ICAgIC8vIElmIGF0dHJpYnV0ZU5hbWUgaXMgdW5rbm93biBhbmQgdHRyaWJ1dGVUeXBlIGlzIG5v
dCAnYXV0bycsIGRvbid0IGFwcGx5IHRoZSBhbmltYXRpb24uCisgICAgICAgIGlmIChhdHRyaWJ1
dGVUeXBlID09IEF0dHJpYnV0ZVR5cGVDU1MpCisgICAgICAgICAgICByZXR1cm4gRG9udEFwcGx5
QW5pbWF0aW9uOworICAgICAgICAvLyBGb3IgYXR0cmlidXRlVHlwZT0iYXV0byIsIHRyeSBYTUwg
YW5pbWF0aW9uIG5vdy4KKyAgICBjYXNlIEF0dHJpYnV0ZVR5cGVYTUw6CisgICAgICAgIHJldHVy
biBBcHBseVhNTEFuaW1hdGlvbjsKKyAgICB9OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIERvbnRBcHBseUFuaW1hdGlvbjsKK30KKwogdm9pZCBTVkdBbmltYXRpb25F
bGVtZW50OjpjYWxjdWxhdGVLZXlUaW1lc0ZvckNhbGNNb2RlUGFjZWQoKQogewogICAgIEFTU0VS
VChjYWxjTW9kZSgpID09IENhbGNNb2RlUGFjZWQpOwpAQCAtNTkzLDcgKzYzNyw3IEBAIHZvaWQg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUludGVydmFsKCkKICAgICB9IGVsc2Ug
aWYgKGFuaW1hdGlvbk1vZGUgPT0gUGF0aEFuaW1hdGlvbikKICAgICAgICAgbV9hbmltYXRpb25W
YWxpZCA9IGNhbGNNb2RlID09IENhbGNNb2RlUGFjZWQgfHwgIWZhc3RIYXNBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmtleVBvaW50c0F0dHIpIHx8IChtX2tleVRpbWVzLnNpemUoKSA+IDEgJiYgbV9rZXlU
aW1lcy5zaXplKCkgPT0gbV9rZXlQb2ludHMuc2l6ZSgpKTsKIH0KLSAgICAKKwogdm9pZCBTVkdB
bmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQg
cmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKIHsgICAgCiAgICAgaWYgKCFt
X2FuaW1hdGlvblZhbGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgK
aW5kZXggNDk1YzFiMjQ0MmNiNTE1ZDQ4YmE3MTk2ZTBjZTI1YmJlMmU1ZTljMy4uNzNhMzMxYWIx
MWY0ZWI5YmYxNjNkZjdiYzhiYjgzMzZiYzhhMTM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5oCkBAIC0xMDUsNiArMTA1LDggQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1l
bnQqIHJlc3VsdEVsZW1lbnQpOwogCisgICAgdm9pZCByZXNldEFuaW1hdGlvblN0YXRlKGNvbnN0
IFN0cmluZyYgYmFzZVZhbHVlKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXR0cmli
dXRlQ2hhbmdlZChBdHRyaWJ1dGUqKSBPVkVSUklERTsKIApAQCAtMTIyLDYgKzEyNCwxNCBAQCBw
cml2YXRlOgogICAgIGZsb2F0IGNhbGN1bGF0ZVBlcmNlbnRGb3JGcm9tVG8oZmxvYXQgcGVyY2Vu
dCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY2FsY3VsYXRlS2V5VGltZXNJbmRleChmbG9hdCBwZXJj
ZW50KSBjb25zdDsKIAorICAgIGVudW0gU2hvdWxkQXBwbHlBbmltYXRpb24geworICAgICAgICBE
b250QXBwbHlBbmltYXRpb24sCisgICAgICAgIEFwcGx5Q1NTQW5pbWF0aW9uLAorICAgICAgICBB
cHBseVhNTEFuaW1hdGlvbgorICAgIH07CisKKyAgICBTaG91bGRBcHBseUFuaW1hdGlvbiBzaG91
bGRBcHBseUFuaW1hdGlvbihTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lKTsKKwogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJP
UEVSVElFUyhTVkdBbmltYXRpb25FbGVtZW50KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0JP
T0xFQU4oRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCkKICAgICBFTkRfREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAKaW5kZXggOTMwZjVmNDdhYTcwNDk5NDQxMDYwMTY4ZTgxM2NjNGMwMThhZmEwMC4u
ZmQ5ZDAyZjZhNDVhMGM5MDBiNWYxNzU5ZjJjZWNjMzRlNGY4MjJiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgp
CiAgICAgICAgIEFTU0VSVChpdCAhPSByYXJlRGF0YU1hcC5lbmQoKSk7CiAKICAgICAgICAgU1ZH
RWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHJhcmVEYXRh
LT5kZXN0cm95T3ZlcnJpZGVTdHlsZURlY2wodGhpcyk7CiAgICAgICAgIGlmIChTVkdDdXJzb3JF
bGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmFyZURhdGEtPmN1cnNvckVsZW1lbnQoKSkKICAgICAg
ICAgICAgIGN1cnNvckVsZW1lbnQtPnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICAgICAgaWYgKENT
U0N1cnNvckltYWdlVmFsdWUqIGN1cnNvckltYWdlVmFsdWUgPSByYXJlRGF0YS0+Y3Vyc29ySW1h
Z2VWYWx1ZSgpKQpAQCAtNDg4LDYgKzQ4OSwxOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
VkdFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVyKCkKICAgICByZXR1cm4gZG9jdW1lbnQo
KS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQoY29ycmVzcG9uZGluZ0VsZW1lbnQo
KSwgc3R5bGUsIGZhbHNlIC8qYWxsb3dTaGFyaW5nKi8pOwogfQogCitTdHlsZVByb3BlcnR5U2V0
KiBTVkdFbGVtZW50OjpvdmVycmlkZVN0eWxlRGVjbCgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1Jh
cmVTVkdEYXRhKCkpCisgICAgICAgIHJldHVybiByYXJlU1ZHRGF0YSgpLT5vdmVycmlkZVN0eWxl
RGVjbCgpOworICAgIHJldHVybiAwOworfQorCitTdHlsZVByb3BlcnR5U2V0KiBTVkdFbGVtZW50
OjplbnN1cmVPdmVycmlkZVN0eWxlRGVjbCgpCit7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVTVkdE
YXRhKCktPmVuc3VyZU92ZXJyaWRlU3R5bGVEZWNsKCk7Cit9CisKICNpZm5kZWYgTkRFQlVHCiBi
b29sIFNWR0VsZW1lbnQ6OmlzQW5pbWF0YWJsZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKaW5kZXggNDczNTY5MGIzMDJmOWQ5YzQx
NTc4YTBiNjcxZTgzNzk4OGYxNzY2My4uZjFiOWY0ZDBjMTEzOGNjODk3OWUxNmZiNmU2ZWE5NzI3
ZDMyYTA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCkBAIC0xMDcsNiArMTA3LDEwIEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0FuaW1hdGFibGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogI2VuZGlmCiAKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBvdmVycmlkZVN0eWxl
RGVjbCgpIGNvbnN0OworICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZU92ZXJyaWRlU3R5bGVE
ZWNsKCk7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogb3ZlcnJpZGVTdHlsZSgpIHsgcmV0dXJu
IGVuc3VyZU92ZXJyaWRlU3R5bGVEZWNsKCktPmVuc3VyZUlubGluZUNTU1N0eWxlRGVjbGFyYXRp
b24odGhpcyk7IH0KKwogcHJvdGVjdGVkOgogICAgIFNWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiwgQ29uc3RydWN0aW9uVHlwZSA9IENyZWF0ZVNWR0VsZW1lbnQpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgKaW5kZXggNTAxOTY2MjQxMDQz
Yjk4ZDZjMzdjODJiOWZkYzljY2IxYTgyZTI4ZC4uMGRiYTQ4NDgyNTMzYTU1NTYxYTMzMjcxMjdi
ZWY5MWEzOTAxNTNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRS
YXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaApA
QCAtNzQsNiArNzQsMjQgQEAgcHVibGljOgogICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGN1cnNv
ckltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvckltYWdlVmFsdWU7IH0KICAgICB2
b2lkIHNldEN1cnNvckltYWdlVmFsdWUoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VW
YWx1ZSkgeyBtX2N1cnNvckltYWdlVmFsdWUgPSBjdXJzb3JJbWFnZVZhbHVlOyB9CiAKKyAgICBT
dHlsZVByb3BlcnR5U2V0KiBvdmVycmlkZVN0eWxlRGVjbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3Zl
cnJpZGVTdHlsZURlY2wuZ2V0KCk7IH0KKyAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVPdmVy
cmlkZVN0eWxlRGVjbCgpCisgICAgeworICAgICAgICBpZiAoIW1fb3ZlcnJpZGVTdHlsZURlY2wp
IHsKKyAgICAgICAgICAgIG1fb3ZlcnJpZGVTdHlsZURlY2wgPSBTdHlsZVByb3BlcnR5U2V0Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgIG1fb3ZlcnJpZGVTdHlsZURlY2wtPnNldFN0cmljdFBhcnNp
bmcoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX292ZXJyaWRlU3R5bGVEZWNs
LmdldCgpOworICAgIH0KKworICAgIHZvaWQgZGVzdHJveU92ZXJyaWRlU3R5bGVEZWNsKFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAoIW1fb3ZlcnJpZGVTdHlsZURl
Y2wpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fb3ZlcnJpZGVTdHlsZURlY2wtPmNs
ZWFyUGFyZW50RWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgbV9vdmVycmlkZVN0eWxlRGVjbCA9
IDA7CisgICAgfQorCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4g
bV9lbGVtZW50SW5zdGFuY2VzOwogICAgIFNWR0N1cnNvckVsZW1lbnQqIG1fY3Vyc29yRWxlbWVu
dDsKQEAgLTgxLDYgKzk5LDcgQEAgcHJpdmF0ZToKICAgICBTVkdFbGVtZW50KiBtX2NvcnJlc3Bv
bmRpbmdFbGVtZW50OwogICAgIGJvb2wgbV9pbnN0YW5jZXNVcGRhdGVzQmxvY2tlZCA6IDE7CiAg
ICAgYm9vbCBtX2hhc1BlbmRpbmdSZXNvdXJjZXMgOiAxOworICAgIFJlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBtX292ZXJyaWRlU3R5bGVEZWNsOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCmluZGV4IDllMWRmZDAxNGI4ZTdiMWIyNWM1
ZmE2ZDcwZTJkODA1MDk3ODBjZGQuLjQwMGE3YTZiYTVkOTRiYzExZmY0ZjkzZTY0NDJmMTM5Zjhm
NWFjZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
LmgKQEAgLTExNiwxMSArMTE2LDExIEBAIHByb3RlY3RlZDoKIAogICAgIC8vIFN1Yi1jbGFzc2Vz
IG1heSBuZWVkIHRvIHRha2UgYWN0aW9uIHdoZW4gdGhlIHRhcmdldCBpcyBjaGFuZ2VkLgogICAg
IHZpcnR1YWwgdm9pZCB0YXJnZXRFbGVtZW50RGlkQ2hhbmdlKFNWR0VsZW1lbnQqKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZW5kZWRBY3RpdmVJbnRlcnZhbCgpOwogCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUFuaW1hdGlvbihmbG9hdCBwZXJjZW50LCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxF
bGVtZW50KiByZXN1bHRFbGVtZW50KSA9IDA7Ci0gICAgdm9pZCBlbmRlZEFjdGl2ZUludGVydmFs
KCk7CiAKICAgICBlbnVtIEJlZ2luT3JFbmQgewogICAgICAgICBCZWdpbiwKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3Y2Ew
ZGNjMjJiNDNhM2RlMzdkN2Q2OThmZTg3ZTY0NTMwOTY4MWZhLi4xMWY4NDhjY2M3NmVjMzk4YmE4
YTZkNWM1MDIzOTIzYWFmMWUxNDYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzggQEAKIDIwMTItMDItMjgg
IE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKKyAgICAgICAgSW50
cm9kdWNlIFNNSUwgb3ZlcnJpZGVTdHlsZSwgdG8gbWFrZSBTVkcgc3RvcCBtdXRhdGluZyBDU1Mg
c3R5bGVzIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03OTc5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFNWRyBDU1MgcHJvcGVydHkgYW5pbWF0aW9ucyBhcmVuJ3QgbGVha2VkIGludG8gdGhl
IERPTSBhbnltb3JlLCB1cGRhdGUgdGhlIHRlc3RzLgorCisgICAgICAgICogc3ZnL2FuaW1hdGlv
bnMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3Zn
L2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3ItZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHN2Zy9hbmltYXRpb25zL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1w
cm9wZXJ0eS1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRl
c3RzL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQuanM6CisgICAgICAgIChleHBlY3RUcmFuc3Bh
cmVudCk6CisgICAgICAgIChleHBlY3RPdGhlckNvbG9yKToKKyAgICAgICAgKiBzdmcvYW5pbWF0
aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanM6CisgICAgICAgIChzYW1w
bGUxKToKKyAgICAgICAgKHNhbXBsZTIpOgorICAgICAgICAoc2FtcGxlMyk6CisgICAgICAgICog
c3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmli
dXRlTmFtZS5qczoKKyAgICAgICAgKHNhbXBsZTEpOgorICAgICAgICAoc2FtcGxlMyk6CisgICAg
ICAgICogc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJv
cGVydHkuanM6CisgICAgICAgIChzYW1wbGUxKToKKyAgICAgICAgKHNhbXBsZTIpOgorICAgICAg
ICAoc2FtcGxlMyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL3N2Z3N0
cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUuanM6CisgICAgICAgIChzYW1wbGUx
KToKKyAgICAgICAgKHNhbXBsZTIpOgorICAgICAgICAoc2FtcGxlMyk6CisgICAgICAgICogc3Zn
L2FuaW1hdGlvbnMvc3Znc3RyaW5nLWFuaW1hdGlvbi1mYWxsYmFjay10by1kaXNjcmV0ZS1leHBl
Y3RlZC50eHQ6CisKKzIwMTItMDItMjggIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5u
QHJpbS5jb20+CisKICAgICAgICAgUmViYXNlbGluZSBHdGsgcmVzdWx0cyBhZnRlciByMTA5MDk3
LgogCiAgICAgICAgICogcGxhdGZvcm0vZ3RrL3N2Zy9XM0MtU1ZHLTEuMS1TRS9zdHJ1Y3QtdXNl
LTExLWYtZXhwZWN0ZWQudHh0OgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9z
dmcvYW5pbWF0aW9ucy9hbmltYXRlLWNvbG9yLXRyYW5zcGFyZW50LWV4cGVjdGVkLnR4dAppbmRl
eCA5ZjgyYTAyYjc1NTVlMzUxZWFjZDU1ZmQxM2U0ZWQ3NDY0YzU2MTAwLi5hMzAyNzBkMGZlOTUy
MmIxYTgxYWExMWM0YTQ2NzdhM2ZlZTg4MjUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9hbmltYXRlLWNvbG9yLXRyYW5zcGFyZW50LWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWNvbG9yLXRyYW5zcGFyZW50LWV4cGVj
dGVkLnR4dApAQCAtNSw4ICs1LDEwIEBAIFRlc3RzIHRoYXQgJ3RyYW5zcGFyZW50JyBpcyB0cmVh
dGVkIGFzIGEgdmFsaWQgY29sb3IuCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFT
UyByZWN0LnN0eWxlLmZpbGwgaXMgJyMwMGZmMDAnCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAn
IzdmMDAwMCcKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIGlzICcjMDBmZjAwJwor
UEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgIiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5m
aWxsIGlzICcjN2YwMDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgIiIKIFBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3ItZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3ItZXhwZWN0ZWQu
dHh0CmluZGV4IGYwMzAzZWU0ZjE2ZGRlZjRlNmZkMDkxMmU5OWU0Y2RhY2MyNmUyYTQuLmUxNDQ3
ZDVhYWZkZDA1MDQ2NzE3OTRmNDM5OTJjOWI1YzE4NzRlZjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1cnJlbnRDb2xvci1leHBlY3Rl
ZC50eHQKQEAgLTUsOSArNSwxMiBAQCBUZXN0cyBhbmltYXRpb24gb24gJ2N1cnJlbnRDb2xvcicu
CiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMg
JyNmZjAwMDAnCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnIzgwNDAwMCcKLVBBU1MgcmVjdC5z
dHlsZS5maWxsIGlzICcjMDA4MDAwJworUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwg
aXMgJyNmZjAwMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAiIgorUEFTUyBnZXRDb21wdXRl
ZFN0eWxlKHJlY3QpLmZpbGwgaXMgJyM4MDQwMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAi
IgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwgaXMgJyMwMDgwMDAnCitQQVNTIHJl
Y3Quc3R5bGUuZmlsbCBpcyAiIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBU
RVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmlt
YXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLWV4
cGVjdGVkLnR4dAppbmRleCA4ODY1Y2VhNWI3YzM3ZGVmZGExZjQxMDFhYjdmMTc0NDUwOGQ3Y2M4
Li40Y2JjYWY4ZTg3ZjQ5YmE3NThiZjAyYzgxZjUyY2MyMmQ1OGFlMjc2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0
ZU5hbWUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1h
dGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS1leHBlY3RlZC50eHQKQEAgLTUsOCArNSwx
MCBAQCBUZXN0IGJlaGF2aW9yIG9uIGR5bmFtaWMtdXBkYXRlIG9mIGF0dHJpYnV0ZU5hbWUKIE9u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHJlY3Quc3R5bGUuY29sb3IgaXMgJ3Jn
YigwLCAxMjgsIDApJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyMwMDgwMDAnCitQQVNTIGdl
dENvbXB1dGVkU3R5bGUocmVjdCkuY29sb3IgaXMgJ3JnYigwLCAxMjgsIDApJworUEFTUyByZWN0
LnN0eWxlLmNvbG9yIGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAn
IzAwODAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCiBQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2
Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHktZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS1l
eHBlY3RlZC50eHQKaW5kZXggOWMyYmY5Y2ZlODE3N2RhZmY4NDQ2MzBkMWM4NGIyYzUyNjAyYTgw
NC4uNGFiOTAwOTk0MjQ0ZjE0YmIwNjZkMzQxZjQ2MTY1MmRiYjllNmQzZSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhl
cml0LWNzcy1wcm9wZXJ0eS1leHBlY3RlZC50eHQKQEAgLTUsOSArNSwxMiBAQCBUZXN0cyBhbmlt
YXRpb24gd2l0aCAnaW5oZXJpdCcuCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFT
UyByZWN0LnN0eWxlLmZpbGwgaXMgJyNmZjAwMDAnCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAn
IzgwNDAwMCcKLVBBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjMDA4MDAwJworUEFTUyBnZXRDb21w
dXRlZFN0eWxlKHJlY3QpLmZpbGwgaXMgJyNmZjAwMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBp
cyAiIgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwgaXMgJyM4MDQwMDAnCitQQVNT
IHJlY3Quc3R5bGUuZmlsbCBpcyAiIgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwg
aXMgJyMwMDgwMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAiIgogUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC5q
cyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWNvbG9y
LXRyYW5zcGFyZW50LmpzCmluZGV4IDJlN2ZiNjhhZjhmMjkwMWJlNzA5MDRmYTA2N2QxZjM5NWNm
NTBkY2QuLmQ3ZGZiMDNmM2ExOWNiYjQwMWNhNTc2MzJiMDIyZDZhMTA5MDZjMjAgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWNvbG9y
LXRyYW5zcGFyZW50LmpzCisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10
ZXN0cy9hbmltYXRlLWNvbG9yLXRyYW5zcGFyZW50LmpzCkBAIC0yMSwxMSArMjEsMTMgQEAgcm9v
dFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVjdCk7CiAKIC8vIFNldHVwIGFuaW1hdGlvbiB0ZXN0
CiBmdW5jdGlvbiBleHBlY3RUcmFuc3BhcmVudCgpIHsKLSAgICBzaG91bGRCZSgicmVjdC5zdHls
ZS5maWxsIiwgIicjMDBmZjAwJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJl
Y3QpLmZpbGwiLCAiJyMwMGZmMDAnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0
LnN0eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1bmN0aW9uIGV4cGVjdE90aGVyQ29sb3IoKSB7Ci0g
ICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInIzdmMDAwMCciKTsKKyAgICBzaG91bGRC
ZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIiwgIicjN2YwMDAwJyIpOworICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5maWxsIiwgIiIpOwogfQogCiBmdW5jdGlvbiBl
eGVjdXRlVGVzdCgpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3Nj
cmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5qcyBiL0xheW91dFRlc3RzL3N2Zy9hbmlt
YXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5qcwppbmRleCBjYThhYjRi
YzE2YzQ1Y2ZhYTdlMWYxOTM2YzkzYWJjZWE4OTM2MmU2Li5iYjI4MmFjNDM5M2IwNDFiZDExMmM1
ODAyNDgxNTkxOTNhYTJjZDVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9u
cy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanMKKysrIGIvTGF5b3V0VGVzdHMv
c3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY3VycmVudENvbG9yLmpzCkBAIC0y
NCwxNyArMjQsMjAgQEAgcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVjdCk7CiAvLyBTZXR1
cCBhbmltYXRpb24gdGVzdAogZnVuY3Rpb24gc2FtcGxlMSgpIHsKICAgICAvLyBDaGVjayBpbml0
aWFsL2VuZCBjb25kaXRpb25zCi0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInI2Zm
MDAwMCciKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIiwgIicj
ZmYwMDAwJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5maWxsIiwg
IiIpOwogfQogCiBmdW5jdGlvbiBzYW1wbGUyKCkgewogICAgIC8vIENoZWNrIGhhbGYtdGltZSBj
b25kaXRpb25zCi0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInIzgwNDAwMCciKTsK
KyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIiwgIicjODA0MDAwJyIp
OworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5maWxsIiwgIiIpOwogfQog
CiBmdW5jdGlvbiBzYW1wbGUzKCkgewogICAgIC8vIENoZWNrIGhhbGYtdGltZSBjb25kaXRpb25z
Ci0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInIzAwODAwMCciKTsKKyAgICBzaG91
bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIiwgIicjMDA4MDAwJyIpOworICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5maWxsIiwgIiIpOwogfQogCiBmdW5jdGlv
biBleGVjdXRlVGVzdCgpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L3NjcmlwdC10ZXN0cy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUuanMgYi9M
YXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1keW5hbWljLXVw
ZGF0ZS1hdHRyaWJ1dGVOYW1lLmpzCmluZGV4IDAxM2ViMzU5YWQ0MWJhNzc1ODI2OGEzZjc1YTBh
ZDFhYmNiZjNmYjIuLjY0ZWNkYWVmOWM5ZDM1YTE5MTJiMDRhNDYxZmVjNjFjZjJiZGM3OGQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRl
LWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUuanMKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2Fu
aW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFt
ZS5qcwpAQCAtMjQsNyArMjQsOCBAQCByb290U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChyZWN0KTsK
IAogLy8gU2V0dXAgYW5pbWF0aW9uIHRlc3QKIGZ1bmN0aW9uIHNhbXBsZTEoKSB7Ci0gICAgc2hv
dWxkQmUoInJlY3Quc3R5bGUuY29sb3IiLCAiJ3JnYigwLCAxMjgsIDApJyIpOworICAgIHNob3Vs
ZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmNvbG9yIiwgIidyZ2IoMCwgMTI4LCAwKSciKTsK
KyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuY29sb3IiLCAiIik7CiB9CiAK
IGZ1bmN0aW9uIHNhbXBsZTIoKSB7CkBAIC0zMyw3ICszNCw4IEBAIGZ1bmN0aW9uIHNhbXBsZTIo
KSB7CiB9CiAKIGZ1bmN0aW9uIHNhbXBsZTMoKSB7Ci0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUu
ZmlsbCIsICInIzAwODAwMCciKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0
KS5maWxsIiwgIicjMDA4MDAwJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5z
dHlsZS5maWxsIiwgIiIpOwogfQogCiBmdW5jdGlvbiBleGVjdXRlVGVzdCgpIHsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWluaGVy
aXQtY3NzLXByb3BlcnR5LmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRl
c3RzL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHkuanMKaW5kZXggZmE2NDVkODI0ODU0NWJi
ZTZlZTgyMmJmZjA4ODk5NThlYWU0M2YxZS4uNGExZDY2ODczYjUwYjlkODI2MjE3NmM4NDY4OTQw
ZGQzYTdiNjNmYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0
LXRlc3RzL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHkuanMKKysrIGIvTGF5b3V0VGVzdHMv
c3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHku
anMKQEAgLTI3LDE3ICsyNywyMCBAQCByb290U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChnKTsKIC8v
IFNldHVwIGFuaW1hdGlvbiB0ZXN0CiBmdW5jdGlvbiBzYW1wbGUxKCkgewogICAgIC8vIENoZWNr
IGluaXRpYWwvZW5kIGNvbmRpdGlvbnMKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwg
IicjZmYwMDAwJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwi
LCAiJyNmZjAwMDAnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmZp
bGwiLCAiIik7CiB9CiAKIGZ1bmN0aW9uIHNhbXBsZTIoKSB7CiAgICAgLy8gQ2hlY2sgaGFsZi10
aW1lIGNvbmRpdGlvbnMKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjODA0MDAw
JyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwiLCAiJyM4MDQw
MDAnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmZpbGwiLCAiIik7
CiB9CiAKIGZ1bmN0aW9uIHNhbXBsZTMoKSB7CiAgICAgLy8gQ2hlY2sgaGFsZi10aW1lIGNvbmRp
dGlvbnMKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjMDA4MDAwJyIpOworICAg
IHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwiLCAiJyMwMDgwMDAnIik7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1
bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1h
dGlvbnMvc2NyaXB0LXRlc3RzL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3Jl
dGUuanMgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvc3Znc3RyaW5n
LWFuaW1hdGlvbi1mYWxsYmFjay10by1kaXNjcmV0ZS5qcwppbmRleCBmOTFhN2IyYWFmNjlhY2M3
ODEwNTUxN2FlYjA0NjIzNjA4ZTJiM2I0Li4zY2I3OTQ0MzkxOTE5ZWZlOGIyMGUyODU1NjZkNDQy
NDc2OTgzYzAwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQt
dGVzdHMvc3Znc3RyaW5nLWFuaW1hdGlvbi1mYWxsYmFjay10by1kaXNjcmV0ZS5qcworKysgYi9M
YXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvc3Znc3RyaW5nLWFuaW1hdGlv
bi1mYWxsYmFjay10by1kaXNjcmV0ZS5qcwpAQCAtMjIsMTUgKzIyLDE4IEBAIHJvb3RTVkdFbGVt
ZW50LmFwcGVuZENoaWxkKHJlY3QpOwogLy8gU2V0dXAgYW5pbWF0aW9uIHRlc3QKIGZ1bmN0aW9u
IHNhbXBsZTEoKSB7CiAgICAgLy8gQ2hlY2sgaW5pdGlhbC9lbmQgY29uZGl0aW9ucwotICAgIHNo
b3VsZEJlKCJyZWN0LnN0eWxlLnZpc2liaWxpdHkiLCAiJ3Zpc2libGUnIik7CisgICAgc2hvdWxk
QmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkudmlzaWJpbGl0eSIsICIndmlzaWJsZSciKTsKKyAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUudmlzaWJpbGl0eSIsICIiKTsKIH0K
IAogZnVuY3Rpb24gc2FtcGxlMigpIHsKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS52aXNpYmls
aXR5IiwgIidoaWRkZW4nIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCku
dmlzaWJpbGl0eSIsICInaGlkZGVuJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVj
dC5zdHlsZS52aXNpYmlsaXR5IiwgIiIpOwogfQogCiBmdW5jdGlvbiBzYW1wbGUzKCkgewotICAg
IHNob3VsZEJlKCJyZWN0LnN0eWxlLnZpc2liaWxpdHkiLCAiJ3Zpc2libGUnIik7CisgICAgc2hv
dWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkudmlzaWJpbGl0eSIsICIndmlzaWJsZSciKTsK
KyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUudmlzaWJpbGl0eSIsICIiKTsK
IH0KIAogZnVuY3Rpb24gZXhlY3V0ZVRlc3QoKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dmcvYW5pbWF0aW9ucy9zdmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Z3N0cmluZy1hbmltYXRp
b24tZmFsbGJhY2stdG8tZGlzY3JldGUtZXhwZWN0ZWQudHh0CmluZGV4IGQxNTM2NmI4MzdmODZj
NjIzNDkxMTM0YTg2MWZkNmQyNTViNWVhOWMuLjViOWZjMWM2ZDg5MGM2ZjYxZTI1YTVjOTg1ODk1
MTVkMjEyYTU0MGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Z3N0
cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8t
ZGlzY3JldGUtZXhwZWN0ZWQudHh0CkBAIC01LDEwICs1LDE0IEBAIFRlc3RzIGZhbGxiYWNrIHRv
IGNhbGNNb2RlPSdkaXNjcmV0ZScgb24gYW5pbWF0aW9uIG9mIFNWR1N0cmluZyB3aXRoICd2YWx1
ZXMnLgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1MgcmVjdC5zdHlsZS52aXNp
YmlsaXR5IGlzICd2aXNpYmxlJwotUEFTUyByZWN0LnN0eWxlLnZpc2liaWxpdHkgaXMgJ2hpZGRl
bicKLVBBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICd2aXNpYmxlJwotUEFTUyByZWN0LnN0
eWxlLnZpc2liaWxpdHkgaXMgJ3Zpc2libGUnCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCku
dmlzaWJpbGl0eSBpcyAndmlzaWJsZScKK1BBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICIi
CitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkudmlzaWJpbGl0eSBpcyAnaGlkZGVuJworUEFT
UyByZWN0LnN0eWxlLnZpc2liaWxpdHkgaXMgIiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0
KS52aXNpYmlsaXR5IGlzICd2aXNpYmxlJworUEFTUyByZWN0LnN0eWxlLnZpc2liaWxpdHkgaXMg
IiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS52aXNpYmlsaXR5IGlzICd2aXNpYmxlJwor
UEFTUyByZWN0LnN0eWxlLnZpc2liaWxpdHkgaXMgIiIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129255</attachid>
            <date>2012-02-28 08:03:09 -0800</date>
            <delta_ts>2012-02-29 01:22:27 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-79790-20120228170307.patch</filename>
            <type>text/plain</type>
            <size>31374</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTIyMGQwOTAzMDc0NjQy
YWM5MWEwMWYxYTE5YWNlNmE2ZWUzOTQwNS4uYjU0NGYxN2UzODUyMDFjNTYxNGI0ODIxNmY3NWVh
MTNlNmQzNWZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTAyLTI4ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxl
cyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZXh0IHN0ZXAgdG93YXJkcyBlbmFibGluZyBhbmltVmFsIHN1cHBvcnQgZm9yIFhNTCBhdHRy
aWJ1dGUgYW5pbWF0aW9ucy4KKyAgICAgICAgV2hlbiBTVkcgQ1NTIHByb3BlcnRpZXMgYXJlIGFu
aW1hdGVkIHVzaW5nIFNNSUwsIHdlIGN1cnJlbnRseSBtdXRhdGUKKyAgICAgICAgdGhlIHRhcmdl
dCBlbGVtZW50cyBzdHlsZSwgYW5kIGhhdmUgdG8ga2VlcCBhIGJhc2VWYWx1ZSBhcm91bmQgYXMg
U3RyaW5nCisgICAgICAgIHRvIGJlIGFibGUgdG8gcmVjb3ZlciBmcm9tIHRoZSBET00gbXV0YXRp
b25zIGF0IHRoZSBlbmQsIGlmIGZpbGwhPSJmcmVlemUiLgorCisgICAgICAgIFRoZSBhcHByb2Fj
aCByZXF1aXJlZCBieSBTTUlMIGlzIHRvIGtlZXAgYXJvdW5kIGFuIG92ZXJyaWRlIHN0eWxlIGRl
Y2xhcmF0aW9uCisgICAgICAgIHNldCBhbmQgYXBwbHkgaXQgcmlnaHQgYWZ0ZXIgdGhlIGlubGlu
ZSBzdHlsZSBkZWNsYXJhdGlvbnMuIEltcGxlbWVudCB0aGF0CisgICAgICAgIGZpbmFsbHksIHRv
IGF2b2lkIG11dGF0aW5nIHN0eWxlcyBkaXJlY3RseS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OlNWR0FuaW1hdGVFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjphcHBseVJlc3VsdHNUb1RhcmdldCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6ZW5kZWRBY3RpdmVJbnRlcnZhbCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAg
ICAgKFNWR0FuaW1hdGVFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZENTU1Zh
bHVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0VGFyZ2V0QXR0
cmlidXRlQW5pbWF0ZWRYTUxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0QW5pbWF0aW9uU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2hvdWxkQXBwbHlBbmltYXRpb24pOgorICAg
ICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6b3ZlcnJpZGVTdHlsZURlY2wpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjplbnN1cmVPdmVycmlkZVN0
eWxlRGVjbCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKFNWR0VsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6b3ZlcnJpZGVTdHlsZSk6CisgICAg
ICAgICogc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxl
bWVudFJhcmVEYXRhOjpvdmVycmlkZVN0eWxlRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50UmFyZURhdGE6OmVuc3VyZU92ZXJyaWRlU3R5bGVEZWNsKToKKyAgICAgICAgKFNWR0Vs
ZW1lbnRSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmRl
c3Ryb3lPdmVycmlkZVN0eWxlRGVjbCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5oOgorICAgICAgICAoU1ZHU01JTEVsZW1lbnQpOgorCiAyMDEyLTAyLTI4ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNob3cgcmVzb3VyY2UgZGl2aWRlcnMgb24gbWVtb3J5IGNvdW50ZXIgZ3JhcGhzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggMDQ1MjI4NzA3OTU3YjIzNmNh
NWI0YTQzN2M5Yjk1ODE2NjI3YjI3Ny4uOTQ0NGQ3OWYzMTI5Y2FkYzc5YjZiOWJjZGViYmU0ODg5
ZWNmNGJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtMTIx
LDYgKzEyMSw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHRWxl
bWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjZW5kaWYKIApAQCAtMTA2OSw2ICsxMDcw
LDIwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0KQogICAgICAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1h
dGlvbiBvdmVycmlkZSBzdHlsZS4KKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMg
JiYgbV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsK
KyAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogb3ZlcnJpZGVEZWNsID0gc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPm92ZXJyaWRlU3R5bGVEZWNsKCk7CisgICAgICAg
IGlmIChvdmVycmlkZURlY2wpIHsKKyAgICAgICAgICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhv
clJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOworICAgICAgICAgICAgaWYg
KHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlID09IC0xKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlID0gcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZTsKKyAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgb3ZlcnJpZGVEZWNs
KTsKKyAgICAgICAgICAgIHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVt
ZW50KEVsZW1lbnQqIGUpCkBAIC0xMTI0LDYgKzExMzksMTAgQEAgTm9kZSogQ1NTU3R5bGVTZWxl
Y3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVk
Tm9kZUMKICAgICBTdHlsZWRFbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+
KHBhcmVudCk7CiAgICAgaWYgKHAtPmlubGluZVN0eWxlRGVjbCgpKQogICAgICAgICByZXR1cm4g
MDsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlmIChwLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4ocCktPm92ZXJyaWRlU3R5bGVEZWNsKCkpCisgICAgICAgIHJldHVy
biAwOworI2VuZGlmCiAgICAgaWYgKHAtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVz
LmNvbnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTEyNzIsNiArMTI5MSwxMCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoZWxlbWVudC0+
aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5vdmVy
cmlkZVN0eWxlRGVjbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKICAgICBpZiAo
ISFlbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpICE9ICEhbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1
dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlzTGlu
aygpICE9IG1fZWxlbWVudC0+aXNMaW5rKCkpCkBAIC0xMzY5LDYgKzEzOTIsMTAgQEAgUmVuZGVy
U3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAvLyBJZiB0
aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KICAgICBp
ZiAobV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgcmV0dXJuIDA7
CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQo
KSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdHlsZWRFbGVtZW50KS0+b3ZlcnJpZGVT
dHlsZURlY2woKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKICAgICAvLyBJZHMgc3RvcCBz
dHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCiAgICAgaWYg
KG1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFp
bnMobV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAg
ICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKaW5k
ZXggMTNmN2NmOTZiMDdhM2UzN2I5MjE5ZjI0NDQyOWU5MGJlMTBiNjMzMS4uY2FjZjQ4OGUwODFh
OGYxNDhkODYwNmE4YjBiY2JhODg4MThmZGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZUVsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFNW
R0FuaW1hdGVFbGVtZW50OjpTVkdBbmltYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBTVkdBbmltYXRpb25FbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KQogICAgICwgbV9hbmltYXRlZFByb3BlcnR5VHlwZShBbmltYXRlZFN0
cmluZykKKyAgICAsIG1fYWJvdXRUb1N0b3BBbmltYXRpb24oZmFsc2UpCiAgICAgLCBtX2Zyb21Q
cm9wZXJ0eVZhbHVlVHlwZShSZWd1bGFyUHJvcGVydHlWYWx1ZSkKICAgICAsIG1fdG9Qcm9wZXJ0
eVZhbHVlVHlwZShSZWd1bGFyUHJvcGVydHlWYWx1ZSkKIHsKQEAgLTIzMCw2ICsyMzEsMTIgQEAg
dm9pZCBTVkdBbmltYXRlRWxlbWVudDo6YXBwbHlSZXN1bHRzVG9UYXJnZXQoKQogICAgIEFTU0VS
VChtX2FuaW1hdGVkUHJvcGVydHlUeXBlICE9IEFuaW1hdGVkVW5rbm93bik7CiAgICAgQVNTRVJU
KG1fYW5pbWF0ZWRUeXBlKTsKIAorICAgIGlmIChtX2Fib3V0VG9TdG9wQW5pbWF0aW9uKSB7Cisg
ICAgICAgIG1fYWJvdXRUb1N0b3BBbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgcmVzZXRBbmlt
YXRpb25TdGF0ZShtX2FuaW1hdGVkVHlwZS0+dmFsdWVBc1N0cmluZygpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUobV9hbmlt
YXRlZFR5cGUtPnZhbHVlQXNTdHJpbmcoKSk7CiB9CiAgICAgCkBAIC0yNjAsNSArMjY3LDExIEBA
IFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBTVkdBbmltYXRlRWxlbWVudDo6ZW5zdXJlQW5pbWF0
b3IoKQogICAgIHJldHVybiBtX2FuaW1hdG9yLmdldCgpOwogfQogCit2b2lkIFNWR0FuaW1hdGVF
bGVtZW50OjplbmRlZEFjdGl2ZUludGVydmFsKCkKK3sKKyAgICBTVkdBbmltYXRpb25FbGVtZW50
OjplbmRlZEFjdGl2ZUludGVydmFsKCk7CisgICAgbV9hYm91dFRvU3RvcEFuaW1hdGlvbiA9IHRy
dWU7Cit9CisKIH0KICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZUVsZW1lbnQuaAppbmRleCA2OWNiOWE2ZWQ5MjJiOGVhMTE5MWIxMTAzZDUyYjVlNjQ2M2Vl
Y2I2Li5mZWJjMzRkN2MyNWMzNDc1N2ViZGQ3ZDc0Y2ZmYjk1YmFkMjc2Y2JjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaApAQCAtNjUsNiArNjUsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5UmVzdWx0c1RvVGFyZ2V0KCk7CiAgICAgdmlydHVhbCBm
bG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0
cmluZyYgdG9TdHJpbmcpOwogCisgICAgdmlydHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwo
KTsKICAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0RWxlbWVudERpZENoYW5nZShTVkdFbGVtZW50KiB0
YXJnZXRFbGVtZW50KSBPVkVSUklERTsKIAogcHJpdmF0ZToKQEAgLTcyLDYgKzczLDcgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCk7CiAg
ICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgbV9hbmltYXRlZFByb3BlcnR5VHlwZTsKKyAgICBib29s
IG1fYWJvdXRUb1N0b3BBbmltYXRpb247CiAKICAgICBBbmltYXRlZFByb3BlcnR5VmFsdWVUeXBl
IG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlOwogICAgIEFuaW1hdGVkUHJvcGVydHlWYWx1ZVR5cGUg
bV90b1Byb3BlcnR5VmFsdWVUeXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCmluZGV4IDI2NTlkZDlkZjk2ZTZhOTZjNzg5OGExNDcxMDJhNjc5ODNmOGE1MDQu
LmQyNzY3YTE0MDljNzk3YzljZjYyZGMxMmM1NDYzOGY5NTg2ZDdlNzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKQEAgLTMzMCw1MyArMzMwLDk1IEBAIGJv
b2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eShTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50CiAgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5p
bWF0YWJsZUNTU1Byb3BlcnR5KGF0dHJpYnV0ZU5hbWUpOwogfQogCi12b2lkIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZENTU1Zh
bHVlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFoYXNWYWxpZEF0dHJp
YnV0ZVR5cGUoKSkKKyAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgdGFyZ2V0RWxl
bWVudC0+b3ZlcnJpZGVTdHlsZSgpLT5yZW1vdmVQcm9wZXJ0eShhdHRyaWJ1dGVOYW1lLmxvY2Fs
TmFtZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICB0YXJnZXRFbGVtZW50LT5vdmVycmlkZVN0eWxlKCktPnNldFByb3BlcnR5KGF0dHJpYnV0ZU5h
bWUubG9jYWxOYW1lKCksIHZhbHVlLCBlbXB0eVN0cmluZygpLCBBU1NFUlRfTk9fRVhDRVBUSU9O
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkWE1M
VmFsdWUoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICAvLyBGSVhNRTogRGV0YWNo
IGFuaW1WYWwsIGlmIHZhbHVlLmlzTnVsbCgpIC0gb25jZSBhbmltVmFsIHN1cHBvcnQgaXMgZW5h
YmxlZC4KKyAgICB0YXJnZXRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFs
dWUpOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZUFu
aW1hdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKICAgICBTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOwotICAgIFF1YWxpZmllZE5hbWUgYXR0
cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKLSAgICBpZiAoIXRhcmdldEVsZW1l
bnQgfHwgYXR0cmlidXRlTmFtZSA9PSBhbnlRTmFtZSgpIHx8IHZhbHVlLmlzTnVsbCgpKQorICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1l
KCk7CisgICAgU2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkgPSBzaG91bGRBcHBseUFu
aW1hdGlvbih0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICBpZiAoc2hvdWxkQXBw
bHkgPT0gRG9udEFwcGx5QW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBk
b24ndCB3YW50IHRoZSBpbnN0YW5jZSB0cmVlIHRvIGdldCByZWJ1aWxkLiBJbnN0YW5jZXMgYXJl
IHVwZGF0ZWQgaW4gdGhlIGxvb3AgYmVsb3cuCisgICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5
Q1NTQW5pbWF0aW9uKQorICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZENTU1ZhbHVl
KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKKyAgICBlbHNlCisgICAgICAg
IHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkWE1MVmFsdWUodGFyZ2V0RWxlbWVudCwgYXR0cmli
dXRlTmFtZSwgdmFsdWUpOworCiAgICAgaWYgKHRhcmdldEVsZW1lbnQtPmlzU3R5bGVkKCkpCiAg
ICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KS0+c2V0
SW5zdGFuY2VVcGRhdGVzQmxvY2tlZCh0cnVlKTsKLSAgICAgICAgCi0gICAgYm9vbCBhdHRyaWJ1
dGVJc0NTU1Byb3BlcnR5ID0gaXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eSh0YXJnZXRFbGVt
ZW50LCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAvLyBTdG9wIGFuaW1hdGlvbiwgaWYgYXR0cmlidXRl
VHlwZSBpcyBzZXQgdG8gQ1NTIGJ5IHRoZSB1c2VyLCBidXQgdGhlIGF0dHJpYnV0ZSBpdHNlbGYg
aXMgbm90IGEgQ1NTIHByb3BlcnR5LgotICAgIGlmICghYXR0cmlidXRlSXNDU1NQcm9wZXJ0eSAm
JiBhdHRyaWJ1dGVUeXBlKCkgPT0gQXR0cmlidXRlVHlwZUNTUykKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAoYXR0cmlidXRlSXNDU1NQcm9wZXJ0eSkg
ewotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgc2V0IHRoZSBvdmVycmlkZSBzdHlsZSwg
bm90IHRoZSBpbmxpbmUgc3R5bGUuCi0gICAgICAgIC8vIFNhZGx5IG92ZXJyaWRlIHN0eWxlcyBh
cmUgbm90IHlldCBpbXBsZW1lbnRlZC4KLSAgICAgICAgdGFyZ2V0RWxlbWVudC0+c3R5bGUoKS0+
c2V0UHJvcGVydHkoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSwgdmFsdWUsICIiLCBlYyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHNldCB0aGUgJ3ByZXNl
bnRhdGlvbicgdmFsdWUsIG5vdCB0aGUgYWN0dWFsIAotICAgICAgICAvLyBhdHRyaWJ1dGUgdmFs
dWUuIFdoYXRldmVyIHRoYXQgbWVhbnMgaW4gcHJhY3RpY2UuCi0gICAgICAgIHRhcmdldEVsZW1l
bnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7Ci0gICAgfQotICAgIAotICAg
IGlmICh0YXJnZXRFbGVtZW50LT5pc1N0eWxlZCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQo
ZmFsc2UpOwotICAgIAotICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBpcyB1c2VkIGluIGFu
IDx1c2U+IGluc3RhbmNlIHRyZWUsIHVwZGF0ZSB0aGF0IGFzIHdlbGwuCisgICAgLy8gSWYgdGhl
IHRhcmdldCBlbGVtZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyBy
ZXF1aXJpbmcgdGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KICAgICBjb25zdCBIYXNoU2V0
PFNWR0VsZW1lbnRJbnN0YW5jZSo+JiBpbnN0YW5jZXMgPSB0YXJnZXRFbGVtZW50LT5pbnN0YW5j
ZXNGb3JFbGVtZW50KCk7CiAgICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxT
VkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFNWR0VsZW1lbnQqIHNoYWRvd1RyZWVFbGVt
ZW50ID0gKCppdCktPnNoYWRvd1RyZWVFbGVtZW50KCk7CiAgICAgICAgIGlmICghc2hhZG93VHJl
ZUVsZW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZUlz
Q1NTUHJvcGVydHkpCi0gICAgICAgICAgICBzaGFkb3dUcmVlRWxlbWVudC0+c3R5bGUoKS0+c2V0
UHJvcGVydHkoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSwgdmFsdWUsICIiLCBlYyk7CisKKyAg
ICAgICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5Q1NTQW5pbWF0aW9uKQorICAgICAgICAgICAg
c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRDU1NWYWx1ZShzaGFkb3dUcmVlRWxlbWVudCwgYXR0
cmlidXRlTmFtZSwgdmFsdWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaGFkb3dUcmVl
RWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKLSAgICAgICAgKCpp
dCktPmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAg
ICAgICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkQ1NTVmFsdWUoc2hhZG93VHJlZUVs
ZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKICAgICB9CisKKyAgICBpZiAodGFyZ2V0RWxl
bWVudC0+aXNTdHlsZWQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+
KHRhcmdldEVsZW1lbnQpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGZhbHNlKTsKIH0KLSAg
ICAKKwordm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpyZXNldEFuaW1hdGlvblN0YXRlKGNvbnN0
IFN0cmluZyYgYmFzZVZhbHVlKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGV4dHJhIGNoZWNrIHdp
bGwgZ28gYXdheSwgb25jZSBhbmltVmFsIGlzIGVuYWJsZWQuCisgICAgU1ZHRWxlbWVudCogdGFy
Z2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgpOworICAgIFNob3VsZEFw
cGx5QW5pbWF0aW9uIHNob3VsZEFwcGx5ID0gc2hvdWxkQXBwbHlBbmltYXRpb24odGFyZ2V0RWxl
bWVudCwgYXR0cmlidXRlTmFtZSk7CisgICAgaWYgKHNob3VsZEFwcGx5ID09IERvbnRBcHBseUFu
aW1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzRnJvemVuKCkgfHwgc2hvdWxk
QXBwbHkgPT0gQXBwbHlYTUxBbmltYXRpb24pCisgICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZUFu
aW1hdGVkVmFsdWUoYmFzZVZhbHVlKTsKKyAgICBlbHNlIC8vIE9ubHkgQ1NTIGFuaW1hdGlvbnMg
c3VwcG9ydCBkZXRhY2hpbmcgcHJldmlvdXNseSBhbmltYXRlZCBwcm9wZXJ0aWVzIHNvIGZhciwg
aW5kaWNhdGluZyBieSBwYXNzaW5nIGEgbnVsbC1zdHJpbmcuCisgICAgICAgIHNldFRhcmdldEF0
dHJpYnV0ZUFuaW1hdGVkVmFsdWUoU3RyaW5nKCkpOworfQorCitTVkdBbmltYXRpb25FbGVtZW50
OjpTaG91bGRBcHBseUFuaW1hdGlvbiBTVkdBbmltYXRpb25FbGVtZW50OjpzaG91bGRBcHBseUFu
aW1hdGlvbihTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lKQoreworICAgIGlmICghaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgfHwgIXRh
cmdldEVsZW1lbnQgfHwgYXR0cmlidXRlTmFtZSA9PSBhbnlRTmFtZSgpKQorICAgICAgICByZXR1
cm4gRG9udEFwcGx5QW5pbWF0aW9uOworCisgICAgQXR0cmlidXRlVHlwZSBhdHRyaWJ1dGVUeXBl
ID0gdGhpcy0+YXR0cmlidXRlVHlwZSgpOworICAgIHN3aXRjaCAoYXR0cmlidXRlVHlwZSkgewor
ICAgIGNhc2UgQXR0cmlidXRlVHlwZUF1dG86CisgICAgICAgIC8vIEZvciBhdHRyaWJ1dGVUeXBl
PSJhdXRvIiwgdHJ5IENTUyBmaXJzdC4gSWYgdGhhdCBmYWlscywgdHJ5IFhNTC4KKyAgICBjYXNl
IEF0dHJpYnV0ZVR5cGVDU1M6CisgICAgICAgIC8vIElmIGF0dHJpYnV0ZU5hbWUgaXMgYSBrbm93
biBhbmltYXRhYmxlIFNWRyBDU1MgcHJvcGVydHksIGFwcGx5IHRoZSBhbmltYXRpb24uCisgICAg
ICAgIGlmIChpc1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJp
YnV0ZU5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIEFwcGx5Q1NTQW5pbWF0aW9uOworICAgICAg
ICAvLyBJZiBhdHRyaWJ1dGVOYW1lIGlzIHVua25vd24gYW5kIHR0cmlidXRlVHlwZSBpcyBub3Qg
J2F1dG8nLCBkb24ndCBhcHBseSB0aGUgYW5pbWF0aW9uLgorICAgICAgICBpZiAoYXR0cmlidXRl
VHlwZSA9PSBBdHRyaWJ1dGVUeXBlQ1NTKQorICAgICAgICAgICAgcmV0dXJuIERvbnRBcHBseUFu
aW1hdGlvbjsKKyAgICAgICAgLy8gRm9yIGF0dHJpYnV0ZVR5cGU9ImF1dG8iLCB0cnkgWE1MIGFu
aW1hdGlvbiBub3cuCisgICAgY2FzZSBBdHRyaWJ1dGVUeXBlWE1MOgorICAgICAgICByZXR1cm4g
QXBwbHlYTUxBbmltYXRpb247CisgICAgfTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBEb250QXBwbHlBbmltYXRpb247Cit9CisKIHZvaWQgU1ZHQW5pbWF0aW9uRWxl
bWVudDo6Y2FsY3VsYXRlS2V5VGltZXNGb3JDYWxjTW9kZVBhY2VkKCkKIHsKICAgICBBU1NFUlQo
Y2FsY01vZGUoKSA9PSBDYWxjTW9kZVBhY2VkKTsKQEAgLTU5Myw3ICs2MzUsNyBAQCB2b2lkIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpCiAgICAgfSBlbHNlIGlm
IChhbmltYXRpb25Nb2RlID09IFBhdGhBbmltYXRpb24pCiAgICAgICAgIG1fYW5pbWF0aW9uVmFs
aWQgPSBjYWxjTW9kZSA9PSBDYWxjTW9kZVBhY2VkIHx8ICFmYXN0SGFzQXR0cmlidXRlKFNWR05h
bWVzOjprZXlQb2ludHNBdHRyKSB8fCAobV9rZXlUaW1lcy5zaXplKCkgPiAxICYmIG1fa2V5VGlt
ZXMuc2l6ZSgpID09IG1fa2V5UG9pbnRzLnNpemUoKSk7CiB9Ci0gICAgCisKIHZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJl
cGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpCiB7ICAgIAogICAgIGlmICghbV9h
bmltYXRpb25WYWxpZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRp
b25FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCmlu
ZGV4IDQ5NWMxYjI0NDJjYjUxNWQ0OGJhNzE5NmUwY2UyNWJiZTJlNWU5YzMuLjczYTMzMWFiMTFm
NGViOWJmMTYzZGY3YmM4YmI4MzM2YmM4YTEzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuaApAQCAtMTA1LDYgKzEwNSw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgc3RhcnRlZEFjdGl2ZUludGVydmFsKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUFuaW1hdGlvbihmbG9hdCBwZXJjZW50LCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50
KiByZXN1bHRFbGVtZW50KTsKIAorICAgIHZvaWQgcmVzZXRBbmltYXRpb25TdGF0ZShjb25zdCBT
dHJpbmcmIGJhc2VWYWx1ZSk7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0
ZUNoYW5nZWQoQXR0cmlidXRlKikgT1ZFUlJJREU7CiAKQEAgLTEyMiw2ICsxMjQsMTQgQEAgcHJp
dmF0ZToKICAgICBmbG9hdCBjYWxjdWxhdGVQZXJjZW50Rm9yRnJvbVRvKGZsb2F0IHBlcmNlbnQp
IGNvbnN0OwogICAgIHVuc2lnbmVkIGNhbGN1bGF0ZUtleVRpbWVzSW5kZXgoZmxvYXQgcGVyY2Vu
dCkgY29uc3Q7CiAKKyAgICBlbnVtIFNob3VsZEFwcGx5QW5pbWF0aW9uIHsKKyAgICAgICAgRG9u
dEFwcGx5QW5pbWF0aW9uLAorICAgICAgICBBcHBseUNTU0FuaW1hdGlvbiwKKyAgICAgICAgQXBw
bHlYTUxBbmltYXRpb24KKyAgICB9OworCisgICAgU2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxk
QXBwbHlBbmltYXRpb24oU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlTmFtZSk7CisKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BF
UlRJRVMoU1ZHQW5pbWF0aW9uRWxlbWVudCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9CT09M
RUFOKEV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQp
CiAgICAgRU5EX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCmluZGV4IDkzMGY1ZjQ3YWE3MDQ5OTQ0MTA2MDE2OGU4MTNjYzRjMDE4YWZhMDAuLmZk
OWQwMmY2YTQ1YTBjOTAwYjVmMTc1OWYyY2VjYzM0ZTRmODIyYmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5jcHAKQEAgLTc4LDYgKzc4LDcgQEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQog
ICAgICAgICBBU1NFUlQoaXQgIT0gcmFyZURhdGFNYXAuZW5kKCkpOwogCiAgICAgICAgIFNWR0Vs
ZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBpdC0+c2Vjb25kOworICAgICAgICByYXJlRGF0YS0+
ZGVzdHJveU92ZXJyaWRlU3R5bGVEZWNsKHRoaXMpOwogICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxl
bWVudCogY3Vyc29yRWxlbWVudCA9IHJhcmVEYXRhLT5jdXJzb3JFbGVtZW50KCkpCiAgICAgICAg
ICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7CiAgICAgICAgIGlmIChDU1ND
dXJzb3JJbWFnZVZhbHVlKiBjdXJzb3JJbWFnZVZhbHVlID0gcmFyZURhdGEtPmN1cnNvckltYWdl
VmFsdWUoKSkKQEAgLTQ4OCw2ICs0ODksMTggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU1ZH
RWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcigpCiAgICAgcmV0dXJuIGRvY3VtZW50KCkt
PnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KGNvcnJlc3BvbmRpbmdFbGVtZW50KCks
IHN0eWxlLCBmYWxzZSAvKmFsbG93U2hhcmluZyovKTsKIH0KIAorU3R5bGVQcm9wZXJ0eVNldCog
U1ZHRWxlbWVudDo6b3ZlcnJpZGVTdHlsZURlY2woKSBjb25zdAoreworICAgIGlmIChoYXNSYXJl
U1ZHRGF0YSgpKQorICAgICAgICByZXR1cm4gcmFyZVNWR0RhdGEoKS0+b3ZlcnJpZGVTdHlsZURl
Y2woKTsKKyAgICByZXR1cm4gMDsKK30KKworU3R5bGVQcm9wZXJ0eVNldCogU1ZHRWxlbWVudDo6
ZW5zdXJlT3ZlcnJpZGVTdHlsZURlY2woKQoreworICAgIHJldHVybiBlbnN1cmVSYXJlU1ZHRGF0
YSgpLT5lbnN1cmVPdmVycmlkZVN0eWxlRGVjbCgpOworfQorCiAjaWZuZGVmIE5ERUJVRwogYm9v
bCBTVkdFbGVtZW50Ojppc0FuaW1hdGFibGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCmluZGV4IDQ3MzU2OTBiMzAyZjlkOWM0MTU3
OGEwYjY3MWU4Mzc5ODhmMTc2NjMuLmYxYjlmNGQwYzExMzhjYzg5NzllMTZmYjZlNmVhOTcyN2Qz
MmEwOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaApAQCAtMTA3LDYgKzEwNywxMCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgaXNBbmltYXRhYmxlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICNlbmRpZgogCisgICAgU3R5bGVQcm9wZXJ0eVNldCogb3ZlcnJpZGVTdHlsZURl
Y2woKSBjb25zdDsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVPdmVycmlkZVN0eWxlRGVj
bCgpOworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIG92ZXJyaWRlU3R5bGUoKSB7IHJldHVybiBl
bnN1cmVPdmVycmlkZVN0eWxlRGVjbCgpLT5lbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9u
KHRoaXMpOyB9CisKIHByb3RlY3RlZDoKICAgICBTVkdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCosIENvbnN0cnVjdGlvblR5cGUgPSBDcmVhdGVTVkdFbGVtZW50KTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCmluZGV4IDUwMTk2NjI0MTA0M2I5
OGQ2YzM3YzgyYjlmZGM5Y2NiMWE4MmUyOGQuLjBkYmE0ODQ4MjUzM2E1NTU2MWEzMzI3MTI3YmVm
OTFhMzkwMTUzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFy
ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgKQEAg
LTc0LDYgKzc0LDI0IEBAIHB1YmxpYzoKICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBjdXJzb3JJ
bWFnZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JJbWFnZVZhbHVlOyB9CiAgICAgdm9p
ZCBzZXRDdXJzb3JJbWFnZVZhbHVlKENTU0N1cnNvckltYWdlVmFsdWUqIGN1cnNvckltYWdlVmFs
dWUpIHsgbV9jdXJzb3JJbWFnZVZhbHVlID0gY3Vyc29ySW1hZ2VWYWx1ZTsgfQogCisgICAgU3R5
bGVQcm9wZXJ0eVNldCogb3ZlcnJpZGVTdHlsZURlY2woKSBjb25zdCB7IHJldHVybiBtX292ZXJy
aWRlU3R5bGVEZWNsLmdldCgpOyB9CisgICAgU3R5bGVQcm9wZXJ0eVNldCogZW5zdXJlT3ZlcnJp
ZGVTdHlsZURlY2woKQorICAgIHsKKyAgICAgICAgaWYgKCFtX292ZXJyaWRlU3R5bGVEZWNsKSB7
CisgICAgICAgICAgICBtX292ZXJyaWRlU3R5bGVEZWNsID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBtX292ZXJyaWRlU3R5bGVEZWNsLT5zZXRTdHJpY3RQYXJzaW5n
KGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vdmVycmlkZVN0eWxlRGVjbC5n
ZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGRlc3Ryb3lPdmVycmlkZVN0eWxlRGVjbChTdHlsZWRF
bGVtZW50KiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFtX292ZXJyaWRlU3R5bGVEZWNs
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX292ZXJyaWRlU3R5bGVEZWNsLT5jbGVh
clBhcmVudEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIG1fb3ZlcnJpZGVTdHlsZURlY2wgPSAw
OworICAgIH0KKwogcHJpdmF0ZToKICAgICBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+IG1f
ZWxlbWVudEluc3RhbmNlczsKICAgICBTVkdDdXJzb3JFbGVtZW50KiBtX2N1cnNvckVsZW1lbnQ7
CkBAIC04MSw2ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgU1ZHRWxlbWVudCogbV9jb3JyZXNwb25k
aW5nRWxlbWVudDsKICAgICBib29sIG1faW5zdGFuY2VzVXBkYXRlc0Jsb2NrZWQgOiAxOwogICAg
IGJvb2wgbV9oYXNQZW5kaW5nUmVzb3VyY2VzIDogMTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gbV9vdmVycmlkZVN0eWxlRGVjbDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAppbmRleCA5ZTFkZmQwMTRiOGU3YjFiMjVjNWZh
NmQ3MGUyZDgwNTA5NzgwY2RkLi40MDBhN2E2YmE1ZDk0YmMxMWZmNGY5M2U2NDQyZjEzOWY4ZjVh
Y2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
CkBAIC0xMTYsMTEgKzExNiwxMSBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBTdWItY2xhc3NlcyBt
YXkgbmVlZCB0byB0YWtlIGFjdGlvbiB3aGVuIHRoZSB0YXJnZXQgaXMgY2hhbmdlZC4KICAgICB2
aXJ0dWFsIHZvaWQgdGFyZ2V0RWxlbWVudERpZENoYW5nZShTVkdFbGVtZW50KikgeyB9CisgICAg
dmlydHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgc3RhcnRlZEFjdGl2ZUludGVydmFsKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxl
bWVudCogcmVzdWx0RWxlbWVudCkgPSAwOwotICAgIHZvaWQgZW5kZWRBY3RpdmVJbnRlcnZhbCgp
OwogCiAgICAgZW51bSBCZWdpbk9yRW5kIHsKICAgICAgICAgQmVnaW4sCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2NhMGRj
YzIyYjQzYTNkZTM3ZDdkNjk4ZmU4N2U2NDUzMDk2ODFmYS4uMTFmODQ4Y2NjNzZlYzM5OGJhOGE2
ZDVjNTAyMzkyM2FhZjFlMTQ2MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM4IEBACiAyMDEyLTAyLTI4ICBO
aWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCisgICAgICAgIEludHJv
ZHVjZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0
eWxlcyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTVkcgQ1NTIHByb3BlcnR5IGFuaW1hdGlvbnMgYXJlbid0IGxlYWtlZCBpbnRvIHRoZSBE
T00gYW55bW9yZSwgdXBkYXRlIHRoZSB0ZXN0cy4KKworICAgICAgICAqIHN2Zy9hbmltYXRpb25z
L2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy9h
bmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9ucy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJv
cGVydHktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0
cy9hbmltYXRlLWNvbG9yLXRyYW5zcGFyZW50LmpzOgorICAgICAgICAoZXhwZWN0VHJhbnNwYXJl
bnQpOgorICAgICAgICAoZXhwZWN0T3RoZXJDb2xvcik6CisgICAgICAgICogc3ZnL2FuaW1hdGlv
bnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY3VycmVudENvbG9yLmpzOgorICAgICAgICAoc2FtcGxl
MSk6CisgICAgICAgIChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAqIHN2
Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0
ZU5hbWUuanM6CisgICAgICAgIChzYW1wbGUxKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAg
ICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3Bl
cnR5LmpzOgorICAgICAgICAoc2FtcGxlMSk6CisgICAgICAgIChzYW1wbGUyKToKKyAgICAgICAg
KHNhbXBsZTMpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9zdmdzdHJp
bmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLmpzOgorICAgICAgICAoc2FtcGxlMSk6
CisgICAgICAgIChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAqIHN2Zy9h
bmltYXRpb25zL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUtZXhwZWN0
ZWQudHh0OgorCisyMDEyLTAyLTI4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBy
aW0uY29tPgorCiAgICAgICAgIFJlYmFzZWxpbmUgR3RrIHJlc3VsdHMgYWZ0ZXIgcjEwOTA5Ny4K
IAogICAgICAgICAqIHBsYXRmb3JtL2d0ay9zdmcvVzNDLVNWRy0xLjEtU0Uvc3RydWN0LXVzZS0x
MS1mLWV4cGVjdGVkLnR4dDoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC1leHBlY3RlZC50eHQKaW5kZXgg
OWY4MmEwMmI3NTU1ZTM1MWVhY2Q1NWZkMTNlNGVkNzQ2NGM1NjEwMC4uYTMwMjcwZDBmZTk1MjJi
MWE4MWFhMTFjNGE0Njc3YTNmZWU4ODI1MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2Fu
aW1hdGlvbnMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC1leHBlY3Rl
ZC50eHQKQEAgLTUsOCArNSwxMCBAQCBUZXN0cyB0aGF0ICd0cmFuc3BhcmVudCcgaXMgdHJlYXRl
ZCBhcyBhIHZhbGlkIGNvbG9yLgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1Mg
cmVjdC5zdHlsZS5maWxsIGlzICcjMDBmZjAwJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyM3
ZjAwMDAnCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAnIzAwZmYwMCcKK1BB
U1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmls
bCBpcyAnIzdmMDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCiBQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4
dAppbmRleCBmMDMwM2VlNGYxNmRkZWY0ZTZmZDA5MTJlOTllNGNkYWNjMjZlMmE0Li5lMTQ0N2Q1
YWFmZGQwNTA0NjcxNzk0ZjQzOTkyYzliNWMxODc0ZWY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1cnJlbnRDb2xvci1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3ItZXhwZWN0ZWQu
dHh0CkBAIC01LDkgKzUsMTIgQEAgVGVzdHMgYW5pbWF0aW9uIG9uICdjdXJyZW50Q29sb3InLgog
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcj
ZmYwMDAwJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyM4MDQwMDAnCi1QQVNTIHJlY3Quc3R5
bGUuZmlsbCBpcyAnIzAwODAwMCcKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIGlz
ICcjZmYwMDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgIiIKK1BBU1MgZ2V0Q29tcHV0ZWRT
dHlsZShyZWN0KS5maWxsIGlzICcjODA0MDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgIiIK
K1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIGlzICcjMDA4MDAwJworUEFTUyByZWN0
LnN0eWxlLmZpbGwgaXMgIiIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVT
VCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0
ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS1leHBl
Y3RlZC50eHQKaW5kZXggODg2NWNlYTViN2MzN2RlZmRhMWY0MTAxYWI3ZjE3NDQ1MDhkN2NjOC4u
NGNiY2FmOGU4N2Y0OWJhNzU4YmYwMmM4MWY1MmNjMjJkNThhZTI3NiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVO
YW1lLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRl
LWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUtZXhwZWN0ZWQudHh0CkBAIC01LDggKzUsMTAg
QEAgVGVzdCBiZWhhdmlvciBvbiBkeW5hbWljLXVwZGF0ZSBvZiBhdHRyaWJ1dGVOYW1lCiBPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyByZWN0LnN0eWxlLmNvbG9yIGlzICdyZ2Io
MCwgMTI4LCAwKScKLVBBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjMDA4MDAwJworUEFTUyBnZXRD
b21wdXRlZFN0eWxlKHJlY3QpLmNvbG9yIGlzICdyZ2IoMCwgMTI4LCAwKScKK1BBU1MgcmVjdC5z
dHlsZS5jb2xvciBpcyAiIgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwgaXMgJyMw
MDgwMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAiIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHktZXhw
ZWN0ZWQudHh0CmluZGV4IDljMmJmOWNmZTgxNzdkYWZmODQ0NjMwZDFjODRiMmM1MjYwMmE4MDQu
LjRhYjkwMDk5NDI0NGYxNGJiMDY2ZDM0MWY0NjE2NTJkYmI5ZTZkM2UgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHktZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJp
dC1jc3MtcHJvcGVydHktZXhwZWN0ZWQudHh0CkBAIC01LDkgKzUsMTIgQEAgVGVzdHMgYW5pbWF0
aW9uIHdpdGggJ2luaGVyaXQnLgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1Mg
cmVjdC5zdHlsZS5maWxsIGlzICcjZmYwMDAwJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyM4
MDQwMDAnCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnIzAwODAwMCcKK1BBU1MgZ2V0Q29tcHV0
ZWRTdHlsZShyZWN0KS5maWxsIGlzICcjZmYwMDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMg
IiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIGlzICcjODA0MDAwJworUEFTUyBy
ZWN0LnN0eWxlLmZpbGwgaXMgIiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIGlz
ICcjMDA4MDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgIiIKIFBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQuanMg
Yi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jb2xvci10
cmFuc3BhcmVudC5qcwppbmRleCAyZTdmYjY4YWY4ZjI5MDFiZTcwOTA0ZmEwNjdkMWYzOTVjZjUw
ZGNkLi5kN2RmYjAzZjNhMTljYmI0MDFjYTU3NjMyYjAyMmQ2YTEwOTA2YzIwIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jb2xvci10
cmFuc3BhcmVudC5qcworKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVz
dHMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC5qcwpAQCAtMjEsMTEgKzIxLDEzIEBAIHJvb3RT
VkdFbGVtZW50LmFwcGVuZENoaWxkKHJlY3QpOwogCiAvLyBTZXR1cCBhbmltYXRpb24gdGVzdAog
ZnVuY3Rpb24gZXhwZWN0VHJhbnNwYXJlbnQoKSB7Ci0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUu
ZmlsbCIsICInIzAwZmYwMCciKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0
KS5maWxsIiwgIicjMDBmZjAwJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5z
dHlsZS5maWxsIiwgIiIpOwogfQogCiBmdW5jdGlvbiBleHBlY3RPdGhlckNvbG9yKCkgewotICAg
IHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyM3ZjAwMDAnIik7CisgICAgc2hvdWxkQmUo
ImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzdmMDAwMCciKTsKKyAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24gZXhl
Y3V0ZVRlc3QoKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3Jp
cHQtdGVzdHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanMgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0
aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanMKaW5kZXggY2E4YWI0YmMx
NmM0NWNmYWE3ZTFmMTkzNmM5M2FiY2VhODkzNjJlNi4uYmIyODJhYzQzOTNiMDQxYmQxMTJjNTgw
MjQ4MTU5MTkzYWEyY2Q1ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMv
c2NyaXB0LXRlc3RzL2FuaW1hdGUtY3VycmVudENvbG9yLmpzCisrKyBiL0xheW91dFRlc3RzL3N2
Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5qcwpAQCAtMjQs
MTcgKzI0LDIwIEBAIHJvb3RTVkdFbGVtZW50LmFwcGVuZENoaWxkKHJlY3QpOwogLy8gU2V0dXAg
YW5pbWF0aW9uIHRlc3QKIGZ1bmN0aW9uIHNhbXBsZTEoKSB7CiAgICAgLy8gQ2hlY2sgaW5pdGlh
bC9lbmQgY29uZGl0aW9ucwotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyNmZjAw
MDAnIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInI2Zm
MDAwMCciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIi
KTsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMigpIHsKICAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29u
ZGl0aW9ucwotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyM4MDQwMDAnIik7Cisg
ICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzgwNDAwMCciKTsK
KyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAog
ZnVuY3Rpb24gc2FtcGxlMygpIHsKICAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29uZGl0aW9ucwot
ICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyMwMDgwMDAnIik7CisgICAgc2hvdWxk
QmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzAwODAwMCciKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24g
ZXhlY3V0ZVRlc3QoKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9z
Y3JpcHQtdGVzdHMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmpzIGIvTGF5
b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtZHluYW1pYy11cGRh
dGUtYXR0cmlidXRlTmFtZS5qcwppbmRleCAwMTNlYjM1OWFkNDFiYTc3NTgyNjhhM2Y3NWEwYWQx
YWJjYmYzZmIyLi42NGVjZGFlZjljOWQzNWExOTEyYjA0YTQ2MWZlYzYxY2YyYmRjNzhkIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1k
eW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmpzCisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmlt
YXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUu
anMKQEAgLTI0LDcgKzI0LDggQEAgcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVjdCk7CiAK
IC8vIFNldHVwIGFuaW1hdGlvbiB0ZXN0CiBmdW5jdGlvbiBzYW1wbGUxKCkgewotICAgIHNob3Vs
ZEJlKCJyZWN0LnN0eWxlLmNvbG9yIiwgIidyZ2IoMCwgMTI4LCAwKSciKTsKKyAgICBzaG91bGRC
ZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5jb2xvciIsICIncmdiKDAsIDEyOCwgMCknIik7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmNvbG9yIiwgIiIpOwogfQogCiBm
dW5jdGlvbiBzYW1wbGUyKCkgewpAQCAtMzMsNyArMzQsOCBAQCBmdW5jdGlvbiBzYW1wbGUyKCkg
ewogfQogCiBmdW5jdGlvbiBzYW1wbGUzKCkgewotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZp
bGwiLCAiJyMwMDgwMDAnIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCku
ZmlsbCIsICInIzAwODAwMCciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5
bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24gZXhlY3V0ZVRlc3QoKSB7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1pbmhlcml0
LWNzcy1wcm9wZXJ0eS5qcyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0
cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LmpzCmluZGV4IGZhNjQ1ZDgyNDg1NDViYmU2
ZWU4MjJiZmYwODg5OTU4ZWFlNDNmMWUuLjRhMWQ2Njg3M2I1MGI5ZDgyNjIxNzZjODQ2ODk0MGRk
M2E3YjYzZmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10
ZXN0cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LmpzCisrKyBiL0xheW91dFRlc3RzL3N2
Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5Lmpz
CkBAIC0yNywxNyArMjcsMjAgQEAgcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQoZyk7CiAvLyBT
ZXR1cCBhbmltYXRpb24gdGVzdAogZnVuY3Rpb24gc2FtcGxlMSgpIHsKICAgICAvLyBDaGVjayBp
bml0aWFsL2VuZCBjb25kaXRpb25zCi0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICIn
I2ZmMDAwMCciKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIiwg
IicjZmYwMDAwJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5maWxs
IiwgIiIpOwogfQogCiBmdW5jdGlvbiBzYW1wbGUyKCkgewogICAgIC8vIENoZWNrIGhhbGYtdGlt
ZSBjb25kaXRpb25zCi0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInIzgwNDAwMCci
KTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIiwgIicjODA0MDAw
JyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5maWxsIiwgIiIpOwog
fQogCiBmdW5jdGlvbiBzYW1wbGUzKCkgewogICAgIC8vIENoZWNrIGhhbGYtdGltZSBjb25kaXRp
b25zCi0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInIzAwODAwMCciKTsKKyAgICBz
aG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIiwgIicjMDA4MDAwJyIpOworICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5maWxsIiwgIiIpOwogfQogCiBmdW5j
dGlvbiBleGVjdXRlVGVzdCgpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRp
b25zL3NjcmlwdC10ZXN0cy9zdmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRl
LmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL3N2Z3N0cmluZy1h
bmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUuanMKaW5kZXggZjkxYTdiMmFhZjY5YWNjNzgx
MDU1MTdhZWIwNDYyMzYwOGUyYjNiNC4uM2NiNzk0NDM5MTkxOWVmZThiMjBlMjg1NTY2ZDQ0MjQ3
Njk4M2MwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRl
c3RzL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUuanMKKysrIGIvTGF5
b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL3N2Z3N0cmluZy1hbmltYXRpb24t
ZmFsbGJhY2stdG8tZGlzY3JldGUuanMKQEAgLTIyLDE1ICsyMiwxOCBAQCByb290U1ZHRWxlbWVu
dC5hcHBlbmRDaGlsZChyZWN0KTsKIC8vIFNldHVwIGFuaW1hdGlvbiB0ZXN0CiBmdW5jdGlvbiBz
YW1wbGUxKCkgewogICAgIC8vIENoZWNrIGluaXRpYWwvZW5kIGNvbmRpdGlvbnMKLSAgICBzaG91
bGRCZSgicmVjdC5zdHlsZS52aXNpYmlsaXR5IiwgIid2aXNpYmxlJyIpOworICAgIHNob3VsZEJl
KCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2liaWxpdHkiLCAiJ3Zpc2libGUnIik7CisgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLnZpc2liaWxpdHkiLCAiIik7CiB9CiAK
IGZ1bmN0aW9uIHNhbXBsZTIoKSB7Ci0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUudmlzaWJpbGl0
eSIsICInaGlkZGVuJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZp
c2liaWxpdHkiLCAiJ2hpZGRlbiciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Qu
c3R5bGUudmlzaWJpbGl0eSIsICIiKTsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMygpIHsKLSAgICBz
aG91bGRCZSgicmVjdC5zdHlsZS52aXNpYmlsaXR5IiwgIid2aXNpYmxlJyIpOworICAgIHNob3Vs
ZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2liaWxpdHkiLCAiJ3Zpc2libGUnIik7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLnZpc2liaWxpdHkiLCAiIik7CiB9
CiAKIGZ1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvc3Znc3RyaW5nLWFuaW1hdGlvbi1mYWxsYmFjay10by1kaXNjcmV0ZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmdzdHJpbmctYW5pbWF0aW9u
LWZhbGxiYWNrLXRvLWRpc2NyZXRlLWV4cGVjdGVkLnR4dAppbmRleCBkMTUzNjZiODM3Zjg2YzYy
MzQ5MTEzNGE4NjFmZDZkMjU1YjVlYTljLi41YjlmYzFjNmQ4OTBjNmY2MWUyNWE1Yzk4NTg5NTE1
ZDIxMmE1NDBiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmdzdHJp
bmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRp
c2NyZXRlLWV4cGVjdGVkLnR4dApAQCAtNSwxMCArNSwxNCBAQCBUZXN0cyBmYWxsYmFjayB0byBj
YWxjTW9kZT0nZGlzY3JldGUnIG9uIGFuaW1hdGlvbiBvZiBTVkdTdHJpbmcgd2l0aCAndmFsdWVz
Jy4KIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHJlY3Quc3R5bGUudmlzaWJp
bGl0eSBpcyAndmlzaWJsZScKLVBBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICdoaWRkZW4n
Ci1QQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0eSBpcyAndmlzaWJsZScKLVBBU1MgcmVjdC5zdHls
ZS52aXNpYmlsaXR5IGlzICd2aXNpYmxlJworUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZp
c2liaWxpdHkgaXMgJ3Zpc2libGUnCitQQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0eSBpcyAiIgor
UEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2liaWxpdHkgaXMgJ2hpZGRlbicKK1BBU1Mg
cmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCku
dmlzaWJpbGl0eSBpcyAndmlzaWJsZScKK1BBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICIi
CitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkudmlzaWJpbGl0eSBpcyAndmlzaWJsZScKK1BB
U1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICIiCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCiAKIFRFU1QgQ09NUExFVEUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129412</attachid>
            <date>2012-02-29 01:22:38 -0800</date>
            <delta_ts>2012-02-29 03:30:13 -0800</delta_ts>
            <desc>Patch v3</desc>
            <filename>bug-79790-20120229102235.patch</filename>
            <type>text/plain</type>
            <size>34543</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdjOTUwMTZiZGEwN2Vh
ZTE3MWEzYTJmMWFmYjUwYjYxZmRiZjkxOC4uZmM2OTdhMzg5MjkzMzUxZWU1YTYyYzk1N2IyNTll
YTExNGIxNDYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTAyLTI5ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxl
cyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZXh0IHN0ZXAgdG93YXJkcyBlbmFibGluZyBhbmltVmFsIHN1cHBvcnQgZm9yIFhNTCBhdHRy
aWJ1dGUgYW5pbWF0aW9ucy4KKyAgICAgICAgV2hlbiBTVkcgQ1NTIHByb3BlcnRpZXMgYXJlIGFu
aW1hdGVkIHVzaW5nIFNNSUwsIHdlIGN1cnJlbnRseSBtdXRhdGUKKyAgICAgICAgdGhlIHRhcmdl
dCBlbGVtZW50cyBzdHlsZSwgYW5kIGhhdmUgdG8ga2VlcCBhIGJhc2VWYWx1ZSBhcm91bmQgYXMg
U3RyaW5nCisgICAgICAgIHRvIGJlIGFibGUgdG8gcmVjb3ZlciBmcm9tIHRoZSBET00gbXV0YXRp
b25zIGF0IHRoZSBlbmQsIGlmIGZpbGwhPSJmcmVlemUiLgorCisgICAgICAgIFRoZSBhcHByb2Fj
aCByZXF1aXJlZCBieSBTTUlMIGlzIHRvIGtlZXAgYXJvdW5kIGFuIG92ZXJyaWRlIHN0eWxlIGRl
Y2xhcmF0aW9uCisgICAgICAgIHNldCBhbmQgYXBwbHkgaXQgcmlnaHQgYWZ0ZXIgdGhlIGlubGlu
ZSBzdHlsZSBkZWNsYXJhdGlvbnMuIEltcGxlbWVudCB0aGF0CisgICAgICAgIGZpbmFsbHksIHRv
IGF2b2lkIG11dGF0aW5nIHN0eWxlcyBkaXJlY3RseS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZFByb3BlcnRpZXNJZlBv
c3NpYmxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAoQ1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVF
bGVtZW50OjpTVkdBbmltYXRlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
RWxlbWVudDo6YXBwbHlSZXN1bHRzVG9UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZUVsZW1lbnQ6OmVuZGVkQWN0aXZlSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50Lmg6CisgICAgICAgIChTVkdBbmltYXRlRWxl
bWVudCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRDU1NWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkWE1M
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0
QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpyZXNldEFuaW1hdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGlvbkVsZW1lbnQ6OnNob3VsZEFwcGx5QW5pbWF0aW9uKToKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsZW1lbnQ6Om92ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmVuc3VyZU92ZXJyaWRlU3R5bGVQcm9wZXJ0
eVNldCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKFNWR0VsZW1lbnQp
OgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsZW1lbnRSYXJlRGF0YTo6b3ZlcnJpZGVTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6ZW5zdXJlT3ZlcnJpZGVTdHlsZVByb3BlcnR5
U2V0KToKKyAgICAgICAgKFNWR0VsZW1lbnRSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50UmFyZURhdGE6OmRlc3Ryb3lPdmVycmlkZVN0eWxlUHJvcGVydHlTZXQpOgorICAg
ICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDoKKyAgICAgICAgKFNWR1NNSUxF
bGVtZW50KToKKwogMjAxMi0wMi0yOCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIERPTSBjb3VudGVyIGdyYXBocyBv
dXQgb2YgZXhwZXJpbWVudGFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
aW5kZXggMzc3NmYxZTQ1NzBkZjEwYWI2ZDUxNWE4ODc1YmM3YjE3ZThmZTBjOC4uMDgzOTBmNTRh
MzIxMTVlYTE5YTE3Yjk2NzlkZjMzNTk0NTkwMmE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcApAQCAtMTIyLDYgKzEyMiw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJM
RShTVkcpCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAj
ZW5kaWYKIApAQCAtNzYwLDYgKzc2MSwxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1h
dGNoZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgU3R5bGVQcm9wZQogICAg
IG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7CiB9CiAKK2lubGluZSBib29s
IENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWRQcm9wZXJ0aWVzSWZQb3NzaWJsZShNYXRjaFJl
c3VsdCYgcmVzdWx0LCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzKQoreworICAgIGlmICgh
cHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUgPSBtX21hdGNoZWRSdWxlcy5zaXplKCk7CisgICAgaWYgKHJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlID09IC0xKQorICAgICAgICByZXN1bHQucmFuZ2VzLmZpcnN0QXV0
aG9yUnVsZSA9IHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGU7CisgICAgYWRkTWF0Y2hlZFBy
b3BlcnRpZXMocmVzdWx0LCBwcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlv
bnMmIG9wdGlvbnMpCiB7CiAgICAgQVNTRVJUKHJ1bGVzKTsKQEAgLTEwMzAsMjIgKzEwNDIsMTIg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQpCiAgICAgICAgIAogICAgIC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBm
aXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4KICAg
ICBpZiAobV9zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBh
dHRyaWJ1dGVTdHlsZSA9IG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSkgewotICAg
ICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZFJ1bGVzLnNp
emUoKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9PSAt
MSkKLSAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9IHJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGU7Ci0gICAgICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGll
cyhyZXN1bHQsIGF0dHJpYnV0ZVN0eWxlKTsKLSAgICAgICAgfQorICAgICAgICBhZGRNYXRjaGVk
UHJvcGVydGllc0lmUG9zc2libGUocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmF0dHJpYnV0ZVN0
eWxlKCkpOwogCiAgICAgICAgIC8vIE5vdyB3ZSBjaGVjayBhZGRpdGlvbmFsIG1hcHBlZCBkZWNs
YXJhdGlvbnMuCiAgICAgICAgIC8vIFRhYmxlcyBhbmQgdGFibGUgY2VsbHMgc2hhcmUgYW4gYWRk
aXRpb25hbCBtYXBwZWQgcnVsZSB0aGF0IG11c3QgYmUgYXBwbGllZAogICAgICAgICAvLyBhZnRl
ciBhbGwgYXR0cmlidXRlcywgc2luY2UgdGhlaXIgbWFwcGVkIHN0eWxlIGRlcGVuZHMgb24gdGhl
IHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRyaWJ1dGVzLgotICAgICAgICBpZiAoU3R5bGVQcm9wZXJ0
eVNldCogYWRkaXRpb25hbFN0eWxlID0gbV9zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsQXR0cmli
dXRlU3R5bGUoKSkgewotICAgICAgICAgICAgaWYgKHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlID09IC0xKQotICAgICAgICAgICAgICAgIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxl
ID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKLSAgICAgICAgICAgIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZTsKLSAg
ICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgYWRkaXRpb25hbFN0eWxlKTsK
LSAgICAgICAgfQorICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllc0lmUG9zc2libGUocmVzdWx0
LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpKTsKIAogICAgICAg
ICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJv
b2wgaXNBdXRvOwpAQCAtMTA2MSwxNSArMTA2MywxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIAogICAgIC8vIE5vdyBjaGVjayBv
dXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgIFN0eWxlUHJvcGVydHlTZXQqIGlu
bGluZURlY2wgPSBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwotICAgICAgICBp
ZiAoaW5saW5lRGVjbCkgewotICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7Ci0gICAgICAgICAgICBpZiAocmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgICAgICAgICAgcmVzdWx0
LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPSByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlOwot
ICAgICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBpbmxpbmVEZWNsKTsKKyAg
ICAgICAgaWYgKGFkZE1hdGNoZWRQcm9wZXJ0aWVzSWZQb3NzaWJsZShyZXN1bHQsIG1fc3R5bGVk
RWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpKQorICAgICAgICAgICAgcmVzdWx0LmlzQ2FjaGVh
YmxlID0gZmFsc2U7CisgICAgfQorCisjaWYgRU5BQkxFKFNWRykKKyAgICAvLyBOb3cgY2hlY2sg
U01JTCBhbmltYXRpb24gb3ZlcnJpZGUgc3R5bGUuCisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxl
bWVudCgpKSB7CisgICAgICAgIGlmIChhZGRNYXRjaGVkUHJvcGVydGllc0lmUG9zc2libGUocmVz
dWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdHlsZWRFbGVtZW50KS0+b3ZlcnJpZGVT
dHlsZVByb3BlcnR5U2V0KCkpKQogICAgICAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFs
c2U7Ci0gICAgICAgIH0KICAgICB9CisjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKQEAgLTExMjUsNiArMTEyOSwxMCBAQCBO
b2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwg
dW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgIFN0eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKICAgICBpZiAocC0+aW5saW5lU3R5bGVEZWNsKCkp
CiAgICAgICAgIHJldHVybiAwOworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKHAtPmlzU1ZHRWxl
bWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwKS0+b3ZlcnJpZGVTdHlsZVByb3Bl
cnR5U2V0KCkpCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCiAgICAgaWYgKHAtPmhhc0lEKCkg
JiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9u
KCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEyNzMsNiArMTI4MSwxMCBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1l
bnQtPmlubGluZVN0eWxlRGVjbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxF
KFNWRykKKyAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KGVsZW1lbnQpLT5vdmVycmlkZVN0eWxlUHJvcGVydHlTZXQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCiAgICAgaWYgKCEhZWxlbWVudC0+YXR0cmlidXRlU3R5bGUo
KSAhPSAhIW1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAhPSBtX2VsZW1lbnQtPmlzTGluaygp
KQpAQCAtMTM3MCw2ICsxMzgyLDEwIEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjps
b2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHls
ZSBpdCBpcyBwcm9iYWJseSB1bmlxdWUuCiAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aW5saW5l
U3R5bGVEZWNsKCkpCiAgICAgICAgIHJldHVybiAwOworI2lmIEVOQUJMRShTVkcpCisgICAgaWYg
KG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVu
dCo+KG1fc3R5bGVkRWxlbWVudCktPm92ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldCgpKQorICAgICAg
ICByZXR1cm4gMDsKKyNlbmRpZgogICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYgdGhl
eSBzaG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KICAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5o
YXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1lbnQt
PmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCBkY2RkMjMzNjY5MmY0YjdkODU1NTdm
ZmY1NDQwNjAxZTkyNzU2MGQ0Li4xZWFhMWMzNzA1Y2QxZWNiYzE1MDEzNTI2ZTYzMmZkNWM4YzQw
MWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKQEAgLTI5Miw2ICsyOTIs
NyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBzdGF0aWMgdm9pZCBhZGRNYXRjaGVkUHJvcGVy
dGllcyhNYXRjaFJlc3VsdCYsIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVs
ZSogPSAwLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFs
bCk7CisgICAgaW5saW5lIGJvb2wgYWRkTWF0Y2hlZFByb3BlcnRpZXNJZlBvc3NpYmxlKE1hdGNo
UmVzdWx0JiwgU3R5bGVQcm9wZXJ0eVNldCopOwogCiAgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKE1h
dGNoUmVzdWx0Jik7CiAgICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCmluZGV4IDEzZjdjZjk2YjA3YTNlMzdi
OTIxOWYyNDQ0MjllOTBiZTEwYjYzMzEuLmNhY2Y0ODhlMDgxYThmMTQ4ZDg2MDZhOGIwYmNiYTg4
ODE4ZmRlM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcApAQCAt
NDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBTVkdBbmltYXRlRWxlbWVudDo6U1ZH
QW5pbWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKICAg
ICAsIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUoQW5pbWF0ZWRTdHJpbmcpCisgICAgLCBtX2Fib3V0
VG9TdG9wQW5pbWF0aW9uKGZhbHNlKQogICAgICwgbV9mcm9tUHJvcGVydHlWYWx1ZVR5cGUoUmVn
dWxhclByb3BlcnR5VmFsdWUpCiAgICAgLCBtX3RvUHJvcGVydHlWYWx1ZVR5cGUoUmVndWxhclBy
b3BlcnR5VmFsdWUpCiB7CkBAIC0yMzAsNiArMjMxLDEyIEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1l
bnQ6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkKICAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5
VHlwZSAhPSBBbmltYXRlZFVua25vd24pOwogICAgIEFTU0VSVChtX2FuaW1hdGVkVHlwZSk7CiAK
KyAgICBpZiAobV9hYm91dFRvU3RvcEFuaW1hdGlvbikgeworICAgICAgICBtX2Fib3V0VG9TdG9w
QW5pbWF0aW9uID0gZmFsc2U7CisgICAgICAgIHJlc2V0QW5pbWF0aW9uU3RhdGUobV9hbmltYXRl
ZFR5cGUtPnZhbHVlQXNTdHJpbmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBz
ZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKG1fYW5pbWF0ZWRUeXBlLT52YWx1ZUFzU3Ry
aW5nKCkpOwogfQogICAgIApAQCAtMjYwLDUgKzI2NywxMSBAQCBTVkdBbmltYXRlZFR5cGVBbmlt
YXRvciogU1ZHQW5pbWF0ZUVsZW1lbnQ6OmVuc3VyZUFuaW1hdG9yKCkKICAgICByZXR1cm4gbV9h
bmltYXRvci5nZXQoKTsKIH0KIAordm9pZCBTVkdBbmltYXRlRWxlbWVudDo6ZW5kZWRBY3RpdmVJ
bnRlcnZhbCgpCit7CisgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZW5kZWRBY3RpdmVJbnRlcnZh
bCgpOworICAgIG1fYWJvdXRUb1N0b3BBbmltYXRpb24gPSB0cnVlOworfQorCiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgKaW5kZXgg
NjljYjlhNmVkOTIyYjhlYTExOTFiMTEwM2Q1MmI1ZTY0NjNlZWNiNi4uZmViYzM0ZDdjMjVjMzQ3
NTdlYmRkN2Q3NGNmZmI5NWJhZDI3NmNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmgKQEAgLTY1LDYgKzY1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBh
cHBseVJlc3VsdHNUb1RhcmdldCgpOwogICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFu
Y2UoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKIAor
ICAgIHZpcnR1YWwgdm9pZCBlbmRlZEFjdGl2ZUludGVydmFsKCk7CiAgICAgdmlydHVhbCB2b2lk
IHRhcmdldEVsZW1lbnREaWRDaGFuZ2UoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgT1ZFUlJJ
REU7CiAKIHByaXZhdGU6CkBAIC03Miw2ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmly
dHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpOwogICAgIEFuaW1hdGVkUHJvcGVydHlU
eXBlIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGU7CisgICAgYm9vbCBtX2Fib3V0VG9TdG9wQW5pbWF0
aW9uOwogCiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSBtX2Zyb21Qcm9wZXJ0eVZhbHVl
VHlwZTsKICAgICBBbmltYXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fdG9Qcm9wZXJ0eVZhbHVlVHlw
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAppbmRleCAyNjU5
ZGQ5ZGY5NmU2YTk2Yzc4OThhMTQ3MTAyYTY3OTgzZjhhNTA0Li40NmU2NGEzMjZjMmM0N2YyNmUz
ZDk0MDdiYTI1NzY3ZGZiOTAyNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwCkBAIC0zMzAsNTMgKzMzMCw5OSBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVu
dAogICAgIHJldHVybiBTVkdTdHlsZWRFbGVtZW50Ojppc0FuaW1hdGFibGVDU1NQcm9wZXJ0eShh
dHRyaWJ1dGVOYW1lKTsKIH0KIAotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRB
dHRyaWJ1dGVBbmltYXRlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCitzdGF0aWMgaW5saW5l
IHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRDU1NWYWx1ZShTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIGlmICghaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkpCisgICAgU3R5
bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQgPSB0YXJnZXRFbGVtZW50LT5lbnN1cmVPdmVycmlk
ZVN0eWxlUHJvcGVydHlTZXQoKTsKKyAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAg
aWYgKHByb3BlcnR5U2V0LT5yZW1vdmVQcm9wZXJ0eShjc3NQcm9wZXJ0eUlEKGF0dHJpYnV0ZU5h
bWUubG9jYWxOYW1lKCkpKSkKKyAgICAgICAgICAgIHRhcmdldEVsZW1lbnQtPnNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwcm9wZXJ0eVNl
dC0+c2V0UHJvcGVydHkoY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKSwg
dmFsdWUsIGZhbHNlLCAwKSkKKyAgICAgICAgdGFyZ2V0RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0
ZWRYTUxWYWx1ZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIC8vIEZJWE1FOiBE
ZXRhY2ggYW5pbVZhbCwgaWYgdmFsdWUuaXNOdWxsKCkgLSBvbmNlIGFuaW1WYWwgc3VwcG9ydCBp
cyBlbmFibGVkLgorICAgIHRhcmdldEVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmli
dXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorewogICAgIFNWR0VsZW1lbnQq
IHRhcmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7Ci0gICAgUXVhbGlmaWVkTmFt
ZSBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgpOwotICAgIGlmICghdGFyZ2V0
RWxlbWVudCB8fCBhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkgfHwgdmFsdWUuaXNOdWxsKCkp
CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0
ZU5hbWUoKTsKKyAgICBTaG91bGRBcHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9IHNob3VsZEFw
cGx5QW5pbWF0aW9uKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChzaG91
bGRBcHBseSA9PSBEb250QXBwbHlBbmltYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIC8v
IFdlIGRvbid0IHdhbnQgdGhlIGluc3RhbmNlIHRyZWUgdG8gZ2V0IHJlYnVpbGQuIEluc3RhbmNl
cyBhcmUgdXBkYXRlZCBpbiB0aGUgbG9vcCBiZWxvdy4KKyAgICBpZiAoc2hvdWxkQXBwbHkgPT0g
QXBwbHlDU1NBbmltYXRpb24pCisgICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkQ1NT
VmFsdWUodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgdmFsdWUpOworICAgIGVsc2UKKyAg
ICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRYTUxWYWx1ZSh0YXJnZXRFbGVtZW50LCBh
dHRyaWJ1dGVOYW1lLCB2YWx1ZSk7CisKICAgICBpZiAodGFyZ2V0RWxlbWVudC0+aXNTdHlsZWQo
KSkKICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHRhcmdldEVsZW1lbnQp
LT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKHRydWUpOwotICAgICAgICAKLSAgICBib29sIGF0
dHJpYnV0ZUlzQ1NTUHJvcGVydHkgPSBpc1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5KHRhcmdl
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOwotICAgIC8vIFN0b3AgYW5pbWF0aW9uLCBpZiBhdHRy
aWJ1dGVUeXBlIGlzIHNldCB0byBDU1MgYnkgdGhlIHVzZXIsIGJ1dCB0aGUgYXR0cmlidXRlIGl0
c2VsZiBpcyBub3QgYSBDU1MgcHJvcGVydHkuCi0gICAgaWYgKCFhdHRyaWJ1dGVJc0NTU1Byb3Bl
cnR5ICYmIGF0dHJpYnV0ZVR5cGUoKSA9PSBBdHRyaWJ1dGVUeXBlQ1NTKQotICAgICAgICByZXR1
cm47CiAKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGlmIChhdHRyaWJ1dGVJc0NTU1Byb3Bl
cnR5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBzZXQgdGhlIG92ZXJyaWRlIHN0
eWxlLCBub3QgdGhlIGlubGluZSBzdHlsZS4KLSAgICAgICAgLy8gU2FkbHkgb3ZlcnJpZGUgc3R5
bGVzIGFyZSBub3QgeWV0IGltcGxlbWVudGVkLgotICAgICAgICB0YXJnZXRFbGVtZW50LT5zdHls
ZSgpLT5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpLCB2YWx1ZSwgIiIsIGVj
KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgc2V0IHRoZSAn
cHJlc2VudGF0aW9uJyB2YWx1ZSwgbm90IHRoZSBhY3R1YWwgCi0gICAgICAgIC8vIGF0dHJpYnV0
ZSB2YWx1ZS4gV2hhdGV2ZXIgdGhhdCBtZWFucyBpbiBwcmFjdGljZS4KLSAgICAgICAgdGFyZ2V0
RWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHRhcmdldEVsZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHN0YXRpY19jYXN0
PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KS0+c2V0SW5zdGFuY2VVcGRhdGVzQmxv
Y2tlZChmYWxzZSk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIHVzZWQg
aW4gYW4gPHVzZT4gaW5zdGFuY2UgdHJlZSwgdXBkYXRlIHRoYXQgYXMgd2VsbC4KKyAgICAvLyBJ
ZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIGluc3RhbmNlcywgdXBkYXRlIHRoZW0gYXMgd2VsbCwg
dy9vIHJlcXVpcmluZyB0aGUgPHVzZT4gdHJlZSB0byBiZSByZWJ1aWx0LgogICAgIGNvbnN0IEhh
c2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlcyA9IHRhcmdldEVsZW1lbnQtPmlu
c3RhbmNlc0ZvckVsZW1lbnQoKTsKICAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5j
ZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7CiAgICAgZm9yIChIYXNo
U2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU1ZHRWxlbWVudCogc2hhZG93VHJl
ZUVsZW1lbnQgPSAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFzaGFk
b3dUcmVlRWxlbWVudCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYXR0cmli
dXRlSXNDU1NQcm9wZXJ0eSkKLSAgICAgICAgICAgIHNoYWRvd1RyZWVFbGVtZW50LT5zdHlsZSgp
LT5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpLCB2YWx1ZSwgIiIsIGVjKTsK
KworICAgICAgICBpZiAoc2hvdWxkQXBwbHkgPT0gQXBwbHlDU1NBbmltYXRpb24pCisgICAgICAg
ICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZENTU1ZhbHVlKHNoYWRvd1RyZWVFbGVtZW50
LCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNoYWRv
d1RyZWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFsdWUpOwotICAgICAg
ICAoKml0KS0+Y29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygp
OworICAgICAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRDU1NWYWx1ZShzaGFkb3dU
cmVlRWxlbWVudCwgYXR0cmlidXRlTmFtZSwgdmFsdWUpOwogICAgIH0KKworICAgIGlmICh0YXJn
ZXRFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVt
ZW50Kj4odGFyZ2V0RWxlbWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoZmFsc2UpOwog
fQotICAgIAorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0QW5pbWF0aW9uU3RhdGUo
Y29uc3QgU3RyaW5nJiBiYXNlVmFsdWUpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZXh0cmEgY2hl
Y2sgd2lsbCBnbyBhd2F5LCBvbmNlIGFuaW1WYWwgaXMgZW5hYmxlZC4KKyAgICBTVkdFbGVtZW50
KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7CisgICAgU2hv
dWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkgPSBzaG91bGRBcHBseUFuaW1hdGlvbih0YXJn
ZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gRG9udEFw
cGx5QW5pbWF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNGcm96ZW4oKSB8fCBz
aG91bGRBcHBseSA9PSBBcHBseVhNTEFuaW1hdGlvbikKKyAgICAgICAgc2V0VGFyZ2V0QXR0cmli
dXRlQW5pbWF0ZWRWYWx1ZShiYXNlVmFsdWUpOworICAgIGVsc2UgLy8gT25seSBDU1MgYW5pbWF0
aW9ucyBzdXBwb3J0IGRldGFjaGluZyBwcmV2aW91c2x5IGFuaW1hdGVkIHByb3BlcnRpZXMgc28g
ZmFyLCBpbmRpY2F0aW5nIGJ5IHBhc3NpbmcgYSBudWxsLXN0cmluZy4KKyAgICAgICAgc2V0VGFy
Z2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShTdHJpbmcoKSk7Cit9CisKK1NWR0FuaW1hdGlvbkVs
ZW1lbnQ6OlNob3VsZEFwcGx5QW5pbWF0aW9uIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNob3VsZEFw
cGx5QW5pbWF0aW9uKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSB8
fCAhdGFyZ2V0RWxlbWVudCB8fCBhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkpCisgICAgICAg
IHJldHVybiBEb250QXBwbHlBbmltYXRpb247CisKKyAgICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0
ZVR5cGUgPSB0aGlzLT5hdHRyaWJ1dGVUeXBlKCk7CisgICAgc3dpdGNoIChhdHRyaWJ1dGVUeXBl
KSB7CisgICAgY2FzZSBBdHRyaWJ1dGVUeXBlQXV0bzoKKyAgICAgICAgLy8gRm9yIGF0dHJpYnV0
ZVR5cGU9ImF1dG8iLCB0cnkgQ1NTIGZpcnN0LiBJZiB0aGF0IGZhaWxzLCB0cnkgWE1MLgorICAg
IGNhc2UgQXR0cmlidXRlVHlwZUNTUzoKKyAgICAgICAgLy8gSWYgYXR0cmlidXRlTmFtZSBpcyBh
IGtub3duIGFuaW1hdGFibGUgU1ZHIENTUyBwcm9wZXJ0eSwgYXBwbHkgdGhlIGFuaW1hdGlvbi4K
KyAgICAgICAgaWYgKGlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVudCwg
YXR0cmlidXRlTmFtZSkpCisgICAgICAgICAgICByZXR1cm4gQXBwbHlDU1NBbmltYXRpb247Cisg
ICAgICAgIC8vIElmIGF0dHJpYnV0ZU5hbWUgaXMgdW5rbm93biBhbmQgdHRyaWJ1dGVUeXBlIGlz
IG5vdCAnYXV0bycsIGRvbid0IGFwcGx5IHRoZSBhbmltYXRpb24uCisgICAgICAgIGlmIChhdHRy
aWJ1dGVUeXBlID09IEF0dHJpYnV0ZVR5cGVDU1MpCisgICAgICAgICAgICByZXR1cm4gRG9udEFw
cGx5QW5pbWF0aW9uOworICAgICAgICAvLyBGb3IgYXR0cmlidXRlVHlwZT0iYXV0byIsIHRyeSBY
TUwgYW5pbWF0aW9uIG5vdy4KKyAgICBjYXNlIEF0dHJpYnV0ZVR5cGVYTUw6CisgICAgICAgIHJl
dHVybiBBcHBseVhNTEFuaW1hdGlvbjsKKyAgICB9OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIERvbnRBcHBseUFuaW1hdGlvbjsKK30KKwogdm9pZCBTVkdBbmltYXRp
b25FbGVtZW50OjpjYWxjdWxhdGVLZXlUaW1lc0ZvckNhbGNNb2RlUGFjZWQoKQogewogICAgIEFT
U0VSVChjYWxjTW9kZSgpID09IENhbGNNb2RlUGFjZWQpOwpAQCAtNTkzLDcgKzYzOSw3IEBAIHZv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUludGVydmFsKCkKICAgICB9IGVs
c2UgaWYgKGFuaW1hdGlvbk1vZGUgPT0gUGF0aEFuaW1hdGlvbikKICAgICAgICAgbV9hbmltYXRp
b25WYWxpZCA9IGNhbGNNb2RlID09IENhbGNNb2RlUGFjZWQgfHwgIWZhc3RIYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmtleVBvaW50c0F0dHIpIHx8IChtX2tleVRpbWVzLnNpemUoKSA+IDEgJiYgbV9r
ZXlUaW1lcy5zaXplKCkgPT0gbV9rZXlQb2ludHMuc2l6ZSgpKTsKIH0KLSAgICAKKwogdm9pZCBT
VkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWdu
ZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKIHsgICAgCiAgICAgaWYg
KCFtX2FuaW1hdGlvblZhbGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmgKaW5kZXggNDk1YzFiMjQ0MmNiNTE1ZDQ4YmE3MTk2ZTBjZTI1YmJlMmU1ZTljMy4uNzNhMzMx
YWIxMWY0ZWI5YmYxNjNkZjdiYzhiYjgzMzZiYzhhMTM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5oCkBAIC0xMDUsNiArMTA1LDggQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVs
ZW1lbnQqIHJlc3VsdEVsZW1lbnQpOwogCisgICAgdm9pZCByZXNldEFuaW1hdGlvblN0YXRlKGNv
bnN0IFN0cmluZyYgYmFzZVZhbHVlKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXR0
cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqKSBPVkVSUklERTsKIApAQCAtMTIyLDYgKzEyNCwxNCBA
QCBwcml2YXRlOgogICAgIGZsb2F0IGNhbGN1bGF0ZVBlcmNlbnRGb3JGcm9tVG8oZmxvYXQgcGVy
Y2VudCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY2FsY3VsYXRlS2V5VGltZXNJbmRleChmbG9hdCBw
ZXJjZW50KSBjb25zdDsKIAorICAgIGVudW0gU2hvdWxkQXBwbHlBbmltYXRpb24geworICAgICAg
ICBEb250QXBwbHlBbmltYXRpb24sCisgICAgICAgIEFwcGx5Q1NTQW5pbWF0aW9uLAorICAgICAg
ICBBcHBseVhNTEFuaW1hdGlvbgorICAgIH07CisKKyAgICBTaG91bGRBcHBseUFuaW1hdGlvbiBz
aG91bGRBcHBseUFuaW1hdGlvbihTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKTsKKwogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURf
UFJPUEVSVElFUyhTVkdBbmltYXRpb25FbGVtZW50KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVE
X0JPT0xFQU4oRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCkKICAgICBFTkRfREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5jcHAKaW5kZXggOTMwZjVmNDdhYTcwNDk5NDQxMDYwMTY4ZTgxM2NjNGMwMThhZmEw
MC4uY2M3MjNhZjBiNDliM2VhYzE5MjdhNjM0ZWNmYzA1Mjk5YjE2MjZiZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVu
dCgpCiAgICAgICAgIEFTU0VSVChpdCAhPSByYXJlRGF0YU1hcC5lbmQoKSk7CiAKICAgICAgICAg
U1ZHRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHJhcmVE
YXRhLT5kZXN0cm95T3ZlcnJpZGVTdHlsZVByb3BlcnR5U2V0KCk7CiAgICAgICAgIGlmIChTVkdD
dXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmFyZURhdGEtPmN1cnNvckVsZW1lbnQoKSkK
ICAgICAgICAgICAgIGN1cnNvckVsZW1lbnQtPnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICAgICAg
aWYgKENTU0N1cnNvckltYWdlVmFsdWUqIGN1cnNvckltYWdlVmFsdWUgPSByYXJlRGF0YS0+Y3Vy
c29ySW1hZ2VWYWx1ZSgpKQpAQCAtNDg4LDYgKzQ4OSwxOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTVkdFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVyKCkKICAgICByZXR1cm4gZG9j
dW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQoY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKSwgc3R5bGUsIGZhbHNlIC8qYWxsb3dTaGFyaW5nKi8pOwogfQogCitTdHlsZVByb3Bl
cnR5U2V0KiBTVkdFbGVtZW50OjpvdmVycmlkZVN0eWxlUHJvcGVydHlTZXQoKSBjb25zdAorewor
ICAgIGlmIChoYXNSYXJlU1ZHRGF0YSgpKQorICAgICAgICByZXR1cm4gcmFyZVNWR0RhdGEoKS0+
b3ZlcnJpZGVTdHlsZVByb3BlcnR5U2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0eWxlUHJv
cGVydHlTZXQqIFNWR0VsZW1lbnQ6OmVuc3VyZU92ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldCgpCit7
CisgICAgcmV0dXJuIGVuc3VyZVJhcmVTVkdEYXRhKCktPmVuc3VyZU92ZXJyaWRlU3R5bGVQcm9w
ZXJ0eVNldCgpOworfQorCiAjaWZuZGVmIE5ERUJVRwogYm9vbCBTVkdFbGVtZW50Ojppc0FuaW1h
dGFibGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCmluZGV4IDQ3MzU2OTBiMzAyZjlkOWM0MTU3OGEwYjY3MWU4Mzc5ODhmMTc2NjMu
LmEwNTM3NDc4ZWI0NDliNDgyM2RlZWIwNzlkZjk3YmY5OGQwYjI0YzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuaApAQCAtMTA3LDYgKzEwNyw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBp
c0FuaW1hdGFibGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogI2VuZGlmCiAKKyAg
ICBTdHlsZVByb3BlcnR5U2V0KiBvdmVycmlkZVN0eWxlUHJvcGVydHlTZXQoKSBjb25zdDsKKyAg
ICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVPdmVycmlkZVN0eWxlUHJvcGVydHlTZXQoKTsKKwog
cHJvdGVjdGVkOgogICAgIFNWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiwgQ29uc3RydWN0aW9uVHlwZSA9IENyZWF0ZVNWR0VsZW1lbnQpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgKaW5kZXggNTAxOTY2MjQxMDQzYjk4ZDZjMzdjODJiOWZk
YzljY2IxYTgyZTI4ZC4uNmMwNDlhYmQzMjZmOTg2NTA2NGQwNzg5MDRkMjUxM2E4YmQ5MTUwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaApAQCAtNzQsNiArNzQsMjEg
QEAgcHVibGljOgogICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGN1cnNvckltYWdlVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2N1cnNvckltYWdlVmFsdWU7IH0KICAgICB2b2lkIHNldEN1cnNvcklt
YWdlVmFsdWUoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VWYWx1ZSkgeyBtX2N1cnNv
ckltYWdlVmFsdWUgPSBjdXJzb3JJbWFnZVZhbHVlOyB9CiAKKyAgICBTdHlsZVByb3BlcnR5U2V0
KiBvdmVycmlkZVN0eWxlUHJvcGVydHlTZXQoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlU3R5
bGVQcm9wZXJ0eVNldC5nZXQoKTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZU92ZXJy
aWRlU3R5bGVQcm9wZXJ0eVNldCgpCisgICAgeworICAgICAgICBpZiAoIW1fb3ZlcnJpZGVTdHls
ZVByb3BlcnR5U2V0KSB7CisgICAgICAgICAgICBtX292ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldCA9
IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOworICAgICAgICAgICAgbV9vdmVycmlkZVN0eWxl
UHJvcGVydHlTZXQtPnNldFN0cmljdFBhcnNpbmcoZmFsc2UpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBtX292ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldC5nZXQoKTsKKyAgICB9CisKKyAgICB2
b2lkIGRlc3Ryb3lPdmVycmlkZVN0eWxlUHJvcGVydHlTZXQoKQorICAgIHsKKyAgICAgICAgbV9v
dmVycmlkZVN0eWxlUHJvcGVydHlTZXQgPSAwOworICAgIH0KKwogcHJpdmF0ZToKICAgICBIYXNo
U2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+IG1fZWxlbWVudEluc3RhbmNlczsKICAgICBTVkdDdXJz
b3JFbGVtZW50KiBtX2N1cnNvckVsZW1lbnQ7CkBAIC04MSw2ICs5Niw3IEBAIHByaXZhdGU6CiAg
ICAgU1ZHRWxlbWVudCogbV9jb3JyZXNwb25kaW5nRWxlbWVudDsKICAgICBib29sIG1faW5zdGFu
Y2VzVXBkYXRlc0Jsb2NrZWQgOiAxOwogICAgIGJvb2wgbV9oYXNQZW5kaW5nUmVzb3VyY2VzIDog
MTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9vdmVycmlkZVN0eWxlUHJvcGVydHlT
ZXQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVt
ZW50LmgKaW5kZXggOWUxZGZkMDE0YjhlN2IxYjI1YzVmYTZkNzBlMmQ4MDUwOTc4MGNkZC4uNDAw
YTdhNmJhNWQ5NGJjMTFmZjRmOTNlNjQ0MmYxMzlmOGY1YWNkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaApAQCAtMTE2LDExICsxMTYsMTEgQEAg
cHJvdGVjdGVkOgogCiAgICAgLy8gU3ViLWNsYXNzZXMgbWF5IG5lZWQgdG8gdGFrZSBhY3Rpb24g
d2hlbiB0aGUgdGFyZ2V0IGlzIGNoYW5nZWQuCiAgICAgdmlydHVhbCB2b2lkIHRhcmdldEVsZW1l
bnREaWRDaGFuZ2UoU1ZHRWxlbWVudCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBlbmRlZEFjdGl2
ZUludGVydmFsKCk7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJ
bnRlcnZhbCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9uKGZsb2F0IHBl
cmNlbnQsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpID0g
MDsKLSAgICB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsKIAogICAgIGVudW0gQmVnaW5PckVu
ZCB7CiAgICAgICAgIEJlZ2luLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDUxZTFmZWQyMDhlMDM3ZmYwODY5NjQ5Yzc4MWZj
ZDEwYTc3MGFkNTMuLjA4NmJmYmNmNzhkZGVlMDkyNmEyMmI0NmFkNWExMjhkZmYwZjZiZjkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMi0wMi0yOSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnpp
bW1lcm1hbm5AcmltLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgU01JTCBvdmVycmlkZVN0eWxl
LCB0byBtYWtlIFNWRyBzdG9wIG11dGF0aW5nIENTUyBzdHlsZXMgZGlyZWN0bHkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzkwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU1ZHIENTUyBwcm9wZXJ0eSBh
bmltYXRpb25zIGFyZW4ndCBsZWFrZWQgaW50byB0aGUgRE9NIGFueW1vcmUsIHVwZGF0ZSB0aGUg
dGVzdHMuCisKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLWNvbG9yLXRyYW5zcGFy
ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1cnJl
bnRDb2xvci1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1k
eW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdmcv
YW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jb2xvci10cmFuc3Bh
cmVudC5qczoKKyAgICAgICAgKGV4cGVjdFRyYW5zcGFyZW50KToKKyAgICAgICAgKGV4cGVjdE90
aGVyQ29sb3IpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRl
LWN1cnJlbnRDb2xvci5qczoKKyAgICAgICAgKHNhbXBsZTEpOgorICAgICAgICAoc2FtcGxlMik6
CisgICAgICAgIChzYW1wbGUzKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVz
dHMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmpzOgorICAgICAgICAoc2Ft
cGxlMSk6CisgICAgICAgIChzYW1wbGUzKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zY3Jp
cHQtdGVzdHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5qczoKKyAgICAgICAgKHNhbXBs
ZTEpOgorICAgICAgICAoc2FtcGxlMik6CisgICAgICAgIChzYW1wbGUzKToKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvc3Znc3RyaW5nLWFuaW1hdGlvbi1mYWxsYmFjay10
by1kaXNjcmV0ZS5qczoKKyAgICAgICAgKHNhbXBsZTEpOgorICAgICAgICAoc2FtcGxlMik6Cisg
ICAgICAgIChzYW1wbGUzKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zdmdzdHJpbmctYW5p
bWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLWV4cGVjdGVkLnR4dDoKKwogMjAxMi0wMi0yOSAg
WXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBtb3ZlIERPTSBjb3VudGVyIGdyYXBocyBvdXQgb2YgZXhwZXJpbWVudGFsCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWNvbG9yLXRyYW5zcGFy
ZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY29s
b3ItdHJhbnNwYXJlbnQtZXhwZWN0ZWQudHh0CmluZGV4IDlmODJhMDJiNzU1NWUzNTFlYWNkNTVm
ZDEzZTRlZDc0NjRjNTYxMDAuLmEzMDI3MGQwZmU5NTIyYjFhODFhYTExYzRhNDY3N2EzZmVlODgy
NTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY29sb3It
dHJhbnNwYXJlbnQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQtZXhwZWN0ZWQudHh0CkBAIC01LDggKzUsMTAgQEAg
VGVzdHMgdGhhdCAndHJhbnNwYXJlbnQnIGlzIHRyZWF0ZWQgYXMgYSB2YWxpZCBjb2xvci4KIE9u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnIzAw
ZmYwMCcKLVBBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjN2YwMDAwJworUEFTUyBnZXRDb21wdXRl
ZFN0eWxlKHJlY3QpLmZpbGwgaXMgJyMwMGZmMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAi
IgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwgaXMgJyM3ZjAwMDAnCitQQVNTIHJl
Y3Quc3R5bGUuZmlsbCBpcyAiIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBU
RVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmlt
YXRlLWN1cnJlbnRDb2xvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9u
cy9hbmltYXRlLWN1cnJlbnRDb2xvci1leHBlY3RlZC50eHQKaW5kZXggZjAzMDNlZTRmMTZkZGVm
NGU2ZmQwOTEyZTk5ZTRjZGFjYzI2ZTJhNC4uZTE0NDdkNWFhZmRkMDUwNDY3MTc5NGY0Mzk5MmM5
YjVjMTg3NGVmNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0
ZS1jdXJyZW50Q29sb3ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRp
b25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4dApAQCAtNSw5ICs1LDEyIEBAIFRl
c3RzIGFuaW1hdGlvbiBvbiAnY3VycmVudENvbG9yJy4KIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KIAogCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnI2ZmMDAwMCcKLVBBU1MgcmVjdC5zdHls
ZS5maWxsIGlzICcjODA0MDAwJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyMwMDgwMDAnCitQ
QVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAnI2ZmMDAwMCcKK1BBU1MgcmVjdC5z
dHlsZS5maWxsIGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAnIzgw
NDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUo
cmVjdCkuZmlsbCBpcyAnIzAwODAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCiBQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmli
dXRlTmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRl
LWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUtZXhwZWN0ZWQudHh0CmluZGV4IDg4NjVjZWE1
YjdjMzdkZWZkYTFmNDEwMWFiN2YxNzQ0NTA4ZDdjYzguLjRjYmNhZjhlODdmNDliYTc1OGJmMDJj
ODFmNTJjYzIyZDU4YWUyNzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1
dGVOYW1lLWV4cGVjdGVkLnR4dApAQCAtNSw4ICs1LDEwIEBAIFRlc3QgYmVoYXZpb3Igb24gZHlu
YW1pYy11cGRhdGUgb2YgYXR0cmlidXRlTmFtZQogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgog
CiAKLVBBU1MgcmVjdC5zdHlsZS5jb2xvciBpcyAncmdiKDAsIDEyOCwgMCknCi1QQVNTIHJlY3Qu
c3R5bGUuZmlsbCBpcyAnIzAwODAwMCcKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5jb2xv
ciBpcyAncmdiKDAsIDEyOCwgMCknCitQQVNTIHJlY3Quc3R5bGUuY29sb3IgaXMgIiIKK1BBU1Mg
Z2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIGlzICcjMDA4MDAwJworUEFTUyByZWN0LnN0eWxl
LmZpbGwgaXMgIiIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01Q
TEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhl
cml0LWNzcy1wcm9wZXJ0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9u
cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dAppbmRleCA5YzJiZjlj
ZmU4MTc3ZGFmZjg0NDYzMGQxYzg0YjJjNTI2MDJhODA0Li40YWI5MDA5OTQyNDRmMTRiYjA2NmQz
NDFmNDYxNjUyZGJiOWU2ZDNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9u
cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVk
LnR4dApAQCAtNSw5ICs1LDEyIEBAIFRlc3RzIGFuaW1hdGlvbiB3aXRoICdpbmhlcml0Jy4KIE9u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnI2Zm
MDAwMCcKLVBBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjODA0MDAwJwotUEFTUyByZWN0LnN0eWxl
LmZpbGwgaXMgJyMwMDgwMDAnCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAn
I2ZmMDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5
bGUocmVjdCkuZmlsbCBpcyAnIzgwNDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCitQ
QVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAnIzAwODAwMCcKK1BBU1MgcmVjdC5z
dHlsZS5maWxsIGlzICIiCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1Qg
Q09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10
ZXN0cy9hbmltYXRlLWNvbG9yLXRyYW5zcGFyZW50LmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1h
dGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQuanMKaW5kZXggMmU3
ZmI2OGFmOGYyOTAxYmU3MDkwNGZhMDY3ZDFmMzk1Y2Y1MGRjZC4uZDdkZmIwM2YzYTE5Y2JiNDAx
Y2E1NzYzMmIwMjJkNmExMDkwNmMyMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1h
dGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQuanMKKysrIGIvTGF5
b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY29sb3ItdHJhbnNw
YXJlbnQuanMKQEAgLTIxLDExICsyMSwxMyBAQCByb290U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChy
ZWN0KTsKIAogLy8gU2V0dXAgYW5pbWF0aW9uIHRlc3QKIGZ1bmN0aW9uIGV4cGVjdFRyYW5zcGFy
ZW50KCkgewotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyMwMGZmMDAnIik7Cisg
ICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzAwZmYwMCciKTsK
KyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAog
ZnVuY3Rpb24gZXhwZWN0T3RoZXJDb2xvcigpIHsKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5m
aWxsIiwgIicjN2YwMDAwJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3Qp
LmZpbGwiLCAiJyM3ZjAwMDAnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0
eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY3VycmVu
dENvbG9yLmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1h
dGUtY3VycmVudENvbG9yLmpzCmluZGV4IGNhOGFiNGJjMTZjNDVjZmFhN2UxZjE5MzZjOTNhYmNl
YTg5MzYyZTYuLmJiMjgyYWM0MzkzYjA0MWJkMTEyYzU4MDI0ODE1OTE5M2FhMmNkNWUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1
cnJlbnRDb2xvci5qcworKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVz
dHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanMKQEAgLTI0LDE3ICsyNCwyMCBAQCByb290U1ZHRWxl
bWVudC5hcHBlbmRDaGlsZChyZWN0KTsKIC8vIFNldHVwIGFuaW1hdGlvbiB0ZXN0CiBmdW5jdGlv
biBzYW1wbGUxKCkgewogICAgIC8vIENoZWNrIGluaXRpYWwvZW5kIGNvbmRpdGlvbnMKLSAgICBz
aG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjZmYwMDAwJyIpOworICAgIHNob3VsZEJlKCJn
ZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwiLCAiJyNmZjAwMDAnIik7CisgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1bmN0aW9uIHNhbXBs
ZTIoKSB7CiAgICAgLy8gQ2hlY2sgaGFsZi10aW1lIGNvbmRpdGlvbnMKLSAgICBzaG91bGRCZSgi
cmVjdC5zdHlsZS5maWxsIiwgIicjODA0MDAwJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRl
ZFN0eWxlKHJlY3QpLmZpbGwiLCAiJyM4MDQwMDAnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJyZWN0LnN0eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1bmN0aW9uIHNhbXBsZTMoKSB7CiAg
ICAgLy8gQ2hlY2sgaGFsZi10aW1lIGNvbmRpdGlvbnMKLSAgICBzaG91bGRCZSgicmVjdC5zdHls
ZS5maWxsIiwgIicjMDA4MDAwJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJl
Y3QpLmZpbGwiLCAiJyMwMDgwMDAnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0
LnN0eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtZHlu
YW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS5qcyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L3NjcmlwdC10ZXN0cy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUuanMKaW5k
ZXggMDEzZWIzNTlhZDQxYmE3NzU4MjY4YTNmNzVhMGFkMWFiY2JmM2ZiMi4uNjRlY2RhZWY5Yzlk
MzVhMTkxMmIwNGE0NjFmZWM2MWNmMmJkYzc4ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRl
TmFtZS5qcworKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5p
bWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmpzCkBAIC0yNCw3ICsyNCw4IEBAIHJv
b3RTVkdFbGVtZW50LmFwcGVuZENoaWxkKHJlY3QpOwogCiAvLyBTZXR1cCBhbmltYXRpb24gdGVz
dAogZnVuY3Rpb24gc2FtcGxlMSgpIHsKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5jb2xvciIs
ICIncmdiKDAsIDEyOCwgMCknIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVj
dCkuY29sb3IiLCAiJ3JnYigwLCAxMjgsIDApJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygicmVjdC5zdHlsZS5jb2xvciIsICIiKTsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMigpIHsKQEAg
LTMzLDcgKzM0LDggQEAgZnVuY3Rpb24gc2FtcGxlMigpIHsKIH0KIAogZnVuY3Rpb24gc2FtcGxl
MygpIHsKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjMDA4MDAwJyIpOworICAg
IHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwiLCAiJyMwMDgwMDAnIik7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1
bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1h
dGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHkuanMgYi9MYXlv
dXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1w
cm9wZXJ0eS5qcwppbmRleCBmYTY0NWQ4MjQ4NTQ1YmJlNmVlODIyYmZmMDg4OTk1OGVhZTQzZjFl
Li40YTFkNjY4NzNiNTBiOWQ4MjYyMTc2Yzg0Njg5NDBkZDNhN2I2M2ZiIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1pbmhlcml0LWNz
cy1wcm9wZXJ0eS5qcworKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVz
dHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5qcwpAQCAtMjcsMTcgKzI3LDIwIEBAIHJv
b3RTVkdFbGVtZW50LmFwcGVuZENoaWxkKGcpOwogLy8gU2V0dXAgYW5pbWF0aW9uIHRlc3QKIGZ1
bmN0aW9uIHNhbXBsZTEoKSB7CiAgICAgLy8gQ2hlY2sgaW5pdGlhbC9lbmQgY29uZGl0aW9ucwot
ICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyNmZjAwMDAnIik7CisgICAgc2hvdWxk
QmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInI2ZmMDAwMCciKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24g
c2FtcGxlMigpIHsKICAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29uZGl0aW9ucwotICAgIHNob3Vs
ZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyM4MDQwMDAnIik7CisgICAgc2hvdWxkQmUoImdldENv
bXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzgwNDAwMCciKTsKKyAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMygp
IHsKICAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29uZGl0aW9ucwotICAgIHNob3VsZEJlKCJyZWN0
LnN0eWxlLmZpbGwiLCAiJyMwMDgwMDAnIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5
bGUocmVjdCkuZmlsbCIsICInIzAwODAwMCciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
InJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24gZXhlY3V0ZVRlc3QoKSB7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvc3Znc3Ry
aW5nLWFuaW1hdGlvbi1mYWxsYmFjay10by1kaXNjcmV0ZS5qcyBiL0xheW91dFRlc3RzL3N2Zy9h
bmltYXRpb25zL3NjcmlwdC10ZXN0cy9zdmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRp
c2NyZXRlLmpzCmluZGV4IGY5MWE3YjJhYWY2OWFjYzc4MTA1NTE3YWViMDQ2MjM2MDhlMmIzYjQu
LjNjYjc5NDQzOTE5MTllZmU4YjIwZTI4NTU2NmQ0NDI0NzY5ODNjMDAgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9zdmdzdHJpbmctYW5pbWF0aW9u
LWZhbGxiYWNrLXRvLWRpc2NyZXRlLmpzCisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L3NjcmlwdC10ZXN0cy9zdmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLmpz
CkBAIC0yMiwxNSArMjIsMTggQEAgcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVjdCk7CiAv
LyBTZXR1cCBhbmltYXRpb24gdGVzdAogZnVuY3Rpb24gc2FtcGxlMSgpIHsKICAgICAvLyBDaGVj
ayBpbml0aWFsL2VuZCBjb25kaXRpb25zCi0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUudmlzaWJp
bGl0eSIsICIndmlzaWJsZSciKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0
KS52aXNpYmlsaXR5IiwgIid2aXNpYmxlJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygi
cmVjdC5zdHlsZS52aXNpYmlsaXR5IiwgIiIpOwogfQogCiBmdW5jdGlvbiBzYW1wbGUyKCkgewot
ICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLnZpc2liaWxpdHkiLCAiJ2hpZGRlbiciKTsKKyAgICBz
aG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS52aXNpYmlsaXR5IiwgIidoaWRkZW4nIik7
CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLnZpc2liaWxpdHkiLCAiIik7
CiB9CiAKIGZ1bmN0aW9uIHNhbXBsZTMoKSB7Ci0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUudmlz
aWJpbGl0eSIsICIndmlzaWJsZSciKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShy
ZWN0KS52aXNpYmlsaXR5IiwgIid2aXNpYmxlJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygicmVjdC5zdHlsZS52aXNpYmlsaXR5IiwgIiIpOwogfQogCiBmdW5jdGlvbiBleGVjdXRlVGVz
dCgpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Z3N0cmluZy1h
bmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
c3ZnL2FuaW1hdGlvbnMvc3Znc3RyaW5nLWFuaW1hdGlvbi1mYWxsYmFjay10by1kaXNjcmV0ZS1l
eHBlY3RlZC50eHQKaW5kZXggZDE1MzY2YjgzN2Y4NmM2MjM0OTExMzRhODYxZmQ2ZDI1NWI1ZWE5
Yy4uNWI5ZmMxYzZkODkwYzZmNjFlMjVhNWM5ODU4OTUxNWQyMTJhNTQwYiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3Znc3RyaW5nLWFuaW1hdGlvbi1mYWxsYmFjay10
by1kaXNjcmV0ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMv
c3Znc3RyaW5nLWFuaW1hdGlvbi1mYWxsYmFjay10by1kaXNjcmV0ZS1leHBlY3RlZC50eHQKQEAg
LTUsMTAgKzUsMTQgQEAgVGVzdHMgZmFsbGJhY2sgdG8gY2FsY01vZGU9J2Rpc2NyZXRlJyBvbiBh
bmltYXRpb24gb2YgU1ZHU3RyaW5nIHdpdGggJ3ZhbHVlcycuCiBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCiAKIAotUEFTUyByZWN0LnN0eWxlLnZpc2liaWxpdHkgaXMgJ3Zpc2libGUnCi1QQVNT
IHJlY3Quc3R5bGUudmlzaWJpbGl0eSBpcyAnaGlkZGVuJwotUEFTUyByZWN0LnN0eWxlLnZpc2li
aWxpdHkgaXMgJ3Zpc2libGUnCi1QQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0eSBpcyAndmlzaWJs
ZScKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS52aXNpYmlsaXR5IGlzICd2aXNpYmxlJwor
UEFTUyByZWN0LnN0eWxlLnZpc2liaWxpdHkgaXMgIiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShy
ZWN0KS52aXNpYmlsaXR5IGlzICdoaWRkZW4nCitQQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0eSBp
cyAiIgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2liaWxpdHkgaXMgJ3Zpc2libGUn
CitQQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0eSBpcyAiIgorUEFTUyBnZXRDb21wdXRlZFN0eWxl
KHJlY3QpLnZpc2liaWxpdHkgaXMgJ3Zpc2libGUnCitQQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0
eSBpcyAiIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRF
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129434</attachid>
            <date>2012-02-29 03:30:24 -0800</date>
            <delta_ts>2012-03-01 02:28:00 -0800</delta_ts>
            <desc>Patch v4</desc>
            <filename>bug-79790-20120229123022.patch</filename>
            <type>text/plain</type>
            <size>34683</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdjOTUwMTZiZGEwN2Vh
ZTE3MWEzYTJmMWFmYjUwYjYxZmRiZjkxOC4uMTkxYjAzNTc3ZDVmMGFiM2ZjYmU4ZTU0ZGY2ZjA3
ZDIwZGE2Y2MyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTAyLTI5ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxl
cyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZXh0IHN0ZXAgdG93YXJkcyBlbmFibGluZyBhbmltVmFsIHN1cHBvcnQgZm9yIFhNTCBhdHRy
aWJ1dGUgYW5pbWF0aW9ucy4KKyAgICAgICAgV2hlbiBTVkcgQ1NTIHByb3BlcnRpZXMgYXJlIGFu
aW1hdGVkIHVzaW5nIFNNSUwsIHdlIGN1cnJlbnRseSBtdXRhdGUKKyAgICAgICAgdGhlIHRhcmdl
dCBlbGVtZW50cyBzdHlsZSwgYW5kIGhhdmUgdG8ga2VlcCBhIGJhc2VWYWx1ZSBhcm91bmQgYXMg
U3RyaW5nCisgICAgICAgIHRvIGJlIGFibGUgdG8gcmVjb3ZlciBmcm9tIHRoZSBET00gbXV0YXRp
b25zIGF0IHRoZSBlbmQsIGlmIGZpbGwhPSJmcmVlemUiLgorCisgICAgICAgIFRoZSBhcHByb2Fj
aCByZXF1aXJlZCBieSBTTUlMIGlzIHRvIGtlZXAgYXJvdW5kIGFuIG92ZXJyaWRlIHN0eWxlIGRl
Y2xhcmF0aW9uCisgICAgICAgIHNldCBhbmQgYXBwbHkgaXQgcmlnaHQgYWZ0ZXIgdGhlIGlubGlu
ZSBzdHlsZSBkZWNsYXJhdGlvbnMuIEltcGxlbWVudCB0aGF0CisgICAgICAgIGZpbmFsbHksIHRv
IGF2b2lkIG11dGF0aW5nIHN0eWxlcyBkaXJlY3RseS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkRWxlbWVudFN0eWxlUHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuaDoKKyAgICAgICAgKENTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVu
dDo6U1ZHQW5pbWF0ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1l
bnQ6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVF
bGVtZW50OjplbmRlZEFjdGl2ZUludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5oOgorICAgICAgICAoU1ZHQW5pbWF0ZUVsZW1lbnQp
OgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkQ1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFhNTFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJp
YnV0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6cmVzZXRBbmltYXRpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpzaG91bGRBcHBseUFuaW1hdGlvbik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50OjpvdmVycmlkZVN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjplbnN1cmVPdmVycmlkZVN0eWxlUHJvcGVydHlTZXQp
OgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgIChTVkdFbGVtZW50KToKKyAg
ICAgICAgKiBzdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50UmFyZURhdGE6Om92ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmVuc3VyZU92ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldCk6
CisgICAgICAgIChTVkdFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxl
bWVudFJhcmVEYXRhOjpkZXN0cm95T3ZlcnJpZGVTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAg
KiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisgICAgICAgIChTVkdTTUlMRWxlbWVu
dCk6CisKIDIwMTItMDItMjggIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBET00gY291bnRlciBncmFwaHMgb3V0IG9m
IGV4cGVyaW1lbnRhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4
IDM3NzZmMWU0NTcwZGYxMGFiNmQ1MTVhODg3NWJjN2IxN2U4ZmUwYzguLjI0NTM3MmJhZTMyODUw
MmU3OTBkY2UxOTM4NzFiN2I0YmM5Y2YwN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKQEAgLTEyMiw2ICsxMjIsNyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2VuZGlm
CiAKQEAgLTc2MCw2ICs3NjEsMTggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVk
UHJvcGVydGllcyhNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFN0eWxlUHJvcGUKICAgICBtYXRj
aFJlc3VsdC5tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOwogfQogCitpbmxpbmUgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiByZXN1
bHQsIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBib29sIGlzQ2FjaGVhYmxlKQorewor
ICAgIGlmICghcHJvcGVydHlTZXQpCisgICAgICAgIHJldHVybjsKKyAgICByZXN1bHQucmFuZ2Vz
Lmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBp
ZiAocmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPT0gLTEpCisgICAgICAgIHJlc3VsdC5y
YW5nZXMuZmlyc3RBdXRob3JSdWxlID0gcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKKyAg
ICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHByb3BlcnR5U2V0KTsKKyAgICBpZiAoIWlz
Q2FjaGVhYmxlKQorICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKK30KKwogdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlv
bnMmIG9wdGlvbnMpCiB7CiAgICAgQVNTRVJUKHJ1bGVzKTsKQEAgLTEwMzAsMjIgKzEwNDMsMTIg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQpCiAgICAgICAgIAogICAgIC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBm
aXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4KICAg
ICBpZiAobV9zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBh
dHRyaWJ1dGVTdHlsZSA9IG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSkgewotICAg
ICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZFJ1bGVzLnNp
emUoKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9PSAt
MSkKLSAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9IHJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGU7Ci0gICAgICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGll
cyhyZXN1bHQsIGF0dHJpYnV0ZVN0eWxlKTsKLSAgICAgICAgfQorICAgICAgICBhZGRFbGVtZW50
U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgp
KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRp
b25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9u
YWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxs
IGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1
ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQq
IGFkZGl0aW9uYWxTdHlsZSA9IG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbEF0dHJpYnV0ZVN0
eWxlKCkpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9
PSAtMSkKLSAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9IHJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7Ci0gICAgICAgICAgICByZXN1bHQucmFuZ2Vz
Lmxhc3RBdXRob3JSdWxlID0gcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGU7Ci0gICAgICAg
ICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIGFkZGl0aW9uYWxTdHlsZSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVk
RWxlbWVudC0+YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlKCkpOwogCiAgICAgICAgIGlmIChtX3N0
eWxlZEVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICAgICAgYm9vbCBpc0F1dG87
CkBAIC0xMDYwLDE2ICsxMDYzLDE0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3Vs
dCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRl
LgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQp
IHsKLSAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lRGVjbCA9IG1fc3R5bGVkRWxlbWVu
dC0+aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgICAgIGlmIChpbmxpbmVEZWNsKSB7Ci0gICAgICAg
ICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVs
ZSA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9
IHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGU7Ci0gICAgICAgICAgICBhZGRNYXRjaGVkUHJv
cGVydGllcyhyZXN1bHQsIGlubGluZURlY2wpOwotICAgICAgICAgICAgcmVzdWx0LmlzQ2FjaGVh
YmxlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJv
cGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCksIGZhbHNl
IC8qIGlzQ2FjaGVhYmxlICovKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgLy8gTm93IGNoZWNr
IFNNSUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgorICAgIGlmIChtX21hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5pc1NWR0Vs
ZW1lbnQoKSkKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRp
Y19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5vdmVycmlkZVN0eWxlUHJvcGVy
dHlTZXQoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOworI2VuZGlmCiB9CiAKIGlubGluZSB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCkBAIC0xMTI1LDYg
KzExMjYsMTAgQEAgTm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVt
ZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUMKICAgICBTdHlsZWRFbGVtZW50KiBw
ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7CiAgICAgaWYgKHAtPmlubGlu
ZVN0eWxlRGVjbCgpKQogICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlm
IChwLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocCktPm92ZXJy
aWRlU3R5bGVQcm9wZXJ0eVNldCgpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogICAgIGlm
IChwLT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0
eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMjczLDYg
KzEyNzgsMTAgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihlbGVtZW50KS0+b3ZlcnJpZGVTdHlsZVByb3BlcnR5U2V0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogICAgIGlmICghIWVsZW1lbnQtPmF0
dHJpYnV0ZVN0eWxlKCkgIT0gISFtX3N0eWxlZEVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gbV9lbGVt
ZW50LT5pc0xpbmsoKSkKQEAgLTEzNzAsNiArMTM3OSwxMCBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5
bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgIC8vIElmIHRoZSBlbGVtZW50IGhh
cyBpbmxpbmUgc3R5bGUgaXQgaXMgcHJvYmFibHkgdW5pcXVlLgogICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpKQogICAgICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUo
U1ZHKQorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5vdmVycmlkZVN0eWxlUHJvcGVydHlT
ZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKICAgICAvLyBJZHMgc3RvcCBzdHlsZSBz
aGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCiAgICAgaWYgKG1fc3R5
bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMobV9z
dHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJl
dHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggZGNkZDIzMzY2
OTJmNGI3ZDg1NTU3ZmZmNTQ0MDYwMWU5Mjc1NjBkNC4uODYyZDIwN2U0ODI3NmVhMjRjZTVlNjM1
YzVhYThjMDcwOTZjNTc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCkBA
IC0yOTIsNiArMjkyLDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgc3RhdGljIHZvaWQgYWRk
TWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0
aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hBbGwpOworICAgIHZvaWQgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhNYXRj
aFJlc3VsdCYsIFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlzQ2FjaGVhYmxlID0gdHJ1ZSk7CiAK
ICAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmKTsKICAgICB2b2lkIG1hdGNoVUFS
dWxlcyhNYXRjaFJlc3VsdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5j
cHAKaW5kZXggMTNmN2NmOTZiMDdhM2UzN2I5MjE5ZjI0NDQyOWU5MGJlMTBiNjMzMS4uY2FjZjQ4
OGUwODFhOGYxNDhkODYwNmE4YjBiY2JhODg4MThmZGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIFNWR0FuaW1hdGVFbGVtZW50OjpTVkdBbmltYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBTVkdBbmltYXRpb25FbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KQogICAgICwgbV9hbmltYXRlZFByb3BlcnR5VHlwZShBbmlt
YXRlZFN0cmluZykKKyAgICAsIG1fYWJvdXRUb1N0b3BBbmltYXRpb24oZmFsc2UpCiAgICAgLCBt
X2Zyb21Qcm9wZXJ0eVZhbHVlVHlwZShSZWd1bGFyUHJvcGVydHlWYWx1ZSkKICAgICAsIG1fdG9Q
cm9wZXJ0eVZhbHVlVHlwZShSZWd1bGFyUHJvcGVydHlWYWx1ZSkKIHsKQEAgLTIzMCw2ICsyMzEs
MTIgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6YXBwbHlSZXN1bHRzVG9UYXJnZXQoKQogICAg
IEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlICE9IEFuaW1hdGVkVW5rbm93bik7CiAgICAg
QVNTRVJUKG1fYW5pbWF0ZWRUeXBlKTsKIAorICAgIGlmIChtX2Fib3V0VG9TdG9wQW5pbWF0aW9u
KSB7CisgICAgICAgIG1fYWJvdXRUb1N0b3BBbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgcmVz
ZXRBbmltYXRpb25TdGF0ZShtX2FuaW1hdGVkVHlwZS0+dmFsdWVBc1N0cmluZygpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUo
bV9hbmltYXRlZFR5cGUtPnZhbHVlQXNTdHJpbmcoKSk7CiB9CiAgICAgCkBAIC0yNjAsNSArMjY3
LDExIEBAIFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBTVkdBbmltYXRlRWxlbWVudDo6ZW5zdXJl
QW5pbWF0b3IoKQogICAgIHJldHVybiBtX2FuaW1hdG9yLmdldCgpOwogfQogCit2b2lkIFNWR0Fu
aW1hdGVFbGVtZW50OjplbmRlZEFjdGl2ZUludGVydmFsKCkKK3sKKyAgICBTVkdBbmltYXRpb25F
bGVtZW50OjplbmRlZEFjdGl2ZUludGVydmFsKCk7CisgICAgbV9hYm91dFRvU3RvcEFuaW1hdGlv
biA9IHRydWU7Cit9CisKIH0KICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZUVsZW1lbnQuaAppbmRleCA2OWNiOWE2ZWQ5MjJiOGVhMTE5MWIxMTAzZDUyYjVl
NjQ2M2VlY2I2Li5mZWJjMzRkN2MyNWMzNDc1N2ViZGQ3ZDc0Y2ZmYjk1YmFkMjc2Y2JjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaApAQCAtNjUsNiArNjUsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5UmVzdWx0c1RvVGFyZ2V0KCk7CiAgICAgdmly
dHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNv
bnN0IFN0cmluZyYgdG9TdHJpbmcpOwogCisgICAgdmlydHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50
ZXJ2YWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0RWxlbWVudERpZENoYW5nZShTVkdFbGVt
ZW50KiB0YXJnZXRFbGVtZW50KSBPVkVSUklERTsKIAogcHJpdmF0ZToKQEAgLTcyLDYgKzczLDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBl
KCk7CiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgbV9hbmltYXRlZFByb3BlcnR5VHlwZTsKKyAg
ICBib29sIG1fYWJvdXRUb1N0b3BBbmltYXRpb247CiAKICAgICBBbmltYXRlZFByb3BlcnR5VmFs
dWVUeXBlIG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlOwogICAgIEFuaW1hdGVkUHJvcGVydHlWYWx1
ZVR5cGUgbV90b1Byb3BlcnR5VmFsdWVUeXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCmluZGV4IDI2NTlkZDlkZjk2ZTZhOTZjNzg5OGExNDcxMDJhNjc5ODNm
OGE1MDQuLjQ2ZTY0YTMyNmMyYzQ3ZjI2ZTNkOTQwN2JhMjU3NjdkZmI5MDI1N2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKQEAgLTMzMCw1MyArMzMwLDk5
IEBAIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0
eShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50CiAgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6
OmlzQW5pbWF0YWJsZUNTU1Byb3BlcnR5KGF0dHJpYnV0ZU5hbWUpOwogfQogCi12b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRl
ZENTU1ZhbHVlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFoYXNWYWxp
ZEF0dHJpYnV0ZVR5cGUoKSkKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCA9IHRh
cmdldEVsZW1lbnQtPmVuc3VyZU92ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldCgpOworICAgIGlmICh2
YWx1ZS5pc051bGwoKSkgeworICAgICAgICBpZiAocHJvcGVydHlTZXQtPnJlbW92ZVByb3BlcnR5
KGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSkpKQorICAgICAgICAgICAg
dGFyZ2V0RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKHByb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShjc3NQcm9wZXJ0eUlEKGF0
dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpLCB2YWx1ZSwgZmFsc2UsIDApKQorICAgICAgICB0YXJn
ZXRFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFhNTFZhbHVlKFNWR0VsZW1lbnQqIHRhcmdldEVs
ZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgLy8gRklYTUU6IERldGFjaCBhbmltVmFsLCBpZiB2YWx1ZS5pc051bGwo
KSAtIG9uY2UgYW5pbVZhbCBzdXBwb3J0IGlzIGVuYWJsZWQuCisgICAgdGFyZ2V0RWxlbWVudC0+
c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBTVkdBbmltYXRp
b25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVs
ZW1lbnQoKTsKLSAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1
dGVOYW1lKCk7Ci0gICAgaWYgKCF0YXJnZXRFbGVtZW50IHx8IGF0dHJpYnV0ZU5hbWUgPT0gYW55
UU5hbWUoKSB8fCB2YWx1ZS5pc051bGwoKSkKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgpOworICAgIFNob3VsZEFwcGx5QW5pbWF0
aW9uIHNob3VsZEFwcGx5ID0gc2hvdWxkQXBwbHlBbmltYXRpb24odGFyZ2V0RWxlbWVudCwgYXR0
cmlidXRlTmFtZSk7CisgICAgaWYgKHNob3VsZEFwcGx5ID09IERvbnRBcHBseUFuaW1hdGlvbikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgaW5zdGFuY2UgdHJl
ZSB0byBnZXQgcmVidWlsZC4gSW5zdGFuY2VzIGFyZSB1cGRhdGVkIGluIHRoZSBsb29wIGJlbG93
LgorICAgIGlmIChzaG91bGRBcHBseSA9PSBBcHBseUNTU0FuaW1hdGlvbikKKyAgICAgICAgc2V0
VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRDU1NWYWx1ZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVO
YW1lLCB2YWx1ZSk7CisgICAgZWxzZQorICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRl
ZFhNTFZhbHVlKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKKwogICAgIGlm
ICh0YXJnZXRFbGVtZW50LT5pc1N0eWxlZCgpKQogICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQodHJ1
ZSk7Ci0gICAgICAgIAotICAgIGJvb2wgYXR0cmlidXRlSXNDU1NQcm9wZXJ0eSA9IGlzVGFyZ2V0
QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7Ci0gICAg
Ly8gU3RvcCBhbmltYXRpb24sIGlmIGF0dHJpYnV0ZVR5cGUgaXMgc2V0IHRvIENTUyBieSB0aGUg
dXNlciwgYnV0IHRoZSBhdHRyaWJ1dGUgaXRzZWxmIGlzIG5vdCBhIENTUyBwcm9wZXJ0eS4KLSAg
ICBpZiAoIWF0dHJpYnV0ZUlzQ1NTUHJvcGVydHkgJiYgYXR0cmlidXRlVHlwZSgpID09IEF0dHJp
YnV0ZVR5cGVDU1MpCi0gICAgICAgIHJldHVybjsKIAotICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0g
ICAgaWYgKGF0dHJpYnV0ZUlzQ1NTUHJvcGVydHkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHNldCB0aGUgb3ZlcnJpZGUgc3R5bGUsIG5vdCB0aGUgaW5saW5lIHN0eWxlLgotICAg
ICAgICAvLyBTYWRseSBvdmVycmlkZSBzdHlsZXMgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCi0g
ICAgICAgIHRhcmdldEVsZW1lbnQtPnN0eWxlKCktPnNldFByb3BlcnR5KGF0dHJpYnV0ZU5hbWUu
bG9jYWxOYW1lKCksIHZhbHVlLCAiIiwgZWMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBzZXQgdGhlICdwcmVzZW50YXRpb24nIHZhbHVlLCBub3QgdGhlIGFj
dHVhbCAKLSAgICAgICAgLy8gYXR0cmlidXRlIHZhbHVlLiBXaGF0ZXZlciB0aGF0IG1lYW5zIGlu
IHByYWN0aWNlLgotICAgICAgICB0YXJnZXRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRl
TmFtZSwgdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBpZiAodGFyZ2V0RWxlbWVudC0+aXNTdHls
ZWQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHRhcmdldEVsZW1l
bnQpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGZhbHNlKTsKLSAgICAKLSAgICAvLyBJZiB0
aGUgdGFyZ2V0IGVsZW1lbnQgaXMgdXNlZCBpbiBhbiA8dXNlPiBpbnN0YW5jZSB0cmVlLCB1cGRh
dGUgdGhhdCBhcyB3ZWxsLgorICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgaW5zdGFu
Y2VzLCB1cGRhdGUgdGhlbSBhcyB3ZWxsLCB3L28gcmVxdWlyaW5nIHRoZSA8dXNlPiB0cmVlIHRv
IGJlIHJlYnVpbHQuCiAgICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgaW5z
dGFuY2VzID0gdGFyZ2V0RWxlbWVudC0+aW5zdGFuY2VzRm9yRWxlbWVudCgpOwogICAgIGNvbnN0
IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3Rh
bmNlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICBTVkdFbGVtZW50KiBzaGFkb3dUcmVlRWxlbWVudCA9ICgqaXQpLT5zaGFkb3dUcmVlRWxl
bWVudCgpOwogICAgICAgICBpZiAoIXNoYWRvd1RyZWVFbGVtZW50KQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVJc0NTU1Byb3BlcnR5KQotICAgICAgICAgICAg
c2hhZG93VHJlZUVsZW1lbnQtPnN0eWxlKCktPnNldFByb3BlcnR5KGF0dHJpYnV0ZU5hbWUubG9j
YWxOYW1lKCksIHZhbHVlLCAiIiwgZWMpOworCisgICAgICAgIGlmIChzaG91bGRBcHBseSA9PSBB
cHBseUNTU0FuaW1hdGlvbikKKyAgICAgICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVk
Q1NTVmFsdWUoc2hhZG93VHJlZUVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc2hhZG93VHJlZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRy
aWJ1dGVOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICgqaXQpLT5jb3JyZXNwb25kaW5nVXNlRWxlbWVu
dCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1
dGVBbmltYXRlZENTU1ZhbHVlKHNoYWRvd1RyZWVFbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCB2YWx1
ZSk7CiAgICAgfQorCisgICAgaWYgKHRhcmdldEVsZW1lbnQtPmlzU3R5bGVkKCkpCisgICAgICAg
IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KS0+c2V0SW5zdGFu
Y2VVcGRhdGVzQmxvY2tlZChmYWxzZSk7CiB9Ci0gICAgCisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxl
bWVudDo6cmVzZXRBbmltYXRpb25TdGF0ZShjb25zdCBTdHJpbmcmIGJhc2VWYWx1ZSkKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBleHRyYSBjaGVjayB3aWxsIGdvIGF3YXksIG9uY2UgYW5pbVZhbCBp
cyBlbmFibGVkLgorICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRF
bGVtZW50KCk7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IHRoaXMt
PmF0dHJpYnV0ZU5hbWUoKTsKKyAgICBTaG91bGRBcHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9
IHNob3VsZEFwcGx5QW5pbWF0aW9uKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOworICAg
IGlmIChzaG91bGRBcHBseSA9PSBEb250QXBwbHlBbmltYXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChpc0Zyb3plbigpIHx8IHNob3VsZEFwcGx5ID09IEFwcGx5WE1MQW5pbWF0aW9u
KQorICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKGJhc2VWYWx1ZSk7Cisg
ICAgZWxzZSAvLyBPbmx5IENTUyBhbmltYXRpb25zIHN1cHBvcnQgZGV0YWNoaW5nIHByZXZpb3Vz
bHkgYW5pbWF0ZWQgcHJvcGVydGllcyBzbyBmYXIsIGluZGljYXRpbmcgYnkgcGFzc2luZyBhIG51
bGwtc3RyaW5nLgorICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKFN0cmlu
ZygpKTsKK30KKworU1ZHQW5pbWF0aW9uRWxlbWVudDo6U2hvdWxkQXBwbHlBbmltYXRpb24gU1ZH
QW5pbWF0aW9uRWxlbWVudDo6c2hvdWxkQXBwbHlBbmltYXRpb24oU1ZHRWxlbWVudCogdGFyZ2V0
RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKK3sKKyAgICBpZiAo
IWhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIHx8ICF0YXJnZXRFbGVtZW50IHx8IGF0dHJpYnV0ZU5h
bWUgPT0gYW55UU5hbWUoKSkKKyAgICAgICAgcmV0dXJuIERvbnRBcHBseUFuaW1hdGlvbjsKKwor
ICAgIEF0dHJpYnV0ZVR5cGUgYXR0cmlidXRlVHlwZSA9IHRoaXMtPmF0dHJpYnV0ZVR5cGUoKTsK
KyAgICBzd2l0Y2ggKGF0dHJpYnV0ZVR5cGUpIHsKKyAgICBjYXNlIEF0dHJpYnV0ZVR5cGVBdXRv
OgorICAgICAgICAvLyBGb3IgYXR0cmlidXRlVHlwZT0iYXV0byIsIHRyeSBDU1MgZmlyc3QuIElm
IHRoYXQgZmFpbHMsIHRyeSBYTUwuCisgICAgY2FzZSBBdHRyaWJ1dGVUeXBlQ1NTOgorICAgICAg
ICAvLyBJZiBhdHRyaWJ1dGVOYW1lIGlzIGEga25vd24gYW5pbWF0YWJsZSBTVkcgQ1NTIHByb3Bl
cnR5LCBhcHBseSB0aGUgYW5pbWF0aW9uLgorICAgICAgICBpZiAoaXNUYXJnZXRBdHRyaWJ1dGVD
U1NQcm9wZXJ0eSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKSkKKyAgICAgICAgICAgIHJl
dHVybiBBcHBseUNTU0FuaW1hdGlvbjsKKyAgICAgICAgLy8gSWYgYXR0cmlidXRlTmFtZSBpcyB1
bmtub3duIGFuZCB0dHJpYnV0ZVR5cGUgaXMgbm90ICdhdXRvJywgZG9uJ3QgYXBwbHkgdGhlIGFu
aW1hdGlvbi4KKyAgICAgICAgaWYgKGF0dHJpYnV0ZVR5cGUgPT0gQXR0cmlidXRlVHlwZUNTUykK
KyAgICAgICAgICAgIHJldHVybiBEb250QXBwbHlBbmltYXRpb247CisgICAgICAgIC8vIEZvciBh
dHRyaWJ1dGVUeXBlPSJhdXRvIiwgdHJ5IFhNTCBhbmltYXRpb24gbm93LgorICAgIGNhc2UgQXR0
cmlidXRlVHlwZVhNTDoKKyAgICAgICAgcmV0dXJuIEFwcGx5WE1MQW5pbWF0aW9uOworICAgIH07
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRG9udEFwcGx5QW5pbWF0
aW9uOworfQorCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUtleVRpbWVzRm9y
Q2FsY01vZGVQYWNlZCgpCiB7CiAgICAgQVNTRVJUKGNhbGNNb2RlKCkgPT0gQ2FsY01vZGVQYWNl
ZCk7CkBAIC01OTMsNyArNjM5LDcgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpzdGFydGVk
QWN0aXZlSW50ZXJ2YWwoKQogICAgIH0gZWxzZSBpZiAoYW5pbWF0aW9uTW9kZSA9PSBQYXRoQW5p
bWF0aW9uKQogICAgICAgICBtX2FuaW1hdGlvblZhbGlkID0gY2FsY01vZGUgPT0gQ2FsY01vZGVQ
YWNlZCB8fCAhZmFzdEhhc0F0dHJpYnV0ZShTVkdOYW1lczo6a2V5UG9pbnRzQXR0cikgfHwgKG1f
a2V5VGltZXMuc2l6ZSgpID4gMSAmJiBtX2tleVRpbWVzLnNpemUoKSA9PSBtX2tleVBvaW50cy5z
aXplKCkpOwogfQotICAgIAorCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGlvbihmbG9hdCBwZXJjZW50LCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1
bHRFbGVtZW50KQogeyAgICAKICAgICBpZiAoIW1fYW5pbWF0aW9uVmFsaWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAppbmRleCA0OTVjMWIyNDQyY2I1MTVkNDhiYTcx
OTZlMGNlMjViYmUyZTVlOWMzLi43M2EzMzFhYjExZjRlYjliZjE2M2RmN2JjOGJiODMzNmJjOGEx
MzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKQEAgLTEwNSw2
ICsxMDUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJbnRl
cnZhbCgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBbmltYXRpb24oZmxvYXQgcGVyY2VudCwg
dW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCk7CiAKKyAgICB2
b2lkIHJlc2V0QW5pbWF0aW9uU3RhdGUoY29uc3QgU3RyaW5nJiBiYXNlVmFsdWUpOworCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSopIE9WRVJS
SURFOwogCkBAIC0xMjIsNiArMTI0LDE0IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgY2FsY3VsYXRl
UGVyY2VudEZvckZyb21UbyhmbG9hdCBwZXJjZW50KSBjb25zdDsKICAgICB1bnNpZ25lZCBjYWxj
dWxhdGVLZXlUaW1lc0luZGV4KGZsb2F0IHBlcmNlbnQpIGNvbnN0OwogCisgICAgZW51bSBTaG91
bGRBcHBseUFuaW1hdGlvbiB7CisgICAgICAgIERvbnRBcHBseUFuaW1hdGlvbiwKKyAgICAgICAg
QXBwbHlDU1NBbmltYXRpb24sCisgICAgICAgIEFwcGx5WE1MQW5pbWF0aW9uCisgICAgfTsKKwor
ICAgIFNob3VsZEFwcGx5QW5pbWF0aW9uIHNob3VsZEFwcGx5QW5pbWF0aW9uKFNWR0VsZW1lbnQq
IHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpOworCiAg
ICAgQkVHSU5fREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTKFNWR0FuaW1hdGlvbkVsZW1lbnQp
CiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfQk9PTEVBTihFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkLCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKQogICAgIEVORF9ERUNMQVJFX0FOSU1BVEVE
X1BST1BFUlRJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCA5MzBmNWY0N2FhNzA0
OTk0NDEwNjAxNjhlODEzY2M0YzAxOGFmYTAwLi5jYzcyM2FmMGI0OWIzZWFjMTkyN2E2MzRlY2Zj
MDUyOTliMTYyNmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC03OCw2ICs3OCw3
IEBAIFNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KCkKICAgICAgICAgQVNTRVJUKGl0ICE9IHJhcmVE
YXRhTWFwLmVuZCgpKTsKIAogICAgICAgICBTVkdFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0g
aXQtPnNlY29uZDsKKyAgICAgICAgcmFyZURhdGEtPmRlc3Ryb3lPdmVycmlkZVN0eWxlUHJvcGVy
dHlTZXQoKTsKICAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSBy
YXJlRGF0YS0+Y3Vyc29yRWxlbWVudCgpKQogICAgICAgICAgICAgY3Vyc29yRWxlbWVudC0+cmVt
b3ZlQ2xpZW50KHRoaXMpOwogICAgICAgICBpZiAoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogY3Vyc29y
SW1hZ2VWYWx1ZSA9IHJhcmVEYXRhLT5jdXJzb3JJbWFnZVZhbHVlKCkpCkBAIC00ODgsNiArNDg5
LDE4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFNWR0VsZW1lbnQ6OmN1c3RvbVN0eWxlRm9y
UmVuZGVyZXIoKQogICAgIHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxl
Rm9yRWxlbWVudChjb3JyZXNwb25kaW5nRWxlbWVudCgpLCBzdHlsZSwgZmFsc2UgLyphbGxvd1No
YXJpbmcqLyk7CiB9CiAKK1N0eWxlUHJvcGVydHlTZXQqIFNWR0VsZW1lbnQ6Om92ZXJyaWRlU3R5
bGVQcm9wZXJ0eVNldCgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1JhcmVTVkdEYXRhKCkpCisgICAg
ICAgIHJldHVybiByYXJlU1ZHRGF0YSgpLT5vdmVycmlkZVN0eWxlUHJvcGVydHlTZXQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworU3R5bGVQcm9wZXJ0eVNldCogU1ZHRWxlbWVudDo6ZW5zdXJlT3Zl
cnJpZGVTdHlsZVByb3BlcnR5U2V0KCkKK3sKKyAgICByZXR1cm4gZW5zdXJlUmFyZVNWR0RhdGEo
KS0+ZW5zdXJlT3ZlcnJpZGVTdHlsZVByb3BlcnR5U2V0KCk7Cit9CisKICNpZm5kZWYgTkRFQlVH
CiBib29sIFNWR0VsZW1lbnQ6OmlzQW5pbWF0YWJsZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKaW5kZXggNDczNTY5MGIzMDJmOWQ5
YzQxNTc4YTBiNjcxZTgzNzk4OGYxNzY2My4uYTA1Mzc0NzhlYjQ0OWI0ODIzZGVlYjA3OWRmOTdi
Zjk4ZDBiMjRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCkBAIC0xMDcsNiArMTA3LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyBib29sIGlzQW5pbWF0YWJsZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJik7CiAjZW5kaWYKIAorICAgIFN0eWxlUHJvcGVydHlTZXQqIG92ZXJyaWRlU3R5
bGVQcm9wZXJ0eVNldCgpIGNvbnN0OworICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZU92ZXJy
aWRlU3R5bGVQcm9wZXJ0eVNldCgpOworCiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBDb25zdHJ1Y3Rpb25UeXBlID0gQ3JlYXRlU1ZH
RWxlbWVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFy
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAppbmRleCA1
MDE5NjYyNDEwNDNiOThkNmMzN2M4MmI5ZmRjOWNjYjFhODJlMjhkLi42YzA0OWFiZDMyNmY5ODY1
MDY0ZDA3ODkwNGQyNTEzYThiZDkxNTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudFJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRS
YXJlRGF0YS5oCkBAIC03NCw2ICs3NCwyMSBAQCBwdWJsaWM6CiAgICAgQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZSogY3Vyc29ySW1hZ2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29ySW1hZ2VWYWx1
ZTsgfQogICAgIHZvaWQgc2V0Q3Vyc29ySW1hZ2VWYWx1ZShDU1NDdXJzb3JJbWFnZVZhbHVlKiBj
dXJzb3JJbWFnZVZhbHVlKSB7IG1fY3Vyc29ySW1hZ2VWYWx1ZSA9IGN1cnNvckltYWdlVmFsdWU7
IH0KIAorICAgIFN0eWxlUHJvcGVydHlTZXQqIG92ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVTdHlsZVByb3BlcnR5U2V0LmdldCgpOyB9CisgICAgU3R5
bGVQcm9wZXJ0eVNldCogZW5zdXJlT3ZlcnJpZGVTdHlsZVByb3BlcnR5U2V0KCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9vdmVycmlkZVN0eWxlUHJvcGVydHlTZXQpIHsKKyAgICAgICAgICAgIG1f
b3ZlcnJpZGVTdHlsZVByb3BlcnR5U2V0ID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICBtX292ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldC0+c2V0U3RyaWN0UGFyc2luZyhm
YWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVTdHlsZVByb3BlcnR5
U2V0LmdldCgpOworICAgIH0KKworICAgIHZvaWQgZGVzdHJveU92ZXJyaWRlU3R5bGVQcm9wZXJ0
eVNldCgpCisgICAgeworICAgICAgICBtX292ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldCA9IDA7Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4gbV9lbGVt
ZW50SW5zdGFuY2VzOwogICAgIFNWR0N1cnNvckVsZW1lbnQqIG1fY3Vyc29yRWxlbWVudDsKQEAg
LTgxLDYgKzk2LDcgQEAgcHJpdmF0ZToKICAgICBTVkdFbGVtZW50KiBtX2NvcnJlc3BvbmRpbmdF
bGVtZW50OwogICAgIGJvb2wgbV9pbnN0YW5jZXNVcGRhdGVzQmxvY2tlZCA6IDE7CiAgICAgYm9v
bCBtX2hhc1BlbmRpbmdSZXNvdXJjZXMgOiAxOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBtX292ZXJyaWRlU3R5bGVQcm9wZXJ0eVNldDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAppbmRleCA5ZTFkZmQwMTRiOGU3YjFiMjVj
NWZhNmQ3MGUyZDgwNTA5NzgwY2RkLi40MDBhN2E2YmE1ZDk0YmMxMWZmNGY5M2U2NDQyZjEzOWY4
ZjVhY2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5oCkBAIC0xMTYsMTEgKzExNiwxMSBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBTdWItY2xhc3Nl
cyBtYXkgbmVlZCB0byB0YWtlIGFjdGlvbiB3aGVuIHRoZSB0YXJnZXQgaXMgY2hhbmdlZC4KICAg
ICB2aXJ0dWFsIHZvaWQgdGFyZ2V0RWxlbWVudERpZENoYW5nZShTVkdFbGVtZW50KikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsKIAogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgc3RhcnRlZEFjdGl2ZUludGVydmFsKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlM
RWxlbWVudCogcmVzdWx0RWxlbWVudCkgPSAwOwotICAgIHZvaWQgZW5kZWRBY3RpdmVJbnRlcnZh
bCgpOwogCiAgICAgZW51bSBCZWdpbk9yRW5kIHsKICAgICAgICAgQmVnaW4sCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTFl
MWZlZDIwOGUwMzdmZjA4Njk2NDljNzgxZmNkMTBhNzcwYWQ1My4uMDg2YmZiY2Y3OGRkZWUwOTI2
YTIyYjQ2YWQ1YTEyOGRmZjBmNmJmOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAyLTI5
ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIElu
dHJvZHVjZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NT
IHN0eWxlcyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTVkcgQ1NTIHByb3BlcnR5IGFuaW1hdGlvbnMgYXJlbid0IGxlYWtlZCBpbnRvIHRo
ZSBET00gYW55bW9yZSwgdXBkYXRlIHRoZSB0ZXN0cy4KKworICAgICAgICAqIHN2Zy9hbmltYXRp
b25zL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2
Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3Mt
cHJvcGVydHktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10
ZXN0cy9hbmltYXRlLWNvbG9yLXRyYW5zcGFyZW50LmpzOgorICAgICAgICAoZXhwZWN0VHJhbnNw
YXJlbnQpOgorICAgICAgICAoZXhwZWN0T3RoZXJDb2xvcik6CisgICAgICAgICogc3ZnL2FuaW1h
dGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY3VycmVudENvbG9yLmpzOgorICAgICAgICAoc2Ft
cGxlMSk6CisgICAgICAgIChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAq
IHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJp
YnV0ZU5hbWUuanM6CisgICAgICAgIChzYW1wbGUxKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAg
ICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWluaGVyaXQtY3NzLXBy
b3BlcnR5LmpzOgorICAgICAgICAoc2FtcGxlMSk6CisgICAgICAgIChzYW1wbGUyKToKKyAgICAg
ICAgKHNhbXBsZTMpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9zdmdz
dHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLmpzOgorICAgICAgICAoc2FtcGxl
MSk6CisgICAgICAgIChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAqIHN2
Zy9hbmltYXRpb25zL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUtZXhw
ZWN0ZWQudHh0OgorCiAyMDEyLTAyLTI5ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgRE9NIGNvdW50ZXIgZ3JhcGhz
IG91dCBvZiBleHBlcmltZW50YWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRp
b25zL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
c3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC1leHBlY3RlZC50eHQKaW5k
ZXggOWY4MmEwMmI3NTU1ZTM1MWVhY2Q1NWZkMTNlNGVkNzQ2NGM1NjEwMC4uYTMwMjcwZDBmZTk1
MjJiMWE4MWFhMTFjNGE0Njc3YTNmZWU4ODI1MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC1leHBl
Y3RlZC50eHQKQEAgLTUsOCArNSwxMCBAQCBUZXN0cyB0aGF0ICd0cmFuc3BhcmVudCcgaXMgdHJl
YXRlZCBhcyBhIHZhbGlkIGNvbG9yLgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBB
U1MgcmVjdC5zdHlsZS5maWxsIGlzICcjMDBmZjAwJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMg
JyM3ZjAwMDAnCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAnIzAwZmYwMCcK
K1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCku
ZmlsbCBpcyAnIzdmMDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVk
LnR4dAppbmRleCBmMDMwM2VlNGYxNmRkZWY0ZTZmZDA5MTJlOTllNGNkYWNjMjZlMmE0Li5lMTQ0
N2Q1YWFmZGQwNTA0NjcxNzk0ZjQzOTkyYzliNWMxODc0ZWY2IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1cnJlbnRDb2xvci1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3ItZXhwZWN0
ZWQudHh0CkBAIC01LDkgKzUsMTIgQEAgVGVzdHMgYW5pbWF0aW9uIG9uICdjdXJyZW50Q29sb3In
LgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1MgcmVjdC5zdHlsZS5maWxsIGlz
ICcjZmYwMDAwJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyM4MDQwMDAnCi1QQVNTIHJlY3Qu
c3R5bGUuZmlsbCBpcyAnIzAwODAwMCcKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxs
IGlzICcjZmYwMDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgIiIKK1BBU1MgZ2V0Q29tcHV0
ZWRTdHlsZShyZWN0KS5maWxsIGlzICcjODA0MDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMg
IiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIGlzICcjMDA4MDAwJworUEFTUyBy
ZWN0LnN0eWxlLmZpbGwgaXMgIiIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAog
VEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5p
bWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS1l
eHBlY3RlZC50eHQKaW5kZXggODg2NWNlYTViN2MzN2RlZmRhMWY0MTAxYWI3ZjE3NDQ1MDhkN2Nj
OC4uNGNiY2FmOGU4N2Y0OWJhNzU4YmYwMmM4MWY1MmNjMjJkNThhZTI3NiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1
dGVOYW1lLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmlt
YXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUtZXhwZWN0ZWQudHh0CkBAIC01LDggKzUs
MTAgQEAgVGVzdCBiZWhhdmlvciBvbiBkeW5hbWljLXVwZGF0ZSBvZiBhdHRyaWJ1dGVOYW1lCiBP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyByZWN0LnN0eWxlLmNvbG9yIGlzICdy
Z2IoMCwgMTI4LCAwKScKLVBBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjMDA4MDAwJworUEFTUyBn
ZXRDb21wdXRlZFN0eWxlKHJlY3QpLmNvbG9yIGlzICdyZ2IoMCwgMTI4LCAwKScKK1BBU1MgcmVj
dC5zdHlsZS5jb2xvciBpcyAiIgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwgaXMg
JyMwMDgwMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAiIgogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHkt
ZXhwZWN0ZWQudHh0CmluZGV4IDljMmJmOWNmZTgxNzdkYWZmODQ0NjMwZDFjODRiMmM1MjYwMmE4
MDQuLjRhYjkwMDk5NDI0NGYxNGJiMDY2ZDM0MWY0NjE2NTJkYmI5ZTZkM2UgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHkt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5o
ZXJpdC1jc3MtcHJvcGVydHktZXhwZWN0ZWQudHh0CkBAIC01LDkgKzUsMTIgQEAgVGVzdHMgYW5p
bWF0aW9uIHdpdGggJ2luaGVyaXQnLgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBB
U1MgcmVjdC5zdHlsZS5maWxsIGlzICcjZmYwMDAwJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMg
JyM4MDQwMDAnCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnIzAwODAwMCcKK1BBU1MgZ2V0Q29t
cHV0ZWRTdHlsZShyZWN0KS5maWxsIGlzICcjZmYwMDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwg
aXMgIiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIGlzICcjODA0MDAwJworUEFT
UyByZWN0LnN0eWxlLmZpbGwgaXMgIiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxs
IGlzICcjMDA4MDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgIiIKIFBBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQu
anMgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jb2xv
ci10cmFuc3BhcmVudC5qcwppbmRleCAyZTdmYjY4YWY4ZjI5MDFiZTcwOTA0ZmEwNjdkMWYzOTVj
ZjUwZGNkLi5kN2RmYjAzZjNhMTljYmI0MDFjYTU3NjMyYjAyMmQ2YTEwOTA2YzIwIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jb2xv
ci10cmFuc3BhcmVudC5qcworKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQt
dGVzdHMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC5qcwpAQCAtMjEsMTEgKzIxLDEzIEBAIHJv
b3RTVkdFbGVtZW50LmFwcGVuZENoaWxkKHJlY3QpOwogCiAvLyBTZXR1cCBhbmltYXRpb24gdGVz
dAogZnVuY3Rpb24gZXhwZWN0VHJhbnNwYXJlbnQoKSB7Ci0gICAgc2hvdWxkQmUoInJlY3Quc3R5
bGUuZmlsbCIsICInIzAwZmYwMCciKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShy
ZWN0KS5maWxsIiwgIicjMDBmZjAwJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVj
dC5zdHlsZS5maWxsIiwgIiIpOwogfQogCiBmdW5jdGlvbiBleHBlY3RPdGhlckNvbG9yKCkgewot
ICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyM3ZjAwMDAnIik7CisgICAgc2hvdWxk
QmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzdmMDAwMCciKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24g
ZXhlY3V0ZVRlc3QoKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9z
Y3JpcHQtdGVzdHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanMgYi9MYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanMKaW5kZXggY2E4YWI0
YmMxNmM0NWNmYWE3ZTFmMTkzNmM5M2FiY2VhODkzNjJlNi4uYmIyODJhYzQzOTNiMDQxYmQxMTJj
NTgwMjQ4MTU5MTkzYWEyY2Q1ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY3VycmVudENvbG9yLmpzCisrKyBiL0xheW91dFRlc3Rz
L3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5qcwpAQCAt
MjQsMTcgKzI0LDIwIEBAIHJvb3RTVkdFbGVtZW50LmFwcGVuZENoaWxkKHJlY3QpOwogLy8gU2V0
dXAgYW5pbWF0aW9uIHRlc3QKIGZ1bmN0aW9uIHNhbXBsZTEoKSB7CiAgICAgLy8gQ2hlY2sgaW5p
dGlhbC9lbmQgY29uZGl0aW9ucwotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyNm
ZjAwMDAnIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICIn
I2ZmMDAwMCciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIs
ICIiKTsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMigpIHsKICAgICAvLyBDaGVjayBoYWxmLXRpbWUg
Y29uZGl0aW9ucwotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyM4MDQwMDAnIik7
CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzgwNDAwMCci
KTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0K
IAogZnVuY3Rpb24gc2FtcGxlMygpIHsKICAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29uZGl0aW9u
cwotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyMwMDgwMDAnIik7CisgICAgc2hv
dWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzAwODAwMCciKTsKKyAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rp
b24gZXhlY3V0ZVRlc3QoKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9u
cy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmpzIGIv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtZHluYW1pYy11
cGRhdGUtYXR0cmlidXRlTmFtZS5qcwppbmRleCAwMTNlYjM1OWFkNDFiYTc3NTgyNjhhM2Y3NWEw
YWQxYWJjYmYzZmIyLi42NGVjZGFlZjljOWQzNWExOTEyYjA0YTQ2MWZlYzYxY2YyYmRjNzhkIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0
ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmpzCisrKyBiL0xheW91dFRlc3RzL3N2Zy9h
bmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5h
bWUuanMKQEAgLTI0LDcgKzI0LDggQEAgcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVjdCk7
CiAKIC8vIFNldHVwIGFuaW1hdGlvbiB0ZXN0CiBmdW5jdGlvbiBzYW1wbGUxKCkgewotICAgIHNo
b3VsZEJlKCJyZWN0LnN0eWxlLmNvbG9yIiwgIidyZ2IoMCwgMTI4LCAwKSciKTsKKyAgICBzaG91
bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5jb2xvciIsICIncmdiKDAsIDEyOCwgMCknIik7
CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmNvbG9yIiwgIiIpOwogfQog
CiBmdW5jdGlvbiBzYW1wbGUyKCkgewpAQCAtMzMsNyArMzQsOCBAQCBmdW5jdGlvbiBzYW1wbGUy
KCkgewogfQogCiBmdW5jdGlvbiBzYW1wbGUzKCkgewotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxl
LmZpbGwiLCAiJyMwMDgwMDAnIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVj
dCkuZmlsbCIsICInIzAwODAwMCciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Qu
c3R5bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24gZXhlY3V0ZVRlc3QoKSB7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1pbmhl
cml0LWNzcy1wcm9wZXJ0eS5qcyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10
ZXN0cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LmpzCmluZGV4IGZhNjQ1ZDgyNDg1NDVi
YmU2ZWU4MjJiZmYwODg5OTU4ZWFlNDNmMWUuLjRhMWQ2Njg3M2I1MGI5ZDgyNjIxNzZjODQ2ODk0
MGRkM2E3YjYzZmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3Njcmlw
dC10ZXN0cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LmpzCisrKyBiL0xheW91dFRlc3Rz
L3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5
LmpzCkBAIC0yNywxNyArMjcsMjAgQEAgcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQoZyk7CiAv
LyBTZXR1cCBhbmltYXRpb24gdGVzdAogZnVuY3Rpb24gc2FtcGxlMSgpIHsKICAgICAvLyBDaGVj
ayBpbml0aWFsL2VuZCBjb25kaXRpb25zCi0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIs
ICInI2ZmMDAwMCciKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxs
IiwgIicjZmYwMDAwJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5m
aWxsIiwgIiIpOwogfQogCiBmdW5jdGlvbiBzYW1wbGUyKCkgewogICAgIC8vIENoZWNrIGhhbGYt
dGltZSBjb25kaXRpb25zCi0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInIzgwNDAw
MCciKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIiwgIicjODA0
MDAwJyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5maWxsIiwgIiIp
OwogfQogCiBmdW5jdGlvbiBzYW1wbGUzKCkgewogICAgIC8vIENoZWNrIGhhbGYtdGltZSBjb25k
aXRpb25zCi0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInIzAwODAwMCciKTsKKyAg
ICBzaG91bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5maWxsIiwgIicjMDA4MDAwJyIpOwor
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5maWxsIiwgIiIpOwogfQogCiBm
dW5jdGlvbiBleGVjdXRlVGVzdCgpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmlt
YXRpb25zL3NjcmlwdC10ZXN0cy9zdmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2Ny
ZXRlLmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL3N2Z3N0cmlu
Zy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUuanMKaW5kZXggZjkxYTdiMmFhZjY5YWNj
NzgxMDU1MTdhZWIwNDYyMzYwOGUyYjNiNC4uM2NiNzk0NDM5MTkxOWVmZThiMjBlMjg1NTY2ZDQ0
MjQ3Njk4M2MwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0
LXRlc3RzL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUuanMKKysrIGIv
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL3N2Z3N0cmluZy1hbmltYXRp
b24tZmFsbGJhY2stdG8tZGlzY3JldGUuanMKQEAgLTIyLDE1ICsyMiwxOCBAQCByb290U1ZHRWxl
bWVudC5hcHBlbmRDaGlsZChyZWN0KTsKIC8vIFNldHVwIGFuaW1hdGlvbiB0ZXN0CiBmdW5jdGlv
biBzYW1wbGUxKCkgewogICAgIC8vIENoZWNrIGluaXRpYWwvZW5kIGNvbmRpdGlvbnMKLSAgICBz
aG91bGRCZSgicmVjdC5zdHlsZS52aXNpYmlsaXR5IiwgIid2aXNpYmxlJyIpOworICAgIHNob3Vs
ZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2liaWxpdHkiLCAiJ3Zpc2libGUnIik7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLnZpc2liaWxpdHkiLCAiIik7CiB9
CiAKIGZ1bmN0aW9uIHNhbXBsZTIoKSB7Ci0gICAgc2hvdWxkQmUoInJlY3Quc3R5bGUudmlzaWJp
bGl0eSIsICInaGlkZGVuJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3Qp
LnZpc2liaWxpdHkiLCAiJ2hpZGRlbiciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJl
Y3Quc3R5bGUudmlzaWJpbGl0eSIsICIiKTsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMygpIHsKLSAg
ICBzaG91bGRCZSgicmVjdC5zdHlsZS52aXNpYmlsaXR5IiwgIid2aXNpYmxlJyIpOworICAgIHNo
b3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2liaWxpdHkiLCAiJ3Zpc2libGUnIik7
CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLnZpc2liaWxpdHkiLCAiIik7
CiB9CiAKIGZ1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3ZnL2FuaW1hdGlvbnMvc3Znc3RyaW5nLWFuaW1hdGlvbi1mYWxsYmFjay10by1kaXNjcmV0ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmdzdHJpbmctYW5pbWF0
aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLWV4cGVjdGVkLnR4dAppbmRleCBkMTUzNjZiODM3Zjg2
YzYyMzQ5MTEzNGE4NjFmZDZkMjU1YjVlYTljLi41YjlmYzFjNmQ4OTBjNmY2MWUyNWE1Yzk4NTg5
NTE1ZDIxMmE1NDBiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmdz
dHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRv
LWRpc2NyZXRlLWV4cGVjdGVkLnR4dApAQCAtNSwxMCArNSwxNCBAQCBUZXN0cyBmYWxsYmFjayB0
byBjYWxjTW9kZT0nZGlzY3JldGUnIG9uIGFuaW1hdGlvbiBvZiBTVkdTdHJpbmcgd2l0aCAndmFs
dWVzJy4KIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHJlY3Quc3R5bGUudmlz
aWJpbGl0eSBpcyAndmlzaWJsZScKLVBBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICdoaWRk
ZW4nCi1QQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0eSBpcyAndmlzaWJsZScKLVBBU1MgcmVjdC5z
dHlsZS52aXNpYmlsaXR5IGlzICd2aXNpYmxlJworUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3Qp
LnZpc2liaWxpdHkgaXMgJ3Zpc2libGUnCitQQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0eSBpcyAi
IgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2liaWxpdHkgaXMgJ2hpZGRlbicKK1BB
U1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVj
dCkudmlzaWJpbGl0eSBpcyAndmlzaWJsZScKK1BBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlz
ICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkudmlzaWJpbGl0eSBpcyAndmlzaWJsZScK
K1BBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICIiCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129670</attachid>
            <date>2012-03-01 02:28:16 -0800</date>
            <delta_ts>2012-03-04 07:48:44 -0800</delta_ts>
            <desc>Patch v5</desc>
            <filename>bug-79790-20120301112812.patch</filename>
            <type>text/plain</type>
            <size>44796</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Q0OGU0MzA0ZWU3OGNl
NjIwYzI1ZjM0ODViYTMzYmQ0MTMwMTY3MS4uNTFkMGVlYzhiMGZlMWNhOThmYzc5MDhhZTFiNGFj
N2E1NjRhNzJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTAzLTAxICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxl
cyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZXh0IHN0ZXAgdG93YXJkcyBlbmFibGluZyBhbmltVmFsIHN1cHBvcnQgZm9yIFhNTCBhdHRy
aWJ1dGUgYW5pbWF0aW9ucy4KKyAgICAgICAgV2hlbiBTVkcgQ1NTIHByb3BlcnRpZXMgYXJlIGFu
aW1hdGVkIHVzaW5nIFNNSUwsIHdlIGN1cnJlbnRseSBtdXRhdGUKKyAgICAgICAgdGhlIHRhcmdl
dCBlbGVtZW50cyBzdHlsZSwgYW5kIGhhdmUgdG8ga2VlcCBhIGJhc2VWYWx1ZSBhcm91bmQgYXMg
U3RyaW5nCisgICAgICAgIHRvIGJlIGFibGUgdG8gcmVjb3ZlciBmcm9tIHRoZSBET00gbXV0YXRp
b25zIGF0IHRoZSBlbmQsIGlmIGZpbGwhPSJmcmVlemUiLgorCisgICAgICAgIFRoZSBhcHByb2Fj
aCByZXF1aXJlZCBieSBTTUlMIGlzIHRvIGtlZXAgYXJvdW5kIGFuIG92ZXJyaWRlIHN0eWxlIGRl
Y2xhcmF0aW9uCisgICAgICAgIHNldCBhbmQgYXBwbHkgaXQgcmlnaHQgYWZ0ZXIgdGhlIGlubGlu
ZSBzdHlsZSBkZWNsYXJhdGlvbnMuIEltcGxlbWVudCB0aGF0CisgICAgICAgIGZpbmFsbHksIHRv
IGF2b2lkIG11dGF0aW5nIHN0eWxlcyBkaXJlY3RseS4KKworICAgICAgICBUZXN0OiBzdmcvYW5p
bWF0aW9ucy9hdHRyaWJ1dGVUeXBlcy5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHA6IE1vZGVsICJTTUlMIGFuaW1hdGlvbiBzdHlsZSIgYXBwbHlpbmcganVzdCBsaWtl
ICJpbmxpbmUgc3R5bGUiIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OmFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMpOiBSZWZhY3RvcmVkIGNvbW1vbiBj
b2RlIGZyb20gbWF0Y2hBbGxSdWxlcygpLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hBbGxSdWxlcyk6IEFwcGx5ICJTTUlMIGFuaW1hdGlvbiBzdHlsZSIgYWZ0ZXIg
ImlubGluZSBzdHlsZSIgZGVjbGFyYXRpb25zLCBhcyBzcGVjaWZpZWQgaW4gU01JTDIuCisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDogQWRkIG5ldyBhZGRFbGVtZW50U3R5bGVQcm9w
ZXJ0aWVzKCkgaGVscGVyLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6IEtl
ZXAgdHJhY2sgb2YgYW5pbWF0aW9uIHN0YXRlLCBpZiBpdCdzIGFib3V0IHRvIGVuZCwgY2xlYXIg
IlNNSUwgYW5pbWF0aW9uIHN0eWxlIiB1cG9uIG5leHQgYXBwbHlSZXN1bHRUb1RhcmdldCgpIGNh
bGwuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmFwcGx5UmVzdWx0c1Rv
VGFyZ2V0KTogUmVzZXQgdGhlIENTUyBwcm9wZXJ0eSB3ZSdyZSBhbmltYXRpbmcgaW50IHRoZSAi
U01JTCBhbmltYXRpb24gc3R5bGUiLCBhZnRlciBhbmltYXRpb24gZW5kcy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0ZWFk
IG9mIHJlc2V0dGluZyB0YXJnZXQtPnN0eWxlKCkgcHJvcGVydGllcyB0byB0aGUgb2xkIGJhc2VW
YWx1ZSwgYXMgd2UgdXNlZCB0byBkbykuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxl
bWVudDo6ZW5kZWRBY3RpdmVJbnRlcnZhbCk6IFNldCBtX2Fib3V0VG9TdG9wQW5pbWF0aW9uIHRv
IHRydWUsIHNvIG5leHQgY2FsbCB0byBhcHBseVJlc3VsdHNUb1RhcmdldCgpIGtub3dzIHRoZSBh
bmltYXRpb24gZW5kcy4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDogU3RvcmUg
Ym9vbCBtX2Fib3V0VG9TVG9wQW5pbWF0aW9uOworICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVk
Q1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRY
TUxWYWx1ZSk6CisgICAgICAgICAgICBSZWZhY3RvcmVkIGJvdGggb2YgdGhlc2UgbWV0aG9kcyBm
cm9tIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoKS4KKyAgICAgICAgICAgIENoYW5n
ZWQgdGhlIENTUyBwYXJ0LCB0byBhcHBseSBwcm9wZXJ0eSBjaGFuZ2VzIHRvIHRoZSAiU01JTCBh
bmltYXRpb24gc3R5bGUiIGluc3RlYWQgb2YgdGhlIHJlZ3VsYXIgU3R5bGVQcm9wZXJ0eVNldC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0
ZUFuaW1hdGVkVmFsdWUpOiBSZWZhY3RvcmVkIGNvZGUsIHVzZSBzaG91bGRBcHBseUFuaW1hdGlv
bigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgYW5pbWF0aW9uIHNob3VsZCBydW4uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpyZXNldEFuaW1hdGlvblN0YXRlKTog
TmV3IGhlbHBlciBjYWxsaW5nIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUgd2l0aCBh
IG51bGwtc3RyaW5nIGZvciBDU1MgYXR0cmlidXRlcywgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGhpcyBpcyB1c2VkIHRvIGRldGVjdCB0aGF0IHRoZSBDU1MgcHJvcGVydHkgc2hvdWxk
IGJlIHJlbW92ZWQgZnJvbSB0aGUgIlNNSUwgYW5pbWF0aW9uIHN0eWxlIi4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNob3VsZEFwcGx5QW5pbWF0aW9uKTogUmVmYWN0
b3JlZCBmcm9tIGV4aXN0aW5nIGNvZGUsIGFuZCBtYWtlIGl0IG1vcmUgb2J2aW91cyBob3cgYXR0
cmlidXRlVHlwZSBpbmZsdWVuY2VzIHRoZSBhbmltYXRpb24sIGFsbCBhY2NvcmRpbmcgdG8gU1ZH
IDEuMS9TTUlMMi4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdFbGVtZW50LmNwcDogTWFuYWdlIHRoZSAiU01JTCBhbmltYXRpb24gc3R5bGUi
LCBpbiBTVkdFbGVtZW50UmFyZURhdGEsIGlmIG5lZWRlZC4gT25seSBnZXRzIGNyZWF0ZWQgaWYg
U01JTCBhbmltYXRpb25zIG9uIENTUyBwcm9wZXJ0aWVzIHJ1bi4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KTogRGVzdHJveSBTTUlMIGFuaW1hdGlvbiBzdHlsZSwg
dXBvbiBkZXN0cnVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmFuaW1hdGVk
U01JTFN0eWxlUHJvcGVydGllcyk6IFJldHVybnMgdGhlIFN0eWxlUHJvcGVydHlTZXQgZm9yIHRo
ZSAiU01JTCBhbmltYXRpb24gc3R5bGUiLCBpZiBpdCdzIGF2YWlsYWJsZS4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0VsZW1lbnQ6OmVuc3VyZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcyk6IEVu
Zm9yY2VzIGNyZWF0aW5nIHRoZSBTdHlsZVByb3BlcnR5U2V0IGZvciB0aGUgIlNNSUwgYW5pbWF0
aW9uIHN0eWxlIi4KKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOiBFeHBvc2UgbmV3IG1ldGhv
ZHMuCisgICAgICAgICogc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oOiBTdG9yZXMgdGhlICJTTUlM
IGFuaW1hdGlvbiBzdHlsZSIsIGFjdHVhbCBtYW5hZ21lbnQgaXMgZG9uZSBieSBTVkdFbGVtZW50
LCBpZiBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmFuaW1h
dGVkU01JTFN0eWxlUHJvcGVydGllcyk6IFJldHJpZXZlIGl0LgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRWxlbWVudFJhcmVEYXRhOjplbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMpOiBD
cmVhdGUgaXQuCisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmRlc3Ryb3lB
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMpOiBEZXN0cm95IGl0LgorICAgICAgICAqIHN2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDogTWFrZSBlbmRlZEFjdGl2ZUludGVydmFsKCkgdmly
dHVhbCBhZ2FpbiwgaXRzIG5lZWRlZCBieSBTVkdBbmltYXRlRWxlbWVudCBub3cuCisKIDIwMTIt
MDMtMDEgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIE1ha2UgdGhlIHRpbGluZyBjb2RlIHNsaWdodGx5IHNtYXJ0ZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCAzZDZmNDg5YWEwODU1YjliMDY4NjNk
YTg5OGFjYTc3ZTJlMzhkZjdlLi5kM2UwMWQzMGY5ZGExMzdiZDExMGVmZjY0ZWQzMDA5NjhkZDRm
YzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0xMjIsNiAr
MTIyLDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNlbmRpZgogCkBAIC03NjMsNiArNzY0LDE4IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0LCBTdHlsZVByb3BlCiAgICAgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzLmFw
cGVuZChydWxlKTsKIH0KIAoraW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBTdHlsZVByb3BlcnR5U2V0KiBw
cm9wZXJ0eVNldCwgYm9vbCBpc0NhY2hlYWJsZSkKK3sKKyAgICBpZiAoIXByb3BlcnR5U2V0KQor
ICAgICAgICByZXR1cm47CisgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7CisgICAgaWYgKHJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlID09IC0xKQorICAgICAgICByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9
IHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGU7CisgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMo
cmVzdWx0LCBwcm9wZXJ0eVNldCk7CisgICAgaWYgKCFpc0NhY2hlYWJsZSkKKyAgICAgICAgcmVz
dWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7Cit9CisKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29s
bGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJiBvcHRpb25zKQogewogICAgIEFT
U0VSVChydWxlcyk7CkBAIC0xMDMzLDIyICsxMDQ2LDEyIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgICAgICAKICAgICAvLyBO
b3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25h
bCBhdHRyaWJ1dGVzIG1hcHBlZCBmcm9tIEhUTUwuCiAgICAgaWYgKG1fc3R5bGVkRWxlbWVudCkg
ewotICAgICAgICBpZiAoU3R5bGVQcm9wZXJ0eVNldCogYXR0cmlidXRlU3R5bGUgPSBtX3N0eWxl
ZEVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5yYW5nZXMu
bGFzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWRSdWxlcy5zaXplKCk7Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgICAgICAgICAgcmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPSByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxl
OwotICAgICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBhdHRyaWJ1dGVTdHls
ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQs
IG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSk7CiAKICAgICAgICAgLy8gTm93IHdl
IGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KICAgICAgICAgLy8gVGFibGVz
IGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVz
dCBiZSBhcHBsaWVkCiAgICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVp
ciBtYXBwZWQgc3R5bGUgZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0
ZXMuCi0gICAgICAgIGlmIChTdHlsZVByb3BlcnR5U2V0KiBhZGRpdGlvbmFsU3R5bGUgPSBtX3N0
eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpKSB7Ci0gICAgICAgICAgICBp
ZiAocmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgICAgICAgICAg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpOwotICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3Vs
dC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlOwotICAgICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRp
ZXMocmVzdWx0LCBhZGRpdGlvbmFsU3R5bGUpOwotICAgICAgICB9CisgICAgICAgIGFkZEVsZW1l
bnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRy
aWJ1dGVTdHlsZSgpKTsKIAogICAgICAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwpAQCAtMTA2MywxNiArMTA2NiwxNCBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCkKICAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhyZXN1bHQsIGZhbHNlKTsKIAogICAgIC8vIE5v
dyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KLSAgICBpZiAobV9tYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgIFN0eWxlUHJvcGVy
dHlTZXQqIGlubGluZURlY2wgPSBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwot
ICAgICAgICBpZiAoaW5saW5lRGVjbCkgewotICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPSByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlOwotICAgICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBpbmxpbmVE
ZWNsKTsKLSAgICAgICAgICAgIHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQorICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVs
ZW1lbnQpCisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxl
ZEVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisK
KyNpZiBFTkFCTEUoU1ZHKQorICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlk
ZSBzdHlsZS4KKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRF
bGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIGFkZEVs
ZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9z
dHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlz
Q2FjaGVhYmxlICovKTsKKyNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
Ojppbml0RWxlbWVudChFbGVtZW50KiBlKQpAQCAtMTEyOCw2ICsxMTI5LDEwIEBAIE5vZGUqIENT
U1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25l
ZCYgdmlzaXRlZE5vZGVDCiAgICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQqPihwYXJlbnQpOwogICAgIGlmIChwLT5pbmxpbmVTdHlsZURlY2woKSkKICAgICAg
ICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAocC0+aXNTVkdFbGVtZW50KCkg
JiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHApLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKICAgICBpZiAocC0+aGFzSUQoKSAmJiBt
X2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMocC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5p
bXBsKCkpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTI3Niw2ICsxMjgxLDEwIEBAIGJvb2wg
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+
aW5saW5lU3R5bGVEZWNsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoU1ZH
KQorICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKICAgICBpZiAoISFlbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgp
ICE9ICEhbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICE9IG1fZWxlbWVudC0+aXNMaW5rKCkp
CkBAIC0xMzczLDYgKzEzODIsMTAgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6Omxv
Y2F0ZVNoYXJlZFN0eWxlKCkKICAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxl
IGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KICAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pbmxpbmVT
dHlsZURlY2woKSkKICAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAo
bV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4obV9zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAg
ICAgIHJldHVybiAwOworI2VuZGlmCiAgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0
aGV5IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgogICAgIGlmIChtX3N0eWxlZEVsZW1lbnQt
Pmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5bGVkRWxlbWVu
dC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCmluZGV4IDljNTFmODcxY2FlNTRiNGRiM2Ix
NDRhNzE0MjFjOTQ3YTU0NzExNGQuLjJmMmZlNzBmZjZmNGVjNzQ2ZjM5ZjVjZDRjNWIwNDU3NWY2
ZGQ1YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtMjk1LDYgKzI5
NSw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIHN0YXRpYyB2b2lkIGFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKE1hdGNoUmVzdWx0JiwgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVS
dWxlKiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
QWxsLCBib29sIGluUmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBpc0NhY2hl
YWJsZSA9IHRydWUpOwogCiAgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAg
ICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZUVsZW1lbnQuY3BwCmluZGV4IDEzZjdjZjk2YjA3YTNlMzdiOTIxOWYyNDQ0MjllOTBi
ZTEwYjYzMzEuLmNhY2Y0ODhlMDgxYThmMTQ4ZDg2MDZhOGIwYmNiYTg4ODE4ZmRlM2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDog
U1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIG1fYW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUoQW5pbWF0ZWRTdHJpbmcpCisgICAgLCBtX2Fib3V0VG9TdG9wQW5pbWF0aW9u
KGZhbHNlKQogICAgICwgbV9mcm9tUHJvcGVydHlWYWx1ZVR5cGUoUmVndWxhclByb3BlcnR5VmFs
dWUpCiAgICAgLCBtX3RvUHJvcGVydHlWYWx1ZVR5cGUoUmVndWxhclByb3BlcnR5VmFsdWUpCiB7
CkBAIC0yMzAsNiArMjMxLDEyIEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmFwcGx5UmVzdWx0
c1RvVGFyZ2V0KCkKICAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlwZSAhPSBBbmltYXRl
ZFVua25vd24pOwogICAgIEFTU0VSVChtX2FuaW1hdGVkVHlwZSk7CiAKKyAgICBpZiAobV9hYm91
dFRvU3RvcEFuaW1hdGlvbikgeworICAgICAgICBtX2Fib3V0VG9TdG9wQW5pbWF0aW9uID0gZmFs
c2U7CisgICAgICAgIHJlc2V0QW5pbWF0aW9uU3RhdGUobV9hbmltYXRlZFR5cGUtPnZhbHVlQXNT
dHJpbmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBzZXRUYXJnZXRBdHRyaWJ1
dGVBbmltYXRlZFZhbHVlKG1fYW5pbWF0ZWRUeXBlLT52YWx1ZUFzU3RyaW5nKCkpOwogfQogICAg
IApAQCAtMjYwLDUgKzI2NywxMSBAQCBTVkdBbmltYXRlZFR5cGVBbmltYXRvciogU1ZHQW5pbWF0
ZUVsZW1lbnQ6OmVuc3VyZUFuaW1hdG9yKCkKICAgICByZXR1cm4gbV9hbmltYXRvci5nZXQoKTsK
IH0KIAordm9pZCBTVkdBbmltYXRlRWxlbWVudDo6ZW5kZWRBY3RpdmVJbnRlcnZhbCgpCit7Cisg
ICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZW5kZWRBY3RpdmVJbnRlcnZhbCgpOworICAgIG1fYWJv
dXRUb1N0b3BBbmltYXRpb24gPSB0cnVlOworfQorCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFNWRykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgKaW5kZXggNjljYjlhNmVkOTIyYjhl
YTExOTFiMTEwM2Q1MmI1ZTY0NjNlZWNiNi4uZmViYzM0ZDdjMjVjMzQ3NTdlYmRkN2Q3NGNmZmI5
NWJhZDI3NmNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgKQEAgLTY1
LDYgKzY1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhcHBseVJlc3VsdHNUb1Rh
cmdldCgpOwogICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5n
JiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKIAorICAgIHZpcnR1YWwgdm9p
ZCBlbmRlZEFjdGl2ZUludGVydmFsKCk7CiAgICAgdmlydHVhbCB2b2lkIHRhcmdldEVsZW1lbnRE
aWRDaGFuZ2UoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgT1ZFUlJJREU7CiAKIHByaXZhdGU6
CkBAIC03Miw2ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGhhc1Zh
bGlkQXR0cmlidXRlVHlwZSgpOwogICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIG1fYW5pbWF0ZWRQ
cm9wZXJ0eVR5cGU7CisgICAgYm9vbCBtX2Fib3V0VG9TdG9wQW5pbWF0aW9uOwogCiAgICAgQW5p
bWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSBtX2Zyb21Qcm9wZXJ0eVZhbHVlVHlwZTsKICAgICBBbmlt
YXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAppbmRleCAyNjU5ZGQ5ZGY5NmU2YTk2Yzc4
OThhMTQ3MTAyYTY3OTgzZjhhNTA0Li5jZjVkOWFkNzczY2QyMjMxZTZiOWJkMzIwMDgwOTE3MmMw
M2E3OTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCkBA
IC0zMzAsNTMgKzMzMCw5OSBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0QXR0
cmlidXRlQ1NTUHJvcGVydHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudAogICAgIHJldHVybiBT
VkdTdHlsZWRFbGVtZW50Ojppc0FuaW1hdGFibGVDU1NQcm9wZXJ0eShhdHRyaWJ1dGVOYW1lKTsK
IH0KIAotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRl
ZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0VGFyZ2V0
QXR0cmlidXRlQW5pbWF0ZWRDU1NWYWx1ZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewot
ICAgIGlmICghaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkpCisgICAgU3R5bGVQcm9wZXJ0eVNldCog
cHJvcGVydHlTZXQgPSB0YXJnZXRFbGVtZW50LT5lbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3Bl
cnRpZXMoKTsKKyAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5
U2V0LT5yZW1vdmVQcm9wZXJ0eShjc3NQcm9wZXJ0eUlEKGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1l
KCkpKSkKKyAgICAgICAgICAgIHRhcmdldEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwcm9wZXJ0eVNldC0+c2V0UHJvcGVy
dHkoY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKSwgdmFsdWUsIGZhbHNl
LCAwKSkKKyAgICAgICAgdGFyZ2V0RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRYTUxWYWx1ZShT
VkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIC8vIEZJWE1FOiBEZXRhY2ggYW5pbVZh
bCwgaWYgdmFsdWUuaXNOdWxsKCkgLSBvbmNlIGFuaW1WYWwgc3VwcG9ydCBpcyBlbmFibGVkLgor
ICAgIHRhcmdldEVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRW
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorewogICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1l
bnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7Ci0gICAgUXVhbGlmaWVkTmFtZSBhdHRyaWJ1dGVO
YW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgpOwotICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCBh
dHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkgfHwgdmFsdWUuaXNOdWxsKCkpCisgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKKyAg
ICBTaG91bGRBcHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9IHNob3VsZEFwcGx5QW5pbWF0aW9u
KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChzaG91bGRBcHBseSA9PSBE
b250QXBwbHlBbmltYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGRvbid0IHdh
bnQgdGhlIGluc3RhbmNlIHRyZWUgdG8gZ2V0IHJlYnVpbGQuIEluc3RhbmNlcyBhcmUgdXBkYXRl
ZCBpbiB0aGUgbG9vcCBiZWxvdy4KKyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gQXBwbHlDU1NBbmlt
YXRpb24pCisgICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkQ1NTVmFsdWUodGFyZ2V0
RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgdmFsdWUpOworICAgIGVsc2UKKyAgICAgICAgc2V0VGFy
Z2V0QXR0cmlidXRlQW5pbWF0ZWRYTUxWYWx1ZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1l
LCB2YWx1ZSk7CisKICAgICBpZiAodGFyZ2V0RWxlbWVudC0+aXNTdHlsZWQoKSkKICAgICAgICAg
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHRhcmdldEVsZW1lbnQpLT5zZXRJbnN0YW5j
ZVVwZGF0ZXNCbG9ja2VkKHRydWUpOwotICAgICAgICAKLSAgICBib29sIGF0dHJpYnV0ZUlzQ1NT
UHJvcGVydHkgPSBpc1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0
dHJpYnV0ZU5hbWUpOwotICAgIC8vIFN0b3AgYW5pbWF0aW9uLCBpZiBhdHRyaWJ1dGVUeXBlIGlz
IHNldCB0byBDU1MgYnkgdGhlIHVzZXIsIGJ1dCB0aGUgYXR0cmlidXRlIGl0c2VsZiBpcyBub3Qg
YSBDU1MgcHJvcGVydHkuCi0gICAgaWYgKCFhdHRyaWJ1dGVJc0NTU1Byb3BlcnR5ICYmIGF0dHJp
YnV0ZVR5cGUoKSA9PSBBdHRyaWJ1dGVUeXBlQ1NTKQotICAgICAgICByZXR1cm47CiAKLSAgICBF
eGNlcHRpb25Db2RlIGVjOwotICAgIGlmIChhdHRyaWJ1dGVJc0NTU1Byb3BlcnR5KSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBzZXQgdGhlIG92ZXJyaWRlIHN0eWxlLCBub3QgdGhl
IGlubGluZSBzdHlsZS4KLSAgICAgICAgLy8gU2FkbHkgb3ZlcnJpZGUgc3R5bGVzIGFyZSBub3Qg
eWV0IGltcGxlbWVudGVkLgotICAgICAgICB0YXJnZXRFbGVtZW50LT5zdHlsZSgpLT5zZXRQcm9w
ZXJ0eShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpLCB2YWx1ZSwgIiIsIGVjKTsKLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgc2V0IHRoZSAncHJlc2VudGF0aW9u
JyB2YWx1ZSwgbm90IHRoZSBhY3R1YWwgCi0gICAgICAgIC8vIGF0dHJpYnV0ZSB2YWx1ZS4gV2hh
dGV2ZXIgdGhhdCBtZWFucyBpbiBwcmFjdGljZS4KLSAgICAgICAgdGFyZ2V0RWxlbWVudC0+c2V0
QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHRh
cmdldEVsZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVs
ZW1lbnQqPih0YXJnZXRFbGVtZW50KS0+c2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZChmYWxzZSk7
Ci0gICAgCi0gICAgLy8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIHVzZWQgaW4gYW4gPHVzZT4g
aW5zdGFuY2UgdHJlZSwgdXBkYXRlIHRoYXQgYXMgd2VsbC4KKyAgICAvLyBJZiB0aGUgdGFyZ2V0
IGVsZW1lbnQgaGFzIGluc3RhbmNlcywgdXBkYXRlIHRoZW0gYXMgd2VsbCwgdy9vIHJlcXVpcmlu
ZyB0aGUgPHVzZT4gdHJlZSB0byBiZSByZWJ1aWx0LgogICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxl
bWVudEluc3RhbmNlKj4mIGluc3RhbmNlcyA9IHRhcmdldEVsZW1lbnQtPmluc3RhbmNlc0ZvckVs
ZW1lbnQoKTsKICAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFNWR0VsZW1l
bnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgU1ZHRWxlbWVudCogc2hhZG93VHJlZUVsZW1lbnQgPSAo
Kml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFzaGFkb3dUcmVlRWxlbWVu
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYXR0cmlidXRlSXNDU1NQcm9w
ZXJ0eSkKLSAgICAgICAgICAgIHNoYWRvd1RyZWVFbGVtZW50LT5zdHlsZSgpLT5zZXRQcm9wZXJ0
eShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpLCB2YWx1ZSwgIiIsIGVjKTsKKworICAgICAgICBp
ZiAoc2hvdWxkQXBwbHkgPT0gQXBwbHlDU1NBbmltYXRpb24pCisgICAgICAgICAgICBzZXRUYXJn
ZXRBdHRyaWJ1dGVBbmltYXRlZENTU1ZhbHVlKHNoYWRvd1RyZWVFbGVtZW50LCBhdHRyaWJ1dGVO
YW1lLCB2YWx1ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNoYWRvd1RyZWVFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFsdWUpOwotICAgICAgICAoKml0KS0+Y29y
cmVzcG9uZGluZ1VzZUVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAg
ICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRDU1NWYWx1ZShzaGFkb3dUcmVlRWxlbWVudCwg
YXR0cmlidXRlTmFtZSwgdmFsdWUpOwogICAgIH0KKworICAgIGlmICh0YXJnZXRFbGVtZW50LT5p
c1N0eWxlZCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0
RWxlbWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoZmFsc2UpOwogfQotICAgIAorCit2
b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0QW5pbWF0aW9uU3RhdGUoY29uc3QgU3RyaW5n
JiBiYXNlVmFsdWUpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZXh0cmEgY2hlY2sgd2lsbCBnbyBh
d2F5LCBvbmNlIGFuaW1WYWwgaXMgZW5hYmxlZC4KKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVt
ZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7CisgICAgU2hvdWxkQXBwbHlBbmlt
YXRpb24gc2hvdWxkQXBwbHkgPSBzaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRFbGVtZW50LCBh
dHRyaWJ1dGVOYW1lKTsKKyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gRG9udEFwcGx5QW5pbWF0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNGcm96ZW4oKSB8fCBzaG91bGRBcHBseSA9
PSBBcHBseVhNTEFuaW1hdGlvbikKKyAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRW
YWx1ZShiYXNlVmFsdWUpOworICAgIGVsc2UgLy8gT25seSBDU1MgYW5pbWF0aW9ucyBzdXBwb3J0
IGRldGFjaGluZyBwcmV2aW91c2x5IGFuaW1hdGVkIHByb3BlcnRpZXMgc28gZmFyLCBpbmRpY2F0
aW5nIGJ5IHBhc3NpbmcgYSBudWxsLXN0cmluZy4KKyAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRl
QW5pbWF0ZWRWYWx1ZShTdHJpbmcoKSk7Cit9CisKK1NWR0FuaW1hdGlvbkVsZW1lbnQ6OlNob3Vs
ZEFwcGx5QW5pbWF0aW9uIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNob3VsZEFwcGx5QW5pbWF0aW9u
KFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUpCit7CisgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSB8fCAhdGFyZ2V0RWxl
bWVudCB8fCBhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkpCisgICAgICAgIHJldHVybiBEb250
QXBwbHlBbmltYXRpb247CisKKyAgICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5cGUgPSB0aGlz
LT5hdHRyaWJ1dGVUeXBlKCk7CisgICAgc3dpdGNoIChhdHRyaWJ1dGVUeXBlKSB7CisgICAgY2Fz
ZSBBdHRyaWJ1dGVUeXBlQXV0bzoKKyAgICAgICAgLy8gRm9yIGF0dHJpYnV0ZVR5cGU9ImF1dG8i
LCB0cnkgQ1NTIGZpcnN0LiBJZiB0aGF0IGZhaWxzLCB0cnkgWE1MLgorICAgIGNhc2UgQXR0cmli
dXRlVHlwZUNTUzoKKyAgICAgICAgLy8gSWYgYXR0cmlidXRlTmFtZSBpcyBhIGtub3duIGFuaW1h
dGFibGUgU1ZHIENTUyBwcm9wZXJ0eSwgYXBwbHkgdGhlIGFuaW1hdGlvbi4KKyAgICAgICAgaWYg
KGlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFt
ZSkpCisgICAgICAgICAgICByZXR1cm4gQXBwbHlDU1NBbmltYXRpb247CisgICAgICAgIC8vIElm
IGF0dHJpYnV0ZU5hbWUgaXMgdW5rbm93biBhbmQgdHRyaWJ1dGVUeXBlIGlzIG5vdCAnYXV0bycs
IGRvbid0IGFwcGx5IHRoZSBhbmltYXRpb24uCisgICAgICAgIGlmIChhdHRyaWJ1dGVUeXBlID09
IEF0dHJpYnV0ZVR5cGVDU1MpCisgICAgICAgICAgICByZXR1cm4gRG9udEFwcGx5QW5pbWF0aW9u
OworICAgICAgICAvLyBGb3IgYXR0cmlidXRlVHlwZT0iYXV0byIsIHRyeSBYTUwgYW5pbWF0aW9u
IG5vdy4KKyAgICBjYXNlIEF0dHJpYnV0ZVR5cGVYTUw6CisgICAgICAgIHJldHVybiBBcHBseVhN
TEFuaW1hdGlvbjsKKyAgICB9OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIERvbnRBcHBseUFuaW1hdGlvbjsKK30KKwogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojpj
YWxjdWxhdGVLZXlUaW1lc0ZvckNhbGNNb2RlUGFjZWQoKQogewogICAgIEFTU0VSVChjYWxjTW9k
ZSgpID09IENhbGNNb2RlUGFjZWQpOwpAQCAtNTkzLDcgKzYzOSw3IEBAIHZvaWQgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUludGVydmFsKCkKICAgICB9IGVsc2UgaWYgKGFuaW1h
dGlvbk1vZGUgPT0gUGF0aEFuaW1hdGlvbikKICAgICAgICAgbV9hbmltYXRpb25WYWxpZCA9IGNh
bGNNb2RlID09IENhbGNNb2RlUGFjZWQgfHwgIWZhc3RIYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6Omtl
eVBvaW50c0F0dHIpIHx8IChtX2tleVRpbWVzLnNpemUoKSA+IDEgJiYgbV9rZXlUaW1lcy5zaXpl
KCkgPT0gbV9rZXlQb2ludHMuc2l6ZSgpKTsKIH0KLSAgICAKKwogdm9pZCBTVkdBbmltYXRpb25F
bGVtZW50Ojp1cGRhdGVBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0LCBT
VkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKIHsgICAgCiAgICAgaWYgKCFtX2FuaW1hdGlv
blZhbGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKaW5kZXggNDk1
YzFiMjQ0MmNiNTE1ZDQ4YmE3MTk2ZTBjZTI1YmJlMmU1ZTljMy4uNzNhMzMxYWIxMWY0ZWI5YmYx
NjNkZjdiYzhiYjgzMzZiYzhhMTM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGlvbkVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5oCkBAIC0xMDUsNiArMTA1LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0
aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3Vs
dEVsZW1lbnQpOwogCisgICAgdm9pZCByZXNldEFuaW1hdGlvblN0YXRlKGNvbnN0IFN0cmluZyYg
YmFzZVZhbHVlKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdl
ZChBdHRyaWJ1dGUqKSBPVkVSUklERTsKIApAQCAtMTIyLDYgKzEyNCwxNCBAQCBwcml2YXRlOgog
ICAgIGZsb2F0IGNhbGN1bGF0ZVBlcmNlbnRGb3JGcm9tVG8oZmxvYXQgcGVyY2VudCkgY29uc3Q7
CiAgICAgdW5zaWduZWQgY2FsY3VsYXRlS2V5VGltZXNJbmRleChmbG9hdCBwZXJjZW50KSBjb25z
dDsKIAorICAgIGVudW0gU2hvdWxkQXBwbHlBbmltYXRpb24geworICAgICAgICBEb250QXBwbHlB
bmltYXRpb24sCisgICAgICAgIEFwcGx5Q1NTQW5pbWF0aW9uLAorICAgICAgICBBcHBseVhNTEFu
aW1hdGlvbgorICAgIH07CisKKyAgICBTaG91bGRBcHBseUFuaW1hdGlvbiBzaG91bGRBcHBseUFu
aW1hdGlvbihTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lKTsKKwogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUyhT
VkdBbmltYXRpb25FbGVtZW50KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0JPT0xFQU4oRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCkKICAgICBF
TkRfREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAK
aW5kZXggOTMwZjVmNDdhYTcwNDk5NDQxMDYwMTY4ZTgxM2NjNGMwMThhZmEwMC4uZTY1ZjVhYjQx
OGY5YTkwOGRkNTM3MTE0NTkzZGRmOTcyYTg4NTNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcApAQCAtNzgsNiArNzgsNyBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAg
IEFTU0VSVChpdCAhPSByYXJlRGF0YU1hcC5lbmQoKSk7CiAKICAgICAgICAgU1ZHRWxlbWVudFJh
cmVEYXRhKiByYXJlRGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHJhcmVEYXRhLT5kZXN0cm95
QW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgIGlmIChTVkdDdXJzb3JFbGVt
ZW50KiBjdXJzb3JFbGVtZW50ID0gcmFyZURhdGEtPmN1cnNvckVsZW1lbnQoKSkKICAgICAgICAg
ICAgIGN1cnNvckVsZW1lbnQtPnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICAgICAgaWYgKENTU0N1
cnNvckltYWdlVmFsdWUqIGN1cnNvckltYWdlVmFsdWUgPSByYXJlRGF0YS0+Y3Vyc29ySW1hZ2VW
YWx1ZSgpKQpAQCAtNDg4LDYgKzQ4OSwxOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTVkdF
bGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVyKCkKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+
c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQoY29ycmVzcG9uZGluZ0VsZW1lbnQoKSwg
c3R5bGUsIGZhbHNlIC8qYWxsb3dTaGFyaW5nKi8pOwogfQogCitTdHlsZVByb3BlcnR5U2V0KiBT
VkdFbGVtZW50OjphbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSBjb25zdAoreworICAgIGlm
IChoYXNSYXJlU1ZHRGF0YSgpKQorICAgICAgICByZXR1cm4gcmFyZVNWR0RhdGEoKS0+YW5pbWF0
ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0eWxlUHJvcGVy
dHlTZXQqIFNWR0VsZW1lbnQ6OmVuc3VyZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpCit7
CisgICAgcmV0dXJuIGVuc3VyZVJhcmVTVkdEYXRhKCktPmVuc3VyZUFuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcygpOworfQorCiAjaWZuZGVmIE5ERUJVRwogYm9vbCBTVkdFbGVtZW50Ojppc0Fu
aW1hdGFibGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5oCmluZGV4IDQ3MzU2OTBiMzAyZjlkOWM0MTU3OGEwYjY3MWU4Mzc5ODhmMTc2
NjMuLmYyYWEyNDFjZTQyMTJmNThlNTE2MDgyZDYwZTg5ZDNiYTFiOWQwMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuaApAQCAtMTA3LDYgKzEwNyw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9v
bCBpc0FuaW1hdGFibGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogI2VuZGlmCiAK
KyAgICBTdHlsZVByb3BlcnR5U2V0KiBhbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSBjb25z
dDsKKyAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXMoKTsKKwogcHJvdGVjdGVkOgogICAgIFNWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiwgQ29uc3RydWN0aW9uVHlwZSA9IENyZWF0ZVNWR0VsZW1lbnQpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgKaW5kZXggNTAxOTY2MjQxMDQzYjk4ZDZj
MzdjODJiOWZkYzljY2IxYTgyZTI4ZC4uY2VlYzAxY2M5ZjliZTQzNjBkMTU0ZTY5NjRhZmRmMTMy
ZWY3NjIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaApAQCAtNzQs
NiArNzQsMjEgQEAgcHVibGljOgogICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGN1cnNvckltYWdl
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvckltYWdlVmFsdWU7IH0KICAgICB2b2lkIHNl
dEN1cnNvckltYWdlVmFsdWUoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VWYWx1ZSkg
eyBtX2N1cnNvckltYWdlVmFsdWUgPSBjdXJzb3JJbWFnZVZhbHVlOyB9CiAKKyAgICBTdHlsZVBy
b3BlcnR5U2V0KiBhbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBt
X2FuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcy5nZXQoKTsgfQorICAgIFN0eWxlUHJvcGVydHlT
ZXQqIGVuc3VyZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpCisgICAgeworICAgICAgICBp
ZiAoIW1fYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBtX2FuaW1h
dGVkU01JTFN0eWxlUHJvcGVydGllcyA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOworICAg
ICAgICAgICAgbV9hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMtPnNldFN0cmljdFBhcnNpbmco
ZmFsc2UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2FuaW1hdGVkU01JTFN0eWxlUHJv
cGVydGllcy5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGRlc3Ryb3lBbmltYXRlZFNNSUxTdHls
ZVByb3BlcnRpZXMoKQorICAgIHsKKyAgICAgICAgbV9hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXMuY2xlYXIoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSGFzaFNldDxTVkdFbGVtZW50SW5z
dGFuY2UqPiBtX2VsZW1lbnRJbnN0YW5jZXM7CiAgICAgU1ZHQ3Vyc29yRWxlbWVudCogbV9jdXJz
b3JFbGVtZW50OwpAQCAtODEsNiArOTYsNyBAQCBwcml2YXRlOgogICAgIFNWR0VsZW1lbnQqIG1f
Y29ycmVzcG9uZGluZ0VsZW1lbnQ7CiAgICAgYm9vbCBtX2luc3RhbmNlc1VwZGF0ZXNCbG9ja2Vk
IDogMTsKICAgICBib29sIG1faGFzUGVuZGluZ1Jlc291cmNlcyA6IDE7CisgICAgUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IG1fYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzOwogfTsKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCmluZGV4IDll
MWRmZDAxNGI4ZTdiMWIyNWM1ZmE2ZDcwZTJkODA1MDk3ODBjZGQuLjQwMGE3YTZiYTVkOTRiYzEx
ZmY0ZjkzZTY0NDJmMTM5ZjhmNWFjZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmgKQEAgLTExNiwxMSArMTE2LDExIEBAIHByb3RlY3RlZDoKIAog
ICAgIC8vIFN1Yi1jbGFzc2VzIG1heSBuZWVkIHRvIHRha2UgYWN0aW9uIHdoZW4gdGhlIHRhcmdl
dCBpcyBjaGFuZ2VkLgogICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRFbGVtZW50RGlkQ2hhbmdlKFNW
R0VsZW1lbnQqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW5kZWRBY3RpdmVJbnRlcnZhbCgpOwog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbihmbG9hdCBwZXJjZW50LCB1bnNpZ25l
ZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KSA9IDA7Ci0gICAgdm9pZCBl
bmRlZEFjdGl2ZUludGVydmFsKCk7CiAKICAgICBlbnVtIEJlZ2luT3JFbmQgewogICAgICAgICBC
ZWdpbiwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA1ZWMzMzFkM2IwYzRjNzMwMzk4ZGI0MWUzNjhiMTlmODRjODZlNjk2Li4y
ZTU3YjQ5ZDIyYzE1YTNjZTAwYjdkYTgxNTliOGNiMmU5NmRhOWZhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDQgQEAKKzIwMTItMDMtMDEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5j
b20+CisKKyAgICAgICAgSW50cm9kdWNlIFNNSUwgb3ZlcnJpZGVTdHlsZSwgdG8gbWFrZSBTVkcg
c3RvcCBtdXRhdGluZyBDU1Mgc3R5bGVzIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTc5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBDU1MgcHJvcGVydHkgYW5pbWF0aW9ucyBhcmVu
J3QgbGVha2VkIGludG8gdGhlIERPTSBhbnltb3JlLCB1cGRhdGUgdGhlIHRlc3RzLgorCisgICAg
ICAgICogc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC1leHBlY3RlZC50
eHQ6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3ItZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL2FuaW1hdGUtZHluYW1pYy11cGRhdGUt
YXR0cmlidXRlTmFtZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvYW5p
bWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3ZnL2Fu
aW1hdGlvbnMvYXR0cmlidXRlVHlwZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9ucy9hdHRyaWJ1dGVUeXBlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcv
YW5pbWF0aW9ucy9yZXNvdXJjZXMvYXR0cmlidXRlVHlwZXMuc3ZnOiBBZGRlZC4KKyAgICAgICAg
KiBzdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jb2xvci10cmFuc3BhcmVudC5q
czoKKyAgICAgICAgKGV4cGVjdFRyYW5zcGFyZW50KToKKyAgICAgICAgKGV4cGVjdE90aGVyQ29s
b3IpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJl
bnRDb2xvci5qczoKKyAgICAgICAgKHNhbXBsZTEpOgorICAgICAgICAoc2FtcGxlMik6CisgICAg
ICAgIChzYW1wbGUzKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5p
bWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmpzOgorICAgICAgICAoc2FtcGxlMSk6
CisgICAgICAgIChzYW1wbGUzKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVz
dHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5qczoKKyAgICAgICAgKHNhbXBsZTEpOgor
ICAgICAgICAoc2FtcGxlMik6CisgICAgICAgIChzYW1wbGUzKToKKyAgICAgICAgKiBzdmcvYW5p
bWF0aW9ucy9zY3JpcHQtdGVzdHMvYXR0cmlidXRlVHlwZXMuanM6IEFkZGVkLgorICAgICAgICAo
c2FtcGxlMSk6CisgICAgICAgIChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAg
ICAoZXhlY3V0ZVRlc3QpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9z
dmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLmpzOgorICAgICAgICAoc2Ft
cGxlMSk6CisgICAgICAgIChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAq
IHN2Zy9hbmltYXRpb25zL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUt
ZXhwZWN0ZWQudHh0OgorCiAyMDEyLTAyLTI5ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNo
cm9taXVtLm9yZz4gCiAKICAgICAgICAgRmFsbGJhY2sgZWxlbWVudHMgaW4gbm9uLXlvdW5nZXN0
IHNoYWRvdyB0cmVlIHNob3VsZCBub3QgYmUgcmVuZGVyZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWNvbG9yLXRyYW5zcGFyZW50LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQt
ZXhwZWN0ZWQudHh0CmluZGV4IDlmODJhMDJiNzU1NWUzNTFlYWNkNTVmZDEzZTRlZDc0NjRjNTYx
MDAuLmEzMDI3MGQwZmU5NTIyYjFhODFhYTExYzRhNDY3N2EzZmVlODgyNTIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY29sb3It
dHJhbnNwYXJlbnQtZXhwZWN0ZWQudHh0CkBAIC01LDggKzUsMTAgQEAgVGVzdHMgdGhhdCAndHJh
bnNwYXJlbnQnIGlzIHRyZWF0ZWQgYXMgYSB2YWxpZCBjb2xvci4KIE9uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KIAogCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnIzAwZmYwMCcKLVBBU1MgcmVj
dC5zdHlsZS5maWxsIGlzICcjN2YwMDAwJworUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZp
bGwgaXMgJyMwMGZmMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAiIgorUEFTUyBnZXRDb21w
dXRlZFN0eWxlKHJlY3QpLmZpbGwgaXMgJyM3ZjAwMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBp
cyAiIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1cnJlbnRDb2xv
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1cnJl
bnRDb2xvci1leHBlY3RlZC50eHQKaW5kZXggZjAzMDNlZTRmMTZkZGVmNGU2ZmQwOTEyZTk5ZTRj
ZGFjYzI2ZTJhNC4uZTE0NDdkNWFhZmRkMDUwNDY3MTc5NGY0Mzk5MmM5YjVjMTg3NGVmNiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3It
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3Vy
cmVudENvbG9yLWV4cGVjdGVkLnR4dApAQCAtNSw5ICs1LDEyIEBAIFRlc3RzIGFuaW1hdGlvbiBv
biAnY3VycmVudENvbG9yJy4KIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHJl
Y3Quc3R5bGUuZmlsbCBpcyAnI2ZmMDAwMCcKLVBBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjODA0
MDAwJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyMwMDgwMDAnCitQQVNTIGdldENvbXB1dGVk
U3R5bGUocmVjdCkuZmlsbCBpcyAnI2ZmMDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIi
CitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAnIzgwNDAwMCcKK1BBU1MgcmVj
dC5zdHlsZS5maWxsIGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAn
IzAwODAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCiBQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2
Zy9hbmltYXRpb25zL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWR5bmFtaWMtdXBkYXRl
LWF0dHJpYnV0ZU5hbWUtZXhwZWN0ZWQudHh0CmluZGV4IDg4NjVjZWE1YjdjMzdkZWZkYTFmNDEw
MWFiN2YxNzQ0NTA4ZDdjYzguLjRjYmNhZjhlODdmNDliYTc1OGJmMDJjODFmNTJjYzIyZDU4YWUy
NzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtZHluYW1p
Yy11cGRhdGUtYXR0cmlidXRlTmFtZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLWV4cGVjdGVk
LnR4dApAQCAtNSw4ICs1LDEwIEBAIFRlc3QgYmVoYXZpb3Igb24gZHluYW1pYy11cGRhdGUgb2Yg
YXR0cmlidXRlTmFtZQogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1MgcmVjdC5z
dHlsZS5jb2xvciBpcyAncmdiKDAsIDEyOCwgMCknCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAn
IzAwODAwMCcKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0KS5jb2xvciBpcyAncmdiKDAsIDEy
OCwgMCknCitQQVNTIHJlY3Quc3R5bGUuY29sb3IgaXMgIiIKK1BBU1MgZ2V0Q29tcHV0ZWRTdHls
ZShyZWN0KS5maWxsIGlzICcjMDA4MDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgIiIKIFBB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0
eS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVy
aXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dAppbmRleCA5YzJiZjljZmU4MTc3ZGFmZjg0NDYz
MGQxYzg0YjJjNTI2MDJhODA0Li40YWI5MDA5OTQyNDRmMTRiYjA2NmQzNDFmNDYxNjUyZGJiOWU2
ZDNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVy
aXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0
aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dApAQCAtNSw5ICs1
LDEyIEBAIFRlc3RzIGFuaW1hdGlvbiB3aXRoICdpbmhlcml0Jy4KIE9uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KIAogCi1QQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnI2ZmMDAwMCcKLVBBU1MgcmVj
dC5zdHlsZS5maWxsIGlzICcjODA0MDAwJwotUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyMwMDgw
MDAnCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBpcyAnI2ZmMDAwMCcKK1BBU1Mg
cmVjdC5zdHlsZS5maWxsIGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCBp
cyAnIzgwNDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIiCitQQVNTIGdldENvbXB1dGVk
U3R5bGUocmVjdCkuZmlsbCBpcyAnIzAwODAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICIi
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2F0dHJpYnV0ZVR5cGVzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2F0dHJpYnV0ZVR5cGVzLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45NTFlMzcwNGI0ZGRhODczMGI5MWIyZmI0ZDEzNjllZTRiOWY4MmQ1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYXR0cmlidXRl
VHlwZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDQgQEAKK1NWRyAxLjEgZHluYW1pYyBhbmlt
YXRpb24gdGVzdHMKKworCitUaGlzIHZlcmlmaWVzIHNldmVyYWwgYXR0cmlidXRlVHlwZXMgY29t
YmluaWF0aW9ucworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyByZWN0MS53
aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDEpLmZp
bGwgaXMgIiMwMDgwMDAiCitQQVNTIHJlY3QyLndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCitQ
QVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDIpLmZpbGwgaXMgIiMwMDgwMDAiCitQQVNTIHJlY3Qz
LndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDMp
LmZpbGwgaXMgIiNmZjAwMDAiCitQQVNTIHJlY3Q0LndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAw
CitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDQpLmZpbGwgaXMgIiNmZjAwMDAiCitQQVNTIHJl
Y3QxLndpZHRoLmFuaW1WYWwudmFsdWUgaXMgNTUKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0
MSkuZmlsbCBpcyAiIzAwODAwMCIKK1BBU1MgcmVjdDIud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAx
MDAKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MikuZmlsbCBpcyAiIzAwODAwMCIKK1BBU1Mg
cmVjdDMud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShy
ZWN0MykuZmlsbCBpcyAiIzgwNDAwMCIKK1BBU1MgcmVjdDQud2lkdGguYW5pbVZhbC52YWx1ZSBp
cyAxMDAKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0NCkuZmlsbCBpcyAiIzgwNDAwMCIKK1BB
U1MgcmVjdDEud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKK1BBU1MgZ2V0Q29tcHV0ZWRTdHls
ZShyZWN0MSkuZmlsbCBpcyAiIzAwODAwMCIKK1BBU1MgcmVjdDIud2lkdGguYW5pbVZhbC52YWx1
ZSBpcyAxMDAKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MikuZmlsbCBpcyAiIzAwODAwMCIK
K1BBU1MgcmVjdDMud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKK1BBU1MgZ2V0Q29tcHV0ZWRT
dHlsZShyZWN0MykuZmlsbCBpcyAiIzAwODAwMCIKK1BBU1MgcmVjdDQud2lkdGguYW5pbVZhbC52
YWx1ZSBpcyAxMDAKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0NCkuZmlsbCBpcyAiIzAwODAw
MCIKK1BBU1MgcmVjdDEud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKK1BBU1MgZ2V0Q29tcHV0
ZWRTdHlsZShyZWN0MSkuZmlsbCBpcyAiIzAwODAwMCIKK1BBU1MgcmVjdDIud2lkdGguYW5pbVZh
bC52YWx1ZSBpcyAxMDAKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MikuZmlsbCBpcyAiIzAw
ODAwMCIKK1BBU1MgcmVjdDMud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKK1BBU1MgZ2V0Q29t
cHV0ZWRTdHlsZShyZWN0MykuZmlsbCBpcyAiIzAwODAwMCIKK1BBU1MgcmVjdDQud2lkdGguYW5p
bVZhbC52YWx1ZSBpcyAxMDAKK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0NCkuZmlsbCBpcyAi
IzAwODAwMCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hdHRyaWJ1dGVUeXBl
cy5odG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYXR0cmlidXRlVHlwZXMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hNjYzODliZGIwNzMwYzZjNWI4OTNjNDY0MmFhMzdlNTFmZmMyNjQ3Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYXR0cmlidXRlVHlwZXMu
aHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9keW5h
bWljLXVwZGF0ZXMvcmVzb3VyY2VzL1NWR1Rlc3RDYXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvU1ZHQW5pbWF0aW9uVGVzdENhc2UuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJydW5TTUlMVGVzdCgpIj4KKzxoMT5TVkcgMS4xIGR5bmFtaWMgYW5p
bWF0aW9uIHRlc3RzPC9oMT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2F0dHJpYnV0ZVR5cGVzLmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2
Zy9hbmltYXRpb25zL3Jlc291cmNlcy9hdHRyaWJ1dGVUeXBlcy5zdmcgYi9MYXlvdXRUZXN0cy9z
dmcvYW5pbWF0aW9ucy9yZXNvdXJjZXMvYXR0cmlidXRlVHlwZXMuc3ZnCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQy
NjhjNDExYWY0ZmI5OGNjMzgwNmVmYTFiYzYwZGU3ZDY2ZjhmN2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9yZXNvdXJjZXMvYXR0cmlidXRlVHlwZXMuc3Zn
CkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+
Cis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMSBUaW55Ly9FTiIgImh0
dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLXRpbnkuZHRkIj4KKzxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94bGluayI+CisKKzwhLS0gJ3dpZHRoJyBpcyBhIFhNTCBhdHRyaWJ1
dGUsIGF0dHJpYnV0ZVR5cGUgaXMgc2V0IHRvICJhdXRvIjogdGhpcyBhbmltYXRpb24gcnVucy4g
LS0+Cis8cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAwIiBmaWxsPSJncmVlbiI+CisgICAgPGFu
aW1hdGUgaWQ9ImFuMSIgYXR0cmlidXRlVHlwZT0iYXV0byIgYXR0cmlidXRlTmFtZT0id2lkdGgi
IGZpbGw9ImZyZWV6ZSIgZnJvbT0iMTAiIHRvPSIxMDAiIGJlZ2luPSIwcyIgZHVyPSI0cyIvPgor
PC9yZWN0PgorCis8IS0tICd3aWR0aCcgaXMgYSBYTUwgYXR0cmlidXRlLCBhdHRyaWJ1dGVUeXBl
IGlzIHNldCB0byAiQ1NTIi4gJ3dpZHRoJyBpcyBub3QgYSBwcmVzZW50YXRpb24gYXR0cmlidXRl
LCBzbyB0aGlzIGFuaW1hdGlvbiB3b24ndCBydW4uIC0tPgorPHJlY3QgeD0iMTUwIiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iPgorICAgIDxhbmltYXRlIGlkPSJhbjIiIGF0
dHJpYnV0ZVR5cGU9IkNTUyIgYXR0cmlidXRlTmFtZT0id2lkdGgiIGZpbGw9ImZyZWV6ZSIgZnJv
bT0iMTAwIiB0bz0iMTAiIGJlZ2luPSIwcyIgZHVyPSI0cyIvPgorPC9yZWN0PgorCis8IS0tICdm
aWxsJyBpcyBhIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGUsIG1hcHBlZCB0byBDU1MsIGF0dHJpYnV0
ZVR5cGUgaXMgc2V0IHRvICJhdXRvIjogdGhpcyBhbmltYXRpb24gcnVucy4gLS0+Cis8cmVjdCB5
PSIxNTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiBmaWxsPSJyZWQiPgorICAgIDxhbmltYXRl
IGlkPSJhbjMiIGF0dHJpYnV0ZVR5cGU9ImF1dG8iIGF0dHJpYnV0ZU5hbWU9ImZpbGwiIGZpbGw9
ImZyZWV6ZSIgZnJvbT0icmVkIiB0bz0iZ3JlZW4iIGJlZ2luPSIwcyIgZHVyPSI0cyIvPgorPC9y
ZWN0PgorCis8IS0tICdmaWxsJyBpcyBhIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGUsIG1hcHBlZCB0
byBDU1MsIGF0dHJpYnV0ZVR5cGUgaXMgc2V0IHRvICJDU1MiOiB0aGlzIGFuaW1hdGlvbiBydW5z
LiAtLT4KKzxyZWN0IHg9IjE1MCIgeT0iMTUwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmls
bD0icmVkIj4KKyAgICA8YW5pbWF0ZSBpZD0iYW40IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIGF0dHJp
YnV0ZU5hbWU9ImZpbGwiIGZpbGw9ImZyZWV6ZSIgZnJvbT0icmVkIiB0bz0iZ3JlZW4iIGJlZ2lu
PSIwcyIgZHVyPSI0cyIvPgorPC9yZWN0PgorCis8L3N2Zz4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWNvbG9yLXRyYW5zcGFyZW50
LmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY29s
b3ItdHJhbnNwYXJlbnQuanMKaW5kZXggMmU3ZmI2OGFmOGYyOTAxYmU3MDkwNGZhMDY3ZDFmMzk1
Y2Y1MGRjZC4uZDdkZmIwM2YzYTE5Y2JiNDAxY2E1NzYzMmIwMjJkNmExMDkwNmMyMCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY29s
b3ItdHJhbnNwYXJlbnQuanMKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0
LXRlc3RzL2FuaW1hdGUtY29sb3ItdHJhbnNwYXJlbnQuanMKQEAgLTIxLDExICsyMSwxMyBAQCBy
b290U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChyZWN0KTsKIAogLy8gU2V0dXAgYW5pbWF0aW9uIHRl
c3QKIGZ1bmN0aW9uIGV4cGVjdFRyYW5zcGFyZW50KCkgewotICAgIHNob3VsZEJlKCJyZWN0LnN0
eWxlLmZpbGwiLCAiJyMwMGZmMDAnIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUo
cmVjdCkuZmlsbCIsICInIzAwZmYwMCciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJl
Y3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24gZXhwZWN0T3RoZXJDb2xvcigpIHsK
LSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjN2YwMDAwJyIpOworICAgIHNob3Vs
ZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwiLCAiJyM3ZjAwMDAnIik7CisgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1bmN0aW9u
IGV4ZWN1dGVUZXN0KCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMv
c2NyaXB0LXRlc3RzL2FuaW1hdGUtY3VycmVudENvbG9yLmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2Fu
aW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY3VycmVudENvbG9yLmpzCmluZGV4IGNhOGFi
NGJjMTZjNDVjZmFhN2UxZjE5MzZjOTNhYmNlYTg5MzYyZTYuLmJiMjgyYWM0MzkzYjA0MWJkMTEy
YzU4MDI0ODE1OTE5M2FhMmNkNWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRp
b25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5qcworKysgYi9MYXlvdXRUZXN0
cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanMKQEAg
LTI0LDE3ICsyNCwyMCBAQCByb290U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChyZWN0KTsKIC8vIFNl
dHVwIGFuaW1hdGlvbiB0ZXN0CiBmdW5jdGlvbiBzYW1wbGUxKCkgewogICAgIC8vIENoZWNrIGlu
aXRpYWwvZW5kIGNvbmRpdGlvbnMKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicj
ZmYwMDAwJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwiLCAi
JyNmZjAwMDAnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmZpbGwi
LCAiIik7CiB9CiAKIGZ1bmN0aW9uIHNhbXBsZTIoKSB7CiAgICAgLy8gQ2hlY2sgaGFsZi10aW1l
IGNvbmRpdGlvbnMKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjODA0MDAwJyIp
OworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwiLCAiJyM4MDQwMDAn
Iik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmZpbGwiLCAiIik7CiB9
CiAKIGZ1bmN0aW9uIHNhbXBsZTMoKSB7CiAgICAgLy8gQ2hlY2sgaGFsZi10aW1lIGNvbmRpdGlv
bnMKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjMDA4MDAwJyIpOworICAgIHNo
b3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLmZpbGwiLCAiJyMwMDgwMDAnIik7CisgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1bmN0
aW9uIGV4ZWN1dGVUZXN0KCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS5qcyBi
L0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWR5bmFtaWMt
dXBkYXRlLWF0dHJpYnV0ZU5hbWUuanMKaW5kZXggMDEzZWIzNTlhZDQxYmE3NzU4MjY4YTNmNzVh
MGFkMWFiY2JmM2ZiMi4uNjRlY2RhZWY5YzlkMzVhMTkxMmIwNGE0NjFmZWM2MWNmMmJkYzc4ZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1h
dGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS5qcworKysgYi9MYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVO
YW1lLmpzCkBAIC0yNCw3ICsyNCw4IEBAIHJvb3RTVkdFbGVtZW50LmFwcGVuZENoaWxkKHJlY3Qp
OwogCiAvLyBTZXR1cCBhbmltYXRpb24gdGVzdAogZnVuY3Rpb24gc2FtcGxlMSgpIHsKLSAgICBz
aG91bGRCZSgicmVjdC5zdHlsZS5jb2xvciIsICIncmdiKDAsIDEyOCwgMCknIik7CisgICAgc2hv
dWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuY29sb3IiLCAiJ3JnYigwLCAxMjgsIDApJyIp
OworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdC5zdHlsZS5jb2xvciIsICIiKTsKIH0K
IAogZnVuY3Rpb24gc2FtcGxlMigpIHsKQEAgLTMzLDcgKzM0LDggQEAgZnVuY3Rpb24gc2FtcGxl
MigpIHsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMygpIHsKLSAgICBzaG91bGRCZSgicmVjdC5zdHls
ZS5maWxsIiwgIicjMDA4MDAwJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJl
Y3QpLmZpbGwiLCAiJyMwMDgwMDAnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0
LnN0eWxlLmZpbGwiLCAiIik7CiB9CiAKIGZ1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtaW5o
ZXJpdC1jc3MtcHJvcGVydHkuanMgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQt
dGVzdHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5qcwppbmRleCBmYTY0NWQ4MjQ4NTQ1
YmJlNmVlODIyYmZmMDg4OTk1OGVhZTQzZjFlLi40YTFkNjY4NzNiNTBiOWQ4MjYyMTc2Yzg0Njg5
NDBkZDNhN2I2M2ZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3Jp
cHQtdGVzdHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5qcworKysgYi9MYXlvdXRUZXN0
cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0
eS5qcwpAQCAtMjcsMTcgKzI3LDIwIEBAIHJvb3RTVkdFbGVtZW50LmFwcGVuZENoaWxkKGcpOwog
Ly8gU2V0dXAgYW5pbWF0aW9uIHRlc3QKIGZ1bmN0aW9uIHNhbXBsZTEoKSB7CiAgICAgLy8gQ2hl
Y2sgaW5pdGlhbC9lbmQgY29uZGl0aW9ucwotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwi
LCAiJyNmZjAwMDAnIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmls
bCIsICInI2ZmMDAwMCciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUu
ZmlsbCIsICIiKTsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMigpIHsKICAgICAvLyBDaGVjayBoYWxm
LXRpbWUgY29uZGl0aW9ucwotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyM4MDQw
MDAnIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzgw
NDAwMCciKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIi
KTsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMygpIHsKICAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29u
ZGl0aW9ucwotICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyMwMDgwMDAnIik7Cisg
ICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUocmVjdCkuZmlsbCIsICInIzAwODAwMCciKTsK
KyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUuZmlsbCIsICIiKTsKIH0KIAog
ZnVuY3Rpb24gZXhlY3V0ZVRlc3QoKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9zY3JpcHQtdGVzdHMvYXR0cmlidXRlVHlwZXMuanMgYi9MYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYXR0cmlidXRlVHlwZXMuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMx
NDJlMjYwOGJkMDBmZTgzZjY2MWRkM2VhMGUwNWYxYTgwZWUzMAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGVUeXBlcy5q
cwpAQCAtMCwwICsxLDc5IEBACitkZXNjcmlwdGlvbigiVGhpcyB2ZXJpZmllcyBzZXZlcmFsIGF0
dHJpYnV0ZVR5cGVzIGNvbWJpbmlhdGlvbnMiKTsKK2VtYmVkU1ZHVGVzdENhc2UoInJlc291cmNl
cy9hdHRyaWJ1dGVUeXBlcy5zdmciKTsKKworLy8gU2V0dXAgYW5pbWF0aW9uIHRlc3QKK2Z1bmN0
aW9uIHNhbXBsZTEoKSB7CisgICAgc2hvdWxkQmVDbG9zZUVub3VnaCgicmVjdDEud2lkdGguYW5p
bVZhbC52YWx1ZSIsICIxMCIpOworICAgIC8vc2hvdWxkQmUoInJlY3QxLndpZHRoLmJhc2VWYWwu
dmFsdWUiLCAiMTAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdldENvbXB1dGVkU3R5
bGUocmVjdDEpLmZpbGwiLCAiIzAwODAwMCIpOworCisgICAgc2hvdWxkQmUoInJlY3QyLndpZHRo
LmFuaW1WYWwudmFsdWUiLCAiMTAwIik7CisgICAgLy9zaG91bGRCZSgicmVjdDIud2lkdGguYmFz
ZVZhbC52YWx1ZSIsICIxMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdldENvbXB1
dGVkU3R5bGUocmVjdDIpLmZpbGwiLCAiIzAwODAwMCIpOworCisgICAgc2hvdWxkQmUoInJlY3Qz
LndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMTAwIik7CisgICAgLy9zaG91bGRCZSgicmVjdDMud2lk
dGguYmFzZVZhbC52YWx1ZSIsICIxMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdl
dENvbXB1dGVkU3R5bGUocmVjdDMpLmZpbGwiLCAiI2ZmMDAwMCIpOworCisgICAgc2hvdWxkQmUo
InJlY3Q0LndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMTAwIik7CisgICAgLy9zaG91bGRCZSgicmVj
dDQud2lkdGguYmFzZVZhbC52YWx1ZSIsICIxMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoImdldENvbXB1dGVkU3R5bGUocmVjdDQpLmZpbGwiLCAiI2ZmMDAwMCIpOworfQorCitmdW5j
dGlvbiBzYW1wbGUyKCkgeworICAgIHNob3VsZEJlQ2xvc2VFbm91Z2goInJlY3QxLndpZHRoLmFu
aW1WYWwudmFsdWUiLCAiNTUiKTsKKyAgICAvL3Nob3VsZEJlKCJyZWN0MS53aWR0aC5iYXNlVmFs
LnZhbHVlIiwgIjEwIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJnZXRDb21wdXRlZFN0
eWxlKHJlY3QxKS5maWxsIiwgIiMwMDgwMDAiKTsKKworICAgIHNob3VsZEJlKCJyZWN0Mi53aWR0
aC5hbmltVmFsLnZhbHVlIiwgIjEwMCIpOworICAgIC8vc2hvdWxkQmUoInJlY3QyLndpZHRoLmJh
c2VWYWwudmFsdWUiLCAiMTAwIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJnZXRDb21w
dXRlZFN0eWxlKHJlY3QyKS5maWxsIiwgIiMwMDgwMDAiKTsKKworICAgIHNob3VsZEJlKCJyZWN0
My53aWR0aC5hbmltVmFsLnZhbHVlIiwgIjEwMCIpOworICAgIC8vc2hvdWxkQmUoInJlY3QzLndp
ZHRoLmJhc2VWYWwudmFsdWUiLCAiMTAwIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJn
ZXRDb21wdXRlZFN0eWxlKHJlY3QzKS5maWxsIiwgIiM4MDQwMDAiKTsKKworICAgIHNob3VsZEJl
KCJyZWN0NC53aWR0aC5hbmltVmFsLnZhbHVlIiwgIjEwMCIpOworICAgIC8vc2hvdWxkQmUoInJl
Y3Q0LndpZHRoLmJhc2VWYWwudmFsdWUiLCAiMTAwIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJnZXRDb21wdXRlZFN0eWxlKHJlY3Q0KS5maWxsIiwgIiM4MDQwMDAiKTsKK30KKworZnVu
Y3Rpb24gc2FtcGxlMygpIHsKKyAgICBzaG91bGRCZUNsb3NlRW5vdWdoKCJyZWN0MS53aWR0aC5h
bmltVmFsLnZhbHVlIiwgIjEwMCIpOworICAgIC8vc2hvdWxkQmUoInJlY3QxLndpZHRoLmJhc2VW
YWwudmFsdWUiLCAiMTAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdldENvbXB1dGVk
U3R5bGUocmVjdDEpLmZpbGwiLCAiIzAwODAwMCIpOworCisgICAgc2hvdWxkQmUoInJlY3QyLndp
ZHRoLmFuaW1WYWwudmFsdWUiLCAiMTAwIik7CisgICAgLy9zaG91bGRCZSgicmVjdDIud2lkdGgu
YmFzZVZhbC52YWx1ZSIsICIxMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdldENv
bXB1dGVkU3R5bGUocmVjdDIpLmZpbGwiLCAiIzAwODAwMCIpOworCisgICAgc2hvdWxkQmUoInJl
Y3QzLndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMTAwIik7CisgICAgLy9zaG91bGRCZSgicmVjdDMu
d2lkdGguYmFzZVZhbC52YWx1ZSIsICIxMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
ImdldENvbXB1dGVkU3R5bGUocmVjdDMpLmZpbGwiLCAiIzAwODAwMCIpOworCisgICAgc2hvdWxk
QmUoInJlY3Q0LndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMTAwIik7CisgICAgLy9zaG91bGRCZSgi
cmVjdDQud2lkdGguYmFzZVZhbC52YWx1ZSIsICIxMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoImdldENvbXB1dGVkU3R5bGUocmVjdDQpLmZpbGwiLCAiIzAwODAwMCIpOworfQorCitm
dW5jdGlvbiBleGVjdXRlVGVzdCgpIHsKKyAgICByZWN0cyA9IHJvb3RTVkdFbGVtZW50Lm93bmVy
RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInJlY3QiKTsKKyAgICByZWN0MSA9IHJlY3Rz
WzBdOyAKKyAgICByZWN0MiA9IHJlY3RzWzFdOyAKKyAgICByZWN0MyA9IHJlY3RzWzJdOyAKKyAg
ICByZWN0NCA9IHJlY3RzWzNdOyAKKworICAgIC8vIEFsbCBhbmltYXRpb25zIGluIHRoZSB0ZXN0
IGZpbGUgdXNlIHRoZSBzYW1lIGR1cmF0aW9uLCBzbyBpdCdzIG5vdCBuZWVkZWQgdG8gbGlzdCBh
bGwgc2FtcGxlIHBvaW50cyBpbmRpdmlkdWFsbHkgZm9yIGFuNS9hbjYvYW43L2FuOC4KKyAgICBj
b25zdCBleHBlY3RlZFZhbHVlcyA9IFsKKyAgICAgICAgLy8gW2FuaW1hdGlvbklkLCB0aW1lLCBz
YW1wbGVDYWxsYmFja10KKyAgICAgICAgWyJhbjEiLCAwLjAsICBzYW1wbGUxXSwKKyAgICAgICAg
WyJhbjEiLCAyLjAsICBzYW1wbGUyXSwKKyAgICAgICAgWyJhbjEiLCA0LjAsICBzYW1wbGUzXSwK
KyAgICAgICAgWyJhbjEiLCA2MC4wLCBzYW1wbGUzXSwKKyAgICBdOworCisgICAgcnVuQW5pbWF0
aW9uVGVzdChleHBlY3RlZFZhbHVlcyk7Cit9CisKK3dpbmRvdy5hbmltYXRpb25TdGFydHNJbW1l
ZGlhdGVseSA9IHRydWU7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9zdmdzdHJpbmctYW5p
bWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvc2NyaXB0LXRlc3RzL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUu
anMKaW5kZXggZjkxYTdiMmFhZjY5YWNjNzgxMDU1MTdhZWIwNDYyMzYwOGUyYjNiNC4uM2NiNzk0
NDM5MTkxOWVmZThiMjBlMjg1NTY2ZDQ0MjQ3Njk4M2MwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJh
Y2stdG8tZGlzY3JldGUuanMKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0
LXRlc3RzL3N2Z3N0cmluZy1hbmltYXRpb24tZmFsbGJhY2stdG8tZGlzY3JldGUuanMKQEAgLTIy
LDE1ICsyMiwxOCBAQCByb290U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChyZWN0KTsKIC8vIFNldHVw
IGFuaW1hdGlvbiB0ZXN0CiBmdW5jdGlvbiBzYW1wbGUxKCkgewogICAgIC8vIENoZWNrIGluaXRp
YWwvZW5kIGNvbmRpdGlvbnMKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS52aXNpYmlsaXR5Iiwg
Iid2aXNpYmxlJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2li
aWxpdHkiLCAiJ3Zpc2libGUnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0LnN0
eWxlLnZpc2liaWxpdHkiLCAiIik7CiB9CiAKIGZ1bmN0aW9uIHNhbXBsZTIoKSB7Ci0gICAgc2hv
dWxkQmUoInJlY3Quc3R5bGUudmlzaWJpbGl0eSIsICInaGlkZGVuJyIpOworICAgIHNob3VsZEJl
KCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2liaWxpdHkiLCAiJ2hpZGRlbiciKTsKKyAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Quc3R5bGUudmlzaWJpbGl0eSIsICIiKTsKIH0KIAog
ZnVuY3Rpb24gc2FtcGxlMygpIHsKLSAgICBzaG91bGRCZSgicmVjdC5zdHlsZS52aXNpYmlsaXR5
IiwgIid2aXNpYmxlJyIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZp
c2liaWxpdHkiLCAiJ3Zpc2libGUnIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0
LnN0eWxlLnZpc2liaWxpdHkiLCAiIik7CiB9CiAKIGZ1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3Znc3RyaW5nLWFuaW1hdGlv
bi1mYWxsYmFjay10by1kaXNjcmV0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9zdmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLWV4cGVjdGVk
LnR4dAppbmRleCBkMTUzNjZiODM3Zjg2YzYyMzQ5MTEzNGE4NjFmZDZkMjU1YjVlYTljLi41Yjlm
YzFjNmQ4OTBjNmY2MWUyNWE1Yzk4NTg5NTE1ZDIxMmE1NDBiIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmdzdHJpbmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2Ny
ZXRlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmdzdHJp
bmctYW5pbWF0aW9uLWZhbGxiYWNrLXRvLWRpc2NyZXRlLWV4cGVjdGVkLnR4dApAQCAtNSwxMCAr
NSwxNCBAQCBUZXN0cyBmYWxsYmFjayB0byBjYWxjTW9kZT0nZGlzY3JldGUnIG9uIGFuaW1hdGlv
biBvZiBTVkdTdHJpbmcgd2l0aCAndmFsdWVzJy4KIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
IAogCi1QQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0eSBpcyAndmlzaWJsZScKLVBBU1MgcmVjdC5z
dHlsZS52aXNpYmlsaXR5IGlzICdoaWRkZW4nCi1QQVNTIHJlY3Quc3R5bGUudmlzaWJpbGl0eSBp
cyAndmlzaWJsZScKLVBBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICd2aXNpYmxlJworUEFT
UyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZpc2liaWxpdHkgaXMgJ3Zpc2libGUnCitQQVNTIHJl
Y3Quc3R5bGUudmlzaWJpbGl0eSBpcyAiIgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QpLnZp
c2liaWxpdHkgaXMgJ2hpZGRlbicKK1BBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICIiCitQ
QVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCkudmlzaWJpbGl0eSBpcyAndmlzaWJsZScKK1BBU1Mg
cmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICIiCitQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdCku
dmlzaWJpbGl0eSBpcyAndmlzaWJsZScKK1BBU1MgcmVjdC5zdHlsZS52aXNpYmlsaXR5IGlzICIi
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130025</attachid>
            <date>2012-03-04 07:49:29 -0800</date>
            <delta_ts>2012-03-04 07:56:13 -0800</delta_ts>
            <desc>Follow-up patch v1</desc>
            <filename>bug-79790-20120304164926.patch</filename>
            <type>text/plain</type>
            <size>8882</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5Njc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFiMTc3MWQ4MDRlZTg3
NDc5Mjg3ZmVkNDg5ZTAxYjQzMDEzNzM2NC4uZTI4ZTZiNzEwNGYwNTMyMDc0Y2NjOTIzMWQzMGQ4
NDhiNzVmM2YyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAzLTA0ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxl
cyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZXN0b3JlIFNNSUwgYW5pbWF0aW9uIGJlaGF2aW9yIGJhY2sgdG8gcHJlLXIxMDkzNDIuCisg
ICAgICAgIEFsd2F5cyBhbmltYXRlIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGVzIGFzIENTUyBwcm9w
ZXJ0aWVzLCByZWdhcmRsZXNzIG9mIHRoZQorICAgICAgICBhdHRyaWJ1dGVUeXBlcyB2YWx1ZS4g
TWF0Y2hlcyBPcGVyYS9GRiwgYW5kIG1ha2VzIHRoZSBhdHRyaWJ1dGUgb3B0aW9uYWwgYWdhaW4K
KyAgICAgICAgYXMgc3BlY2lmaWVkIGluIGJvdGggU01JTCAmIFNWRy4KKworICAgICAgICBFeHRl
bmQgZXhpc3Rpbmcgc3ZnL2FuaW1hdGlvbnMvYXR0cmlidXRlc1R5cGVzLmh0bWwgdG8gdmVyaWZ5
IHRoaXMuCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzaG91bGRBcHBseUFuaW1hdGlvbik6CisK
IDIwMTItMDMtMDMgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJlbW92ZSB0aGUgdW51c2VkIGZ1bmN0aW9uIFdlYkNvcmU6OnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCmlu
ZGV4IGNmNWQ5YWQ3NzNjZDIyMzFlNmI5YmQzMjAwODA5MTcyYzAzYTc5MGYuLjRjOWJlZGY3ZmUx
ZTk5OTZkMTg5MGY3YjY3ZDA5OGY3MmY1NTgzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAKQEAgLTQwMywyNCArNDAzLDE1IEBAIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OlNob3VsZEFwcGx5QW5pbWF0aW9uIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNob3VsZEFw
cGx5QW5pbWF0CiAgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSB8fCAhdGFyZ2V0RWxl
bWVudCB8fCBhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkpCiAgICAgICAgIHJldHVybiBEb250
QXBwbHlBbmltYXRpb247CiAKLSAgICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5cGUgPSB0aGlz
LT5hdHRyaWJ1dGVUeXBlKCk7Ci0gICAgc3dpdGNoIChhdHRyaWJ1dGVUeXBlKSB7Ci0gICAgY2Fz
ZSBBdHRyaWJ1dGVUeXBlQXV0bzoKLSAgICAgICAgLy8gRm9yIGF0dHJpYnV0ZVR5cGU9ImF1dG8i
LCB0cnkgQ1NTIGZpcnN0LiBJZiB0aGF0IGZhaWxzLCB0cnkgWE1MLgotICAgIGNhc2UgQXR0cmli
dXRlVHlwZUNTUzoKLSAgICAgICAgLy8gSWYgYXR0cmlidXRlTmFtZSBpcyBhIGtub3duIGFuaW1h
dGFibGUgU1ZHIENTUyBwcm9wZXJ0eSwgYXBwbHkgdGhlIGFuaW1hdGlvbi4KLSAgICAgICAgaWYg
KGlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFt
ZSkpCi0gICAgICAgICAgICByZXR1cm4gQXBwbHlDU1NBbmltYXRpb247Ci0gICAgICAgIC8vIElm
IGF0dHJpYnV0ZU5hbWUgaXMgdW5rbm93biBhbmQgdHRyaWJ1dGVUeXBlIGlzIG5vdCAnYXV0bycs
IGRvbid0IGFwcGx5IHRoZSBhbmltYXRpb24uCi0gICAgICAgIGlmIChhdHRyaWJ1dGVUeXBlID09
IEF0dHJpYnV0ZVR5cGVDU1MpCi0gICAgICAgICAgICByZXR1cm4gRG9udEFwcGx5QW5pbWF0aW9u
OwotICAgICAgICAvLyBGb3IgYXR0cmlidXRlVHlwZT0iYXV0byIsIHRyeSBYTUwgYW5pbWF0aW9u
IG5vdy4KLSAgICBjYXNlIEF0dHJpYnV0ZVR5cGVYTUw6Ci0gICAgICAgIHJldHVybiBBcHBseVhN
TEFuaW1hdGlvbjsKLSAgICB9OworICAgIC8vIEFsd2F5cyBhbmltYXRlIENTUyBwcm9wZXJ0aWVz
LCB1c2luZyB0aGUgQXBwbHlDU1NBbmltYXRpb24gY29kZSBwYXRoLCByZWdhcmRsZXNzIG9mIHRo
ZSBhdHRyaWJ1dGVUeXBlIHZhbHVlLgorICAgIGlmIChpc1RhcmdldEF0dHJpYnV0ZUNTU1Byb3Bl
cnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICByZXR1cm4gQXBwbHlD
U1NBbmltYXRpb247CiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRG9u
dEFwcGx5QW5pbWF0aW9uOworICAgIC8vIElmIGF0dHJpYnV0ZVR5cGU9IkNTUyIgYW5kIGF0dHJp
YnV0ZU5hbWUgZG9lc24ndCBwb2ludCB0byBhIENTUyBwcm9wZXJ0eSwgaWdub3JlIHRoZSBhbmlt
YXRpb24uCisgICAgaWYgKGF0dHJpYnV0ZVR5cGUoKSA9PSBBdHRyaWJ1dGVUeXBlQ1NTKQorICAg
ICAgICByZXR1cm4gRG9udEFwcGx5QW5pbWF0aW9uOworCisgICAgcmV0dXJuIEFwcGx5WE1MQW5p
bWF0aW9uOwogfQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUtleVRpbWVz
Rm9yQ2FsY01vZGVQYWNlZCgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTJkZTBlOGQzZjdiMmRkMWViMWY1MTE0ZmQxNTNj
MDAzOWY1NDMyYS4uZjc4OGE4ZDYzMzM5ZTIzNGZhMzg0YmRkOWQxYWNiNTRlZGE5ODQ2OCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAzLTA0ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemlt
bWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVjZSBTTUlMIG92ZXJyaWRlU3R5bGUs
IHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxlcyBkaXJlY3RseQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3OTAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRlbmRlZCBhdHRyaWJ1dGVz
VHlwZXMuaHRtbCB0ZXN0IGNhc2UgdG8gY2hlY2sgdGhhdCBwcmVzZW50YXRpb24gYXR0cmlidXRl
cyBhcmUKKyAgICAgICAgYWx3YXlzIGFuaW1hdGVkIGFzIENTUyBwcm9wZXJ0aWVzLCByZWdhcmRs
ZXNzIG9mIHRoZWlyIGF0dHJpYnV0ZVR5cGVzIHZhbHVlLgorCisgICAgICAgICogc3ZnL2FuaW1h
dGlvbnMvYXR0cmlidXRlVHlwZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy9hbmltYXRp
b25zL3Jlc291cmNlcy9hdHRyaWJ1dGVUeXBlcy5zdmc6CisgICAgICAgICogc3ZnL2FuaW1hdGlv
bnMvc2NyaXB0LXRlc3RzL2F0dHJpYnV0ZVR5cGVzLmpzOgorICAgICAgICAoc2FtcGxlMSk6Cisg
ICAgICAgIChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorCiAyMDEyLTAzLTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KIAogICAgICAgICBEZWxheU5vZGUgaGFzIGEgZml4
ZWQgb25lIHNlY29uZCBtYXggZGVsYXkgdGltZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvYXR0cmlidXRlVHlwZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvYXR0cmlidXRlVHlwZXMtZXhwZWN0ZWQudHh0CmluZGV4IDk1MWUzNzA0YjRk
ZGE4NzMwYjkxYjJmYjRkMTM2OWVlNGI5ZjgyZDUuLjM1ZDgwM2Q5MzJiMmI4NDdmYzU4MjM3ODJl
OGNmMTdkMTlmYzk4MTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2F0
dHJpYnV0ZVR5cGVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9u
cy9hdHRyaWJ1dGVUeXBlcy1leHBlY3RlZC50eHQKQEAgLTEyLDMyICsxMiw0MCBAQCBQQVNTIHJl
Y3QyLndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVj
dDIpLmZpbGwgaXMgIiMwMDgwMDAiCiBQQVNTIHJlY3QzLndpZHRoLmFuaW1WYWwudmFsdWUgaXMg
MTAwCiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDMpLmZpbGwgaXMgIiNmZjAwMDAiCitQQVNT
IHJlY3QzLmdldEF0dHJpYnV0ZSgnZmlsbCcpIGlzICJyZWQiCiBQQVNTIHJlY3Q0LndpZHRoLmFu
aW1WYWwudmFsdWUgaXMgMTAwCiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDQpLmZpbGwgaXMg
IiNmZjAwMDAiCitQQVNTIHJlY3Q0LmdldEF0dHJpYnV0ZSgnZmlsbCcpIGlzICJyZWQiCiBQQVNT
IHJlY3QxLndpZHRoLmFuaW1WYWwudmFsdWUgaXMgNTUKIFBBU1MgZ2V0Q29tcHV0ZWRTdHlsZShy
ZWN0MSkuZmlsbCBpcyAiIzAwODAwMCIKIFBBU1MgcmVjdDIud2lkdGguYW5pbVZhbC52YWx1ZSBp
cyAxMDAKIFBBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MikuZmlsbCBpcyAiIzAwODAwMCIKIFBB
U1MgcmVjdDMud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKIFBBU1MgZ2V0Q29tcHV0ZWRTdHls
ZShyZWN0MykuZmlsbCBpcyAiIzgwNDAwMCIKK1BBU1MgcmVjdDMuZ2V0QXR0cmlidXRlKCdmaWxs
JykgaXMgInJlZCIKIFBBU1MgcmVjdDQud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKIFBBU1Mg
Z2V0Q29tcHV0ZWRTdHlsZShyZWN0NCkuZmlsbCBpcyAiIzgwNDAwMCIKK1BBU1MgcmVjdDQuZ2V0
QXR0cmlidXRlKCdmaWxsJykgaXMgInJlZCIKIFBBU1MgcmVjdDEud2lkdGguYW5pbVZhbC52YWx1
ZSBpcyAxMDAKIFBBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MSkuZmlsbCBpcyAiIzAwODAwMCIK
IFBBU1MgcmVjdDIud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKIFBBU1MgZ2V0Q29tcHV0ZWRT
dHlsZShyZWN0MikuZmlsbCBpcyAiIzAwODAwMCIKIFBBU1MgcmVjdDMud2lkdGguYW5pbVZhbC52
YWx1ZSBpcyAxMDAKIFBBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MykuZmlsbCBpcyAiIzAwODAw
MCIKK1BBU1MgcmVjdDMuZ2V0QXR0cmlidXRlKCdmaWxsJykgaXMgInJlZCIKIFBBU1MgcmVjdDQu
d2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKIFBBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0NCku
ZmlsbCBpcyAiIzAwODAwMCIKK1BBU1MgcmVjdDQuZ2V0QXR0cmlidXRlKCdmaWxsJykgaXMgInJl
ZCIKIFBBU1MgcmVjdDEud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKIFBBU1MgZ2V0Q29tcHV0
ZWRTdHlsZShyZWN0MSkuZmlsbCBpcyAiIzAwODAwMCIKIFBBU1MgcmVjdDIud2lkdGguYW5pbVZh
bC52YWx1ZSBpcyAxMDAKIFBBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MikuZmlsbCBpcyAiIzAw
ODAwMCIKIFBBU1MgcmVjdDMud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKIFBBU1MgZ2V0Q29t
cHV0ZWRTdHlsZShyZWN0MykuZmlsbCBpcyAiIzAwODAwMCIKK1BBU1MgcmVjdDMuZ2V0QXR0cmli
dXRlKCdmaWxsJykgaXMgInJlZCIKIFBBU1MgcmVjdDQud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAx
MDAKIFBBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0NCkuZmlsbCBpcyAiIzAwODAwMCIKK1BBU1Mg
cmVjdDQuZ2V0QXR0cmlidXRlKCdmaWxsJykgaXMgInJlZCIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvcmVzb3VyY2VzL2F0dHJpYnV0ZVR5cGVzLnN2ZyBiL0xheW91dFRlc3RzL3N2
Zy9hbmltYXRpb25zL3Jlc291cmNlcy9hdHRyaWJ1dGVUeXBlcy5zdmcKaW5kZXggZDI2OGM0MTFh
ZjRmYjk4Y2MzODA2ZWZhMWJjNjBkZTdkNjZmOGY3Yi4uMzViYTQzM2RmY2VkMjQwYWFmOGFkZTJj
MjZjNWZjYjQ3Y2M2NWJjZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMv
cmVzb3VyY2VzL2F0dHJpYnV0ZVR5cGVzLnN2ZworKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0
aW9ucy9yZXNvdXJjZXMvYXR0cmlidXRlVHlwZXMuc3ZnCkBAIC0xNyw3ICsxNyw3IEBACiAgICAg
PGFuaW1hdGUgaWQ9ImFuMyIgYXR0cmlidXRlVHlwZT0iYXV0byIgYXR0cmlidXRlTmFtZT0iZmls
bCIgZmlsbD0iZnJlZXplIiBmcm9tPSJyZWQiIHRvPSJncmVlbiIgYmVnaW49IjBzIiBkdXI9IjRz
Ii8+CiA8L3JlY3Q+CiAKLTwhLS0gJ2ZpbGwnIGlzIGEgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZSwg
bWFwcGVkIHRvIENTUywgYXR0cmlidXRlVHlwZSBpcyBzZXQgdG8gIkNTUyI6IHRoaXMgYW5pbWF0
aW9uIHJ1bnMuIC0tPgorPCEtLSAnZmlsbCcgaXMgYSBwcmVzZW50YXRpb24gYXR0cmlidXRlLCBt
YXBwZWQgdG8gQ1NTLCBhdHRyaWJ1dGVUeXBlIGlzIHNldCB0byAiWE1MIjogdGhpcyBhbmltYXRp
b24gcnVucy4gLS0+CiA8cmVjdCB4PSIxNTAiIHk9IjE1MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIx
MDAiIGZpbGw9InJlZCI+CiAgICAgPGFuaW1hdGUgaWQ9ImFuNCIgYXR0cmlidXRlVHlwZT0iWE1M
IiBhdHRyaWJ1dGVOYW1lPSJmaWxsIiBmaWxsPSJmcmVlemUiIGZyb209InJlZCIgdG89ImdyZWVu
IiBiZWdpbj0iMHMiIGR1cj0iNHMiLz4KIDwvcmVjdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGVUeXBlcy5qcyBiL0xheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGVUeXBlcy5qcwppbmRleCA4
YzE0MmUyNjA4YmQwMGZlODNmNjYxZGQzZWEwZTA1ZjFhODBlZTMwLi40NjhhZTg3NDM0ODA4NzYx
NTMwMTVmODMxYTA0MmNiMjUzNWE2ODY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9zY3JpcHQtdGVzdHMvYXR0cmlidXRlVHlwZXMuanMKKysrIGIvTGF5b3V0VGVzdHMv
c3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2F0dHJpYnV0ZVR5cGVzLmpzCkBAIC0xNCwxMCAr
MTQsMTIgQEAgZnVuY3Rpb24gc2FtcGxlMSgpIHsKICAgICBzaG91bGRCZSgicmVjdDMud2lkdGgu
YW5pbVZhbC52YWx1ZSIsICIxMDAiKTsKICAgICAvL3Nob3VsZEJlKCJyZWN0My53aWR0aC5iYXNl
VmFsLnZhbHVlIiwgIjEwMCIpOwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZ2V0Q29tcHV0
ZWRTdHlsZShyZWN0MykuZmlsbCIsICIjZmYwMDAwIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJyZWN0My5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSIsICJyZWQiKTsKIAogICAgIHNob3VsZEJl
KCJyZWN0NC53aWR0aC5hbmltVmFsLnZhbHVlIiwgIjEwMCIpOwogICAgIC8vc2hvdWxkQmUoInJl
Y3Q0LndpZHRoLmJhc2VWYWwudmFsdWUiLCAiMTAwIik7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJnZXRDb21wdXRlZFN0eWxlKHJlY3Q0KS5maWxsIiwgIiNmZjAwMDAiKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Q0LmdldEF0dHJpYnV0ZSgnZmlsbCcpIiwgInJlZCIpOwog
fQogCiBmdW5jdGlvbiBzYW1wbGUyKCkgewpAQCAtMzIsMTAgKzM0LDEyIEBAIGZ1bmN0aW9uIHNh
bXBsZTIoKSB7CiAgICAgc2hvdWxkQmUoInJlY3QzLndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMTAw
Iik7CiAgICAgLy9zaG91bGRCZSgicmVjdDMud2lkdGguYmFzZVZhbC52YWx1ZSIsICIxMDAiKTsK
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdldENvbXB1dGVkU3R5bGUocmVjdDMpLmZpbGwi
LCAiIzgwNDAwMCIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdDMuZ2V0QXR0cmli
dXRlKCdmaWxsJykiLCAicmVkIik7CiAKICAgICBzaG91bGRCZSgicmVjdDQud2lkdGguYW5pbVZh
bC52YWx1ZSIsICIxMDAiKTsKICAgICAvL3Nob3VsZEJlKCJyZWN0NC53aWR0aC5iYXNlVmFsLnZh
bHVlIiwgIjEwMCIpOwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZ2V0Q29tcHV0ZWRTdHls
ZShyZWN0NCkuZmlsbCIsICIjODA0MDAwIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJy
ZWN0NC5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSIsICJyZWQiKTsKIH0KIAogZnVuY3Rpb24gc2FtcGxl
MygpIHsKQEAgLTUwLDEwICs1NCwxMiBAQCBmdW5jdGlvbiBzYW1wbGUzKCkgewogICAgIHNob3Vs
ZEJlKCJyZWN0My53aWR0aC5hbmltVmFsLnZhbHVlIiwgIjEwMCIpOwogICAgIC8vc2hvdWxkQmUo
InJlY3QzLndpZHRoLmJhc2VWYWwudmFsdWUiLCAiMTAwIik7CiAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QzKS5maWxsIiwgIiMwMDgwMDAiKTsKKyAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3QzLmdldEF0dHJpYnV0ZSgnZmlsbCcpIiwgInJlZCIp
OwogCiAgICAgc2hvdWxkQmUoInJlY3Q0LndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMTAwIik7CiAg
ICAgLy9zaG91bGRCZSgicmVjdDQud2lkdGguYmFzZVZhbC52YWx1ZSIsICIxMDAiKTsKICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoImdldENvbXB1dGVkU3R5bGUocmVjdDQpLmZpbGwiLCAiIzAw
ODAwMCIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygicmVjdDQuZ2V0QXR0cmlidXRlKCdm
aWxsJykiLCAicmVkIik7CiB9CiAKIGZ1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130026</attachid>
            <date>2012-03-04 08:08:05 -0800</date>
            <delta_ts>2012-03-04 08:46:41 -0800</delta_ts>
            <desc>Follow-up patch v2</desc>
            <filename>bug-79790-20120304170801.patch</filename>
            <type>text/plain</type>
            <size>11346</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5Njc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFiMTc3MWQ4MDRlZTg3
NDc5Mjg3ZmVkNDg5ZTAxYjQzMDEzNzM2NC4uZjkwMjg0OTNiNmE3ZjM3OTU2NWU5MDYzNzA3Mjhl
NDllMTM3YzczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAzLTA0ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxl
cyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZXN0b3JlIFNNSUwgYW5pbWF0aW9uIGJlaGF2aW9yIGJhY2sgdG8gcHJlLXIxMDkzNDIuCisg
ICAgICAgIDEpIEFsd2F5cyBhbmltYXRlIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGVzIGFzIENTUyBw
cm9wZXJ0aWVzLCByZWdhcmRsZXNzIG9mIHRoZQorICAgICAgICBhdHRyaWJ1dGVUeXBlcyB2YWx1
ZS4gTWF0Y2hlcyBPcGVyYS9GRiwgYW5kIG1ha2VzIHRoZSBhdHRyaWJ1dGUgb3B0aW9uYWwgYWdh
aW4KKyAgICAgICAgYXMgc3BlY2lmaWVkIGluIGJvdGggU01JTCAmIFNWRy4KKworICAgICAgICBF
eHRlbmQgZXhpc3Rpbmcgc3ZnL2FuaW1hdGlvbnMvYXR0cmlidXRlc1R5cGVzLmh0bWwgdG8gdmVy
aWZ5IHRoaXMuCisKKyAgICAgICAgMikgU3dpdGNoIHNldEluc3RhbmNlc1VwZGF0ZXNCbG9ja2Vk
IGNhbGxzIHRvIHRoZSByaWdodCBsb2NhdGlvbnMgYWdhaW4sIHRvCisgICAgICAgIGF2b2lkIGNo
cm9taXVtIGFzc2VydGlvbnMgKGFuZC9vciBleHRyYSB3b3JrIGJlaW5nIGRvbmUpLgorCisgICAg
ICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0aW9uRWxlbWVudDo6c2hvdWxkQXBwbHlBbmltYXRpb24pOgorCiAyMDEyLTAzLTAzICBC
ZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUg
dGhlIHVudXNlZCBmdW5jdGlvbiBXZWJDb3JlOjpwcm90b2NvbElzSW5IVFRQRmFtaWx5KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAppbmRleCBjZjVkOWFkNzcz
Y2QyMjMxZTZiOWJkMzIwMDgwOTE3MmMwM2E3OTBmLi5hZmFmZTM1ZDQ5NWUyMWIyNzcyMDNjMjZl
YmUyOGRmNGQyOWJhNjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuY3BwCkBAIC0zNTcsMTMgKzM1NywxNiBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNl
dFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBp
ZiAoc2hvdWxkQXBwbHkgPT0gRG9udEFwcGx5QW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAK
KyAgICBpZiAodGFyZ2V0RWxlbWVudC0+aXNTdHlsZWQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkRWxlbWVudCo+KHRhcmdldEVsZW1lbnQpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9j
a2VkKHRydWUpOworCiAgICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5Q1NTQW5pbWF0aW9uKQog
ICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZENTU1ZhbHVlKHRhcmdldEVsZW1lbnQs
IGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKICAgICBlbHNlCiAgICAgICAgIHNldFRhcmdldEF0dHJp
YnV0ZUFuaW1hdGVkWE1MVmFsdWUodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgdmFsdWUp
OwogCiAgICAgaWYgKHRhcmdldEVsZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHN0YXRpY19j
YXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KS0+c2V0SW5zdGFuY2VVcGRhdGVz
QmxvY2tlZCh0cnVlKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHRh
cmdldEVsZW1lbnQpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGZhbHNlKTsKIAogICAgIC8v
IElmIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgaW5zdGFuY2VzLCB1cGRhdGUgdGhlbSBhcyB3ZWxs
LCB3L28gcmVxdWlyaW5nIHRoZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVpbHQuCiAgICAgY29uc3Qg
SGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgaW5zdGFuY2VzID0gdGFyZ2V0RWxlbWVudC0+
aW5zdGFuY2VzRm9yRWxlbWVudCgpOwpAQCAtMzc4LDkgKzM4MSw2IEBAIHZvaWQgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmlt
YXRlZENTU1ZhbHVlKHNoYWRvd1RyZWVFbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7CiAg
ICAgfQotCi0gICAgaWYgKHRhcmdldEVsZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHN0YXRp
Y19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KS0+c2V0SW5zdGFuY2VVcGRh
dGVzQmxvY2tlZChmYWxzZSk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cmVzZXRB
bmltYXRpb25TdGF0ZShjb25zdCBTdHJpbmcmIGJhc2VWYWx1ZSkKQEAgLTQwMywyNCArNDAzLDE1
IEBAIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OlNob3VsZEFwcGx5QW5pbWF0aW9uIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OnNob3VsZEFwcGx5QW5pbWF0CiAgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5
cGUoKSB8fCAhdGFyZ2V0RWxlbWVudCB8fCBhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkpCiAg
ICAgICAgIHJldHVybiBEb250QXBwbHlBbmltYXRpb247CiAKLSAgICBBdHRyaWJ1dGVUeXBlIGF0
dHJpYnV0ZVR5cGUgPSB0aGlzLT5hdHRyaWJ1dGVUeXBlKCk7Ci0gICAgc3dpdGNoIChhdHRyaWJ1
dGVUeXBlKSB7Ci0gICAgY2FzZSBBdHRyaWJ1dGVUeXBlQXV0bzoKLSAgICAgICAgLy8gRm9yIGF0
dHJpYnV0ZVR5cGU9ImF1dG8iLCB0cnkgQ1NTIGZpcnN0LiBJZiB0aGF0IGZhaWxzLCB0cnkgWE1M
LgotICAgIGNhc2UgQXR0cmlidXRlVHlwZUNTUzoKLSAgICAgICAgLy8gSWYgYXR0cmlidXRlTmFt
ZSBpcyBhIGtub3duIGFuaW1hdGFibGUgU1ZHIENTUyBwcm9wZXJ0eSwgYXBwbHkgdGhlIGFuaW1h
dGlvbi4KLSAgICAgICAgaWYgKGlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxl
bWVudCwgYXR0cmlidXRlTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gQXBwbHlDU1NBbmltYXRp
b247Ci0gICAgICAgIC8vIElmIGF0dHJpYnV0ZU5hbWUgaXMgdW5rbm93biBhbmQgdHRyaWJ1dGVU
eXBlIGlzIG5vdCAnYXV0bycsIGRvbid0IGFwcGx5IHRoZSBhbmltYXRpb24uCi0gICAgICAgIGlm
IChhdHRyaWJ1dGVUeXBlID09IEF0dHJpYnV0ZVR5cGVDU1MpCi0gICAgICAgICAgICByZXR1cm4g
RG9udEFwcGx5QW5pbWF0aW9uOwotICAgICAgICAvLyBGb3IgYXR0cmlidXRlVHlwZT0iYXV0byIs
IHRyeSBYTUwgYW5pbWF0aW9uIG5vdy4KLSAgICBjYXNlIEF0dHJpYnV0ZVR5cGVYTUw6Ci0gICAg
ICAgIHJldHVybiBBcHBseVhNTEFuaW1hdGlvbjsKLSAgICB9OworICAgIC8vIEFsd2F5cyBhbmlt
YXRlIENTUyBwcm9wZXJ0aWVzLCB1c2luZyB0aGUgQXBwbHlDU1NBbmltYXRpb24gY29kZSBwYXRo
LCByZWdhcmRsZXNzIG9mIHRoZSBhdHRyaWJ1dGVUeXBlIHZhbHVlLgorICAgIGlmIChpc1Rhcmdl
dEF0dHJpYnV0ZUNTU1Byb3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpKQorICAg
ICAgICByZXR1cm4gQXBwbHlDU1NBbmltYXRpb247CiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gRG9udEFwcGx5QW5pbWF0aW9uOworICAgIC8vIElmIGF0dHJpYnV0ZVR5
cGU9IkNTUyIgYW5kIGF0dHJpYnV0ZU5hbWUgZG9lc24ndCBwb2ludCB0byBhIENTUyBwcm9wZXJ0
eSwgaWdub3JlIHRoZSBhbmltYXRpb24uCisgICAgaWYgKGF0dHJpYnV0ZVR5cGUoKSA9PSBBdHRy
aWJ1dGVUeXBlQ1NTKQorICAgICAgICByZXR1cm4gRG9udEFwcGx5QW5pbWF0aW9uOworCisgICAg
cmV0dXJuIEFwcGx5WE1MQW5pbWF0aW9uOwogfQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmNhbGN1bGF0ZUtleVRpbWVzRm9yQ2FsY01vZGVQYWNlZCgpCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTJkZTBlOGQzZjdi
MmRkMWViMWY1MTE0ZmQxNTNjMDAzOWY1NDMyYS4uNGZkY2ZmNjdkZTIwMDljZmI3NjNhYjJhOTA4
NTViM2FiMTcxNDNjNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAzLTA0ICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVjZSBT
TUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxlcyBk
aXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
eHRlbmRlZCBhdHRyaWJ1dGVzVHlwZXMuaHRtbCB0ZXN0IGNhc2UgdG8gY2hlY2sgdGhhdCBwcmVz
ZW50YXRpb24gYXR0cmlidXRlcyBhcmUKKyAgICAgICAgYWx3YXlzIGFuaW1hdGVkIGFzIENTUyBw
cm9wZXJ0aWVzLCByZWdhcmRsZXNzIG9mIHRoZWlyIGF0dHJpYnV0ZVR5cGVzIHZhbHVlLgorCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OiBSZW1vdmUg
YW5pbWF0ZS1lbGVtLTMyLXQuc3ZnIHN1cHByZXNzaW9uLgorICAgICAgICAqIHN2Zy9hbmltYXRp
b25zL2F0dHJpYnV0ZVR5cGVzLWV4cGVjdGVkLnR4dDogVXBkYXRlZCBleHBlY3RhdGlvbnMuCisg
ICAgICAgICogc3ZnL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2F0dHJpYnV0ZVR5cGVzLnN2ZzogRml4
IGNvbW1lbnQuCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2F0dHJpYnV0
ZVR5cGVzLmpzOiBFeHRlbmQgdGVzdC4KKyAgICAgICAgKHNhbXBsZTEpOgorICAgICAgICAoc2Ft
cGxlMik6CisgICAgICAgIChzYW1wbGUzKToKKwogMjAxMi0wMy0wMyAgUmF5bW9uZCBUb3kgIDxy
dG95QGdvb2dsZS5jb20+CiAKICAgICAgICAgRGVsYXlOb2RlIGhhcyBhIGZpeGVkIG9uZSBzZWNv
bmQgbWF4IGRlbGF5IHRpbWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBkMDk4ZTg2ZmQ2MWZlODFlMWZiZDM3NDNkZWZh
ZjNkMWY2MzE4ZTg5Li5jMTE4ZDBhZjYxZTI5ZGFiYWMyODhlNjJkNzA4M2MxYTljNzFlMWYxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0CkBAIC00MTk2LDggKzQxOTYsNiBAQCBCVUdXSzc5ODYzIFdJTiA6IHN2Zy9XM0MtU1ZH
LTEuMS9hbmltYXRlLWVsZW0tMzctdC5zdmcgPSBJTUFHRQogLy8gRVBPR0VSOiBUbyBiZSByZWJh
c2VsaW5lZCBhZnRlciBza2lhIHJldi4gMzI4MyBsYW5kcyBpbiB3ZWJraXQKIEJVR0NSMTE2MjUy
IExJTlVYIDogcGxhdGZvcm0vY2hyb21pdW0tbGludXgvZmFzdC90ZXh0L2Nocm9taXVtLWxpbnV4
LWZvbnRjb25maWctcmVuZGVyc3R5bGUuaHRtbCA9IElNQUdFK1RFWFQKIAotQlVHV0s4MDA1MyBE
RUJVRyA6IHN2Zy9XM0MtU1ZHLTEuMS9hbmltYXRlLWVsZW0tMzItdC5zdmcgPSBDUkFTSCBQQVNT
Ci0KIEJVR1dLODAwNTggV0lOIFJFTEVBU0UgOiBmYXN0L3dvcmtlcnMvc3RyZXNzLWpzLWV4ZWN1
dGlvbi5odG1sID0gQ1JBU0ggUEFTUwogCiBCVUdXSzgwMDY3IERFQlVHIDogbWVkaWEvdHJhY2sv
dHJhY2stY3Vlcy1wYXVzZS1vbi1leGl0Lmh0bWwgPSBQQVNTIFRFWFQKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2F0dHJpYnV0ZVR5cGVzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2F0dHJpYnV0ZVR5cGVzLWV4cGVjdGVkLnR4dAppbmRl
eCA5NTFlMzcwNGI0ZGRhODczMGI5MWIyZmI0ZDEzNjllZTRiOWY4MmQ1Li4zNWQ4MDNkOTMyYjJi
ODQ3ZmM1ODIzNzgyZThjZjE3ZDE5ZmM5ODE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9hdHRyaWJ1dGVUeXBlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
c3ZnL2FuaW1hdGlvbnMvYXR0cmlidXRlVHlwZXMtZXhwZWN0ZWQudHh0CkBAIC0xMiwzMiArMTIs
NDAgQEAgUEFTUyByZWN0Mi53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21w
dXRlZFN0eWxlKHJlY3QyKS5maWxsIGlzICIjMDA4MDAwIgogUEFTUyByZWN0My53aWR0aC5hbmlt
VmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QzKS5maWxsIGlzICIj
ZmYwMDAwIgorUEFTUyByZWN0My5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSBpcyAicmVkIgogUEFTUyBy
ZWN0NC53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJl
Y3Q0KS5maWxsIGlzICIjZmYwMDAwIgorUEFTUyByZWN0NC5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSBp
cyAicmVkIgogUEFTUyByZWN0MS53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDU1CiBQQVNTIGdldENv
bXB1dGVkU3R5bGUocmVjdDEpLmZpbGwgaXMgIiMwMDgwMDAiCiBQQVNTIHJlY3QyLndpZHRoLmFu
aW1WYWwudmFsdWUgaXMgMTAwCiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDIpLmZpbGwgaXMg
IiMwMDgwMDAiCiBQQVNTIHJlY3QzLndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCiBQQVNTIGdl
dENvbXB1dGVkU3R5bGUocmVjdDMpLmZpbGwgaXMgIiM4MDQwMDAiCitQQVNTIHJlY3QzLmdldEF0
dHJpYnV0ZSgnZmlsbCcpIGlzICJyZWQiCiBQQVNTIHJlY3Q0LndpZHRoLmFuaW1WYWwudmFsdWUg
aXMgMTAwCiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDQpLmZpbGwgaXMgIiM4MDQwMDAiCitQ
QVNTIHJlY3Q0LmdldEF0dHJpYnV0ZSgnZmlsbCcpIGlzICJyZWQiCiBQQVNTIHJlY3QxLndpZHRo
LmFuaW1WYWwudmFsdWUgaXMgMTAwCiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDEpLmZpbGwg
aXMgIiMwMDgwMDAiCiBQQVNTIHJlY3QyLndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCiBQQVNT
IGdldENvbXB1dGVkU3R5bGUocmVjdDIpLmZpbGwgaXMgIiMwMDgwMDAiCiBQQVNTIHJlY3QzLndp
ZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDMpLmZp
bGwgaXMgIiMwMDgwMDAiCitQQVNTIHJlY3QzLmdldEF0dHJpYnV0ZSgnZmlsbCcpIGlzICJyZWQi
CiBQQVNTIHJlY3Q0LndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCiBQQVNTIGdldENvbXB1dGVk
U3R5bGUocmVjdDQpLmZpbGwgaXMgIiMwMDgwMDAiCitQQVNTIHJlY3Q0LmdldEF0dHJpYnV0ZSgn
ZmlsbCcpIGlzICJyZWQiCiBQQVNTIHJlY3QxLndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCiBQ
QVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDEpLmZpbGwgaXMgIiMwMDgwMDAiCiBQQVNTIHJlY3Qy
LndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAwCiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDIp
LmZpbGwgaXMgIiMwMDgwMDAiCiBQQVNTIHJlY3QzLndpZHRoLmFuaW1WYWwudmFsdWUgaXMgMTAw
CiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDMpLmZpbGwgaXMgIiMwMDgwMDAiCitQQVNTIHJl
Y3QzLmdldEF0dHJpYnV0ZSgnZmlsbCcpIGlzICJyZWQiCiBQQVNTIHJlY3Q0LndpZHRoLmFuaW1W
YWwudmFsdWUgaXMgMTAwCiBQQVNTIGdldENvbXB1dGVkU3R5bGUocmVjdDQpLmZpbGwgaXMgIiMw
MDgwMDAiCitQQVNTIHJlY3Q0LmdldEF0dHJpYnV0ZSgnZmlsbCcpIGlzICJyZWQiCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3Jlc291cmNlcy9hdHRyaWJ1dGVUeXBlcy5zdmcgYi9M
YXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9yZXNvdXJjZXMvYXR0cmlidXRlVHlwZXMuc3ZnCmlu
ZGV4IGQyNjhjNDExYWY0ZmI5OGNjMzgwNmVmYTFiYzYwZGU3ZDY2ZjhmN2IuLjM1YmE0MzNkZmNl
ZDI0MGFhZjhhZGUyYzI2YzVmY2I0N2NjNjViY2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2
Zy9hbmltYXRpb25zL3Jlc291cmNlcy9hdHRyaWJ1dGVUeXBlcy5zdmcKKysrIGIvTGF5b3V0VGVz
dHMvc3ZnL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2F0dHJpYnV0ZVR5cGVzLnN2ZwpAQCAtMTcsNyAr
MTcsNyBAQAogICAgIDxhbmltYXRlIGlkPSJhbjMiIGF0dHJpYnV0ZVR5cGU9ImF1dG8iIGF0dHJp
YnV0ZU5hbWU9ImZpbGwiIGZpbGw9ImZyZWV6ZSIgZnJvbT0icmVkIiB0bz0iZ3JlZW4iIGJlZ2lu
PSIwcyIgZHVyPSI0cyIvPgogPC9yZWN0PgogCi08IS0tICdmaWxsJyBpcyBhIHByZXNlbnRhdGlv
biBhdHRyaWJ1dGUsIG1hcHBlZCB0byBDU1MsIGF0dHJpYnV0ZVR5cGUgaXMgc2V0IHRvICJDU1Mi
OiB0aGlzIGFuaW1hdGlvbiBydW5zLiAtLT4KKzwhLS0gJ2ZpbGwnIGlzIGEgcHJlc2VudGF0aW9u
IGF0dHJpYnV0ZSwgbWFwcGVkIHRvIENTUywgYXR0cmlidXRlVHlwZSBpcyBzZXQgdG8gIlhNTCI6
IHRoaXMgYW5pbWF0aW9uIHJ1bnMuIC0tPgogPHJlY3QgeD0iMTUwIiB5PSIxNTAiIHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIiBmaWxsPSJyZWQiPgogICAgIDxhbmltYXRlIGlkPSJhbjQiIGF0dHJp
YnV0ZVR5cGU9IlhNTCIgYXR0cmlidXRlTmFtZT0iZmlsbCIgZmlsbD0iZnJlZXplIiBmcm9tPSJy
ZWQiIHRvPSJncmVlbiIgYmVnaW49IjBzIiBkdXI9IjRzIi8+CiA8L3JlY3Q+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYXR0cmlidXRlVHlwZXMu
anMgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYXR0cmlidXRlVHlw
ZXMuanMKaW5kZXggOGMxNDJlMjYwOGJkMDBmZTgzZjY2MWRkM2VhMGUwNWYxYTgwZWUzMC4uNDY4
YWU4NzQzNDgwODc2MTUzMDE1ZjgzMWEwNDJjYjI1MzVhNjg2NyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2F0dHJpYnV0ZVR5cGVzLmpzCisrKyBi
L0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGVUeXBlcy5q
cwpAQCAtMTQsMTAgKzE0LDEyIEBAIGZ1bmN0aW9uIHNhbXBsZTEoKSB7CiAgICAgc2hvdWxkQmUo
InJlY3QzLndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMTAwIik7CiAgICAgLy9zaG91bGRCZSgicmVj
dDMud2lkdGguYmFzZVZhbC52YWx1ZSIsICIxMDAiKTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoImdldENvbXB1dGVkU3R5bGUocmVjdDMpLmZpbGwiLCAiI2ZmMDAwMCIpOworICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygicmVjdDMuZ2V0QXR0cmlidXRlKCdmaWxsJykiLCAicmVkIik7CiAK
ICAgICBzaG91bGRCZSgicmVjdDQud2lkdGguYW5pbVZhbC52YWx1ZSIsICIxMDAiKTsKICAgICAv
L3Nob3VsZEJlKCJyZWN0NC53aWR0aC5iYXNlVmFsLnZhbHVlIiwgIjEwMCIpOwogICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0NCkuZmlsbCIsICIjZmYwMDAw
Iik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0NC5nZXRBdHRyaWJ1dGUoJ2ZpbGwn
KSIsICJyZWQiKTsKIH0KIAogZnVuY3Rpb24gc2FtcGxlMigpIHsKQEAgLTMyLDEwICszNCwxMiBA
QCBmdW5jdGlvbiBzYW1wbGUyKCkgewogICAgIHNob3VsZEJlKCJyZWN0My53aWR0aC5hbmltVmFs
LnZhbHVlIiwgIjEwMCIpOwogICAgIC8vc2hvdWxkQmUoInJlY3QzLndpZHRoLmJhc2VWYWwudmFs
dWUiLCAiMTAwIik7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJnZXRDb21wdXRlZFN0eWxl
KHJlY3QzKS5maWxsIiwgIiM4MDQwMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJl
Y3QzLmdldEF0dHJpYnV0ZSgnZmlsbCcpIiwgInJlZCIpOwogCiAgICAgc2hvdWxkQmUoInJlY3Q0
LndpZHRoLmFuaW1WYWwudmFsdWUiLCAiMTAwIik7CiAgICAgLy9zaG91bGRCZSgicmVjdDQud2lk
dGguYmFzZVZhbC52YWx1ZSIsICIxMDAiKTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdl
dENvbXB1dGVkU3R5bGUocmVjdDQpLmZpbGwiLCAiIzgwNDAwMCIpOworICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygicmVjdDQuZ2V0QXR0cmlidXRlKCdmaWxsJykiLCAicmVkIik7CiB9CiAKIGZ1
bmN0aW9uIHNhbXBsZTMoKSB7CkBAIC01MCwxMCArNTQsMTIgQEAgZnVuY3Rpb24gc2FtcGxlMygp
IHsKICAgICBzaG91bGRCZSgicmVjdDMud2lkdGguYW5pbVZhbC52YWx1ZSIsICIxMDAiKTsKICAg
ICAvL3Nob3VsZEJlKCJyZWN0My53aWR0aC5iYXNlVmFsLnZhbHVlIiwgIjEwMCIpOwogICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MykuZmlsbCIsICIjMDA4
MDAwIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0My5nZXRBdHRyaWJ1dGUoJ2Zp
bGwnKSIsICJyZWQiKTsKIAogICAgIHNob3VsZEJlKCJyZWN0NC53aWR0aC5hbmltVmFsLnZhbHVl
IiwgIjEwMCIpOwogICAgIC8vc2hvdWxkQmUoInJlY3Q0LndpZHRoLmJhc2VWYWwudmFsdWUiLCAi
MTAwIik7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJnZXRDb21wdXRlZFN0eWxlKHJlY3Q0
KS5maWxsIiwgIiMwMDgwMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Q0Lmdl
dEF0dHJpYnV0ZSgnZmlsbCcpIiwgInJlZCIpOwogfQogCiBmdW5jdGlvbiBleGVjdXRlVGVzdCgp
IHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130027</attachid>
            <date>2012-03-04 08:46:55 -0800</date>
            <delta_ts>2012-03-04 11:01:52 -0800</delta_ts>
            <desc>Follow-up patch v3</desc>
            <filename>bug-79790-20120304174652.patch</filename>
            <type>text/plain</type>
            <size>11884</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5Njc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFiMTc3MWQ4MDRlZTg3
NDc5Mjg3ZmVkNDg5ZTAxYjQzMDEzNzM2NC4uMWNhM2M1MWI4OWQyMWY1MmM5NzJkZTc3NmEyZTRm
NWQyZjJiZjQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAzLTA0ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBTTUlMIG92ZXJyaWRlU3R5bGUsIHRvIG1ha2UgU1ZHIHN0b3AgbXV0YXRpbmcgQ1NTIHN0eWxl
cyBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk3OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZXN0b3JlIFNNSUwgYW5pbWF0aW9uIGJlaGF2aW9yIGJhY2sgdG8gcHJlLXIxMDkzNDIuCisg
ICAgICAgIDEpIEFsd2F5cyBhbmltYXRlIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGVzIGFzIENTUyBw
cm9wZXJ0aWVzLCByZWdhcmRsZXNzIG9mIHRoZQorICAgICAgICBhdHRyaWJ1dGVUeXBlcyB2YWx1
ZS4gTWF0Y2hlcyBPcGVyYS9GRiwgYW5kIG1ha2VzIHRoZSBhdHRyaWJ1dGUgb3B0aW9uYWwgYWdh
aW4KKyAgICAgICAgYXMgc3BlY2lmaWVkIGluIGJvdGggU01JTCAmIFNWRy4KKworICAgICAgICBF
eHRlbmQgZXhpc3Rpbmcgc3ZnL2FuaW1hdGlvbnMvYXR0cmlidXRlc1R5cGVzLmh0bWwgdG8gdmVy
aWZ5IHRoaXMuCisKKyAgICAgICAgMikgU3dpdGNoIHNldEluc3RhbmNlc1VwZGF0ZXNCbG9ja2Vk
IGNhbGxzIHRvIHRoZSByaWdodCBsb2NhdGlvbnMgYWdhaW4sIHRvCisgICAgICAgIGF2b2lkIGNo
cm9taXVtIGFzc2VydGlvbnMgKGFuZC9vciBleHRyYSB3b3JrIGJlaW5nIGRvbmUpLiBGaXhpbmcg
dGhhdCByZXZlYWxzIGFub3RoZXIKKyAgICAgICAgcHJvYmxlbTogaW4gdGhlIGluc3RhbmNlIHVw
ZGF0aW5nIGNvZGUgcGF0aCwgd2UgYWx3YXlzIGNhbGxlZCBzZXRUYXJnZXRBdHRyaWJ1dGVBbmlt
YXRlZENTU1ZhbHVlCisgICAgICAgIGV2ZW4gZm9yIFhNTCBhbmltYXRpb25zLgorCisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uRWxlbWVudDo6c2hvdWxkQXBwbHlBbmltYXRpb24pOiBSZXN0b3JlIG9sZCBsb2dpYy4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0
ZUFuaW1hdGVkVmFsdWUpOiBGaXggdHlwbywgbW92ZSBzZXRJbnN0YW5jZXNVcGRhdGVzQmxvY2tl
ZCBjYWxscy4KKwogMjAxMi0wMy0wMyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHRoZSB1bnVzZWQgZnVuY3Rpb24gV2ViQ29yZTo6cHJv
dG9jb2xJc0luSFRUUEZhbWlseSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAKaW5kZXggY2Y1ZDlhZDc3M2NkMjIzMWU2YjliZDMyMDA4MDkxNzJjMDNhNzkwZi4u
ZGQ2NTAxYjI5YTA1MWE2MjgyZmFhNjNlMDRhNzg3OGFhOWE3ZmM4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcApAQCAtMzU3LDEzICszNTcsMTYgQEAgdm9p
ZCBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgaWYgKHNob3VsZEFwcGx5ID09IERvbnRBcHBseUFuaW1h
dGlvbikKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKHRhcmdldEVsZW1lbnQtPmlzU3R5bGVk
KCkpCisgICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXRFbGVtZW50
KS0+c2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZCh0cnVlKTsKKwogICAgIGlmIChzaG91bGRBcHBs
eSA9PSBBcHBseUNTU0FuaW1hdGlvbikKICAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0
ZWRDU1NWYWx1ZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7CiAgICAgZWxz
ZQogICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFhNTFZhbHVlKHRhcmdldEVsZW1l
bnQsIGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKIAogICAgIGlmICh0YXJnZXRFbGVtZW50LT5pc1N0
eWxlZCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0RWxl
bWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQodHJ1ZSk7CisgICAgICAgIHN0YXRpY19j
YXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KS0+c2V0SW5zdGFuY2VVcGRhdGVz
QmxvY2tlZChmYWxzZSk7CiAKICAgICAvLyBJZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIGluc3Rh
bmNlcywgdXBkYXRlIHRoZW0gYXMgd2VsbCwgdy9vIHJlcXVpcmluZyB0aGUgPHVzZT4gdHJlZSB0
byBiZSByZWJ1aWx0LgogICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGlu
c3RhbmNlcyA9IHRhcmdldEVsZW1lbnQtPmluc3RhbmNlc0ZvckVsZW1lbnQoKTsKQEAgLTM3Niwx
MSArMzc5LDggQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVB
bmltYXRlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgIGlmIChzaG91bGRBcHBs
eSA9PSBBcHBseUNTU0FuaW1hdGlvbikKICAgICAgICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZUFu
aW1hdGVkQ1NTVmFsdWUoc2hhZG93VHJlZUVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRDU1NW
YWx1ZShzaGFkb3dUcmVlRWxlbWVudCwgYXR0cmlidXRlTmFtZSwgdmFsdWUpOworICAgICAgICAg
ICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRYTUxWYWx1ZShzaGFkb3dUcmVlRWxlbWVudCwg
YXR0cmlidXRlTmFtZSwgdmFsdWUpOwogICAgIH0KLQotICAgIGlmICh0YXJnZXRFbGVtZW50LT5p
c1N0eWxlZCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0
RWxlbWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoZmFsc2UpOwogfQogCiB2b2lkIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0QW5pbWF0aW9uU3RhdGUoY29uc3QgU3RyaW5nJiBiYXNl
VmFsdWUpCkBAIC00MDMsMjQgKzQwMywxNSBAQCBTVkdBbmltYXRpb25FbGVtZW50OjpTaG91bGRB
cHBseUFuaW1hdGlvbiBTVkdBbmltYXRpb25FbGVtZW50OjpzaG91bGRBcHBseUFuaW1hdAogICAg
IGlmICghaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgfHwgIXRhcmdldEVsZW1lbnQgfHwgYXR0cmli
dXRlTmFtZSA9PSBhbnlRTmFtZSgpKQogICAgICAgICByZXR1cm4gRG9udEFwcGx5QW5pbWF0aW9u
OwogCi0gICAgQXR0cmlidXRlVHlwZSBhdHRyaWJ1dGVUeXBlID0gdGhpcy0+YXR0cmlidXRlVHlw
ZSgpOwotICAgIHN3aXRjaCAoYXR0cmlidXRlVHlwZSkgewotICAgIGNhc2UgQXR0cmlidXRlVHlw
ZUF1dG86Ci0gICAgICAgIC8vIEZvciBhdHRyaWJ1dGVUeXBlPSJhdXRvIiwgdHJ5IENTUyBmaXJz
dC4gSWYgdGhhdCBmYWlscywgdHJ5IFhNTC4KLSAgICBjYXNlIEF0dHJpYnV0ZVR5cGVDU1M6Ci0g
ICAgICAgIC8vIElmIGF0dHJpYnV0ZU5hbWUgaXMgYSBrbm93biBhbmltYXRhYmxlIFNWRyBDU1Mg
cHJvcGVydHksIGFwcGx5IHRoZSBhbmltYXRpb24uCi0gICAgICAgIGlmIChpc1RhcmdldEF0dHJp
YnV0ZUNTU1Byb3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpKQotICAgICAgICAg
ICAgcmV0dXJuIEFwcGx5Q1NTQW5pbWF0aW9uOwotICAgICAgICAvLyBJZiBhdHRyaWJ1dGVOYW1l
IGlzIHVua25vd24gYW5kIHR0cmlidXRlVHlwZSBpcyBub3QgJ2F1dG8nLCBkb24ndCBhcHBseSB0
aGUgYW5pbWF0aW9uLgotICAgICAgICBpZiAoYXR0cmlidXRlVHlwZSA9PSBBdHRyaWJ1dGVUeXBl
Q1NTKQotICAgICAgICAgICAgcmV0dXJuIERvbnRBcHBseUFuaW1hdGlvbjsKLSAgICAgICAgLy8g
Rm9yIGF0dHJpYnV0ZVR5cGU9ImF1dG8iLCB0cnkgWE1MIGFuaW1hdGlvbiBub3cuCi0gICAgY2Fz
ZSBBdHRyaWJ1dGVUeXBlWE1MOgotICAgICAgICByZXR1cm4gQXBwbHlYTUxBbmltYXRpb247Ci0g
ICAgfTsKKyAgICAvLyBBbHdheXMgYW5pbWF0ZSBDU1MgcHJvcGVydGllcywgdXNpbmcgdGhlIEFw
cGx5Q1NTQW5pbWF0aW9uIGNvZGUgcGF0aCwgcmVnYXJkbGVzcyBvZiB0aGUgYXR0cmlidXRlVHlw
ZSB2YWx1ZS4KKyAgICBpZiAoaXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eSh0YXJnZXRFbGVt
ZW50LCBhdHRyaWJ1dGVOYW1lKSkKKyAgICAgICAgcmV0dXJuIEFwcGx5Q1NTQW5pbWF0aW9uOwog
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIERvbnRBcHBseUFuaW1hdGlv
bjsKKyAgICAvLyBJZiBhdHRyaWJ1dGVUeXBlPSJDU1MiIGFuZCBhdHRyaWJ1dGVOYW1lIGRvZXNu
J3QgcG9pbnQgdG8gYSBDU1MgcHJvcGVydHksIGlnbm9yZSB0aGUgYW5pbWF0aW9uLgorICAgIGlm
IChhdHRyaWJ1dGVUeXBlKCkgPT0gQXR0cmlidXRlVHlwZUNTUykKKyAgICAgICAgcmV0dXJuIERv
bnRBcHBseUFuaW1hdGlvbjsKKworICAgIHJldHVybiBBcHBseVhNTEFuaW1hdGlvbjsKIH0KIAog
dm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVLZXlUaW1lc0ZvckNhbGNNb2RlUGFj
ZWQoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDUyZGUwZThkM2Y3YjJkZDFlYjFmNTExNGZkMTUzYzAwMzlmNTQzMmEuLjRm
ZGNmZjY3ZGUyMDA5Y2ZiNzYzYWIyYTkwODU1YjNhYjE3MTQzYzUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MSBAQAorMjAxMi0wMy0wNCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNv
bT4KKworICAgICAgICBJbnRyb2R1Y2UgU01JTCBvdmVycmlkZVN0eWxlLCB0byBtYWtlIFNWRyBz
dG9wIG11dGF0aW5nIENTUyBzdHlsZXMgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0ZW5kZWQgYXR0cmlidXRlc1R5cGVzLmh0bWwgdGVz
dCBjYXNlIHRvIGNoZWNrIHRoYXQgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMgYXJlCisgICAgICAg
IGFsd2F5cyBhbmltYXRlZCBhcyBDU1MgcHJvcGVydGllcywgcmVnYXJkbGVzcyBvZiB0aGVpciBh
dHRyaWJ1dGVUeXBlcyB2YWx1ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3Rf
ZXhwZWN0YXRpb25zLnR4dDogUmVtb3ZlIGFuaW1hdGUtZWxlbS0zMi10LnN2ZyBzdXBwcmVzc2lv
bi4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9hdHRyaWJ1dGVUeXBlcy1leHBlY3RlZC50eHQ6
IFVwZGF0ZWQgZXhwZWN0YXRpb25zLgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3Jlc291cmNl
cy9hdHRyaWJ1dGVUeXBlcy5zdmc6IEZpeCBjb21tZW50LgorICAgICAgICAqIHN2Zy9hbmltYXRp
b25zL3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGVUeXBlcy5qczogRXh0ZW5kIHRlc3QuCisgICAgICAg
IChzYW1wbGUxKToKKyAgICAgICAgKHNhbXBsZTIpOgorICAgICAgICAoc2FtcGxlMyk6CisKIDIw
MTItMDMtMDMgIFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUuY29tPgogCiAgICAgICAgIERlbGF5
Tm9kZSBoYXMgYSBmaXhlZCBvbmUgc2Vjb25kIG1heCBkZWxheSB0aW1lCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggZDA5
OGU4NmZkNjFmZTgxZTFmYmQzNzQzZGVmYWYzZDFmNjMxOGU4OS4uYzExOGQwYWY2MWUyOWRhYmFj
Mjg4ZTYyZDcwODNjMWE5YzcxZTFmMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtNDE5Niw4ICs0MTk2LDYgQEAgQlVH
V0s3OTg2MyBXSU4gOiBzdmcvVzNDLVNWRy0xLjEvYW5pbWF0ZS1lbGVtLTM3LXQuc3ZnID0gSU1B
R0UKIC8vIEVQT0dFUjogVG8gYmUgcmViYXNlbGluZWQgYWZ0ZXIgc2tpYSByZXYuIDMyODMgbGFu
ZHMgaW4gd2Via2l0CiBCVUdDUjExNjI1MiBMSU5VWCA6IHBsYXRmb3JtL2Nocm9taXVtLWxpbnV4
L2Zhc3QvdGV4dC9jaHJvbWl1bS1saW51eC1mb250Y29uZmlnLXJlbmRlcnN0eWxlLmh0bWwgPSBJ
TUFHRStURVhUCiAKLUJVR1dLODAwNTMgREVCVUcgOiBzdmcvVzNDLVNWRy0xLjEvYW5pbWF0ZS1l
bGVtLTMyLXQuc3ZnID0gQ1JBU0ggUEFTUwotCiBCVUdXSzgwMDU4IFdJTiBSRUxFQVNFIDogZmFz
dC93b3JrZXJzL3N0cmVzcy1qcy1leGVjdXRpb24uaHRtbCA9IENSQVNIIFBBU1MKIAogQlVHV0s4
MDA2NyBERUJVRyA6IG1lZGlhL3RyYWNrL3RyYWNrLWN1ZXMtcGF1c2Utb24tZXhpdC5odG1sID0g
UEFTUyBURVhUCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hdHRyaWJ1
dGVUeXBlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hdHRyaWJ1
dGVUeXBlcy1leHBlY3RlZC50eHQKaW5kZXggOTUxZTM3MDRiNGRkYTg3MzBiOTFiMmZiNGQxMzY5
ZWU0YjlmODJkNS4uMzVkODAzZDkzMmIyYjg0N2ZjNTgyMzc4MmU4Y2YxN2QxOWZjOTgxOCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYXR0cmlidXRlVHlwZXMtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2F0dHJpYnV0ZVR5cGVzLWV4
cGVjdGVkLnR4dApAQCAtMTIsMzIgKzEyLDQwIEBAIFBBU1MgcmVjdDIud2lkdGguYW5pbVZhbC52
YWx1ZSBpcyAxMDAKIFBBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MikuZmlsbCBpcyAiIzAwODAw
MCIKIFBBU1MgcmVjdDMud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAKIFBBU1MgZ2V0Q29tcHV0
ZWRTdHlsZShyZWN0MykuZmlsbCBpcyAiI2ZmMDAwMCIKK1BBU1MgcmVjdDMuZ2V0QXR0cmlidXRl
KCdmaWxsJykgaXMgInJlZCIKIFBBU1MgcmVjdDQud2lkdGguYW5pbVZhbC52YWx1ZSBpcyAxMDAK
IFBBU1MgZ2V0Q29tcHV0ZWRTdHlsZShyZWN0NCkuZmlsbCBpcyAiI2ZmMDAwMCIKK1BBU1MgcmVj
dDQuZ2V0QXR0cmlidXRlKCdmaWxsJykgaXMgInJlZCIKIFBBU1MgcmVjdDEud2lkdGguYW5pbVZh
bC52YWx1ZSBpcyA1NQogUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QxKS5maWxsIGlzICIjMDA4
MDAwIgogUEFTUyByZWN0Mi53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21w
dXRlZFN0eWxlKHJlY3QyKS5maWxsIGlzICIjMDA4MDAwIgogUEFTUyByZWN0My53aWR0aC5hbmlt
VmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QzKS5maWxsIGlzICIj
ODA0MDAwIgorUEFTUyByZWN0My5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSBpcyAicmVkIgogUEFTUyBy
ZWN0NC53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJl
Y3Q0KS5maWxsIGlzICIjODA0MDAwIgorUEFTUyByZWN0NC5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSBp
cyAicmVkIgogUEFTUyByZWN0MS53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRD
b21wdXRlZFN0eWxlKHJlY3QxKS5maWxsIGlzICIjMDA4MDAwIgogUEFTUyByZWN0Mi53aWR0aC5h
bmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QyKS5maWxsIGlz
ICIjMDA4MDAwIgogUEFTUyByZWN0My53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBn
ZXRDb21wdXRlZFN0eWxlKHJlY3QzKS5maWxsIGlzICIjMDA4MDAwIgorUEFTUyByZWN0My5nZXRB
dHRyaWJ1dGUoJ2ZpbGwnKSBpcyAicmVkIgogUEFTUyByZWN0NC53aWR0aC5hbmltVmFsLnZhbHVl
IGlzIDEwMAogUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3Q0KS5maWxsIGlzICIjMDA4MDAwIgor
UEFTUyByZWN0NC5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSBpcyAicmVkIgogUEFTUyByZWN0MS53aWR0
aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QxKS5maWxs
IGlzICIjMDA4MDAwIgogUEFTUyByZWN0Mi53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFT
UyBnZXRDb21wdXRlZFN0eWxlKHJlY3QyKS5maWxsIGlzICIjMDA4MDAwIgogUEFTUyByZWN0My53
aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21wdXRlZFN0eWxlKHJlY3QzKS5m
aWxsIGlzICIjMDA4MDAwIgorUEFTUyByZWN0My5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSBpcyAicmVk
IgogUEFTUyByZWN0NC53aWR0aC5hbmltVmFsLnZhbHVlIGlzIDEwMAogUEFTUyBnZXRDb21wdXRl
ZFN0eWxlKHJlY3Q0KS5maWxsIGlzICIjMDA4MDAwIgorUEFTUyByZWN0NC5nZXRBdHRyaWJ1dGUo
J2ZpbGwnKSBpcyAicmVkIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNU
IENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9yZXNvdXJj
ZXMvYXR0cmlidXRlVHlwZXMuc3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvcmVzb3Vy
Y2VzL2F0dHJpYnV0ZVR5cGVzLnN2ZwppbmRleCBkMjY4YzQxMWFmNGZiOThjYzM4MDZlZmExYmM2
MGRlN2Q2NmY4ZjdiLi4zNWJhNDMzZGZjZWQyNDBhYWY4YWRlMmMyNmM1ZmNiNDdjYzY1YmNmIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9yZXNvdXJjZXMvYXR0cmlidXRl
VHlwZXMuc3ZnCisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3Jlc291cmNlcy9hdHRy
aWJ1dGVUeXBlcy5zdmcKQEAgLTE3LDcgKzE3LDcgQEAKICAgICA8YW5pbWF0ZSBpZD0iYW4zIiBh
dHRyaWJ1dGVUeXBlPSJhdXRvIiBhdHRyaWJ1dGVOYW1lPSJmaWxsIiBmaWxsPSJmcmVlemUiIGZy
b209InJlZCIgdG89ImdyZWVuIiBiZWdpbj0iMHMiIGR1cj0iNHMiLz4KIDwvcmVjdD4KIAotPCEt
LSAnZmlsbCcgaXMgYSBwcmVzZW50YXRpb24gYXR0cmlidXRlLCBtYXBwZWQgdG8gQ1NTLCBhdHRy
aWJ1dGVUeXBlIGlzIHNldCB0byAiQ1NTIjogdGhpcyBhbmltYXRpb24gcnVucy4gLS0+Cis8IS0t
ICdmaWxsJyBpcyBhIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGUsIG1hcHBlZCB0byBDU1MsIGF0dHJp
YnV0ZVR5cGUgaXMgc2V0IHRvICJYTUwiOiB0aGlzIGFuaW1hdGlvbiBydW5zLiAtLT4KIDxyZWN0
IHg9IjE1MCIgeT0iMTUwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0icmVkIj4KICAg
ICA8YW5pbWF0ZSBpZD0iYW40IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIGF0dHJpYnV0ZU5hbWU9ImZp
bGwiIGZpbGw9ImZyZWV6ZSIgZnJvbT0icmVkIiB0bz0iZ3JlZW4iIGJlZ2luPSIwcyIgZHVyPSI0
cyIvPgogPC9yZWN0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2Ny
aXB0LXRlc3RzL2F0dHJpYnV0ZVR5cGVzLmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMv
c2NyaXB0LXRlc3RzL2F0dHJpYnV0ZVR5cGVzLmpzCmluZGV4IDhjMTQyZTI2MDhiZDAwZmU4M2Y2
NjFkZDNlYTBlMDVmMWE4MGVlMzAuLjQ2OGFlODc0MzQ4MDg3NjE1MzAxNWY4MzFhMDQyY2IyNTM1
YTY4NjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0
cy9hdHRyaWJ1dGVUeXBlcy5qcworKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3Jp
cHQtdGVzdHMvYXR0cmlidXRlVHlwZXMuanMKQEAgLTE0LDEwICsxNCwxMiBAQCBmdW5jdGlvbiBz
YW1wbGUxKCkgewogICAgIHNob3VsZEJlKCJyZWN0My53aWR0aC5hbmltVmFsLnZhbHVlIiwgIjEw
MCIpOwogICAgIC8vc2hvdWxkQmUoInJlY3QzLndpZHRoLmJhc2VWYWwudmFsdWUiLCAiMTAwIik7
CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJnZXRDb21wdXRlZFN0eWxlKHJlY3QzKS5maWxs
IiwgIiNmZjAwMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3QzLmdldEF0dHJp
YnV0ZSgnZmlsbCcpIiwgInJlZCIpOwogCiAgICAgc2hvdWxkQmUoInJlY3Q0LndpZHRoLmFuaW1W
YWwudmFsdWUiLCAiMTAwIik7CiAgICAgLy9zaG91bGRCZSgicmVjdDQud2lkdGguYmFzZVZhbC52
YWx1ZSIsICIxMDAiKTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdldENvbXB1dGVkU3R5
bGUocmVjdDQpLmZpbGwiLCAiI2ZmMDAwMCIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygi
cmVjdDQuZ2V0QXR0cmlidXRlKCdmaWxsJykiLCAicmVkIik7CiB9CiAKIGZ1bmN0aW9uIHNhbXBs
ZTIoKSB7CkBAIC0zMiwxMCArMzQsMTIgQEAgZnVuY3Rpb24gc2FtcGxlMigpIHsKICAgICBzaG91
bGRCZSgicmVjdDMud2lkdGguYW5pbVZhbC52YWx1ZSIsICIxMDAiKTsKICAgICAvL3Nob3VsZEJl
KCJyZWN0My53aWR0aC5iYXNlVmFsLnZhbHVlIiwgIjEwMCIpOwogICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0MykuZmlsbCIsICIjODA0MDAwIik7CisgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWN0My5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSIsICJyZWQi
KTsKIAogICAgIHNob3VsZEJlKCJyZWN0NC53aWR0aC5hbmltVmFsLnZhbHVlIiwgIjEwMCIpOwog
ICAgIC8vc2hvdWxkQmUoInJlY3Q0LndpZHRoLmJhc2VWYWwudmFsdWUiLCAiMTAwIik7CiAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJnZXRDb21wdXRlZFN0eWxlKHJlY3Q0KS5maWxsIiwgIiM4
MDQwMDAiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInJlY3Q0LmdldEF0dHJpYnV0ZSgn
ZmlsbCcpIiwgInJlZCIpOwogfQogCiBmdW5jdGlvbiBzYW1wbGUzKCkgewpAQCAtNTAsMTAgKzU0
LDEyIEBAIGZ1bmN0aW9uIHNhbXBsZTMoKSB7CiAgICAgc2hvdWxkQmUoInJlY3QzLndpZHRoLmFu
aW1WYWwudmFsdWUiLCAiMTAwIik7CiAgICAgLy9zaG91bGRCZSgicmVjdDMud2lkdGguYmFzZVZh
bC52YWx1ZSIsICIxMDAiKTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdldENvbXB1dGVk
U3R5bGUocmVjdDMpLmZpbGwiLCAiIzAwODAwMCIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygicmVjdDMuZ2V0QXR0cmlidXRlKCdmaWxsJykiLCAicmVkIik7CiAKICAgICBzaG91bGRCZSgi
cmVjdDQud2lkdGguYW5pbVZhbC52YWx1ZSIsICIxMDAiKTsKICAgICAvL3Nob3VsZEJlKCJyZWN0
NC53aWR0aC5iYXNlVmFsLnZhbHVlIiwgIjEwMCIpOwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygiZ2V0Q29tcHV0ZWRTdHlsZShyZWN0NCkuZmlsbCIsICIjMDA4MDAwIik7CisgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJyZWN0NC5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSIsICJyZWQiKTsKIH0K
IAogZnVuY3Rpb24gZXhlY3V0ZVRlc3QoKSB7Cg==
</data>
<flag name="review"
          id="132903"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>