<?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>32848</bug_id>
          
          <creation_ts>2009-12-21 19:34:32 -0800</creation_ts>
          <short_desc>Avoid reloading iframe on re-parenting between documents.</short_desc>
          <delta_ts>2022-04-25 17:39:33 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Dmitry Titov">dimich</assigned_to>
          <cc>aldon.mackie</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>ian</cc>
    
    <cc>levin</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>174157</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-12-21 19:34:32 -0800</bug_when>
    <thetext>As a follow-up to SharedScript discussion, we need to implement a behavior change for iframe to address the use cases requiring passing &apos;hot&apos; content between windows and frames.

Today, when iframe is removed from the tree of one document and appended to the tree of another, the content gets unloaded and loaded again, onload handlers fire, timers and XHRs get killed etc. This behavior is not specified anywhere in the HTML5 spec though and therefore making iframe to skip reloading was proposed as a replacement to more intrusive SharedScript.

However, just making iframe keep active state after removing from the tree is bound to cause backward compatibility issues (quick test indicates about two dozen layout tests fail/crash). One way to narrow down the effect of the change is to only keep the content of iframe alive when it is explicitly moved from one document to another using docment.adoptNode() API, for example, to move iframe from document1 to document2:

document2.adoptNode(iframe); // This does removeChild() internally but does not unload content.
document2.body.appendChild(iframe);

The implementation plan is to set a flag in adoptNode() on the iframe if the passed node is an iframe. This flag will prevent the iframe from unloading during internal removeChild() and then cause to skip loading during appendChild(). Once attached to another document&apos;s tree, the protection bit is reset. This way, the regular operations on the tree would have old behavior while only the sequence including adoptNode() directly on iframe element would behave different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174344</commentid>
    <comment_count>1</comment_count>
      <attachid>45399</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-12-22 13:02:44 -0800</bug_when>
    <thetext>Created attachment 45399
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174345</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-22 13:06:14 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45399 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174355</commentid>
    <comment_count>3</comment_count>
      <attachid>45399</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-22 13:18:23 -0800</bug_when>
    <thetext>Comment on attachment 45399
Proposed patch.

What happens in the case where the frame is removed added back into another document, but it&apos;s a document that is not rendered and so attach is never called? Specifically, we should have a test case where we adopt the node into a document loaded by XMLHttpRequest.

I suggest having keepAliveOnRemovalFromTree() be protected rather than public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174387</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-12-22 14:16:06 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 45399 [details])
&gt; What happens in the case where the frame is removed added back into another
&gt; document, but it&apos;s a document that is not rendered and so attach is never
&gt; called? Specifically, we should have a test case where we adopt the node into a
&gt; document loaded by XMLHttpRequest.

Good point. My first thought would be we don&apos;t want the iframe to be alive when it&apos;s adopted into a document that is not rendered, because it&apos;s unclear how to support things requiring UI, like http authentication dialog etc. Will add a check and a test.

&gt; 
&gt; I suggest having keepAliveOnRemovalFromTree() be protected rather than public.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174519</commentid>
    <comment_count>5</comment_count>
      <attachid>45416</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-12-22 20:52:03 -0800</bug_when>
    <thetext>Created attachment 45416
Proposed patch, v2.

1. Added check for document being &apos;attached()&apos;, and added a test where document loaded by XMLHttpRequest is used to adopt the iframe, verifying that iframe still unloads in this scenario.
2. Moved keepAliveOnRemovalFromTree() to &apos;protected&apos; from &apos;public&apos;.
3. Added a one-shot timer that makes sure that if script did adoptNode() but did not added the iframe into the tree, the iframe gets unloaded - to avoid active content running in non-attached iframe. This can cause more issues and memory leaks.

I think enabling live iframe reparenting opens up some space for issues - for example, I think the frame tree is not maintained right and other issues perhaps are still to be discovered once the active reparenting is actually used. It might be easier and faster to move step by step so if this patch is reasonable then I&apos;d add more tests and fixes in separate patches, to keep things smaller. Obviously, one thing to look for would be compatibility issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174520</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-22 20:54:42 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45416 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174734</commentid>
    <comment_count>7</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-12-23 22:02:17 -0800</bug_when>
    <thetext>It would be funny if this bug was addressed and bug 13574 wasn’t. Is there a reason to prevent unloading only in the inter-document case and not in the intra-document case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174780</commentid>
    <comment_count>8</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-12-24 09:41:29 -0800</bug_when>
    <thetext>What if we exposed something to the DOM that allowed iframes to render when not appended to the DOM, e.g. a rendersWhenOrphaned attribute that defaults to false? This would allow both the inter-document and intra-document cases to work, but it would also allow apps to preload iframes before appending them to the DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174837</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-12-24 19:27:12 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; It would be funny if this bug was addressed and bug 13574 wasn’t. Is there a
&gt; reason to prevent unloading only in the inter-document case and not in the
&gt; intra-document case?

No reason other then this is a change in behavior that shipped long ago and is the same in FF. Chances are changing this behavior will have compat issues. It makes sense to move step by step and first limit the behavior change to adoptNode()/appendChild() case, since it lets play with the feature, write tests, find and fix bugs without exposing it too much. Note intra-document cases also are covered by adoptNode(). I think &apos;atomic&apos; reparenting by a single appendChild() etc can be easily enabled later, I&apos;d like to have &apos;live iframe&apos; more mature when it happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177007</commentid>
    <comment_count>10</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-01-04 20:28:49 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; What if we exposed something to the DOM that allowed iframes to render when not
&gt; appended to the DOM, e.g. a rendersWhenOrphaned attribute that defaults to
&gt; false? This would allow both the inter-document and intra-document cases to
&gt; work, but it would also allow apps to preload iframes before appending them to
&gt; the DOM.

It seems adding such a property is similar to having SharedScript, but with added burden of visual aspect of the page (layout, JS queries of computed values etc). If there is a &apos;mode&apos; of iframe when it&apos;s always alive, even while not attached to a tree of a rendering document, then there is much bigger surface to define/spec/implement etc. Examples are layout size, UI features like alert() and auth, etc. The SharedScript was an attempt to have a much simpler, JS-only context to run &apos;orphaned&apos;, or independently - to avoid this kind of issues. The current idea is to have the iframe to survive &apos;atomic reparenting&apos; - when the iframe is re-attached into another (or same) document by means of a single appendChild() or a combination of adoptNode()/appendChild() in a single &apos;run&apos; of JS, which in current single-threaded DOM implementations is practically &apos;atomic&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178476</commentid>
    <comment_count>11</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-01-07 18:14:26 -0800</bug_when>
    <thetext>&apos;demo page&apos; for the feature: http://figushki.com/test/magic-iframe/main.html

The page loads iframe and starts a timer in it. Clicking &apos;reparent magic iframe&apos; button does adoptNode/appendChild. Currently in FF and WebKit, it reloads the iframe. After the patch, it keeps the timer ticking (and XHR loading) after re-parenting.

Interesting, IE does not have adoptNode(), and does not allow moving iframe between documents (appendChild throws exception), which I think reduces compat risk surface even more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178676</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-01-08 08:00:46 -0800</bug_when>
    <thetext>Nice domain name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183752</commentid>
    <comment_count>13</comment_count>
      <attachid>45416</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-22 12:32:12 -0800</bug_when>
    <thetext>Comment on attachment 45416
Proposed patch, v2.

So far I&apos;ve focused on the WebCore code and not the test code but I&apos;ll look at the test more soon. Just wanted to send this feedback along first.


&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; +2009-12-22  Dmitry Titov  &lt;dimich@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Avoid reloading iframe on re-parenting between documents.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=32848

Nice to have a blank line here. (I always see that information like a title.)


&gt; diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
&gt; +            if (source-&gt;hasTagName(iframeTag) &amp;&amp; attached())
&gt; +                static_cast&lt;HTMLIFrameElement*&gt;(source.get())-&gt;setKeepAliveOnRemovalFromTree(true);

Shouldn&apos;t this be:

            if (source-&gt;hasTagName(iframeTag))
                static_cast&lt;HTMLIFrameElement*&gt;(source.get())-&gt;setKeepAliveOnRemovalFromTree(attached());

This handles the case of a node being adopted by an attached frame and then adopted by an unattached frame right after (maybe the test should be adjusted to cover this case as well?).


&gt; diff --git a/WebCore/html/HTMLFrameElementBase.cpp b/WebCore/html/HTMLFrameElementBase.cpp
&gt; +        if (!keepAliveOnRemovalFromTree())
&gt; +            queuePostAttachCallback(&amp;HTMLFrameElementBase::setNameAndOpenURLCallback, this);
&gt; +        setKeepAliveOnRemovalFromTree(false);

Why does this only get set to false inside of this if?


&gt; diff --git a/WebCore/html/HTMLFrameOwnerElement.cpp b/WebCore/html/HTMLFrameOwnerElement.cpp


&gt; +void HTMLFrameOwnerElement::setKeepAliveOnRemovalFromTree(bool value)
&gt; +{
&gt; +    m_keepAliveOnRemovalFromTree = value;
&gt; +
&gt; +    // There is a possibility that JS will do document.adoptNode() on this element but will not insert it into the tree. 
&gt; +    // Check asynchronously and unload the frame if needed.
&gt; +    if (value)
&gt; +        m_unloadTimer.startOneShot(0);

m_unloadTimer -- the name bothers me because it really is about checking to see if the Frame got attached.


&gt; +    else
&gt; +        m_unloadTimer.stop();
&gt; +}
&gt; +
&gt; +void HTMLFrameOwnerElement::detachTimerFired(Timer&lt;HTMLFrameOwnerElement&gt;*)
&gt; +{
&gt; +    if (attached())
&gt; +        return;
&gt; +    m_keepAliveOnRemovalFromTree = false;

It seems like this should be before the &quot;if&quot; to reset the value of m_keepAliveOnRemovalFromTree.

&gt; +    willRemove();
&gt; +}
&gt; +
&gt;  HTMLFrameOwnerElement::~HTMLFrameOwnerElement()
&gt;  {
&gt;      if (m_contentFrame)
&gt; diff --git a/WebCore/html/HTMLFrameOwnerElement.h b/WebCore/html/HTMLFrameOwnerElement.h
&gt;      SandboxFlags sandboxFlags() const { return m_sandboxFlags; }
&gt; -    
&gt; +    void setKeepAliveOnRemovalFromTree(bool);
&gt; +
&gt;  protected:
&gt;      HTMLFrameOwnerElement(const QualifiedName&amp; tagName, Document*);
&gt;  
&gt;      void setSandboxFlags(SandboxFlags);
&gt; -    
&gt; +
&gt; +    bool keepAliveOnRemovalFromTree() const { return m_keepAliveOnRemovalFromTree; }

I&apos;ve started considering how method names read when prefixed by the class name.

HTMLFrameOwnerElement keepAliveOnRemovalFromTree is ok, but

HTMLFrameOwnerElement remainsAliveWhenRemovedFromTree reads much better imo.



&gt;      Frame* m_contentFrame;
&gt;      SandboxFlags m_sandboxFlags;
&gt; +    Timer&lt;HTMLFrameOwnerElement&gt; m_unloadTimer;
&gt; +    bool m_keepAliveOnRemovalFromTree;

Consider moving the m_keepAliveOnRemovalFromTree to be right after the m_sandboxFlags (which is an int to help avoid possible padding holes on 64bit).

Actually I&apos;d recommend moving this stuff into WebCore/html/HTMLFrameElementBase.cpp if possible (and moving the bool by other bool&apos;s in there).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183844</commentid>
    <comment_count>14</comment_count>
      <attachid>47240</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-01-22 15:37:05 -0800</bug_when>
    <thetext>Created attachment 47240
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183846</commentid>
    <comment_count>15</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-01-22 15:42:17 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 45416 [details])
&gt; So far I&apos;ve focused on the WebCore code and not the test code but I&apos;ll look at
&gt; the test more soon. Just wanted to send this feedback along first.

Uploaded the updated patch, the test is the same, WebCore code updated.

&gt; &gt; +        Avoid reloading iframe on re-parenting between documents.
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=32848
&gt; 
&gt; Nice to have a blank line here. (I always see that information like a title.)

Added blank line.

&gt; &gt; +            if (source-&gt;hasTagName(iframeTag) &amp;&amp; attached())
&gt; &gt; +                static_cast&lt;HTMLIFrameElement*&gt;(source.get())-&gt;setKeepAliveOnRemovalFromTree(true);
&gt; 
&gt; Shouldn&apos;t this be:
&gt; 
&gt;             if (source-&gt;hasTagName(iframeTag))
&gt;                
&gt; static_cast&lt;HTMLIFrameElement*&gt;(source.get())-&gt;setKeepAliveOnRemovalFromTree(attached());
&gt; 
&gt; This handles the case of a node being adopted by an attached frame and then
&gt; adopted by an unattached frame right after (maybe the test should be adjusted
&gt; to cover this case as well?).

Good catch! Done.

&gt; &gt; diff --git a/WebCore/html/HTMLFrameElementBase.cpp b/WebCore/html/HTMLFrameElementBase.cpp
&gt; &gt; +        if (!keepAliveOnRemovalFromTree())
&gt; &gt; +            queuePostAttachCallback(&amp;HTMLFrameElementBase::setNameAndOpenURLCallback, this);
&gt; &gt; +        setKeepAliveOnRemovalFromTree(false);
&gt; 
&gt; Why does this only get set to false inside of this if?

Agree, moved outside.

&gt; &gt; +void HTMLFrameOwnerElement::setKeepAliveOnRemovalFromTree(bool value)
&gt; &gt; +{
&gt; &gt; +    m_keepAliveOnRemovalFromTree = value;
&gt; &gt; +
&gt; &gt; +    // There is a possibility that JS will do document.adoptNode() on this element but will not insert it into the tree. 
&gt; &gt; +    // Check asynchronously and unload the frame if needed.
&gt; &gt; +    if (value)
&gt; &gt; +        m_unloadTimer.startOneShot(0);
&gt; 
&gt; m_unloadTimer -- the name bothers me because it really is about checking to see
&gt; if the Frame got attached.

renamed to checkAttachTimer. Perhaps this is better.

HTMLFrameOwnerElement::detachTimerFired(Timer&lt;HTMLFrameOwnerElement&gt;*)
&gt; &gt; +{
&gt; &gt; +    if (attached())
&gt; &gt; +        return;
&gt; &gt; +    m_keepAliveOnRemovalFromTree = false;
&gt; 
&gt; It seems like this should be before the &quot;if&quot; to reset the value of
&gt; m_keepAliveOnRemovalFromTree.

Re-wrote this. No need to check for attached(), actually - since timer only fires if attach() was not called. Added ASSERT(attached()) though.

&gt; &gt; +    bool keepAliveOnRemovalFromTree() const { return m_keepAliveOnRemovalFromTree; }
&gt; 
&gt; I&apos;ve started considering how method names read when prefixed by the class name.
&gt; 
&gt; HTMLFrameOwnerElement keepAliveOnRemovalFromTree is ok, but
&gt; 
&gt; HTMLFrameOwnerElement remainsAliveWhenRemovedFromTree reads much better imo.

Renamed.

&gt; Actually I&apos;d recommend moving this stuff into
&gt; WebCore/html/HTMLFrameElementBase.cpp if possible (and moving the bool by other
&gt; bool&apos;s in there).

Moved all the code to HTMLFrameElementBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183863</commentid>
    <comment_count>16</comment_count>
      <attachid>47240</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-22 16:12:07 -0800</bug_when>
    <thetext>Comment on attachment 47240
Patch v3

OK the js test looks fine. One nit below.

&gt; diff --git a/WebCore/html/HTMLFrameElementBase.cpp b/WebCore/html/HTMLFrameElementBase.cpp
&gt; @@ -50,8 +50,11 @@ HTMLFrameElementBase::HTMLFrameElementBase(const QualifiedName&amp; tagName, Documen
&gt;      , m_scrolling(ScrollbarAuto)
&gt;      , m_marginWidth(-1)
&gt;      , m_marginHeight(-1)
&gt; +    , m_checkAttachedTimer(this, &amp;HTMLFrameElementBase::checkAttachedTimerFired)
&gt;      , m_viewSource(false)
&gt;      , m_shouldOpenURLAfterAttach(false)
&gt; +    , m_remainsAliveOnRemovalFromTree(false)
&gt; +

Nit: Extra blank line here.


&gt; +void HTMLFrameElementBase::checkAttachedTimerFired(Timer&lt;HTMLFrameElementBase&gt;*)
&gt; +{
&gt; +    ASSERT(!attached());

Ah, so this enforces that setRemainsAliveOnRemovalFromTree is only called during a remove operation (and that attach cancels the timer) which seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184819</commentid>
    <comment_count>17</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-01-26 16:29:51 -0800</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/53871</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45399</attachid>
            <date>2009-12-22 13:02:44 -0800</date>
            <delta_ts>2009-12-22 20:52:03 -0800</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>11093</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkMTQ2NDkyLi4zZTAzODNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMTIt
MjIgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgcmVsb2FkaW5nIGlmcmFtZSBv
biByZS1wYXJlbnRpbmcgYmV0d2VlbiBkb2N1bWVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjg0OAorCisgICAgICAgICogZmFzdC9mcmFtZXMv
aWZyYW1lLXJlcGFyZW50aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9m
cmFtZXMvaWZyYW1lLXJlcGFyZW50aW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJh
bWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUxLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUyLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJl
bnRpbmctaWZyYW1lLWNvbnRlbnQuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMTcgIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBkaGNwLTE3Mi0yOC0xNzQtMjIwLnNwYi5jb3JwLmdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXJlcGFyZW50aW5nLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1yZXBhcmVudGluZy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3ZjgzNQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1yZXBhcmVudGluZy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwyNCBAQAorVGhpcyB0ZXN0IG1vdmVzIHRoZSBpZnJhbWUgYmV0d2VlbiB0
d28gZG9jdW1lbnRzIC0gb25jZSB1c2luZyB0aGlzIHNlcXVlbmNlOgorCisgICAgZG9jdW1lbnQx
LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTsKKyAgICBkb2N1bWVudDIuYm9keS5hcHBlbmRDaGls
ZChpZnJhbWUpOworCithbmQgdGhlbiB1c2luZyAnYWRvcHROb2RlJzoKKworICAgIGRvY3VtZW50
Mi5hZG9wdE5vZGUoaWZyYW1lKTsKKyAgICBkb2N1bWVudDIuYm9keS5hcHBlbmRDaGlsZChpZnJh
bWUpOworCitJbiB0aGUgc2Vjb25kIGNhc2UsIHRoZSBjb250ZW50IG9mIGlmcmFtZSBzaG91bGQg
bm90IGJlIHJlLWxvYWRlZCBhbmQgJ2xvYWQnIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQuIEFs
c28sIHRoZSB0aW1lciBzdGFydGVkIGJlZm9yZSByZXBhcmVudGluZyBzaG91bGQgc3Vydml2ZSB0
cmFuc2l0aW9uIGFuZCBmaXJlLgorCitUZXN0IHN1Y2NlZWRzIGlmIHRoZXJlIGFyZSAnUEFTUycg
bWVzc2FnZXMgYmVsb3cgYW5kIG5vICdGQUlMJyBtZXNzYWdlcy4KKworIAorUEFTUzogSWZyYW1l
IGxvYWRlZCwgdmVyaWZ5IHRva2VuLCBleHBlY3RlZDogbG9hZGVkLCBhY3R1YWw6IGxvYWRlZAor
UEFTUzogSWZyYW1lIHRva2VuIG1vZGlmaWVkLCBleHBlY3RlZDogbW9kaWZpZWQtMSwgYWN0dWFs
OiBtb2RpZmllZC0xCitSZXBhcmVudCBpZnJhbWUgLSB0aGUgY29udGVudCBzaG91bGQgcmUtbG9h
ZC4KK1BBU1M6IElmcmFtZSByZS1sb2FkZWQsIHZlcmlmeSB0b2tlbiwgZXhwZWN0ZWQ6IGxvYWRl
ZCwgYWN0dWFsOiBsb2FkZWQKK1BBU1M6IElmcmFtZSB0b2tlbiBtb2RpZmllZCwgZXhwZWN0ZWQ6
IG1vZGlmaWVkLTIsIGFjdHVhbDogbW9kaWZpZWQtMgorUmVwYXJlbnQgaWZyYW1lIHVzaW5nIGFk
b3B0Tm9kZSAtIHRoZSBjb250ZW50IHNob3VsZCBub3QgcmVsb2FkLgorUEFTUzogSWZyYW1lIHRv
a2VuIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBiZWZvcmUgcmVwYXJlbnRpbmcsIGV4cGVjdGVkOiBt
b2RpZmllZC0yLCBhY3R1YWw6IG1vZGlmaWVkLTIKK1Rlc3QgRmluaXNoZWQuCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1yZXBhcmVudGluZy5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXJlcGFyZW50aW5nLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmQwYzA5ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1yZXBhcmVudGluZy5odG1sCkBAIC0wLDAgKzEsODUg
QEAKKzxodG1sPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lclRleHQgKz0gbWVzc2FnZSArICJcbiI7Cit9
CisKK2Z1bmN0aW9uIHZlcmlmeVRva2VuKG1lc3NhZ2UsIGV4cGVjdGVkVG9rZW4pCit7CisgICAg
dmFyIGFjdHVhbFRva2VuID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cudG9rZW47CisgICAgbG9nKChl
eHBlY3RlZFRva2VuID09IGFjdHVhbFRva2VuID8gIlBBU1MiIDogIkZBSUwiKSArICI6ICIgKyBt
ZXNzYWdlICsgIiwgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFRva2VuICsgIiwgYWN0dWFsOiAiICsg
YWN0dWFsVG9rZW4pOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKyAgICBmcmFtZTEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhbWUxIik7Cisg
ICAgZnJhbWUyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lMiIpOworICAgIGlmcmFt
ZSA9IGZyYW1lMS5jb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlmcmFtZSIp
WzBdOworCisgICAgdmVyaWZ5VG9rZW4oIklmcmFtZSBsb2FkZWQsIHZlcmlmeSB0b2tlbiIsICJs
b2FkZWQiKTsKKyAgICBpZnJhbWUuY29udGVudFdpbmRvdy50b2tlbiA9ICJtb2RpZmllZC0xIjsK
KyAgICB2ZXJpZnlUb2tlbigiSWZyYW1lIHRva2VuIG1vZGlmaWVkIiwgIm1vZGlmaWVkLTEiKTsK
KworICAgIC8vIFN0YXJ0IHRpbWVvdXQgaW4gaWZyYW1lIC0gaXQgc2hvdWxkIG5vdCBzdXJ2aXZl
IHJlcGFyZW50aW5nLgorICAgIGlmcmFtZS5jb250ZW50V2luZG93LnN0YXJ0RG9vbWVkVGltZXIo
KTsKKyAgICBsb2coIlJlcGFyZW50IGlmcmFtZSAtIHRoZSBjb250ZW50IHNob3VsZCByZS1sb2Fk
LiIpCisgICAgZnJhbWUxLmNvbnRlbnREb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlmcmFtZSk7
CisgICAgZnJhbWUyLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7Cisg
ICAgaWZyYW1lLm9ubG9hZCA9IHRlc3QyOworfQorCitmdW5jdGlvbiB0ZXN0MigpCit7CisgICAg
dmVyaWZ5VG9rZW4oIklmcmFtZSByZS1sb2FkZWQsIHZlcmlmeSB0b2tlbiIsICJsb2FkZWQiKTsK
KyAgICBpZnJhbWUuY29udGVudFdpbmRvdy50b2tlbiA9ICJtb2RpZmllZC0yIjsKKyAgICB2ZXJp
ZnlUb2tlbigiSWZyYW1lIHRva2VuIG1vZGlmaWVkIiwgIm1vZGlmaWVkLTIiKTsKKworICAgIC8v
IFN0YXJ0IHRpbWVvdXQgaW4gaWZyYW1lIC0gaXQgc2hvdWxkIHN1cnZpdmUgcmVwYXJlbnRpbmcg
YW5kIGNhbGwgZmluaXNoKCkgdG8gZW5kIHRoZSB0ZXN0LgorICAgIGlmcmFtZS5jb250ZW50V2lu
ZG93LnN0YXJ0RmluaXNoVGltZXIoKTsKKyAgICBsb2coIlJlcGFyZW50IGlmcmFtZSB1c2luZyBh
ZG9wdE5vZGUgLSB0aGUgY29udGVudCBzaG91bGQgbm90IHJlbG9hZC4iKQorICAgIGZyYW1lMS5j
b250ZW50RG9jdW1lbnQuYWRvcHROb2RlKGlmcmFtZSk7CisgICAgZnJhbWUxLmNvbnRlbnREb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgaWZyYW1lLm9ubG9hZCA9IG5vdFJl
YWNoZWQ7Cit9CisKK25vdFJlYWNoZWQgPSBmdW5jdGlvbigpCit7CisgICAgbG9nKCJGQUlMOiBp
ZnJhbWUgc2hvdWxkIG5vdCBmaXJlICdsb2FkJyBldmVudCB3aGVuIHJlcGFyZW50ZWQgdXNpbmcg
J2Fkb3B0Tm9kZSciKTsKK30KKworZmluaXNoID0gZnVuY3Rpb24oKQoreworICAgIHZlcmlmeVRv
a2VuKCJJZnJhbWUgdG9rZW4gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGJlZm9yZSByZXBhcmVudGlu
ZyIsICJtb2RpZmllZC0yIik7CisKKyAgICBsb2coIlRlc3QgRmluaXNoZWQuIik7CisgICAgCisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworCit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD10ZXN0
KCk+Cis8cD5UaGlzIHRlc3QgbW92ZXMgdGhlIGlmcmFtZSBiZXR3ZWVuIHR3byBkb2N1bWVudHMg
LSBvbmNlIHVzaW5nIHRoaXMgc2VxdWVuY2U6PC9wPgorPHByZT4KKyAgICBkb2N1bWVudDEuYm9k
eS5yZW1vdmVDaGlsZChpZnJhbWUpOworICAgIGRvY3VtZW50Mi5ib2R5LmFwcGVuZENoaWxkKGlm
cmFtZSk7CisKKzwvcHJlPgorPHA+YW5kIHRoZW4gdXNpbmcgJ2Fkb3B0Tm9kZSc6PC9wPgorPHBy
ZT4KKyAgICBkb2N1bWVudDIuYWRvcHROb2RlKGlmcmFtZSk7CisgICAgZG9jdW1lbnQyLmJvZHku
YXBwZW5kQ2hpbGQoaWZyYW1lKTsKKworPC9wcmU+Cis8cD5JbiB0aGUgc2Vjb25kIGNhc2UsIHRo
ZSBjb250ZW50IG9mIGlmcmFtZSBzaG91bGQgbm90IGJlIHJlLWxvYWRlZCBhbmQgJ2xvYWQnIGV2
ZW50IHNob3VsZCBub3QgYmUgZmlyZWQuIEFsc28sIHRoZSB0aW1lciBzdGFydGVkIGJlZm9yZSBy
ZXBhcmVudGluZyBzaG91bGQgc3Vydml2ZSB0cmFuc2l0aW9uIGFuZCBmaXJlLjwvcD4KKzxwPlRl
c3Qgc3VjY2VlZHMgaWYgdGhlcmUgYXJlICdQQVNTJyBtZXNzYWdlcyBiZWxvdyBhbmQgbm8gJ0ZB
SUwnIG1lc3NhZ2VzLjwvcD4KKzxpZnJhbWUgaWQ9ZnJhbWUxIHNyYz1yZXNvdXJjZXMvaWZyYW1l
LXJlcGFyZW50aW5nLWZyYW1lMS5odG1sPjwvaWZyYW1lPgorPGlmcmFtZSBpZD1mcmFtZTIgc3Jj
PXJlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUyLmh0bWw+PC9pZnJhbWU+Cis8cHJl
IGlkPWxvZz48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUxLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9yZXNvdXJjZXMvaWZyYW1lLXJlcGFyZW50aW5nLWZyYW1l
MS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjYzgxZWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9yZXNvdXJjZXMvaWZyYW1lLXJl
cGFyZW50aW5nLWZyYW1lMS5odG1sCkBAIC0wLDAgKzEsMiBAQAorPGJvZHk+Cis8aWZyYW1lIHNy
Yz1pZnJhbWUtcmVwYXJlbnRpbmctaWZyYW1lLWNvbnRlbnQuaHRtbD48L2lmcmFtZT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRp
bmctZnJhbWUyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9yZXNvdXJjZXMvaWZyYW1l
LXJlcGFyZW50aW5nLWZyYW1lMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAuLjFlOTUyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9y
ZXNvdXJjZXMvaWZyYW1lLXJlcGFyZW50aW5nLWZyYW1lMi5odG1sCkBAIC0wLDAgKzEgQEAKKzxi
b2R5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctaWZyYW1lLWNvbnRlbnQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRp
bmctaWZyYW1lLWNvbnRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw
Li4wMDY5ZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcmVz
b3VyY2VzL2lmcmFtZS1yZXBhcmVudGluZy1pZnJhbWUtY29udGVudC5odG1sCkBAIC0wLDAgKzEs
MjAgQEAKKzxzY3JpcHQ+Cit0b2tlbiA9ICJsb2FkaW5nIjsKKworZnVuY3Rpb24gaW5pdCgpCit7
IAorICAgIHRva2VuID0gImxvYWRlZCI7Cit9CisKK3N0YXJ0RmluaXNoVGltZXIgPSBmdW5jdGlv
bigpCit7CisgICAgc2V0VGltZW91dChwYXJlbnQucGFyZW50LmZpbmlzaCwgMCk7Cit9CisKK3N0
YXJ0RG9vbWVkVGltZXIgPSBmdW5jdGlvbigpCit7CisgICAgc2V0VGltZW91dChwYXJlbnQucGFy
ZW50Lm5vdFJlYWNoZWQsIDApOworfQorCis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD1pbml0KCk+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmN2YzYzlmLi45ODdkNjhmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1
IEBACisyMDA5LTEyLTIyICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2b2lkIHJlbG9h
ZGluZyBpZnJhbWUgb24gcmUtcGFyZW50aW5nIGJldHdlZW4gZG9jdW1lbnRzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI4NDgKKyAgICAgICAgQWNo
aWV2ZWQgYnkgc2V0dGluZyBhIGZsYWcgb24gaWZyYW1lIGVsZW1lbnQgd2hlbiBpdCBpcyBhIHRh
cmdldCBvZiBkb2N1bWVudC5hZG9wdE5vZGUobm9kZSkgb3BlcmF0aW9uLgorICAgICAgICBUaGUg
ZmxhZyBwcmV2ZW50cyB1bmxvYWQvbG9hZCBjeWNsZSBhbmQgaXMgcmVzZXQgb25jZSBlbGVtZW50
IGlzIGF0dGFjaGVkIHRvIGEgbmV3IGRvY3VtZW50LgorCisgICAgICAgIFRlc3Q6IGZhc3QvZnJh
bWVzL2lmcmFtZS1yZXBhcmVudGluZy5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkb3B0Tm9kZSk6IElmIHRoZSBhZG9wdGVk
IG5vZGUgaXMgaWZyYW1lLCBzZXQgYSBmbGFnIG9uIGl0IHRvIGtlZXAgaXQgYWxpdmUgdW50aWwg
aXQgYXR0YWNoZWQgYWdhaW4uCisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6YXR0YWNoKTogU2tp
cCBhY3R1YWwgbG9hZGluZyBvZiB0aGUgZnJhbWUgaWYgaXQgaGFzIGtlZXBBbGl2ZU9uUmVtb3Zh
bEZyb21UcmVlIGZsYWcuIFJlc2V0IHRoZSBmbGFnLgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1l
T3duZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVu
dDo6SFRNTEZyYW1lT3duZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93
bmVyRWxlbWVudDo6d2lsbFJlbW92ZSk6IFNraXAgdW5sb2FkaW5nIHRoZSBmcmFtZSBpZiB0aSBo
YXMga2VlcEFsaXZlT25SZW1vdmFsRnJvbVRyZWUgZmxhZyBzZXQuCisgICAgICAgICogaHRtbC9I
VE1MRnJhbWVPd25lckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVy
RWxlbWVudDo6a2VlcEFsaXZlT25SZW1vdmFsRnJvbVRyZWUpOiBOZXcgZmxhZy4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6c2V0S2VlcEFsaXZlT25SZW1vdmFsRnJv
bVRyZWUpOiBEaXR0by4KKwogMjAwOS0xMi0xNyAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRl
eCAyOTI2ODcyLi4wM2NlNmRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
KysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElGcmFtZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExp
bmtFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKQEAgLTc2MCw2ICs3NjEs
OSBAQCBQYXNzUmVmUHRyPE5vZGU+IERvY3VtZW50OjphZG9wdE5vZGUoUGFzc1JlZlB0cjxOb2Rl
PiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0gICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoc291cmNlLT5oYXNU
YWdOYW1lKGlmcmFtZVRhZykpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnQqPihzb3VyY2UuZ2V0KCkpLT5zZXRLZWVwQWxpdmVPblJlbW92YWxGcm9tVHJlZSh0
cnVlKTsKKwogICAgICAgICAgICAgaWYgKHNvdXJjZS0+cGFyZW50Tm9kZSgpKQogICAgICAgICAg
ICAgICAgIHNvdXJjZS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChzb3VyY2UuZ2V0KCksIGVj
KTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2Uu
Y3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAppbmRleCA4MGRmODI5
Li42ZDA2Y2U5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2Uu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKQEAgLTE4Niw3
ICsxODYsOSBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjphdHRhY2goKQogewogICAgIGlm
IChtX3Nob3VsZE9wZW5VUkxBZnRlckF0dGFjaCkgewogICAgICAgICBtX3Nob3VsZE9wZW5VUkxB
ZnRlckF0dGFjaCA9IGZhbHNlOwotICAgICAgICBxdWV1ZVBvc3RBdHRhY2hDYWxsYmFjaygmSFRN
TEZyYW1lRWxlbWVudEJhc2U6OnNldE5hbWVBbmRPcGVuVVJMQ2FsbGJhY2ssIHRoaXMpOworICAg
ICAgICBpZiAoIWtlZXBBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlKCkpCisgICAgICAgICAgICBxdWV1
ZVBvc3RBdHRhY2hDYWxsYmFjaygmSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldE5hbWVBbmRPcGVu
VVJMQ2FsbGJhY2ssIHRoaXMpOworICAgICAgICBzZXRLZWVwQWxpdmVPblJlbW92YWxGcm9tVHJl
ZShmYWxzZSk7CiAgICAgfQogCiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50OjphdHRhY2goKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwIGIvV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKaW5kZXggNzU5OGRhMi4uMTZkNDUz
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKQEAgLTM2LDExICszNiwx
NSBAQCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OkhUTUxGcmFtZU93bmVyRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQsIENyZWF0ZUVsZW1lbnQpCiAgICAgLCBtX2NvbnRlbnRGcmFtZSgwKQogICAgICwg
bV9zYW5kYm94RmxhZ3MoU2FuZGJveE5vbmUpCisgICAgLCBtX2tlZXBBbGl2ZU9uUmVtb3ZhbEZy
b21UcmVlKGZhbHNlKQogewogfQogCiB2b2lkIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6d2lsbFJl
bW92ZSgpCiB7CisgICAgaWYgKGtlZXBBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlKCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb250ZW50RnJhbWUoKSkgewogICAg
ICAgICBmcmFtZS0+ZGlzY29ubmVjdE93bmVyRWxlbWVudCgpOwogICAgICAgICBmcmFtZS0+bG9h
ZGVyKCktPmZyYW1lRGV0YWNoZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRnJh
bWVPd25lckVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaApp
bmRleCAzMDhhMTAwLi5mY2I3NDljIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
T3duZXJFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5o
CkBAIC00OCw3ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JvbGxiYXJNb2RlIHNj
cm9sbGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBTY3JvbGxiYXJBdXRvOyB9CiAKICAgICBTYW5k
Ym94RmxhZ3Mgc2FuZGJveEZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zYW5kYm94RmxhZ3M7IH0K
LSAgICAKKworICAgIGJvb2wga2VlcEFsaXZlT25SZW1vdmFsRnJvbVRyZWUoKSBjb25zdCB7IHJl
dHVybiBtX2tlZXBBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlOyB9CisgICAgdm9pZCBzZXRLZWVwQWxp
dmVPblJlbW92YWxGcm9tVHJlZShib29sIHZhbHVlKSB7IG1fa2VlcEFsaXZlT25SZW1vdmFsRnJv
bVRyZWUgPSB2YWx1ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAKQEAgLTY0LDYgKzY3
LDcgQEAgcHJpdmF0ZToKIAogICAgIEZyYW1lKiBtX2NvbnRlbnRGcmFtZTsKICAgICBTYW5kYm94
RmxhZ3MgbV9zYW5kYm94RmxhZ3M7CisgICAgYm9vbCBtX2tlZXBBbGl2ZU9uUmVtb3ZhbEZyb21U
cmVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="commit-queue"
          id="27427"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45416</attachid>
            <date>2009-12-22 20:52:03 -0800</date>
            <delta_ts>2010-01-22 15:37:05 -0800</delta_ts>
            <desc>Proposed patch, v2.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>14036</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkMTQ2NDkyLi4zZTAzODNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMTIt
MjIgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgcmVsb2FkaW5nIGlmcmFtZSBv
biByZS1wYXJlbnRpbmcgYmV0d2VlbiBkb2N1bWVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjg0OAorCisgICAgICAgICogZmFzdC9mcmFtZXMv
aWZyYW1lLXJlcGFyZW50aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9m
cmFtZXMvaWZyYW1lLXJlcGFyZW50aW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJh
bWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUxLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUyLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJl
bnRpbmctaWZyYW1lLWNvbnRlbnQuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMTcgIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBkaGNwLTE3Mi0yOC0xNzQtMjIwLnNwYi5jb3JwLmdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXJlcGFyZW50aW5nLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1yZXBhcmVudGluZy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwYTk4YgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1yZXBhcmVudGluZy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzMCBAQAorVGhpcyB0ZXN0IG1vdmVzIHRoZSBpZnJhbWUgYmV0d2VlbiB0
d28gZG9jdW1lbnRzIC0gb25jZSB1c2luZyB0aGlzIHNlcXVlbmNlOgorCisgICAgZG9jdW1lbnQx
LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTsKKyAgICBkb2N1bWVudDIuYm9keS5hcHBlbmRDaGls
ZChpZnJhbWUpOworCithbmQgdGhlbiB1c2luZyAnYWRvcHROb2RlJzoKKworICAgIGRvY3VtZW50
Mi5hZG9wdE5vZGUoaWZyYW1lKTsKKyAgICBkb2N1bWVudDIuYm9keS5hcHBlbmRDaGlsZChpZnJh
bWUpOworCitJbiB0aGUgc2Vjb25kIGNhc2UsIHRoZSBjb250ZW50IG9mIGlmcmFtZSBzaG91bGQg
bm90IGJlIHJlLWxvYWRlZCBhbmQgJ2xvYWQnIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQuIEFs
c28sIHRoZSB0aW1lciBzdGFydGVkIGJlZm9yZSByZXBhcmVudGluZyBzaG91bGQgc3Vydml2ZSB0
cmFuc2l0aW9uIGFuZCBmaXJlLgorCitUZXN0IGFsc28gdmVyaWZpZXMgdGhhdCBkb2N1bWVudC5h
ZG9wdE5vZGUoKSBpbiBjYXNlIG9mIG5vdC1yZW5kZXJlZCBkb2N1bWVudCAobG9hZGVkIGJ5IFhN
TEh0dHBSZXF1ZXN0KSBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgY29udGVudCBvZiBpZnJhbWUuCisK
K1Rlc3Qgc3VjY2VlZHMgaWYgdGhlcmUgYXJlICdQQVNTJyBtZXNzYWdlcyBiZWxvdyBhbmQgbm8g
J0ZBSUwnIG1lc3NhZ2VzLgorCisgCitQQVNTOiBJZnJhbWUgbG9hZGVkLCB2ZXJpZnkgdG9rZW4s
IGV4cGVjdGVkOiBsb2FkZWQsIGFjdHVhbDogbG9hZGVkCitQQVNTOiBJZnJhbWUgdG9rZW4gbW9k
aWZpZWQsIGV4cGVjdGVkOiBtb2RpZmllZC0xLCBhY3R1YWw6IG1vZGlmaWVkLTEKK1JlcGFyZW50
IGlmcmFtZSAtIHRoZSBjb250ZW50IHNob3VsZCByZS1sb2FkLgorUEFTUzogaWZyYW1lIGlzIHVu
bG9hZGVkLgorUEFTUzogSWZyYW1lIHJlLWxvYWRlZCwgdmVyaWZ5IHRva2VuLCBleHBlY3RlZDog
bG9hZGVkLCBhY3R1YWw6IGxvYWRlZAorUEFTUzogSWZyYW1lIHRva2VuIG1vZGlmaWVkLCBleHBl
Y3RlZDogbW9kaWZpZWQtMiwgYWN0dWFsOiBtb2RpZmllZC0yCitSZXBhcmVudCBpZnJhbWUgdXNp
bmcgYWRvcHROb2RlIC0gdGhlIGNvbnRlbnQgc2hvdWxkIG5vdCB1bmxvYWQuCitQQVNTOiBpZnJh
bWUgaXMgTk9UIHVubG9hZGVkLgorUEFTUzogSWZyYW1lIHRva2VuIHNob3VsZCBiZSB0aGUgc2Ft
ZSBhcyBiZWZvcmUgcmVwYXJlbnRpbmcsIGV4cGVjdGVkOiBtb2RpZmllZC0yLCBhY3R1YWw6IG1v
ZGlmaWVkLTIKK1BBU1M6IFhIUi1sb2FkZWQgRG9jdW1lbnQgaXMgY29ycmVjdC4KK1BBU1M6IGlm
cmFtZSBpcyB1bmxvYWRlZC4KK1Rlc3QgRmluaXNoZWQuCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZnJhbWVzL2lmcmFtZS1yZXBhcmVudGluZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9mcmFtZXMvaWZyYW1lLXJlcGFyZW50aW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uZWMxYjViYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZnJhbWVzL2lmcmFtZS1yZXBhcmVudGluZy5odG1sCkBAIC0wLDAgKzEsMTAzIEBACis8aHRtbD4K
KzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibG9nIikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOworfQorCitmdW5jdGlv
biB2ZXJpZnlUb2tlbihtZXNzYWdlLCBleHBlY3RlZFRva2VuKQoreworICAgIHZhciBhY3R1YWxU
b2tlbiA9IGlmcmFtZS5jb250ZW50V2luZG93LnRva2VuOworICAgIGxvZygoZXhwZWN0ZWRUb2tl
biA9PSBhY3R1YWxUb2tlbiA/ICJQQVNTIiA6ICJGQUlMIikgKyAiOiAiICsgbWVzc2FnZSArICIs
IGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRUb2tlbiArICIsIGFjdHVhbDogIiArIGFjdHVhbFRva2Vu
KTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAg
ICBmcmFtZTEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhbWUxIik7CisgICAgZnJhbWUy
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lMiIpOworICAgIGlmcmFtZSA9IGZyYW1l
MS5jb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlmcmFtZSIpWzBdOworCisg
ICAgdmVyaWZ5VG9rZW4oIklmcmFtZSBsb2FkZWQsIHZlcmlmeSB0b2tlbiIsICJsb2FkZWQiKTsK
KyAgICBpZnJhbWUuY29udGVudFdpbmRvdy50b2tlbiA9ICJtb2RpZmllZC0xIjsKKyAgICB2ZXJp
ZnlUb2tlbigiSWZyYW1lIHRva2VuIG1vZGlmaWVkIiwgIm1vZGlmaWVkLTEiKTsKKworICAgIC8v
IFN0YXJ0IHRpbWVvdXQgaW4gaWZyYW1lIC0gaXQgc2hvdWxkIG5vdCBzdXJ2aXZlIHJlcGFyZW50
aW5nLgorICAgIGlmcmFtZS5jb250ZW50V2luZG93LnN0YXJ0RG9vbWVkVGltZXIoKTsKKyAgICBs
b2coIlJlcGFyZW50IGlmcmFtZSAtIHRoZSBjb250ZW50IHNob3VsZCByZS1sb2FkLiIpCisgICAg
ZnJhbWUxLmNvbnRlbnREb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlmcmFtZSk7CisgICAgLy8g
Y29udGVudFdpbmRvdyBzaG91bGQgbm90IGJlIGF2YWlsYWJsZSwgdGhlIGlmcmFtZSBpcyB1bmxv
YWRlZC4KKyAgICBsb2coaWZyYW1lLmNvbnRlbnRXaW5kb3cgPyAiRkFJTDogaWZyYW1lIGlzIG5v
dCB1bmxvYWRlZC4iIDogIlBBU1M6IGlmcmFtZSBpcyB1bmxvYWRlZC4iKTsKKyAgICBmcmFtZTIu
Y29udGVudERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICBpZnJhbWUub25s
b2FkID0gdGVzdDI7Cit9CisKK2Z1bmN0aW9uIHRlc3QyKCkKK3sKKyAgICB2ZXJpZnlUb2tlbigi
SWZyYW1lIHJlLWxvYWRlZCwgdmVyaWZ5IHRva2VuIiwgImxvYWRlZCIpOworICAgIGlmcmFtZS5j
b250ZW50V2luZG93LnRva2VuID0gIm1vZGlmaWVkLTIiOworICAgIHZlcmlmeVRva2VuKCJJZnJh
bWUgdG9rZW4gbW9kaWZpZWQiLCAibW9kaWZpZWQtMiIpOworCisgICAgLy8gU3RhcnQgdGltZW91
dCBpbiBpZnJhbWUgLSBpdCBzaG91bGQgc3Vydml2ZSByZXBhcmVudGluZyBhbmQgY2FsbCBmaW5p
c2goKSB0byBlbmQgdGhlIHRlc3QuCisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cuc3RhcnRGaW5p
c2hUaW1lcigpOworICAgIGxvZygiUmVwYXJlbnQgaWZyYW1lIHVzaW5nIGFkb3B0Tm9kZSAtIHRo
ZSBjb250ZW50IHNob3VsZCBub3QgdW5sb2FkLiIpCisgICAgZnJhbWUxLmNvbnRlbnREb2N1bWVu
dC5hZG9wdE5vZGUoaWZyYW1lKTsKKyAgICBmcmFtZTEuY29udGVudERvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICAvLyBjb250ZW50V2luZG93IHNob3VsZCBiZSBhdmFpbGFi
bGUsIHRoZSBpZnJhbWUgaXMgbm90IHVubG9hZGVkLgorICAgIGxvZyhpZnJhbWUuY29udGVudFdp
bmRvdyA/ICJQQVNTOiBpZnJhbWUgaXMgTk9UIHVubG9hZGVkLiIgOiAiRkFJTDogaWZyYW1lIGlz
IHVubG9hZGVkLiIpOworICAgIGlmcmFtZS5vbmxvYWQgPSBub3RSZWFjaGVkOworfQorCitub3RS
ZWFjaGVkID0gZnVuY3Rpb24oKQoreworICAgIGxvZygiRkFJTDogaWZyYW1lIHNob3VsZCBub3Qg
ZmlyZSAnbG9hZCcgZXZlbnQgd2hlbiByZXBhcmVudGVkIHVzaW5nICdhZG9wdE5vZGUnIik7Cit9
CisKK2ZpbmlzaCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2ZXJpZnlUb2tlbigiSWZyYW1lIHRva2Vu
IHNob3VsZCBiZSB0aGUgc2FtZSBhcyBiZWZvcmUgcmVwYXJlbnRpbmciLCAibW9kaWZpZWQtMiIp
OworCisgICAgLy8gTGFzdCB0ZXN0IC0gdmVyaWZ5IHRoYXQgbm9uLWF0dGFjaGVkIGRvY3VtZW50
IGRvZXMgbm90IGtlZXAgaWZyYW1lIGFsaXZlIGV2ZW4gaWYgYWRvcHROb2RlKCkgaXMgdXNlZC4K
KyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIkdFVCIs
ImRhdGE6dGV4dC9odG1sLDxodG1sIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
Jz48Ym9keSBpZD0nYm9keSc+SGVsbG88L2JvZHk+PC9odG1sPiIsIGZhbHNlKTsKKyAgICB4aHIu
c2VuZChudWxsKTsKKyAgICB2YXIgZG9jID0geGhyLnJlc3BvbnNlWE1MOworICAgIGxvZyhkb2Mu
Z2V0RWxlbWVudEJ5SWQoImJvZHkiKS5pbm5lclRleHQgPT0gIkhlbGxvIiA/ICJQQVNTOiBYSFIt
bG9hZGVkIERvY3VtZW50IGlzIGNvcnJlY3QuIiA6ICJGQUlMOiBYSFItbG9hZGVkIGRvY3VtZW50
IGlzIG5vdCBjb3JyZWN0LiIpOworCisgICAgZG9jLmFkb3B0Tm9kZShpZnJhbWUpOworICAgIC8v
IGNvbnRlbnRXaW5kb3cgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGUsIHRoZSBpZnJhbWUgaXMgdW5s
b2FkZWQuCisgICAgbG9nKGlmcmFtZS5jb250ZW50V2luZG93ID8gIkZBSUw6IGlmcmFtZSBpcyBu
b3QgdW5sb2FkZWQuIiA6ICJQQVNTOiBpZnJhbWUgaXMgdW5sb2FkZWQuIik7CisKKyAgICBsb2co
IlRlc3QgRmluaXNoZWQuIik7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisKK30KKworPC9z
Y3JpcHQ+Cis8Ym9keSBvbmxvYWQ9dGVzdCgpPgorPHA+VGhpcyB0ZXN0IG1vdmVzIHRoZSBpZnJh
bWUgYmV0d2VlbiB0d28gZG9jdW1lbnRzIC0gb25jZSB1c2luZyB0aGlzIHNlcXVlbmNlOjwvcD4K
KzxwcmU+CisgICAgZG9jdW1lbnQxLmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTsKKyAgICBkb2N1
bWVudDIuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworCis8L3ByZT4KKzxwPmFuZCB0aGVuIHVz
aW5nICdhZG9wdE5vZGUnOjwvcD4KKzxwcmU+CisgICAgZG9jdW1lbnQyLmFkb3B0Tm9kZShpZnJh
bWUpOworICAgIGRvY3VtZW50Mi5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisKKzwvcHJlPgor
PHA+SW4gdGhlIHNlY29uZCBjYXNlLCB0aGUgY29udGVudCBvZiBpZnJhbWUgc2hvdWxkIG5vdCBi
ZSByZS1sb2FkZWQgYW5kICdsb2FkJyBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkLiBBbHNvLCB0
aGUgdGltZXIgc3RhcnRlZCBiZWZvcmUgcmVwYXJlbnRpbmcgc2hvdWxkIHN1cnZpdmUgdHJhbnNp
dGlvbiBhbmQgZmlyZS48L3A+Cis8cD5UZXN0IGFsc28gdmVyaWZpZXMgdGhhdCBkb2N1bWVudC5h
ZG9wdE5vZGUoKSBpbiBjYXNlIG9mIG5vdC1yZW5kZXJlZCBkb2N1bWVudCAobG9hZGVkIGJ5IFhN
TEh0dHBSZXF1ZXN0KSBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgY29udGVudCBvZiBpZnJhbWUuPC9w
PgorPHA+VGVzdCBzdWNjZWVkcyBpZiB0aGVyZSBhcmUgJ1BBU1MnIG1lc3NhZ2VzIGJlbG93IGFu
ZCBubyAnRkFJTCcgbWVzc2FnZXMuPC9wPgorPGlmcmFtZSBpZD1mcmFtZTEgc3JjPXJlc291cmNl
cy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUxLmh0bWw+PC9pZnJhbWU+Cis8aWZyYW1lIGlkPWZy
YW1lMiBzcmM9cmVzb3VyY2VzL2lmcmFtZS1yZXBhcmVudGluZy1mcmFtZTIuaHRtbD48L2lmcmFt
ZT4KKzxwcmUgaWQ9bG9nPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9mcmFtZXMvcmVzb3VyY2VzL2lmcmFtZS1yZXBhcmVudGluZy1mcmFtZTEu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRp
bmctZnJhbWUxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmNjODFl
ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc291cmNlcy9p
ZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUxLmh0bWwKQEAgLTAsMCArMSwyIEBACis8Ym9keT4KKzxp
ZnJhbWUgc3JjPWlmcmFtZS1yZXBhcmVudGluZy1pZnJhbWUtY29udGVudC5odG1sPjwvaWZyYW1l
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcmVzb3VyY2VzL2lmcmFtZS1y
ZXBhcmVudGluZy1mcmFtZTIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc291cmNl
cy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uMzM1ZWVjNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUyLmh0bWwKQEAgLTAsMCAr
MSBAQAorPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9yZXNvdXJj
ZXMvaWZyYW1lLXJlcGFyZW50aW5nLWlmcmFtZS1jb250ZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZyYW1lcy9yZXNvdXJjZXMvaWZyYW1lLXJlcGFyZW50aW5nLWlmcmFtZS1jb250ZW50Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTdhNTk3NAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJl
bnRpbmctaWZyYW1lLWNvbnRlbnQuaHRtbApAQCAtMCwwICsxLDIwIEBACis8c2NyaXB0PgordG9r
ZW4gPSAibG9hZGluZyI7CisKK2Z1bmN0aW9uIGluaXQoKQoreyAKKyAgICB0b2tlbiA9ICJsb2Fk
ZWQiOworfQorCitzdGFydEZpbmlzaFRpbWVyID0gZnVuY3Rpb24oKQoreworICAgIHNldFRpbWVv
dXQocGFyZW50LnBhcmVudC5maW5pc2gsIDApOworfQorCitzdGFydERvb21lZFRpbWVyID0gZnVu
Y3Rpb24oKQoreworICAgIHNldFRpbWVvdXQocGFyZW50LnBhcmVudC5ub3RSZWFjaGVkLCAwKTsK
K30KKworPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9aW5pdCgpPgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmN2YzYzlmLi4wMGE2MjgyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI4IEBACisyMDA5LTEyLTIyICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2
b2lkIHJlbG9hZGluZyBpZnJhbWUgb24gcmUtcGFyZW50aW5nIGJldHdlZW4gZG9jdW1lbnRzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI4NDgKKyAg
ICAgICAgQWNoaWV2ZWQgYnkgc2V0dGluZyBhIGZsYWcgb24gaWZyYW1lIGVsZW1lbnQgd2hlbiBp
dCBpcyBhIHRhcmdldCBvZiBkb2N1bWVudC5hZG9wdE5vZGUobm9kZSkgb3BlcmF0aW9uLgorICAg
ICAgICBUaGUgZmxhZyBwcmV2ZW50cyB1bmxvYWQvbG9hZCBjeWNsZSBhbmQgaXMgcmVzZXQgb25j
ZSBlbGVtZW50IGlzIGF0dGFjaGVkIHRvIGEgbmV3IGRvY3VtZW50LgorICAgICAgICBJZiBpZnJh
bWUgaXMgYWRvcHRlZCBidXQgbm90IGFjdHVhbGx5IGluc2VydGVkIGludG8gdGhlIHRyZWUsIGl0
IGdldHMgdW5sb2FkZWQgYnkgYXN5bmMgdGltZXIKKyAgICAgICAgb25jZSBKUyB5aWVsZHMsIHRv
IGF2b2lkIGhhdmluZyBhY3RpdmUgY29udGVudCBpbiBub24tYXR0YWNoZWQgaWZyYW1lLgorCisg
ICAgICAgIFRlc3Q6IGZhc3QvZnJhbWVzL2lmcmFtZS1yZXBhcmVudGluZy5odG1sCisKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkb3B0
Tm9kZSk6IElmIHRoZSBhZG9wdGVkIG5vZGUgaXMgaWZyYW1lLCBzZXQgYSBmbGFnIG9uIGl0IHRv
IGtlZXAgaXQgYWxpdmUgdW50aWwgaXQgYXR0YWNoZWQgYWdhaW4uCisgICAgICAgICogaHRtbC9I
VE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6YXR0YWNoKTogU2tpcCBhY3R1YWwgbG9hZGluZyBvZiB0aGUgZnJhbWUgaWYgaXQg
aGFzIGtlZXBBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlIGZsYWcuIFJlc2V0IHRoZSBmbGFnLgorICAg
ICAgICAqIGh0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6SFRNTEZyYW1lT3duZXJFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6d2lsbFJlbW92ZSk6IFNraXAgdW5sb2Fk
aW5nIHRoZSBmcmFtZSBpZiBpdCBoYXMga2VlcEFsaXZlT25SZW1vdmFsRnJvbVRyZWUgZmxhZyBz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNldEtlZXBBbGl2
ZU9uUmVtb3ZhbEZyb21UcmVlKTogU2V0IHRoZSBmbGFnLCBzdGFydCB0aGUgYXN5bmMgdGltZXIg
dG8gY2hlY2sgaWYgdGhlIGlmcmFtZSB3YXMgY29tcGxldGVseSByZXBhcmVudGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50OjpkZXRhY2hUaW1lckZpcmVkKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZyYW1lT3duZXJFbGVtZW50OjprZWVwQWxpdmVPblJlbW92YWxGcm9tVHJlZSk6IE5ldyBm
bGFnLgorCiAyMDA5LTEyLTE3ICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDI5MjY4NzIu
LmNkYmM5YmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlICJIVE1MRWxl
bWVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgpAQCAtNzYwLDYgKzc2MSw5IEBAIFBhc3NS
ZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6OmFkb3B0Tm9kZShQYXNzUmVmUHRyPE5vZGU+IHNvdXJjZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAK
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChzb3VyY2UtPmhhc1RhZ05hbWUoaWZy
YW1lVGFnKSAmJiBhdHRhY2hlZCgpKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJ
RnJhbWVFbGVtZW50Kj4oc291cmNlLmdldCgpKS0+c2V0S2VlcEFsaXZlT25SZW1vdmFsRnJvbVRy
ZWUodHJ1ZSk7CisKICAgICAgICAgICAgIGlmIChzb3VyY2UtPnBhcmVudE5vZGUoKSkKICAgICAg
ICAgICAgICAgICBzb3VyY2UtPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQoc291cmNlLmdldCgp
LCBlYyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRC
YXNlLmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKaW5kZXggODBk
ZjgyOS4uNmQwNmNlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRC
YXNlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCkBAIC0x
ODYsNyArMTg2LDkgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6YXR0YWNoKCkKIHsKICAg
ICBpZiAobV9zaG91bGRPcGVuVVJMQWZ0ZXJBdHRhY2gpIHsKICAgICAgICAgbV9zaG91bGRPcGVu
VVJMQWZ0ZXJBdHRhY2ggPSBmYWxzZTsKLSAgICAgICAgcXVldWVQb3N0QXR0YWNoQ2FsbGJhY2so
JkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXROYW1lQW5kT3BlblVSTENhbGxiYWNrLCB0aGlzKTsK
KyAgICAgICAgaWYgKCFrZWVwQWxpdmVPblJlbW92YWxGcm9tVHJlZSgpKQorICAgICAgICAgICAg
cXVldWVQb3N0QXR0YWNoQ2FsbGJhY2soJkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXROYW1lQW5k
T3BlblVSTENhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgc2V0S2VlcEFsaXZlT25SZW1vdmFsRnJv
bVRyZWUoZmFsc2UpOwogICAgIH0KIAogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6YXR0YWNo
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcCBi
L1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCmluZGV4IDc1OThkYTIuLmI4
N2VhMjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCkBAIC0zNiwxMSAr
MzYsMTYgQEAgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpIVE1MRnJhbWVPd25lckVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW0KICAgICA6IEhUTUxFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50LCBDcmVhdGVFbGVtZW50KQogICAgICwgbV9jb250ZW50RnJhbWUoMCkKICAg
ICAsIG1fc2FuZGJveEZsYWdzKFNhbmRib3hOb25lKQorICAgICwgbV91bmxvYWRUaW1lcih0aGlz
LCAmSFRNTEZyYW1lT3duZXJFbGVtZW50OjpkZXRhY2hUaW1lckZpcmVkKQorICAgICwgbV9rZWVw
QWxpdmVPblJlbW92YWxGcm9tVHJlZShmYWxzZSkKIHsKIH0KIAogdm9pZCBIVE1MRnJhbWVPd25l
ckVsZW1lbnQ6OndpbGxSZW1vdmUoKQogeworICAgIGlmIChrZWVwQWxpdmVPblJlbW92YWxGcm9t
VHJlZSgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29udGVu
dEZyYW1lKCkpIHsKICAgICAgICAgZnJhbWUtPmRpc2Nvbm5lY3RPd25lckVsZW1lbnQoKTsKICAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5mcmFtZURldGFjaGVkKCk7CkBAIC00OSw2ICs1NCwyNiBA
QCB2b2lkIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6d2lsbFJlbW92ZSgpCiAgICAgSFRNTEVsZW1l
bnQ6OndpbGxSZW1vdmUoKTsKIH0KIAordm9pZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNldEtl
ZXBBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlKGJvb2wgdmFsdWUpCit7CisgICAgbV9rZWVwQWxpdmVP
blJlbW92YWxGcm9tVHJlZSA9IHZhbHVlOworCisgICAgLy8gVGhlcmUgaXMgYSBwb3NzaWJpbGl0
eSB0aGF0IEpTIHdpbGwgZG8gZG9jdW1lbnQuYWRvcHROb2RlKCkgb24gdGhpcyBlbGVtZW50IGJ1
dCB3aWxsIG5vdCBpbnNlcnQgaXQgaW50byB0aGUgdHJlZS4gCisgICAgLy8gQ2hlY2sgYXN5bmNo
cm9ub3VzbHkgYW5kIHVubG9hZCB0aGUgZnJhbWUgaWYgbmVlZGVkLgorICAgIGlmICh2YWx1ZSkK
KyAgICAgICAgbV91bmxvYWRUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgZWxzZQorICAgICAg
ICBtX3VubG9hZFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6
OmRldGFjaFRpbWVyRmlyZWQoVGltZXI8SFRNTEZyYW1lT3duZXJFbGVtZW50PiopCit7CisgICAg
aWYgKGF0dGFjaGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2tlZXBBbGl2ZU9uUmVtb3Zh
bEZyb21UcmVlID0gZmFsc2U7CisgICAgd2lsbFJlbW92ZSgpOworfQorCiBIVE1MRnJhbWVPd25l
ckVsZW1lbnQ6On5IVE1MRnJhbWVPd25lckVsZW1lbnQoKQogewogICAgIGlmIChtX2NvbnRlbnRG
cmFtZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaCBi
L1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAppbmRleCAzMDhhMTAwLi4zZDM4
NDViIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJUaW1lci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDEy
ICs0OSwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JvbGxiYXJNb2RlIHNjcm9sbGluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBTY3JvbGxiYXJBdXRvOyB9CiAKICAgICBTYW5kYm94RmxhZ3Mg
c2FuZGJveEZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zYW5kYm94RmxhZ3M7IH0KLSAgICAKKyAg
ICB2b2lkIHNldEtlZXBBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlKGJvb2wpOworCiBwcm90ZWN0ZWQ6
CiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50Kik7CiAKICAgICB2b2lkIHNldFNhbmRib3hGbGFncyhTYW5kYm94RmxhZ3MpOwot
ICAgIAorCisgICAgYm9vbCBrZWVwQWxpdmVPblJlbW92YWxGcm9tVHJlZSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2VlcEFsaXZlT25SZW1vdmFsRnJvbVRyZWU7IH0KKwogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgRnJhbWU7CiAKQEAgLTYxLDkgKzY1LDEyIEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudEZyYW1lOyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsK
KyAgICB2b2lkIGRldGFjaFRpbWVyRmlyZWQoVGltZXI8SFRNTEZyYW1lT3duZXJFbGVtZW50Piop
OwogCiAgICAgRnJhbWUqIG1fY29udGVudEZyYW1lOwogICAgIFNhbmRib3hGbGFncyBtX3NhbmRi
b3hGbGFnczsKKyAgICBUaW1lcjxIVE1MRnJhbWVPd25lckVsZW1lbnQ+IG1fdW5sb2FkVGltZXI7
CisgICAgYm9vbCBtX2tlZXBBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="27457"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="27458"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47240</attachid>
            <date>2010-01-22 15:37:05 -0800</date>
            <delta_ts>2010-01-22 16:12:07 -0800</delta_ts>
            <desc>Patch v3</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>14594</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4MTI5YjI4Li43N2E1Mzg0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMTIt
MjIgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgcmVsb2FkaW5nIGlmcmFtZSBv
biByZS1wYXJlbnRpbmcgYmV0d2VlbiBkb2N1bWVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjg0OAorCisgICAgICAgICogZmFzdC9mcmFtZXMv
aWZyYW1lLXJlcGFyZW50aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9m
cmFtZXMvaWZyYW1lLXJlcGFyZW50aW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJh
bWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUxLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmctZnJhbWUyLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJl
bnRpbmctaWZyYW1lLWNvbnRlbnQuaHRtbDogQWRkZWQuCisKIDIwMTAtMDEtMjAgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1w
ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9p
ZnJhbWUtcmVwYXJlbnRpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMv
aWZyYW1lLXJlcGFyZW50aW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40MDBhOThiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
cmFtZXMvaWZyYW1lLXJlcGFyZW50aW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMwIEBACitU
aGlzIHRlc3QgbW92ZXMgdGhlIGlmcmFtZSBiZXR3ZWVuIHR3byBkb2N1bWVudHMgLSBvbmNlIHVz
aW5nIHRoaXMgc2VxdWVuY2U6CisKKyAgICBkb2N1bWVudDEuYm9keS5yZW1vdmVDaGlsZChpZnJh
bWUpOworICAgIGRvY3VtZW50Mi5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisKK2FuZCB0aGVu
IHVzaW5nICdhZG9wdE5vZGUnOgorCisgICAgZG9jdW1lbnQyLmFkb3B0Tm9kZShpZnJhbWUpOwor
ICAgIGRvY3VtZW50Mi5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisKK0luIHRoZSBzZWNvbmQg
Y2FzZSwgdGhlIGNvbnRlbnQgb2YgaWZyYW1lIHNob3VsZCBub3QgYmUgcmUtbG9hZGVkIGFuZCAn
bG9hZCcgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZC4gQWxzbywgdGhlIHRpbWVyIHN0YXJ0ZWQg
YmVmb3JlIHJlcGFyZW50aW5nIHNob3VsZCBzdXJ2aXZlIHRyYW5zaXRpb24gYW5kIGZpcmUuCisK
K1Rlc3QgYWxzbyB2ZXJpZmllcyB0aGF0IGRvY3VtZW50LmFkb3B0Tm9kZSgpIGluIGNhc2Ugb2Yg
bm90LXJlbmRlcmVkIGRvY3VtZW50IChsb2FkZWQgYnkgWE1MSHR0cFJlcXVlc3QpIGRvZXMgbm90
IHByZXNlcnZlIHRoZSBjb250ZW50IG9mIGlmcmFtZS4KKworVGVzdCBzdWNjZWVkcyBpZiB0aGVy
ZSBhcmUgJ1BBU1MnIG1lc3NhZ2VzIGJlbG93IGFuZCBubyAnRkFJTCcgbWVzc2FnZXMuCisKKyAK
K1BBU1M6IElmcmFtZSBsb2FkZWQsIHZlcmlmeSB0b2tlbiwgZXhwZWN0ZWQ6IGxvYWRlZCwgYWN0
dWFsOiBsb2FkZWQKK1BBU1M6IElmcmFtZSB0b2tlbiBtb2RpZmllZCwgZXhwZWN0ZWQ6IG1vZGlm
aWVkLTEsIGFjdHVhbDogbW9kaWZpZWQtMQorUmVwYXJlbnQgaWZyYW1lIC0gdGhlIGNvbnRlbnQg
c2hvdWxkIHJlLWxvYWQuCitQQVNTOiBpZnJhbWUgaXMgdW5sb2FkZWQuCitQQVNTOiBJZnJhbWUg
cmUtbG9hZGVkLCB2ZXJpZnkgdG9rZW4sIGV4cGVjdGVkOiBsb2FkZWQsIGFjdHVhbDogbG9hZGVk
CitQQVNTOiBJZnJhbWUgdG9rZW4gbW9kaWZpZWQsIGV4cGVjdGVkOiBtb2RpZmllZC0yLCBhY3R1
YWw6IG1vZGlmaWVkLTIKK1JlcGFyZW50IGlmcmFtZSB1c2luZyBhZG9wdE5vZGUgLSB0aGUgY29u
dGVudCBzaG91bGQgbm90IHVubG9hZC4KK1BBU1M6IGlmcmFtZSBpcyBOT1QgdW5sb2FkZWQuCitQ
QVNTOiBJZnJhbWUgdG9rZW4gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGJlZm9yZSByZXBhcmVudGlu
ZywgZXhwZWN0ZWQ6IG1vZGlmaWVkLTIsIGFjdHVhbDogbW9kaWZpZWQtMgorUEFTUzogWEhSLWxv
YWRlZCBEb2N1bWVudCBpcyBjb3JyZWN0LgorUEFTUzogaWZyYW1lIGlzIHVubG9hZGVkLgorVGVz
dCBGaW5pc2hlZC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1l
LXJlcGFyZW50aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9pZnJhbWUtcmVwYXJl
bnRpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYzFiNWJiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvaWZyYW1lLXJlcGFyZW50
aW5nLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzxodG1sPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxv
ZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lclRl
eHQgKz0gbWVzc2FnZSArICJcbiI7Cit9CisKK2Z1bmN0aW9uIHZlcmlmeVRva2VuKG1lc3NhZ2Us
IGV4cGVjdGVkVG9rZW4pCit7CisgICAgdmFyIGFjdHVhbFRva2VuID0gaWZyYW1lLmNvbnRlbnRX
aW5kb3cudG9rZW47CisgICAgbG9nKChleHBlY3RlZFRva2VuID09IGFjdHVhbFRva2VuID8gIlBB
U1MiIDogIkZBSUwiKSArICI6ICIgKyBtZXNzYWdlICsgIiwgZXhwZWN0ZWQ6ICIgKyBleHBlY3Rl
ZFRva2VuICsgIiwgYWN0dWFsOiAiICsgYWN0dWFsVG9rZW4pOworfQorCitmdW5jdGlvbiB0ZXN0
KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGZyYW1lMSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJmcmFtZTEiKTsKKyAgICBmcmFtZTIgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiZnJhbWUyIik7CisgICAgaWZyYW1lID0gZnJhbWUxLmNvbnRlbnREb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIilbMF07CisKKyAgICB2ZXJpZnlUb2tlbigiSWZyYW1l
IGxvYWRlZCwgdmVyaWZ5IHRva2VuIiwgImxvYWRlZCIpOworICAgIGlmcmFtZS5jb250ZW50V2lu
ZG93LnRva2VuID0gIm1vZGlmaWVkLTEiOworICAgIHZlcmlmeVRva2VuKCJJZnJhbWUgdG9rZW4g
bW9kaWZpZWQiLCAibW9kaWZpZWQtMSIpOworCisgICAgLy8gU3RhcnQgdGltZW91dCBpbiBpZnJh
bWUgLSBpdCBzaG91bGQgbm90IHN1cnZpdmUgcmVwYXJlbnRpbmcuCisgICAgaWZyYW1lLmNvbnRl
bnRXaW5kb3cuc3RhcnREb29tZWRUaW1lcigpOworICAgIGxvZygiUmVwYXJlbnQgaWZyYW1lIC0g
dGhlIGNvbnRlbnQgc2hvdWxkIHJlLWxvYWQuIikKKyAgICBmcmFtZTEuY29udGVudERvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTsKKyAgICAvLyBjb250ZW50V2luZG93IHNob3VsZCBu
b3QgYmUgYXZhaWxhYmxlLCB0aGUgaWZyYW1lIGlzIHVubG9hZGVkLgorICAgIGxvZyhpZnJhbWUu
Y29udGVudFdpbmRvdyA/ICJGQUlMOiBpZnJhbWUgaXMgbm90IHVubG9hZGVkLiIgOiAiUEFTUzog
aWZyYW1lIGlzIHVubG9hZGVkLiIpOworICAgIGZyYW1lMi5jb250ZW50RG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChpZnJhbWUpOworICAgIGlmcmFtZS5vbmxvYWQgPSB0ZXN0MjsKK30KKworZnVu
Y3Rpb24gdGVzdDIoKQoreworICAgIHZlcmlmeVRva2VuKCJJZnJhbWUgcmUtbG9hZGVkLCB2ZXJp
ZnkgdG9rZW4iLCAibG9hZGVkIik7CisgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cudG9rZW4gPSAi
bW9kaWZpZWQtMiI7CisgICAgdmVyaWZ5VG9rZW4oIklmcmFtZSB0b2tlbiBtb2RpZmllZCIsICJt
b2RpZmllZC0yIik7CisKKyAgICAvLyBTdGFydCB0aW1lb3V0IGluIGlmcmFtZSAtIGl0IHNob3Vs
ZCBzdXJ2aXZlIHJlcGFyZW50aW5nIGFuZCBjYWxsIGZpbmlzaCgpIHRvIGVuZCB0aGUgdGVzdC4K
KyAgICBpZnJhbWUuY29udGVudFdpbmRvdy5zdGFydEZpbmlzaFRpbWVyKCk7CisgICAgbG9nKCJS
ZXBhcmVudCBpZnJhbWUgdXNpbmcgYWRvcHROb2RlIC0gdGhlIGNvbnRlbnQgc2hvdWxkIG5vdCB1
bmxvYWQuIikKKyAgICBmcmFtZTEuY29udGVudERvY3VtZW50LmFkb3B0Tm9kZShpZnJhbWUpOwor
ICAgIGZyYW1lMS5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICAg
IC8vIGNvbnRlbnRXaW5kb3cgc2hvdWxkIGJlIGF2YWlsYWJsZSwgdGhlIGlmcmFtZSBpcyBub3Qg
dW5sb2FkZWQuCisgICAgbG9nKGlmcmFtZS5jb250ZW50V2luZG93ID8gIlBBU1M6IGlmcmFtZSBp
cyBOT1QgdW5sb2FkZWQuIiA6ICJGQUlMOiBpZnJhbWUgaXMgdW5sb2FkZWQuIik7CisgICAgaWZy
YW1lLm9ubG9hZCA9IG5vdFJlYWNoZWQ7Cit9CisKK25vdFJlYWNoZWQgPSBmdW5jdGlvbigpCit7
CisgICAgbG9nKCJGQUlMOiBpZnJhbWUgc2hvdWxkIG5vdCBmaXJlICdsb2FkJyBldmVudCB3aGVu
IHJlcGFyZW50ZWQgdXNpbmcgJ2Fkb3B0Tm9kZSciKTsKK30KKworZmluaXNoID0gZnVuY3Rpb24o
KQoreworICAgIHZlcmlmeVRva2VuKCJJZnJhbWUgdG9rZW4gc2hvdWxkIGJlIHRoZSBzYW1lIGFz
IGJlZm9yZSByZXBhcmVudGluZyIsICJtb2RpZmllZC0yIik7CisKKyAgICAvLyBMYXN0IHRlc3Qg
LSB2ZXJpZnkgdGhhdCBub24tYXR0YWNoZWQgZG9jdW1lbnQgZG9lcyBub3Qga2VlcCBpZnJhbWUg
YWxpdmUgZXZlbiBpZiBhZG9wdE5vZGUoKSBpcyB1c2VkLgorICAgIHZhciB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsKKyAgICB4aHIub3BlbigiR0VUIiwiZGF0YTp0ZXh0L2h0bWwsPGh0bWwg
eG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnPjxib2R5IGlkPSdib2R5Jz5IZWxs
bzwvYm9keT48L2h0bWw+IiwgZmFsc2UpOworICAgIHhoci5zZW5kKG51bGwpOworICAgIHZhciBk
b2MgPSB4aHIucmVzcG9uc2VYTUw7CisgICAgbG9nKGRvYy5nZXRFbGVtZW50QnlJZCgiYm9keSIp
LmlubmVyVGV4dCA9PSAiSGVsbG8iID8gIlBBU1M6IFhIUi1sb2FkZWQgRG9jdW1lbnQgaXMgY29y
cmVjdC4iIDogIkZBSUw6IFhIUi1sb2FkZWQgZG9jdW1lbnQgaXMgbm90IGNvcnJlY3QuIik7CisK
KyAgICBkb2MuYWRvcHROb2RlKGlmcmFtZSk7CisgICAgLy8gY29udGVudFdpbmRvdyBzaG91bGQg
bm90IGJlIGF2YWlsYWJsZSwgdGhlIGlmcmFtZSBpcyB1bmxvYWRlZC4KKyAgICBsb2coaWZyYW1l
LmNvbnRlbnRXaW5kb3cgPyAiRkFJTDogaWZyYW1lIGlzIG5vdCB1bmxvYWRlZC4iIDogIlBBU1M6
IGlmcmFtZSBpcyB1bmxvYWRlZC4iKTsKKworICAgIGxvZygiVGVzdCBGaW5pc2hlZC4iKTsKKwor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworfQorCis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD10
ZXN0KCk+Cis8cD5UaGlzIHRlc3QgbW92ZXMgdGhlIGlmcmFtZSBiZXR3ZWVuIHR3byBkb2N1bWVu
dHMgLSBvbmNlIHVzaW5nIHRoaXMgc2VxdWVuY2U6PC9wPgorPHByZT4KKyAgICBkb2N1bWVudDEu
Ym9keS5yZW1vdmVDaGlsZChpZnJhbWUpOworICAgIGRvY3VtZW50Mi5ib2R5LmFwcGVuZENoaWxk
KGlmcmFtZSk7CisKKzwvcHJlPgorPHA+YW5kIHRoZW4gdXNpbmcgJ2Fkb3B0Tm9kZSc6PC9wPgor
PHByZT4KKyAgICBkb2N1bWVudDIuYWRvcHROb2RlKGlmcmFtZSk7CisgICAgZG9jdW1lbnQyLmJv
ZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKworPC9wcmU+Cis8cD5JbiB0aGUgc2Vjb25kIGNhc2Us
IHRoZSBjb250ZW50IG9mIGlmcmFtZSBzaG91bGQgbm90IGJlIHJlLWxvYWRlZCBhbmQgJ2xvYWQn
IGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQuIEFsc28sIHRoZSB0aW1lciBzdGFydGVkIGJlZm9y
ZSByZXBhcmVudGluZyBzaG91bGQgc3Vydml2ZSB0cmFuc2l0aW9uIGFuZCBmaXJlLjwvcD4KKzxw
PlRlc3QgYWxzbyB2ZXJpZmllcyB0aGF0IGRvY3VtZW50LmFkb3B0Tm9kZSgpIGluIGNhc2Ugb2Yg
bm90LXJlbmRlcmVkIGRvY3VtZW50IChsb2FkZWQgYnkgWE1MSHR0cFJlcXVlc3QpIGRvZXMgbm90
IHByZXNlcnZlIHRoZSBjb250ZW50IG9mIGlmcmFtZS48L3A+Cis8cD5UZXN0IHN1Y2NlZWRzIGlm
IHRoZXJlIGFyZSAnUEFTUycgbWVzc2FnZXMgYmVsb3cgYW5kIG5vICdGQUlMJyBtZXNzYWdlcy48
L3A+Cis8aWZyYW1lIGlkPWZyYW1lMSBzcmM9cmVzb3VyY2VzL2lmcmFtZS1yZXBhcmVudGluZy1m
cmFtZTEuaHRtbD48L2lmcmFtZT4KKzxpZnJhbWUgaWQ9ZnJhbWUyIHNyYz1yZXNvdXJjZXMvaWZy
YW1lLXJlcGFyZW50aW5nLWZyYW1lMi5odG1sPjwvaWZyYW1lPgorPHByZSBpZD1sb2c+PC9wcmU+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9y
ZXNvdXJjZXMvaWZyYW1lLXJlcGFyZW50aW5nLWZyYW1lMS5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9mcmFtZXMvcmVzb3VyY2VzL2lmcmFtZS1yZXBhcmVudGluZy1mcmFtZTEuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Y2M4MWVmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcmVzb3VyY2VzL2lmcmFtZS1yZXBhcmVudGluZy1mcmFt
ZTEuaHRtbApAQCAtMCwwICsxLDIgQEAKKzxib2R5PgorPGlmcmFtZSBzcmM9aWZyYW1lLXJlcGFy
ZW50aW5nLWlmcmFtZS1jb250ZW50Lmh0bWw+PC9pZnJhbWU+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZyYW1lcy9yZXNvdXJjZXMvaWZyYW1lLXJlcGFyZW50aW5nLWZyYW1lMi5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcmVzb3VyY2VzL2lmcmFtZS1yZXBhcmVudGluZy1m
cmFtZTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMzVlZWM1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcmVzb3VyY2VzL2lmcmFt
ZS1yZXBhcmVudGluZy1mcmFtZTIuaHRtbApAQCAtMCwwICsxIEBACis8Ym9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc291cmNlcy9pZnJhbWUtcmVwYXJlbnRpbmct
aWZyYW1lLWNvbnRlbnQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc291cmNlcy9p
ZnJhbWUtcmVwYXJlbnRpbmctaWZyYW1lLWNvbnRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAwMDAwMDAwLi5lN2E1OTc0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9mcmFtZXMvcmVzb3VyY2VzL2lmcmFtZS1yZXBhcmVudGluZy1pZnJhbWUtY29udGVudC5o
dG1sCkBAIC0wLDAgKzEsMjAgQEAKKzxzY3JpcHQ+Cit0b2tlbiA9ICJsb2FkaW5nIjsKKworZnVu
Y3Rpb24gaW5pdCgpCit7IAorICAgIHRva2VuID0gImxvYWRlZCI7Cit9CisKK3N0YXJ0RmluaXNo
VGltZXIgPSBmdW5jdGlvbigpCit7CisgICAgc2V0VGltZW91dChwYXJlbnQucGFyZW50LmZpbmlz
aCwgMCk7Cit9CisKK3N0YXJ0RG9vbWVkVGltZXIgPSBmdW5jdGlvbigpCit7CisgICAgc2V0VGlt
ZW91dChwYXJlbnQucGFyZW50Lm5vdFJlYWNoZWQsIDApOworfQorCis8L3NjcmlwdD4KKzxib2R5
IG9ubG9hZD1pbml0KCk+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDM3NmYzZTYuLjRmOTAyYjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMDktMTIt
MjIgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgcmVsb2FkaW5nIGlmcmFtZSBv
biByZS1wYXJlbnRpbmcgYmV0d2VlbiBkb2N1bWVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjg0OAorCisgICAgICAgIEFjaGlldmVkIGJ5IHNl
dHRpbmcgYSBmbGFnIG9uIGlmcmFtZSBlbGVtZW50IHdoZW4gaXQgaXMgYSB0YXJnZXQgb2YgZG9j
dW1lbnQuYWRvcHROb2RlKG5vZGUpIG9wZXJhdGlvbi4KKyAgICAgICAgVGhlIGZsYWcgcHJldmVu
dHMgdW5sb2FkL2xvYWQgY3ljbGUgYW5kIGlzIHJlc2V0IG9uY2UgZWxlbWVudCBpcyBhdHRhY2hl
ZCB0byBhIG5ldyBkb2N1bWVudC4KKyAgICAgICAgSWYgaWZyYW1lIGlzIGFkb3B0ZWQgYnV0IG5v
dCBhY3R1YWxseSBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCBpdCBnZXRzIHVubG9hZGVkIGJ5IGFz
eW5jIHRpbWVyCisgICAgICAgIG9uY2UgSlMgeWllbGRzLCB0byBhdm9pZCBoYXZpbmcgYWN0aXZl
IGNvbnRlbnQgaW4gbm9uLWF0dGFjaGVkIGlmcmFtZS4KKworICAgICAgICBUZXN0OiBmYXN0L2Zy
YW1lcy9pZnJhbWUtcmVwYXJlbnRpbmcuaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZG9wdE5vZGUpOiBJZiB0aGUgYWRvcHRl
ZCBub2RlIGlzIGlmcmFtZSwgc2V0IGEgcmVtYWluc0FsaXZlT25SZW1vdmFsRnJvbVRyZWUgb24g
aXQuCisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oOgorICAgICAgICAqIGh0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1l
RWxlbWVudEJhc2U6OkhUTUxGcmFtZUVsZW1lbnRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGcmFtZUVsZW1lbnRCYXNlOjphdHRhY2gpOiBTa2lwIGFjdHVhbCBsb2FkaW5nIG9mIHRoZSBm
cmFtZSBpZiBpdCBoYXMgcmVtYWluc0FsaXZlT25SZW1vdmFsRnJvbVRyZWUgZmxhZy4gUmVzZXQg
dGhlIGZsYWcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6d2lsbFJl
bW92ZSk6IFNraXAgdW5sb2FkaW5nIHRoZSBmcmFtZSBpZiBpdCBoYXMgcmVtYWluc0FsaXZlT25S
ZW1vdmFsRnJvbVRyZWUgZmxhZyBzZXQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6c2V0UmVtYWluc0FsaXZlT25SZW1vdmFsRnJvbVRyZWUpOiBTZXQgdGhlIGZsYWcs
IHN0YXJ0IHRoZSBhc3luYyB0aW1lciB0byBjaGVjayBpZiB0aGUgZnJhbWUgd2FzIGFjdHVhbGx5
IGF0dGFjaGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OmNoZWNr
QXR0YWNoZWRUaW1lckZpcmVkKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Ojp3aWxsUmVtb3Zl
KTogTW92ZSBmcm9tIHByaXZhdGUgdG8gcHJvdGVjdGVkLCBzaW5jZSBpdCBpcyBjb25kaXRpb25h
bGx5IGNhbGxlZCBpbiBIVE1MRnJhbWVFbGVtZW50QmFzZTo6d2lsbFJlbW92ZSBub3cuCisKIDIw
MTAtMDEtMTkgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDcwZTlhZTkuLjVhODhhNGYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3Rvcnku
aCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSGVh
ZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTWFwRWxlbWVudC5oIgpAQCAtODA5LDYgKzgxMCw5IEBAIFBhc3NSZWZQdHI8Tm9kZT4g
RG9jdW1lbnQ6OmFkb3B0Tm9kZShQYXNzUmVmUHRyPE5vZGU+IHNvdXJjZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAKICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGlmIChzb3VyY2UtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkKKyAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KHNvdXJjZS5nZXQo
KSktPnNldFJlbWFpbnNBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlKGF0dGFjaGVkKCkpOworCiAgICAg
ICAgICAgICBpZiAoc291cmNlLT5wYXJlbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgc291cmNl
LT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKHNvdXJjZS5nZXQoKSwgZWMpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAgYi9XZWJDb3Jl
L2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCmluZGV4IDk1NTFiNmUuLjAxZTFhMWUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKKysrIGIvV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcApAQCAtNTAsOCArNTAsMTEgQEAgSFRN
TEZyYW1lRWxlbWVudEJhc2U6OkhUTUxGcmFtZUVsZW1lbnRCYXNlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW4KICAgICAsIG1fc2Nyb2xsaW5nKFNjcm9sbGJhckF1dG8pCiAg
ICAgLCBtX21hcmdpbldpZHRoKC0xKQogICAgICwgbV9tYXJnaW5IZWlnaHQoLTEpCisgICAgLCBt
X2NoZWNrQXR0YWNoZWRUaW1lcih0aGlzLCAmSFRNTEZyYW1lRWxlbWVudEJhc2U6OmNoZWNrQXR0
YWNoZWRUaW1lckZpcmVkKQogICAgICwgbV92aWV3U291cmNlKGZhbHNlKQogICAgICwgbV9zaG91
bGRPcGVuVVJMQWZ0ZXJBdHRhY2goZmFsc2UpCisgICAgLCBtX3JlbWFpbnNBbGl2ZU9uUmVtb3Zh
bEZyb21UcmVlKGZhbHNlKQorCiB7CiB9CiAKQEAgLTE4Niw5ICsxODksMTIgQEAgdm9pZCBIVE1M
RnJhbWVFbGVtZW50QmFzZTo6YXR0YWNoKCkKIHsKICAgICBpZiAobV9zaG91bGRPcGVuVVJMQWZ0
ZXJBdHRhY2gpIHsKICAgICAgICAgbV9zaG91bGRPcGVuVVJMQWZ0ZXJBdHRhY2ggPSBmYWxzZTsK
LSAgICAgICAgcXVldWVQb3N0QXR0YWNoQ2FsbGJhY2soJkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpz
ZXROYW1lQW5kT3BlblVSTENhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgaWYgKCFtX3JlbWFpbnNB
bGl2ZU9uUmVtb3ZhbEZyb21UcmVlKQorICAgICAgICAgICAgcXVldWVQb3N0QXR0YWNoQ2FsbGJh
Y2soJkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXROYW1lQW5kT3BlblVSTENhbGxiYWNrLCB0aGlz
KTsKICAgICB9CiAKKyAgICBzZXRSZW1haW5zQWxpdmVPblJlbW92YWxGcm9tVHJlZShmYWxzZSk7
CisKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmF0dGFjaCgpOwogICAgIAogICAgIGlmIChS
ZW5kZXJQYXJ0KiByZW5kZXJQYXJ0ID0gdG9SZW5kZXJQYXJ0KHJlbmRlcmVyKCkpKSB7CkBAIC0y
NDksNCArMjU1LDMzIEBAIGludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aGVpZ2h0KCkgY29uc3QK
ICAgICByZXR1cm4gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmhlaWdodCgpOwogfQogCit2b2lk
IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRSZW1haW5zQWxpdmVPblJlbW92YWxGcm9tVHJlZShi
b29sIHZhbHVlKQoreworICAgIG1fcmVtYWluc0FsaXZlT25SZW1vdmFsRnJvbVRyZWUgPSB2YWx1
ZTsKKworICAgIC8vIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCBKUyB3aWxsIGRvIGRvY3Vt
ZW50LmFkb3B0Tm9kZSgpIG9uIHRoaXMgZWxlbWVudCBidXQgd2lsbCBub3QgaW5zZXJ0IGl0IGlu
dG8gdGhlIHRyZWUuIAorICAgIC8vIFN0YXJ0IHRoZSBhc3luYyB0aW1lciB0aGF0IGlzIG5vcm1h
bGx5IHN0b3BwZWQgYnkgYXR0YWNoKCkuIElmIGl0J3Mgbm90IHN0b3BwZWQgYW5kIGZpcmVzLCBp
dCdsbCB1bmxvYWQgdGhlIGZyYW1lLgorICAgIGlmICh2YWx1ZSkKKyAgICAgICAgbV9jaGVja0F0
dGFjaGVkVGltZXIuc3RhcnRPbmVTaG90KDApOworICAgIGVsc2UKKyAgICAgICAgbV9jaGVja0F0
dGFjaGVkVGltZXIuc3RvcCgpOworfQorCit2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpjaGVj
a0F0dGFjaGVkVGltZXJGaXJlZChUaW1lcjxIVE1MRnJhbWVFbGVtZW50QmFzZT4qKQoreworICAg
IEFTU0VSVCghYXR0YWNoZWQoKSk7CisgICAgQVNTRVJUKG1fcmVtYWluc0FsaXZlT25SZW1vdmFs
RnJvbVRyZWUpOworCisgICAgbV9yZW1haW5zQWxpdmVPblJlbW92YWxGcm9tVHJlZSA9IGZhbHNl
OworICAgIHdpbGxSZW1vdmUoKTsKK30KKwordm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6d2ls
bFJlbW92ZSgpCit7CisgICAgaWYgKG1fcmVtYWluc0FsaXZlT25SZW1vdmFsRnJvbVRyZWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6d2lsbFJlbW92ZSgp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lRWxlbWVudEJhc2UuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFz
ZS5oCmluZGV4IGMyMTFiYTcuLmVhOTNhZTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1M
RnJhbWVFbGVtZW50QmFzZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFz
ZS5oCkBAIC00Miw2ICs0Miw4IEBAIHB1YmxpYzoKICAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAg
ICBpbnQgaGVpZ2h0KCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldFJlbWFpbnNBbGl2ZU9uUmVtb3Zh
bEZyb21UcmVlKGJvb2wpOworCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2Uo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKQEAgLTYyLDYgKzY0LDkgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikg
Y29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOworICAgIHZvaWQgY2hlY2tB
dHRhY2hlZFRpbWVyRmlyZWQoVGltZXI8SFRNTEZyYW1lRWxlbWVudEJhc2U+Kik7CisKICAgICBi
b29sIHZpZXdTb3VyY2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV92aWV3U291cmNlOyB9CiAKICAg
ICB2b2lkIHNldE5hbWVBbmRPcGVuVVJMKCk7CkBAIC03Nyw5ICs4MiwxMyBAQCBwcml2YXRlOgog
ICAgIGludCBtX21hcmdpbldpZHRoOwogICAgIGludCBtX21hcmdpbkhlaWdodDsKIAorICAgIFRp
bWVyPEhUTUxGcmFtZUVsZW1lbnRCYXNlPiBtX2NoZWNrQXR0YWNoZWRUaW1lcjsKKwogICAgIGJv
b2wgbV92aWV3U291cmNlOwogCiAgICAgYm9vbCBtX3Nob3VsZE9wZW5VUkxBZnRlckF0dGFjaDsK
KworICAgIGJvb2wgbV9yZW1haW5zQWxpdmVPblJlbW92YWxGcm9tVHJlZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25l
ckVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAppbmRleCAz
MDhhMTAwLi40YTU2ZTQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJF
bGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCkBAIC00
OCwxOSArNDgsMTkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2Nyb2xsYmFyTW9kZSBzY3JvbGxp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gU2Nyb2xsYmFyQXV0bzsgfQogCiAgICAgU2FuZGJveEZs
YWdzIHNhbmRib3hGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2FuZGJveEZsYWdzOyB9Ci0gICAg
CisKIHByb3RlY3RlZDoKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIHZvaWQgc2V0U2FuZGJveEZsYWdzKFNh
bmRib3hGbGFncyk7Ci0gICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOworCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBGcmFtZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Zy
YW1lT3duZXJFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRlbnRGcmFtZTsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlKCk7CiAKICAg
ICBGcmFtZSogbV9jb250ZW50RnJhbWU7CiAgICAgU2FuZGJveEZsYWdzIG1fc2FuZGJveEZsYWdz
Owo=
</data>
<flag name="review"
          id="29646"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="29647"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
      

    </bug>

</bugzilla>