<?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>24163</bug_id>
          
          <creation_ts>2009-02-25 10:22:29 -0800</creation_ts>
          <short_desc>Fix rect and quad mapping RenderObject methods to map through 3d transforms</short_desc>
          <delta_ts>2009-03-09 11:06:49 -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>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>23283</blocked>
    
    <blocked>23359</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarrin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>110981</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-25 10:22:29 -0800</bug_when>
    <thetext>The various methods that map rects and quads between absolute and local coords needs to map through 3d transforms just like localToAbsolute()/absoluteToLocal().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112699</commentid>
    <comment_count>1</comment_count>
      <attachid>28384</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-06 22:59:52 -0800</bug_when>
    <thetext>Created attachment 28384
Patch, changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112700</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-06 23:00:34 -0800</bug_when>
    <thetext>I think the TransformState in this patch could also be used as-is for hit testing now, eliminating the need for HitTestingTransformState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112701</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-06 23:04:26 -0800</bug_when>
    <thetext>This patch also fixes bug 23283.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112838</commentid>
    <comment_count>4</comment_count>
      <attachid>28384</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-03-09 09:51:20 -0700</bug_when>
    <thetext>Comment on attachment 28384
Patch, changelog

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112864</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-09 11:06:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/41531</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28384</attachid>
            <date>2009-03-06 22:59:52 -0800</date>
            <delta_ts>2009-03-09 09:51:20 -0700</delta_ts>
            <desc>Patch, changelog</desc>
            <filename>24163_patch.txt</filename>
            <type>text/plain</type>
            <size>30435</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGM0MTA5YS4uN2E3NzQ0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0wMy0wNiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQxNjMKKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudCBtYXBwaW5nIG9mIEZsb2F0UXVh
ZHMgdGhyb3VnaCAzRCB0cmFuc2Zvcm1zLgorICAgICAgICAKKyAgICAgICAgUmVtb3ZlZCB0aGUg
cmVkdW5kYW50IGxvY2FsVG9Db250YWluZXJRdWFkKCkgbWV0aG9kcywgd2hpY2ggY2FuIG5vdyAK
KyAgICAgICAgc2hhcmVkIGNvZGUgd2l0aCB0aGUgb2xkIG1hcExvY2FsVG9BYnNvbHV0ZVBvaW50
KCksIHdoaWNoIHdhcworICAgICAgICByZW5hbWVkIHRvIG1hcExvY2FsVG9Db250YWluZXIoKS4g
VGhpcyBjYW4gbm93IGNvbnZlcnQgYSBwb2ludCwKKyAgICAgICAgYW5kIG9wdGlvbmFsbHkgYSBG
bG9hdFF1YWQsIHdoaWNoIGFyZSBjYXJyaWVkIGFsb25nIGluIHRoZSBUcmFuc2Zvcm1TdGF0ZS4K
KyAgICAgICAgCisgICAgICAgIE9wdGltaXplZCBUcmFuc2Zvcm1TdGF0ZSB0byByZWR1Y2UgdG8g
c2ltcGxlIEZsb2F0UG9pbnQubW92ZSgpCisgICAgICAgIGlmIHRoZXJlIGFyZSBubyB0cmFuc2Zv
cm1zLCBhbmQgdG8gaGVhcC1hbGxvY2F0ZSBhIHRyYW5zZm9ybSBvbmx5IGlmCisgICAgICAgIG5l
Y2Vzc2FyeSB0byBhY2N1bXVsYXRlIHRyYW5zZm9ybXMgKHdoZW4gdXNpbmcgcHJlc2VydmUtM2Qp
LgorICAgICAgICAKKyAgICAgICAgVGVzdGVkIGJ5IDNkIHBvaW50IG1hcHBpbmcgdGVzdHMsIGFu
ZCB0aGUgaW5zcGVjdG9yIGhpZ2hsaWdodCAod2hpY2ggbm93IHNob3dzCisgICAgICAgIHRoZSBj
b3JyZWN0IHF1YWRzIGZvciAzZC10cmFuc2Zvcm1lZCBlbGVtZW50cykuCisgICAgICAgIAorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGVSaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlUmln
aHQzZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFpbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUb0xvY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxvY2FsVG9Db250YWluZXJRdWFkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6Om1hcExvY2FsVG9D
b250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjptYXBMb2NhbFRvQ29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmll
dy5oOgorICAgICAgICAqIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUcmFuc2Zvcm1TdGF0ZTo6bW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zv
cm1TdGF0ZTo6YXBwbHlUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtU3Rh
dGU6OmZsYXR0ZW4pOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtU3RhdGU6Om1hcHBlZFBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybVN0YXRlOjptYXBwZWRRdWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybVN0YXRlOjpmbGF0dGVuV2l0aFRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6Om1hcHBlZFF1YWQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6
VHJhbnNmb3JtU3RhdGU6OlRyYW5zZm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
Zm9ybVN0YXRlOjptb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybVN0YXRlOjpsYXN0
UGxhbmFyUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtU3RhdGU6Omxhc3RQbGFu
YXJRdWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpwcmVzZXJ2ZXMzRCk6CisKIDIwMDktMDMtMDYg
IFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCmluZGV4IDYxMGY1OGEu
LjViNjk0ZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcApAQCAtNTQ0LDYgKzU0NCwxNiBA
QCBGbG9hdFBvaW50IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkgY29uc3QKICAgICByZXR1cm4gRmxvYXRQb2ludChzdGF0aWNfY2FzdDxmbG9h
dD4ob3V0WCksIHN0YXRpY19jYXN0PGZsb2F0PihvdXRZKSk7CiB9CiAKK0Zsb2F0UXVhZCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6cHJvamVjdFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxKSBjb25zdAor
eworICAgIEZsb2F0UXVhZCBwcm9qZWN0ZWRRdWFkOworICAgIHByb2plY3RlZFF1YWQuc2V0UDEo
cHJvamVjdFBvaW50KHEucDEoKSkpOworICAgIHByb2plY3RlZFF1YWQuc2V0UDIocHJvamVjdFBv
aW50KHEucDIoKSkpOworICAgIHByb2plY3RlZFF1YWQuc2V0UDMocHJvamVjdFBvaW50KHEucDMo
KSkpOworICAgIHByb2plY3RlZFF1YWQuc2V0UDQocHJvamVjdFBvaW50KHEucDQoKSkpOworICAg
IHJldHVybiBwcm9qZWN0ZWRRdWFkOworfQorCiBGbG9hdFBvaW50IFRyYW5zZm9ybWF0aW9uTWF0
cml4OjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAogewogICAgIGRvdWJsZSB4
LCB5OwpAQCAtNzkyLDcgKzgwMiw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6dHJhbnNsYXRlM2QoZG91YmxlIHR4LCBkb3VibGUgdHksIGRvCiAgICAgcmV0
dXJuICp0aGlzOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRy
aXg6OnRyYW5zbGF0ZVJpZ2h0M2QoZG91YmxlIHR4LCBkb3VibGUgdHksIGRvdWJsZSB0eikKK1Ry
YW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlUmlnaHQo
ZG91YmxlIHR4LCBkb3VibGUgdHkpCiB7CiAgICAgaWYgKHR4ICE9IDApIHsKICAgICAgICAgbV9t
YXRyaXhbMF1bMF0gKz0gIG1fbWF0cml4WzBdWzNdICogdHg7CkBAIC04MDgsNiArODE4LDEyIEBA
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlUmln
aHQzZChkb3VibGUgdHgsIGRvdWJsZSB0CiAgICAgICAgIG1fbWF0cml4WzNdWzFdICs9ICBtX21h
dHJpeFszXVszXSAqIHR5OwogICAgIH0KIAorICAgIHJldHVybiAqdGhpczsKK30KKworVHJhbnNm
b3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGVSaWdodDNkKGRv
dWJsZSB0eCwgZG91YmxlIHR5LCBkb3VibGUgdHopCit7CisgICAgdHJhbnNsYXRlUmlnaHQodHgs
IHR5KTsKICAgICBpZiAodHogIT0gMCkgewogICAgICAgICBtX21hdHJpeFswXVsyXSArPSAgbV9t
YXRyaXhbMF1bM10gKiB0ejsKICAgICAgICAgbV9tYXRyaXhbMV1bMl0gKz0gIG1fbWF0cml4WzFd
WzNdICogdHo7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCmluZGV4IDlkMGMyY2UuLjI5MzE2OGQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oCkBAIC0xMzQsNiArMTM0LDggQEAgcHVibGljOgogICAgIC8v
IHRoZSBsb2NhbCB4LHkgcG9zaXRpb24gb2YgdGhlIHBvaW50IHdoZXJlIHRoYXQgcmF5IGludGVy
c2VjdHMKICAgICAvLyB3aXRoIHRoZSBkZXN0aW5hdGlvbiBwbGFuZS4KICAgICBGbG9hdFBvaW50
IHByb2plY3RQb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgLy8gUHJvamVjdHMg
dGhlIGZvdXIgY29ybmVycyBvZiB0aGUgcXVhZAorICAgIEZsb2F0UXVhZCBwcm9qZWN0UXVhZChj
b25zdCBGbG9hdFF1YWQmKSBjb25zdDsKIAogICAgIGRvdWJsZSBtMTEoKSBjb25zdCB7IHJldHVy
biBtX21hdHJpeFswXVswXTsgfQogICAgIHZvaWQgc2V0TTExKGRvdWJsZSBmKSB7IG1fbWF0cml4
WzBdWzBdID0gZjsgfQpAQCAtMjA4LDYgKzIxMCw3IEBAIHB1YmxpYzoKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNsYXRlM2QoZG91YmxlIHR4LCBkb3VibGUgdHksIGRvdWJsZSB0eik7
CiAKICAgICAvLyB0cmFuc2xhdGlvbiBhZGRlZCB3aXRoIGEgcG9zdC1tdWx0aXBseQorICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2xhdGVSaWdodChkb3VibGUgdHgsIGRvdWJsZSB0eSk7
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zbGF0ZVJpZ2h0M2QoZG91YmxlIHR4LCBk
b3VibGUgdHksIGRvdWJsZSB0eik7CiAgICAgCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZs
aXBYKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA3MTA4MWFkLi5lYjJkMzBlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTkzMiw4ICs5MzIsMTEgQEAgaW50IFJlbmRlckJveDo6
Y29udGFpbmluZ0Jsb2NrV2lkdGhGb3JDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gY2ItPmF2
YWlsYWJsZVdpZHRoKCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjptYXBMb2NhbFRvQWJzb2x1dGVQ
b2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFu
c2Zvcm1TdGF0ZSkgY29uc3QKK3ZvaWQgUmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFpbmVyKFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkLCBib29sIHVz
ZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKIHsKKyAg
ICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0aGlzKQorICAgICAgICByZXR1cm47CisKICAgICBp
ZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkgewogICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVF
bmFibGVkKCkpIHsKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHYtPmxh
eW91dFN0YXRlKCk7CkBAIC05NTAsMjEgKzk1MywyMiBAQCB2b2lkIFJlbmRlckJveDo6bWFwTG9j
YWxUb0Fic29sdXRlUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zv
cgogICAgICAgICBmaXhlZCA9IHRydWU7CiAKICAgICBSZW5kZXJPYmplY3QqIG8gPSBjb250YWlu
ZXIoKTsKLSAgICBpZiAobykgeworICAgIGlmICghbykKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnRyYW5zZm9ybSgpKQotICAgICAgICAgICAg
Zml4ZWQgPSBmYWxzZTsgIC8vIEVsZW1lbnRzIHdpdGggdHJhbnNmb3JtcyBhY3QgYXMgYSBjb250
YWluaW5nIGJsb2NrIGZvciBmaXhlZCBwb3NpdGlvbiBkZXNjZW5kYW50cworICAgIGJvb2wgaGFz
VHJhbnNmb3JtID0gaGFzTGF5ZXIoKSAmJiBsYXllcigpLT50cmFuc2Zvcm0oKTsKKyAgICBpZiAo
aGFzVHJhbnNmb3JtKQorICAgICAgICBmaXhlZCA9IGZhbHNlOyAgLy8gRWxlbWVudHMgd2l0aCB0
cmFuc2Zvcm1zIGFjdCBhcyBhIGNvbnRhaW5pbmcgYmxvY2sgZm9yIGZpeGVkIHBvc2l0aW9uIGRl
c2NlbmRhbnRzCiAKLSAgICAgICAgSW50U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9t
Q29udGFpbmVyKG8pOwotICAgICAgICBpZiAodXNlVHJhbnNmb3JtcykgewotICAgICAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggY29udGFpbmVyVHJhbnNmb3JtID0gdHJhbnNmb3JtRnJvbUNv
bnRhaW5lcihvLCBjb250YWluZXJPZmZzZXQpOwotICAgICAgICAgICAgYm9vbCBhY2N1bXVsYXRl
VHJhbnNmb3JtID0gKG8tPnN0eWxlKCktPnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1T
dHlsZTNEUHJlc2VydmUzRCB8fCBzdHlsZSgpLT50cmFuc2Zvcm1TdHlsZTNEKCkgPT0gVHJhbnNm
b3JtU3R5bGUzRFByZXNlcnZlM0QpOwotICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlU
cmFuc2Zvcm0oY29udGFpbmVyVHJhbnNmb3JtLCBhY2N1bXVsYXRlVHJhbnNmb3JtKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9mZnNl
dC53aWR0aCgpLCBjb250YWluZXJPZmZzZXQuaGVpZ2h0KCkpOworICAgIEludFNpemUgY29udGFp
bmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvKTsKIAotICAgICAgICBvLT5tYXBMb2Nh
bFRvQWJzb2x1dGVQb2ludChmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwot
ICAgIH0KKyAgICBib29sIHByZXNlcnZlM0QgPSB1c2VUcmFuc2Zvcm1zICYmIChvLT5zdHlsZSgp
LT5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxlKCktPnByZXNlcnZlczNEKCkpOworICAgIGlmICh1c2VU
cmFuc2Zvcm1zICYmIGhhc1RyYW5zZm9ybSkKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlU
cmFuc2Zvcm0odHJhbnNmb3JtRnJvbUNvbnRhaW5lcihvLCBjb250YWluZXJPZmZzZXQpLCBwcmVz
ZXJ2ZTNEKTsKKyAgICBlbHNlCisgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoY29udGFpbmVy
T2Zmc2V0LndpZHRoKCksIGNvbnRhaW5lck9mZnNldC5oZWlnaHQoKSwgcHJlc2VydmUzRCk7CisK
KyAgICBvLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VU
cmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjptYXBBYnNv
bHV0ZVRvTG9jYWxQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9y
bVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKQEAgLTk3NSw0MyArOTc5LDIzIEBAIHZvaWQg
UmVuZGVyQm94OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRy
YW5zZm9ybXMsIFRyYW5zZm9yCiAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQ
b3NpdGlvbikKICAgICAgICAgZml4ZWQgPSB0cnVlOwogCi0gICAgaWYgKHVzZVRyYW5zZm9ybXMg
JiYgbGF5ZXIoKSAmJiBsYXllcigpLT50cmFuc2Zvcm0oKSkKLSAgICAgICAgZml4ZWQgPSBmYWxz
ZTsKKyAgICBib29sIGhhc1RyYW5zZm9ybSA9IGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+dHJhbnNm
b3JtKCk7CisgICAgaWYgKGhhc1RyYW5zZm9ybSkKKyAgICAgICAgZml4ZWQgPSBmYWxzZTsgIC8v
IEVsZW1lbnRzIHdpdGggdHJhbnNmb3JtcyBhY3QgYXMgYSBjb250YWluaW5nIGJsb2NrIGZvciBm
aXhlZCBwb3NpdGlvbiBkZXNjZW5kYW50cwogICAgIAogICAgIFJlbmRlck9iamVjdCogbyA9IGNv
bnRhaW5lcigpOwotICAgIGlmIChvKSB7Ci0gICAgICAgIG8tPm1hcEFic29sdXRlVG9Mb2NhbFBv
aW50KGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Ci0KLSAgICAgICAgSW50
U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKG8pOwotICAgICAgICBp
ZiAodXNlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29u
dGFpbmVyVHJhbnNmb3JtID0gdHJhbnNmb3JtRnJvbUNvbnRhaW5lcihvLCBjb250YWluZXJPZmZz
ZXQpOwotICAgICAgICAgICAgYm9vbCBhY2N1bXVsYXRlVHJhbnNmb3JtID0gKG8tPnN0eWxlKCkt
PnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1TdHlsZTNEUHJlc2VydmUzRCB8fCBzdHls
ZSgpLT50cmFuc2Zvcm1TdHlsZTNEKCkgPT0gVHJhbnNmb3JtU3R5bGUzRFByZXNlcnZlM0QpOwot
ICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zvcm0oY29udGFpbmVyVHJhbnNm
b3JtLCBhY2N1bXVsYXRlVHJhbnNmb3JtKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0
cmFuc2Zvcm1TdGF0ZS5tb3ZlKC1jb250YWluZXJPZmZzZXQud2lkdGgoKSwgLWNvbnRhaW5lck9m
ZnNldC5oZWlnaHQoKSk7Ci0gICAgfQotfQorICAgIGlmICghbykKKyAgICAgICAgcmV0dXJuOwog
Ci1GbG9hdFF1YWQgUmVuZGVyQm94Ojpsb2NhbFRvQ29udGFpbmVyUXVhZChjb25zdCBGbG9hdFF1
YWQmIGxvY2FsUXVhZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJv
b2wgZml4ZWQpIGNvbnN0Ci17Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIgPT0gdGhpcykKLSAg
ICAgICAgcmV0dXJuIGxvY2FsUXVhZDsKKyAgICBvLT5tYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChm
aXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwogCi0gICAgaWYgKHN0eWxlKCkt
PnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikKLSAgICAgICAgZml4ZWQgPSB0cnVlOworICAg
IEludFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvKTsKIAotICAg
IFJlbmRlck9iamVjdCogbyA9IGNvbnRhaW5lcigpOwotICAgIGlmIChvKSB7Ci0gICAgICAgIEZs
b2F0UXVhZCBxdWFkID0gbG9jYWxRdWFkOwotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigp
LT50cmFuc2Zvcm0oKSkgewotICAgICAgICAgICAgZml4ZWQgPSBmYWxzZTsgIC8vIEVsZW1lbnRz
IHdpdGggdHJhbnNmb3JtcyBhY3QgYXMgYSBjb250YWluaW5nIGJsb2NrIGZvciBmaXhlZCBwb3Np
dGlvbiBkZXNjZW5kYW50cwotICAgICAgICAgICAgcXVhZCA9IGxheWVyKCktPnRyYW5zZm9ybSgp
LT5tYXBRdWFkKHF1YWQpOwotICAgICAgICB9Ci0gICAgICAgIHF1YWQgKz0gb2Zmc2V0RnJvbUNv
bnRhaW5lcihvKTsKLSAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9Db250YWluZXJRdWFkKHF1YWQs
IHJlcGFpbnRDb250YWluZXIsIGZpeGVkKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEZsb2F0
UXVhZCgpOworICAgIGJvb2wgcHJlc2VydmUzRCA9IHVzZVRyYW5zZm9ybXMgJiYgKG8tPnN0eWxl
KCktPnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS0+cHJlc2VydmVzM0QoKSk7CisgICAgaWYgKHVz
ZVRyYW5zZm9ybXMgJiYgaGFzVHJhbnNmb3JtKQorICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBs
eVRyYW5zZm9ybSh0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKG8sIGNvbnRhaW5lck9mZnNldCksIHBy
ZXNlcnZlM0QpOworICAgIGVsc2UKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZSgtY29udGFp
bmVyT2Zmc2V0LndpZHRoKCksIC1jb250YWluZXJPZmZzZXQuaGVpZ2h0KCksIHByZXNlcnZlM0Qp
OwogfQogCiBJbnRTaXplIFJlbmRlckJveDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmpl
Y3QqIG8pIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IGNkYTk0NzcuLjVmZDk1OTQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCkBAIC0xMzgsOCArMTM4LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5LCBi
b29sIHRvcExldmVsID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAgICAgCi0gICAgdmlydHVh
bCBGbG9hdFF1YWQgbG9jYWxUb0NvbnRhaW5lclF1YWQoY29uc3QgRmxvYXRRdWFkJiwgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29u
c3Q7Ci0KICAgICBJbnRSZWN0IHJlZmxlY3Rpb25Cb3goKSBjb25zdDsKICAgICBpbnQgcmVmbGVj
dGlvbk9mZnNldCgpIGNvbnN0OwogICAgIC8vIEdpdmVuIGEgcmVjdCBpbiB0aGUgb2JqZWN0J3Mg
Y29vcmRpbmF0ZSBzcGFjZSwgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZWN0IGluIHRoZSBy
ZWZsZWN0aW9uLgpAQCAtMzAzLDcgKzMwMSw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkQ2FsY3VsYXRlU2l6ZUFzUmVwbGFjZWQoKSBjb25zdCB7IHJldHVybiBp
c1JlcGxhY2VkKCkgJiYgIWlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCk7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBtYXBMb2NhbFRvQWJzb2x1dGVQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRy
YW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIG1hcExv
Y2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJv
b2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCB1
c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggY2U5MWY3ZS4uNGM0ZGM2ZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xNjM3LDM5ICsxNjM3LDM1IEBAIEludFJlY3QgUmVuZGVy
T2JqZWN0Ojp2aWV3UmVjdCgpIGNvbnN0CiAKIEZsb2F0UG9pbnQgUmVuZGVyT2JqZWN0Ojpsb2Nh
bFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50LCBib29sIGZpeGVkLCBib29sIHVzZVRy
YW5zZm9ybXMpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUobG9j
YWxQb2ludCwgVHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uKTsKLSAgICBt
YXBMb2NhbFRvQWJzb2x1dGVQb2ludChmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3Rh
dGUpOwotCi0gICAgaWYgKHRyYW5zZm9ybVN0YXRlLm1fYWNjdW11bGF0aW5nVHJhbnNmb3JtKSB7
Ci0gICAgICAgIC8vIERvIGEgZmluYWwgZmxhdHRlbiBpZiBuZWNlc3NhcnkKLSAgICAgICAgdHJh
bnNmb3JtU3RhdGUuZmxhdHRlbigpOwotICAgIH0KKyAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zv
cm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24sIGxvY2FsUG9p
bnQpOworICAgIG1hcExvY2FsVG9Db250YWluZXIoMCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRy
YW5zZm9ybVN0YXRlKTsKKyAgICB0cmFuc2Zvcm1TdGF0ZS5mbGF0dGVuKCk7CiAgICAgCi0gICAg
cmV0dXJuIHRyYW5zZm9ybVN0YXRlLm1fbGFzdFBsYW5hclBvaW50OworICAgIHJldHVybiB0cmFu
c2Zvcm1TdGF0ZS5sYXN0UGxhbmFyUG9pbnQoKTsKIH0KIAogRmxvYXRQb2ludCBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVk
LCBib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNm
b3JtU3RhdGUoY29udGFpbmVyUG9pbnQsIFRyYW5zZm9ybVN0YXRlOjpVbmFwcGx5SW52ZXJzZVRy
YW5zZm9ybURpcmVjdGlvbik7CisgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJh
bnNmb3JtU3RhdGU6OlVuYXBwbHlJbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uLCBjb250YWluZXJQ
b2ludCk7CiAgICAgbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoZml4ZWQsIHVzZVRyYW5zZm9ybXMs
IHRyYW5zZm9ybVN0YXRlKTsKKyAgICB0cmFuc2Zvcm1TdGF0ZS5mbGF0dGVuKCk7CiAgICAgCi0g
ICAgaWYgKHRyYW5zZm9ybVN0YXRlLm1fYWNjdW11bGF0aW5nVHJhbnNmb3JtKSB7Ci0gICAgICAg
IC8vIERvIGEgZmluYWwgZmxhdHRlbiBpZiBuZWNlc3NhcnkKLSAgICAgICAgdHJhbnNmb3JtU3Rh
dGUuZmxhdHRlbigpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJhbnNmb3JtU3RhdGUubV9s
YXN0UGxhbmFyUG9pbnQ7CisgICAgcmV0dXJuIHRyYW5zZm9ybVN0YXRlLmxhc3RQbGFuYXJQb2lu
dCgpOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6bWFwTG9jYWxUb0Fic29sdXRlUG9pbnQoYm9v
bCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3Rh
dGUpIGNvbnN0Cit2b2lkIFJlbmRlck9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFu
c2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CiB7CisgICAgaWYg
KHJlcGFpbnRDb250YWluZXIgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuOworCiAgICAgUmVuZGVy
T2JqZWN0KiBvID0gcGFyZW50KCk7Ci0gICAgaWYgKG8pIHsKLSAgICAgICAgaWYgKG8tPmhhc092
ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZSgtdG9SZW5kZXJC
b3gobyktPmxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKKyAgICBpZiAoIW8pCisg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBvLT5tYXBMb2NhbFRvQWJzb2x1dGVQb2ludChmaXhl
ZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwotICAgIH0KKyAgICBpZiAoby0+aGFz
T3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoLXRvUmVuZGVyQm94
KG8pLT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSk7CisKKyAgICBvLT5tYXBMb2Nh
bFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFu
c2Zvcm1TdGF0ZSk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjptYXBBYnNvbHV0ZVRvTG9jYWxQ
b2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFu
c2Zvcm1TdGF0ZSkgY29uc3QKQEAgLTE3MDgsMTggKzE3MDQsMTEgQEAgVHJhbnNmb3JtYXRpb25N
YXRyaXggUmVuZGVyT2JqZWN0Ojp0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJlbmRlck9i
amVjdCogY28KIAogRmxvYXRRdWFkIFJlbmRlck9iamVjdDo6bG9jYWxUb0NvbnRhaW5lclF1YWQo
Y29uc3QgRmxvYXRRdWFkJiBsb2NhbFF1YWQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIGZpeGVkKSBjb25zdAogewotICAgIGlmIChyZXBhaW50Q29udGFpbmVy
ID09IHRoaXMpCi0gICAgICAgIHJldHVybiBsb2NhbFF1YWQ7Ci0KLSAgICBSZW5kZXJPYmplY3Qq
IG8gPSBwYXJlbnQoKTsKLSAgICBpZiAobykgewotICAgICAgICBGbG9hdFF1YWQgcXVhZCA9IGxv
Y2FsUXVhZDsKLSAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAg
cXVhZCAtPSB0b1JlbmRlckJveChvKS0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7
Ci0gICAgICAgIHJldHVybiBvLT5sb2NhbFRvQ29udGFpbmVyUXVhZChxdWFkLCByZXBhaW50Q29u
dGFpbmVyLCBmaXhlZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEZsb2F0UXVhZCgpOworICAgIFRy
YW5zZm9ybVN0YXRlIHRyYW5zZm9ybVN0YXRlKFRyYW5zZm9ybVN0YXRlOjpBcHBseVRyYW5zZm9y
bURpcmVjdGlvbiwgRmxvYXRQb2ludCgpLCAmbG9jYWxRdWFkKTsKKyAgICBtYXBMb2NhbFRvQ29u
dGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB0cnVlLCB0cmFuc2Zvcm1TdGF0ZSk7Cisg
ICAgdHJhbnNmb3JtU3RhdGUuZmxhdHRlbigpOworICAgIAorICAgIHJldHVybiB0cmFuc2Zvcm1T
dGF0ZS5sYXN0UGxhbmFyUXVhZCgpOwogfQogCiBJbnRTaXplIFJlbmRlck9iamVjdDo6b2Zmc2V0
RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqIG8pIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCmluZGV4IDJkNTRiMDQuLjU5N2NlOGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBA
IC00ODcsNyArNDg3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbG9jYWxUb0NvbnRhaW5l
clF1YWQocXVhZCwgMCwgZml4ZWQpOwogICAgIH0KICAgICAvLyBDb252ZXJ0IGEgbG9jYWwgcXVh
ZCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiBjb250YWluZXIsIHRha2luZyB0cmFuc2Zv
cm1zIGludG8gYWNjb3VudC4KLSAgICB2aXJ0dWFsIEZsb2F0UXVhZCBsb2NhbFRvQ29udGFpbmVy
UXVhZChjb25zdCBGbG9hdFF1YWQmLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKKyAgICBGbG9hdFF1YWQgbG9jYWxUb0Nv
bnRhaW5lclF1YWQoY29uc3QgRmxvYXRRdWFkJiwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm4g
dGhlIG9mZnNldCBmcm9tIHRoZSBjb250YWluZXIoKSByZW5kZXJlciAoZXhjbHVkaW5nIHRyYW5z
Zm9ybXMpCiAgICAgdmlydHVhbCBJbnRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CkBAIC02NzMsMTEgKzY3MywxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIHZp
c2libGVUb0hpdFRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSAmJiBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkgIT0gUEVfTk9ORTsgfQogCi0g
ICAgLy8gTWFwIHBvaW50cyB0aHJvdWdoIGVsZW1lbnRzLCBwb3RlbnRpYWxseSB2aWEgM2QgdHJh
bnNmb3Jtcy4gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIGNhbGwgdGhlc2UgZGlyZWN0bHk7IHVz
ZQotICAgIC8vIGxvY2FsVG9BYnNvbHV0ZS9hYnNvbHV0ZVRvTG9jYWwgaW5zdGVhZC4KLSAgICB2
aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0Fic29sdXRlUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCB1c2VU
cmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OworICAgIC8vIE1hcCBwb2ludHMgYW5k
IHF1YWRzIHRocm91Z2ggZWxlbWVudHMsIHBvdGVudGlhbGx5IHZpYSAzZCB0cmFuc2Zvcm1zLiBZ
b3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gY2FsbCB0aGVzZSBkaXJlY3RseTsgdXNlCisgICAgLy8g
bG9jYWxUb0Fic29sdXRlL2Fic29sdXRlVG9Mb2NhbCBtZXRob2RzIGluc3RlYWQuCisgICAgdmly
dHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3Rh
dGUmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoYm9v
bCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwotICAg
IAorCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb25z
dCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0SW5Db250YWlu
ZXIpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFw
aGljc0NvbnRleHQqLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKSB7IH07CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCA0MTc1MzQ3Li5kODUzMjk5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTIxNywxNSArMjE3LDE4IEBAIHZvaWQgUmVuZGVy
VGFibGVDZWxsOjpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluCiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBh
aW50Q29udGFpbmVyLCByLCBmaXhlZCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjptYXBM
b2NhbFRvQWJzb2x1dGVQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5z
Zm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpt
YXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zv
cm1TdGF0ZSkgY29uc3QKIHsKKyAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0aGlzKQorICAg
ICAgICByZXR1cm47CisKICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwogICAgIGlmICgoIXYg
fHwgIXYtPmxheW91dFN0YXRlRW5hYmxlZCgpKSAmJiBwYXJlbnQoKSkgewogICAgICAgICAvLyBS
b3dzIGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIg
b2Zmc2V0IGluLgogICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyB3cm9uZyB3aXRoIHRyYW5zZm9y
bXMKICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZSgtcGFyZW50Qm94KCktPngoKSwgLXBhcmVu
dEJveCgpLT55KCkpOwogICAgIH0KLSAgICBSZW5kZXJCbG9jazo6bWFwTG9jYWxUb0Fic29sdXRl
UG9pbnQoZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKKyAgICBSZW5kZXJC
bG9jazo6bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBmaXhlZCwgdXNlVHJh
bnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6bWFw
QWJzb2x1dGVUb0xvY2FsUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFu
c2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CkBAIC0yMzgsMTkgKzI0MSw2IEBAIHZv
aWQgUmVuZGVyVGFibGVDZWxsOjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChib29sIGZpeGVkLCBi
b29sIHVzZVRyYW5zZm9ybXMsIFRyCiAgICAgfQogfQogCi1GbG9hdFF1YWQgUmVuZGVyVGFibGVD
ZWxsOjpsb2NhbFRvQ29udGFpbmVyUXVhZChjb25zdCBGbG9hdFF1YWQmIGxvY2FsUXVhZCwgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQpIGNvbnN0Ci17
Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuIGxvY2Fs
UXVhZDsKLQotICAgIEZsb2F0UXVhZCBxdWFkID0gbG9jYWxRdWFkOwotICAgIGlmIChwYXJlbnQo
KSkgewotICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBz
byBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgotICAgICAgICBxdWFkLm1vdmUoLXBhcmVudEJv
eCgpLT54KCksIC1wYXJlbnRCb3goKS0+eSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIFJlbmRlckJs
b2NrOjpsb2NhbFRvQ29udGFpbmVyUXVhZChxdWFkLCByZXBhaW50Q29udGFpbmVyLCBmaXhlZCk7
Ci19Ci0KIGludCBSZW5kZXJUYWJsZUNlbGw6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExp
bmUsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKIHsKICAgICBpZiAoaXNSb290TGluZUJveCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKaW5kZXggNTUxZDNmZS4uYTU3YjI0YiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKQEAgLTExNiw5ICsxMTYsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAotICAg
IHZpcnR1YWwgRmxvYXRRdWFkIGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEZsb2F0UXVhZCYs
IFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkID0gZmFs
c2UpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9BYnNvbHV0ZVBvaW50KGJv
b2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBUcmFuc2Zv
cm1TdGF0ZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtYXBBYnNvbHV0ZVRvTG9jYWxQb2lu
dChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDQzZjUyMTIuLjgyODY1
MDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC0xMzUsOCArMTM1LDEyIEBAIHZvaWQg
UmVuZGVyVmlldzo6bGF5b3V0KCkKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKLXZv
aWQgUmVuZGVyVmlldzo6bWFwTG9jYWxUb0Fic29sdXRlUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCAv
KnVzZVRyYW5zZm9ybXMqLywgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAor
dm9pZCBSZW5kZXJWaWV3OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkLCBib29sIC8qdXNlVHJhbnNmb3JtcyovLCBU
cmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CiB7CisgICAgLy8gSWYgYSBjb250
YWluZXIgd2FzIHNwZWNpZmllZCwgYW5kIHdhcyBub3QgMCBvciB0aGUgUmVuZGVyVmlldywKKyAg
ICAvLyB0aGVuIHdlIHNob3VsZCBoYXZlIGZvdW5kIGl0IGJ5IG5vdy4KKyAgICBBU1NFUlRfVU5V
U0VEKHJlcGFpbnRDb250YWluZXIsICFyZXBhaW50Q29udGFpbmVyIHx8IHJlcGFpbnRDb250YWlu
ZXIgPT0gdGhpcyk7CisKICAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpCiAgICAgICAgIHRy
YW5zZm9ybVN0YXRlLm1vdmUobV9mcmFtZVZpZXctPnNjcm9sbE9mZnNldCgpKTsKIH0KQEAgLTE0
NywxOSArMTUxLDYgQEAgdm9pZCBSZW5kZXJWaWV3OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChi
b29sIGZpeGVkLCBib29sIC8qdXNlVHJhbnNmb3JtcyovLCBUcmEKICAgICAgICAgdHJhbnNmb3Jt
U3RhdGUubW92ZSgtbV9mcmFtZVZpZXctPnNjcm9sbE9mZnNldCgpKTsKIH0KIAotRmxvYXRRdWFk
IFJlbmRlclZpZXc6OmxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEZsb2F0UXVhZCYgbG9jYWxR
dWFkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCkg
Y29uc3QKLXsKLSAgICAvLyBJZiBhIGNvbnRhaW5lciB3YXMgc3BlY2lmaWVkLCBhbmQgd2FzIG5v
dCAwIG9yIHRoZSBSZW5kZXJWaWV3LAotICAgIC8vIHRoZW4gd2Ugc2hvdWxkIGhhdmUgZm91bmQg
aXQgYnkgbm93LgotICAgIEFTU0VSVF9VTlVTRUQocmVwYWludENvbnRhaW5lciwgIXJlcGFpbnRD
b250YWluZXIgfHwgcmVwYWludENvbnRhaW5lciA9PSB0aGlzKTsKLQotICAgIEZsb2F0UXVhZCBx
dWFkID0gbG9jYWxRdWFkOwotICAgIGlmIChmaXhlZCAmJiBtX2ZyYW1lVmlldykKLSAgICAgICAg
cXVhZCArPSBtX2ZyYW1lVmlldy0+c2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICByZXR1cm4gcXVhZDsK
LX0KLQogdm9pZCBSZW5kZXJWaWV3OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4
LCBpbnQgdHkpCiB7CiAgICAgLy8gSWYgd2UgZXZlciByZXF1aXJlIGxheW91dCBidXQgcmVjZWl2
ZSBhIHBhaW50IGFueXdheSwgc29tZXRoaW5nIGhhcyBnb25lIGhvcnJpYmx5IHdyb25nLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5oCmluZGV4IDc1YjU3NzMuLmE1NzYyZDAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgKQEAgLTE2NSw5ICsxNjUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgRmxvYXRRdWFkIGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEZsb2F0UXVh
ZCYsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkID0g
ZmFsc2UpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9BYnNvbHV0ZVBvaW50
KGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBUcmFu
c2Zvcm1TdGF0ZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtYXBBYnNvbHV0ZVRvTG9jYWxQ
b2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikgY29u
c3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1T
dGF0ZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKaW5kZXggMGNm
YTg4OC4uNDM1ZDY1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3Rh
dGUuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcApAQCAtMjgs
NDAgKzI4LDk4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBUcmFuc2Zvcm1TdGF0
ZTo6bW92ZShpbnQgeCwgaW50IHkpCit2b2lkIFRyYW5zZm9ybVN0YXRlOjptb3ZlKGludCB4LCBp
bnQgeSwgYm9vbCBhY2N1bXVsYXRlVHJhbnNmb3JtKQogewotICAgIGlmIChtX2FjY3VtdWxhdGlu
Z1RyYW5zZm9ybSkKLSAgICAgICAgZmxhdHRlbigpOwotCi0gICAgbV9sYXN0UGxhbmFyUG9pbnQu
bW92ZSh4LCB5KTsKKyAgICBpZiAobV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0gJiYgbV9hY2N1bXVs
YXRlZFRyYW5zZm9ybSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBhY2N1bXVsYXRpbmcgaW50byBh
biBleGlzdGluZyB0cmFuc2Zvcm0sIGFwcGx5IHRoZSB0cmFuc2xhdGlvbi4KKyAgICAgICAgaWYg
KG1fZGlyZWN0aW9uID09IEFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uKQorICAgICAgICAgICAgbV9h
Y2N1bXVsYXRlZFRyYW5zZm9ybS0+dHJhbnNsYXRlUmlnaHQoeCwgeSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0tPnRyYW5zbGF0ZSh4LCB5KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZW4gZmxhdHRlbiBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlm
ICghYWNjdW11bGF0ZVRyYW5zZm9ybSkKKyAgICAgICAgICAgIGZsYXR0ZW4oKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBKdXN0IG1vdmUgdGhlIHBvaW50IGFuZCwgb3B0aW9uYWxseSwgdGhl
IHF1YWQuCisgICAgICAgIG1fbGFzdFBsYW5hclBvaW50Lm1vdmUoeCwgeSk7CisgICAgICAgIGlm
IChtX21hcFF1YWQpCisgICAgICAgICAgICBtX2xhc3RQbGFuYXJRdWFkLm1vdmUoeCwgeSk7Cisg
ICAgfQorICAgIG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtID0gYWNjdW11bGF0ZVRyYW5zZm9ybTsK
IH0KIAogdm9pZCBUcmFuc2Zvcm1TdGF0ZTo6YXBwbHlUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybUZyb21Db250YWluZXIsIGJvb2wgYWNjdW11bGF0ZVRyYW5z
Zm9ybSkKIHsKLSAgICBpZiAobV9kaXJlY3Rpb24gPT0gQXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24p
Ci0gICAgICAgIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNmb3JtRnJvbUNv
bnRhaW5lcik7ICAgIAotICAgIGVsc2UKLSAgICAgICAgbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5t
dWx0TGVmdCh0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKTsgICAgCi0KLSAgICBpZiAoIWFjY3VtdWxh
dGVUcmFuc2Zvcm0pCi0gICAgICAgIGZsYXR0ZW4oKTsKLQorICAgIC8vIElmIHdlIGhhdmUgYW4g
YWNjdW11bGF0ZWQgdHJhbnNmb3JtIGZyb20gbGFzdCB0aW1lLCBtdWx0aXBseSBpbiB0aGlzIHRy
YW5zZm9ybQorICAgIGlmIChtX2FjY3VtdWxhdGVkVHJhbnNmb3JtKSB7CisgICAgICAgIGlmICht
X2RpcmVjdGlvbiA9PSBBcHBseVRyYW5zZm9ybURpcmVjdGlvbikKKyAgICAgICAgICAgIG1fYWNj
dW11bGF0ZWRUcmFuc2Zvcm0tPm11bHRpcGx5KHRyYW5zZm9ybUZyb21Db250YWluZXIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLT5tdWx0TGVmdCh0
cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKTsKKyAgICB9IGVsc2UgaWYgKGFjY3VtdWxhdGVUcmFuc2Zv
cm0pIHsKKyAgICAgICAgLy8gTWFrZSBvbmUgaWYgd2Ugc3RhcnRlZCB0byBhY2N1bXVsYXRlCisg
ICAgICAgIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uc2V0KG5ldyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCh0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKSk7CisgICAgfQorICAgIAorICAgIGlmICghYWNjdW11
bGF0ZVRyYW5zZm9ybSkgeworICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogZmlu
YWxUcmFuc2Zvcm0gPSBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtID8gbV9hY2N1bXVsYXRlZFRyYW5z
Zm9ybS5nZXQoKSA6ICZ0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyOworICAgICAgICBmbGF0dGVuV2l0
aFRyYW5zZm9ybSgqZmluYWxUcmFuc2Zvcm0pOworICAgIH0KICAgICBtX2FjY3VtdWxhdGluZ1Ry
YW5zZm9ybSA9IGFjY3VtdWxhdGVUcmFuc2Zvcm07CiB9CiAKIHZvaWQgVHJhbnNmb3JtU3RhdGU6
OmZsYXR0ZW4oKQogewotICAgIG1fbGFzdFBsYW5hclBvaW50ID0gbWFwcGVkUG9pbnQoKTsKLSAg
ICBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOwotICAgIG1fYWNjdW11bGF0
aW5nVHJhbnNmb3JtID0gZmFsc2U7CisgICAgaWYgKCFtX2FjY3VtdWxhdGVkVHJhbnNmb3JtKSB7
CisgICAgICAgIG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtID0gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgZmxhdHRlbldpdGhUcmFuc2Zvcm0oKm1fYWNjdW11bGF0ZWRU
cmFuc2Zvcm0pOwogfQogCiBGbG9hdFBvaW50IFRyYW5zZm9ybVN0YXRlOjptYXBwZWRQb2ludCgp
IGNvbnN0CiB7CisgICAgaWYgKCFtX2FjY3VtdWxhdGVkVHJhbnNmb3JtKQorICAgICAgICByZXR1
cm4gbV9sYXN0UGxhbmFyUG9pbnQ7CisKICAgICBpZiAobV9kaXJlY3Rpb24gPT0gQXBwbHlUcmFu
c2Zvcm1EaXJlY3Rpb24pCi0gICAgICAgIHJldHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLm1h
cFBvaW50KG1fbGFzdFBsYW5hclBvaW50KTsKKyAgICAgICAgcmV0dXJuIG1fYWNjdW11bGF0ZWRU
cmFuc2Zvcm0tPm1hcFBvaW50KG1fbGFzdFBsYW5hclBvaW50KTsKIAotICAgIHJldHVybiBtX2Fj
Y3VtdWxhdGVkVHJhbnNmb3JtLmludmVyc2UoKS5wcm9qZWN0UG9pbnQobV9sYXN0UGxhbmFyUG9p
bnQpOworICAgIHJldHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLT5pbnZlcnNlKCkucHJvamVj
dFBvaW50KG1fbGFzdFBsYW5hclBvaW50KTsKK30KKworRmxvYXRRdWFkIFRyYW5zZm9ybVN0YXRl
OjptYXBwZWRRdWFkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0p
CisgICAgICAgIHJldHVybiBtX2xhc3RQbGFuYXJRdWFkOworCisgICAgaWYgKG1fZGlyZWN0aW9u
ID09IEFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uKQorICAgICAgICByZXR1cm4gbV9hY2N1bXVsYXRl
ZFRyYW5zZm9ybS0+bWFwUXVhZChtX2xhc3RQbGFuYXJRdWFkKTsKKworICAgIHJldHVybiBtX2Fj
Y3VtdWxhdGVkVHJhbnNmb3JtLT5pbnZlcnNlKCkucHJvamVjdFF1YWQobV9sYXN0UGxhbmFyUXVh
ZCk7Cit9CisKK3ZvaWQgVHJhbnNmb3JtU3RhdGU6OmZsYXR0ZW5XaXRoVHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIGlmIChtX2RpcmVjdGlvbiA9PSBBcHBs
eVRyYW5zZm9ybURpcmVjdGlvbikgeworICAgICAgICBtX2xhc3RQbGFuYXJQb2ludCA9IHQubWFw
UG9pbnQobV9sYXN0UGxhbmFyUG9pbnQpOworICAgICAgICBpZiAobV9tYXBRdWFkKQorICAgICAg
ICAgICAgbV9sYXN0UGxhbmFyUXVhZCA9IHQubWFwUXVhZChtX2xhc3RQbGFuYXJRdWFkKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlVHJhbnNmb3Jt
ID0gdC5pbnZlcnNlKCk7CisgICAgICAgIG1fbGFzdFBsYW5hclBvaW50ID0gaW52ZXJzZVRyYW5z
Zm9ybS5wcm9qZWN0UG9pbnQobV9sYXN0UGxhbmFyUG9pbnQpOworICAgICAgICBpZiAobV9tYXBR
dWFkKQorICAgICAgICAgICAgbV9sYXN0UGxhbmFyUXVhZCA9IGludmVyc2VUcmFuc2Zvcm0ucHJv
amVjdFF1YWQobV9sYXN0UGxhbmFyUXVhZCk7CisgICAgfQorCisgICAgLy8gV2UgY291bGQgdGhy
b3cgYXdheSBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtIGlmIHdlIHdhbnRlZCB0byBoZXJlLCBidXQg
dGhhdAorICAgIC8vIHdvdWxkIGNhdXNlIHRocmFzaCB3aGVuIHRyYXZlcnNpbmcgaGllcmFyYWNo
aWVzIHdpdGggYWx0ZXJuYXRpbmcKKyAgICAvLyBwcmVzZXJ2ZS0zZCBhbmQgZmxhdCBlbGVtZW50
cy4KKyAgICBpZiAobV9hY2N1bXVsYXRlZFRyYW5zZm9ybSkKKyAgICAgICAgbV9hY2N1bXVsYXRl
ZFRyYW5zZm9ybS0+bWFrZUlkZW50aXR5KCk7CisgICAgbV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0g
PSBmYWxzZTsKIH0KIAogLy8gSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlIG1ldGhvZHMKQEAgLTk4
LDcgKzE1Niw3IEBAIEZsb2F0UG9pbnQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjptYXBwZWRQ
b2ludCgpIGNvbnN0CiAKIEZsb2F0UXVhZCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6Om1hcHBl
ZFF1YWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmludmVy
c2UoKS5tYXBRdWFkKG1fbGFzdFBsYW5hclF1YWQpOyAgICAgIC8vIG9yIHByb2plY3Q/CisgICAg
cmV0dXJuIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uaW52ZXJzZSgpLnByb2plY3RRdWFkKG1fbGFz
dFBsYW5hclF1YWQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvVHJh
bnNmb3JtU3RhdGUuaAppbmRleCA0YTVlZjllLi41MTkwMTE4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5z
Zm9ybVN0YXRlLmgKQEAgLTMwLDQyICszMCw1NCBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgog
I2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVHJhbnNmb3JtU3RhdGUgeworY2xhc3MgVHJh
bnNmb3JtU3RhdGUgOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgZW51bSBUcmFuc2Zvcm1E
aXJlY3Rpb24geyBBcHBseVRyYW5zZm9ybURpcmVjdGlvbiwgVW5hcHBseUludmVyc2VUcmFuc2Zv
cm1EaXJlY3Rpb24gfTsKLSAgICBUcmFuc2Zvcm1TdGF0ZShjb25zdCBGbG9hdFBvaW50JiBwLCBU
cmFuc2Zvcm1EaXJlY3Rpb24gbWFwcGluZ0RpcmVjdGlvbikKKyAgICAvLyBJZiBxdWFkIGlzIG5v
bi1udWxsLCBpdCB3aWxsIGJlIG1hcHBlZAorICAgIFRyYW5zZm9ybVN0YXRlKFRyYW5zZm9ybURp
cmVjdGlvbiBtYXBwaW5nRGlyZWN0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9h
dFF1YWQqIHF1YWQgPSAwKQogICAgICAgICA6IG1fbGFzdFBsYW5hclBvaW50KHApCiAgICAgICAg
ICwgbV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0oZmFsc2UpCisgICAgICAgICwgbV9tYXBRdWFkKHF1
YWQgIT0gMCkKICAgICAgICAgLCBtX2RpcmVjdGlvbihtYXBwaW5nRGlyZWN0aW9uKQogICAgIHsK
KyAgICAgICAgaWYgKHF1YWQpCisgICAgICAgICAgICBtX2xhc3RQbGFuYXJRdWFkID0gKnF1YWQ7
CiAgICAgfQogICAgIAotICAgIFRyYW5zZm9ybVN0YXRlKGNvbnN0IFRyYW5zZm9ybVN0YXRlJiBv
dGhlcikKLSAgICAgICAgOiBtX2xhc3RQbGFuYXJQb2ludChvdGhlci5tX2xhc3RQbGFuYXJQb2lu
dCkKLSAgICAgICAgLCBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtKG90aGVyLm1fYWNjdW11bGF0ZWRU
cmFuc2Zvcm0pCi0gICAgICAgICwgbV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0ob3RoZXIubV9hY2N1
bXVsYXRpbmdUcmFuc2Zvcm0pCi0gICAgICAgICwgbV9kaXJlY3Rpb24ob3RoZXIubV9kaXJlY3Rp
b24pCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgbW92ZShjb25zdCBJbnRTaXplJiBzKQorICAg
IHZvaWQgbW92ZShjb25zdCBJbnRTaXplJiBzLCBib29sIGFjY3VtdWxhdGVUcmFuc2Zvcm0gPSBm
YWxzZSkKICAgICB7Ci0gICAgICAgIG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsKKyAgICAg
ICAgbW92ZShzLndpZHRoKCksIHMuaGVpZ2h0KCksIGFjY3VtdWxhdGVUcmFuc2Zvcm0pOwogICAg
IH0KICAgICAKLSAgICB2b2lkIG1vdmUoaW50IHgsIGludCB5KTsKLSAgICB2b2lkIGFwcGx5VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVy
LCBib29sIGFjY3VtdWxhdGVUcmFuc2Zvcm0pOwotICAgIEZsb2F0UG9pbnQgbWFwcGVkUG9pbnQo
KSBjb25zdDsKKyAgICB2b2lkIG1vdmUoaW50IHgsIGludCB5LCBib29sIGFjY3VtdWxhdGVUcmFu
c2Zvcm0gPSBmYWxzZSk7CisgICAgdm9pZCBhcHBseVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtRnJvbUNvbnRhaW5lciwgYm9vbCBhY2N1bXVsYXRlVHJhbnNm
b3JtID0gZmFsc2UpOwogICAgIHZvaWQgZmxhdHRlbigpOwogCisgICAgLy8gUmV0dXJuIHRoZSBj
b29yZHMgb2YgdGhlIHBvaW50IG9yIHF1YWQgaW4gdGhlIGxhc3QgZmxhdHRlbmVkIGxheWVyCisg
ICAgRmxvYXRQb2ludCBsYXN0UGxhbmFyUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQbGFu
YXJQb2ludDsgfQorICAgIEZsb2F0UXVhZCBsYXN0UGxhbmFyUXVhZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdFBsYW5hclF1YWQ7IH0KKworICAgIC8vIFJldHVybiB0aGUgcG9pbnQgb3IgcXVhZCBt
YXBwZWQgdGhyb3VnaCB0aGUgY3VycmVudCB0cmFuc2Zvcm0KKyAgICBGbG9hdFBvaW50IG1hcHBl
ZFBvaW50KCkgY29uc3Q7CisgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGZsYXR0ZW5XaXRoVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4Jik7CisgICAgCiAgICAgRmxvYXRQb2ludCBtX2xhc3RQbGFuYXJQb2ludDsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtOworICAgIEZsb2F0UXVh
ZCBtX2xhc3RQbGFuYXJRdWFkOworCisgICAgLy8gV2Ugb25seSBhbGxvY2F0ZSB0aGUgdHJhbnNm
b3JtIGlmIHdlIG5lZWQgdG8KKyAgICBPd25QdHI8VHJhbnNmb3JtYXRpb25NYXRyaXg+IG1fYWNj
dW11bGF0ZWRUcmFuc2Zvcm07CiAgICAgYm9vbCBtX2FjY3VtdWxhdGluZ1RyYW5zZm9ybTsKKyAg
ICBib29sIG1fbWFwUXVhZDsKICAgICBUcmFuc2Zvcm1EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCBlZTY5NmRiLi5hOGFm
NjRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTY2Nyw2ICs2Njcs
OCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9uRm9yUHJvcGVydHko
aW50IHByb3BlcnR5KSBjb25zdDsKIAogICAgIEVUcmFuc2Zvcm1TdHlsZTNEIHRyYW5zZm9ybVN0
eWxlM0QoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2Zvcm1T
dHlsZTNEOyB9CisgICAgYm9vbCBwcmVzZXJ2ZXMzRCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25J
bmhlcml0ZWREYXRhLT5tX3RyYW5zZm9ybVN0eWxlM0QgPT0gVHJhbnNmb3JtU3R5bGUzRFByZXNl
cnZlM0Q7IH0KKwogICAgIEVCYWNrZmFjZVZpc2liaWxpdHkgYmFja2ZhY2VWaXNpYmlsaXR5KCkg
Y29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYmFja2ZhY2VWaXNpYmlsaXR5
OyB9CiAgICAgZmxvYXQgcGVyc3BlY3RpdmUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV9wZXJzcGVjdGl2ZTsgfQogICAgIGJvb2wgaGFzUGVyc3BlY3RpdmUoKSBjb25z
dCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9wZXJzcGVjdGl2ZSA+IDA7IH0K
</data>
<flag name="review"
          id="13907"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>