<?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>59072</bug_id>
          
          <creation_ts>2011-04-20 21:11:54 -0700</creation_ts>
          <short_desc>LEAK: SVGElement leaks when detaching it in a pending resource state</short_desc>
          <delta_ts>2011-05-02 07:15:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>59084</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Leo Yang">leo.yang</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>aroben</cc>
    
    <cc>koivisto</cc>
    
    <cc>krit</cc>
    
    <cc>leoyang.webkit</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>389816</commentid>
    <comment_count>0</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-04-20 21:11:54 -0700</bug_when>
    <thetext>SVG &lt;use&gt; element is leaking when detaching from pending on resource state.

&lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.0&quot; width=&quot;400&quot; height=&quot;400&quot;&gt;
    &lt;use xlink:href=&quot;#undefined&quot; id=&quot;use&quot; /&gt;
&lt;/svg&gt;

the above document will cause &lt;use&gt; be leaking.

patch is coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389852</commentid>
    <comment_count>1</comment_count>
      <attachid>90495</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-04-20 22:40:23 -0700</bug_when>
    <thetext>Created attachment 90495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389911</commentid>
    <comment_count>2</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-04-21 02:42:56 -0700</bug_when>
    <thetext>This is a generic problem for SVGElement. So changing title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390002</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 07:09:08 -0700</bug_when>
    <thetext>As discussed on IRC:
SVGElement::removedFromDocument() needs to be implemented, that clears any pending resource state.
Aka removes the offending element from the SVGDocumentExtensions HashSet.


    typedef HashSet&lt;RefPtr&lt;SVGStyledElement&gt; &gt; SVGPendingElements;

Some time ago this HashSet was changed to contain RefPtr, as we saw dangling pointer crashes. The reason is now clear:

&lt;rect fill=&quot;url(#foo)&quot;&gt; causes the &lt;rect&gt; to be present in the HashSet. If foo never appears, and we remove the &lt;rect&gt; from DOM, or destruct the document, the RefPtr in SVGPendingElements is still present!

The RefCounting itself is relatively new, but now the reason is clear why we had dangling pointer crashes in first place: we&apos;re not cleaning up this SVGPendingElements HashSet properly!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390004</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 07:09:41 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; As discussed on IRC:
&gt; SVGElement::removedFromDocument() needs to be implemented, that clears any pending resource state.
&gt; Aka removes the offending element from the SVGDocumentExtensions HashSet.
&gt; 
&gt; 
&gt;     typedef HashSet&lt;RefPtr&lt;SVGStyledElement&gt; &gt; SVGPendingElements;
&gt; 
&gt; Some time ago this HashSet was changed to contain RefPtr, as we saw dangling pointer crashes. The reason is now clear:
&gt; 
&gt; &lt;rect fill=&quot;url(#foo)&quot;&gt; causes the &lt;rect&gt; to be present in the HashSet. If foo never appears, and we remove the &lt;rect&gt; from DOM, or destruct the document, the RefPtr in SVGPendingElements is still present!
&gt; 
&gt; The RefCounting itself is relatively new, but now the reason is clear why we had dangling pointer crashes in first place: we&apos;re not cleaning up this SVGPendingElements HashSet properly!

As discussed with Leo on IRC, all we need to do to fix is:
implement SVGElement::removedFromDocument, similar to insertedIntoDocument, that just removes the pending resource...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390008</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-04-21 07:14:24 -0700</bug_when>
    <thetext>This is leaking SVG documents too (due to elements holding guard refs), https://bugs.webkit.org/show_bug.cgi?id=58889.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390012</commentid>
    <comment_count>6</comment_count>
      <attachid>90528</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 07:33:27 -0700</bug_when>
    <thetext>Created attachment 90528
New approach

This should fix the problem, Antti is going to try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390018</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 07:39:59 -0700</bug_when>
    <thetext>*** Bug 59084 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390074</commentid>
    <comment_count>8</comment_count>
      <attachid>90528</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-21 09:10:12 -0700</bug_when>
    <thetext>Comment on attachment 90528
New approach

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

&gt; Source/WebCore/svg/SVGElement.cpp:67
&gt; +static inline void clearPendingResourceState(SVGDocumentExtensions* extensions, const String&amp; id)

I&apos;m confused.  Why wouldnt this go on SVGDocumentExtensions.  And can we add an ASSERT that would catch the leak?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390139</commentid>
    <comment_count>9</comment_count>
      <attachid>90528</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 10:35:52 -0700</bug_when>
    <thetext>Comment on attachment 90528
New approach

Wrong approach, doesn&apos;t fix anything. I&apos;m investigating...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390711</commentid>
    <comment_count>10</comment_count>
      <attachid>90692</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-22 04:51:27 -0700</bug_when>
    <thetext>Created attachment 90692
Patch

New approach, the previous patch was just plain wrong :-) Included several testcases that leak in trunk and stop with that patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390740</commentid>
    <comment_count>11</comment_count>
    <who name="Leo Yang">leoyang.webkit</who>
    <bug_when>2011-04-22 06:13:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=90692) [details]
&gt; Patch
&gt; 
&gt; New approach, the previous patch was just plain wrong :-) Included several testcases that leak in trunk and stop with that patch.

I did something like this today. But I think we maybe do this more efficient. My thought is the following.

  add a function like
  virtual Vector&lt;AtomticString&gt; SVGElement::collectPendingResourceId()

  add a resource id parameter to SVGDocumentExtensions::removeElementFromPendingResources, make it like
  void SVGDocumentExtensions::removeElementFromPendingResources(const AtomicString&amp; resurctId SVGElement* element)

  In SVGElement::removedFromDocument, we can call removeElementFromPendingResources for each resource which are collected by collectPendingResourceId().

  This enable us to implement removeElementFromPendingResources more efficient because 1) we can quick reject to call removeElementFromPendingResources if the vector is empty; 2)otherwise, we can use resourceId to find pending elements quickly.

  The implementation of SVGElement::collectPendingResourceId() like

  {
       return SVGResources::collectPendingResourceId(this); //static function
  }

  Vector&lt;AtomicString&gt; SVGResources::collectPendingResourceId(SVGElement* element)
  {
       // Do something like SVGResources::buildCachedResource()
       // use element&apos;s style to collect pending resource id.
  }

  For other elements like SVGUseElement, the implmentation of collectPendingResourceId like

   {
       Vector&lt;AtomicString&gt; vector = Super::collectPendingResourceId();
       if (m_isPendingResource) {
           vector.append(m_resourceId);
           // Do other clear things;
       }
       return vector;
   }

  One thing that I&apos;m not sure is that I don&apos;t know if SVGElement&apos;s style is
  available when we call collectPendingResourceId

  The above is just my thought, but might be wrong :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390757</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-22 06:48:11 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Created an attachment (id=90692) [details] [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; New approach, the previous patch was just plain wrong :-) Included several testcases that leak in trunk and stop with that patch.
&gt; 
&gt; I did something like this today. But I think we maybe do this more efficient. 
&gt;   Vector&lt;AtomicString&gt; SVGResources::collectPendingResourceId(SVGElement* element)
&gt;   {
&gt;        // Do something like SVGResources::buildCachedResource()
&gt;        // use element&apos;s style to collect pending resource id.
&gt;   }

This is problematic, we need to remove the pending resources that were initially registered.
Think of &lt;rect fill=&quot;url(#foo)&quot;, if I change the url to #bar using JS, how would you handle that?
Your collectPendingResourceId would return #bar, and we&apos;d miss to remove the #foo reference from the HashSet in the SVGDocumentExtensions.

&gt; 
&gt;   One thing that I&apos;m not sure is that I don&apos;t know if SVGElement&apos;s style is
&gt;   available when we call collectPendingResourceId
Not necessarily...
&gt; 
&gt;   The above is just my thought, but might be wrong :p
What do you think about the approach in my patch? you have speed concerns?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390765</commentid>
    <comment_count>13</comment_count>
    <who name="Leo Yang">leoyang.webkit</who>
    <bug_when>2011-04-22 07:17:39 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; Created an attachment (id=90692) [details] [details] [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; New approach, the previous patch was just plain wrong :-) Included several testcases that leak in trunk and stop with that patch.
&gt; &gt; 
&gt; &gt; I did something like this today. But I think we maybe do this more efficient. 
&gt; &gt;   Vector&lt;AtomicString&gt; SVGResources::collectPendingResourceId(SVGElement* element)
&gt; &gt;   {
&gt; &gt;        // Do something like SVGResources::buildCachedResource()
&gt; &gt;        // use element&apos;s style to collect pending resource id.
&gt; &gt;   }
&gt; 
&gt; This is problematic, we need to remove the pending resources that were initially registered.
&gt; Think of &lt;rect fill=&quot;url(#foo)&quot;, if I change the url to #bar using JS, how would you handle that?
&gt; Your collectPendingResourceId would return #bar, and we&apos;d miss to remove the #foo reference from the HashSet in the SVGDocumentExtensions.
&gt; 
&gt; &gt; 
&gt; &gt;   One thing that I&apos;m not sure is that I don&apos;t know if SVGElement&apos;s style is
&gt; &gt;   available when we call collectPendingResourceId
&gt; Not necessarily...
&gt; &gt; 
&gt; &gt;   The above is just my thought, but might be wrong :p
&gt; What do you think about the approach in my patch? you have speed concerns?
The approach will work. But every SVGElement costs time which is taken by removeElementFromPendingReources even if it has no pending resource. And elements which have no pending resource are very common. Maybe adding a bit to SVGElement as a hint of pending on resources can reduce most uncessary calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390845</commentid>
    <comment_count>14</comment_count>
      <attachid>90692</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-04-22 09:53:08 -0700</bug_when>
    <thetext>Comment on attachment 90692
Patch

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

&gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:214
&gt; +void SVGDocumentExtensions::addPendingResource(const AtomicString&amp; id, PassRefPtr&lt;SVGElement&gt; obj)

I wonder why you need this change. Or better: why did it work before? None-styleable elements can be pending resources or could need pending resources.

&gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:242
&gt; +    if (m_pendingResources.isEmpty())
&gt; +        return;

To Leo&apos;s comment. We have to call SVGDocumentExtensions for animations anyway. And if the element doesn&apos;t have pending resources we return earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390909</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-22 11:13:59 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 90692 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90692&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:214
&gt; &gt; +void SVGDocumentExtensions::addPendingResource(const AtomicString&amp; id, PassRefPtr&lt;SVGElement&gt; obj)
&gt; 
&gt; I wonder why you need this change. Or better: why did it work before? None-styleable elements can be pending resources or could need pending resources.
Nope only SVGStyledElements use this framework. The question is correct, the stuff calling add/removePendingResources should be in SVGStyledElements dtor, not in SVGElement.
I&apos;m looking into it...

&gt; &gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:242
&gt; &gt; +    if (m_pendingResources.isEmpty())
&gt; &gt; +        return;
&gt; 
&gt; To Leo&apos;s comment. We have to call SVGDocumentExtensions for animations anyway. And if the element doesn&apos;t have pending resources we return earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391295</commentid>
    <comment_count>16</comment_count>
    <who name="Leo Yang">leoyang.webkit</who>
    <bug_when>2011-04-22 18:11:01 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 90692 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90692&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:214
&gt; &gt; +void SVGDocumentExtensions::addPendingResource(const AtomicString&amp; id, PassRefPtr&lt;SVGElement&gt; obj)
&gt; 
&gt; I wonder why you need this change. Or better: why did it work before? None-styleable elements can be pending resources or could need pending resources.
&gt; 
&gt; &gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:242
&gt; &gt; +    if (m_pendingResources.isEmpty())
&gt; &gt; +        return;
&gt; 
&gt; To Leo&apos;s comment. We have to call SVGDocumentExtensions for animations anyway. And if the element doesn&apos;t have pending resources we return earlier.
How about m_pendingResources is not empty? Consider a few SVGStyledElements in a document are pending on resources, which means m_pendingResources is not empty, but some other SVGStyledElements in the document aren&apos;t. Every SVGStyledElement not in the pending map also will cost the time of the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391437</commentid>
    <comment_count>17</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-23 00:40:52 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; Created an attachment (id=90692) [details] [details] [details] [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; New approach, the previous patch was just plain wrong :-) Included several testcases that leak in trunk and stop with that patch.
&gt; &gt; &gt; 
&gt; &gt; &gt; I did something like this today. But I think we maybe do this more efficient. 
&gt; &gt; &gt;   Vector&lt;AtomicString&gt; SVGResources::collectPendingResourceId(SVGElement* element)
&gt; &gt; &gt;   {
&gt; &gt; &gt;        // Do something like SVGResources::buildCachedResource()
&gt; &gt; &gt;        // use element&apos;s style to collect pending resource id.
&gt; &gt; &gt;   }
&gt; &gt; 
&gt; &gt; This is problematic, we need to remove the pending resources that were initially registered.
&gt; &gt; Think of &lt;rect fill=&quot;url(#foo)&quot;, if I change the url to #bar using JS, how would you handle that?
&gt; &gt; Your collectPendingResourceId would return #bar, and we&apos;d miss to remove the #foo reference from the HashSet in the SVGDocumentExtensions.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt;   One thing that I&apos;m not sure is that I don&apos;t know if SVGElement&apos;s style is
&gt; &gt; &gt;   available when we call collectPendingResourceId
&gt; &gt; Not necessarily...
&gt; &gt; &gt; 
&gt; &gt; &gt;   The above is just my thought, but might be wrong :p
&gt; &gt; What do you think about the approach in my patch? you have speed concerns?
&gt; The approach will work. But every SVGElement costs time which is taken by removeElementFromPendingReources even if it has no pending resource. And elements which have no pending resource are very common. Maybe adding a bit to SVGElement as a hint of pending on resources can reduce most uncessary calls.
You&apos;re right, though adding anything to SVGElement/SVGStyledElement is a bad idea, as it enlarges the size of all these classes, even though it&apos;s mostly unused. so I&apos;ve used SVGElementRareData as place to track whether the SVGStyledElement is pending or not.

Updating patch soon...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391438</commentid>
    <comment_count>18</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-23 00:42:34 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 90692 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90692&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:214
&gt; &gt; +void SVGDocumentExtensions::addPendingResource(const AtomicString&amp; id, PassRefPtr&lt;SVGElement&gt; obj)
&gt; 
&gt; I wonder why you need this change. Or better: why did it work before? None-styleable elements can be pending resources or could need pending resources.
It turns out all resources that can be pending are SVGStyledElements. I&apos;m reverting that part of the patch, and move the code where it belongs (from SVGElement to SVGStyledElement).

&gt; 
&gt; &gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:242
&gt; &gt; +    if (m_pendingResources.isEmpty())
&gt; &gt; +        return;
&gt; 
&gt; To Leo&apos;s comment. We have to call SVGDocumentExtensions for animations anyway. And if the element doesn&apos;t have pending resources we return earlier.
Nope, that was exactly Leos point. We only exit earlier if needsPendingResourceHandling() is false.
And by-default we return true there for every SVGStyledElement, only false for a few (filter, marker, mask, etc..). So we have to track pending resources state explicitely in SVGStyledElement oherwhise we&apos;re always doing extra work, so Leo is right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391891</commentid>
    <comment_count>19</comment_count>
      <attachid>90692</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-04-25 14:19:53 -0700</bug_when>
    <thetext>Comment on attachment 90692
Patch

r-. See the comments of Niko.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393434</commentid>
    <comment_count>20</comment_count>
      <attachid>91253</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-27 01:24:19 -0700</bug_when>
    <thetext>Created attachment 91253
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393440</commentid>
    <comment_count>21</comment_count>
      <attachid>91254</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-27 01:35:26 -0700</bug_when>
    <thetext>Created attachment 91254
Patch v3

Oops, forgot to update the ChangeLog to reflect the refcounting change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393456</commentid>
    <comment_count>22</comment_count>
      <attachid>91254</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-04-27 02:30:55 -0700</bug_when>
    <thetext>Comment on attachment 91254
Patch v3

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

I just add my comments, not a review :)

&gt; Source/WebCore/svg/SVGElementRareData.h:64
&gt; +    bool isPendingResource() const { return m_isPendingResource; }

Is hasPendingResource() better?

&gt; Source/WebCore/svg/SVGElementRareData.h:65
&gt; +    void setIsPendingResource(bool value) { m_isPendingResource = value; }

Is setHasPendingResource() better?

&gt; Source/WebCore/svg/SVGElementRareData.h:78
&gt; +    bool m_isPendingResource : 1;

ditto: m_hasPendingResource?

&gt; Source/WebCore/svg/SVGStyledElement.cpp:454
&gt; +}

ditto

&gt; Source/WebCore/svg/SVGStyledElement.cpp:459
&gt; +}

ditto

&gt; Source/WebCore/svg/SVGStyledElement.h:56
&gt; +    void setIsPendingResource(bool);

ditto

&gt; Source/WebCore/svg/SVGUseElement.cpp:176
&gt; +            }

I can&apos;t understand why this &lt;use&gt;&apos;s href affects the other &lt;use&gt;&apos;s. Shall we call document()-&gt;accessSVGExtensions()-&gt;removeElementFromPendingResources(this)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393521</commentid>
    <comment_count>23</comment_count>
      <attachid>91254</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-04-27 06:18:43 -0700</bug_when>
    <thetext>Comment on attachment 91254
Patch v3

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

Mainly r- because of the wrong style of the tests. Still some open questions on the patch itself.

&gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:251
&gt; +    HashMap&lt;AtomicString, SVGPendingElements*&gt;::iterator end = m_pendingResources.end();

Why can we have multiple resources for one id? Even if the user sets the same id to two different elements, we don&apos;t end up with two resources. What am I missing? Ah you try to catch the scenario where the user removes one of the elements and we take the other resource?

&gt;&gt; Source/WebCore/svg/SVGElementRareData.h:64
&gt;&gt; +    bool isPendingResource() const { return m_isPendingResource; }
&gt; 
&gt; Is hasPendingResource() better?

First unofficial reviews. Great! really.

&gt;&gt; Source/WebCore/svg/SVGElementRareData.h:65
&gt;&gt; +    void setIsPendingResource(bool value) { m_isPendingResource = value; }
&gt; 
&gt; Is setHasPendingResource() better?

The naming is correct here. The affected element _is_ a pending resource. But it may have it self pending resources of course.

&gt;&gt; Source/WebCore/svg/SVGElementRareData.h:78
&gt;&gt; +    bool m_isPendingResource : 1;
&gt; 
&gt; ditto: m_hasPendingResource?

Ditto.

&gt;&gt; Source/WebCore/svg/SVGUseElement.cpp:176
&gt;&gt; +            }
&gt; 
&gt; I can&apos;t understand why this &lt;use&gt;&apos;s href affects the other &lt;use&gt;&apos;s. Shall we call document()-&gt;accessSVGExtensions()-&gt;removeElementFromPendingResources(this)?

the use element can have pending resources it self: xlink:hreaf=&quot;foo&quot;. We need to remove foo from the pending lists. Nevertheless I agree. Why are you doing it if the use element is itself a pending resource? Should this if condition get removed?

&gt; LayoutTests/svg/custom/pending-resource-leak-2.svg:6
&gt; +			layoutTestController.waitUntilDone();

No tabs please. For some reason this is not checked by the style bot :-(

&gt; LayoutTests/svg/custom/pending-resource-leak-3.svg:6
&gt; +			layoutTestController.waitUntilDone();

ditto. The following files have the same problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395887</commentid>
    <comment_count>24</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-01 06:23:17 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 91254 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91254&amp;action=review
&gt; 
&gt; Mainly r- because of the wrong style of the tests. Still some open questions on the patch itself.
&gt; 
&gt; &gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:251
&gt; &gt; +    HashMap&lt;AtomicString, SVGPendingElements*&gt;::iterator end = m_pendingResources.end();
&gt; 
&gt; Why can we have multiple resources for one id? Even if the user sets the same id to two different elements, we don&apos;t end up with two resources. What am I missing? Ah you try to catch the scenario where the user removes one of the elements and we take the other resource?
&lt;rect fill=&quot;url(#foo)&quot; stroke=&quot;url(#foo)&quot;&gt; that&apos;s the scenario :-)

&gt; 
&gt; &gt;&gt; Source/WebCore/svg/SVGElementRareData.h:64
&gt; &gt;&gt; +    bool isPendingResource() const { return m_isPendingResource; }
&gt; &gt; 
&gt; &gt; Is hasPendingResource() better?
&gt; 
&gt; First unofficial reviews. Great! really.
Yeah, it&apos;s better, I changed the name.

&gt; 
&gt; &gt;&gt; Source/WebCore/svg/SVGElementRareData.h:65
&gt; &gt;&gt; +    void setIsPendingResource(bool value) { m_isPendingResource = value; }
&gt; &gt; 
&gt; &gt; Is setHasPendingResource() better?
&gt; 
&gt; The naming is correct here. The affected element _is_ a pending resource. But it may have it self pending resources of course.
Wait Leo is right, when we have
&lt;rect fill=&quot;url(#foo)&quot; id=&quot;rect&quot;/&gt;
Then we call addPendingResource(&quot;url(#foo), rectElement).
That doesn&apos;t mean rectElement is a pending resource, but it _has_ pending resources, so Leos suggestions is good.

&gt; 
&gt; &gt;&gt; Source/WebCore/svg/SVGUseElement.cpp:176
&gt; &gt;&gt; +            }
&gt; &gt; 
&gt; &gt; I can&apos;t understand why this &lt;use&gt;&apos;s href affects the other &lt;use&gt;&apos;s. Shall we call document()-&gt;accessSVGExtensions()-&gt;removeElementFromPendingResources(this)?
&gt; 
&gt; the use element can have pending resources it self: xlink:hreaf=&quot;foo&quot;. We need to remove foo from the pending lists. Nevertheless I agree. Why are you doing it if the use element is itself a pending resource? Should this if condition get removed?
Use is special, my changes only mimic the &quot;old way&quot; use handles resources. I tried to change this, but it&apos;s really tricky -- we have to postpone cleaning use &amp; pending resources until the point where we use the new shadow DOM creation. Currently RenderSVGShadowTreeRootContainer _manually_ handles pending resources, and calls useElement-&gt;buildPendingResource() on its own, that&apos;s why we have the check in there and can&apos;t remove the condition. This only affects use.

&gt; 
&gt; &gt; LayoutTests/svg/custom/pending-resource-leak-2.svg:6
&gt; &gt; +			layoutTestController.waitUntilDone();
&gt; 
&gt; No tabs please. For some reason this is not checked by the style bot :-(
Fixed.

Uploading a new patch soon..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395888</commentid>
    <comment_count>25</comment_count>
      <attachid>91822</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-01 06:24:59 -0700</bug_when>
    <thetext>Created attachment 91822
Patch v4

Fixed Leos &amp; Dirks comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395901</commentid>
    <comment_count>26</comment_count>
      <attachid>91822</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-05-01 07:34:37 -0700</bug_when>
    <thetext>Comment on attachment 91822
Patch v4

r=me. You&apos;re right with renaming the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395903</commentid>
    <comment_count>27</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-01 07:39:15 -0700</bug_when>
    <thetext>Landed in r85413.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396369</commentid>
    <comment_count>28</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-02 07:15:43 -0700</bug_when>
    <thetext>It&apos;s hard to tell if this had any effect on the leaks bot:

r85411, 5342 leaks
http://build.webkit.org/builders/SnowLeopard%20Intel%20Leaks/builds/16613

r85413, 6266 leaks
http://build.webkit.org/builders/SnowLeopard%20Intel%20Leaks/builds/16614

r85427, 5221 leaks
http://build.webkit.org/builders/SnowLeopard%20Intel%20Leaks/builds/16619</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90495</attachid>
            <date>2011-04-20 22:40:23 -0700</date>
            <delta_ts>2011-04-21 07:33:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-2011-04-20-Leo-Yang-leo.yang-torchmobile.com.cn.patch</filename>
            <type>text/plain</type>
            <size>2569</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSBhOWIzMDcyOWU2MmEzMThjZjEyMDQzNDA5NWUyYjEyODM3ZDA3YmViIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBUaHUsIDIxIEFwciAyMDExIDEzOjM3OjE2ICswODAwClN1YmplY3Q6IFtQQVRDSF0g
MjAxMS0wNC0yMCAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CgogICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBMRUFLOiBTVkcgPHVzZT4g
ZWxlbWVudCBpcyBsZWFraW5nIHdoZW4gZGV0YWNoaW5nIGZyb20gcGVuZGluZyBvbiByZXNvdXJj
ZSBzdGF0ZQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
OTA3MgoKICAgICAgICA8dXNlPiBlbGVtZW50IHdhcyBsZWFraW5nIHdoZW4gZGV0YWNoaW5nIGZy
b20gcGVuZGluZyBvbiBzcmVvdXJjZSBzdGF0ZQogICAgICAgIGJlY2F1c2UgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zIHdhcyBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSA8dXNlPiBlbGVtZW50LgoK
ICAgICAgICBUaGlzIHBhdGNoIGlzIHJlbW92aW5nIHRoZSBwZW5kaW5nIHJlc291cmNlIGZyb20g
U1ZHRG9jdW1lbnRFeHRlbnNpb25zIHNvIGFzIHRvCiAgICAgICAgY2xlYXIgdGhlIHJlZmVyZW5j
ZSBhbmQgcHJldmVudCBsZWFraW5nLgoKICAgICAgICBGaXhpbmcgbGVha2luZywgbm8gbmV3IHRl
c3RzLgoKICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKICAgICAgICAoV2ViQ29yZTo6
U1ZHVXNlRWxlbWVudDo6ZGV0YWNoKToKCihXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpkZXRhY2gp
OgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICB8ICAgMTggKysrKysr
KysrKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgfCAgICA4
ICsrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGM0ZDg3ZGQuLjFkNzY1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMSBAQAorMjAxMS0wNC0yMCAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20u
Y24+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTEVB
SzogU1ZHIDx1c2U+IGVsZW1lbnQgaXMgbGVha2luZyB3aGVuIGRldGFjaGluZyBmcm9tIHBlbmRp
bmcgb24gcmVzb3VyY2Ugc3RhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU5MDcyCisKKyAgICAgICAgPHVzZT4gZWxlbWVudCB3YXMgbGVha2luZyB3
aGVuIGRldGFjaGluZyBmcm9tIHBlbmRpbmcgb24gc3Jlb3VyY2Ugc3RhdGUKKyAgICAgICAgYmVj
YXVzZSBTVkdEb2N1bWVudEV4dGVuc2lvbnMgd2FzIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhl
IDx1c2U+IGVsZW1lbnQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyByZW1vdmluZyB0aGUgcGVu
ZGluZyByZXNvdXJjZSBmcm9tIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyBzbyBhcyB0bworICAgICAg
ICBjbGVhciB0aGUgcmVmZXJlbmNlIGFuZCBwcmV2ZW50IGxlYWtpbmcuCisKKyAgICAgICAgRml4
aW5nIGxlYWtpbmcsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmRldGFjaCk6CisKIDIwMTEt
MDQtMjAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAppbmRleCA5
ODFiYzljLi40M2U4NmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCkBAIC02
NTQsNiArNjU0LDE0IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6YXR0YWNoKCkKIHZvaWQgU1ZHVXNl
RWxlbWVudDo6ZGV0YWNoKCkKIHsKICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
ZGV0YWNoKCk7CisKKyAgICBpZiAobV9pc1BlbmRpbmdSZXNvdXJjZSkgeworICAgICAgICBBU1NF
UlQoIW1fcmVzb3VyY2VJZC5pc0VtcHR5KCkpOworICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCktPnJlbW92ZVBlbmRpbmdSZXNvdXJjZShtX3Jlc291cmNlSWQpOworICAg
ICAgICBtX2lzUGVuZGluZ1Jlc291cmNlID0gZmFsc2U7CisgICAgICAgIG1fcmVzb3VyY2VJZCA9
IFN0cmluZygpOworICAgIH0KKwogICAgIGRldGFjaEluc3RhbmNlKCk7CiB9CiAKLS0gCjEuNy4w
LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90528</attachid>
            <date>2011-04-21 07:33:27 -0700</date>
            <delta_ts>2011-04-22 04:51:27 -0700</delta_ts>
            <desc>New approach</desc>
            <filename>LeakFixes.diff</filename>
            <type>text/plain</type>
            <size>2540</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NDk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDQtMjEgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTEVBSzogU1ZHRWxlbWVudCBsZWFrcyB3aGVuIGRl
dGFjaGluZyBpdCBpbiBhIHBlbmRpbmcgcmVzb3VyY2Ugc3RhdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MDcyCisKKyAgICAgICAgQWx3YXlzIHJl
bW92ZSB0aGUgU1ZHRWxlbWVudCBmcm9tIHRoZSBwZW5kaW5nIHJlc291cmNlcyBIYXNoU2V0PFJl
ZlB0cjwuLj4gPiBpbiBTVkdEb2N1bWVudEV4dGVuc2lvbnMsCisgICAgICAgIHVwb24gZGVzdHJ1
Y3Rpb24gb3IgcmVtb3ZlZEZyb21Eb2N1bWVudCgpLCBvdGhlcndoaXNlIHdlJ2xsIGxlYWsgdGhl
IGVsZW1lbnQuCisKKyAgICAgICAgVGhpcyBzaG91bGQgZml4IHRoZSBsZWFrcyBzZWVuIG9uIHRo
ZSBib3RzIGFzIHdlbGwsIGJ1ZyA1ODg4OS4KKworICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyUGVuZGluZ1Jlc291cmNlU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisKIDIwMTEtMDQtMjEgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGlyayBTY2h1bHplLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24g
ODQ0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDE0IEBAIFBhc3NSZWZQdHI8U1ZHRWxlbWVudD4gU1ZHRWxlbWVudDo6
Y3JlYXQKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyUGVuZGluZ1Jlc291cmNlU3RhdGUo
U1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zLCBjb25zdCBTdHJpbmcmIGlkKQorewor
ICAgIGlmICghZXh0ZW5zaW9ucy0+aXNQZW5kaW5nUmVzb3VyY2UoaWQpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgZXh0ZW5zaW9ucy0+cmVtb3ZlUGVuZGluZ1Jlc291cmNlKGlkKTsKK30K
KwogU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogewogICAgIGlmICghaGFzUmFyZVNWR0RhdGEo
KSkKQEAgLTgyLDcgKzkwLDEwIEBAIFNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KCkKICAgICAgICAg
ZGVsZXRlIHJhcmVEYXRhOwogICAgICAgICByYXJlRGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIH0K
LSAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEFuaW1hdGlv
bkVsZW1lbnRzRnJvbVRhcmdldCh0aGlzKTsKKworICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyog
ZXh0ZW5zaW9ucyA9IGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKKyAgICBleHRl
bnNpb25zLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQodGhpcyk7CisgICAg
Y2xlYXJQZW5kaW5nUmVzb3VyY2VTdGF0ZShleHRlbnNpb25zLCBnZXRJZEF0dHJpYnV0ZSgpKTsK
IH0KIAogU1ZHRWxlbWVudFJhcmVEYXRhKiBTVkdFbGVtZW50OjpyYXJlU1ZHRGF0YSgpIGNvbnN0
CkBAIC0xMjAsNyArMTMxLDEyIEBAIHZvaWQgU1ZHRWxlbWVudDo6c2V0WG1sYmFzZShjb25zdCBT
dHJpbmcKIAogdm9pZCBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1l
bnRzRnJvbVRhcmdldCh0aGlzKTsKKyAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lv
bnMgPSBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CisgICAgZXh0ZW5zaW9ucy0+
cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KHRoaXMpOworCisgICAgaWYgKG5l
ZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSkKKyAgICAgICAgY2xlYXJQZW5kaW5nUmVzb3Vy
Y2VTdGF0ZShleHRlbnNpb25zLCBnZXRJZEF0dHJpYnV0ZSgpKTsKKwogICAgIFN0eWxlZEVsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90692</attachid>
            <date>2011-04-22 04:51:27 -0700</date>
            <delta_ts>2011-04-27 01:24:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>LeakFixes.diff</filename>
            <type>text/plain</type>
            <size>10805</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NjE2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDQtMjIgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTEVBSzogU1ZHRWxlbWVudCBsZWFrcyB3aGVuIGRl
dGFjaGluZyBpdCBpbiBhIHBlbmRpbmcgcmVzb3VyY2Ugc3RhdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MDcyCisKKyAgICAgICAgVXBvbiBTVkdF
bGVtZW50cyBkZXN0cnVjdGlvbiwgb3Igd2hlbiBpdCBpcyByZW1vdmVkIGZyb20gdGhlIGRvY3Vt
ZW50IGJlIHN1cmUgdG8gcmVtb3ZlIHVzCisgICAgICAgIGZyb20gdGhlIHBlbmRpbmcgcmVzb3Vy
Y2VzIHNldCwgaWYgd2UncmUgcHJlc2VudCB0aGVyZSwgb3RoZXJ3aGlzZSB3ZSdsbCBsZWFrLgor
CisgICAgICAgIEV4YW1wbGU6IDxyZWN0IGZpbGw9InVybCgjZm9vKSIgaWQ9InJlY3QiPgorICAg
ICAgICBXaGVuIHdlIHRyeSB0byByZW5kZXIgdGhlIHJlY3QsIHRoZSBmb28gcGFpbnQgc2VydmVy
IGNhbid0IGJlIGZvdW5kIGFuZCB0aHVzICJmb28iIHdpbGwgYmUKKyAgICAgICAgYWRkZWQgdG8g
dGhlIHBlbmRpbmcgcmVzb3VyY2Ugc2V0LCB3aXRoICJyZWN0IiBhcyBjbGllbnQuIFdoZW4gImZv
byIgYXBwZWFycywgaXQgd291bGQgcmVtb3ZlCisgICAgICAgIGl0c2VsZiBmcm9tIHRoZSBwZW5k
aW5nIHJlc291cmNlIHNldCwgYW5kIGEgcmVmIGNvdW50IHRvIHRoZSAicmVjdCIgd291bGQgYmUg
cmVsZWFzZWQuCisgICAgICAgIElmICJmb28iIG5ldmVyIGFwcGVhcnMsIFNWR0RvY3VtZW50RXh0
ZW5zaW9ucyBzdGlsbCBob2xkcyBhIHJlZiB0byB0aGUgPHJlY3Q+LCB0aHVzIGtlZXBpbmcKKyAg
ICAgICAgaXQgYW5kIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50IGFsaXZlLgorCisgICAgICAgIFRl
c3RzOiBzdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLnN2ZworICAgICAgICAgICAg
ICAgc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMy5zdmcKKyAgICAgICAgICAgICAg
IHN2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLnN2ZworCisgICAgICAgIFRoZXNlIHRl
c3RzIGNvdmVyIHNldmVyYWwgc2NlbmFyaW9zIHdoZXJlIHdlIHVzZWQgdG8gbGVhay4gU2hvdWxk
IGZpeCBzZXZlcmFsIFNWRypFbGVtZW50IGxlYWtzIG9uIHRoZSBib3RzLgorICAgICAgICBJIG1h
bnVhbGx5IHRlc3RlZCByZWxvYWRpbmcgYWJvdmUgdGVzdGNhc2VzIGRvemVucyBvZiB0aW1lcywg
YmVmb3JlIHRoZSBsZWFrIGNvdW50IHdhcyBpbmNyZW1lbnRlZCBieSAyIG5vZGVzIG9uIGV2ZXJ5
IHJlbG9hZCwgdGhhdCdzIGdvbmUgbm93LgorCisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50RXh0
ZW5zaW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFk
ZFBlbmRpbmdSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZVBlbmRpbmdSZXNvdXJjZSk6CisgICAgICAg
ICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorCiAyMDExLTA0
LTIyICBBbm5pZSBTdWxsaXZhbiAgPHN1bGxpdmFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Rv
Y3VtZW50RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDg0NDgyKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3
ICsyMTEsNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0RXJyb3IoCiAgICAg
cmVwb3J0TWVzc2FnZShtX2RvY3VtZW50LCBFcnJvck1lc3NhZ2VMZXZlbCwgIkVycm9yOiAiICsg
bWVzc2FnZSk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVz
b3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxTVkdTdHlsZWRFbGVtZW50
PiBvYmopCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNv
bnN0IEF0b21pY1N0cmluZyYgaWQsIFBhc3NSZWZQdHI8U1ZHRWxlbWVudD4gb2JqKQogewogICAg
IEFTU0VSVChvYmopOwogCkBAIC0yMzYsNyArMjM2LDM0IEBAIGJvb2wgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjppc1BlbmRpbmdSZXMKICAgICByZXR1cm4gbV9wZW5kaW5nUmVzb3VyY2VzLmNvbnRh
aW5zKGlkKTsKIH0KIAotUGFzc093blB0cjxIYXNoU2V0PFJlZlB0cjxTVkdTdHlsZWRFbGVtZW50
PiA+ID4gU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVQZW5kaW5nUmVzb3VyY2UoY29uc3Qg
QXRvbWljU3RyaW5nJiBpZCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVt
ZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAo
bV9wZW5kaW5nUmVzb3VyY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPFNWR0VsZW1lbnQ+IHByb3RlY3RvcihlbGVtZW50KTsKKyAgICBWZWN0b3I8QXRvbWljU3Ry
aW5nPiB0b0JlUmVtb3ZlZDsKKworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5n
RWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOworICAg
IGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVtZW50cyo+OjppdGVyYXRv
ciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IEFTU0VSVChlbGVtZW50cyk7CisgICAgICAgIEFTU0VSVCghZWxlbWVudHMtPmlzRW1wdHkoKSk7
CisKKyAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKKyAgICAgICAgaWYgKGVsZW1l
bnRzLT5pc0VtcHR5KCkpCisgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoaXQtPmZpcnN0
KTsKKyAgICB9CisKKyAgICBpZiAodG9CZVJlbW92ZWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBWZWN0b3I8QXRvbWljU3RyaW5nPjo6aXRlcmF0b3IgZW5kVmVjdG9yID0gdG9C
ZVJlbW92ZWQuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8QXRvbWljU3RyaW5nPjo6aXRlcmF0b3Ig
aXQgPSB0b0JlUmVtb3ZlZC5iZWdpbigpOyBpdCAhPSBlbmRWZWN0b3I7ICsraXQpCisgICAgICAg
IHJlbW92ZVBlbmRpbmdSZXNvdXJjZSgqaXQpOworfQorCitQYXNzT3duUHRyPEhhc2hTZXQ8UmVm
UHRyPFNWR0VsZW1lbnQ+ID4gPiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZVBlbmRpbmdS
ZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKQogewogICAgIEFTU0VSVChtX3BlbmRpbmdS
ZXNvdXJjZXMuY29udGFpbnMoaWQpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Rv
Y3VtZW50RXh0ZW5zaW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdE
b2N1bWVudEV4dGVuc2lvbnMuaAkocmV2aXNpb24gODQ0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICszNSwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOwogY2xhc3MgU1ZHRWxlbWVudDsKLWNsYXNzIFNWR1N0eWxlZEVs
ZW1lbnQ7CiBjbGFzcyBTVkdTTUlMRWxlbWVudDsKIGNsYXNzIFNWR1NWR0VsZW1lbnQ7CiAKIGNs
YXNzIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZH
RG9jdW1lbnRFeHRlbnNpb25zKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxTVkdTdHlsZWRFbGVtZW50PiA+IFNWR1BlbmRpbmdF
bGVtZW50czsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFNWR0VsZW1lbnQ+ID4gU1ZHUGVu
ZGluZ0VsZW1lbnRzOwogICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyhEb2N1bWVudCopOwogICAg
IH5TVkdEb2N1bWVudEV4dGVuc2lvbnMoKTsKICAgICAKQEAgLTc5LDggKzc4LDkgQEAgcHVibGlj
OgogICAgIC8vIFRoaXMgSGFzaE1hcCBjb250YWlucyBhIGxpc3Qgb2YgcGVuZGluZyByZXNvdXJj
ZXMuIFBlbmRpbmcgcmVzb3VyY2VzLCBhcmUgc3VjaAogICAgIC8vIHdoaWNoIGFyZSByZWZlcmVu
Y2VkIGJ5IGFueSBvYmplY3QgaW4gdGhlIFNWRyBkb2N1bWVudCwgYnV0IGRvIE5PVCBleGlzdCB5
ZXQuCiAgICAgLy8gRm9yIGluc3RhbmNlLCBkeW5hbWljYWxseSBidWlsZCBncmFkaWVudHMgLyBw
YXR0ZXJucyAvIGNsaXBwZXJzLi4uCi0gICAgdm9pZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29uc3Qg
QXRvbWljU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxTVkdTdHlsZWRFbGVtZW50Pik7CisgICAgdm9p
ZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxT
VkdFbGVtZW50Pik7CiAgICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJp
bmcmIGlkKSBjb25zdDsKKyAgICB2b2lkIHJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNl
cyhTVkdFbGVtZW50Kik7CiAgICAgUGFzc093blB0cjxTVkdQZW5kaW5nRWxlbWVudHM+IHJlbW92
ZVBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDg0NDgyKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4MiwxMCBAQCBT
VkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIGRlbGV0ZSByYXJlRGF0YTsKICAgICAg
ICAgcmFyZURhdGFNYXAucmVtb3ZlKGl0KTsKICAgICB9Ci0gICAgZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQodGhp
cyk7CisKKyAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBkb2N1bWVudCgp
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CisgICAgZXh0ZW5zaW9ucy0+cmVtb3ZlQWxsQW5pbWF0
aW9uRWxlbWVudHNGcm9tVGFyZ2V0KHRoaXMpOworICAgIGV4dGVuc2lvbnMtPnJlbW92ZUVsZW1l
bnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKIH0KIAogU1ZHRWxlbWVudFJhcmVEYXRhKiBT
VkdFbGVtZW50OjpyYXJlU1ZHRGF0YSgpIGNvbnN0CkBAIC0xMjAsOCArMTIzLDExIEBAIHZvaWQg
U1ZHRWxlbWVudDo6c2V0WG1sYmFzZShjb25zdCBTdHJpbmcKIAogdm9pZCBTVkdFbGVtZW50Ojpy
ZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRhcmdldCh0aGlzKTsKKyAgICBT
VkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBkb2N1bWVudCgpLT5hY2Nlc3NTVkdF
eHRlbnNpb25zKCk7CisgICAgZXh0ZW5zaW9ucy0+cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNG
cm9tVGFyZ2V0KHRoaXMpOwogICAgIFN0eWxlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQo
KTsKKworICAgIGV4dGVuc2lvbnMtPnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0
aGlzKTsKIH0KIAogU1ZHU1ZHRWxlbWVudCogU1ZHRWxlbWVudDo6b3duZXJTVkdFbGVtZW50KCkg
Y29uc3QKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NjE2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDQtMjIgIE5pa29sYXMgWmlt
bWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTEVBSzogU1ZHRWxlbWVudCBsZWFrcyB3aGVuIGRldGFj
aGluZyBpdCBpbiBhIHBlbmRpbmcgcmVzb3VyY2Ugc3RhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MDcyCisKKyAgICAgICAgQWRkIHRlc3RjYXNl
IHRoYXQgdXNlZCB0byBsZWFrLCB0aGUgbGVha3MgYm90IHdpbGwgYXNzdXJlIHRoZXkgd29uJ3Qg
aW4gZnV0dXJlLgorCisgICAgICAgICogc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWst
Mi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcGVuZGluZy1yZXNv
dXJjZS1sZWFrLTIuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BlbmRpbmctcmVz
b3VyY2UtbGVhay0zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9w
ZW5kaW5nLXJlc291cmNlLWxlYWstMy5zdmc6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20v
cGVuZGluZy1yZXNvdXJjZS1sZWFrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3Zn
L2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWsuc3ZnOiBBZGRlZC4KKwogMjAxMS0wNC0yMiAg
Q3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1mYXN0
L3VybC9pZG5hIHRlc3RzIGZhaWwKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGlu
Zy1yZXNvdXJjZS1sZWFrLTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTItZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMi1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBzaG91bGQgbm90
IGxlYWsKKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxl
YWstMi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJl
c291cmNlLWxlYWstMi5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzdmcgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisJCQlsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisJCX0KKworCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworCQkJZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInJlY3QiKS5zZXRBdHRyaWJ1dGUoImZpbGwiLCAgImdyZWVuIik7CisJCQlpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorCQkJCWxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKwkJfSwgMCk7CisgICAgPC9zY3JpcHQ+CisgICAgPHRleHQgeD0iMCIgeT0i
NzAiPlRoaXMgc2hvdWxkIG5vdCBsZWFrPC90ZXh0PgorICAgIDxyZWN0IHdpZHRoPSI1MCIgaGVp
Z2h0PSI1MCIgZmlsbD0idXJsKCNmb28pIiBpZD0icmVjdCIvPgorPC9zdmc+CisKSW5kZXg6IExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1s
ZWFrLTMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3Rv
bS9wZW5kaW5nLXJlc291cmNlLWxlYWstMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMiBAQAorVGhpcyBzaG91bGQgbm90IGxlYWsKKwpJbmRleDogTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMy5zdmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMy5zdmcJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0zLnN2Zwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0iVVRGLTgiPz4KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KKyAg
ICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisJCQlsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisJCX0KKworCQlzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlY3QiKS5zZXRBdHRyaWJ1dGUo
ImZpbGwiLCAgInVybCgjYmFyKSIpOworCQkJaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKwkJCQlsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisJCX0sIDApOworICAg
IDwvc2NyaXB0PgorICAgIDx0ZXh0IHg9IjAiIHk9IjcwIj5UaGlzIHNob3VsZCBub3QgbGVhazwv
dGV4dD4KKyAgICA8cmVjdCB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9InVybCgjZm9vKSIg
aWQ9InJlY3QiLz4KKzwvc3ZnPgorCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRp
bmctcmVzb3VyY2UtbGVhay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
c3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoaXMgc2hvdWxkIG5vdCBsZWFr
CisKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLnN2
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2Ut
bGVhay5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmct
cmVzb3VyY2UtbGVhay5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZyI+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICA8L3NjcmlwdD4KKyAgICA8dGV4dCB4PSIwIiB5PSI3MCI+VGhpcyBzaG91bGQg
bm90IGxlYWs8L3RleHQ+CisgICAgPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiBmaWxsPSJ1
cmwoI2ZvbykiIGlkPSJyZWN0Ii8+Cis8L3N2Zz4KKwo=
</data>
<flag name="review"
          id="83453"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91253</attachid>
            <date>2011-04-27 01:24:19 -0700</date>
            <delta_ts>2011-04-27 01:35:26 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>LeakFixes-v3.diff</filename>
            <type>text/plain</type>
            <size>23152</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MDMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMDQtMjcgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTEVBSzogU1ZHRWxlbWVudCBsZWFrcyB3aGVuIGRl
dGFjaGluZyBpdCBpbiBhIHBlbmRpbmcgcmVzb3VyY2Ugc3RhdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MDcyCisKKyAgICAgICAgVXBvbiBTVkdF
bGVtZW50cyBkZXN0cnVjdGlvbiwgb3Igd2hlbiBpdCBpcyByZW1vdmVkIGZyb20gdGhlIGRvY3Vt
ZW50IGJlIHN1cmUgdG8gcmVtb3ZlIHVzCisgICAgICAgIGZyb20gdGhlIHBlbmRpbmcgcmVzb3Vy
Y2VzIHNldCwgaWYgd2UncmUgcHJlc2VudCB0aGVyZSwgb3RoZXJ3aGlzZSB3ZSdsbCBsZWFrLgor
CisgICAgICAgIEV4YW1wbGU6IDxyZWN0IGZpbGw9InVybCgjZm9vKSIgaWQ9InJlY3QiPgorICAg
ICAgICBXaGVuIHdlIHRyeSB0byByZW5kZXIgdGhlIHJlY3QsIHRoZSBmb28gcGFpbnQgc2VydmVy
IGNhbid0IGJlIGZvdW5kIGFuZCB0aHVzICJmb28iIHdpbGwgYmUKKyAgICAgICAgYWRkZWQgdG8g
dGhlIHBlbmRpbmcgcmVzb3VyY2Ugc2V0LCB3aXRoICJyZWN0IiBhcyBjbGllbnQuIFdoZW4gImZv
byIgYXBwZWFycywgaXQgd291bGQgcmVtb3ZlCisgICAgICAgIGl0c2VsZiBmcm9tIHRoZSBwZW5k
aW5nIHJlc291cmNlIHNldCwgYW5kIGEgcmVmIGNvdW50IHRvIHRoZSAicmVjdCIgd291bGQgYmUg
cmVsZWFzZWQuCisgICAgICAgIElmICJmb28iIG5ldmVyIGFwcGVhcnMsIFNWR0RvY3VtZW50RXh0
ZW5zaW9ucyBzdGlsbCBob2xkcyBhIHJlZiB0byB0aGUgPHJlY3Q+LCB0aHVzIGtlZXBpbmcKKyAg
ICAgICAgaXQgYW5kIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50IGFsaXZlLgorCisgICAgICAgIFRl
c3RzOiBzdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLnN2ZworICAgICAgICAgICAg
ICAgc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMy5zdmcKKyAgICAgICAgICAgICAg
IHN2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLnN2ZworCisgICAgICAgIFRoZXNlIHRl
c3RzIGNvdmVyIHNldmVyYWwgc2NlbmFyaW9zIHdoZXJlIHdlIHVzZWQgdG8gbGVhay4gU2hvdWxk
IGZpeCBzZXZlcmFsIFNWRypFbGVtZW50IGxlYWtzIG9uIHRoZSBib3RzLgorICAgICAgICBJIG1h
bnVhbGx5IHRlc3RlZCByZWxvYWRpbmcgYWJvdmUgdGVzdGNhc2VzIGRvemVucyBvZiB0aW1lcywg
YmVmb3JlIHRoZSBsZWFrIGNvdW50IHdhcyBpbmNyZW1lbnRlZCBieSAyIG5vZGVzIG9uIGV2ZXJ5
IHJlbG9hZCwgdGhhdCdzIGdvbmUgbm93LgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZXJSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdSZXNvdXJjZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVnaXN0ZXJQZW5kaW5n
UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50
RnJvbVBlbmRpbmdSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpyZW1vdmVQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgICog
c3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OlNWR0VsZW1lbnRSYXJlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmlzUGVuZGluZ1Jlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6c2V0SXNQZW5kaW5nUmVz
b3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6On5TVkdTdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6aXNQZW5kaW5nUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6c2V0SXNQZW5kaW5nUmVzb3VyY2UpOgorICAg
ICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHls
ZWRFbGVtZW50OjpuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiBz
dmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpT
VkdVc2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6YnVpbGRQZW5k
aW5nUmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50Lmg6CisKIDIwMTEtMDQt
MjcgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAkocmV2aXNp
b24gODQ5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw4IEBAIHZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnJlZ2lzdGUKICAgICAvLyBVcGRhdGUgY2FjaGVk
IHJlc291cmNlcyBvZiBwZW5kaW5nIGNsaWVudHMuCiAgICAgY29uc3QgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMt
PmVuZCgpOwogICAgIGZvciAoU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVu
dHM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2xpZW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIEFTU0VSVCgoKml0KS0+aXNQZW5kaW5nUmVzb3VyY2UoKSk7CisgICAgICAg
ICgqaXQpLT5zZXRJc1BlbmRpbmdSZXNvdXJjZShmYWxzZSk7CiAgICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSAoKml0KS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikK
ICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZXNvdXJjZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAkocmV2aXNpb24gODQ5NDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw5
ICsxNzEsNyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyCiBzdGF0
aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoU1ZHRG9jdW1lbnRFeHRlbnNp
b25zKiBleHRlbnNpb25zLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdFbGVtZW50KiBlbGVt
ZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBpZiAoIWVsZW1lbnQtPmlzU3R5bGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQorICAgIEFTU0VSVChlbGVtZW50LT5pc1N0eWxlZCgpKTsK
ICAgICBleHRlbnNpb25zLT5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHN0YXRpY19jYXN0PFNWR1N0
eWxlZEVsZW1lbnQqPihlbGVtZW50KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiA4NDk0OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTEsMjEgKzIxMSwyMyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0RXJyb3Io
CiAgICAgcmVwb3J0TWVzc2FnZShtX2RvY3VtZW50LCBFcnJvck1lc3NhZ2VMZXZlbCwgIkVycm9y
OiAiICsgbWVzc2FnZSk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5k
aW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxTVkdTdHlsZWRF
bGVtZW50PiBvYmopCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291
cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiB7
Ci0gICAgQVNTRVJUKG9iaik7CisgICAgQVNTRVJUKGVsZW1lbnQpOwogCiAgICAgaWYgKGlkLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcGVuZGluZ1Jlc291cmNlcy5j
b250YWlucyhpZCkpCi0gICAgICAgIG1fcGVuZGluZ1Jlc291cmNlcy5nZXQoaWQpLT5hZGQob2Jq
KTsKKyAgICAgICAgbV9wZW5kaW5nUmVzb3VyY2VzLmdldChpZCktPmFkZChlbGVtZW50KTsKICAg
ICBlbHNlIHsKICAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBzZXQgPSBuZXcgU1ZHUGVuZGlu
Z0VsZW1lbnRzOwotICAgICAgICBzZXQtPmFkZChvYmopOworICAgICAgICBzZXQtPmFkZChlbGVt
ZW50KTsKIAogICAgICAgICBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCBzZXQpOwogICAgIH0K
KworICAgIGVsZW1lbnQtPnNldElzUGVuZGluZ1Jlc291cmNlKHRydWUpOwogfQogCiBib29sIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6aXNQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5n
JiBpZCkgY29uc3QKQEAgLTIzNiw3ICsyMzgsMzYgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OmlzUGVuZGluZ1JlcwogICAgIHJldHVybiBtX3BlbmRpbmdSZXNvdXJjZXMuY29udGFpbnMo
aWQpOwogfQogCi1QYXNzT3duUHRyPEhhc2hTZXQ8UmVmUHRyPFNWR1N0eWxlZEVsZW1lbnQ+ID4g
PiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZVBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9t
aWNTdHJpbmcmIGlkKQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRG
cm9tUGVuZGluZ1Jlc291cmNlcyhTVkdTdHlsZWRFbGVtZW50KiBlbGVtZW50KQoreworICAgIEFT
U0VSVChlbGVtZW50KTsKKworICAgIGlmIChtX3BlbmRpbmdSZXNvdXJjZXMuaXNFbXB0eSgpIHx8
ICFlbGVtZW50LT5pc1BlbmRpbmdSZXNvdXJjZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBl
bGVtZW50LT5zZXRJc1BlbmRpbmdSZXNvdXJjZShmYWxzZSk7CisKKyAgICBWZWN0b3I8QXRvbWlj
U3RyaW5nPiB0b0JlUmVtb3ZlZDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGlu
Z0VsZW1lbnRzKj46Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsKKyAg
ICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0
b3IgaXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIFNWR1BlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAg
ICBBU1NFUlQoZWxlbWVudHMpOworICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkp
OworCisgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxlbWVudCk7CisgICAgICAgIGlmIChlbGVt
ZW50cy0+aXNFbXB0eSgpKQorICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5maXJz
dCk7CisgICAgfQorCisgICAgaWYgKHRvQmVSZW1vdmVkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVmVjdG9yPEF0b21pY1N0cmluZz46Oml0ZXJhdG9yIGVuZFZlY3RvciA9IHRv
QmVSZW1vdmVkLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEF0b21pY1N0cmluZz46Oml0ZXJhdG9y
IGl0ID0gdG9CZVJlbW92ZWQuYmVnaW4oKTsgaXQgIT0gZW5kVmVjdG9yOyArK2l0KQorICAgICAg
ICBtX3BlbmRpbmdSZXNvdXJjZXMucmVtb3ZlKCppdCk7Cit9CisKK1Bhc3NPd25QdHI8U1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM+IFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6cmVtb3ZlUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpCiB7CiAgICAg
QVNTRVJUKG1fcGVuZGluZ1Jlc291cmNlcy5jb250YWlucyhpZCkpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiA4NDk0OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBTVkdTVkdFbGVtZW50OwogY2xhc3MgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdEb2N1bWVudEV4dGVu
c2lvbnMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEhh
c2hTZXQ8UmVmUHRyPFNWR1N0eWxlZEVsZW1lbnQ+ID4gU1ZHUGVuZGluZ0VsZW1lbnRzOworICAg
IHR5cGVkZWYgSGFzaFNldDxTVkdTdHlsZWRFbGVtZW50Kj4gU1ZHUGVuZGluZ0VsZW1lbnRzOwog
ICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyhEb2N1bWVudCopOwogICAgIH5TVkdEb2N1bWVudEV4
dGVuc2lvbnMoKTsKICAgICAKQEAgLTc5LDggKzc5LDkgQEAgcHVibGljOgogICAgIC8vIFRoaXMg
SGFzaE1hcCBjb250YWlucyBhIGxpc3Qgb2YgcGVuZGluZyByZXNvdXJjZXMuIFBlbmRpbmcgcmVz
b3VyY2VzLCBhcmUgc3VjaAogICAgIC8vIHdoaWNoIGFyZSByZWZlcmVuY2VkIGJ5IGFueSBvYmpl
Y3QgaW4gdGhlIFNWRyBkb2N1bWVudCwgYnV0IGRvIE5PVCBleGlzdCB5ZXQuCiAgICAgLy8gRm9y
IGluc3RhbmNlLCBkeW5hbWljYWxseSBidWlsZCBncmFkaWVudHMgLyBwYXR0ZXJucyAvIGNsaXBw
ZXJzLi4uCi0gICAgdm9pZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBp
ZCwgUGFzc1JlZlB0cjxTVkdTdHlsZWRFbGVtZW50Pik7CisgICAgdm9pZCBhZGRQZW5kaW5nUmVz
b3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgU1ZHU3R5bGVkRWxlbWVudCopOwogICAgIGJv
b2wgaXNQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7CisgICAg
dm9pZCByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoU1ZHU3R5bGVkRWxlbWVudCop
OwogICAgIFBhc3NPd25QdHI8U1ZHUGVuZGluZ0VsZW1lbnRzPiByZW1vdmVQZW5kaW5nUmVzb3Vy
Y2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCk7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiA4NDk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDI3ICszMzgsNiBAQCBib29sIFNWR0VsZW1l
bnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IFNWR0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKLXsKLSAgICBTdHlsZWRFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotCi0gICAgaWYgKCFuZWVkc1BlbmRpbmdSZXNvdXJj
ZUhhbmRsaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9u
cyogZXh0ZW5zaW9ucyA9IGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKLSAgICBT
dHJpbmcgcmVzb3VyY2VJZCA9IGdldElkQXR0cmlidXRlKCk7Ci0gICAgaWYgKCFleHRlbnNpb25z
LT5pc1BlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUlkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIE93blB0cjxTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50cz4gY2xp
ZW50cyhleHRlbnNpb25zLT5yZW1vdmVQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VJZCkpOwotICAg
IGlmIChjbGllbnRzLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVuZGluZ0VsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBjbGllbnRzLT5lbmQoKTsKLSAgICBmb3IgKFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZH
UGVuZGluZ0VsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBpdCA9IGNsaWVudHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7Ci19
Ci0KIHZvaWQgU1ZHRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJv
b2wgcHJlc2VydmVEZWNscykKIHsKICAgICBBU1NFUlQoYXR0cik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmgJKHJldmlzaW9uIDg0OTQ4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw2IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIGlu
c2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQo
QXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOwogICAgIHZpcnR1YWwgYm9v
bCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdDsKICAgICAKQEAgLTEzMSw5
ICsxMzAsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzU3VwcG9ydGVkKFN0cmlu
Z0ltcGwqIGZlYXR1cmUsIFN0cmluZ0ltcGwqIHZlcnNpb24pIGNvbnN0OwogCi0gICAgdmlydHVh
bCBib29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgeyB9Ci0KICAgICB2
b2lkIG1hcEluc3RhbmNlVG9FbGVtZW50KFNWR0VsZW1lbnRJbnN0YW5jZSopOwogICAgIHZvaWQg
cmVtb3ZlSW5zdGFuY2VNYXBwaW5nKFNWR0VsZW1lbnRJbnN0YW5jZSopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiA4NDk0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9jdXJzb3JFbGVtZW50KDApCiAgICAg
ICAgICwgbV9jdXJzb3JJbWFnZVZhbHVlKDApCiAgICAgICAgICwgbV9pbnN0YW5jZXNVcGRhdGVz
QmxvY2tlZChmYWxzZSkKKyAgICAgICAgLCBtX2lzUGVuZGluZ1Jlc291cmNlKGZhbHNlKQogICAg
IHsKICAgICB9CiAKQEAgLTYwLDYgKzYxLDkgQEAgcHVibGljOgogICAgIGJvb2wgaW5zdGFuY2VV
cGRhdGVzQmxvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2VzVXBkYXRlc0Jsb2NrZWQ7
IH0KICAgICB2b2lkIHNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoYm9vbCB2YWx1ZSkgeyBtX2lu
c3RhbmNlc1VwZGF0ZXNCbG9ja2VkID0gdmFsdWU7IH0KIAorICAgIGJvb2wgaXNQZW5kaW5nUmVz
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2lzUGVuZGluZ1Jlc291cmNlOyB9CisgICAgdm9pZCBz
ZXRJc1BlbmRpbmdSZXNvdXJjZShib29sIHZhbHVlKSB7IG1faXNQZW5kaW5nUmVzb3VyY2UgPSB2
YWx1ZTsgfQorCiAgICAgU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fY3Vyc29yRWxlbWVudDsgfQogICAgIHZvaWQgc2V0Q3Vyc29yRWxlbWVudChTVkdD
dXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50KSB7IG1fY3Vyc29yRWxlbWVudCA9IGN1cnNvckVs
ZW1lbnQ7IH0KIApAQCAtNzEsNiArNzUsNyBAQCBwcml2YXRlOgogICAgIFNWR0N1cnNvckVsZW1l
bnQqIG1fY3Vyc29yRWxlbWVudDsKICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBtX2N1cnNvcklt
YWdlVmFsdWU7CiAgICAgYm9vbCBtX2luc3RhbmNlc1VwZGF0ZXNCbG9ja2VkIDogMTsKKyAgICBi
b29sIG1faXNQZW5kaW5nUmVzb3VyY2UgOiAxOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gODQ5NDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2
LDEwIEBAIFNWR1N0eWxlZEVsZW1lbnQ6OlNWR1N0eWxlZEVsZW1lbnQoY29uc3QKIAogU1ZHU3R5
bGVkRWxlbWVudDo6flNWR1N0eWxlZEVsZW1lbnQoKQogeworICAgIGlmIChuZWVkc1BlbmRpbmdS
ZXNvdXJjZUhhbmRsaW5nKCkgJiYgaXNQZW5kaW5nUmVzb3VyY2UoKSAmJiBkb2N1bWVudCgpKQor
ICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUVsZW1lbnRG
cm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKKworICAgIEFTU0VSVCghaXNQZW5kaW5nUmVzb3Vy
Y2UoKSk7CiB9CiAKIFN0cmluZyBTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSgpIGNvbnN0CkBAIC0z
NTksMTIgKzM2MywzNyBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
CiB7CiAgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB1cGRhdGVS
ZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbigpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
dGhpcy0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIW5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmco
KSB8fCAhZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFNWR0RvY3VtZW50RXh0ZW5z
aW9ucyogZXh0ZW5zaW9ucyA9IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CisgICAg
U3RyaW5nIHJlc291cmNlSWQgPSBnZXRJZEF0dHJpYnV0ZSgpOworICAgIGlmICghZXh0ZW5zaW9u
cy0+aXNQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VJZCkpCisgICAgICAgIHJldHVybjsKKworICAg
IE93blB0cjxTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50cz4gY2xpZW50
cyhleHRlbnNpb25zLT5yZW1vdmVQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VJZCkpOworICAgIEFT
U0VSVCghY2xpZW50cy0+aXNFbXB0eSgpKTsKKworICAgIGNvbnN0IFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6U1ZHUGVuZGluZ0VsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzLT5l
bmQoKTsKKyAgICBmb3IgKFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVuZGluZ0VsZW1lbnRz
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNsaWVudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBBU1NFUlQoKCppdCktPmlzUGVuZGluZ1Jlc291cmNlKCkpOworICAgICAgICAo
Kml0KS0+YnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKKyAgICAgICAgKCppdCktPnNldElzUGVuZGlu
Z1Jlc291cmNlKGZhbHNlKTsKKyAgICB9CiB9CiAKIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6cmVt
b3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAgICAgdXBkYXRlUmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRp
b24oZmFsc2UsIHRoaXMpOwogICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsK
KworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CisgICAgaWYgKCFu
ZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgfHwgIWRvY3VtZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBkb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVFbGVtZW50
RnJvbVBlbmRpbmdSZXNvdXJjZXModGhpcyk7CiB9CiAKIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6
Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2Us
IE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQpAQCAtNDE5LDYgKzQ0OCwx
NiBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnNldEluc3RhbmNlVXBkYXRlCiAgICAgICAgIHJh
cmVTVkdEYXRhKCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQodmFsdWUpOwogfQogCitib29s
IFNWR1N0eWxlZEVsZW1lbnQ6OmlzUGVuZGluZ1Jlc291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGFzUmFyZVNWR0RhdGEoKSAmJiByYXJlU1ZHRGF0YSgpLT5pc1BlbmRpbmdSZXNvdXJjZSgp
OworfQorCit2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnNldElzUGVuZGluZ1Jlc291cmNlKGJvb2wg
dmFsdWUpCit7CisgICAgZW5zdXJlUmFyZVNWR0RhdGEoKS0+c2V0SXNQZW5kaW5nUmVzb3VyY2Uo
dmFsdWUpOworfQorCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVkRWxlbWVudDo6bG9jYWxDb29y
ZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3QKIHsKICAg
ICAvLyBUbyBiZSBvdmVycmlkZW4gYnkgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC9TVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCAob3IgYXMgc3BlY2lhbCBjYXNlIFNWR1RleHRFbGVtZW50
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiA4NDk0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDEyICs1MiwxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpbnN0YW5jZVVwZGF0ZXNC
bG9ja2VkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGJvb2wp
OwogCisgICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZSgpIGNvbnN0OworICAgIHZvaWQgc2V0SXNQ
ZW5kaW5nUmVzb3VyY2UoYm9vbCk7CisKICAgICBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgYW5pbWF0
ZWRQcm9wZXJ0eVR5cGVGb3JDU1NQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
c3RhdGljIGJvb2wgaXNBbmltYXRhYmxlQ1NTUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogCiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFu
c2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6c3R5bGUoKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCiBwcm90ZWN0ZWQ6IAogICAgIFNWR1N0eWxlZEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC04MSw2ICs4NSw3IEBAIHByb3RlY3Rl
ZDogCiAgICAgdm9pZCB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNJbmZvcm1hdGlvbihib29sIGhhc1Jl
bGF0aXZlTGVuZ3RocywgU1ZHU3R5bGVkRWxlbWVudCopOwogCiAgICAgdmlydHVhbCBib29sIHNl
bGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpIHsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBpc1N0eWxlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDg0OTQ4KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw2IEBA
IGlubGluZSBTVkdVc2VFbGVtZW50OjpTVkdVc2VFbGVtZW50KGNvbnMKICAgICAsIG1fd2lkdGgo
TGVuZ3RoTW9kZVdpZHRoKQogICAgICwgbV9oZWlnaHQoTGVuZ3RoTW9kZUhlaWdodCkKICAgICAs
IG1fdXBkYXRlc0Jsb2NrZWQoZmFsc2UpCi0gICAgLCBtX2lzUGVuZGluZ1Jlc291cmNlKGZhbHNl
KQogICAgICwgbV9uZWVkc1NoYWRvd1RyZWVSZWNyZWF0aW9uKGZhbHNlKQogewogfQpAQCAtMTM5
LDcgKzEzOCw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQKICAg
ICAvLyBUaGlzIGZ1bmN0aW9ucyBleGlzdHMgdG8gYXNzdXJlIGFzc3VtcHRpb25zIG1hZGUgaW4g
dGhlIGNvZGUgcmVnYXJkaW5nIFNWR0VsZW1lbnRJbnN0YW5jZSBjcmVhdGlvbi9kZXN0cnVjdGlv
biBhcmUgc2F0aXNmaWVkLgogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpOwogICAgIEFTU0VSVCghbV90YXJnZXRFbGVtZW50SW5zdGFuY2Ug
fHwgIWlzV2VsbEZvcm1lZERvY3VtZW50KGRvY3VtZW50KCkpKTsKLSAgICBBU1NFUlQoIW1faXNQ
ZW5kaW5nUmVzb3VyY2UgfHwgIWlzV2VsbEZvcm1lZERvY3VtZW50KGRvY3VtZW50KCkpKTsKKyAg
ICBBU1NFUlQoIWlzUGVuZGluZ1Jlc291cmNlKCkgfHwgIWlzV2VsbEZvcm1lZERvY3VtZW50KGRv
Y3VtZW50KCkpKTsKIH0KIAogdm9pZCBTVkdVc2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50
KCkKQEAgLTE2NiwxMCArMTY1LDE4IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZCgKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKLSAgICAgICAgaWYgKG1faXNQZW5kaW5nUmVzb3Vy
Y2UpIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVt
b3ZlUGVuZGluZ1Jlc291cmNlKG1fcmVzb3VyY2VJZCk7CisgICAgICAgIGlmIChpc1BlbmRpbmdS
ZXNvdXJjZSgpKSB7CisgICAgICAgICAgICBPd25QdHI8U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpT
VkdQZW5kaW5nRWxlbWVudHM+IGNsaWVudHMoZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLT5yZW1vdmVQZW5kaW5nUmVzb3VyY2UobV9yZXNvdXJjZUlkKSk7CisgICAgICAgICAgICBB
U1NFUlQoIWNsaWVudHMtPmlzRW1wdHkoKSk7CisKKyAgICAgICAgICAgIGNvbnN0IFNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6U1ZHUGVuZGluZ0VsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
bGllbnRzLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpT
VkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2xpZW50cy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCgqaXQpLT5pc1BlbmRp
bmdSZXNvdXJjZSgpKTsKKyAgICAgICAgICAgICAgICAoKml0KS0+c2V0SXNQZW5kaW5nUmVzb3Vy
Y2UoZmFsc2UpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBtX3Jlc291cmNlSWQgPSBT
dHJpbmcoKTsKLSAgICAgICAgICAgIG1faXNQZW5kaW5nUmVzb3VyY2UgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHNldElzUGVuZGluZ1Jlc291cmNlKGZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAg
IGludmFsaWRhdGVTaGFkb3dUcmVlKCk7CkBAIC00NzAsMTggKzQ3NywxOSBAQCB2b2lkIFNWR1Vz
ZUVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlCiAgICAgQVNTRVJUKCFtX3RhcmdldEVsZW1l
bnRJbnN0YW5jZSk7CiAKICAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHsKLSAgICAgICAgaWYgKG1f
aXNQZW5kaW5nUmVzb3VyY2UgfHwgaWQuaXNFbXB0eSgpKQorICAgICAgICBpZiAoaXNQZW5kaW5n
UmVzb3VyY2UoKSB8fCBpZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgbV9pc1BlbmRpbmdSZXNvdXJjZSA9IHRydWU7CiAgICAgICAgIG1fcmVzb3VyY2VJZCA9IGlk
OworICAgICAgICBBU1NFUlQoIWlzUGVuZGluZ1Jlc291cmNlKCkpOwogICAgICAgICBkb2N1bWVu
dCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7
CisgICAgICAgIEFTU0VSVChpc1BlbmRpbmdSZXNvdXJjZSgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX2lzUGVuZGluZ1Jlc291cmNlKSB7CisKKyAgICBpZiAoaXNQZW5k
aW5nUmVzb3VyY2UoKSkgewogICAgICAgICBBU1NFUlQoIW1fdGFyZ2V0RWxlbWVudEluc3RhbmNl
KTsKLSAgICAgICAgbV9pc1BlbmRpbmdSZXNvdXJjZSA9IGZhbHNlOyAgICAKICAgICAgICAgbV9y
ZXNvdXJjZUlkID0gU3RyaW5nKCk7CiAgICAgICAgIGludmFsaWRhdGVTaGFkb3dUcmVlKCk7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCShyZXZpc2lvbiA4NDk0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDcgKzc3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFVwZGF0ZXNCbG9ja2VkKGJvb2wg
YmxvY2tlZCkgeyBtX3VwZGF0ZXNCbG9ja2VkID0gYmxvY2tlZDsgfQogCiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOwotICAgIGJvb2wgaXNQZW5kaW5n
UmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2lzUGVuZGluZ1Jlc291cmNlOyB9CiAgICAgdm9p
ZCBidWlsZFNoYWRvd0FuZEluc3RhbmNlVHJlZShTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQqKTsK
ICAgICB2b2lkIGRldGFjaEluc3RhbmNlKCk7CiAKQEAgLTExOCw3ICsxMTcsNiBAQCBwcml2YXRl
OgogICAgIERFQ0xBUkVfQU5JTUFURURfQk9PTEVBTihFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
LCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKQogCiAgICAgYm9vbCBtX3VwZGF0ZXNCbG9ja2Vk
OwotICAgIGJvb2wgbV9pc1BlbmRpbmdSZXNvdXJjZTsKICAgICBib29sIG1fbmVlZHNTaGFkb3dU
cmVlUmVjcmVhdGlvbjsKICAgICBTdHJpbmcgbV9yZXNvdXJjZUlkOwogICAgIFJlZlB0cjxTVkdF
bGVtZW50SW5zdGFuY2U+IG1fdGFyZ2V0RWxlbWVudEluc3RhbmNlOwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gODUwMzMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOSBAQAorMjAxMS0wNC0yNyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5A
cmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBMRUFLOiBTVkdFbGVtZW50IGxlYWtzIHdoZW4gZGV0YWNoaW5nIGl0IGluIGEgcGVuZGluZyBy
ZXNvdXJjZSBzdGF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTkwNzIKKworICAgICAgICBBZGQgdGVzdGNhc2UgdGhhdCB1c2VkIHRvIGxlYWssIHRo
ZSBsZWFrcyBib3Qgd2lsbCBhc3N1cmUgdGhleSB3b24ndCBpbiBmdXR1cmUuCisKKyAgICAgICAg
KiBzdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMi5zdmc6IEFkZGVk
LgorICAgICAgICAqIHN2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0z
LnN2ZzogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWst
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BlbmRpbmctcmVzb3Vy
Y2UtbGVhay5zdmc6IEFkZGVkLgorCiAyMDExLTA0LTI3ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9i
aW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBTa2lwIGFub3RoZXIgdGVzdCBvbiBHVEsrIGJl
Y2F1c2Ugd2UgYXJlIHN0aWxsIG1pc3NpbmcgZnJhbWUgbG9hZGVyIGRlbGVnYXRlIG91dHB1dApJ
bmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMi1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJl
c291cmNlLWxlYWstMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9z
dmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyIEBACitUaGlzIHNob3VsZCBub3QgbGVhaworCkluZGV4OiBMYXlvdXRU
ZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLnN2Zwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLnN2ZwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFr
LTIuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJVVEYtOCI/PgorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwkJ
CWxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKwkJfQorCisJCXNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVjdCIpLnNldEF0
dHJpYnV0ZSgiZmlsbCIsICAiZ3JlZW4iKTsKKwkJCWlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisJCQkJbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworCQl9LCAwKTsK
KyAgICA8L3NjcmlwdD4KKyAgICA8dGV4dCB4PSIwIiB5PSI3MCI+VGhpcyBzaG91bGQgbm90IGxl
YWs8L3RleHQ+CisgICAgPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiBmaWxsPSJ1cmwoI2Zv
bykiIGlkPSJyZWN0Ii8+Cis8L3N2Zz4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9w
ZW5kaW5nLXJlc291cmNlLWxlYWstMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVh
ay0zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitUaGlzIHNob3Vs
ZCBub3QgbGVhaworCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3Vy
Y2UtbGVhay0zLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRp
bmctcmVzb3VyY2UtbGVhay0zLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9j
dXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTMuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHN2ZyB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwkJCWxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKwkJfQorCisJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisJCQlkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicmVjdCIpLnNldEF0dHJpYnV0ZSgiZmlsbCIsICAidXJsKCNiYXIpIik7
CisJCQlpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorCQkJCWxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKKwkJfSwgMCk7CisgICAgPC9zY3JpcHQ+CisgICAgPHRleHQg
eD0iMCIgeT0iNzAiPlRoaXMgc2hvdWxkIG5vdCBsZWFrPC90ZXh0PgorICAgIDxyZWN0IHdpZHRo
PSI1MCIgaGVpZ2h0PSI1MCIgZmlsbD0idXJsKCNmb28pIiBpZD0icmVjdCIvPgorPC9zdmc+CisK
SW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVz
b3VyY2UtbGVhay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMiBAQAorVGhpcyBzaG91bGQgbm90IGxlYWsKKwpJbmRleDogTGF5b3V0VGVzdHMv
c3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWsuc3ZnCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLnN2ZwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLnN2ZwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
VVRGLTgiPz4KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KKyAgICA8
c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIDwvc2NyaXB0Pgor
ICAgIDx0ZXh0IHg9IjAiIHk9IjcwIj5UaGlzIHNob3VsZCBub3QgbGVhazwvdGV4dD4KKyAgICA8
cmVjdCB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9InVybCgjZm9vKSIgaWQ9InJlY3QiLz4K
Kzwvc3ZnPgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91254</attachid>
            <date>2011-04-27 01:35:26 -0700</date>
            <delta_ts>2011-05-01 06:24:59 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>LeakFixes-v4.diff</filename>
            <type>text/plain</type>
            <size>23337</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MDMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTEtMDQtMjcgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTEVBSzogU1ZHRWxlbWVudCBsZWFrcyB3aGVuIGRl
dGFjaGluZyBpdCBpbiBhIHBlbmRpbmcgcmVzb3VyY2Ugc3RhdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MDcyCisKKyAgICAgICAgTWFrZSB0aGUg
cGVuZGluZyByZXNvdXJjZXMgc2V0IG5vbi1yZWZjb3VudGVkIGFnYWluLiBXZSBtYWRlIGl0IHJl
ZmNvdW50ZWQgYSB3aGlsZSBhZ28KKyAgICAgICAgdG8gZml4IGEgc2VjdXJpdHkgYnVnLCBhcyB3
ZSBoYWQgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gdGhlIHNldCBpbiBTVkdEb2N1bWVudEV4dGVuc2lv
bnMuCisgICAgICAgIEZpeCB0aGUgdW5kZXJseWluZyBwcm9ibGVtLCBieSByZW1vdmluZyBhbGwg
cGVuZGluZyByZXNvdXJjZXMgcmVmZXJlbmNpbmcgdG8gYSBwYXJ0aWN1bGFyCisgICAgICAgIFNW
R0VsZW1lbnQsIHVwb24gaXRzIGRlc3RydWN0aW9uIG9yIHVwb24gcmVtb3ZpbmcgaXQgZnJvbSB0
aGUgZG9jdW1lbnQuCisKKyAgICAgICAgRXhhbXBsZTogPHJlY3QgZmlsbD0idXJsKCNmb28pIiBp
ZD0icmVjdCI+CisgICAgICAgIFdoZW4gd2UgdHJ5IHRvIHJlbmRlciB0aGUgcmVjdCwgdGhlIGZv
byBwYWludCBzZXJ2ZXIgY2FuJ3QgYmUgZm91bmQgYW5kIHRodXMgImZvbyIgd2lsbCBiZQorICAg
ICAgICBhZGRlZCB0byB0aGUgcGVuZGluZyByZXNvdXJjZSBzZXQsIHdpdGggInJlY3QiIGFzIGNs
aWVudC4gV2hlbiAiZm9vIiBhcHBlYXJzLCBpdCB3b3VsZCByZW1vdmUKKyAgICAgICAgaXRzZWxm
IGZyb20gdGhlIHBlbmRpbmcgcmVzb3VyY2Ugc2V0LCBhbmQgYSByZWYgY291bnQgdG8gdGhlICJy
ZWN0IiB3b3VsZCBiZSByZWxlYXNlZC4KKyAgICAgICAgSWYgImZvbyIgbmV2ZXIgYXBwZWFycywg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zIHN0aWxsIGhvbGRzIGEgcmVmIHRvIHRoZSA8cmVjdD4sIHRo
dXMga2VlcGluZworICAgICAgICBpdCBhbmQgdGhlIGFzc29jaWF0ZWQgZG9jdW1lbnQgYWxpdmUu
CisKKyAgICAgICAgVGVzdHM6IHN2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTIuc3Zn
CisgICAgICAgICAgICAgICBzdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0zLnN2Zwor
ICAgICAgICAgICAgICAgc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWsuc3ZnCisKKyAg
ICAgICAgVGhlc2UgdGVzdHMgY292ZXIgc2V2ZXJhbCBzY2VuYXJpb3Mgd2hlcmUgd2UgdXNlZCB0
byBsZWFrLiBTaG91bGQgZml4IHNldmVyYWwgU1ZHKkVsZW1lbnQgbGVha3Mgb24gdGhlIGJvdHMu
CisgICAgICAgIEkgbWFudWFsbHkgdGVzdGVkIHJlbG9hZGluZyBhYm92ZSB0ZXN0Y2FzZXMgZG96
ZW5zIG9mIHRpbWVzLCBiZWZvcmUgdGhlIGxlYWsgY291bnQgd2FzIGluY3JlbWVudGVkIGJ5IDIg
bm9kZXMgb24gZXZlcnkgcmVsb2FkLCB0aGF0J3MgZ29uZSBub3cuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZWdpc3RlclBlbmRpbmdSZXNvdXJjZSk6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5z
aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFBl
bmRpbmdSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZVBlbmRpbmdSZXNvdXJjZSk6CisgICAgICAgICog
c3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6U1ZHRWxl
bWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6aXNQ
ZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVEYXRhOjpz
ZXRJc1BlbmRpbmdSZXNvdXJjZSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6flNWR1N0eWxlZEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojppc1BlbmRpbmdSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50OjpzZXRJc1BlbmRpbmdS
ZXNvdXJjZSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6Om5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2Up
OgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OlNWR1VzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVt
ZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQu
aDoKKwogMjAxMS0wNC0yNyAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuY3BwCShyZXZpc2lvbiA4NDk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiAr
MTY3LDggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZQogICAgIC8v
IFVwZGF0ZSBjYWNoZWQgcmVzb3VyY2VzIG9mIHBlbmRpbmcgY2xpZW50cy4KICAgICBjb25zdCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50czo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gY2xpZW50cy0+ZW5kKCk7CiAgICAgZm9yIChTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNW
R1BlbmRpbmdFbGVtZW50czo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjbGllbnRzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQVNTRVJUKCgqaXQpLT5pc1BlbmRpbmdSZXNvdXJj
ZSgpKTsKKyAgICAgICAgKCppdCktPnNldElzUGVuZGluZ1Jlc291cmNlKGZhbHNlKTsKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9ICgqaXQpLT5yZW5kZXJlcigpOwogICAgICAgICBp
ZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCShyZXZpc2lvbiA4NDk0OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTcxLDkgKzE3MSw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShTVkdE
b2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNW
R0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIGlmICghZWxl
bWVudC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgQVNTRVJUKGVsZW1lbnQt
PmlzU3R5bGVkKCkpOwogICAgIGV4dGVuc2lvbnMtPmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDg0OTQ4
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMSwyMSArMjExLDIzIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpyZXBvcnRFcnJvcigKICAgICByZXBvcnRNZXNzYWdlKG1fZG9jdW1lbnQsIEVycm9yTWVzc2Fn
ZUxldmVsLCAiRXJyb3I6ICIgKyBtZXNzYWdlKTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBQYXNzUmVm
UHRyPFNWR1N0eWxlZEVsZW1lbnQ+IG9iaikKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjph
ZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgU1ZHU3R5bGVkRWxlbWVu
dCogZWxlbWVudCkKIHsKLSAgICBBU1NFUlQob2JqKTsKKyAgICBBU1NFUlQoZWxlbWVudCk7CiAK
ICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wZW5k
aW5nUmVzb3VyY2VzLmNvbnRhaW5zKGlkKSkKLSAgICAgICAgbV9wZW5kaW5nUmVzb3VyY2VzLmdl
dChpZCktPmFkZChvYmopOworICAgICAgICBtX3BlbmRpbmdSZXNvdXJjZXMuZ2V0KGlkKS0+YWRk
KGVsZW1lbnQpOwogICAgIGVsc2UgewogICAgICAgICBTVkdQZW5kaW5nRWxlbWVudHMqIHNldCA9
IG5ldyBTVkdQZW5kaW5nRWxlbWVudHM7Ci0gICAgICAgIHNldC0+YWRkKG9iaik7CisgICAgICAg
IHNldC0+YWRkKGVsZW1lbnQpOwogCiAgICAgICAgIG1fcGVuZGluZ1Jlc291cmNlcy5hZGQoaWQs
IHNldCk7CiAgICAgfQorCisgICAgZWxlbWVudC0+c2V0SXNQZW5kaW5nUmVzb3VyY2UodHJ1ZSk7
CiB9CiAKIGJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc1BlbmRpbmdSZXNvdXJjZShjb25z
dCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdApAQCAtMjM2LDcgKzIzOCwzNiBAQCBib29sIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6aXNQZW5kaW5nUmVzCiAgICAgcmV0dXJuIG1fcGVuZGluZ1Jlc291
cmNlcy5jb250YWlucyhpZCk7CiB9CiAKLVBhc3NPd25QdHI8SGFzaFNldDxSZWZQdHI8U1ZHU3R5
bGVkRWxlbWVudD4gPiA+IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlUGVuZGluZ1Jlc291
cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1l
bnQpCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOworCisgICAgaWYgKG1fcGVuZGluZ1Jlc291cmNl
cy5pc0VtcHR5KCkgfHwgIWVsZW1lbnQtPmlzUGVuZGluZ1Jlc291cmNlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGVsZW1lbnQtPnNldElzUGVuZGluZ1Jlc291cmNlKGZhbHNlKTsKKworICAg
IFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOworICAgIEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nUmVzb3Vy
Y2VzLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNWR1BlbmRpbmdFbGVt
ZW50cyo+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgU1ZHUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CisgICAgICAgIEFTU0VSVCghZWxlbWVu
dHMtPmlzRW1wdHkoKSk7CisKKyAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKKyAg
ICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCisgICAgICAgICAgICB0b0JlUmVtb3ZlZC5h
cHBlbmQoaXQtPmZpcnN0KTsKKyAgICB9CisKKyAgICBpZiAodG9CZVJlbW92ZWQuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8QXRvbWljU3RyaW5nPjo6aXRlcmF0b3Ig
ZW5kVmVjdG9yID0gdG9CZVJlbW92ZWQuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8QXRvbWljU3Ry
aW5nPjo6aXRlcmF0b3IgaXQgPSB0b0JlUmVtb3ZlZC5iZWdpbigpOyBpdCAhPSBlbmRWZWN0b3I7
ICsraXQpCisgICAgICAgIG1fcGVuZGluZ1Jlc291cmNlcy5yZW1vdmUoKml0KTsKK30KKworUGFz
c093blB0cjxTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50cz4gU1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjpyZW1vdmVQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5n
JiBpZCkKIHsKICAgICBBU1NFUlQobV9wZW5kaW5nUmVzb3VyY2VzLmNvbnRhaW5zKGlkKSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHJldmlz
aW9uIDg0OTQ4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFNWR1NWR0VsZW1lbnQ7CiBj
bGFzcyBTVkdEb2N1bWVudEV4dGVuc2lvbnMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNW
R0RvY3VtZW50RXh0ZW5zaW9ucyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8U1ZHU3R5bGVkRWxlbWVudD4gPiBTVkdQZW5kaW5n
RWxlbWVudHM7CisgICAgdHlwZWRlZiBIYXNoU2V0PFNWR1N0eWxlZEVsZW1lbnQqPiBTVkdQZW5k
aW5nRWxlbWVudHM7CiAgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKERvY3VtZW50Kik7CiAgICAg
flNWR0RvY3VtZW50RXh0ZW5zaW9ucygpOwogICAgIApAQCAtNzksOCArNzksOSBAQCBwdWJsaWM6
CiAgICAgLy8gVGhpcyBIYXNoTWFwIGNvbnRhaW5zIGEgbGlzdCBvZiBwZW5kaW5nIHJlc291cmNl
cy4gUGVuZGluZyByZXNvdXJjZXMsIGFyZSBzdWNoCiAgICAgLy8gd2hpY2ggYXJlIHJlZmVyZW5j
ZWQgYnkgYW55IG9iamVjdCBpbiB0aGUgU1ZHIGRvY3VtZW50LCBidXQgZG8gTk9UIGV4aXN0IHll
dC4KICAgICAvLyBGb3IgaW5zdGFuY2UsIGR5bmFtaWNhbGx5IGJ1aWxkIGdyYWRpZW50cyAvIHBh
dHRlcm5zIC8gY2xpcHBlcnMuLi4KLSAgICB2b2lkIGFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBB
dG9taWNTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPFNWR1N0eWxlZEVsZW1lbnQ+KTsKKyAgICB2b2lk
IGFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdTdHlsZWRFbGVt
ZW50Kik7CiAgICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlk
KSBjb25zdDsKKyAgICB2b2lkIHJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhTVkdT
dHlsZWRFbGVtZW50Kik7CiAgICAgUGFzc093blB0cjxTVkdQZW5kaW5nRWxlbWVudHM+IHJlbW92
ZVBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDg0OTQ4KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsMjcgKzMzOCw2IEBA
IGJvb2wgU1ZHRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXIKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQotewotICAg
IFN0eWxlZEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0KLSAgICBpZiAoIW5lZWRz
UGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpOwotICAgIFN0cmluZyByZXNvdXJjZUlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKLSAgICBp
ZiAoIWV4dGVuc2lvbnMtPmlzUGVuZGluZ1Jlc291cmNlKHJlc291cmNlSWQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgT3duUHRyPFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVuZGlu
Z0VsZW1lbnRzPiBjbGllbnRzKGV4dGVuc2lvbnMtPnJlbW92ZVBlbmRpbmdSZXNvdXJjZShyZXNv
dXJjZUlkKSk7Ci0gICAgaWYgKGNsaWVudHMtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY29uc3QgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMtPmVuZCgpOwotICAgIGZvciAoU1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2xpZW50
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+YnVpbGRQZW5kaW5n
UmVzb3VyY2UoKTsKLX0KLQogdm9pZCBTVkdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJp
YnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQogewogICAgIEFTU0VSVChhdHRyKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gODQ5NDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDYgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLSAgICB2
aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0
cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CiAg
ICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0Owog
ICAgIApAQCAtMTMxLDkgKzEzMCw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNT
dXBwb3J0ZWQoU3RyaW5nSW1wbCogZmVhdHVyZSwgU3RyaW5nSW1wbCogdmVyc2lvbikgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQZW5kaW5nUmVzb3VyY2VIYW5kbGluZygpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2Uo
KSB7IH0KLQogICAgIHZvaWQgbWFwSW5zdGFuY2VUb0VsZW1lbnQoU1ZHRWxlbWVudEluc3RhbmNl
Kik7CiAgICAgdm9pZCByZW1vdmVJbnN0YW5jZU1hcHBpbmcoU1ZHRWxlbWVudEluc3RhbmNlKik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9u
IDg0OTQ4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2N1cnNvckVs
ZW1lbnQoMCkKICAgICAgICAgLCBtX2N1cnNvckltYWdlVmFsdWUoMCkKICAgICAgICAgLCBtX2lu
c3RhbmNlc1VwZGF0ZXNCbG9ja2VkKGZhbHNlKQorICAgICAgICAsIG1faXNQZW5kaW5nUmVzb3Vy
Y2UoZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtNjAsNiArNjEsOSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZXNV
cGRhdGVzQmxvY2tlZDsgfQogICAgIHZvaWQgc2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZChib29s
IHZhbHVlKSB7IG1faW5zdGFuY2VzVXBkYXRlc0Jsb2NrZWQgPSB2YWx1ZTsgfQogCisgICAgYm9v
bCBpc1BlbmRpbmdSZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQZW5kaW5nUmVzb3VyY2U7
IH0KKyAgICB2b2lkIHNldElzUGVuZGluZ1Jlc291cmNlKGJvb2wgdmFsdWUpIHsgbV9pc1BlbmRp
bmdSZXNvdXJjZSA9IHZhbHVlOyB9CisKICAgICBTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JFbGVtZW50OyB9CiAgICAgdm9pZCBzZXRDdXJz
b3JFbGVtZW50KFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQpIHsgbV9jdXJzb3JFbGVt
ZW50ID0gY3Vyc29yRWxlbWVudDsgfQogCkBAIC03MSw2ICs3NSw3IEBAIHByaXZhdGU6CiAgICAg
U1ZHQ3Vyc29yRWxlbWVudCogbV9jdXJzb3JFbGVtZW50OwogICAgIENTU0N1cnNvckltYWdlVmFs
dWUqIG1fY3Vyc29ySW1hZ2VWYWx1ZTsKICAgICBib29sIG1faW5zdGFuY2VzVXBkYXRlc0Jsb2Nr
ZWQgOiAxOworICAgIGJvb2wgbV9pc1BlbmRpbmdSZXNvdXJjZSA6IDE7CiB9OwogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NDk0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNiArNjYsMTAgQEAgU1ZHU3R5bGVkRWxlbWVudDo6U1ZHU3R5bGVkRWxlbWVudChj
b25zdAogCiBTVkdTdHlsZWRFbGVtZW50Ojp+U1ZHU3R5bGVkRWxlbWVudCgpCiB7CisgICAgaWYg
KG5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSAmJiBpc1BlbmRpbmdSZXNvdXJjZSgpICYm
IGRvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+
cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOworCisgICAgQVNTRVJUKCFp
c1BlbmRpbmdSZXNvdXJjZSgpKTsKIH0KIAogU3RyaW5nIFNWR1N0eWxlZEVsZW1lbnQ6OnRpdGxl
KCkgY29uc3QKQEAgLTM1OSwxMiArMzYzLDM3IEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW0KIHsKICAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7CisKKyAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIGlmICghbmVlZHNQZW5kaW5nUmVz
b3VyY2VIYW5kbGluZygpIHx8ICFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKTsKKyAgICBTdHJpbmcgcmVzb3VyY2VJZCA9IGdldElkQXR0cmlidXRlKCk7CisgICAg
aWYgKCFleHRlbnNpb25zLT5pc1BlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUlkKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgT3duUHRyPFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVuZGluZ0Vs
ZW1lbnRzPiBjbGllbnRzKGV4dGVuc2lvbnMtPnJlbW92ZVBlbmRpbmdSZXNvdXJjZShyZXNvdXJj
ZUlkKSk7CisgICAgQVNTRVJUKCFjbGllbnRzLT5pc0VtcHR5KCkpOworCisgICAgY29uc3QgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGNsaWVudHMtPmVuZCgpOworICAgIGZvciAoU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQ
ZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2xpZW50cy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIEFTU0VSVCgoKml0KS0+aXNQZW5kaW5nUmVzb3VyY2Uo
KSk7CisgICAgICAgICgqaXQpLT5idWlsZFBlbmRpbmdSZXNvdXJjZSgpOworICAgICAgICAoKml0
KS0+c2V0SXNQZW5kaW5nUmVzb3VyY2UoZmFsc2UpOworICAgIH0KIH0KIAogdm9pZCBTVkdTdHls
ZWRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKICAgICB1cGRhdGVSZWxhdGl2ZUxl
bmd0aHNJbmZvcm1hdGlvbihmYWxzZSwgdGhpcyk7CiAgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudCgpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQo
KTsKKyAgICBpZiAoIW5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSB8fCAhZG9jdW1lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKIH0KIAogdm9pZCBTVkdT
dHlsZWRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUq
IGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCkBA
IC00MTksNiArNDQ4LDE2IEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6c2V0SW5zdGFuY2VVcGRh
dGUKICAgICAgICAgcmFyZVNWR0RhdGEoKS0+c2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZCh2YWx1
ZSk7CiB9CiAKK2Jvb2wgU1ZHU3R5bGVkRWxlbWVudDo6aXNQZW5kaW5nUmVzb3VyY2UoKSBjb25z
dAoreworICAgIHJldHVybiBoYXNSYXJlU1ZHRGF0YSgpICYmIHJhcmVTVkdEYXRhKCktPmlzUGVu
ZGluZ1Jlc291cmNlKCk7Cit9CisKK3ZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6c2V0SXNQZW5kaW5n
UmVzb3VyY2UoYm9vbCB2YWx1ZSkKK3sKKyAgICBlbnN1cmVSYXJlU1ZHRGF0YSgpLT5zZXRJc1Bl
bmRpbmdSZXNvdXJjZSh2YWx1ZSk7Cit9CisKIEFmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRFbGVt
ZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3Bl
KSBjb25zdAogewogICAgIC8vIFRvIGJlIG92ZXJyaWRlbiBieSBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50L1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50IChvciBhcyBzcGVjaWFsIGNhc2Ug
U1ZHVGV4dEVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJ
KHJldmlzaW9uIDg0OTQ4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTIgKzUyLDE2IEBAIHB1YmxpYzoKICAgICBib29sIGlu
c3RhbmNlVXBkYXRlc0Jsb2NrZWQoKSBjb25zdDsKICAgICB2b2lkIHNldEluc3RhbmNlVXBkYXRl
c0Jsb2NrZWQoYm9vbCk7CiAKKyAgICBib29sIGlzUGVuZGluZ1Jlc291cmNlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRJc1BlbmRpbmdSZXNvdXJjZShib29sKTsKKwogICAgIEFuaW1hdGVkQXR0cmli
dXRlVHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZUZvckNTU1Byb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICBzdGF0aWMgYm9vbCBpc0FuaW1hdGFibGVDU1NQcm9wZXJ0eShjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbENvb3Jk
aW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVybiBTdHlsZWRFbGVt
ZW50OjpzdHlsZSgpOyB9CisgICAgdmlydHVhbCBib29sIG5lZWRzUGVuZGluZ1Jlc291cmNlSGFu
ZGxpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKIHByb3RlY3RlZDogCiAgICAgU1ZHU3R5
bGVkRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTgxLDYgKzg1
LDcgQEAgcHJvdGVjdGVkOiAKICAgICB2b2lkIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0
aW9uKGJvb2wgaGFzUmVsYXRpdmVMZW5ndGhzLCBTVkdTdHlsZWRFbGVtZW50Kik7CiAKICAgICB2
aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgeyB9CiAKIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gODQ5NDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcyLDcgKzcyLDYgQEAgaW5saW5lIFNWR1VzZUVsZW1lbnQ6OlNWR1VzZUVsZW1lbnQoY29ucwog
ICAgICwgbV93aWR0aChMZW5ndGhNb2RlV2lkdGgpCiAgICAgLCBtX2hlaWdodChMZW5ndGhNb2Rl
SGVpZ2h0KQogICAgICwgbV91cGRhdGVzQmxvY2tlZChmYWxzZSkKLSAgICAsIG1faXNQZW5kaW5n
UmVzb3VyY2UoZmFsc2UpCiAgICAgLCBtX25lZWRzU2hhZG93VHJlZVJlY3JlYXRpb24oZmFsc2Up
CiB7CiB9CkBAIC0xMzksNyArMTM4LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudAogICAgIC8vIFRoaXMgZnVuY3Rpb25zIGV4aXN0cyB0byBhc3N1cmUgYXNzdW1w
dGlvbnMgbWFkZSBpbiB0aGUgY29kZSByZWdhcmRpbmcgU1ZHRWxlbWVudEluc3RhbmNlIGNyZWF0
aW9uL2Rlc3RydWN0aW9uIGFyZSBzYXRpc2ZpZWQuCiAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgQVNTRVJUKCFtX3RhcmdldEVs
ZW1lbnRJbnN0YW5jZSB8fCAhaXNXZWxsRm9ybWVkRG9jdW1lbnQoZG9jdW1lbnQoKSkpOwotICAg
IEFTU0VSVCghbV9pc1BlbmRpbmdSZXNvdXJjZSB8fCAhaXNXZWxsRm9ybWVkRG9jdW1lbnQoZG9j
dW1lbnQoKSkpOworICAgIEFTU0VSVCghaXNQZW5kaW5nUmVzb3VyY2UoKSB8fCAhaXNXZWxsRm9y
bWVkRG9jdW1lbnQoZG9jdW1lbnQoKSkpOwogfQogCiB2b2lkIFNWR1VzZUVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKQpAQCAtMTY2LDEwICsxNjUsMTggQEAgdm9pZCBTVkdVc2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoU1ZHVVJJ
UmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewotICAgICAgICBpZiAobV9p
c1BlbmRpbmdSZXNvdXJjZSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5yZW1vdmVQZW5kaW5nUmVzb3VyY2UobV9yZXNvdXJjZUlkKTsKKyAgICAgICAg
aWYgKGlzUGVuZGluZ1Jlc291cmNlKCkpIHsKKyAgICAgICAgICAgIE93blB0cjxTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50cz4gY2xpZW50cyhkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZVBlbmRpbmdSZXNvdXJjZShtX3Jlc291cmNlSWQpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghY2xpZW50cy0+aXNFbXB0eSgpKTsKKworICAgICAgICAgICAg
Y29uc3QgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGNsaWVudHMtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50czo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjbGll
bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
KCppdCktPmlzUGVuZGluZ1Jlc291cmNlKCkpOworICAgICAgICAgICAgICAgICgqaXQpLT5zZXRJ
c1BlbmRpbmdSZXNvdXJjZShmYWxzZSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG1f
cmVzb3VyY2VJZCA9IFN0cmluZygpOwotICAgICAgICAgICAgbV9pc1BlbmRpbmdSZXNvdXJjZSA9
IGZhbHNlOworICAgICAgICAgICAgc2V0SXNQZW5kaW5nUmVzb3VyY2UoZmFsc2UpOwogICAgICAg
ICB9CiAKICAgICAgICAgaW52YWxpZGF0ZVNoYWRvd1RyZWUoKTsKQEAgLTQ3MCwxOCArNDc3LDE5
IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UKICAgICBBU1NFUlQo
IW1fdGFyZ2V0RWxlbWVudEluc3RhbmNlKTsKIAogICAgIGlmICghdGFyZ2V0RWxlbWVudCkgewot
ICAgICAgICBpZiAobV9pc1BlbmRpbmdSZXNvdXJjZSB8fCBpZC5pc0VtcHR5KCkpCisgICAgICAg
IGlmIChpc1BlbmRpbmdSZXNvdXJjZSgpIHx8IGlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBtX2lzUGVuZGluZ1Jlc291cmNlID0gdHJ1ZTsKICAgICAgICAgbV9y
ZXNvdXJjZUlkID0gaWQ7CisgICAgICAgIEFTU0VSVCghaXNQZW5kaW5nUmVzb3VyY2UoKSk7CiAg
ICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkUGVuZGluZ1Jlc291
cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGlzUGVuZGluZ1Jlc291cmNlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1faXNQZW5kaW5nUmVzb3VyY2UpIHsKKwor
ICAgIGlmIChpc1BlbmRpbmdSZXNvdXJjZSgpKSB7CiAgICAgICAgIEFTU0VSVCghbV90YXJnZXRF
bGVtZW50SW5zdGFuY2UpOwotICAgICAgICBtX2lzUGVuZGluZ1Jlc291cmNlID0gZmFsc2U7ICAg
IAogICAgICAgICBtX3Jlc291cmNlSWQgPSBTdHJpbmcoKTsKICAgICAgICAgaW52YWxpZGF0ZVNo
YWRvd1RyZWUoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHJl
dmlzaW9uIDg0OTQ4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0VXBkYXRl
c0Jsb2NrZWQoYm9vbCBibG9ja2VkKSB7IG1fdXBkYXRlc0Jsb2NrZWQgPSBibG9ja2VkOyB9CiAK
ICAgICBmcmllbmQgY2xhc3MgUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI7Ci0gICAg
Ym9vbCBpc1BlbmRpbmdSZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQZW5kaW5nUmVzb3Vy
Y2U7IH0KICAgICB2b2lkIGJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKFNWR1NoYWRvd1RyZWVS
b290RWxlbWVudCopOwogICAgIHZvaWQgZGV0YWNoSW5zdGFuY2UoKTsKIApAQCAtMTE4LDcgKzEx
Nyw2IEBAIHByaXZhdGU6CiAgICAgREVDTEFSRV9BTklNQVRFRF9CT09MRUFOKEV4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQsIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpCiAKICAgICBib29sIG1f
dXBkYXRlc0Jsb2NrZWQ7Ci0gICAgYm9vbCBtX2lzUGVuZGluZ1Jlc291cmNlOwogICAgIGJvb2wg
bV9uZWVkc1NoYWRvd1RyZWVSZWNyZWF0aW9uOwogICAgIFN0cmluZyBtX3Jlc291cmNlSWQ7CiAg
ICAgUmVmUHRyPFNWR0VsZW1lbnRJbnN0YW5jZT4gbV90YXJnZXRFbGVtZW50SW5zdGFuY2U7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA4NTAzMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTA0LTI3ICBOaWtvbGFzIFppbW1lcm1hbm4g
IDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIExFQUs6IFNWR0VsZW1lbnQgbGVha3Mgd2hlbiBkZXRhY2hpbmcgaXQg
aW4gYSBwZW5kaW5nIHJlc291cmNlIHN0YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01OTA3MgorCisgICAgICAgIEFkZCB0ZXN0Y2FzZSB0aGF0IHVz
ZWQgdG8gbGVhaywgdGhlIGxlYWtzIGJvdCB3aWxsIGFzc3VyZSB0aGV5IHdvbid0IGluIGZ1dHVy
ZS4KKworICAgICAgICAqIHN2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTItZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVh
ay0yLnN2ZzogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxl
YWstMy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcGVuZGluZy1y
ZXNvdXJjZS1sZWFrLTMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BlbmRpbmct
cmVzb3VyY2UtbGVhay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20v
cGVuZGluZy1yZXNvdXJjZS1sZWFrLnN2ZzogQWRkZWQuCisKIDIwMTEtMDQtMjcgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFNraXAgYW5vdGhlciB0
ZXN0IG9uIEdUSysgYmVjYXVzZSB3ZSBhcmUgc3RpbGwgbWlzc2luZyBmcmFtZSBsb2FkZXIgZGVs
ZWdhdGUgb3V0cHV0CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3Vy
Y2UtbGVhay0yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3Vz
dG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTItZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoaXMgc2hvdWxkIG5vdCBsZWFrCisK
SW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTIuc3Zn
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1s
ZWFrLTIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5n
LXJlc291cmNlLWxlYWstMi5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1s
IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyI+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworCQkJbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCQl9
CisKKwkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJyZWN0Iikuc2V0QXR0cmlidXRlKCJmaWxsIiwgICJncmVlbiIpOworCQkJaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKwkJCQlsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisJCX0sIDApOworICAgIDwvc2NyaXB0PgorICAgIDx0ZXh0IHg9IjAiIHk9IjcwIj5UaGlz
IHNob3VsZCBub3QgbGVhazwvdGV4dD4KKyAgICA8cmVjdCB3aWR0aD0iNTAiIGhlaWdodD0iNTAi
IGZpbGw9InVybCgjZm9vKSIgaWQ9InJlY3QiLz4KKzwvc3ZnPgorCkluZGV4OiBMYXlvdXRUZXN0
cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0zLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0zLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGlu
Zy1yZXNvdXJjZS1sZWFrLTMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIg
QEAKK1RoaXMgc2hvdWxkIG5vdCBsZWFrCisKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20v
cGVuZGluZy1yZXNvdXJjZS1sZWFrLTMuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2
Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTMuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMy5zdmcJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04
Ij8+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CisgICAgPHNjcmlw
dD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCQkJbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworCQl9CisKKwkJc2V0VGltZW91dChmdW5jdGlvbigpIHsK
KwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZWN0Iikuc2V0QXR0cmlidXRlKCJmaWxsIiwg
ICJ1cmwoI2JhcikiKTsKKwkJCWlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisJCQkJ
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworCQl9LCAwKTsKKyAgICA8L3Njcmlw
dD4KKyAgICA8dGV4dCB4PSIwIiB5PSI3MCI+VGhpcyBzaG91bGQgbm90IGxlYWs8L3RleHQ+Cisg
ICAgPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiBmaWxsPSJ1cmwoI2ZvbykiIGlkPSJyZWN0
Ii8+Cis8L3N2Zz4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291
cmNlLWxlYWstZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0
b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitUaGlzIHNob3VsZCBub3QgbGVhaworCkluZGV4
OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay5zdmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWsuc3Zn
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNl
LWxlYWsuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MC9zdmciPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgPC9zY3JpcHQ+CisgICAgPHRleHQgeD0iMCIgeT0iNzAiPlRoaXMgc2hvdWxkIG5vdCBsZWFr
PC90ZXh0PgorICAgIDxyZWN0IHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIgZmlsbD0idXJsKCNmb28p
IiBpZD0icmVjdCIvPgorPC9zdmc+CisK
</data>
<flag name="review"
          id="84067"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91822</attachid>
            <date>2011-05-01 06:24:59 -0700</date>
            <delta_ts>2011-05-01 07:34:37 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>LeakFixes-v5.diff</filename>
            <type>text/plain</type>
            <size>25182</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1NDExKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDUtMDEgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTEVBSzogU1ZHRWxlbWVudCBsZWFrcyB3aGVuIGRl
dGFjaGluZyBpdCBpbiBhIHBlbmRpbmcgcmVzb3VyY2Ugc3RhdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MDcyCisKKyAgICAgICAgTWFrZSB0aGUg
cGVuZGluZyByZXNvdXJjZXMgc2V0IG5vbi1yZWZjb3VudGVkIGFnYWluLiBXZSBtYWRlIGl0IHJl
ZmNvdW50ZWQgYSB3aGlsZSBhZ28KKyAgICAgICAgdG8gZml4IGEgc2VjdXJpdHkgYnVnLCBhcyB3
ZSBoYWQgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gdGhlIHNldCBpbiBTVkdEb2N1bWVudEV4dGVuc2lv
bnMuCisgICAgICAgIEZpeCB0aGUgdW5kZXJseWluZyBwcm9ibGVtLCBieSByZW1vdmluZyBhbGwg
cGVuZGluZyByZXNvdXJjZXMgcmVmZXJlbmNpbmcgdG8gYSBwYXJ0aWN1bGFyCisgICAgICAgIFNW
R0VsZW1lbnQsIHVwb24gaXRzIGRlc3RydWN0aW9uIG9yIHVwb24gcmVtb3ZpbmcgaXQgZnJvbSB0
aGUgZG9jdW1lbnQuCisKKyAgICAgICAgRXhhbXBsZTogPHJlY3QgZmlsbD0idXJsKCNmb28pIiBp
ZD0icmVjdCI+CisgICAgICAgIFdoZW4gd2UgdHJ5IHRvIHJlbmRlciB0aGUgcmVjdCwgdGhlIGZv
byBwYWludCBzZXJ2ZXIgY2FuJ3QgYmUgZm91bmQgYW5kIHRodXMgImZvbyIgd2lsbCBiZQorICAg
ICAgICBhZGRlZCB0byB0aGUgcGVuZGluZyByZXNvdXJjZSBzZXQsIHdpdGggInJlY3QiIGFzIGNs
aWVudC4gV2hlbiAiZm9vIiBhcHBlYXJzLCBpdCB3b3VsZCByZW1vdmUKKyAgICAgICAgaXRzZWxm
IGZyb20gdGhlIHBlbmRpbmcgcmVzb3VyY2Ugc2V0LCBhbmQgYSByZWYgY291bnQgdG8gdGhlICJy
ZWN0IiB3b3VsZCBiZSByZWxlYXNlZC4KKyAgICAgICAgSWYgImZvbyIgbmV2ZXIgYXBwZWFycywg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zIHN0aWxsIGhvbGRzIGEgcmVmIHRvIHRoZSA8cmVjdD4sIHRo
dXMga2VlcGluZworICAgICAgICBpdCBhbmQgdGhlIGFzc29jaWF0ZWQgZG9jdW1lbnQgYWxpdmUu
CisKKyAgICAgICAgVGVzdHM6IHN2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTIuc3Zn
CisgICAgICAgICAgICAgICBzdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0zLnN2Zwor
ICAgICAgICAgICAgICAgc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWsuc3ZnCisKKyAg
ICAgICAgVGhlc2UgdGVzdHMgY292ZXIgc2V2ZXJhbCBzY2VuYXJpb3Mgd2hlcmUgd2UgdXNlZCB0
byBsZWFrLiBTaG91bGQgZml4IHNldmVyYWwgU1ZHKkVsZW1lbnQgbGVha3Mgb24gdGhlIGJvdHMu
CisgICAgICAgIEkgbWFudWFsbHkgdGVzdGVkIHJlbG9hZGluZyBhYm92ZSB0ZXN0Y2FzZXMgZG96
ZW5zIG9mIHRpbWVzLCBiZWZvcmUgdGhlIGxlYWsgY291bnQgd2FzIGluY3JlbWVudGVkIGJ5IDIg
bm9kZXMgb24gZXZlcnkgcmVsb2FkLCB0aGF0J3MgZ29uZSBub3cuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjp1cGRh
dGVGcm9tRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAq
IHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpoYXNQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3Zl
UGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmg6
CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxlbWVudFJhcmVEYXRhOjpTVkdFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRWxlbWVudFJhcmVEYXRhOjpoYXNQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6c2V0SGFzUGVuZGluZ1Jlc291cmNlcyk6Cisg
ICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVkRWxlbWVudDo6flNWR1N0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU3R5bGVkRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTdHlsZWRFbGVtZW50OjpoYXNQZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N0eWxlZEVsZW1lbnQ6OnNldEhhc1BlbmRpbmdSZXNvdXJjZXMpOgorICAgICAgICAq
IHN2Zy9TVkdTdHlsZWRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVt
ZW50OjpuZWVkc1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0eWxlZEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZH
VXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpTVkdVc2VF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVz
b3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50Lmg6CisKIDIwMTEtMDUtMDEgIERh
biBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRl
cnMgQ2FybHNzb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAkocmV2aXNpb24gODU0MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXI6OnJlbW92ZUMKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXI6OnJlZ2lzdGVyUmVzb3VyY2UoKQogewogICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0
ZW5zaW9ucyA9IHN2Z0V4dGVuc2lvbnNGcm9tTm9kZShub2RlKCkpOwotICAgIGlmICghZXh0ZW5z
aW9ucy0+aXNQZW5kaW5nUmVzb3VyY2UobV9pZCkpIHsKKyAgICBpZiAoIWV4dGVuc2lvbnMtPmhh
c1BlbmRpbmdSZXNvdXJjZXMobV9pZCkpIHsKICAgICAgICAgZXh0ZW5zaW9ucy0+YWRkUmVzb3Vy
Y2UobV9pZCwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjcsNiArMTY3LDgg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZQogICAgIC8vIFVwZGF0
ZSBjYWNoZWQgcmVzb3VyY2VzIG9mIHBlbmRpbmcgY2xpZW50cy4KICAgICBjb25zdCBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50czo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Y2xpZW50cy0+ZW5kKCk7CiAgICAgZm9yIChTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNWR1BlbmRp
bmdFbGVtZW50czo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjbGllbnRzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgQVNTRVJUKCgqaXQpLT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkp
OworICAgICAgICAoKml0KS0+c2V0SGFzUGVuZGluZ1Jlc291cmNlcyhmYWxzZSk7CiAgICAgICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAoKml0KS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5jcHAJKHJldmlzaW9uIDg1NDAyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lcjo6dQogICAgIC8vIE9ubHkgcmVidWlsZCB0aGUgc2hhZG93IHRyZWUsIGlmIHdlIGEpIG5l
dmVyIGhhZCBhIHRyZWUgb3IgYikgd2Ugd2VyZSBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gZG8gc28K
ICAgICAvLyBJZiB0aGUgdXNlIGVsZW1lbnQgaXMgYSBwZW5kaW5nIHJlc291cmNlLCBhbmQgYSkg
b3IgYikgaXMgdHJ1ZSwgZG8gbm90aGluZywgYW5kIHdhaXQgZm9yIHRoZSB1c2UKICAgICAvLyBl
bGVtZW50IHRvIGJlIGFza2VkIHRvIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCksIHRoaXMgd2lsbCBj
YWxsIHVzIGFnYWluLCB3aXRoIG1fcmVjcmVhdGVUcnVlPXRydWUuCi0gICAgaWYgKChzaG91bGRS
ZWNyZWF0ZVRyZWUgfHwgIWhhZEV4aXN0aW5nVHJlZSkgJiYgIXVzZUVsZW1lbnQtPmlzUGVuZGlu
Z1Jlc291cmNlKCkpIHsKKyAgICBpZiAoKHNob3VsZFJlY3JlYXRlVHJlZSB8fCAhaGFkRXhpc3Rp
bmdUcmVlKSAmJiAhdXNlRWxlbWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKSB7CiAgICAgICAg
IHVzZUVsZW1lbnQtPmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKG1fc2hhZG93Um9vdC5nZXQo
KSk7CiAKICAgICAgICAgLy8gQXR0YWNoIHNoYWRvdyByb290IGVsZW1lbnQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAJKHJldmlzaW9uIDg1
NDAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzEsOSArMTcxLDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lcgogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyUGVuZGluZ1Jlc291
cmNlKFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucywgY29uc3QgQXRvbWljU3RyaW5n
JiBpZCwgU1ZHRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAg
aWYgKCFlbGVtZW50LT5pc1N0eWxlZCgpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBBU1NFUlQo
ZWxlbWVudC0+aXNTdHlsZWQoKSk7CiAgICAgZXh0ZW5zaW9ucy0+YWRkUGVuZGluZ1Jlc291cmNl
KGlkLCBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCkpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAkocmV2aXNp
b24gODU0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjExLDI0ICsyMTEsMjYgQEAgdm9pZCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OnJlcG9ydEVycm9yKAogICAgIHJlcG9ydE1lc3NhZ2UobV9kb2N1bWVudCwgRXJy
b3JNZXNzYWdlTGV2ZWwsICJFcnJvcjogIiArIG1lc3NhZ2UpOwogfQogCi12b2lkIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQs
IFBhc3NSZWZQdHI8U1ZHU3R5bGVkRWxlbWVudD4gb2JqKQordm9pZCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdTdHls
ZWRFbGVtZW50KiBlbGVtZW50KQogewotICAgIEFTU0VSVChvYmopOworICAgIEFTU0VSVChlbGVt
ZW50KTsKIAogICAgIGlmIChpZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX3BlbmRpbmdSZXNvdXJjZXMuY29udGFpbnMoaWQpKQotICAgICAgICBtX3BlbmRpbmdSZXNv
dXJjZXMuZ2V0KGlkKS0+YWRkKG9iaik7CisgICAgICAgIG1fcGVuZGluZ1Jlc291cmNlcy5nZXQo
aWQpLT5hZGQoZWxlbWVudCk7CiAgICAgZWxzZSB7CiAgICAgICAgIFNWR1BlbmRpbmdFbGVtZW50
cyogc2V0ID0gbmV3IFNWR1BlbmRpbmdFbGVtZW50czsKLSAgICAgICAgc2V0LT5hZGQob2JqKTsK
KyAgICAgICAgc2V0LT5hZGQoZWxlbWVudCk7CiAKICAgICAgICAgbV9wZW5kaW5nUmVzb3VyY2Vz
LmFkZChpZCwgc2V0KTsKICAgICB9CisKKyAgICBlbGVtZW50LT5zZXRIYXNQZW5kaW5nUmVzb3Vy
Y2VzKHRydWUpOwogfQogCi1ib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNQZW5kaW5nUmVz
b3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKK2Jvb2wgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpoYXNQZW5kaW5nUmVzb3VyY2VzKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0
CiB7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM2
LDcgKzIzOCwzNiBAQCBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNQZW5kaW5nUmVzCiAg
ICAgcmV0dXJuIG1fcGVuZGluZ1Jlc291cmNlcy5jb250YWlucyhpZCk7CiB9CiAKLVBhc3NPd25Q
dHI8SGFzaFNldDxSZWZQdHI8U1ZHU3R5bGVkRWxlbWVudD4gPiA+IFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpCit2b2lk
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOworCisg
ICAgaWYgKG1fcGVuZGluZ1Jlc291cmNlcy5pc0VtcHR5KCkgfHwgIWVsZW1lbnQtPmhhc1BlbmRp
bmdSZXNvdXJjZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZWxlbWVudC0+c2V0SGFzUGVu
ZGluZ1Jlc291cmNlcyhmYWxzZSk7CisKKyAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0JlUmVt
b3ZlZDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgU1ZHUGVuZGluZ0VsZW1lbnRzKj46Oml0
ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBTVkdQZW5kaW5nRWxlbWVudHMqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRp
bmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFNWR1BlbmRp
bmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+c2Vjb25kOworICAgICAgICBBU1NFUlQoZWxlbWVu
dHMpOworICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOworCisgICAgICAgIGVs
ZW1lbnRzLT5yZW1vdmUoZWxlbWVudCk7CisgICAgICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgp
KQorICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgfQorCisg
ICAgaWYgKHRvQmVSZW1vdmVkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPEF0b21pY1N0cmluZz46Oml0ZXJhdG9yIGVuZFZlY3RvciA9IHRvQmVSZW1vdmVkLmVuZCgp
OworICAgIGZvciAoVmVjdG9yPEF0b21pY1N0cmluZz46Oml0ZXJhdG9yIGl0ID0gdG9CZVJlbW92
ZWQuYmVnaW4oKTsgaXQgIT0gZW5kVmVjdG9yOyArK2l0KQorICAgICAgICBtX3BlbmRpbmdSZXNv
dXJjZXMucmVtb3ZlKCppdCk7Cit9CisKK1Bhc3NPd25QdHI8U1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpTVkdQZW5kaW5nRWxlbWVudHM+IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlUGVuZGlu
Z1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpCiB7CiAgICAgQVNTRVJUKG1fcGVuZGlu
Z1Jlc291cmNlcy5jb250YWlucyhpZCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiA4NTQwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBjbGFzcyBTVkdTVkdFbGVtZW50OwogY2xhc3MgU1ZHRG9jdW1lbnRFeHRlbnNpb25zIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdEb2N1bWVudEV4dGVuc2lvbnMpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFNW
R1N0eWxlZEVsZW1lbnQ+ID4gU1ZHUGVuZGluZ0VsZW1lbnRzOworICAgIHR5cGVkZWYgSGFzaFNl
dDxTVkdTdHlsZWRFbGVtZW50Kj4gU1ZHUGVuZGluZ0VsZW1lbnRzOwogICAgIFNWR0RvY3VtZW50
RXh0ZW5zaW9ucyhEb2N1bWVudCopOwogICAgIH5TVkdEb2N1bWVudEV4dGVuc2lvbnMoKTsKICAg
ICAKQEAgLTc5LDggKzc5LDkgQEAgcHVibGljOgogICAgIC8vIFRoaXMgSGFzaE1hcCBjb250YWlu
cyBhIGxpc3Qgb2YgcGVuZGluZyByZXNvdXJjZXMuIFBlbmRpbmcgcmVzb3VyY2VzLCBhcmUgc3Vj
aAogICAgIC8vIHdoaWNoIGFyZSByZWZlcmVuY2VkIGJ5IGFueSBvYmplY3QgaW4gdGhlIFNWRyBk
b2N1bWVudCwgYnV0IGRvIE5PVCBleGlzdCB5ZXQuCiAgICAgLy8gRm9yIGluc3RhbmNlLCBkeW5h
bWljYWxseSBidWlsZCBncmFkaWVudHMgLyBwYXR0ZXJucyAvIGNsaXBwZXJzLi4uCi0gICAgdm9p
ZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxT
VkdTdHlsZWRFbGVtZW50Pik7Ci0gICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9t
aWNTdHJpbmcmIGlkKSBjb25zdDsKKyAgICB2b2lkIGFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBB
dG9taWNTdHJpbmcmIGlkLCBTVkdTdHlsZWRFbGVtZW50Kik7CisgICAgYm9vbCBoYXNQZW5kaW5n
UmVzb3VyY2VzKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OworICAgIHZvaWQgcmVtb3Zl
RWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKFNWR1N0eWxlZEVsZW1lbnQqKTsKICAgICBQYXNz
T3duUHRyPFNWR1BlbmRpbmdFbGVtZW50cz4gcmVtb3ZlUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0
b21pY1N0cmluZyYgaWQpOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAko
cmV2aXNpb24gODU0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzOCwyNyArMzM4LDYgQEAgYm9vbCBTVkdFbGVtZW50OjpjaGlsZFNo
b3VsZENyZWF0ZVJlbmRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTVkdFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgU3R5bGVkRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKLQotICAgIGlmICghbmVlZHNQZW5kaW5nUmVzb3VyY2VIYW5kbGluZygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lv
bnMgPSBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7Ci0gICAgU3RyaW5nIHJlc291
cmNlSWQgPSBnZXRJZEF0dHJpYnV0ZSgpOwotICAgIGlmICghZXh0ZW5zaW9ucy0+aXNQZW5kaW5n
UmVzb3VyY2UocmVzb3VyY2VJZCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBPd25QdHI8
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM+IGNsaWVudHMoZXh0ZW5z
aW9ucy0+cmVtb3ZlUGVuZGluZ1Jlc291cmNlKHJlc291cmNlSWQpKTsKLSAgICBpZiAoY2xpZW50
cy0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50czo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xpZW50
cy0+ZW5kKCk7Ci0gICAgZm9yIChTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVt
ZW50czo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjbGllbnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICgqaXQpLT5idWlsZFBlbmRpbmdSZXNvdXJjZSgpOwotfQotCiB2b2lkIFNW
R0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZl
RGVjbHMpCiB7CiAgICAgQVNTRVJUKGF0dHIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5o
CShyZXZpc2lvbiA4NTQwMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCiAgICAgdmlydHVhbCB2b2lk
IGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9E
b2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSos
IGJvb2wgcHJlc2VydmVEZWNscyA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91
bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3Q7CiAgICAgCkBAIC0xMzEsOSArMTMwLDYgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1N1cHBvcnRlZChTdHJpbmdJbXBsKiBmZWF0
dXJlLCBTdHJpbmdJbXBsKiB2ZXJzaW9uKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBuZWVk
c1BlbmRpbmdSZXNvdXJjZUhhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpIHsgfQotCiAgICAgdm9pZCBtYXBJbnN0
YW5jZVRvRWxlbWVudChTVkdFbGVtZW50SW5zdGFuY2UqKTsKICAgICB2b2lkIHJlbW92ZUluc3Rh
bmNlTWFwcGluZyhTVkdFbGVtZW50SW5zdGFuY2UqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gODU0MDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcg
QEAgcHVibGljOgogICAgICAgICA6IG1fY3Vyc29yRWxlbWVudCgwKQogICAgICAgICAsIG1fY3Vy
c29ySW1hZ2VWYWx1ZSgwKQogICAgICAgICAsIG1faW5zdGFuY2VzVXBkYXRlc0Jsb2NrZWQoZmFs
c2UpCisgICAgICAgICwgbV9oYXNQZW5kaW5nUmVzb3VyY2VzKGZhbHNlKQogICAgIHsKICAgICB9
CiAKQEAgLTYwLDYgKzYxLDkgQEAgcHVibGljOgogICAgIGJvb2wgaW5zdGFuY2VVcGRhdGVzQmxv
Y2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2VzVXBkYXRlc0Jsb2NrZWQ7IH0KICAgICB2
b2lkIHNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoYm9vbCB2YWx1ZSkgeyBtX2luc3RhbmNlc1Vw
ZGF0ZXNCbG9ja2VkID0gdmFsdWU7IH0KIAorICAgIGJvb2wgaGFzUGVuZGluZ1Jlc291cmNlcygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzUGVuZGluZ1Jlc291cmNlczsgfQorICAgIHZvaWQgc2V0SGFz
UGVuZGluZ1Jlc291cmNlcyhib29sIHZhbHVlKSB7IG1faGFzUGVuZGluZ1Jlc291cmNlcyA9IHZh
bHVlOyB9CisKICAgICBTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJzb3JFbGVtZW50OyB9CiAgICAgdm9pZCBzZXRDdXJzb3JFbGVtZW50KFNWR0N1
cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQpIHsgbV9jdXJzb3JFbGVtZW50ID0gY3Vyc29yRWxl
bWVudDsgfQogCkBAIC03MSw2ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgU1ZHQ3Vyc29yRWxlbWVu
dCogbV9jdXJzb3JFbGVtZW50OwogICAgIENTU0N1cnNvckltYWdlVmFsdWUqIG1fY3Vyc29ySW1h
Z2VWYWx1ZTsKICAgICBib29sIG1faW5zdGFuY2VzVXBkYXRlc0Jsb2NrZWQgOiAxOworICAgIGJv
b2wgbV9oYXNQZW5kaW5nUmVzb3VyY2VzIDogMTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDg1NDAyKQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2
NiwxMCBAQCBTVkdTdHlsZWRFbGVtZW50OjpTVkdTdHlsZWRFbGVtZW50KGNvbnN0CiAKIFNWR1N0
eWxlZEVsZW1lbnQ6On5TVkdTdHlsZWRFbGVtZW50KCkKIHsKKyAgICBpZiAobmVlZHNQZW5kaW5n
UmVzb3VyY2VIYW5kbGluZygpICYmIGhhc1BlbmRpbmdSZXNvdXJjZXMoKSAmJiBkb2N1bWVudCgp
KQorICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUVsZW1l
bnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKKworICAgIEFTU0VSVCghaGFzUGVuZGluZ1Jl
c291cmNlcygpKTsKIH0KIAogU3RyaW5nIFNWR1N0eWxlZEVsZW1lbnQ6OnRpdGxlKCkgY29uc3QK
QEAgLTM1OSwxMiArMzYzLDM3IEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW0KIHsKICAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHVw
ZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7CisKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIGlmICghbmVlZHNQZW5kaW5nUmVzb3VyY2VIYW5k
bGluZygpIHx8ICFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zKiBleHRlbnNpb25zID0gZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsK
KyAgICBTdHJpbmcgcmVzb3VyY2VJZCA9IGdldElkQXR0cmlidXRlKCk7CisgICAgaWYgKCFleHRl
bnNpb25zLT5oYXNQZW5kaW5nUmVzb3VyY2VzKHJlc291cmNlSWQpKQorICAgICAgICByZXR1cm47
CisKKyAgICBPd25QdHI8U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM+
IGNsaWVudHMoZXh0ZW5zaW9ucy0+cmVtb3ZlUGVuZGluZ1Jlc291cmNlKHJlc291cmNlSWQpKTsK
KyAgICBBU1NFUlQoIWNsaWVudHMtPmlzRW1wdHkoKSk7CisKKyAgICBjb25zdCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50czo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2xp
ZW50cy0+ZW5kKCk7CisgICAgZm9yIChTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdF
bGVtZW50czo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjbGllbnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgQVNTRVJUKCgqaXQpLT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwor
ICAgICAgICAoKml0KS0+YnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKKyAgICAgICAgKCppdCktPnNl
dEhhc1BlbmRpbmdSZXNvdXJjZXMoZmFsc2UpOworICAgIH0KIH0KIAogdm9pZCBTVkdTdHlsZWRF
bGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0
aHNJbmZvcm1hdGlvbihmYWxzZSwgdGhpcyk7CiAgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21E
b2N1bWVudCgpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsK
KyAgICBpZiAoIW5lZWRzUGVuZGluZ1Jlc291cmNlSGFuZGxpbmcoKSB8fCAhZG9jdW1lbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJl
bW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKIH0KIAogdm9pZCBTVkdTdHls
ZWRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJl
Zm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCkBAIC00
MTksNiArNDQ4LDE2IEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6c2V0SW5zdGFuY2VVcGRhdGUK
ICAgICAgICAgcmFyZVNWR0RhdGEoKS0+c2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZCh2YWx1ZSk7
CiB9CiAKK2Jvb2wgU1ZHU3R5bGVkRWxlbWVudDo6aGFzUGVuZGluZ1Jlc291cmNlcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc1JhcmVTVkdEYXRhKCkgJiYgcmFyZVNWR0RhdGEoKS0+aGFzUGVu
ZGluZ1Jlc291cmNlcygpOworfQorCit2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OnNldEhhc1BlbmRp
bmdSZXNvdXJjZXMoYm9vbCB2YWx1ZSkKK3sKKyAgICBlbnN1cmVSYXJlU1ZHRGF0YSgpLT5zZXRI
YXNQZW5kaW5nUmVzb3VyY2VzKHZhbHVlKTsKK30KKwogQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxl
ZEVsZW1lbnQ6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RN
U2NvcGUpIGNvbnN0CiB7CiAgICAgLy8gVG8gYmUgb3ZlcnJpZGVuIGJ5IFNWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKG9yIGFzIHNwZWNpYWwg
Y2FzZSBTVkdUZXh0RWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1l
bnQuaAkocmV2aXNpb24gODU0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMiArNTIsMTYgQEAgcHVibGljOgogICAgIGJv
b2wgaW5zdGFuY2VVcGRhdGVzQmxvY2tlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SW5zdGFuY2VV
cGRhdGVzQmxvY2tlZChib29sKTsKIAorICAgIGJvb2wgaGFzUGVuZGluZ1Jlc291cmNlcygpIGNv
bnN0OworICAgIHZvaWQgc2V0SGFzUGVuZGluZ1Jlc291cmNlcyhib29sKTsKKwogICAgIEFuaW1h
dGVkQXR0cmlidXRlVHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZUZvckNTU1Byb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICBzdGF0aWMgYm9vbCBpc0FuaW1hdGFibGVDU1NQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBs
b2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7IHJldHVybiBT
dHlsZWRFbGVtZW50OjpzdHlsZSgpOyB9CisgICAgdmlydHVhbCBib29sIG5lZWRzUGVuZGluZ1Jl
c291cmNlSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKIHByb3RlY3RlZDogCiAg
ICAgU1ZHU3R5bGVkRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAg
LTgxLDYgKzg1LDcgQEAgcHJvdGVjdGVkOiAKICAgICB2b2lkIHVwZGF0ZVJlbGF0aXZlTGVuZ3Ro
c0luZm9ybWF0aW9uKGJvb2wgaGFzUmVsYXRpdmVMZW5ndGhzLCBTVkdTdHlsZWRFbGVtZW50Kik7
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgeyB9
CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24g
ODU0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDYgQEAgaW5saW5lIFNWR1VzZUVsZW1lbnQ6OlNWR1VzZUVsZW1l
bnQoY29ucwogICAgICwgbV93aWR0aChMZW5ndGhNb2RlV2lkdGgpCiAgICAgLCBtX2hlaWdodChM
ZW5ndGhNb2RlSGVpZ2h0KQogICAgICwgbV91cGRhdGVzQmxvY2tlZChmYWxzZSkKLSAgICAsIG1f
aXNQZW5kaW5nUmVzb3VyY2UoZmFsc2UpCiAgICAgLCBtX25lZWRzU2hhZG93VHJlZVJlY3JlYXRp
b24oZmFsc2UpCiB7CiB9CkBAIC0xMzksNyArMTM4LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudAogICAgIC8vIFRoaXMgZnVuY3Rpb25zIGV4aXN0cyB0byBhc3N1
cmUgYXNzdW1wdGlvbnMgbWFkZSBpbiB0aGUgY29kZSByZWdhcmRpbmcgU1ZHRWxlbWVudEluc3Rh
bmNlIGNyZWF0aW9uL2Rlc3RydWN0aW9uIGFyZSBzYXRpc2ZpZWQuCiAgICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgQVNTRVJUKCFt
X3RhcmdldEVsZW1lbnRJbnN0YW5jZSB8fCAhaXNXZWxsRm9ybWVkRG9jdW1lbnQoZG9jdW1lbnQo
KSkpOwotICAgIEFTU0VSVCghbV9pc1BlbmRpbmdSZXNvdXJjZSB8fCAhaXNXZWxsRm9ybWVkRG9j
dW1lbnQoZG9jdW1lbnQoKSkpOworICAgIEFTU0VSVCghaGFzUGVuZGluZ1Jlc291cmNlcygpIHx8
ICFpc1dlbGxGb3JtZWREb2N1bWVudChkb2N1bWVudCgpKSk7CiB9CiAKIHZvaWQgU1ZHVXNlRWxl
bWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCkBAIC0xNjYsMTAgKzE2NSwxOCBAQCB2b2lkIFNW
R1VzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Ci0gICAg
ICAgIGlmIChtX2lzUGVuZGluZ1Jlc291cmNlKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZVBlbmRpbmdSZXNvdXJjZShtX3Jlc291cmNlSWQp
OworICAgICAgICBpZiAoaGFzUGVuZGluZ1Jlc291cmNlcygpKSB7CisgICAgICAgICAgICBPd25Q
dHI8U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM+IGNsaWVudHMoZG9j
dW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVQZW5kaW5nUmVzb3VyY2UobV9y
ZXNvdXJjZUlkKSk7CisgICAgICAgICAgICBBU1NFUlQoIWNsaWVudHMtPmlzRW1wdHkoKSk7CisK
KyAgICAgICAgICAgIGNvbnN0IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVuZGluZ0VsZW1l
bnRzOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjbGllbnRzLT5lbmQoKTsKKyAgICAgICAgICAgIGZv
ciAoU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gY2xpZW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKCgqaXQpLT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpOworICAgICAgICAgICAg
ICAgICgqaXQpLT5zZXRIYXNQZW5kaW5nUmVzb3VyY2VzKGZhbHNlKTsKKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgbV9yZXNvdXJjZUlkID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICBtX2lz
UGVuZGluZ1Jlc291cmNlID0gZmFsc2U7CisgICAgICAgICAgICBzZXRIYXNQZW5kaW5nUmVzb3Vy
Y2VzKGZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGludmFsaWRhdGVTaGFkb3dUcmVlKCk7
CkBAIC00NzAsMTggKzQ3NywxOSBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jl
c291cmNlCiAgICAgQVNTRVJUKCFtX3RhcmdldEVsZW1lbnRJbnN0YW5jZSk7CiAKICAgICBpZiAo
IXRhcmdldEVsZW1lbnQpIHsKLSAgICAgICAgaWYgKG1faXNQZW5kaW5nUmVzb3VyY2UgfHwgaWQu
aXNFbXB0eSgpKQorICAgICAgICBpZiAoaGFzUGVuZGluZ1Jlc291cmNlcygpIHx8IGlkLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2lzUGVuZGluZ1Jlc291cmNl
ID0gdHJ1ZTsKICAgICAgICAgbV9yZXNvdXJjZUlkID0gaWQ7CisgICAgICAgIEFTU0VSVCghaGFz
UGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLT5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICBBU1NFUlQoaGFz
UGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICht
X2lzUGVuZGluZ1Jlc291cmNlKSB7CisKKyAgICBpZiAoaGFzUGVuZGluZ1Jlc291cmNlcygpKSB7
CiAgICAgICAgIEFTU0VSVCghbV90YXJnZXRFbGVtZW50SW5zdGFuY2UpOwotICAgICAgICBtX2lz
UGVuZGluZ1Jlc291cmNlID0gZmFsc2U7ICAgIAogICAgICAgICBtX3Jlc291cmNlSWQgPSBTdHJp
bmcoKTsKICAgICAgICAgaW52YWxpZGF0ZVNoYWRvd1RyZWUoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHJldmlzaW9uIDg1NDAyKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNiBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0VXBkYXRlc0Jsb2NrZWQoYm9vbCBibG9ja2VkKSB7IG1fdXBk
YXRlc0Jsb2NrZWQgPSBibG9ja2VkOyB9CiAKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyU1ZHU2hh
ZG93VHJlZVJvb3RDb250YWluZXI7Ci0gICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNQZW5kaW5nUmVzb3VyY2U7IH0KICAgICB2b2lkIGJ1aWxkU2hhZG93QW5k
SW5zdGFuY2VUcmVlKFNWR1NoYWRvd1RyZWVSb290RWxlbWVudCopOwogICAgIHZvaWQgZGV0YWNo
SW5zdGFuY2UoKTsKIApAQCAtMTE4LDcgKzExNyw2IEBAIHByaXZhdGU6CiAgICAgREVDTEFSRV9B
TklNQVRFRF9CT09MRUFOKEV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsIGV4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQpCiAKICAgICBib29sIG1fdXBkYXRlc0Jsb2NrZWQ7Ci0gICAgYm9vbCBtX2lz
UGVuZGluZ1Jlc291cmNlOwogICAgIGJvb2wgbV9uZWVkc1NoYWRvd1RyZWVSZWNyZWF0aW9uOwog
ICAgIFN0cmluZyBtX3Jlc291cmNlSWQ7CiAgICAgUmVmUHRyPFNWR0VsZW1lbnRJbnN0YW5jZT4g
bV90YXJnZXRFbGVtZW50SW5zdGFuY2U7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NTQxMSkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEx
LTA1LTAxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExFQUs6IFNWR0VsZW1l
bnQgbGVha3Mgd2hlbiBkZXRhY2hpbmcgaXQgaW4gYSBwZW5kaW5nIHJlc291cmNlIHN0YXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA3MgorCisg
ICAgICAgIEFkZCB0ZXN0Y2FzZSB0aGF0IHVzZWQgdG8gbGVhaywgdGhlIGxlYWtzIGJvdCB3aWxs
IGFzc3VyZSB0aGV5IHdvbid0IGluIGZ1dHVyZS4KKworICAgICAgICAqIHN2Zy9jdXN0b20vcGVu
ZGluZy1yZXNvdXJjZS1sZWFrLTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcv
Y3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLnN2ZzogQWRkZWQuCisgICAgICAgICogc3Zn
L2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHN2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTMuc3ZnOiBBZGRlZC4KKyAg
ICAgICAgKiBzdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLnN2ZzogQWRk
ZWQuCisKIDIwMTEtMDUtMDEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0yLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNv
dXJjZS1sZWFrLTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1Ro
aXMgc2hvdWxkIG5vdCBsZWFrCisKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGlu
Zy1yZXNvdXJjZS1sZWFrLTIuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0
b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstMi5zdmcJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8
c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CisgICAgPHNjcmlwdD4KKyAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZWN0
Iikuc2V0QXR0cmlidXRlKCJmaWxsIiwgICJncmVlbiIpOworICAgICAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0sIDApOworICAgIDwvc2NyaXB0PgorICAgIDx0
ZXh0IHg9IjAiIHk9IjcwIj5UaGlzIHNob3VsZCBub3QgbGVhazwvdGV4dD4KKyAgICA8cmVjdCB3
aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9InVybCgjZm9vKSIgaWQ9InJlY3QiLz4KKzwvc3Zn
PgorCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVzb3VyY2UtbGVhay0z
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRp
bmctcmVzb3VyY2UtbGVhay0zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoaXMgc2hvdWxkIG5vdCBsZWFrCisKSW5kZXg6IExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTMuc3ZnCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLTMuc3Zn
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5kaW5nLXJlc291cmNl
LWxlYWstMy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyI+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
ICAgICB9CisKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZWN0Iikuc2V0QXR0cmlidXRlKCJmaWxsIiwgICJ1cmwo
I2JhcikiKTsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICB9LCAwKTsKKyAgICA8L3NjcmlwdD4KKyAgICA8dGV4dCB4PSIwIiB5PSI3MCI+VGhpcyBzaG91
bGQgbm90IGxlYWs8L3RleHQ+CisgICAgPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiBmaWxs
PSJ1cmwoI2ZvbykiIGlkPSJyZWN0Ii8+Cis8L3N2Zz4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWstZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJjZS1sZWFrLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGVuZGluZy1yZXNvdXJj
ZS1sZWFrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitUaGlzIHNo
b3VsZCBub3QgbGVhaworCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BlbmRpbmctcmVz
b3VyY2UtbGVhay5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wZW5k
aW5nLXJlc291cmNlLWxlYWsuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1
c3RvbS9wZW5kaW5nLXJlc291cmNlLWxlYWsuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHN2ZyB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgPC9zY3JpcHQ+CisgICAgPHRleHQgeD0iMCIgeT0iNzAi
PlRoaXMgc2hvdWxkIG5vdCBsZWFrPC90ZXh0PgorICAgIDxyZWN0IHdpZHRoPSI1MCIgaGVpZ2h0
PSI1MCIgZmlsbD0idXJsKCNmb28pIiBpZD0icmVjdCIvPgorPC9zdmc+CisK
</data>
<flag name="review"
          id="84705"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>