<?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>35798</bug_id>
          
          <creation_ts>2010-03-05 10:48:10 -0800</creation_ts>
          <short_desc>Crash due to infinite recursion when viewing composited video on Windows</short_desc>
          <delta_ts>2010-03-05 13:05:41 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>196547</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-05 10:48:10 -0800</bug_when>
    <thetext>Playing any video on Windows with HW compositing enabled will crash due to infinite recursion. Here&apos;s the top of the stack:

 	WebKit.dll!WebCore::MediaPlayerPrivate::notifySyncRequired(const WebCore::GraphicsLayer * __formal=0x0b955bd0)  Line 866 + 0xb bytes	C++
 	WebKit.dll!WebCore::GraphicsLayerCACF::notifySyncRequired()  Line 94 + 0x31 bytes	C++
 	WebKit.dll!WebCore::MediaPlayerPrivate::notifySyncRequired(const WebCore::GraphicsLayer * __formal=0x0b955bd0)  Line 869	C++
 	WebKit.dll!WebCore::GraphicsLayerCACF::notifySyncRequired()  Line 94 + 0x31 bytes	C++
 	WebKit.dll!WebCore::MediaPlayerPrivate::notifySyncRequired(const WebCore::GraphicsLayer * __formal=0x0b955bd0)  Line 869	C++

Proposed solution:
1. Make WKCACFLayer be a base class, with a virtual drawInContext() method
2. Subclass WKCACFLayer for GraphicsLayer (equivalent of WebLayer)
3. Subclass WKCACFLayer for the root, to allow the root layer to communicate with the WKCACFLayerRenderer.
4. Eliminate the notifySyncRequired callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196572</commentid>
    <comment_count>1</comment_count>
      <attachid>50109</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-05 11:59:28 -0800</bug_when>
    <thetext>Created attachment 50109
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196573</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-05 12:01:28 -0800</bug_when>
    <thetext>Attachment 50109 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/win/GraphicsLayerCACF.cpp:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196574</commentid>
    <comment_count>3</comment_count>
      <attachid>50109</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-03-05 12:10:30 -0800</bug_when>
    <thetext>Comment on attachment 50109
Patch

&gt; Index: WebCore/platform/graphics/win/GraphicsLayerCACF.cpp
&gt; ===================================================================

&gt; +class WebLayer : public WKCACFLayer {

&gt; +private:
&gt; +   GraphicsLayerCACF* m_owner;
&gt; +};

Could WebLayer get away with having pointer to the base class (GraphicsLayer?). No point making it too incestuous with GraphicsLayerCACF if you can avoid it.

This this a great improvement to these classes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196585</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-03-05 12:35:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/7706319&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196603</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-05 13:05:41 -0800</bug_when>
    <thetext>Fixed in http://trac.webkit.org/changeset/55592</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50109</attachid>
            <date>2010-03-05 11:59:28 -0800</date>
            <delta_ts>2010-03-05 12:10:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>35798.patch</filename>
            <type>text/plain</type>
            <size>26151</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTU5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTAtMDMtMDUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVkIGluZmluaXRlIHJlY3Vyc2lvbiBvZiBjb21wb3NpdGVkIHZpZGVvIG9uIFdpbmRvd3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1Nzk4CisgICAg
ICAgIAorICAgICAgICBEdWUgdG8gYSBjaGFuZ2UgaW4gdGhlIHdheSB3ZSBnZXQgdGhlIHBsYXRm
b3JtTGF5ZXIgKFdLQ0FDRkxheWVyKQorICAgICAgICBmb3IgdmlkZW8sIHRoZSBtZWRpYXBsYXll
ciB3YXMgaW4gYW4gaW5maW5pdGUgbG9vcCB3aXRoIFdLQ0FDRkxheWVyCisgICAgICAgIGJvdW5j
aW5nIG5vdGlmeVN5bmNSZXF1aXJlZCBjYWxscyBiYWNrIGFuZCBmb3J0aC4gQWZ0ZXIgZGlzY3Vz
c2lvbgorICAgICAgICB3ZSBkZWNpZGVkIGl0IHdvdWxkIGJlIGJldHRlciB0byBhdm9pZCBub3Rp
ZnlTeW5jUmVxdWlyZWQgZW50aXJlbHksCisgICAgICAgIHdoaWNoIHdvdWxkIHdhbGsgdXAgdGhy
b3VnaCBXZWJDb3JlIGNhbGxzIGFuZCBiYWNrIGRvd24gdGhyb3VnaAorICAgICAgICBXZWJLaXQg
Y2FsbHMgdG8gdGVsbCB0aGUgV0tDQUNGTGF5ZXJSZW5kZXJlciB0byBraWNrIG9mZiBhIHJlbmRl
ciBjeWNsZS4KKyAgICAgICAgCisgICAgICAgIEkgc3ViY2xhc3NlZCBXS0NBQ0ZMYXllciBpbnRv
IGEgV0tDQUNGUm9vdExheWVyIHdoaWNoIGhhcyBhIHBvaW50ZXIgdG8KKyAgICAgICAgdGhlIFdL
Q0FDRkxheWVyUmVuZGVyZXIuIFdoZW4gc29tZXRoaW5nIGNoYW5nZXMsIHdlIGdldCB0aGUgcm9v
dExheWVyKCkKKyAgICAgICAgYnkgd2Fsa2luZyB1cCB0aGUgbGF5ZXJzIGFuZCBtYWtlIGEgdmly
dHVhbCBjYWxsIHdoaWNoIFdLQ0FDRlJvb3RMYXllcgorICAgICAgICBpbXBsZW1lbnRzIHRvIHRl
bGwgV0tDQUNGTGF5ZXJSZW5kZXJlciB0byByZW5kZXIuCisgICAgICAgIAorICAgICAgICBJIGFs
c28gZ290IHJpZCBvZiBHcmFwaGljc0xheWVyIGtub3dsZWRnZSBmcm9tIFdLQ0FDRkxheWVyLiBH
cmFwaGljc0xheWVyQ0FDRgorICAgICAgICBub3cgbWFrZXMgYSBXZWJMYXllciBzdWJjbGFzcyB3
aGljaCBpbXBsZW1lbnRzIHRoZSBkcmF3SW5Db250ZXh0KCkKKyAgICAgICAgdmlydHVhbCBtZXRo
b2QuCisgICAgICAgIAorICAgICAgICBJIGFsc28gaGFkIHRvIGFkZCBwcm90ZWN0aW9uIHRvIHRo
ZSBwbGF0Zm9ybUxheWVyKCkgY2FsbCBpbiAKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lV2luIGJlY2F1c2UgaXQgZ2V0cyBjYWxsZWQgZWFybGllciB0aGFuIGJlZm9yZQorICAg
ICAgICB3aGVuIHRoZSBsYXllciBpcyBzdGlsbCBudWxsLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcDpJbXBsZW1lbnQgV2ViTGF5ZXIKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkxheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
TGF5ZXI6OmRyYXdJbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTGF5ZXI6OldlYkxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQUNGOjpHcmFwaGljc0xheWVy
Q0FDRik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0FDRjo6c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQUNGOjp1cGRhdGVM
YXllclByZXNlcnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQUNGOjp1
cGRhdGVDb250ZW50c0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NMYXllckNBQ0YuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcDpQcm90ZWN0IHBsYXRmb3JtTGF5ZXIgZnJvbSBh
IG51bGwgcXRMYXllcgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lV2luLmg6R290IHJpZCBvZiBubyBsb25nZXIgbmVlZGVkIG1ldGhvZAor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpub3RpZnlBbmltYXRpb25TdGFy
dGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXIuY3BwOkdv
dCByaWQgb2YgR3JhcGhpY3NMYXllciBkZXBlbmRlbmN5LiBNYWRlIHZpcnR1YWwuCisgICAgICAg
IChXZWJDb3JlOjpkaXNwbGF5Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6V0tDQUNGTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6OnNldE5lZWRzQ29tbWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6V0tD
QUNGTGF5ZXI6OnNldE5lZWRzUmVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVy
OjpkcmF3SW5Db250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNG
TGF5ZXJSZW5kZXJlci5jcHA6Q3JlYXRlIFdLQ0FDRlJvb3RMYXllciB3aGljaCB0ZWxscyBXS0NB
Q0ZMYXllclJlbmRlcmVyIHRvIHJlbmRlcgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGUm9vdExh
eWVyOjpXS0NBQ0ZSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGUm9vdExheWVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGUm9vdExheWVyOjpzZXROZWVkc1Jl
bmRlcik6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZSb290TGF5ZXI6OnNldE5lZWRzRGlzcGxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllclJlbmRlcmVyOjpyb290TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXJSZW5kZXJlcjo6c2V0Um9vdENoaWxkTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXJSZW5kZXJlcjo6c2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyUmVuZGVyZXI6OmNyZWF0ZVJlbmRlcmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5o
OgorCiAyMDEwLTAzLTA1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNBQ0YuY3BwCShyZXZpc2lv
biA1NTU1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJD
QUNGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsODIgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBXZWJMYXllciA6IHB1YmxpYyBX
S0NBQ0ZMYXllciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+
IGNyZWF0ZShMYXllclR5cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQ0FDRiogb3duZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkxheWVyKGxheWVyVHlwZSwgb3du
ZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0luQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIGlmICghbV9vd25lcikKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQp
OworCisgICAgICAgIENHUmVjdCBsYXllckJvdW5kcyA9IGJvdW5kcygpOworICAgICAgICBpZiAo
bV9vd25lci0+Y29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKSB7CisgICAgICAgICAgICBDR0NvbnRleHRT
Y2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CisgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0oY29udGV4dCwgMCwgLWxheWVyQm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtX293bmVyLT5jbGllbnQoKSkgeworICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKworICAgICAgICAgICAgLy8gSXQncyBpbXBv
cnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJl
IHNpZ25pZmljYW50bHkKKyAgICAgICAgICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91
bmRzIChlLmcuIHRpbGVkIGxheWVycykKKyAgICAgICAgICAgIENHUmVjdCBjbGlwQm91bmRzID0g
Q0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgICAgICAgICAgSW50UmVj
dCBjbGlwKGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOworICAgICAgICAgICAgbV9vd25l
ci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKKyAg
ICAgICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2UnZCBh
dm9pZCBjYWxsaW5nIC1zZXROZWVkc0Rpc3BsYXkgb24gYSBsYXllciB0aGF0IGlzIGEgcGxhaW4g
Y29sb3IsCisgICAgICAgICAgICAvLyBzbyBDQSBuZXZlciBtYWtlcyBiYWNraW5nIHN0b3JlIGZv
ciBpdCAod2hpY2ggaXMgd2hhdCAtc2V0TmVlZHNEaXNwbGF5IHdpbGwgZG8gYWJvdmUpLgorICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDAuMGYsIDEuMGYsIDAu
MGYsIDEuMGYpOworICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgbGF5ZXJC
b3VuZHMpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBpZiAobV9vd25lci0+c2hvd1Jl
cGFpbnRDb3VudGVyKCkpIHsKKyAgICAgICAgICAgIGNoYXIgdGV4dFsxNl07IC8vIHRoYXQncyBh
IGxvdCBvZiByZXBhaW50cworICAgICAgICAgICAgX3NucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0
KSwgIiVkIiwgbV9vd25lci0+aW5jcmVtZW50UmVwYWludENvdW50KCkpOworCisgICAgICAgICAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0U2V0
UkdCRmlsbENvbG9yKGNvbnRleHQsIDEuMGYsIDAuMGYsIDAuMGYsIDAuOGYpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBDR1JlY3QgYUJvdW5kcyA9IGxheWVyQm91bmRzOworCisgICAgICAg
ICAgICBhQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEyICogc3RybGVuKHRleHQpOworICAgICAg
ICAgICAgYUJvdW5kcy5zaXplLmhlaWdodCA9IDI1OworICAgICAgICAgICAgQ0dDb250ZXh0Rmls
bFJlY3QoY29udGV4dCwgYUJvdW5kcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENHQ29u
dGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKwor
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjb250ZXh0LCBDR0FmZmluZVRyYW5z
Zm9ybU1ha2VTY2FsZSgxLjBmLCAtMS4wZikpOworICAgICAgICAgICAgQ0dDb250ZXh0U2VsZWN0
Rm9udChjb250ZXh0LCAiSGVsdmV0aWNhIiwgMjUsIGtDR0VuY29kaW5nTWFjUm9tYW4pOworICAg
ICAgICAgICAgQ0dDb250ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGFCb3VuZHMub3JpZ2lu
LnggKyAzLjBmLCBhQm91bmRzLm9yaWdpbi55ICsgMjAuMGYsIHRleHQsIHN0cmxlbih0ZXh0KSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4
dCk7ICAgICAgICAKKyAgICAgICAgfQorCisgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
Y29udGV4dCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgV2ViTGF5ZXIoTGF5ZXJUeXBlIGxh
eWVyVHlwZSwgR3JhcGhpY3NMYXllckNBQ0YqIG93bmVyKQorICAgICA6IFdLQ0FDRkxheWVyKGxh
eWVyVHlwZSkKKyAgICAgLCBtX293bmVyKG93bmVyKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6
CisgICBHcmFwaGljc0xheWVyQ0FDRiogbV9vd25lcjsKK307CisKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBjb3B5VHJhbnNmb3JtKENBVHJhbnNmb3JtM0QmIHRvVDNELCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdCkKIHsKICAgICB0b1QzRC5tMTEgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHQu
bTExKCkpOwpAQCAtMTI0LDcgKzIwMCw3IEBAIEdyYXBoaWNzTGF5ZXJDQUNGOjpHcmFwaGljc0xh
eWVyQ0FDRihHcmEKICAgICAsIG1fY29udGVudHNMYXllclB1cnBvc2UoTm9Db250ZW50c0xheWVy
KQogICAgICwgbV9jb250ZW50c0xheWVySGFzQmFja2dyb3VuZENvbG9yKGZhbHNlKQogewotICAg
IG1fbGF5ZXIgPSBXS0NBQ0ZMYXllcjo6Y3JlYXRlKFdLQ0FDRkxheWVyOjpMYXllciwgdGhpcyk7
CisgICAgbV9sYXllciA9IFdlYkxheWVyOjpjcmVhdGUoV0tDQUNGTGF5ZXI6OkxheWVyLCB0aGlz
KTsKICAgICAKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIH0KQEAgLTMzMSw4ICs0MDcs
MTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0TmVlZHNEaXNwbGF5KAogCiB2b2lkIEdy
YXBoaWNzTGF5ZXJDQUNGOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgbV9sYXllci0+c2V0TmVl
ZHNEaXNwbGF5KHJlY3QpOworICAgIGlmIChkcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBDR1Jl
Y3QgY2dSZWN0ID0gcmVjdDsKKyAgICAgICAgbV9sYXllci0+c2V0TmVlZHNEaXNwbGF5KCZjZ1Jl
Y3QpOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0Q29udGVudHNSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC01MzcsNyArNjE1LDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ0FDRjo6dXBkYXRlTGF5ZXJQcmVzZQogewogICAgIGlmIChtX3ByZXNlcnZlczNEICYmICFt
X3RyYW5zZm9ybUxheWVyKSB7CiAgICAgICAgIC8vIENyZWF0ZSB0aGUgdHJhbnNmb3JtIGxheWVy
LgotICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0gV0tDQUNGTGF5ZXI6OmNyZWF0ZShXS0NBQ0ZM
YXllcjo6VHJhbnNmb3JtTGF5ZXIsIHRoaXMpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0g
V2ViTGF5ZXI6OmNyZWF0ZShXS0NBQ0ZMYXllcjo6VHJhbnNmb3JtTGF5ZXIsIHRoaXMpOwogCiAj
aWZuZGVmIE5ERUJVRwogICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXROYW1lKFN0cmluZygp
LmZvcm1hdCgiVHJhbnNmb3JtIExheWVyIENBVHJhbnNmb3JtTGF5ZXIoJXApIEdyYXBoaWNzTGF5
ZXIoJXApIiwgbV90cmFuc2Zvcm1MYXllci5nZXQoKSwgdGhpcykpOwpAQCAtNjEwLDcgKzY4OCw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBQ0Y6OnVwZGF0ZUNvbnRlbnRzSW0KIHsKICAgICBpZiAo
bV9wZW5kaW5nQ29udGVudHNJbWFnZSkgewogICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5n
ZXQoKSkgewotICAgICAgICAgICAgUmVmUHRyPFdLQ0FDRkxheWVyPiBpbWFnZUxheWVyID0gV0tD
QUNGTGF5ZXI6OmNyZWF0ZShXS0NBQ0ZMYXllcjo6TGF5ZXIsIHRoaXMpOworICAgICAgICAgICAg
UmVmUHRyPFdLQ0FDRkxheWVyPiBpbWFnZUxheWVyID0gV2ViTGF5ZXI6OmNyZWF0ZShXS0NBQ0ZM
YXllcjo6TGF5ZXIsIHRoaXMpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIGltYWdlTGF5
ZXItPnNldE5hbWUoIkltYWdlIExheWVyIik7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNBQ0YuaAkocmV2aXNpb24gNTU1
NTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MSw4ICs5MSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRHZW9tZXRyeU9yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRh
dGlvbik7CiAKLSAgICB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpIHsgaWYgKG1fY2xpZW50KSBt
X2NsaWVudC0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOyB9Ci0KIHByaXZhdGU6CiAgICAgdm9p
ZCB1cGRhdGVPcGFjaXR5T25MYXllcigpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVdpbi5jcHAJKHJldmlzaW9uIDU1NTU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDcgKzExMSw3IEBAIFBsYXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm8K
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBNZWRpYVBs
YXllclByaXZhdGU6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3F0Vmlk
ZW9MYXllci0+cGxhdGZvcm1MYXllcigpOworICAgIHJldHVybiBtX3F0VmlkZW9MYXllciA/IG1f
cXRWaWRlb0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOwogfQogI2VuZGlmCiAKQEAgLTg2MSwx
NCArODYxLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmFjY2VsZXJhdGVkUmVuZAogICAg
IHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om5v
dGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKLXsKLSAgICBHcmFwaGljc0xh
eWVyQ0FDRiogdmlkZW9HcmFwaGljc0xheWVyID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNB
Q0YqPihtX3F0VmlkZW9MYXllci5nZXQoKSk7Ci0gICAgaWYgKHZpZGVvR3JhcGhpY3NMYXllcikK
LSAgICAgICAgdmlkZW9HcmFwaGljc0xheWVyLT5ub3RpZnlTeW5jUmVxdWlyZWQoKTsKLSB9Ci0K
LQogI2VuZGlmCiAKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgJKHJldmlzaW9u
IDU1NTU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0
ZToKICAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50IG1ldGhvZHMKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3Jh
cGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCk7CiAgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRv
dWJsZSB0aW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVy
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50
Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYgCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXIuY3BwCShyZXZpc2lvbiA1NTU1
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQsMTAgKzU0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAotc3RhdGljIHZvaWQgZGlzcGxheUluQ29udGV4dChDQUNGTGF5
ZXJSZWYgbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQorc3RhdGljIHZvaWQgZGlzcGxheUNh
bGxiYWNrKENBQ0ZMYXllclJlZiBsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAg
QVNTRVJUX0FSRyhsYXllciwgV0tDQUNGTGF5ZXI6OmxheWVyKGxheWVyKSk7Ci0gICAgV0tDQUNG
TGF5ZXI6OmxheWVyKGxheWVyKS0+ZGlzcGxheShjb250ZXh0KTsKKyAgICBXS0NBQ0ZMYXllcjo6
bGF5ZXIobGF5ZXIpLT5kcmF3SW5Db250ZXh0KGNvbnRleHQpOwogfQogCiAjZGVmaW5lIFNUQVRJ
Q19DQUNGX1NUUklORyhuYW1lKSBcCkBAIC0xNzcsMjMgKzE3NywyMiBAQCBzdGF0aWMgV0tDQUNG
TGF5ZXI6OkZpbHRlclR5cGUgZnJvbUNBQ0ZGCiAgICAgcmV0dXJuIFdLQ0FDRkxheWVyOjpMaW5l
YXI7CiB9CiAKLVBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+IFdLQ0FDRkxheWVyOjpjcmVhdGUoTGF5
ZXJUeXBlIHR5cGUsIEdyYXBoaWNzTGF5ZXJDQUNGKiBvd25lcikKK1Bhc3NSZWZQdHI8V0tDQUNG
TGF5ZXI+IFdLQ0FDRkxheWVyOjpjcmVhdGUoTGF5ZXJUeXBlIHR5cGUpCiB7CiAgICAgaWYgKCFX
S0NBQ0ZMYXllclJlbmRlcmVyOjphY2NlbGVyYXRlZENvbXBvc2l0aW5nQXZhaWxhYmxlKCkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV0tDQUNGTGF5ZXIodHlw
ZSwgb3duZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdLQ0FDRkxheWVyKHR5cGUpKTsK
IH0KIAogLy8gRklYTUU6IEl0IG1pZ2h0IGJlIGdvb2QgdG8gaGF2ZSBhIHdheSBvZiBlbnN1cmlu
ZyB0aGF0IGFsbCBXS0NBQ0ZMYXllcnMgZXZlbnR1YWxseQogLy8gZ2V0IGRlc3Ryb3llZCBpbiBk
ZWJ1ZyBidWlsZHMuIEEgc3RhdGljIGNvdW50ZXIgY291bGQgYWNjb21wbGlzaCB0aGlzIHByZXR0
eSBlYXNpbHkuCiAKLVdLQ0FDRkxheWVyOjpXS0NBQ0ZMYXllcihMYXllclR5cGUgdHlwZSwgR3Jh
cGhpY3NMYXllckNBQ0YqIG93bmVyKQorV0tDQUNGTGF5ZXI6OldLQ0FDRkxheWVyKExheWVyVHlw
ZSB0eXBlKQogICAgIDogbV9sYXllcihBZG9wdENGLCBDQUNGTGF5ZXJDcmVhdGUodG9DQUNGTGF5
ZXJUeXBlKHR5cGUpKSkKICAgICAsIG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFsc2Up
Ci0gICAgLCBtX293bmVyKG93bmVyKQogewogICAgIENBQ0ZMYXllclNldFVzZXJEYXRhKGxheWVy
KCksIHRoaXMpOwotICAgIENBQ0ZMYXllclNldERpc3BsYXlDYWxsYmFjayhsYXllcigpLCBkaXNw
bGF5SW5Db250ZXh0KTsKKyAgICBDQUNGTGF5ZXJTZXREaXNwbGF5Q2FsbGJhY2sobGF5ZXIoKSwg
ZGlzcGxheUNhbGxiYWNrKTsKIH0KIAogV0tDQUNGTGF5ZXI6On5XS0NBQ0ZMYXllcigpCkBAIC0y
MDUsNjQgKzIwNCw2IEBAIFdLQ0FDRkxheWVyOjp+V0tDQUNGTGF5ZXIoKQogICAgIENBQ0ZMYXll
clNldERpc3BsYXlDYWxsYmFjayhsYXllcigpLCAwKTsKIH0KIAotdm9pZCBXS0NBQ0ZMYXllcjo6
ZGlzcGxheShQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBpZiAoIW1f
b3duZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4
dCk7Ci0KLSAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBib3VuZHMoKTsKLSAgICBpZiAobV9vd25l
ci0+Y29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKSB7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNv
bnRleHQsIDEsIC0xKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAs
IC1sYXllckJvdW5kcy5zaXplLmhlaWdodCk7Ci0gICAgfQotCi0gICAgaWYgKG1fb3duZXItPmNs
aWVudCgpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4
dCk7Ci0KLSAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhl
IGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKLSAgICAgICAgLy8gc21h
bGxlciB0aGFuIHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQotICAgICAgICBD
R1JlY3QgY2xpcEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsK
LSAgICAgICAgSW50UmVjdCBjbGlwKGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOwotICAg
ICAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRleHQs
IGNsaXApOwotICAgIH0KLSNpZm5kZWYgTkRFQlVHCi0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlJ2QgYXZvaWQg
Y2FsbGluZyAtc2V0TmVlZHNEaXNwbGF5IG9uIGEgbGF5ZXIgdGhhdCBpcyBhIHBsYWluIGNvbG9y
LAotICAgICAgICAvLyBzbyBDQSBuZXZlciBtYWtlcyBiYWNraW5nIHN0b3JlIGZvciBpdCAod2hp
Y2ggaXMgd2hhdCAtc2V0TmVlZHNEaXNwbGF5IHdpbGwgZG8gYWJvdmUpLgotICAgICAgICBDR0Nv
bnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMC4wZiwgMS4wZiwgMC4wZiwgMS4wZik7Ci0g
ICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGxheWVyQm91bmRzKTsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIGlmIChtX293bmVyLT5zaG93UmVwYWludENvdW50ZXIoKSkgewotICAgICAg
ICBjaGFyIHRleHRbMTZdOyAvLyB0aGF0J3MgYSBsb3Qgb2YgcmVwYWludHMKLSAgICAgICAgX3Nu
cHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiVkIiwgbV9vd25lci0+aW5jcmVtZW50UmVwYWlu
dENvdW50KCkpOwotCi0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAg
ICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLjBmLCAwLjBmLCAwLjBmLCAw
LjhmKTsKLSAgICAgICAgCi0gICAgICAgIENHUmVjdCBhQm91bmRzID0gbGF5ZXJCb3VuZHM7Ci0K
LSAgICAgICAgYUJvdW5kcy5zaXplLndpZHRoID0gMTAgKyAxMiAqIHN0cmxlbih0ZXh0KTsKLSAg
ICAgICAgYUJvdW5kcy5zaXplLmhlaWdodCA9IDI1OwotICAgICAgICBDR0NvbnRleHRGaWxsUmVj
dChjb250ZXh0LCBhQm91bmRzKTsKLSAgICAgICAgCi0gICAgICAgIENHQ29udGV4dFNldFJHQkZp
bGxDb2xvcihjb250ZXh0LCAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKLQotICAgICAgICBDR0Nv
bnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEu
MGYsIC0xLjBmKSk7Ci0gICAgICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY29udGV4dCwgIkhlbHZl
dGljYSIsIDI1LCBrQ0dFbmNvZGluZ01hY1JvbWFuKTsKLSAgICAgICAgQ0dDb250ZXh0U2hvd1Rl
eHRBdFBvaW50KGNvbnRleHQsIGFCb3VuZHMub3JpZ2luLnggKyAzLjBmLCBhQm91bmRzLm9yaWdp
bi55ICsgMjAuMGYsIHRleHQsIHN0cmxlbih0ZXh0KSk7Ci0gICAgICAgIAotICAgICAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOyAgICAgICAgCi0gICAgfQotCi0gICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKLX0KLQogdm9pZCBXS0NBQ0ZMYXllcjo6YmVjb21l
Um9vdExheWVyRm9yQ29udGV4dChDQUNGQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIENBQ0ZD
b250ZXh0U2V0TGF5ZXIoY29udGV4dCwgbGF5ZXIoKSk7CkBAIC0yNzEsNyArMjEyLDkgQEAgdm9p
ZCBXS0NBQ0ZMYXllcjo6YmVjb21lUm9vdExheWVyRm9yQ29udAogCiB2b2lkIFdLQ0FDRkxheWVy
OjpzZXROZWVkc0NvbW1pdCgpCiB7Ci0gICAgQ0FDRkNvbnRleHRSZWYgY29udGV4dCA9IENBQ0ZM
YXllckdldENvbnRleHQocm9vdExheWVyKCktPmxheWVyKCkpOworICAgIFdLQ0FDRkxheWVyKiBy
b290ID0gcm9vdExheWVyKCk7CisKKyAgICBDQUNGQ29udGV4dFJlZiBjb250ZXh0ID0gQ0FDRkxh
eWVyR2V0Q29udGV4dChyb290LT5sYXllcigpKTsKIAogICAgIC8vIFRoZSBjb250ZXh0IG1pZ2h0
IG5vdyBiZSBzZXQgeWV0LiBUaGlzIGhhcHBlbnMgaWYgYSBwcm9wZXJ0eSBnZXRzIHNldAogICAg
IC8vIGJlZm9yZSBwbGFjaW5nIHRoZSBsYXllciBpbiB0aGUgdHJlZS4gSW4gdGhpcyBjYXNlIHdl
IGRvbid0IG5lZWQgdG8gCkBAIC0yODAsMTEgKzIyMyw5IEBAIHZvaWQgV0tDQUNGTGF5ZXI6OnNl
dE5lZWRzQ29tbWl0KCkKICAgICBpZiAoY29udGV4dCkKICAgICAgICAgV0tDQUNGQ29udGV4dEZs
dXNoZXI6OnNoYXJlZCgpLmFkZENvbnRleHQoY29udGV4dCk7CiAKLSAgICAvLyBDYWxsIG5vdGlm
eVN5bmNSZXF1aXJlZCgpLCB3aGljaCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIHBsdW1icyB0aHJv
dWdoIHRvCi0gICAgLy8gY2FsbCBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKSBvbiB0aGUgV2Vi
Vmlldywgd2hpY2ggY2F1c2VzIHRoZSBDQUNGUmVuZGVyZXIKLSAgICAvLyB0byByZW5kZXIgYSBm
cmFtZS4KLSAgICBpZiAobV9vd25lcikKLSAgICAgICAgbV9vd25lci0+bm90aWZ5U3luY1JlcXVp
cmVkKCk7CisgICAgLy8gQ2FsbCBzZXROZWVkc1JlbmRlciBvbiB0aGUgcm9vdCBsYXllciwgd2hp
Y2ggd2lsbCBjYXVzZSBhIHJlbmRlciB0byAKKyAgICAvLyBoYXBwZW4gaW4gV0tDQUNGTGF5ZXJS
ZW5kZXJlcgorICAgIHJvb3QtPnNldE5lZWRzUmVuZGVyKCk7CiB9CiAKIGJvb2wgV0tDQUNGTGF5
ZXI6OmlzVHJhbnNmb3JtTGF5ZXIoKSBjb25zdApAQCAtNTIzLDE4ICs0NjQsMTUgQEAgV0tDQUNG
TGF5ZXIqIFdLQ0FDRkxheWVyOjpzdXBlcmxheWVyKCkgYwogICAgIHJldHVybiBXS0NBQ0ZMYXll
cjo6bGF5ZXIoc3VwZXIpOwogfQogCi12b2lkIFdLQ0FDRkxheWVyOjpzZXROZWVkc0Rpc3BsYXko
Y29uc3QgQ0dSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIFdLQ0FDRkxheWVyOjpzZXROZWVkc0Rpc3Bs
YXkoY29uc3QgQ0dSZWN0KiBkaXJ0eVJlY3QpCiB7Ci0gICAgaWYgKG1fb3duZXIpCi0gICAgICAg
IENBQ0ZMYXllclNldE5lZWRzRGlzcGxheShsYXllcigpLCAmZGlydHlSZWN0KTsKKyAgICBDQUNG
TGF5ZXJTZXROZWVkc0Rpc3BsYXkobGF5ZXIoKSwgZGlydHlSZWN0KTsKICAgICBzZXROZWVkc0Nv
bW1pdCgpOwogfQogCiB2b2lkIFdLQ0FDRkxheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAg
IGlmIChtX293bmVyKQotICAgICAgICBDQUNGTGF5ZXJTZXROZWVkc0Rpc3BsYXkobGF5ZXIoKSwg
MCk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoMCk7CiB9CiAK
ICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NB
Q0ZMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dL
Q0FDRkxheWVyLmgJKHJldmlzaW9uIDU1NTU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vV0tDQUNGTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQAogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJDQUNGLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC01NSwxMCArNTQsMTUgQEAg
cHVibGljOgogICAgIGVudW0gQ29udGVudHNHcmF2aXR5VHlwZSB7IENlbnRlciwgVG9wLCBCb3R0
b20sIExlZnQsIFJpZ2h0LCBUb3BMZWZ0LCBUb3BSaWdodCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQm90dG9tTGVmdCwgQm90dG9tUmlnaHQsIFJlc2l6ZSwgUmVzaXplQXNwZWN0
LCBSZXNpemVBc3BlY3RGaWxsIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXS0NBQ0ZMYXll
cj4gY3JlYXRlKExheWVyVHlwZSwgR3JhcGhpY3NMYXllckNBQ0YqIG93bmVyID0gMCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+IGNyZWF0ZShMYXllclR5cGUpOwogICAgIHN0
YXRpYyBXS0NBQ0ZMYXllciogbGF5ZXIoQ0FDRkxheWVyUmVmIGxheWVyKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxXS0NBQ0ZMYXllcio+KENBQ0ZMYXllckdldFVzZXJEYXRhKGxheWVyKSk7IH0KIAot
ICAgIH5XS0NBQ0ZMYXllcigpOworICAgIHZpcnR1YWwgfldLQ0FDRkxheWVyKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZW5kZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0lu
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0Rpc3BsYXkoY29uc3QgQ0dSZWN0KiBkaXJ0eVJlY3QpOworICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CiAKICAgICAvLyBNYWtlcyB0aGlzIGxheWVyIHRoZSByb290IHdoZW4gdGhl
IHBhc3NlZCBjb250ZXh0IGlzIHJlbmRlcmVkCiAgICAgdm9pZCBiZWNvbWVSb290TGF5ZXJGb3JD
b250ZXh0KENBQ0ZDb250ZXh0UmVmKTsKQEAgLTEwNiw4ICsxMTAsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZUeXBlUmVmPihBZG9wdENGLCBDR0NvbG9yQ3JlYXRlR2Vu
ZXJpY1JHQihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCBjb2xvci5h
bHBoYSgpKSk7CiAgICAgfQogCi0gICAgdm9pZCBkaXNwbGF5KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0Kik7Ci0KICAgICBib29sIGlzVHJhbnNmb3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIHZvaWQg
YWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4gc3VibGF5ZXIpOwpAQCAtMTgwLDkg
KzE4Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7
IENBQ0ZMYXllclNldE5hbWUobGF5ZXIoKSwgUmV0YWluUHRyPENGU3RyaW5nUmVmPihBZG9wdENG
LCBuYW1lLmNyZWF0ZUNGU3RyaW5nKCkpLmdldCgpKTsgfQogICAgIFN0cmluZyBuYW1lKCkgY29u
c3QgeyByZXR1cm4gQ0FDRkxheWVyR2V0TmFtZShsYXllcigpKTsgfQogCi0gICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgQ0dSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZvaWQgc2V0TmVlZHNE
aXNwbGF5KCk7Ci0gICAgCiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShi
b29sIG5lZWRzRGlzcGxheSkgeyBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVlZHNE
aXNwbGF5OyB9CiAKICAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBDQUNGTGF5
ZXJTZXRPcGFjaXR5KGxheWVyKCksIG9wYWNpdHkpOyBzZXROZWVkc0NvbW1pdCgpOyB9CkBAIC0y
MjgsMTAgKzIyNywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmludFRyZWUoKSBjb25zdDsKICNl
bmRpZgogCi1wcml2YXRlOgotICAgIFdLQ0FDRkxheWVyKExheWVyVHlwZSwgR3JhcGhpY3NMYXll
ckNBQ0YqIG93bmVyKTsKK3Byb3RlY3RlZDoKKyAgICBXS0NBQ0ZMYXllcihMYXllclR5cGUpOwog
CiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOworCitwcml2YXRlOgogICAgIENBQ0ZMYXllclJl
ZiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KICAgICBzaXplX3QgbnVt
U3VibGF5ZXJzKCkgY29uc3QKICAgICB7CkBAIC0yNTUsNyArMjU2LDYgQEAgcHJpdmF0ZToKIAog
ICAgIFJldGFpblB0cjxDQUNGTGF5ZXJSZWY+IG1fbGF5ZXI7CiAgICAgYm9vbCBtX25lZWRzRGlz
cGxheU9uQm91bmRzQ2hhbmdlOwotICAgIEdyYXBoaWNzTGF5ZXJDQUNGKiBtX293bmVyOwogfTsK
IAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5k
ZXJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tD
QUNGTGF5ZXJSZW5kZXJlci5jcHAJKHJldmlzaW9uIDU1NTU0KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDggQEAKICNpbmNsdWRlIDxRdWFydHpDb3JlSW50ZXJmYWNlL1F1YXJ0ekNvcmVJ
bnRlcmZhY2UuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25B
cnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDxkM2Q5Lmg+
CiAjaW5jbHVkZSA8ZDNkeDkuaD4KQEAgLTc2LDYgKzc4LDMzIEBAIGlubGluZSBzdGF0aWMgQ0dS
ZWN0IHdpblJlY3RUb0NHUmVjdChSRUMKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBTdWJj
bGFzcyBvZiBXS0NBQ0ZMYXllciB0byBhbGxvdyB0aGUgcm9vdCBsYXllciB0byBoYXZlIGEgYmFj
ayBwb2ludGVyIHRvIHRoZSBsYXllciByZW5kZXJlcgorLy8gdG8gZmlyZSBvZmYgYSBkcmF3Citj
bGFzcyBXS0NBQ0ZSb290TGF5ZXIgOiBwdWJsaWMgV0tDQUNGTGF5ZXIgeworcHVibGljOgorICAg
IFdLQ0FDRlJvb3RMYXllcihXS0NBQ0ZMYXllclJlbmRlcmVyKiByZW5kZXJlcikKKyAgICAgICAg
OiBXS0NBQ0ZMYXllcihXS0NBQ0ZMYXllcjo6TGF5ZXIpCisgICAgeworICAgICAgICBtX3JlbmRl
cmVyID0gcmVuZGVyZXI7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V0tDQUNGUm9v
dExheWVyPiBjcmVhdGUoV0tDQUNGTGF5ZXJSZW5kZXJlciogcmVuZGVyZXIpCisgICAgeworICAg
ICAgICBpZiAoIVdLQ0FDRkxheWVyUmVuZGVyZXI6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdBdmFp
bGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdLQ0FDRlJvb3RMYXllcihyZW5kZXJlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc1JlbmRlcigpIHsgbV9yZW5kZXJlci0+cmVuZGVyU29vbigpOyB9CisKKyAgICAv
LyBPdmVybG9hZCB0aGlzIHRvIGF2b2lkIGNhbGxpbmcgc2V0TmVlZHNEaXNwbGF5IG9uIHRoZSBs
YXllciwgd2hpY2ggd291bGQgb3ZlcnJpZGUgdGhlIGNvbnRlbnRzCisgICAgLy8gd2UgaGF2ZSBw
bGFjZWQgb24gdGhlIHJvb3QgbGF5ZXIuCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eShjb25zdCBDR1JlY3QqIGRpcnR5UmVjdCkgeyBzZXROZWVkc0NvbW1pdCgpOyB9CisKK3ByaXZh
dGU6CisgICAgV0tDQUNGTGF5ZXJSZW5kZXJlciogbV9yZW5kZXJlcjsKK307CisKIHR5cGVkZWYg
SGFzaE1hcDxDQUNGQ29udGV4dFJlZiwgV0tDQUNGTGF5ZXJSZW5kZXJlcio+IENvbnRleHRUb1dp
bmRvd01hcDsKIAogc3RhdGljIENvbnRleHRUb1dpbmRvd01hcCYgd2luZG93c0ZvckNvbnRleHRz
KCkKQEAgLTIwNSw2ICsyMzQsMTEgQEAgV0tDQUNGTGF5ZXJSZW5kZXJlcjo6fldLQ0FDRkxheWVy
UmVuZGVyZQogICAgIGRlc3Ryb3lSZW5kZXJlcigpOwogfQogCitXS0NBQ0ZMYXllciogV0tDQUNG
TGF5ZXJSZW5kZXJlcjo6cm9vdExheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7Cit9CisKIHZvaWQgV0tDQUNGTGF5ZXJSZW5kZXJlcjo6c2V0U2Nyb2xsRnJhbWUo
Y29uc3QgSW50UmVjdCYgc2Nyb2xsRnJhbWUpCiB7CiAgICAgbV9zY3JvbGxGcmFtZSA9IHNjcm9s
bEZyYW1lOwpAQCAtMjIzLDcgKzI1Nyw3IEBAIHZvaWQgV0tDQUNGTGF5ZXJSZW5kZXJlcjo6c2V0
Um9vdENvbnRlbnQKICAgICByZW5kZXJTb29uKCk7CiB9CiAKLXZvaWQgV0tDQUNGTGF5ZXJSZW5k
ZXJlcjo6c2V0Um9vdENoaWxkTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCit2
b2lkIFdLQ0FDRkxheWVyUmVuZGVyZXI6OnNldFJvb3RDaGlsZExheWVyKFdLQ0FDRkxheWVyKiBs
YXllcikKIHsKICAgICBpZiAoIW1fc2Nyb2xsTGF5ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTI0
Miw3ICsyNzYsNyBAQCB2b2lkIFdLQ0FDRkxheWVyUmVuZGVyZXI6OnNldFJvb3RDaGlsZExhCiB2
b2lkIFdLQ0FDRkxheWVyUmVuZGVyZXI6OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgQVNTRVJU
KG1fcm9vdExheWVyKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAg
bV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheSgwKTsKICAgICByZW5kZXJTb29uKCk7CiB9CiAK
QEAgLTI5OCw3ICszMzIsNyBAQCBib29sIFdLQ0FDRkxheWVyUmVuZGVyZXI6OmNyZWF0ZVJlbmRl
cmVyCiAgICAgbV9yZW5kZXJlciA9IENBUmVuZGVyT0dMTmV3KHdrcWNDQVJlbmRlck9HTENhbGxi
YWNrcyh3a3Fja0NBUmVuZGVyRFg5Q2FsbGJhY2tzKSwgbV9kM2REZXZpY2UuZ2V0KCksIDApOwog
CiAgICAgLy8gQ3JlYXRlIHRoZSByb290IGhpZXJhcmNoeQotICAgIG1fcm9vdExheWVyID0gV0tD
QUNGTGF5ZXI6OmNyZWF0ZShXS0NBQ0ZMYXllcjo6TGF5ZXIpOworICAgIG1fcm9vdExheWVyID0g
V0tDQUNGUm9vdExheWVyOjpjcmVhdGUodGhpcyk7CiAgICAgbV9yb290TGF5ZXItPnNldE5hbWUo
IldLQ0FDRkxheWVyUmVuZGVyZXIgcm9vdExheWVyIik7CiAgICAgbV9zY3JvbGxMYXllciA9IFdL
Q0FDRkxheWVyOjpjcmVhdGUoV0tDQUNGTGF5ZXI6OkxheWVyKTsKICAgICBtX3Njcm9sbExheWVy
LT5zZXROYW1lKCJXS0NBQ0ZMYXllclJlbmRlcmVyIHNjcm9sbExheWVyIik7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllclJlbmRlcmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5o
CShyZXZpc2lvbiA1NTU1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FD
RkxheWVyUmVuZGVyZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOCBAQCB0eXBlZGVm
IHN0cnVjdCBfQ0FSZW5kZXJPR0xDb250ZXh0IENBUmVuCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgV0tDQUNGUm9vdExheWVyOworCiAvLyBGSVhNRTogQ3VycmVudGx5IHRoZXJlIGlz
IGEgV0tDQUNGTGF5ZXJSZW5kZXJlciBmb3IgZWFjaCBXZWJWaWV3IGFuZCBlYWNoCiAvLyBoYXMg
aXRzIG93biBDQVJlbmRlck9HTENvbnRleHQgYW5kIERpcmVjdDNERGV2aWNlOSwgd2hpY2ggaXMg
aW5lZmZpY2llbnQuCiAvLyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMxODU1KQpAQCAtNjAsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNjcm9sbEZy
YW1lKGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIHNldFJvb3RDb250ZW50cyhDR0ltYWdlUmVm
KTsKLSAgICB2b2lkIHNldFJvb3RDaGlsZExheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxh
eWVyKTsKKyAgICB2b2lkIHNldFJvb3RDaGlsZExheWVyKFdLQ0FDRkxheWVyKiBsYXllcik7CiAg
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKICAgICB2b2lkIHNldEhvc3RXaW5kb3coSFdORCB3
aW5kb3cpIHsgbV9ob3N0V2luZG93ID0gd2luZG93OyB9CiAKQEAgLTcwLDcgKzcyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVuZGVyU29vbigpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV0tDQUNGTGF5
ZXIqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisgICAg
V0tDQUNGTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFdLQ0FDRkxh
eWVyUmVuZGVyZXIoKTsKQEAgLTg3LDcgKzg5LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV90
cmllZFRvQ3JlYXRlRDNEUmVuZGVyZXI7CiAgICAgQ09NUHRyPElEaXJlY3QzRERldmljZTk+IG1f
ZDNkRGV2aWNlOwotICAgIFJlZlB0cjxXS0NBQ0ZMYXllcj4gbV9yb290TGF5ZXI7CisgICAgUmVm
UHRyPFdLQ0FDRlJvb3RMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgUmVmUHRyPFdLQ0FDRkxheWVy
PiBtX3ZpZXdMYXllcjsKICAgICBSZWZQdHI8V0tDQUNGTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CiAg
ICAgUmVmUHRyPFdLQ0FDRkxheWVyPiBtX3Jvb3RDaGlsZExheWVyOwpJbmRleDogV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDU1NTkxKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMCBAQAorMjAxMC0wMy0wNSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR290IHJpZCBv
ZiBwbGF0Zm9ybUxheWVyIHVzZSBpbiBXZWJWaWV3LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU3OTgKKyAgICAgICAgCisgICAgICAgIFdLQ0FDRkxh
eWVyIG5vIGxvbmdlciBkZXBlbmRzIG9uIEdyYXBoaWNzTGF5ZXIsIHNvIEkgZ290IHJpZCBvZgor
ICAgICAgICB0aGF0IGRlcGVuZGVuY3kgb24gV2ViVmlldy4gTm93IFdlYkNocm9tZUNsaWVudCBj
YXN0cyBwbGF0Zm9ybUxheWVyCisgICAgICAgIHRvIFdLQ0FDRkxheWVyIHdoaWNoIHdpbGwgYWx3
YXlzIGJlIHRoZSBjYXNlIG9uIFdpbmRvd3MuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290
R3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3
OjpzZXRSb290Q2hpbGRMYXllcik6CisgICAgICAgICogV2ViVmlldy5oOgorCiAyMDEwLTAzLTA0
ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
bmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDU1NTU0KQorKysgV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA1Myw3ICs2MDUzLDcgQEAgdm9pZCBX
ZWJWaWV3Ojpkb3dubG9hZFVSTChjb25zdCBLVVJMJiB1cgogfQogCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotdm9pZCBXZWJWaWV3OjpzZXRSb290Q2hpbGRMYXllcihXZWJDb3Jl
OjpQbGF0Zm9ybUxheWVyKiBsYXllcikKK3ZvaWQgV2ViVmlldzo6c2V0Um9vdENoaWxkTGF5ZXIo
V2ViQ29yZTo6V0tDQUNGTGF5ZXIqIGxheWVyKQogewogICAgIHNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmcobGF5ZXIgPyB0cnVlIDogZmFsc2UpOwogICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCklu
ZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZp
ZXcuaAkocmV2aXNpb24gNTU1NTQpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtODc2LDcgKzg3Niw3IEBAIHB1YmxpYzoKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpIHsgaWYgKG1f
bGF5ZXJSZW5kZXJlcikgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsgfQotICAg
IHZvaWQgc2V0Um9vdENoaWxkTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpOwor
ICAgIHZvaWQgc2V0Um9vdENoaWxkTGF5ZXIoV2ViQ29yZTo6V0tDQUNGTGF5ZXIqIGxheWVyKTsK
ICNlbmRpZgogCiAgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUq
KTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAJKHJldmlzaW9uIDU1NTU0KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw5IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uLmg+CisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2VuZGlm
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xvY2Fs
aXplZFN0cmluZ3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC03
ODMsNyArNzg2LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlcXVlc3RHZW9sb2NhdGlvbgog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojph
dHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIpCiB7Ci0gICAgbV93ZWJWaWV3LT5zZXRSb290Q2hpbGRMYXllcihncmFwaGljc0xh
eWVyID8gZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpIDogMCk7CisgICAgbV93ZWJWaWV3
LT5zZXRSb290Q2hpbGRMYXllcihncmFwaGljc0xheWVyID8gc3RhdGljX2Nhc3Q8V0tDQUNGTGF5
ZXIqPihncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpIDogMCk7CiB9CiAKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkK
</data>
<flag name="review"
          id="33163"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>