<?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>167544</bug_id>
          
          <creation_ts>2017-01-28 00:28:36 -0800</creation_ts>
          <short_desc>[GTK] Do not release OpenGL resource immediately when leaving accelerated compositing mode</short_desc>
          <delta_ts>2017-01-30 08:43:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>167494</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1270939</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-28 00:28:36 -0800</bug_when>
    <thetext>Sometimes the conditions to be in AC mode or not change quickly, and then we leave AC mode just enter it again after a very short period of time. In those cases we are dropping all the GL resources and the compositor thread, and creating it again. We could keep the layer tree host alive for a while when exiting AC mode, and reuse it if we enter AC mode before the previous one has been discarded. While the previous layer tree host is alive we still need to keep it up to date, for example if the web view is resized or contents size change, and synchronize with the threaded compositor when it becomes the layer tree host again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270940</commentid>
    <comment_count>1</comment_count>
      <attachid>300011</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-28 00:41:15 -0800</bug_when>
    <thetext>Created attachment 300011
Patch

I&apos;m using a 5 seconds delay for now and seems work fine. We should probably hook the memory pressure handler to discard the previous layer tree host on memory pressure too, but we can do that in a follow up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270941</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-28 00:58:49 -0800</bug_when>
    <thetext>Doesn&apos;t apply because it depends on #167494</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271046</commentid>
    <comment_count>3</comment_count>
      <attachid>300011</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-28 12:59:28 -0800</bug_when>
    <thetext>Comment on attachment 300011
Patch

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

Nice!

Now I know all this recent work to bring back on-demand accelerated composting is going to have a dramatic memory reduction benefit, but these changes seem risky and I don&apos;t think we should backport them to 2.14 now that we&apos;re nearly to the end of the release cycle. My recommendation is to let it bake in trunk at this point. Not just this commit, but the whole set. It&apos;s your call, of course.

&gt; Source/WebKit2/ChangeLog:24
&gt; +        starting a timer of 5 secons to discard it if not reused.

seconds

&gt; Source/WebKit2/WebProcess/WebPage/AcceleratedDrawingArea.cpp:382
&gt; +    m_previousLayerTreeHost = WTFMove(m_layerTreeHost);

If something ever goes wrong, better to have a null pointer dereference than a use after free, so I think you should set m_layerTreeHost to nullptr here, even if it&apos;s not strictly necessary. And it looks like it *is* necessary, since you have checks in several places to only use m_previousLayerTreeHost if m_layerTreeHost is null. If it&apos;s really not needed, please explain why.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:229
&gt; +    m_isDiscardable = discardable;
&gt; +    if (m_isDiscardable) {
&gt; +        m_discardableSyncActions = OptionSet&lt;DiscardableSyncActions&gt;();
&gt; +        return;
&gt; +    }

Personally, I would split the rest of this function below this point into a new function named ThreadedCoordinatedLayerTreeHost::applyDiscardableSyncActions.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:111
&gt; +    enum class DiscardableSyncActions { UpdateSize = 1 &lt;&lt; 1, UpdateViewport = 1 &lt;&lt; 2, UpdateScale = 1 &lt;&lt; 3, UpdateBackground = 1 &lt;&lt; 4 };

I would also prefer not to write enums on one line like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271110</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-29 02:05:00 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 300011 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=300011&amp;action=review
&gt; 
&gt; Nice!
&gt; 
&gt; Now I know all this recent work to bring back on-demand accelerated
&gt; composting is going to have a dramatic memory reduction benefit, but these
&gt; changes seem risky and I don&apos;t think we should backport them to 2.14 now
&gt; that we&apos;re nearly to the end of the release cycle. My recommendation is to
&gt; let it bake in trunk at this point. Not just this commit, but the whole set.
&gt; It&apos;s your call, of course.

All this work is to make 2.14 usable again for many people. so all these commits expect the one adding new API will be backported to 2.14, but not right now. My plan is to make a new 2.15 release as soon as possible next week, once the tests are in better shape. Then we test the new release for a while, and continue fixing issues that might show up in the bots, ro reported by Andrés. And then, with all the fixes I&apos;ll backport everything to 2.14 and make a new release.

&gt; &gt; Source/WebKit2/ChangeLog:24
&gt; &gt; +        starting a timer of 5 secons to discard it if not reused.
&gt; 
&gt; seconds
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/AcceleratedDrawingArea.cpp:382
&gt; &gt; +    m_previousLayerTreeHost = WTFMove(m_layerTreeHost);
&gt; 
&gt; If something ever goes wrong, better to have a null pointer dereference than
&gt; a use after free, so I think you should set m_layerTreeHost to nullptr here,
&gt; even if it&apos;s not strictly necessary. And it looks like it *is* necessary,
&gt; since you have checks in several places to only use m_previousLayerTreeHost
&gt; if m_layerTreeHost is null. If it&apos;s really not needed, please explain why.

Not it&apos;s not needed at all. Because m_layerTreeHost is a RefPtr, so !m_layerTreeHost checks the internal pointer and the move assignment already sets the internal pointer to nullptr.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:229
&gt; &gt; +    m_isDiscardable = discardable;
&gt; &gt; +    if (m_isDiscardable) {
&gt; &gt; +        m_discardableSyncActions = OptionSet&lt;DiscardableSyncActions&gt;();
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; Personally, I would split the rest of this function below this point into a
&gt; new function named
&gt; ThreadedCoordinatedLayerTreeHost::applyDiscardableSyncActions.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:111
&gt; &gt; +    enum class DiscardableSyncActions { UpdateSize = 1 &lt;&lt; 1, UpdateViewport = 1 &lt;&lt; 2, UpdateScale = 1 &lt;&lt; 3, UpdateBackground = 1 &lt;&lt; 4 };
&gt; 
&gt; I would also prefer not to write enums on one line like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271263</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-30 08:43:47 -0800</bug_when>
    <thetext>Committed r211365: &lt;http://trac.webkit.org/changeset/211365&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300011</attachid>
            <date>2017-01-28 00:41:15 -0800</date>
            <delta_ts>2017-01-28 12:59:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-ac-mode-lazy-destroy.diff</filename>
            <type>text/plain</type>
            <size>17851</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmOTRiMTE2Y2YxMi4uMjA4ZjJlNGIyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAxNy0wMS0yOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gRG8gbm90IHJlbGVhc2UgT3BlbkdMIHJlc291cmNl
IGltbWVkaWF0ZWx5IHdoZW4gbGVhdmluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc1NDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTb21ldGltZXMg
dGhlIGNvbmRpdGlvbnMgdG8gYmUgaW4gQUMgbW9kZSBvciBub3QgY2hhbmdlIHF1aWNrbHksIGFu
ZCB0aGVuIHdlIGxlYXZlIEFDIG1vZGUganVzdCBlbnRlciBpdCBhZ2FpbgorICAgICAgICBhZnRl
ciBhIHZlcnkgc2hvcnQgcGVyaW9kIG9mIHRpbWUuIEluIHRob3NlIGNhc2VzIHdlIGFyZSBkcm9w
cGluZyBhbGwgdGhlIEdMIHJlc291cmNlcyBhbmQgdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgdGhy
ZWFkLCBhbmQgY3JlYXRpbmcgaXQgYWdhaW4uIFdlIGNvdWxkIGtlZXAgdGhlIGxheWVyIHRyZWUg
aG9zdCBhbGl2ZSBmb3IgYSB3aGlsZSB3aGVuIGV4aXRpbmcgQUMgbW9kZSwgYW5kCisgICAgICAg
IHJldXNlIGl0IGlmIHdlIGVudGVyIEFDIG1vZGUgYmVmb3JlIHRoZSBwcmV2aW91cyBvbmUgaGFz
IGJlZW4gZGlzY2FyZGVkLiBXaGlsZSB0aGUgcHJldmlvdXMgbGF5ZXIgdHJlZSBob3N0IGlzCisg
ICAgICAgIGFsaXZlIHdlIHN0aWxsIG5lZWQgdG8ga2VlcCBpdCB1cCB0byBkYXRlLCBmb3IgZXhh
bXBsZSBpZiB0aGUgd2ViIHZpZXcgaXMgcmVzaXplZCBvciBjb250ZW50cyBzaXplIGNoYW5nZSwg
YW5kCisgICAgICAgIHN5bmNocm9uaXplIHdpdGggdGhlIHRocmVhZGVkIGNvbXBvc2l0b3Igd2hl
biBpdCBiZWNvbWVzIHRoZSBsYXllciB0cmVlIGhvc3QgYWdhaW4uCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6On5BY2NlbGVyYXRlZERyYXdpbmdBcmVhKTogRGlz
Y2FyZCB0aGUgcHJldmlvdXMgbGF5ZXIgdHJlZSBob3N0LgorICAgICAgICAoV2ViS2l0OjpBY2Nl
bGVyYXRlZERyYXdpbmdBcmVhOjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhKTogSW5pdGlhbGl6ZSB0
aGUgdGltZXIgdG8gZGlzY2FyZCB0aGUgcHJldmlvdXMgbGF5ZXIKKyAgICAgICAgdHJlZSBob3N0
LgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpwYWdlQmFja2dyb3Vu
ZFRyYW5zcGFyZW5jeUNoYW5nZWQpOiBOb3RpZnkgdGhlIHByZXZpb3VzIGxheWVyIHRyZWUgaG9z
dCBpZiBuZWVkZWQuCisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6Om1h
aW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpBY2Nl
bGVyYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKTogUmV1c2UgdGhlIHByZXZpb3VzIGxheWVyIHRyZWUgaG9zdCBpZiBwb3Nz
aWJsZS4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZXhpdEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlTm93KTogRXhpdCBBQyBtb2RlIGFuZCBzYXZlIHRoZSBsYXll
ciB0cmVlIGhvc3QKKyAgICAgICAgc3RhcnRpbmcgYSB0aW1lciBvZiA1IHNlY29ucyB0byBkaXNj
YXJkIGl0IGlmIG5vdCByZXVzZWQuCisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2lu
Z0FyZWE6OmRpc2NhcmRQcmV2aW91c0xheWVyVHJlZUhvc3QpOiBJbnZhbGlkYXRlIGFuZCBkZXN0
cm95IHRoZSBwcmV2aW91cyBsYXllciB0cmVlIGhvc3QuCisgICAgICAgIChXZWJLaXQ6OkFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWE6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyk6IE5vdGlmeSB0
aGUgcHJldmlvdXMgbGF5ZXIgdHJlZSBob3N0IGlmIG5lZWRlZC4KKyAgICAgICAgKFdlYktpdDo6
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKTog
RGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVu
dHMpOiBJZiBpdCdzIGRpc2NhcmRhYmxlIGFkZCB0aGUgYWN0aW9uIHRvCisgICAgICAgIGJlIHN5
bmNocm9uaXplZCBpbnN0ZWFkLgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y29udGVudHNTaXplQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNp
emVEaWRDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNj
YXJkYWJsZSk6IFdoZW4gdGhlIGxheWVyIHRyZWUgaG9zdCBiZWNvbWVzIGRpc2NhcmRhYmxlLAor
ICAgICAgICByZXNldCB0aGUgc3luYyBhY3Rpb25zIGFuZCByZXR1cm4uIFdoZW4gaXQgYmVjb21l
cyB0aGUgcmVhbCBsYXllciB0cmVlIGhvc3QgYWdhaW4sIGFwcGx5IGFsbCBwZW5kaW5nIGFjdGlv
bnMgdG8KKyAgICAgICAgc3luY2hyb25pemUgd2l0aCB0aGUgdGhyZWFkZWQgY29tcG9zaXRvci4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6
OnNjcm9sbCk6IE5vdGlmeSB0aGUgcHJldmlvdXMgbGF5ZXIgdHJlZSBob3N0IGlmIG5lZWRlZC4K
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjptYWluRnJhbWVDb250ZW50U2l6ZUNo
YW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBVc2UgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZXhp
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlTm93KCkuCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6
c2V0SXNEaXNjYXJkYWJsZSk6IEFkZGVkLgorCiAyMDE3LTAxLTI3ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQgQVBJIHRvIGhh
bmRsZSB0aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgcG9saWN5CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YS5jcHAKaW5kZXggZmQ5ZDMwOGI4OGQuLjk0ZWMzMzY4ZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWEuY3BwCkBAIC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhOjp+QWNjZWxlcmF0ZWREcmF3aW5nQXJlYSgpCiB7CisgICAgZGlzY2FyZFBy
ZXZpb3VzTGF5ZXJUcmVlSG9zdCgpOwogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCiAgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+aW52YWxpZGF0ZSgpOwogfQpAQCAtNTUsNiArNTYsNyBAQCBBY2Nl
bGVyYXRlZERyYXdpbmdBcmVhOjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBh
Z2UsIGNvbnN0IFdlYlBhZ2VDcgogICAgIDogRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFUeXBlSW1w
bCwgd2ViUGFnZSkKICNlbmRpZgogICAgICwgbV9leGl0Q29tcG9zaXRpbmdUaW1lcihSdW5Mb29w
OjptYWluKCksIHRoaXMsICZBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUpCisgICAgLCBtX2Rpc2NhcmRQcmV2aW91c0xheWVyVHJlZUhvc3RUaW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpkaXNjYXJk
UHJldmlvdXNMYXllclRyZWVIb3N0KQogewogICAgIGlmICghbV93ZWJQYWdlLmlzVmlzaWJsZSgp
KQogICAgICAgICBzdXNwZW5kUGFpbnRpbmcoKTsKQEAgLTkxLDYgKzkzLDggQEAgdm9pZCBBY2Nl
bGVyYXRlZERyYXdpbmdBcmVhOjpwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKQog
ewogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGFn
ZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCk7CisgICAgZWxzZSBpZiAobV9wcmV2aW91
c0xheWVyVHJlZUhvc3QpCisgICAgICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5wYWdlQmFj
a2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKTsKIH0KIAogdm9pZCBBY2NlbGVyYXRlZERyYXdp
bmdBcmVhOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgaXNGcm96ZW4pCkBAIC0xNTAs
OCArMTU0LDEyIEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6dXBkYXRlUHJlZmVyZW5j
ZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAKIHZvaWQgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIHNp
emUpCiB7Ci0gICAgaWYgKG1fd2ViUGFnZS51c2VGaXhlZExheW91dCgpICYmIG1fbGF5ZXJUcmVl
SG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zaXplRGlkQ2hhbmdlKHNpemUpOworICAg
IGlmIChtX3dlYlBhZ2UudXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICBpZiAobV9sYXllclRy
ZWVIb3N0KQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zaXplRGlkQ2hhbmdlKHNpemUp
OworICAgICAgICBlbHNlIGlmIChtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgICAg
IG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5zaXplRGlkQ2hhbmdlKHNpemUpOworICAgIH0KICAg
ICBtX3dlYlBhZ2UubWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5n
ZURvY3VtZW50U2l6ZSgpOwogfQogCkBAIC0yMzQsNiArMjQyLDggQEAgdm9pZCBBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhOjp1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBzdGF0ZUlELCBi
b29sIHJlc3AKICNlbHNlCiAgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCiAgICAgICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNpemVEaWRDaGFuZ2UobV93ZWJQYWdlLnNpemUoKSk7CisgICAg
ICAgIGVsc2UgaWYgKG1fcHJldmlvdXNMYXllclRyZWVIb3N0KQorICAgICAgICAgICAgbV9wcmV2
aW91c0xheWVyVHJlZUhvc3QtPnNpemVEaWRDaGFuZ2UobV93ZWJQYWdlLnNpemUoKSk7CiAjZW5k
aWYKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoc2l6ZSA9PSBtX3dlYlBhZ2Uuc2l6ZSgp
KTsKQEAgLTMxNywxOSArMzI3LDMyIEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6cmVz
dW1lUGFpbnRpbmcoKQogCiB2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKKyAg
ICBtX2Rpc2NhcmRQcmV2aW91c0xheWVyVHJlZUhvc3RUaW1lci5zdG9wKCk7CisKICAgICBtX2V4
aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKICAgICBtX3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUgPSBmYWxzZTsKIAogICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0KTsK
LSAgICBtX2xheWVyVHJlZUhvc3QgPSBMYXllclRyZWVIb3N0OjpjcmVhdGUobV93ZWJQYWdlKTsK
KyAgICBpZiAobV9wcmV2aW91c0xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0ID0gV1RGTW92ZShtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdCk7CisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+c2V0SXNEaXNjYXJkYWJsZShmYWxzZSk7CisgICAgICAgIGlmICghbV9pc1BhaW50
aW5nU3VzcGVuZGVkKQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yZXN1bWVSZW5kZXJp
bmcoKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pCisgICAgICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBMYXllclRyZWVIb3N0Ojpj
cmVhdGUobV93ZWJQYWdlKTsKKworICAgICAgICBpZiAobV9pc1BhaW50aW5nU3VzcGVuZGVkKQor
ICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOworICAgIH0KKwog
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShY
MTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKICAgICBpZiAobV9uYXRp
dmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKG1fbmF0aXZlU3VyZmFjZUhhbmRs
ZUZvckNvbXBvc2l0aW5nKTsKICNlbmRpZgogICAgIGlmICghbV9pblVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlKQogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4
dFNjaGVkdWxlZExheWVyRmx1c2godHJ1ZSk7Ci0gICAgaWYgKG1faXNQYWludGluZ1N1c3BlbmRl
ZCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOwogCiAgICAgbV9s
YXllclRyZWVIb3N0LT5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVyKTsKIH0K
QEAgLTM0Nyw2ICszNzAsMzIgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCkKICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKIH0KIAordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVOb3coKQoreworICAgIEFTU0VSVCghbV9hbHdheXNV
c2VDb21wb3NpdGluZyk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pOwor
CisgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7CisgICAgbV93YW50c1RvRXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0gZmFsc2U7CisKKyAgICBBU1NFUlQobV9sYXllclRy
ZWVIb3N0KTsKKyAgICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdCA9IFdURk1vdmUobV9sYXllclRy
ZWVIb3N0KTsKKyAgICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdC0+c2V0SXNEaXNjYXJkYWJsZSh0
cnVlKTsKKyAgICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdC0+cGF1c2VSZW5kZXJpbmcoKTsKKyAg
ICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdC0+c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
KGZhbHNlKTsKKyAgICBtX2Rpc2NhcmRQcmV2aW91c0xheWVyVHJlZUhvc3RUaW1lci5zdGFydE9u
ZVNob3QoNSk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlzY2FyZFByZXZp
b3VzTGF5ZXJUcmVlSG9zdCgpCit7CisgICAgbV9kaXNjYXJkUHJldmlvdXNMYXllclRyZWVIb3N0
VGltZXIuc3RvcCgpOworICAgIGlmICghbV9wcmV2aW91c0xheWVyVHJlZUhvc3QpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5pbnZhbGlkYXRlKCk7Cisg
ICAgbV9wcmV2aW91c0xheWVyVHJlZUhvc3QgPSBudWxscHRyOworfQorCiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YTo6ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CkBAIC0zNzYsNiArNDI1
LDggQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJp
YnV0ZXMoVmlld3BvcnRBdHRyaWJ1dGVzJiYgYXQKIHsKICAgICBpZiAobV9sYXllclRyZWVIb3N0
KQogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhX
VEZNb3ZlKGF0dHJzKSk7CisgICAgZWxzZSBpZiAobV9wcmV2aW91c0xheWVyVHJlZUhvc3QpCisg
ICAgICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0
ZXMoV1RGTW92ZShhdHRycykpOwogfQogI2VuZGlmCiAKQEAgLTM4NCw2ICs0MzUsOCBAQCB2b2lk
IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgp
CiB7CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5k
ZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBlbHNlIGlmIChtX3ByZXZpb3Vz
TGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9wcmV2aW91c0xheWVyVHJlZUhvc3QtPmRldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5o
CmluZGV4IDRmOTc1NGYzOTZmLi5mMGI3ODlhZmI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCkBA
IC04Niw2ICs4Niw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlU29vbigpOwogICAgIGJvb2wgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuaXNBY3Rp
dmUoKTsgfQorICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlTm93KCk7Cisg
ICAgdm9pZCBkaXNjYXJkUHJldmlvdXNMYXllclRyZWVIb3N0KCk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgc3VzcGVuZFBhaW50aW5nKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVBhaW50aW5nKCk7
CkBAIC0xMjcsNiArMTI5LDkgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gVGhlIGxheWVyIHRyZWUg
aG9zdCB0aGF0IGhhbmRsZXMgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuCiAgICAgUmVmUHRyPExh
eWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKKworICAgIFJlZlB0cjxMYXllclRyZWVIb3N0
PiBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdDsKKyAgICBSdW5Mb29wOjpUaW1lcjxBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhPiBtX2Rpc2NhcmRQcmV2aW91c0xheWVyVHJlZUhvc3RUaW1lcjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDQ4
OTI4YjdkYmI4Li4yODEzNTNiOGFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAt
MTAyLDE3ICsxMDIsMjggQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV92aWV3cG9ydENvbnRyb2xsZXIuZGlkU2Nyb2xsKHJlY3QubG9jYXRpb24oKSk7
Ci0gICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKKyAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKQorICAg
ICAgICBtX2Rpc2NhcmRhYmxlU3luY0FjdGlvbnMgfD0gRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6
VXBkYXRlVmlld3BvcnQ7CisgICAgZWxzZQorICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwog
fQogCiB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVD
aGFuZ2VkKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7CiAgICAgbV92aWV3cG9ydENvbnRyb2xs
ZXIuZGlkQ2hhbmdlQ29udGVudHNTaXplKG5ld1NpemUpOwotICAgIGRpZENoYW5nZVZpZXdwb3J0
KCk7CisgICAgaWYgKG1faXNEaXNjYXJkYWJsZSkKKyAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNB
Y3Rpb25zIHw9IERpc2NhcmRhYmxlU3luY0FjdGlvbnM6OlVwZGF0ZVZpZXdwb3J0OworICAgIGVs
c2UKKyAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKIH0KIAogdm9pZCBUaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKIHsK
KyAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKSB7CisgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0
aW9ucyB8PSBEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTY2FsZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIGlmIChtX3N1cmZhY2UgJiYgbV9zdXJmYWNlLT5yZXNpemUobV93
ZWJQYWdlLnNpemUoKSkpCiAgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBt
X3N1cmZhY2UtPnN1cmZhY2VJRCgpOwogCkBAIC0xMjIsMTIgKzEzMywyMyBAQCB2b2lkIFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWQoKQogCiB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWdlQmFja2dy
b3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKQogeworICAgIGlmIChtX2lzRGlzY2FyZGFibGUpIHsK
KyAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zIHw9IERpc2NhcmRhYmxlU3luY0FjdGlv
bnM6OlVwZGF0ZUJhY2tncm91bmQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgp
OwogICAgIG1fY29tcG9zaXRvci0+c2V0RHJhd3NCYWNrZ3JvdW5kKG1fd2ViUGFnZS5kcmF3c0Jh
Y2tncm91bmQoKSk7CiB9CiAKIHZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKKyAgICBpZiAobV9pc0Rpc2Nh
cmRhYmxlKSB7CisgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucyB8PSBEaXNjYXJkYWJs
ZVN5bmNBY3Rpb25zOjpVcGRhdGVTaXplOworICAgICAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5k
aWRDaGFuZ2VWaWV3cG9ydFNpemUoc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBpZiAobV9zdXJmYWNlICYmIG1fc3VyZmFjZS0+cmVzaXplKHNpemUpKQogICAgICAgICBtX2xh
eWVyVHJlZUNvbnRleHQuY29udGV4dElEID0gbV9zdXJmYWNlLT5zdXJmYWNlSUQoKTsKIApAQCAt
MTQyLDcgKzE2NCwxMCBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
aXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUpCiB2b2lkIFRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoVmlld3BvcnRBdHRy
aWJ1dGVzJiYgYXR0cikKIHsKICAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3
cG9ydEF0dHJpYnV0ZXMoV1RGTW92ZShhdHRyKSk7Ci0gICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsK
KyAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKQorICAgICAgICBtX2Rpc2NhcmRhYmxlU3luY0FjdGlv
bnMgfD0gRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlVmlld3BvcnQ7CisgICAgZWxzZQor
ICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCiAjaWYgUExBVEZPUk0oR1RLKSAmJiBQ
TEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKQEAgLTE5
NSw2ICsyMjAsMzMgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0U2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWMKICAgICBtX2NvbXBvc2l0b3It
PnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUpOwogfQogCit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKGJvb2wgZGlzY2FyZGFibGUpCit7CisgICAg
bV9pc0Rpc2NhcmRhYmxlID0gZGlzY2FyZGFibGU7CisgICAgaWYgKG1faXNEaXNjYXJkYWJsZSkg
eworICAgICAgICBtX2Rpc2NhcmRhYmxlU3luY0FjdGlvbnMgPSBPcHRpb25TZXQ8RGlzY2FyZGFi
bGVTeW5jQWN0aW9ucz4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2Rp
c2NhcmRhYmxlU3luY0FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmNvbnRhaW5zKERpc2NhcmRhYmxlU3luY0FjdGlv
bnM6OlVwZGF0ZUJhY2tncm91bmQpKQorICAgICAgICBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5j
eUNoYW5nZWQoKTsKKworICAgIGlmIChtX2Rpc2NhcmRhYmxlU3luY0FjdGlvbnMuY29udGFpbnMo
RGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlU2l6ZSkpIHsKKyAgICAgICAgLy8gU2l6ZSBj
aGFuZ2VzIGFscmVhZHkgc2V0cyB0aGUgc2NhbGUgZmFjdG9yIGFuZCB1cGRhdGVzIHRoZSB2aWV3
cG9ydC4KKyAgICAgICAgc2l6ZURpZENoYW5nZShtX3dlYlBhZ2Uuc2l6ZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2Rpc2NhcmRhYmxlU3luY0FjdGlvbnMuY29udGFp
bnMoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlU2NhbGUpKQorICAgICAgICBkZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKworICAgIGlmIChtX2Rpc2NhcmRhYmxlU3luY0Fj
dGlvbnMuY29udGFpbnMoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlVmlld3BvcnQpKQor
ICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oCmluZGV4IDg1Y2NkZTFhNWI4Li5kMmNiN2JlYTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmgiCiAjaW5jbHVkZSAiU2ltcGxlVmlld3BvcnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGhy
ZWFkZWRDb21wb3NpdG9yLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC02Niw2ICs2Nyw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBvdmVycmlkZTsKICAgICBib29sIGZvcmNl
UmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CiAKKyAgICB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCkgb3ZlcnJpZGU7CisKICNpZiBQ
TEFURk9STShHVEspICYmIFBMQVRGT1JNKFgxMSkgJiYgICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9T
SVRFX1dJTkRPVykKICAgICB2b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGlu
Zyh1aW50NjRfdCkgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTEwNCw2ICsxMDcsOSBAQCBwcml2YXRl
OgogICAgIFNpbXBsZVZpZXdwb3J0Q29udHJvbGxlciBtX3ZpZXdwb3J0Q29udHJvbGxlcjsKICAg
ICBmbG9hdCBtX2xhc3RQYWdlU2NhbGVGYWN0b3IgeyAxIH07CiAgICAgV2ViQ29yZTo6SW50UG9p
bnQgbV9sYXN0U2Nyb2xsUG9zaXRpb247CisgICAgYm9vbCBtX2lzRGlzY2FyZGFibGUgeyBmYWxz
ZSB9OworICAgIGVudW0gY2xhc3MgRGlzY2FyZGFibGVTeW5jQWN0aW9ucyB7IFVwZGF0ZVNpemUg
PSAxIDw8IDEsIFVwZGF0ZVZpZXdwb3J0ID0gMSA8PCAyLCBVcGRhdGVTY2FsZSA9IDEgPDwgMywg
VXBkYXRlQmFja2dyb3VuZCA9IDEgPDwgNCB9OworICAgIE9wdGlvblNldDxEaXNjYXJkYWJsZVN5
bmNBY3Rpb25zPiBtX2Rpc2NhcmRhYmxlU3luY0FjdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhSW1wbC5jcHAKaW5kZXggNDgwNzg5YzdkM2IuLjU2YWRmOTA5YTA3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBs
LmNwcApAQCAtOTgsNiArOTgsOSBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2Nyb2xsKGNvbnN0
IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbAogICAgIGlmIChz
Y3JvbGxSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fcHJldmlv
dXNMYXllclRyZWVIb3N0KQorICAgICAgICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdC0+c2Nyb2xs
Tm9uQ29tcG9zaXRlZENvbnRlbnRzKHNjcm9sbFJlY3QpOworCiAgICAgaWYgKCFtX3Njcm9sbFJl
Y3QuaXNFbXB0eSgpICYmIHNjcm9sbFJlY3QgIT0gbV9zY3JvbGxSZWN0KSB7CiAgICAgICAgIHVu
c2lnbmVkIHNjcm9sbEFyZWEgPSBzY3JvbGxSZWN0LndpZHRoKCkgKiBzY3JvbGxSZWN0LmhlaWdo
dCgpOwogICAgICAgICB1bnNpZ25lZCBjdXJyZW50U2Nyb2xsQXJlYSA9IG1fc2Nyb2xsUmVjdC53
aWR0aCgpICogbV9zY3JvbGxSZWN0LmhlaWdodCgpOwpAQCAtMTYzLDYgKzE2Niw4IEBAIHZvaWQg
RHJhd2luZ0FyZWFJbXBsOjptYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgbmV3U2l6CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVE
KQogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29u
dGVudHNTaXplQ2hhbmdlZChuZXdTaXplKTsKKyAgICBlbHNlIGlmIChtX3ByZXZpb3VzTGF5ZXJU
cmVlSG9zdCkKKyAgICAgICAgbV9wcmV2aW91c0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzU2l6ZUNo
YW5nZWQobmV3U2l6ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShuZXdTaXplKTsKICNlbmRp
ZgpAQCAtMjg4LDE1ICsyOTMsNyBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKCkKICAgICBpZiAobV9hbHdheXNVc2VDb21wb3NpdGluZykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pOwot
Ci0gICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7Ci0gICAgbV93YW50c1RvRXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0gZmFsc2U7Ci0KLSAgICBBU1NFUlQobV9sYXllclRy
ZWVIb3N0KTsKLQotICAgIG1fbGF5ZXJUcmVlSG9zdC0+aW52YWxpZGF0ZSgpOwotICAgIG1fbGF5
ZXJUcmVlSG9zdCA9IG51bGxwdHI7CisgICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlTm93KCk7CiAgICAgbV9kaXJ0eVJlZ2lvbiA9IG1fd2Vi
UGFnZS5ib3VuZHMoKTsKIAogICAgIGlmIChtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApp
bmRleCAzYzY0Njg2MWNlZS4uNzBlZTQzNzhkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtODksNiArODksNyBAQCBwdWJs
aWM6CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgdmlydHVhbCB2b2lkIHNj
aGVkdWxlQW5pbWF0aW9uKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Rpc2NhcmRhYmxl
KGJvb2wpIHsgfTsKICNlbmRpZgogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFU
Rk9STShHVEspCg==
</data>
<flag name="review"
          id="321935"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>