<?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>187344</bug_id>
          
          <creation_ts>2018-07-05 09:17:25 -0700</creation_ts>
          <short_desc>[LFC] Introduce TextRunCollector</short_desc>
          <delta_ts>2018-10-19 09:45:31 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1439410</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-07-05 09:17:25 -0700</bug_when>
    <thetext>as part of decouple run generating from line breaking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1439413</commentid>
    <comment_count>1</comment_count>
      <attachid>344332</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-07-05 09:26:52 -0700</bug_when>
    <thetext>Created attachment 344332
Patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344332</attachid>
            <date>2018-07-05 09:26:52 -0700</date>
            <delta_ts>2018-07-05 09:26:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.txt</filename>
            <type>text/plain</type>
            <size>21145</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1NGIzMGQwOTYzOC4uZmZiM2FlM2I4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NyBAQAorMjAxOC0wNy0wNSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgor
CisgICAgICAgIFtMRkNdIEludHJvZHVjZSBUZXh0UnVuQ29sbGVjdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODczNDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgdGhlIGRl
Y291cGxlIHNpbXBsZSBsaW5lIGxheW91dCBydW4gaXRlcmF0b3IgZnJvbSBsaW5lIGJyZWFraW5n
LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZVRleHRDb250ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OlRleHRDb250ZW50OjpoYW5kbGUpOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvVGV4dExheW91dC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6VGV4dDo6UnVuOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRleHQ6OlJ1bjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6VGV4dDo6UnVuOjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
ZXh0OjpSdW46OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dDo6
UnVuOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dDo6UnVuOjpp
c1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0OjpSdW46
OmlzTm9uV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRleHQ6
OlJ1bjo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0
OjpSdW46OmlzSGFyZExpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRleHQ6OlJ1bjo6aXNDb2xsYXBzZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpUZXh0OjpSdW46OmlzQ29sbGFwc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpUZXh0OjpSdW46Omhhc0h5cGhlbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OlRleHQ6OlJ1bjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRleHQ6OlJ1bjo6c2V0SXNDb2xsYXBzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRleHQ6OlJ1bjo6c2V0SXNDb2xsYXBzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
ZXh0OjpSdW46OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dDo6UnVu
OjpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0OjpSdW46Om9wZXJhdG9yPT0g
Y29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvVGV4
dFJ1bkNvbGxlY3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0
UnVuQ29sbGVjdG9yOjpydW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dFJ1bkNv
bGxlY3Rvcjo6U3R5bGU6OlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dFJ1
bkNvbGxlY3Rvcjo6VGV4dFJ1bkNvbGxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRleHRSdW5Db2xsZWN0b3I6OmNvbGxlY3RSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6VGV4dFJ1bkNvbGxlY3Rvcjo6bW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dFJ1bkNvbGxlY3Rvcjo6bmV4dEJyZWFrYWJsZVBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dFJ1bkNvbGxlY3Rvcjo6bmV4dE5v
bldoaXRlc3BhY2VQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRleHRSdW5D
b2xsZWN0b3I6OnRleHRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRl
eHRSdW5Db2xsZWN0b3I6OmZpeGVkUGl0Y2hXaWR0aCBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9UZXh0UnVuQ29sbGVjdG9yLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRDb250
ZW50LmNwcC4KKwogMjAxOC0wNy0wMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtMRkNdIEludHJvZHVjZSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6VGV4dENv
bnRlbnQ6OmhhbmRsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGRlZGY1MGQ5OWIwLi5lN2QwMGU0Mzg5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTEyMzIsNiArMTIzMiw3IEBAIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lSW52YWxpZGF0aW9uLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dENv
bnRlbnQuY3BwCitsYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L1RleHRSdW5Db2xs
ZWN0b3IuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCbG9ja0NvbnRhaW5lci5jcHAKIGxh
eW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dENv
bnRhaW5lci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjZTdjYTFlOGM5NC4uYWNiYjZkOGMxZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg5MzksNiAr
ODkzOSw4IEBACiAJCTZGOTk1QTJGMUE3MDgzMzcwMEE3MzVGNCAvKiBKU1dlYkdMVmVydGV4QXJy
YXlPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJH
TFZlcnRleEFycmF5T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY5
OTVBMzAxQTcwODMzNzAwQTczNUY0IC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUyMEI0NjRCNjAwREFEOTM4IC8q
IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZG
RTdERERGMjBFQzZFQkUwMDhCNUI0RSAvKiBUZXh0UnVuQ29sbGVjdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHRSdW5Db2xsZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZF
N0RERTAyMEVDNkVCRTAwOEI1QjRFIC8qIFRleHRSdW5Db2xsZWN0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGV4dFJ1bkNvbGxlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcwOUEwMUZEMUUzRDBCQ0MwMDZCMEQ0QyAvKiBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZUZldGNoRmFpbHVyZUtpbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzEwMDRCOUQxREMxMzk4ODAwQTUyQTM4
IC8qIHBsYXliYWNrLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSAicGxheWJhY2stc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcxMDI1RUMyMUY5OUYwOTYwMDRBMjUwQyAvKiBXZWJBbmltYXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTc2
NCw2ICsxNTc2Niw3IEBACiAJCTExNUNGQTlBMjA4QkMxNDAwMDFFNjk5MSAvKiBpbmxpbmVmb3Jt
YXR0aW5nICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk2
RkU3RERERDIwRUM2RThCMDA4QjVCNEUgLyogdGV4dGxheW91dCAqLywKIAkJCQk2RjdDQTNDOTIw
OEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTZG
N0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovLAog
CQkJCTExNUNGQTdEMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuY3Bw
ICovLApAQCAtMTk0ODEsNiArMTk0ODQsMTUgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNU
YWJzID0gMDsKIAkJfTsKKwkJNkZFN0REREQyMEVDNkU4QjAwOEI1QjRFIC8qIHRleHRsYXlvdXQg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTZGRTdEREUw
MjBFQzZFQkUwMDhCNUI0RSAvKiBUZXh0UnVuQ29sbGVjdG9yLmNwcCAqLywKKwkJCQk2RkU3RERE
RjIwRUM2RUJFMDA4QjVCNEUgLyogVGV4dFJ1bkNvbGxlY3Rvci5oICovLAorCQkJKTsKKwkJCXBh
dGggPSB0ZXh0bGF5b3V0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNzEw
MjVFQzExRjk5RjA5NjAwNEEyNTBDIC8qIGFuaW1hdGlvbiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0Q29udGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0Q29udGVudC5jcHAKaW5kZXggOGUwY2I3
MjQ1YjQuLjFmZmIwNDU5Yjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0Q29udGVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dENvbnRlbnQuY3BwCkBAIC0yOCw2ICsy
OCw4IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1
ZGUgIlRleHRSdW5Db2xsZWN0b3IuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNl
IExheW91dCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL3RleHRsYXlvdXQvVGV4dExheW91dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9UZXh0TGF5b3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ4ZmEzNDM0ZTIzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9UZXh0TGF5b3V0
LmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgVGV4dFJ1bkNvbGxlY3RvcjsKKworbmFtZXNwYWNl
IFRleHQgeworCitjbGFzcyBSdW4geworcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZSB7Cisg
ICAgICAgIFdoaXRlc3BhY2UsCisgICAgICAgIE5vbldoaXRlc3BhY2UsCisgICAgICAgIFNvZnRM
aW5lQnJlYWssCisgICAgICAgIEhhcmRMaW5lQnJlYWsKKyAgICB9OworCisgICAgUnVuKHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFR5cGUpOworCisgICAgdW5zaWduZWQgc3RhcnQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9lbmQ7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2VuZCAt
IG1fc3RhcnQ7IH0KKyAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
KyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBib29sIGlzV2hp
dGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpXaGl0ZXNwYWNlOyB9Cisg
ICAgYm9vbCBpc05vbldoaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6
Tm9uV2hpdGVzcGFjZTsgfQorICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6U29mdExpbmVCcmVhayB8fCBpc0hhcmRMaW5lQnJlYWsoKTsgfQorICAg
IGJvb2wgaXNIYXJkTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Okhh
cmRMaW5lQnJlYWs7IH0KKyAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbGxhcHNlZDsgfQorICAgIGJvb2wgaXNDb2xsYXBzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNDb2xsYXBzaWJsZTsgfQorICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNIeXBoZW47IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzdGFydCgpID09
IGVuZCgpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUnVuJiBvdGhlcikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExheW91dDo6VGV4dFJ1bkNvbGxlY3RvcjsK
KworICAgIHZvaWQgc2V0SXNDb2xsYXBzYWJsZShib29sIGlzQ29sbGFwc2libGUpIHsgbV9pc0Nv
bGxhcHNpYmxlID0gaXNDb2xsYXBzaWJsZTsgfQorICAgIHZvaWQgc2V0SXNDb2xsYXBzZWQoYm9v
bCBpc0NvbGxhcHNlZCkgeyBtX2lzQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQ7IH0KKyAgICB2b2lk
IHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorCisgICAgdW5zaWdu
ZWQgbV9zdGFydCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2VuZCB7IDAgfTsKKyAgICBmbG9hdCBt
X3dpZHRoIHsgMCB9OworICAgIFR5cGUgbV90eXBlOworICAgIGJvb2wgbV9pc0NvbGxhcHNlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQ29sbGFwc2libGUgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9oYXNIeXBoZW4geyBmYWxzZSB9OworfTsKKworaW5saW5lIFJ1bjo6UnVuKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIFR5cGUgdHlwZSkKKyAgICA6IG1fc3RhcnQoc3RhcnQpCisgICAg
LCBtX2VuZChlbmQpCisgICAgLCBtX3R5cGUodHlwZSkKK3sKK30KKworaW5saW5lIGJvb2wgUnVu
OjpvcGVyYXRvcj09KGNvbnN0IFJ1biYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Rh
cnQgPT0gb3RoZXIubV9zdGFydAorICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZAorICAg
ICAgICAmJiBtX3dpZHRoID09IG90aGVyLm1fd2lkdGgKKyAgICAgICAgJiYgbV90eXBlID09IG90
aGVyLm1fdHlwZQorICAgICAgICAmJiBtX2lzQ29sbGFwc2VkID09IG90aGVyLm1faXNDb2xsYXBz
ZWQKKyAgICAgICAgJiYgbV9pc0NvbGxhcHNpYmxlID09IG90aGVyLm1faXNDb2xsYXBzaWJsZQor
ICAgICAgICAmJiBtX2hhc0h5cGhlbiA9PSBvdGhlci5tX2hhc0h5cGhlbjsKK30KKworfQorfQor
fQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy90ZXh0bGF5b3V0L1RleHRSdW5Db2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9UZXh0UnVuQ29sbGVjdG9yLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmJlMjMxOThiOGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5
b3V0L1RleHRSdW5Db2xsZWN0b3IuY3BwCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRSdW5Db2xsZWN0b3IuaCIKKworI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiQnJlYWtMaW5l
cy5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIK
KyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgTGF5b3V0IHsKKworVmVjdG9yPFRleHQ6OlJ1bj4gVGV4dFJ1bkNvbGxlY3Rvcjo6cnVucyhT
dHJpbmcgdGV4dENvbnRlbnQsIGJvb2wgY2FuVXNlU2ltcGxpZmllZE1lYXN1cmUsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICByZXR1cm4gVGV4dFJ1bkNvbGxlY3Rvcih0ZXh0Q29u
dGVudCwgY2FuVXNlU2ltcGxpZmllZE1lYXN1cmUsIHN0eWxlKS5jb2xsZWN0UnVucygpOworfQor
CitUZXh0UnVuQ29sbGVjdG9yOjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQorICAgIDogZm9udChzdHlsZS5mb250Q2FzY2FkZSgpKQorICAgICwgaGFzS2VybmluZ09yTGln
YXR1cmVzKGZvbnQuZW5hYmxlS2VybmluZygpIHx8IGZvbnQucmVxdWlyZXNTaGFwaW5nKCkpCisg
ICAgLCBjb2xsYXBzZVdoaXRlc3BhY2Uoc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCisgICAg
LCBwcmVzZXJ2ZU5ld2xpbmUoc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpCisgICAgLCBicmVha05C
U1Aoc3R5bGUuYXV0b1dyYXAoKSAmJiBzdHlsZS5uYnNwTW9kZSgpID09IE5CU1BNb2RlOjpTcGFj
ZSkKKyAgICAsIGtlZXBBbGxXb3Jkc0ZvckNKSyhzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJl
YWs6OktlZXBBbGwpCisgICAgLCB3b3JkU3BhY2luZyhmb250LndvcmRTcGFjaW5nKCkpCisgICAg
LCB0YWJXaWR0aChjb2xsYXBzZVdoaXRlc3BhY2UgPyAwIDogc3R5bGUudGFiU2l6ZSgpKQorewor
fQorCitUZXh0UnVuQ29sbGVjdG9yOjpUZXh0UnVuQ29sbGVjdG9yKFN0cmluZyB0ZXh0Q29udGVu
dCwgYm9vbCBjYW5Vc2VTaW1wbGlmaWVkTWVhc3VyZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQorICAgIDogbV90ZXh0Q29udGVudCh0ZXh0Q29udGVudCkKKyAgICAsIG1fY2FuVXNlU2ltcGxp
ZmllZE1lYXN1cmUoY2FuVXNlU2ltcGxpZmllZE1lYXN1cmUpCisgICAgLCBtX3N0eWxlKHN0eWxl
KQorICAgICwgbV9saW5lQnJlYWtJdGVyYXRvcih0ZXh0Q29udGVudCwgc3R5bGUubG9jYWxlKCkp
Cit7Cit9CisKK1ZlY3RvcjxUZXh0OjpSdW4+IFRleHRSdW5Db2xsZWN0b3I6OmNvbGxlY3RSdW5z
KCkKK3sKKyAgICAvLyBBIHJ1biBjYW4gZWl0aGVyIGJlCisgICAgLy8gMS4gd2hpdGVzcGFjZSAo
Y29sbGFzcGVkLCBub24tY29sbGFwc2VkIG11bHRpIG9yIHNpbmdsZSkgb3IKKyAgICAvLyAyLiBu
b24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgorICAgIC8vIDMuIHNvZnQgbGluZSBicmVhaworICAg
IGZsb2F0IHhQb3NpdGlvbiA9IDA7CisgICAgVmVjdG9yPFRleHQ6OlJ1bj4gcnVuczsKKyAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBhdXRvIHJ1biA9IG1vdmVUb05leHRCcmVha2FibGVQb3Np
dGlvbigpOworICAgICAgICBpZiAoIXJ1bikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGlmIChydW4tPnR5cGUoKSA9PSBUZXh0OjpSdW46OlR5cGU6OlNvZnRMaW5lQnJlYWspIHsKKyAg
ICAgICAgICAgIHJ1bnMuYXBwZW5kKCpydW4pOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAocnVuLT50eXBlKCkgPT0gVGV4dDo6UnVuOjpUeXBlOjpXaGl0
ZXNwYWNlKSB7CisgICAgICAgICAgICBhdXRvIG11bHRpcGxlV2hpdGVzcGFjZSA9IHJ1bi0+bGVu
Z3RoKCkgPiAxOworICAgICAgICAgICAgcnVuLT5zZXRJc0NvbGxhcHNlZChtdWx0aXBsZVdoaXRl
c3BhY2UgJiYgbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UpOworICAgICAgICAgICAgcnVuLT5z
ZXRJc0NvbGxhcHNhYmxlKG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gd2lkdGggPSB0ZXh0V2lkdGgocnVuLT5zdGFydCgpLCBydW4tPmVuZCgp
LCB4UG9zaXRpb24pOworICAgICAgICB4UG9zaXRpb24gKz0gd2lkdGg7CisgICAgICAgIHJ1bi0+
c2V0V2lkdGgod2lkdGgpOworICAgICAgICBydW5zLmFwcGVuZCgqcnVuKTsKKyAgICB9CisgICAg
cmV0dXJuIHJ1bnM7Cit9CisKK3N0ZDo6b3B0aW9uYWw8VGV4dDo6UnVuPiBUZXh0UnVuQ29sbGVj
dG9yOjptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oKQoreworICAgIGlmIChtX3Bvc2l0aW9u
ID09IG1fdGV4dENvbnRlbnQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgIGF1dG8gbmV4dE5v
bmVXaGl0ZXNwYWNlUG9zaXRpb24gPSB0aGlzLT5uZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHN0
YXJ0UG9zaXRpb24pOworICAgIGlmIChuZXh0Tm9uZVdoaXRlc3BhY2VQb3NpdGlvbiA+IHN0YXJ0
UG9zaXRpb24pIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG5leHROb25lV2hpdGVzcGFjZVBvc2l0
aW9uOworICAgICAgICByZXR1cm4gVGV4dDo6UnVuIHsgc3RhcnRQb3NpdGlvbiwgbmV4dE5vbmVX
aGl0ZXNwYWNlUG9zaXRpb24sIFRleHQ6OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSB9OworICAgIH0K
KworICAgIGF1dG8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gdGhpcy0+bmV4dEJyZWFrYWJsZVBv
c2l0aW9uKHN0YXJ0UG9zaXRpb24pOworICAgIC8vIG5leHRCcmVha2FibGVQb3NpdGlvbiByZXR1
cm5zIHRoZSBzYW1lIHBvc2l0aW9uIGZvciBjZXJ0YWluIGNoYXJhY3RlcnMgc3VjaCBhcyBoeXBo
ZW5zLiBDYWxsIG5leHQgYWdhaW4gd2l0aCBtb2RpZmllZCBwb3NpdGlvbi4KKyAgICBhdXRvIHNr
aXBDdXJyZW50UG9zaXRpb24gPSBuZXh0QnJlYWthYmxlUG9zaXRpb24gPT0gc3RhcnRQb3NpdGlv
bjsKKyAgICBpZiAoc2tpcEN1cnJlbnRQb3NpdGlvbikKKyAgICAgICAgbmV4dEJyZWFrYWJsZVBv
c2l0aW9uID0gdGhpcy0+bmV4dEJyZWFrYWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24gKyAxKTsK
KyAgICBtX3Bvc2l0aW9uID0gbmV4dEJyZWFrYWJsZVBvc2l0aW9uOworICAgIHJldHVybiBUZXh0
OjpSdW4geyBzdGFydFBvc2l0aW9uLCBuZXh0QnJlYWthYmxlUG9zaXRpb24sIFRleHQ6OlJ1bjo6
VHlwZTo6Tm9uV2hpdGVzcGFjZSB9OworfQorCit1bnNpZ25lZCBUZXh0UnVuQ29sbGVjdG9yOjpu
ZXh0QnJlYWthYmxlUG9zaXRpb24odW5zaWduZWQgc3RhcnRQb3NpdGlvbikKK3sKKyAgICBpZiAo
bV9zdHlsZS5rZWVwQWxsV29yZHNGb3JDSkspIHsKKyAgICAgICAgaWYgKG1fc3R5bGUuYnJlYWtO
QlNQKQorICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxX
b3JkcyhtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJu
IG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3Jkc0lnbm9yaW5nTkJTUChtX2xpbmVC
cmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBpZiAobV9saW5lQnJl
YWtJdGVyYXRvci5tb2RlKCkgPT0gTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KSB7Cisg
ICAgICAgIGlmIChtX3N0eWxlLmJyZWFrTkJTUCkKKyAgICAgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpuZXh0QnJlYWthYmxlUG9zaXRpb24obV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlv
bik7CisgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1AobV9s
aW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgfQorCisgICAgaWYgKG1fc3R5
bGUuYnJlYWtOQlNQKQorICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uV2l0aG91
dFNob3J0Y3V0KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAgIHJldHVy
biBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1BXaXRob3V0U2hvcnRjdXQobV9saW5l
QnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Cit9CisKK3Vuc2lnbmVkIFRleHRSdW5Db2xs
ZWN0b3I6Om5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24odW5zaWduZWQgc3RhcnRQb3NpdGlvbikK
K3sKKyAgICBhdXRvIHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICBmb3IgKDsgcG9zaXRp
b24gPCBtX3RleHRDb250ZW50Lmxlbmd0aCgpOyArK3Bvc2l0aW9uKSB7CisgICAgICAgIGF1dG8g
Y2hhcmFjdGVyID0gbV90ZXh0Q29udGVudFtwb3NpdGlvbl07CisgICAgICAgIGJvb2wgaXNXaGl0
ZXNwYWNlID0gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAoIW1fc3R5
bGUucHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nKTsKKyAgICAgICAgaWYgKCFp
c1doaXRlc3BhY2UpCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisgICAgfQorICAgIHJl
dHVybiBwb3NpdGlvbjsKK30KKworZmxvYXQgVGV4dFJ1bkNvbGxlY3Rvcjo6dGV4dFdpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0Cit7CisgICAg
aWYgKCFtX3N0eWxlLmZvbnQuc2l6ZSgpIHx8IGZyb20gPT0gdG8pCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSkKKyAgICAgICAgcmV0dXJu
IGZpeGVkUGl0Y2hXaWR0aChmcm9tLCB0bywgeFBvc2l0aW9uKTsKKworICAgIGF1dG8gbWVhc3Vy
ZVdpdGhFbmRTcGFjZSA9IG1fc3R5bGUuaGFzS2VybmluZ09yTGlnYXR1cmVzICYmIG1fc3R5bGUu
Y29sbGFwc2VXaGl0ZXNwYWNlICYmIHRvIDwgbV90ZXh0Q29udGVudC5sZW5ndGgoKSAmJiBtX3Rl
eHRDb250ZW50W3RvXSA9PSAnICc7CisgICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCisgICAg
ICAgICsrdG87CisgICAgZmxvYXQgd2lkdGggPSAwOworICAgIGlmIChtX2NhblVzZVNpbXBsaWZp
ZWRNZWFzdXJlKQorICAgICAgICB3aWR0aCA9IG1fc3R5bGUuZm9udC53aWR0aEZvclNpbXBsZVRl
eHQoU3RyaW5nVmlldyhtX3RleHRDb250ZW50KS5zdWJzdHJpbmcoZnJvbSwgdG8gLSBmcm9tKSk7
CisgICAgZWxzZSAgeworICAgICAgICBUZXh0UnVuIHJ1bihTdHJpbmdWaWV3KG1fdGV4dENvbnRl
bnQpLnN1YnN0cmluZyhmcm9tLCB0byAtIGZyb20pLCB4UG9zaXRpb24pOworICAgICAgICBpZiAo
bV9zdHlsZS50YWJXaWR0aCkKKyAgICAgICAgICAgIHJ1bi5zZXRUYWJTaXplKHRydWUsIG1fc3R5
bGUudGFiV2lkdGgpOworICAgICAgICB3aWR0aCA9IG1fc3R5bGUuZm9udC53aWR0aChydW4pOwor
ICAgIH0KKyAgICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkKKyAgICAgICAgd2lkdGggLT0gKG1f
c3R5bGUuZm9udC5zcGFjZVdpZHRoKCkgKyBtX3N0eWxlLndvcmRTcGFjaW5nKTsKKyAgICByZXR1
cm4gc3RkOjptYXg8ZmxvYXQ+KDAsIHdpZHRoKTsKK30KKworZmxvYXQgVGV4dFJ1bkNvbGxlY3Rv
cjo6Zml4ZWRQaXRjaFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9z
aXRpb24pIGNvbnN0Cit7CisgICAgYXV0byBtb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCA9IG1fc3R5
bGUuZm9udC5zcGFjZVdpZHRoKCk7CisgICAgZmxvYXQgd2lkdGggPSAwOworICAgIGZvciAoYXV0
byBpID0gZnJvbTsgaSA8IHRvOyArK2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX3Rl
eHRDb250ZW50W2ldOworICAgICAgICBpZiAoY2hhcmFjdGVyID49ICcgJyB8fCBjaGFyYWN0ZXIg
PT0gJ1xuJykKKyAgICAgICAgICAgIHdpZHRoICs9IG1vbm9zcGFjZUNoYXJhY3RlcldpZHRoOwor
ICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJ1x0JykKKyAgICAgICAgICAgIHdpZHRoICs9
IG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlID8gbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGggOiBt
X3N0eWxlLmZvbnQudGFiV2lkdGgobV9zdHlsZS50YWJXaWR0aCwgeFBvc2l0aW9uICsgd2lkdGgp
OyAKKworICAgICAgICBpZiAoaSA+IGZyb20gJiYgKGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFj
dGVyID09ICdcdCcgfHwgY2hhcmFjdGVyID09ICdcbicpKQorICAgICAgICAgICAgd2lkdGggKz0g
bV9zdHlsZS5mb250LndvcmRTcGFjaW5nKCk7CisgICAgfQorICAgIHJldHVybiB3aWR0aDsKK30K
KworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0bGF5b3V0L1RleHRSdW5Db2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvVGV4dFJ1bkNvbGxlY3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZDFlYWY2ZWJhMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRs
YXlvdXQvVGV4dFJ1bkNvbGxlY3Rvci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisj
aW5jbHVkZSAiVGV4dExheW91dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRCcmVha0l0ZXJh
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU3R5bGU7CitjbGFz
cyBGb250Q2FzY2FkZTsKKworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIFRleHRSdW5Db2xs
ZWN0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBWZWN0b3I8VGV4dDo6UnVuPiBydW5zKFN0cmlu
ZywgYm9vbCBjYW5Vc2VTaW1wbGlmaWVkTWVhc3VyZSwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKwor
cHJpdmF0ZToKKyAgICBzdHJ1Y3QgU3R5bGUgeworICAgICAgICBleHBsaWNpdCBTdHlsZShjb25z
dCBSZW5kZXJTdHlsZSYpOworCisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250OworICAg
ICAgICBib29sIGhhc0tlcm5pbmdPckxpZ2F0dXJlcyB7IGZhbHNlIH07CisgICAgICAgIGJvb2wg
Y29sbGFwc2VXaGl0ZXNwYWNlIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xp
bmUgeyBmYWxzZSB9OworICAgICAgICBib29sIGJyZWFrTkJTUCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wga2VlcEFsbFdvcmRzRm9yQ0pLIHsgZmFsc2UgfTsKKyAgICAgICAgZmxvYXQgd29yZFNw
YWNpbmcgeyAwIH07CisgICAgICAgIHVuc2lnbmVkIHRhYldpZHRoIHsgMCB9OworICAgIH07CisK
KyAgICBUZXh0UnVuQ29sbGVjdG9yKFN0cmluZyB0ZXh0Q29udGVudCwgYm9vbCBjYW5Vc2VTaW1w
bGlmaWVkTWVhc3VyZSwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKworICAgIFZlY3RvcjxUZXh0OjpS
dW4+IGNvbGxlY3RSdW5zKCk7CisgICAgc3RkOjpvcHRpb25hbDxUZXh0OjpSdW4+IG1vdmVUb05l
eHRCcmVha2FibGVQb3NpdGlvbigpOworCisgICAgdW5zaWduZWQgbmV4dEJyZWFrYWJsZVBvc2l0
aW9uKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pOworICAgIHVuc2lnbmVkIG5leHROb25XaGl0ZXNw
YWNlUG9zaXRpb24odW5zaWduZWQgc3RhcnRQb3NpdGlvbik7CisgICAgZmxvYXQgdGV4dFdpZHRo
KHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OworICAg
IGZsb2F0IGZpeGVkUGl0Y2hXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQg
eFBvc2l0aW9uKSBjb25zdDsKKworICAgIGNvbnN0IFN0cmluZyBtX3RleHRDb250ZW50OworICAg
IGJvb2wgbV9jYW5Vc2VTaW1wbGlmaWVkTWVhc3VyZSB7IGZhbHNlIH07CisgICAgY29uc3QgU3R5
bGUgbV9zdHlsZTsKKyAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIHsgMCB9OworICAgIExhenlMaW5l
QnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOworfTsKKworfQorfQorI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>