<?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>62618</bug_id>
          
          <creation_ts>2011-06-13 19:58:27 -0700</creation_ts>
          <short_desc>[chromium] Compositor shader initialization is inefficient</short_desc>
          <delta_ts>2011-06-14 11:32:53 -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="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>enne</cc>
    
    <cc>jbates</cc>
    
    <cc>jbauman</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>420170</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-13 19:58:27 -0700</bug_when>
    <thetext>[chromium] Compositor shader initialization is inefficient</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420176</commentid>
    <comment_count>1</comment_count>
      <attachid>97061</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-13 20:12:24 -0700</bug_when>
    <thetext>Created attachment 97061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420181</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-13 20:39:55 -0700</bug_when>
    <thetext>On my linux z600 this reduces the time from start of compositor initialization to first swapbuffers on the gpu process from 125ms-&gt;73ms for a nearly empty page and from 240ms-&gt;190ms for maps.google.com.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420256</commentid>
    <comment_count>3</comment_count>
      <attachid>97061</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-06-14 00:24:13 -0700</bug_when>
    <thetext>Comment on attachment 97061
Patch

Looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420544</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-14 10:36:30 -0700</bug_when>
    <thetext>Ken or Stephen, mind do an official WebKit review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420564</commentid>
    <comment_count>5</comment_count>
      <attachid>97061</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-06-14 10:49:53 -0700</bug_when>
    <thetext>Comment on attachment 97061
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1106
&gt; +    if (!m_borderProgram-&gt;initialized()) {

This just in:  Is there a reason why you don&apos;t call initialize() when the program first gets created?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420572</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-14 10:55:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 97061 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97061&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1106
&gt; &gt; +    if (!m_borderProgram-&gt;initialized()) {
&gt; 
&gt; This just in:  Is there a reason why you don&apos;t call initialize() when the program first gets created?

Yes, definitely.  initialize() queries uniform locations, which is synchronous and flushes the command queue.  Calling initialize() when the program is first created will block the renderer until the shader is compiled and linked.  By creating the commonly used shaders at compositor startup but not calling initialize() until draw time the GPU process has a reasonable chance to compile the shader while the compositor is doing software painting and uploading.  The benefit is easiest to see by comparing traces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420573</commentid>
    <comment_count>7</comment_count>
      <attachid>97061</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-06-14 10:57:10 -0700</bug_when>
    <thetext>Comment on attachment 97061
Patch

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

&gt; Source/WebCore/ChangeLog:19
&gt; +        release builds and force synchronous compilation/linking.

Just out of curiosity:  What about bad drivers or machines where we might accidentally exceed hardware limits?  Do we want to catch those in release builds in the wild and try to fall back to non-composited mode?  Or is this too hard to do gracefully now that they&apos;re lazily initialized, and we just rely on the blacklist?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420582</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-14 11:12:31 -0700</bug_when>
    <thetext>If we want to check for failures then we should do it once at the end of initializing the shaders we want instead of after each program.  I kind of doubt that&apos;s necessary, though - we should be blacklisting cards that can&apos;t handle the compositor&apos;s shaders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420585</commentid>
    <comment_count>9</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-06-14 11:13:40 -0700</bug_when>
    <thetext>OK, looks good.  R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420611</commentid>
    <comment_count>10</comment_count>
      <attachid>97061</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-14 11:32:48 -0700</bug_when>
    <thetext>Comment on attachment 97061
Patch

Clearing flags on attachment: 97061

Committed r88835: &lt;http://trac.webkit.org/changeset/88835&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420612</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-14 11:32:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97061</attachid>
            <date>2011-06-13 20:12:24 -0700</date>
            <delta_ts>2011-06-14 11:32:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62618-20110613201223.patch</filename>
            <type>text/plain</type>
            <size>28722</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg2NzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMmMzYjM3NmI4ZmIwZTRi
MmJlMGRmMDNlMWI3YzM5NDhmZDk3ZTI4Li4xNGRmZTE1ZGQ4ZTkzYTY4OWVlZDNhMGM2ZmU4ZDE0
ZmZkNmQ5Y2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTEtMDYtMTMgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIENvbXBvc2l0b3Igc2hhZGVyIGlu
aXRpYWxpemF0aW9uIGlzIGluZWZmaWNpZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MjYxOAorCisgICAgICAgIFRoaXMgZml4ZXMgc2V2ZXJhbCBp
c3N1ZXMgY2F1c2luZyBzbG93ZG93bnMgaW4gY29tcG9zaXRvciBzaGFkZXIgaW5pdGlhbGl6YXRp
b24sIG1vc3RseSBkdWUgdG8gbGFjayBvZgorICAgICAgICBwYXJhbGxlbGlzbToKKworICAgICAg
ICAtIEF2b2lkIGluaXRpYWxpemluZyBhbGwgcHJvZ3JhbXMgZWFnZXJseS4gV2Ugb25seSB1c2Ug
dHdvIHByb2dyYW1zIG9uIGV2ZXJ5IHBhZ2UsIHRoZSBvdGhlciBwcm9ncmFtcyBkZXBlbmQgb24K
KyAgICAgICAgY29udGVudCBhbmQgYXJlIGNvbnN0cnVjdGVkIG9uIGRlbWFuZC4KKworICAgICAg
ICAtIERlZmVyIHF1ZXJ5aW5nIHVuaWZvcm0gbG9jYXRpb25zIHVudGlsIGRyYXcgdGltZS4gIEZv
ciB0aGUgZWFnZXJseSBjb25zdHJ1Y3RlZCBwcm9ncmFtcyAocmVuZGVyIHN1cmZhY2UgKworICAg
ICAgICB0aWxlcikgdGhpcyBtZWFucyB0aGF0IHRoZSBHUFUgcHJvY2VzcyBoYXMgYSBjaGFuY2Ug
dG8gY29tcGlsZSB0aGUgc2hhZGVyIHdoaWxlIHRoZSByZW5kZXJlciBpcyBidXN5CisgICAgICAg
IHBhaW50aW5nK3VwbG9hZGluZyBpbnN0ZWFkIG9mIGJsb2NraW5nIG9uIHNoYWRlciBjb21waWxh
dGlvbiBpbiBvcmRlciB0byBnZXQgdW5pZm9ybSBsb2NhdGlvbnMuCisKKyAgICAgICAgLSBDYWxs
cyB0byBxdWVyeSBDT01QSUxFX1NUQVRVUy9MSU5LX1NUQVRVUyBtb3ZlZCBiZWhpbmQgI2lmbmRl
ZiBOREVCVUcgZ3VhcmRzIHNpbmNlIHRoZXNlIHNob3VsZCBuZXZlciBmYWlsIGluCisgICAgICAg
IHJlbGVhc2UgYnVpbGRzIGFuZCBmb3JjZSBzeW5jaHJvbm91cyBjb21waWxhdGlvbi9saW5raW5n
LgorCisgICAgICAgIFRoaXMgYWxzbyBhZGRzIGEgbnVtYmVyIG9mIFRSQUNFX0VWRU5UKClzIHRv
IG1ha2UgYW5hbHlzaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzIGJpdCBvZiBjb2RlIGVhc2ll
ci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Omlu
aXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Ym9yZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmhlYWRzVXBEaXNwbGF5UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2FudmFzTGF5ZXJQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGx1Z2luTGF5ZXJQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9M
YXllclJHQkFQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dmlkZW9MYXllcllVVlByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoVGV4U3ViSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZFdpdGhNYXBUZXhTdWJJbWFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUHJvZ3JhbUJpbmRpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UHJvZ3JhbUJpbmRpbmdCYXNlOjppbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OlByb2dyYW1CaW5kaW5nQmFzZTo6bG9hZFNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpQcm9ncmFtQmluZGluZ0Jhc2U6OmNyZWF0ZVNoYWRlclByb2dyYW0pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Byb2dyYW1CaW5kaW5nLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQcm9ncmFtQmluZGluZzo6UHJvZ3JhbUJpbmRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UHJvZ3JhbUJpbmRpbmc6OmluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRl
eFNoYWRlclBvc1RleDo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhTaGFkZXJQb3NU
ZXhZVVZTdHJldGNoOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRleFNoYWRlclBvczo6
aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm06Omlu
aXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRUZXhBbHBoYUJpbmRpbmc6OmluaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrOjppbml0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50U2hhZGVyWVVWVmlkZW86OmluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhZ21lbnRTaGFkZXJDb2xvcjo6aW5pdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaDoKKwogMjAxMS0wNi0xMyAgWGFu
IExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGlu
IFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNDEz
ZDBlM2UyYWQ5OGZmM2M0MDM5ZjFjZGU4Nzg5YjYwNmE1YTkyMS4uZDMzYmY4NDdmZTBhMDI1ZThi
YjRlMzI3OTM4NTM4MWZiNTM3ODdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCkBAIC0zNDksNyArMzQ5LDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogCiAgICAgdXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICAvLyBV
cGRhdGUgY29tcG9zaXRvciByZXNvdXJjZXMgZm9yIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5
ZXJDb250ZW50VGlsZXItPnVwZGF0ZVJlY3QoKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5U
KCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyOjp1cGRhdGVSb290IiwgdGhpcywg
MCk7CisgICAgICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT51cGRhdGVSZWN0KCk7CisgICAg
fQogCiAgICAgLy8gQWZ0ZXIgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcywgc2V0L3dhaXQgbGF0
Y2hlcyBmb3IgYWxsIGNoaWxkCiAgICAgLy8gY29udGV4dHMuIFRoaXMgd2lsbCBwcmV2ZW50IHRo
ZSBjb21wb3NpdG9yIGZyb20gdXNpbmcgYW55IG9mIHRoZSBjaGlsZApAQCAtMTA3NCw2ICsxMDc3
LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlc2l6ZU9uc2NyZWVuQ29udGVudChj
b25zdCBJbnRTaXplJiBzaXplKQogCiBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlh
bGl6ZVNoYXJlZE9iamVjdHMoKQogeworICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzIiwgdGhpcywgMCk7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAKICAgICAvLyBHZXQgdGhlIG1heCB0ZXh0dXJlIHNpemUgc3VwcG9ydGVk
IGJ5IHRoZSBzeXN0ZW0uCkBAIC0xMDgzLDMyICsxMDg3LDExNiBAQCBib29sIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogICAgIC8vIENyZWF0ZSBhbiBG
Qk8gZm9yIGRvaW5nIG9mZnNjcmVlbiByZW5kZXJpbmcuCiAgICAgR0xDKG1fY29udGV4dC5nZXQo
KSwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZl
cigpKTsKIAorICAgIC8vIFdlIHdpbGwgYWx3YXlzIG5lZWQgdGhlc2UgcHJvZ3JhbXMgdG8gcmVu
ZGVyLCBzbyBjcmVhdGUgdGhlIHByb2dyYW1zIGVhZ2VybHkgc28gdGhhdCB0aGUgc2hhZGVyIGNv
bXBpbGF0aW9uIGNhbgorICAgIC8vIHN0YXJ0IHdoaWxlIHdlIGRvIG90aGVyIHdvcmsuIE90aGVy
IHByb2dyYW1zIGFyZSBjcmVhdGVkIGxhemlseSBvbiBmaXJzdCBhY2Nlc3MuCiAgICAgbV9zaGFy
ZWRHZW9tZXRyeSA9IGFkb3B0UHRyKG5ldyBHZW9tZXRyeUJpbmRpbmcobV9jb250ZXh0LmdldCgp
KSk7Ci0gICAgbV9ib3JkZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21pdW06OkJv
cmRlclByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Ci0gICAgbV9oZWFkc1VwRGlzcGxheVByb2dy
YW0gPSBhZG9wdFB0cihuZXcgQ0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0
KCkpKTsKLSAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ0NhbnZhc0xh
eWVySW1wbDo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBtX3ZpZGVvTGF5ZXJSR0JB
UHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbShtX2Nv
bnRleHQuZ2V0KCkpKTsKLSAgICBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtID0gYWRvcHRQdHIobmV3
IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Ci0gICAgbV9w
bHVnaW5MYXllclByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NQbHVnaW5MYXllckltcGw6OlByb2dy
YW0obV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbSA9IGFkb3B0
UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7
Ci0gICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0gPSBhZG9wdFB0cihuZXcgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtOjpNYXNrUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3RpbGVy
UHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0obV9jb250
ZXh0LmdldCgpKSk7CiAKLSAgICBpZiAoIW1fc2hhcmVkR2VvbWV0cnktPmluaXRpYWxpemVkKCkg
fHwgIW1fYm9yZGVyUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKQotICAgICAgICB8fCAhbV9jYW52YXNM
YXllclByb2dyYW0tPmluaXRpYWxpemVkKCkKLSAgICAgICAgfHwgIW1faGVhZHNVcERpc3BsYXlQ
cm9ncmFtLT5pbml0aWFsaXplZCgpCi0gICAgICAgIHx8ICFtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3Jh
bS0+aW5pdGlhbGl6ZWQoKSB8fCAhbV92aWRlb0xheWVyWVVWUHJvZ3JhbS0+aW5pdGlhbGl6ZWQo
KQotICAgICAgICB8fCAhbV9wbHVnaW5MYXllclByb2dyYW0tPmluaXRpYWxpemVkKCkgfHwgIW1f
cmVuZGVyU3VyZmFjZVByb2dyYW0tPmluaXRpYWxpemVkKCkKLSAgICAgICAgfHwgIW1fcmVuZGVy
U3VyZmFjZU1hc2tQcm9ncmFtLT5pbml0aWFsaXplZCgpIHx8ICFtX3RpbGVyUHJvZ3JhbS0+aW5p
dGlhbGl6ZWQoKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvbXBvc2l0b3IgZmFpbGVkIHRvIGlu
aXRpYWxpemUgc2hhZGVycy4gRmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlLiIpOwotICAgICAgICBj
bGVhbnVwU2hhcmVkT2JqZWN0cygpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Zmx1c2goKSk7CiAKICAgICBtX3RleHR1
cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIHRleHR1
cmVNZW1vcnlMaW1pdEJ5dGVzLCBtX21heFRleHR1cmVTaXplKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpib3JkZXJQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1fYm9yZGVyUHJvZ3JhbSkKKyAg
ICAgICAgbV9ib3JkZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21pdW06OkJvcmRl
clByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAgaWYgKCFtX2JvcmRlclByb2dyYW0tPmlu
aXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Ym9yZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX2JvcmRl
clByb2dyYW0tPmluaXRpYWxpemUoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fYm9yZGVyUHJvZ3Jh
bS5nZXQoKTsKK30KKworY29uc3QgQ0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbSogTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpoZWFkc1VwRGlzcGxheVByb2dyYW0oKQoreworICAgIGlmICghbV9oZWFk
c1VwRGlzcGxheVByb2dyYW0pCisgICAgICAgIG1faGVhZHNVcERpc3BsYXlQcm9ncmFtID0gYWRv
cHRQdHIobmV3IENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Cisg
ICAgaWYgKCFtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAg
ICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpib3JkZXJQcm9ncmFtOjppbml0
aWFsaXplIiwgdGhpcywgMCk7CisgICAgICAgIG1faGVhZHNVcERpc3BsYXlQcm9ncmFtLT5pbml0
aWFsaXplKCk7CisgICAgfQorICAgIHJldHVybiBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbS5nZXQo
KTsKK30KKworY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpQcm9ncmFtKiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtKCkKK3sKKyAgICBBU1NFUlQobV9yZW5k
ZXJTdXJmYWNlUHJvZ3JhbSk7CisgICAgaWYgKCFtX3JlbmRlclN1cmZhY2VQcm9ncmFtLT5pbml0
aWFsaXplZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06
OmJvcmRlclByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9yZW5kZXJT
dXJmYWNlUHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOworICAgIH0KKyAgICByZXR1cm4gbV9yZW5kZXJT
dXJmYWNlUHJvZ3JhbS5nZXQoKTsKK30KKworY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpN
YXNrUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJmYWNlTWFza1Byb2dy
YW0oKQoreworICAgIGlmICghbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0pCisgICAgICAgIG1f
cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtID0gYWRvcHRQdHIobmV3IFJlbmRlclN1cmZhY2VDaHJv
bWl1bTo6TWFza1Byb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAgaWYgKCFtX3JlbmRlclN1
cmZhY2VNYXNrUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpib3JkZXJQcm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywg
MCk7CisgICAgICAgIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLT5pbml0aWFsaXplKCk7Cisg
ICAgfQorICAgIHJldHVybiBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbS5nZXQoKTsKK30KKwor
Y29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnRpbGVyUHJvZ3JhbSgpCit7CisgICAgQVNTRVJUKG1fdGlsZXJQcm9ncmFtKTsKKyAgICBpZiAo
IW1fdGlsZXJQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJM
YXllclJlbmRlcmVyQ2hyb21pdW06OmJvcmRlclByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAw
KTsKKyAgICAgICAgbV90aWxlclByb2dyYW0tPmluaXRpYWxpemUoKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fdGlsZXJQcm9ncmFtLmdldCgpOworfQorCitjb25zdCBDQ0NhbnZhc0xheWVySW1wbDo6
UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjYW52YXNMYXllclByb2dyYW0oKQorewor
ICAgIGlmICghbV9jYW52YXNMYXllclByb2dyYW0pCisgICAgICAgIG1fY2FudmFzTGF5ZXJQcm9n
cmFtID0gYWRvcHRQdHIobmV3IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKG1fY29udGV4dC5n
ZXQoKSkpOworICAgIGlmICghbV9jYW52YXNMYXllclByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsK
KyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Ym9yZGVyUHJvZ3Jh
bTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbS0+
aW5pdGlhbGl6ZSgpOworICAgIH0KKyAgICByZXR1cm4gbV9jYW52YXNMYXllclByb2dyYW0uZ2V0
KCk7Cit9CisKK2NvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnBsdWdpbkxheWVyUHJvZ3JhbSgpCit7CisgICAgaWYgKCFtX3BsdWdpbkxheWVy
UHJvZ3JhbSkKKyAgICAgICAgbV9wbHVnaW5MYXllclByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NQ
bHVnaW5MYXllckltcGw6OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAgaWYgKCFtX3Bs
dWdpbkxheWVyUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpib3JkZXJQcm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywg
MCk7CisgICAgICAgIG1fcGx1Z2luTGF5ZXJQcm9ncmFtLT5pbml0aWFsaXplKCk7CisgICAgfQor
ICAgIHJldHVybiBtX3BsdWdpbkxheWVyUHJvZ3JhbS5nZXQoKTsKK30KKworY29uc3QgQ0NWaWRl
b0xheWVySW1wbDo6UkdCQVByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9MYXll
clJHQkFQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1fdmlkZW9MYXllclJHQkFQcm9ncmFtKQorICAg
ICAgICBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpSR0JBUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBpZiAoIW1fdmlkZW9MYXll
clJHQkFQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXll
clJlbmRlcmVyQ2hyb21pdW06OmJvcmRlclByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsK
KyAgICAgICAgbV92aWRlb0xheWVyUkdCQVByb2dyYW0tPmluaXRpYWxpemUoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtLmdldCgpOworfQorCitjb25zdCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvTGF5
ZXJZVVZQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1fdmlkZW9MYXllcllVVlByb2dyYW0pCisgICAg
ICAgIG1fdmlkZW9MYXllcllVVlByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NWaWRlb0xheWVySW1w
bDo6WVVWUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBpZiAoIW1fdmlkZW9MYXllcllV
VlByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Ym9yZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAg
ICAgICBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtLT5pbml0aWFsaXplKCk7CisgICAgfQorICAgIHJl
dHVybiBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtLmdldCgpOworfQorCisKIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDJlZTAxOTE1
MmNkMmVkNzUzZGRiMWUzOGUyY2I4MWRlNzIzNTI3MTIuLmRiNmZmM2VkNDBhM2JkY2FjZTI1YTc4
ODBjZjBkZWIzM2MzYTJkN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBA
IC0xMjQsMTUgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAgaW50IG1heFRleHR1cmVTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZTsgfQogCiAgICAgY29uc3QgR2VvbWV0cnlCaW5k
aW5nKiBzaGFyZWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkR2VvbWV0cnkuZ2V0
KCk7IH0KLSAgICBjb25zdCBMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtKiBib3JkZXJQcm9n
cmFtKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJQcm9ncmFtLmdldCgpOyB9Ci0gICAgY29uc3Qg
Q0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbSogaGVhZHNVcERpc3BsYXlQcm9ncmFtKCkgY29uc3Qg
eyByZXR1cm4gbV9oZWFkc1VwRGlzcGxheVByb2dyYW0uZ2V0KCk7IH0KLSAgICBjb25zdCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbS5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRl
clN1cmZhY2VDaHJvbWl1bTo6TWFza1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLmdldCgpOyB9Ci0gICAg
Y29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiB0aWxlclByb2dyYW0oKSBjb25zdCB7
IHJldHVybiBtX3RpbGVyUHJvZ3JhbS5nZXQoKTsgfQotICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJ
bXBsOjpQcm9ncmFtKiBjYW52YXNMYXllclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX2NhbnZh
c0xheWVyUHJvZ3JhbS5nZXQoKTsgfQotICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9n
cmFtKiBwbHVnaW5MYXllclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkxheWVyUHJv
Z3JhbS5nZXQoKTsgfQotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiB2
aWRlb0xheWVyUkdCQVByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJSR0JBUHJv
Z3JhbS5nZXQoKTsgfQotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIHZp
ZGVvTGF5ZXJZVVZQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0xheWVyWVVWUHJvZ3Jh
bS5nZXQoKTsgfQorICAgIGNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRlclByb2dyYW0qIGJvcmRl
clByb2dyYW0oKTsKKyAgICBjb25zdCBDQ0hlYWRzVXBEaXNwbGF5OjpQcm9ncmFtKiBoZWFkc1Vw
RGlzcGxheVByb2dyYW0oKTsKKyAgICBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlByb2dy
YW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CisgICAgY29uc3QgUmVuZGVyU3VyZmFjZUNocm9t
aXVtOjpNYXNrUHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7CisgICAgY29uc3Qg
TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiB0aWxlclByb2dyYW0oKTsKKyAgICBjb25zdCBD
Q0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbSogY2FudmFzTGF5ZXJQcm9ncmFtKCk7CisgICAgY29u
c3QgQ0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0qIHBsdWdpbkxheWVyUHJvZ3JhbSgpOworICAg
IGNvbnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dy
YW0oKTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKiB2aWRlb0xheWVy
WVVWUHJvZ3JhbSgpOwogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50
U2l6ZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAKaW5kZXggNDc2YTBm
MGE2MDhmNzUwY2U4YzA5MTJjZGEyMGQ3ODI5NjM2YzQ0Ny4uZGE2NDBlYzdkNjEwNDEyMTg2ZDlj
MTMyM2IyYWM5NjQ2YzJkYjViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNw
cApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Niw2ICs2Nyw3IEBAIHZvaWQgTGF5ZXJUZXh0
dXJlU3ViSW1hZ2U6OnVwbG9hZFdpdGhUZXhTdWJJbWFnZShjb25zdCB1aW50OF90KiBpbWFnZSwg
Y29uc3QgSW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCiB7CisgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGV4dHVyZVN1Yklt
YWdlOjp1cGxvYWRXaXRoVGV4U3ViSW1hZ2UiLCB0aGlzLCAwKTsKICAgICBpZiAoIW1fc3ViSW1h
Z2UpCiAgICAgICAgIG1fc3ViSW1hZ2UgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W21fc3Vi
SW1hZ2VTaXplLndpZHRoKCkgKiBtX3N1YkltYWdlU2l6ZS5oZWlnaHQoKSAqIDRdKTsKIApAQCAt
OTIsNiArOTQsNyBAQCB2b2lkIExheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoTWFwVGV4
U3ViSW1hZ2UoY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Cisg
ICAgVFJBQ0VfRVZFTlQoIkxheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoTWFwVGV4U3Vi
SW1hZ2UiLCB0aGlzLCAwKTsKICAgICAvLyBPZmZzZXQgZnJvbSBpbWFnZS1yZWN0IHRvIHNvdXJj
ZS1yZWN0LgogICAgIEludFBvaW50IG9mZnNldChzb3VyY2VSZWN0LngoKSAtIGltYWdlUmVjdC54
KCksIHNvdXJjZVJlY3QueSgpIC0gaW1hZ2VSZWN0LnkoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Byb2dyYW1CaW5kaW5nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Byb2dyYW1CaW5kaW5n
LmNwcAppbmRleCA2YmUwMGVmZmRiZTU0YmVmZGMyNDJlNTg0NTA1ZDNkMWRiNTNkZWZhLi43NDVj
YmEzZGNiZGI0NDNlNTEzYWQ2MWFjN2Q2MWQ0YmE4MjY5OTEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Qcm9ncmFtQmluZGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUHJvZ3JhbUJpbmRp
bmcuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDksMTQgKzUwLDEwIEBAIFByb2dyYW1CaW5kaW5nQmFzZTo6flByb2dyYW1CaW5kaW5n
QmFzZSgpCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbSht
X3Byb2dyYW0pKTsKIH0KIAotYm9vbCBQcm9ncmFtQmluZGluZ0Jhc2U6OmluaXQoY29uc3QgU3Ry
aW5nJiB2ZXJ0ZXhTaGFkZXIsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRTaGFkZXIpCit2b2lkIFBy
b2dyYW1CaW5kaW5nQmFzZTo6aW5pdChjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlciwgY29uc3Qg
U3RyaW5nJiBmcmFnbWVudFNoYWRlcikKIHsKICAgICBtX3Byb2dyYW0gPSBjcmVhdGVTaGFkZXJQ
cm9ncmFtKHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOwotICAgIGlmICghbV9wcm9ncmFt
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAgIEFT
U0VSVChtX3Byb2dyYW0pOwogfQogCiB1bnNpZ25lZCBQcm9ncmFtQmluZGluZ0Jhc2U6OmxvYWRT
aGFkZXIodW5zaWduZWQgdHlwZSwgY29uc3QgU3RyaW5nJiBzaGFkZXJTb3VyY2UpCkBAIC02Nywx
NyArNjQsMjAgQEAgdW5zaWduZWQgUHJvZ3JhbUJpbmRpbmdCYXNlOjpsb2FkU2hhZGVyKHVuc2ln
bmVkIHR5cGUsIGNvbnN0IFN0cmluZyYgc2hhZGVyU291cmMKICAgICBTdHJpbmcgc291cmNlU3Ry
aW5nKHNoYWRlclNvdXJjZSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zaGFkZXJT
b3VyY2Uoc2hhZGVyLCBzb3VyY2VTdHJpbmcpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKSk7CisjaWZuZGVmIE5ERUJVRwogICAgIGludCBjb21w
aWxlZCA9IDA7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFk
ZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVkKSk7CiAgICAg
aWYgKCFjb21waWxlZCkgewogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0
ZVNoYWRlcihzaGFkZXIpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorI2VuZGlmCiAgICAg
cmV0dXJuIHNoYWRlcjsKIH0KIAogdW5zaWduZWQgUHJvZ3JhbUJpbmRpbmdCYXNlOjpjcmVhdGVT
aGFkZXJQcm9ncmFtKGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJp
bmcmIGZyYWdtZW50U2hhZGVyU291cmNlKQogeworICAgIFRSQUNFX0VWRU5UKCJQcm9ncmFtQmlu
ZGluZ0Jhc2U6OmNyZWF0ZVNoYWRlclByb2dyYW0iLCB0aGlzLCAwKTsKICAgICB1bnNpZ25lZCB2
ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
LCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwogICAgIGlmICghdmVydGV4U2hhZGVyKSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB2ZXJ0ZXggc2hhZGVyIik7CkBAIC0xMDUsNiAr
MTA1LDcgQEAgdW5zaWduZWQgUHJvZ3JhbUJpbmRpbmdCYXNlOjpjcmVhdGVTaGFkZXJQcm9ncmFt
KGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmMKICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtT2JqZWN0LCBHZW9tZXRyeUJpbmRpbmc6
OnRleENvb3JkQXR0cmliTG9jYXRpb24oKSwgImFfdGV4Q29vcmQiKSk7CiAKICAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKHByb2dyYW1PYmplY3QpKTsKKyNpZm5kZWYg
TkRFQlVHCiAgICAgaW50IGxpbmtlZCA9IDA7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5nZXRQcm9ncmFtaXYocHJvZ3JhbU9iamVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RB
VFVTLCAmbGlua2VkKSk7CiAgICAgaWYgKCFsaW5rZWQpIHsKQEAgLTExMiw2ICsxMTMsNyBAQCB1
bnNpZ25lZCBQcm9ncmFtQmluZGluZ0Jhc2U6OmNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgU3Ry
aW5nJiB2ZXJ0ZXhTaGFkZXJTb3VyYwogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmRlbGV0ZVByb2dyYW0ocHJvZ3JhbU9iamVjdCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CisjZW5kaWYKIAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZl
cnRleFNoYWRlcikpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVy
KGZyYWdtZW50U2hhZGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Qcm9ncmFtQmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUHJvZ3JhbUJpbmRpbmcuaAppbmRleCBjNmJmNjA1NjE2ZGQ3
MmJjNDI4ODA4NmY2YmY0OGI2NDI0M2RjNmYyLi4wOTk4N2Y5NmMyNjc1Yzg3YTI1ZTk1ZTg5OGM1
YTk1YjY2M2EwYTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Qcm9ncmFtQmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1Byb2dyYW1CaW5kaW5nLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zOSw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBQcm9ncmFtQmluZGluZ0Jhc2Uo
R3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB+UHJvZ3JhbUJpbmRpbmdCYXNlKCk7CiAKLSAgICBi
b29sIGluaXQoY29uc3QgU3RyaW5nJiB2ZXJ0ZXhTaGFkZXIsIGNvbnN0IFN0cmluZyYgZnJhZ21l
bnRTaGFkZXIpOworICAgIHZvaWQgaW5pdChjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlciwgY29u
c3QgU3RyaW5nJiBmcmFnbWVudFNoYWRlcik7CiAKICAgICB1bnNpZ25lZCBwcm9ncmFtKCkgY29u
c3QgeyByZXR1cm4gbV9wcm9ncmFtOyB9CiAgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5pdGlhbGl6ZWQ7IH0KQEAgLTYwLDEyICs2MSwxMyBAQCBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgUHJvZ3JhbUJpbmRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAg
ICAgIDogUHJvZ3JhbUJpbmRpbmdCYXNlKGNvbnRleHQpCiAgICAgewotICAgICAgICBpZiAoIVBy
b2dyYW1CaW5kaW5nQmFzZTo6aW5pdChtX3ZlcnRleFNoYWRlci5nZXRTaGFkZXJTdHJpbmcoKSwg
bV9mcmFnbWVudFNoYWRlci5nZXRTaGFkZXJTdHJpbmcoKSkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGlmICghbV92ZXJ0ZXhTaGFkZXIuaW5pdChtX2NvbnRleHQsIG1fcHJvZ3JhbSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghbV9mcmFnbWVudFNoYWRlci5pbml0
KG1fY29udGV4dCwgbV9wcm9ncmFtKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUHJv
Z3JhbUJpbmRpbmdCYXNlOjppbml0KG1fdmVydGV4U2hhZGVyLmdldFNoYWRlclN0cmluZygpLCBt
X2ZyYWdtZW50U2hhZGVyLmdldFNoYWRlclN0cmluZygpKTsKKyAgICB9CisKKyAgICB2b2lkIGlu
aXRpYWxpemUoKQorICAgIHsKKyAgICAgICAgbV92ZXJ0ZXhTaGFkZXIuaW5pdChtX2NvbnRleHQs
IG1fcHJvZ3JhbSk7CisgICAgICAgIG1fZnJhZ21lbnRTaGFkZXIuaW5pdChtX2NvbnRleHQsIG1f
cHJvZ3JhbSk7CiAgICAgICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hh
ZGVyQ2hyb21pdW0uY3BwCmluZGV4IGI3ZjQ0N2JkNTcwNDUwZDg5YjAyMDVjMGM2ODQ0MGJhYTgy
NmI5ZDMuLjc5MWU0YWI4YWI2ZjcwY2M0ODJiOGIzNmVkZmZiMTFkNThlYWQ0NTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aGFkZXJDaHJvbWl1bS5jcHAKQEAgLTQyLDEwICs0MiwxMCBAQCBWZXJ0ZXhTaGFkZXJQb3NUZXg6
OlZlcnRleFNoYWRlclBvc1RleCgpCiB7CiB9CiAKLWJvb2wgVmVydGV4U2hhZGVyUG9zVGV4Ojpp
bml0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKQordm9pZCBW
ZXJ0ZXhTaGFkZXJQb3NUZXg6OmluaXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2ln
bmVkIHByb2dyYW0pCiB7CiAgICAgbV9tYXRyaXhMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtLCAibWF0cml4Iik7Ci0gICAgcmV0dXJuIG1fbWF0cml4TG9jYXRp
b24gIT0gLTE7CisgICAgQVNTRVJUKG1fbWF0cml4TG9jYXRpb24gIT0gLTEpOwogfQogCiBTdHJp
bmcgVmVydGV4U2hhZGVyUG9zVGV4OjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdApAQCAtNzAsMTIg
KzcwLDEyIEBAIFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0Y2g6OlZlcnRleFNoYWRlclBvc1Rl
eFlVVlN0cmV0Y2goKQogewogfQogCi1ib29sIFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0Y2g6
OmluaXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCit2b2lk
IFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0Y2g6OmluaXQoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCiB7CiAgICAgbV9tYXRyaXhMb2NhdGlvbiA9IGNvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAibWF0cml4Iik7CiAgICAgbV95V2lkdGhT
Y2FsZUZhY3RvckxvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
ICJ5X3dpZHRoU2NhbGVGYWN0b3IiKTsKICAgICBtX3V2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
ID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ1dl93aWR0aFNjYWxlRmFj
dG9yIik7Ci0gICAgcmV0dXJuIG1fbWF0cml4TG9jYXRpb24gIT0gLTEgJiYgbV95V2lkdGhTY2Fs
ZUZhY3RvckxvY2F0aW9uICE9IC0xICYmIG1fdXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24gIT0g
LTE7CisgICAgQVNTRVJUKG1fbWF0cml4TG9jYXRpb24gIT0gLTEgJiYgbV95V2lkdGhTY2FsZUZh
Y3RvckxvY2F0aW9uICE9IC0xICYmIG1fdXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24gIT0gLTEp
OwogfQogCiBTdHJpbmcgVmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRjaDo6Z2V0U2hhZGVyU3Ry
aW5nKCkgY29uc3QKQEAgLTEwMywxMCArMTAzLDEwIEBAIFZlcnRleFNoYWRlclBvczo6VmVydGV4
U2hhZGVyUG9zKCkKIHsKIH0KIAotYm9vbCBWZXJ0ZXhTaGFkZXJQb3M6OmluaXQoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCit2b2lkIFZlcnRleFNoYWRlclBv
czo6aW5pdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSkKIHsK
ICAgICBtX21hdHJpeExvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW0sICJtYXRyaXgiKTsKLSAgICByZXR1cm4gbV9tYXRyaXhMb2NhdGlvbiAhPSAtMTsKKyAgICBB
U1NFUlQobV9tYXRyaXhMb2NhdGlvbiAhPSAtMSk7CiB9CiAKIFN0cmluZyBWZXJ0ZXhTaGFkZXJQ
b3M6OmdldFNoYWRlclN0cmluZygpIGNvbnN0CkBAIC0xMjcsMTEgKzEyNywxMSBAQCBWZXJ0ZXhT
aGFkZXJQb3NUZXhUcmFuc2Zvcm06OlZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSgpCiB7CiB9
CiAKLWJvb2wgVmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtOjppbml0KEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKQordm9pZCBWZXJ0ZXhTaGFkZXJQb3NUZXhU
cmFuc2Zvcm06OmluaXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dy
YW0pCiB7CiAgICAgbV9tYXRyaXhMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtLCAibWF0cml4Iik7CiAgICAgbV90ZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IGNvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidGV4VHJhbnNmb3JtIik7Ci0gICAgcmV0
dXJuIG1fbWF0cml4TG9jYXRpb24gIT0gLTEgJiYgbV90ZXhUcmFuc2Zvcm1Mb2NhdGlvbiAhPSAt
MTsKKyAgICBBU1NFUlQobV9tYXRyaXhMb2NhdGlvbiAhPSAtMSAmJiBtX3RleFRyYW5zZm9ybUxv
Y2F0aW9uICE9IC0xKTsKIH0KIAogU3RyaW5nIFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybTo6
Z2V0U2hhZGVyU3RyaW5nKCkgY29uc3QKQEAgLTE1NiwxMiArMTU2LDEyIEBAIEZyYWdtZW50VGV4
QWxwaGFCaW5kaW5nOjpGcmFnbWVudFRleEFscGhhQmluZGluZygpCiB7CiB9CiAKLWJvb2wgRnJh
Z21lbnRUZXhBbHBoYUJpbmRpbmc6OmluaXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVu
c2lnbmVkIHByb2dyYW0pCit2b2lkIEZyYWdtZW50VGV4QWxwaGFCaW5kaW5nOjppbml0KEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKQogewogICAgIG1fc2FtcGxl
ckxvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJzX3RleHR1
cmUiKTsKICAgICBtX2FscGhhTG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbSwgImFscGhhIik7CiAKLSAgICByZXR1cm4gbV9zYW1wbGVyTG9jYXRpb24gIT0gLTEg
JiYgbV9hbHBoYUxvY2F0aW9uICE9IC0xOworICAgIEFTU0VSVChtX3NhbXBsZXJMb2NhdGlvbiAh
PSAtMSAmJiBtX2FscGhhTG9jYXRpb24gIT0gLTEpOwogfQogCiBTdHJpbmcgRnJhZ21lbnRTaGFk
ZXJSR0JBVGV4RmxpcEFscGhhOjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdApAQCAtMjE2LDEzICsy
MTYsMTIgQEAgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrOjpGcmFnbWVudFNoYWRlclJH
QkFUZXhBbHBoYU1hc2soKQogewogfQogCi1ib29sIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhh
TWFzazo6aW5pdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSkK
K3ZvaWQgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrOjppbml0KEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKQogewogICAgIG1fc2FtcGxlckxvY2F0aW9u
ID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJzX3RleHR1cmUiKTsKICAg
ICBtX21hc2tTYW1wbGVyTG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbSwgInNfbWFzayIpOwogICAgIG1fYWxwaGFMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtLCAiYWxwaGEiKTsKLQotICAgIHJldHVybiBtX3NhbXBsZXJMb2Nh
dGlvbiAhPSAtMSAmJiBtX21hc2tTYW1wbGVyTG9jYXRpb24gIT0gLTEgJiYgbV9hbHBoYUxvY2F0
aW9uICE9IC0xOworICAgIEFTU0VSVChtX3NhbXBsZXJMb2NhdGlvbiAhPSAtMSAmJiBtX21hc2tT
YW1wbGVyTG9jYXRpb24gIT0gLTEgJiYgbV9hbHBoYUxvY2F0aW9uICE9IC0xKTsKIH0KIAogU3Ry
aW5nIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhTWFzazo6Z2V0U2hhZGVyU3RyaW5nKCkgY29u
c3QKQEAgLTI1Miw3ICsyNTEsNyBAQCBGcmFnbWVudFNoYWRlcllVVlZpZGVvOjpGcmFnbWVudFNo
YWRlcllVVlZpZGVvKCkKIHsKIH0KIAotYm9vbCBGcmFnbWVudFNoYWRlcllVVlZpZGVvOjppbml0
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKQordm9pZCBGcmFn
bWVudFNoYWRlcllVVlZpZGVvOjppbml0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNp
Z25lZCBwcm9ncmFtKQogewogICAgIG1feVRleHR1cmVMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAieV90ZXh0dXJlIik7CiAgICAgbV91VGV4dHVyZUxvY2F0
aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ1X3RleHR1cmUiKTsK
QEAgLTI2MSw4ICsyNjAsOCBAQCBib29sIEZyYWdtZW50U2hhZGVyWVVWVmlkZW86OmluaXQoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCiAgICAgbV9jY01hdHJp
eExvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJjY19tYXRy
aXgiKTsKICAgICBtX3l1dkFkakxvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW0sICJ5dXZfYWRqIik7CiAKLSAgICByZXR1cm4gbV95VGV4dHVyZUxvY2F0aW9uICE9
IC0xICYmIG1fdVRleHR1cmVMb2NhdGlvbiAhPSAtMSAmJiBtX3ZUZXh0dXJlTG9jYXRpb24gIT0g
LTEKLSAgICAgICAgICAgJiYgbV9hbHBoYUxvY2F0aW9uICE9IC0xICYmIG1fY2NNYXRyaXhMb2Nh
dGlvbiAhPSAtMSAmJiBtX3l1dkFkakxvY2F0aW9uICE9IC0xOworICAgIEFTU0VSVChtX3lUZXh0
dXJlTG9jYXRpb24gIT0gLTEgJiYgbV91VGV4dHVyZUxvY2F0aW9uICE9IC0xICYmIG1fdlRleHR1
cmVMb2NhdGlvbiAhPSAtMQorICAgICAgICAgICAmJiBtX2FscGhhTG9jYXRpb24gIT0gLTEgJiYg
bV9jY01hdHJpeExvY2F0aW9uICE9IC0xICYmIG1feXV2QWRqTG9jYXRpb24gIT0gLTEpOwogfQog
CiBTdHJpbmcgRnJhZ21lbnRTaGFkZXJZVVZWaWRlbzo6Z2V0U2hhZGVyU3RyaW5nKCkgY29uc3QK
QEAgLTI5NSwxMCArMjk0LDEwIEBAIEZyYWdtZW50U2hhZGVyQ29sb3I6OkZyYWdtZW50U2hhZGVy
Q29sb3IoKQogewogfQogCi1ib29sIEZyYWdtZW50U2hhZGVyQ29sb3I6OmluaXQoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCit2b2lkIEZyYWdtZW50U2hhZGVy
Q29sb3I6OmluaXQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0p
CiB7CiAgICAgbV9jb2xvckxvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sICJjb2xvciIpOwotICAgIHJldHVybiBtX2NvbG9yTG9jYXRpb24gIT0gLTE7CisgICAg
QVNTRVJUKG1fY29sb3JMb2NhdGlvbiAhPSAtMSk7CiB9CiAKIFN0cmluZyBGcmFnbWVudFNoYWRl
ckNvbG9yOjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgKaW5kZXgg
M2EzZTE3NTAxYWRlNzgyYTg2N2RjZGI0OTMyNzNkZjhhMDVlNjE5MS4uOGFjYTNhODAzMTI4OTM5
MDMzYWJlYTAxMDJlY2UyMWRkYzFhNjM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCkBAIC00Miw3
ICs0Miw3IEBAIGNsYXNzIFZlcnRleFNoYWRlclBvc1RleCB7CiBwdWJsaWM6CiAgICAgVmVydGV4
U2hhZGVyUG9zVGV4KCk7CiAKLSAgICBib29sIGluaXQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNp
Z25lZCBwcm9ncmFtKTsKKyAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25l
ZCBwcm9ncmFtKTsKICAgICBTdHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29uc3Q7CiAKICAgICBp
bnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9CkBA
IC01NSw3ICs1NSw3IEBAIGNsYXNzIFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0Y2ggewogcHVi
bGljOgogICAgIFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0Y2goKTsKIAotICAgIGJvb2wgaW5p
dChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHByb2dyYW0pOworICAgIHZvaWQgaW5pdChH
cmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHByb2dyYW0pOwogICAgIFN0cmluZyBnZXRTaGFk
ZXJTdHJpbmcoKSBjb25zdDsKIAogICAgIGludCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWF0cml4TG9jYXRpb247IH0KQEAgLTcyLDcgKzcyLDcgQEAgY2xhc3MgVmVydGV4U2hh
ZGVyUG9zIHsKIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFkZXJQb3MoKTsKIAotICAgIGJvb2wgaW5p
dChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHByb2dyYW0pOworICAgIHZvaWQgaW5pdChH
cmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHByb2dyYW0pOwogICAgIFN0cmluZyBnZXRTaGFk
ZXJTdHJpbmcoKSBjb25zdDsKIAogICAgIGludCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWF0cml4TG9jYXRpb247IH0KQEAgLTg1LDcgKzg1LDcgQEAgY2xhc3MgVmVydGV4U2hh
ZGVyUG9zVGV4VHJhbnNmb3JtIHsKIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFu
c2Zvcm0oKTsKIAotICAgIGJvb2wgaW5pdChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHBy
b2dyYW0pOworICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHByb2dy
YW0pOwogICAgIFN0cmluZyBnZXRTaGFkZXJTdHJpbmcoKSBjb25zdDsKIAogICAgIGludCBtYXRy
aXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9jYXRpb247IH0KQEAgLTEwMCw3
ICsxMDAsNyBAQCBjbGFzcyBGcmFnbWVudFRleEFscGhhQmluZGluZyB7CiBwdWJsaWM6CiAgICAg
RnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcoKTsKIAotICAgIGJvb2wgaW5pdChHcmFwaGljc0NvbnRl
eHQzRCosIHVuc2lnbmVkIHByb2dyYW0pOworICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRleHQz
RCosIHVuc2lnbmVkIHByb2dyYW0pOwogICAgIGludCBhbHBoYUxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbHBoYUxvY2F0aW9uOyB9CiAgICAgaW50IHNhbXBsZXJMb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc2FtcGxlckxvY2F0aW9uOyB9CiAKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJs
aWM6CiAgICAgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrKCk7CiAgICAgU3RyaW5nIGdl
dFNoYWRlclN0cmluZygpIGNvbnN0OwogCi0gICAgYm9vbCBpbml0KEdyYXBoaWNzQ29udGV4dDNE
KiwgdW5zaWduZWQgcHJvZ3JhbSk7CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dDNEKiwg
dW5zaWduZWQgcHJvZ3JhbSk7CiAgICAgaW50IGFscGhhTG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2FscGhhTG9jYXRpb247IH0KICAgICBpbnQgc2FtcGxlckxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zYW1wbGVyTG9jYXRpb247IH0KICAgICBpbnQgbWFza1NhbXBsZXJMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fbWFza1NhbXBsZXJMb2NhdGlvbjsgfQpAQCAtMTUxLDcgKzE1MSw3
IEBAIHB1YmxpYzoKICAgICBGcmFnbWVudFNoYWRlcllVVlZpZGVvKCk7CiAgICAgU3RyaW5nIGdl
dFNoYWRlclN0cmluZygpIGNvbnN0OwogCi0gICAgYm9vbCBpbml0KEdyYXBoaWNzQ29udGV4dDNE
KiwgdW5zaWduZWQgcHJvZ3JhbSk7CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dDNEKiwg
dW5zaWduZWQgcHJvZ3JhbSk7CiAKICAgICBpbnQgeVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1feVRleHR1cmVMb2NhdGlvbjsgfQogICAgIGludCB1VGV4dHVyZUxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV91VGV4dHVyZUxvY2F0aW9uOyB9CkBAIC0xNzQsNyArMTc0LDcgQEAg
cHVibGljOgogICAgIEZyYWdtZW50U2hhZGVyQ29sb3IoKTsKICAgICBTdHJpbmcgZ2V0U2hhZGVy
U3RyaW5nKCkgY29uc3Q7CiAKLSAgICBib29sIGluaXQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNp
Z25lZCBwcm9ncmFtKTsKKyAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25l
ZCBwcm9ncmFtKTsKICAgICBpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29s
b3JMb2NhdGlvbjsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5
ZjllYWM0YjhkM2I2Y2RjMTdjOTYzMGVhODg2MDhmMWU3NGM5YmQ2Li43NDI4YWZhOTAzZTYxY2Fk
NGVlYjg3ZDk0NzA5YzFhNDkxZmE4Y2FjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDExLTA2LTEzICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W2Nocm9taXVtXSBDb21wb3NpdG9yIHNoYWRlciBpbml0aWFsaXphdGlvbiBpcyBpbmVmZmljaWVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2MTgK
KworICAgICAgICBBZGQgYSBUUkFDRV9FVkVOVCgpIGFyb3VuZCBpbml0aWFsIGNvbXBvc2l0b3Ig
aW5pdGlhbGl6YXRpb24uCisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KToKKwogMjAxMS0wNi0xMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNjhhNDhkMmQ2MmNiYzg0OGRkZDQyMzNlOTUz
Mzk0NzI3ZDM5N2VlNi4uYzA1NTc4YmIwNzAxOWI2MTQ2Yzg1ZTE3NTM0MmEwNTc2ZWM4NmM1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMjQ5Nyw2
ICsyNDk3LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKGJvb2wgYWN0aXZlKQogCiAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgVFJBQ0VfRVZF
TlQoIldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUodHJ1ZSki
LCB0aGlzLCAwKTsKICAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
bV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELnJlbGVhc2UoKTsKICAgICAgICAg
aWYgKCFjb250ZXh0KSB7CiAgICAgICAgICAgICBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>