<?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>142776</bug_id>
          
          <creation_ts>2015-03-17 01:05:27 -0700</creation_ts>
          <short_desc>Reproducible null deref under ScriptedAnimationController::createDisplayRefreshMonitor</short_desc>
          <delta_ts>2015-03-17 12:17:03 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1077809</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-03-17 01:05:27 -0700</bug_when>
    <thetext>Reproducible null deref under ScriptedAnimationController::createDisplayRefreshMonitor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077811</commentid>
    <comment_count>1</comment_count>
      <attachid>248829</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-03-17 01:10:25 -0700</bug_when>
    <thetext>Created attachment 248829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077812</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-03-17 01:11:00 -0700</bug_when>
    <thetext>&lt;rdar://problem/18921338&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077877</commentid>
    <comment_count>3</comment_count>
      <attachid>248829</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-03-17 06:40:09 -0700</bug_when>
    <thetext>Comment on attachment 248829
Patch

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

This looks like a lot of complexity to do the not quite right thing. Or did you determine that it&apos;s right to ignore the call?

&gt; LayoutTests/fast/animation/request-animation-frame-unparented-iframe-crash.html:7
&gt; +setTimeout(function () {

This races with parsing, as the timeout can fire before iframe is parsed, and certainly before it loads. 

I&apos;d do this in onload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077881</commentid>
    <comment_count>4</comment_count>
      <attachid>248829</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-03-17 08:10:00 -0700</bug_when>
    <thetext>Comment on attachment 248829
Patch

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

&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:232
&gt; +    if (!m_document-&gt;page())
&gt; +        return Optional&lt;RefPtr&lt;DisplayRefreshMonitor&gt;&gt;(nullptr);

This seems really subtle. The difference in semantic between an optional containing a nullptr and one containing Nullopt is not at all clear, so if we are going to use this idiom we’ll need a comment somewhere.

&gt; Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp:44
&gt; -    if (RefPtr&lt;DisplayRefreshMonitor&gt; monitor = client-&gt;createDisplayRefreshMonitor(displayID))
&gt; -        return monitor.release();
&gt; +    Optional&lt;RefPtr&lt;DisplayRefreshMonitor&gt;&gt; monitor = client-&gt;createDisplayRefreshMonitor(displayID);
&gt; +    if (monitor)
&gt; +        return monitor.value();

Why move the definition outside the if statement? Seems like it was better before.

&gt; Source/WebCore/platform/graphics/DisplayRefreshMonitorManager.cpp:97
&gt;      DisplayRefreshMonitor* monitor = ensureMonitorForClient(client);

A function named “ensure” that can return null is not a normal pattern in WebKit code. We should fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077916</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-03-17 11:26:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 248829 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248829&amp;action=review
&gt; 
&gt; This looks like a lot of complexity to do the not quite right thing. Or did
&gt; you determine that it&apos;s right to ignore the call?

The other browsers agree (dropping the callback on the floor), so I&apos;m going to go with it.

I&apos;m much more concerned about creating the wrong kind of DisplayRefreshMonitor and then sticking it in the map and using it from somewhere else - that is very scary.

&gt; &gt; LayoutTests/fast/animation/request-animation-frame-unparented-iframe-crash.html:7
&gt; &gt; +setTimeout(function () {
&gt; 
&gt; This races with parsing, as the timeout can fire before iframe is parsed,
&gt; and certainly before it loads. 
&gt; 
&gt; I&apos;d do this in onload.

Of course! That was silly of me. Thanks!

(In reply to comment #4)
&gt; Comment on attachment 248829 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248829&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptedAnimationController.cpp:232
&gt; &gt; +    if (!m_document-&gt;page())
&gt; &gt; +        return Optional&lt;RefPtr&lt;DisplayRefreshMonitor&gt;&gt;(nullptr);
&gt; 
&gt; This seems really subtle. The difference in semantic between an optional
&gt; containing a nullptr and one containing Nullopt is not at all clear, so if
&gt; we are going to use this idiom we’ll need a comment somewhere.

It is subtle. I&apos;ll leave a better comment.

I tried an alternative patch where ChromeClient *always* returns a value (never &quot;I dunno, make the default&quot;) if it&apos;s available, moving the platform #ifs into ChromeClient. For some reason that exploded to be much messier than you&apos;d expect (mostly I guess because currently the platform DisplayRefreshMonitor implementations are internal to WebCore).

&gt; &gt; Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp:44
&gt; &gt; -    if (RefPtr&lt;DisplayRefreshMonitor&gt; monitor = client-&gt;createDisplayRefreshMonitor(displayID))
&gt; &gt; -        return monitor.release();
&gt; &gt; +    Optional&lt;RefPtr&lt;DisplayRefreshMonitor&gt;&gt; monitor = client-&gt;createDisplayRefreshMonitor(displayID);
&gt; &gt; +    if (monitor)
&gt; &gt; +        return monitor.value();
&gt; 
&gt; Why move the definition outside the if statement? Seems like it was better
&gt; before.

Indeed, that was a mistake.

&gt; &gt; Source/WebCore/platform/graphics/DisplayRefreshMonitorManager.cpp:97
&gt; &gt;      DisplayRefreshMonitor* monitor = ensureMonitorForClient(client);
&gt; 
&gt; A function named “ensure” that can return null is not a normal pattern in
&gt; WebKit code. We should fix that.

tryEnsureMonitorForClient? createMonitorForClient? (creates can fail)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077928</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-03-17 12:17:03 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/181656</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248829</attachid>
            <date>2015-03-17 01:10:25 -0700</date>
            <delta_ts>2015-03-17 06:40:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142776-20150317010955.patch</filename>
            <type>text/plain</type>
            <size>19130</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxNTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGI0YWM5YWRmYTNkMDU5
YzY1MDFkYTVkNTRhYzM5NWViZWU1MThhNi4uMTYwZjcxN2MxMmI1NjY2NzY0ZjAxYmRmNDI4MDc1
ZDc0YTAxOTAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE1LTAzLTE3ICBUaW1v
dGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBSZXByb2R1
Y2libGUgbnVsbCBkZXJlZiB1bmRlciBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZURpc3BsYXlSZWZyZXNoTW9uaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQyNzc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODkyMTMzOD4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBm
YXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS11bnBhcmVudGVkLWlmcmFtZS1j
cmFzaC5odG1sCisKKyAgICAgICAgSW4gc29tZSBjYXNlcyAobGlrZSB0aGUgbmV3IHRlc3QpLCB3
ZSBjYW4gZW5kIHVwIHRyeWluZyB0byBzdGFydAorICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJh
bWUgb24gYSBEb2N1bWVudCB0aGF0IGhhcyBubyBQYWdlLiBNb3N0IHBhdGhzIG51bGwtY2hlY2tl
ZAorICAgICAgICB0aGUgUGFnZSBhbmQgZGlkIHRoZSByaWdodCB0aGluZywgYnV0IG9uZSBmYWls
ZWQgdG8gZG8gc28uIEluIGFkZGl0aW9uLAorICAgICAgICB0aGUgY3VycmVudCBmYWxsYmFjayAo
d2hlbiBQYWdlIGlzIG51bGwpIGNhbiByZXN1bHQgaW4gdXMgY29uc3RydWN0aW5nCisgICAgICAg
IHRoZSB3cm9uZyBraW5kIG9mIERpc3BsYXlSZWZyZXNoTW9uaXRvciwgd2hpY2ggY291bGQgbGVh
ZCB0byB0cm91YmxlCisgICAgICAgIGRvd24gdGhlIHJvYWQgd2hlbiBpdCdzIHJldXNlZC4gSW5z
dGVhZCwganVzdCBjb21wbGV0ZWx5IGF2b2lkIG1ha2luZyBhCisgICAgICAgIERpc3BsYXlSZWZy
ZXNoTW9uaXRvciBpbiB0aGUgbnVsbC1wYWdlIGNhc2UuCisKKyAgICAgICAgKiBkb20vU2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAg
SWYgdGhlIHBhZ2UgaXMgbnVsbCwgYmFpbC4KKworICAgICAgICAqIGRvbS9TY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVm
cmVzaE1vbml0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9y
OjpjcmVhdGUpOgorICAgICAgICBVc2UgT3B0aW9uYWw8PiB0byBtYWtlIGl0IGVhc3kgdG8gZGlz
dGluZ3Vpc2ggYmV0d2VlbiBDaHJvbWVDbGllbnQKKyAgICAgICAgYmVpbmcgdW5yZWFjaGFibGUg
KGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIFBhZ2UgZm9yIHNvbWUgcmVhc29uKSBhbmQKKyAgICAg
ICAgQ2hyb21lQ2xpZW50IGRlY2xhcmluZyB0aGF0IGl0IGRvZXNuJ3Qgd2FudCB0byBvdmVycmlk
ZSB0aGUgdHlwZSBvZgorICAgICAgICBEaXNwbGF5UmVmcmVzaE1vbml0b3IgdGhhdCBpcyBjcmVh
dGVkLgorCisgICAgICAgIElmIENocm9tZUNsaWVudCB3YXMgdW5yZWFjaGFibGUgZm9yIHNvbWUg
cmVhc29uLCB3ZSdsbCBnZXQgYmFjayBhbiBlbmdhZ2VkCisgICAgICAgIG51bGxwdHIgYW5kIHJl
dHVybiBpdCAoaW5zdGVhZCBvZiBjcmVhdGluZyBhIERpc3BsYXlSZWZyZXNoTW9uaXRvciBiYXNl
ZAorICAgICAgICBvbiB0aGUgcGxhdGZvcm0pLiBUaGlzIGF2b2lkcyBjcmVhdGluZyB0aGUgd3Jv
bmcgdHlwZSBvZiBEaXNwbGF5UmVmcmVzaE1vbml0b3IKKyAgICAgICAgaW4gdGhlIHJhcmUgY2Fz
ZSB3aGVyZSB3ZSBjYW4ndCByZWFjaCB0aGUgQ2hyb21lQ2xpZW50IChlLmcuIGEgZnJlc2hseSB1
bnBhcmVudGVkCisgICAgICAgIElGcmFtZSkuCisKKyAgICAgICAgSWYgaW5zdGVhZCB0aGUgY2xp
ZW50IHJldHVybnMgYSBkaXNlbmdhZ2VkIE51bGxvcHQsIHdlJ2xsIGludGVycHJldCB0aGF0IGFz
CisgICAgICAgICJjb25zdHJ1Y3QgdGhlIGRlZmF1bHQgdHlwZSIsIHdoaWNoIGZhbGxzIGJhY2sg
b24gdGhlIHBsYXRmb3JtICNpZmRlZnMgdG8KKyAgICAgICAgZGVjaWRlIHdoYXQgdG8gbWFrZS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6
ZW5zdXJlTW9uaXRvckZvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVz
aE1vbml0b3JNYW5hZ2VyOjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAgIFNpbGVudGx5IGhh
bmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBmYWlsZWQgdG8gbWFrZSBhIERpc3BsYXlSZWZyZXNoTW9u
aXRvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNs
aWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJVcGRhdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJVcGRhdGVyOjpjcmVhdGVEaXNw
bGF5UmVmcmVzaE1vbml0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXJVcGRhdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNyZWF0ZURp
c3BsYXlSZWZyZXNoTW9uaXRvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oOgorICAgICAgICBBZGp1c3QgdG8gdGhlIG5ldyBzaWduYXR1cmUgb2YgY3JlYXRl
RGlzcGxheVJlZnJlc2hNb25pdG9yLCBhbmQgcmV0dXJuCisgICAgICAgIGFuIGVuZ2FnZWQgKG51
bGxwdHIpIE9wdGlvbmFsIGlmIHdlIGNhbid0IGdldCB0byBDaHJvbWVDbGllbnQgZm9yIGFueSBy
ZWFzb24uCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICBSZXR1cm4g
TnVsbG9wdCAoaW5kaWNhdGluZyBhIGxhY2sgb2Ygb3ZlcnJpZGUpIGJ5IGRlZmF1bHQuCisKIDIw
MTUtMDMtMTYgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
UG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBJbnNwZWN0b3IgdmFsdWVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
YjdhYTdmODIzYjBjYjk4MWRkYTdhM2Q0MmZkZDU3NjYwZGU1NjRmZS4uMWFkNGM3MjJmZjVjM2Y5
N2ZkM2JmYTU5NWYwMTBjNDNjZjI4NTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDE1LTAzLTE3ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXByb2R1Y2libGUgbnVsbCBkZXJlZiB1bmRlciBTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXI6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNzc2CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xODkyMTMzOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1v
bml0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lmg6CisgICAgICAgIEFkanVzdCB0byB0aGUgbmV3IHNpZ25hdHVyZS4KKwogMjAxNS0wMy0x
NiAgQ29ucmFkIFNodWx0eiAgPGNvbnJhZF9zaHVsdHpAYXBwbGUuY29tPgogCiAgICAgICAgIEFs
bG93IGNsaWVudHMgdG8gc2VsZWN0aXZlbHkgZGlzYWJsZSBwbHVnLWlucwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCBmOTA2
OTAxZjkwOTViMGFjMjY4ZDI2YWM5NzJhMDZmZWRmM2ExZjBjLi44ODU0MjFkNTAyNGUwMWUzM2Jj
MmEyMzNiM2UwMzhiZWZiMmE4NDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMjI2LDkgKzIyNiwxMSBAQCB2b2lkIFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6ZGlzcGxheVJlZnJlc2hGaXJlZChkb3VibGUgbW9u
b3RvbmljVGltZU5vdykKIAogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BM
QVlfTU9OSVRPUikKLVBhc3NSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBTY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURp
c3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CitPcHRpb25hbDxSZWZQdHI8RGlzcGxheVJlZnJlc2hN
b25pdG9yPj4gU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGVEaXNwbGF5UmVmcmVz
aE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKSBjb25zdAogewotICAgIHJldHVy
biBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmNyZWF0ZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcihkaXNwbGF5SUQpOworICAgIGlmICghbV9kb2N1bWVudC0+cGFnZSgpKQorICAg
ICAgICByZXR1cm4gT3B0aW9uYWw8UmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4+KG51bGxw
dHIpOworICAgIHJldHVybiBPcHRpb25hbDxSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPj4o
bV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5jcmVhdGVEaXNwbGF5UmVmcmVz
aE1vbml0b3IoZGlzcGxheUlEKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IDY5YjZkYzJjNDQzMWE4ZmJh
MjNlODQzNjZmMmQxYmUxNTk5NmJlYTYuLjFhY2U1OGI2ZDQyYjFmNWRjZjVhNTA1N2I0MzU3MDYy
MDhjZGY5NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmgKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICNpZiBVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQogICAgIC8vIE92ZXJyaWRlIGZvciBEaXNw
bGF5UmVmcmVzaE1vbml0b3JDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGxheVJlZnJlc2hG
aXJlZChkb3VibGUgdGltZXN0YW1wKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZv
cm1EaXNwbGF5SUQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UmVmUHRy
PERpc3BsYXlSZWZyZXNoTW9uaXRvcj4+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0
Zm9ybURpc3BsYXlJRCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIG1faXNVc2luZ1RpbWVy
OwogICAgIGJvb2wgbV9pc1Rocm90dGxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmlu
ZGV4IDBjYzdiMTVjMDQzZWI2NWMxMmM1ZTQxNDc4OWMxYmZlODIzYWM2NzYuLjk5ZGE5NTBkOTM5
NGQzMjM0ZmYzNTgyYTUyOWRkNWJkYWQxZjVjMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaApAQCAtMjkwLDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5
ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7IHJldHVybiBudWxscHRy
OyB9CisgICAgdmlydHVhbCBPcHRpb25hbDxSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPj4g
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7IHJl
dHVybiBOdWxsb3B0OyB9CiAjZW5kaWYKIAogICAgIC8vIFBhc3MgMCBhcyB0aGUgR3JhcGhpY3NM
YXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAKaW5kZXgg
MDU1OWRjNTI1ZmRkNmY3NTc4NGY3NzMyYzFhOWJjMDE2ZGQ2YjRmZi4uYjY3ZDNmNGY2M2U4YmFh
MzRlMWFmY2I2Yzg5ZWIzMWMwMmJlMDk2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwCkBAIC0zNSwx
MiArMzUsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPERpc3BsYXlS
ZWZyZXNoTW9uaXRvcj4gRGlzcGxheVJlZnJlc2hNb25pdG9yOjpjcmVhdGUoRGlzcGxheVJlZnJl
c2hNb25pdG9yQ2xpZW50KiBjbGllbnQpCitSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBE
aXNwbGF5UmVmcmVzaE1vbml0b3I6OmNyZWF0ZShEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQq
IGNsaWVudCkKIHsKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQgPSBjbGllbnQtPmRp
c3BsYXlJRCgpOwogCi0gICAgaWYgKFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IG1vbml0
b3IgPSBjbGllbnQtPmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpKQotICAg
ICAgICByZXR1cm4gbW9uaXRvci5yZWxlYXNlKCk7CisgICAgT3B0aW9uYWw8UmVmUHRyPERpc3Bs
YXlSZWZyZXNoTW9uaXRvcj4+IG1vbml0b3IgPSBjbGllbnQtPmNyZWF0ZURpc3BsYXlSZWZyZXNo
TW9uaXRvcihkaXNwbGF5SUQpOworICAgIGlmIChtb25pdG9yKQorICAgICAgICByZXR1cm4gbW9u
aXRvci52YWx1ZSgpOworCisgICAgLy8gSWYgQ2hyb21lQ2xpZW50IHJldHVybmVkIE51bGxvcHQs
IHdlJ2xsIGdvIGFoZWFkIGFuZCBtYWtlIG9uZSBvZiB0aGUgZGVmYXVsdCB0eXBlLgogCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIHJldHVybiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWM6OmNyZWF0
ZShkaXNwbGF5SUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaAppbmRleCA5OGFkMzAyMTdhMGNmZmZkYjA1Y2Uw
YWMzMmIyMTRmOGZiNGE4MTljLi41YzUyMGM0YzFhN2MxMDE3MWQzMDNmNWZkZGY0YjI0NDFhNTA0
MTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9E
aXNwbGF5UmVmcmVzaE1vbml0b3IuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBEaXNwbGF5UmVm
cmVzaE1vbml0b3JDbGllbnQ7CiAKIGNsYXNzIERpc3BsYXlSZWZyZXNoTW9uaXRvciA6IHB1Ymxp
YyBSZWZDb3VudGVkPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlKERpc3BsYXlSZWZyZXNo
TW9uaXRvckNsaWVudCopOworICAgIHN0YXRpYyBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9y
PiBjcmVhdGUoRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50Kik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+RGlzcGxheVJlZnJlc2hNb25pdG9yKCk7CiAgICAgCiAgICAgLy8gUmV0dXJu
IHRydWUgaWYgY2FsbGJhY2sgcmVxdWVzdCB3YXMgc2NoZWR1bGVkLCBmYWxzZSBpZiBpdCBjb3Vs
ZG4ndCBiZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlz
cGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAppbmRleCBiNmVlOGQ2OGZmZGY5M2Q2
NjdjM2I3YWEyYmNmNWMxOTNiZDg3MjZkLi4wZDZlZDY5MGQ5M2M4OTM4MWJmMWM4YjQ1NzZiMDMy
MWVkZWNlMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9E
aXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaApAQCAtMjksNiArMjksNyBA
QAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCiAKICNp
bmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQ0LDcgQEAgcHVibGljOgogICAgIC8vIEFs
d2F5cyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5
UmVmcmVzaEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApID0gMDsKIAotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQ
bGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UmVmUHRy
PERpc3BsYXlSZWZyZXNoTW9uaXRvcj4+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0
Zm9ybURpc3BsYXlJRCkgY29uc3QgPSAwOwogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxh
eUlEKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5SUQ7IH0KICAgICBib29sIGhhc0Rpc3BsYXlJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlESXNTZXQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25p
dG9yTWFuYWdlci5jcHAKaW5kZXggNDExYzJjZTE2YzYzODEyNTBhZjA4NjUxZGRhNTk1ZTlhODJj
ZGE5ZS4uNGU2MzE5NzEyZjRmM2JhYjEzOWZmMTY1MmVlMWU2ZDBiZDIwYTMwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9y
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKQEAgLTU1LDYgKzU1LDggQEAgRGlzcGxheVJlZnJl
c2hNb25pdG9yKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjplbnN1cmVNb25pdG9yRm9y
Q2xpZW50KERpc3AKICAgICB9CiAKICAgICBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBt
b25pdG9yID0gRGlzcGxheVJlZnJlc2hNb25pdG9yOjpjcmVhdGUoY2xpZW50KTsKKyAgICBpZiAo
IW1vbml0b3IpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIG1vbml0b3ItPmFkZENsaWVu
dChjbGllbnQpOwogICAgIERpc3BsYXlSZWZyZXNoTW9uaXRvciogcmVzdWx0ID0gbW9uaXRvci5n
ZXQoKTsKICAgICBtX21vbml0b3JzLmFwcGVuZChtb25pdG9yLnJlbGVhc2UoKSk7CkBAIC05Myw2
ICs5NSw4IEBAIGJvb2wgRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6c2NoZWR1bGVBbmlt
YXRpb24oRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50CiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIERpc3BsYXlSZWZyZXNoTW9uaXRvciogbW9uaXRvciA9IGVuc3VyZU1vbml0b3JGb3JD
bGllbnQoY2xpZW50KTsKKyAgICBpZiAoIW1vbml0b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGNsaWVudC0+c2V0SXNTY2hlZHVsZWQodHJ1ZSk7CiAgICAgcmV0dXJuIG1vbml0b3It
PnJlcXVlc3RSZWZyZXNoQ2FsbGJhY2soKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJVcGRhdGVyLmNwcAppbmRleCBhMDcwYmMx
OTE1ODFhYTk4YmMwOTM5ZDIyMjU5NjU3ZGQ0OGMyYTJhLi5mYTE4NzE1MzgwODgwZjk3Y2EyNmJj
OWMwN2E1OTkwZTk5YjM2ZDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0ZXIuY3BwCkBAIC04MSw5ICs4MSwxMSBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJVcGRhdGVyOjpkaXNwbGF5UmVmcmVzaEZpcmVkKGRvdWJsZSB0
aW1lc3RhbXApCiAjZW5kaWYKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQ
TEFZX01PTklUT1IpCi1QYXNzUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gR3JhcGhpY3NM
YXllclVwZGF0ZXI6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJ
RCBkaXNwbGF5SUQpIGNvbnN0CitPcHRpb25hbDxSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9y
Pj4gR3JhcGhpY3NMYXllclVwZGF0ZXI6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY2xpZW50ID8g
bV9jbGllbnQtPmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpIDogbnVsbHB0
cjsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVmUHRyPERp
c3BsYXlSZWZyZXNoTW9uaXRvcj4+KG51bGxwdHIpOworICAgIHJldHVybiBtX2NsaWVudC0+Y3Jl
YXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiB9CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJVcGRh
dGVyLmgKaW5kZXggZWYyNWRmYTFlNjI1OTgwZjJiM2ZlNjczZTBmOTE0ZWU3ZTJmZWFhOS4uYjZk
YmQ4ODhkNjM5YTVkMGYzZmQ5MWFmN2RkMWI2ZTQyYzI0NDJhOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVXBkYXRlci5oCkBA
IC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyVXBkYXRl
ckNsaWVudCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBmbHVzaExheWVyc1Nvb24oR3JhcGhpY3NM
YXllclVwZGF0ZXIqKSA9IDA7CiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BM
QVlfTU9OSVRPUikKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9y
PiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+PiBj
cmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0ID0gMDsK
ICNlbmRpZgogfTsKIApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JlZW5E
aWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQpOwogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGlzcGxheVJl
ZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5
SUQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UmVmUHRyPERpc3BsYXlS
ZWZyZXNoTW9uaXRvcj4+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3Bs
YXlJRCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggYzA0OTVm
ODY1ZTYxYjFkZDAzNTQ2MmU4N2YwMTFkZDJhNDIwYjIwNi4uYzRlZWMyYzY4MWE2YjE5MzJlODkw
ODc2NGUxMmM5OTkzMmI1NGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTQxNTAsMTQgKzQxNTAsMTQgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhaW50UmVsYXRlZE1pbGVzdG9uZXNUaW1lckZpcmVkKCkK
IH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi1Q
YXNzUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
cmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKSBj
b25zdAorT3B0aW9uYWw8UmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4+IFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlE
IGRpc3BsYXlJRCkgY29uc3QKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJh
bWVWaWV3KCkuZnJhbWUoKTsKICAgICBQYWdlKiBwYWdlID0gZnJhbWUucGFnZSgpOwogICAgIGlm
ICghcGFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBPcHRpb25h
bDxSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPj4obnVsbHB0cik7CiAKLSAgICByZXR1cm4g
cGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3Bs
YXlJRCk7CisgICAgcmV0dXJuIE9wdGlvbmFsPFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+
PihwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlz
cGxheUlEKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IGRlNWQ2OTMxZDFkMzgzNWVlYzVjNTVjYjlkNjU1
NzU4MWNkYWI3ZGYuLjBjZjAyNTZhMTU4NDlhZTBkNTU5NzkyNmU3MzIxYTcxY2E3OGUwNDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgK
QEAgLTM5OSw3ICszOTksNyBAQCBwcml2YXRlOgogICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBz
Y3JvbGxpbmdDb29yZGluYXRvcigpIGNvbnN0OwogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICBQYXNzUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9u
aXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25z
dCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPj4g
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVy
cmlkZTsKICNlbmRpZgogCiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9u
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApp
bmRleCA1ZGFlNzQzYjk0ZDM1NjkzY2JkYWFmYWYyN2I1OWY5NmYyOGIwZmI4Li45NDRmZTZkNGVk
ZDRhMDBkODZmMDAyMjdiZGNkMTBjZDNiNGFmY2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CkBAIC04NTAsOSArODUwLDkgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVu
dDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLVBhc3NSZWZQdHI8V2ViQ29yZTo6RGlzcGxh
eVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9u
aXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CitPcHRpb25hbDxSZWZQdHI8
V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKSBjb25zdAog
ewotICAgIHJldHVybiBtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPmNyZWF0ZURpc3BsYXlSZWZyZXNo
TW9uaXRvcihkaXNwbGF5SUQpOworICAgIHJldHVybiBPcHRpb25hbDxSZWZQdHI8V2ViQ29yZTo6
RGlzcGxheVJlZnJlc2hNb25pdG9yPj4obV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5jcmVhdGVEaXNw
bGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgKaW5kZXggMzVkYWFkZmUxOWU2ODgxN2FhOTA4MzBkYWVkNWRmNDdhZjFmNTI5MC4uZmZm
NDliMzcyMjdmZWU4OTFjNjNiNTYzZjZhZDJhZTcxM2VhMWYzYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCkBAIC0yMTcsNyArMjE3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0
TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZs
YWdzKSBvdmVycmlkZTsKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZ
X01PTklUT1IpCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNo
TW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFJlZlB0cjxXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3I+PiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1E
aXNwbGF5SUQpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIENvbXBvc2l0
aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3Qgb3ZlcnJp
ZGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCA3MWE5NzRhNjgxYWM5ZTdlNDY0ZDU0MGZkY2I3ZjgyZWU3NmY1NDAzLi5lM2U4
YzAxNTkzODQ2MmI4ZDc2MDJjYmRmYTkwOGY4YzUxN2VhNmNlIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTUtMDMtMTcgIFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgorCisgICAgICAgIFJlcHJvZHVjaWJsZSBudWxsIGRlcmVmIHVuZGVyIFNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3NzYKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzE4OTIxMzM4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtdW5w
YXJlbnRlZC1pZnJhbWUtY3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS11bnBhcmVudGVkLWlmcmFtZS1jcmFz
aC5odG1sOiBBZGRlZC4KKyAgICAgICAgQWRkIGEgdGVzdCB0aGF0IGVuc3VyZXMgdGhhdCBjYWxs
aW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSBvbiBhIHJlY2VudGx5LXVucGFyZW50ZWQKKyAgICAg
ICAgZnJhbWUgZG9lc24ndCBjcmFzaC4KKwogMjAxNS0wMy0xNiAgQWxleGV5IFByb3NrdXJ5YWtv
diAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBmYXN0L2Zvcm1zL3RleHQtY29udHJv
bC1pbnRyaW5zaWMtd2lkdGhzLmh0bWwgZmFpbHMgd2hlbiBNUyBPZmZpY2UgaXMgaW5zdGFsbGVk
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlv
bi1mcmFtZS11bnBhcmVudGVkLWlmcmFtZS1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS11bnBhcmVudGVkLWlmcmFt
ZS1jcmFzaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjU0ZGRmN2YxN2VmYWI1OGU0MmZhYmUz
ODUyNTc5NjRhZTJjNWQ0MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvYW5p
bWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXVucGFyZW50ZWQtaWZyYW1lLWNyYXNoLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitUaGlzIHRlc3QgcGFzc2VzIGlmIGl0IGRvZXMgbm90
IGNyYXNoLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1h
bmltYXRpb24tZnJhbWUtdW5wYXJlbnRlZC1pZnJhbWUtY3Jhc2guaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLXVucGFyZW50ZWQtaWZyYW1l
LWNyYXNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRmODBjNDJlYWYyNGY4NWQ4ZjQ4NGNhMzc2YWVhMzFj
YjYwNGYxZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3Jl
cXVlc3QtYW5pbWF0aW9uLWZyYW1lLXVucGFyZW50ZWQtaWZyYW1lLWNyYXNoLmh0bWwKQEAgLTAs
MCArMSwyMiBAQAorPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQor
CitzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZnJhbWUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZnJhbWUiKTsKKyAgICB2YXIgZnJhbWVXaW5kb3cgPSBmcmFtZS5jb250ZW50
V2luZG93OworICAgIHZhciByQUYgPSBmcmFtZVdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7
CisKKyAgICBmcmFtZS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGZyYW1lKTsKKyAgICByQUYu
Y2FsbChmcmFtZVdpbmRvdywgZnVuY3Rpb24gKCkgeyB9KTsKKworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9LCAwKTsKKzwvc2Ny
aXB0PgorPGJvZHk+Cis8aWZyYW1lIGlkPSJmcmFtZSI+PC9pZnJhbWU+CitUaGlzIHRlc3QgcGFz
c2VzIGlmIGl0IGRvZXMgbm90IGNyYXNoLgorPC9ib2R5Pgo=
</data>
<flag name="review"
          id="273694"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>