<?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>64877</bug_id>
          
          <creation_ts>2011-07-20 10:10:59 -0700</creation_ts>
          <short_desc>[Qt] Adopt existing GraphicsContext3D members (part 1)</short_desc>
          <delta_ts>2011-07-21 08:12:23 -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>WebKit Qt</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>
          
          <blocked>57261</blocked>
    
    <blocked>64878</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrew Wason">rectalogic</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>439862</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-07-20 10:10:59 -0700</bug_when>
    <thetext>This is part 1 of a 3 part migration for bug 57261 to migrate to GraphicsContext3DOpenGL.cpp for Qt.

Part 1 adopts existing GraphicsContext3D members for Qt. Move member vars and their initialization,
and the GraphicsContext3DInternal::reshape() method out of GraphicsContext3DInternal and into
GraphicsContext3D where they will be used when we adopt GraphicsContext3DOpenGL.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439873</commentid>
    <comment_count>1</comment_count>
      <attachid>101483</attachid>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-07-20 10:42:22 -0700</bug_when>
    <thetext>Created attachment 101483
adopt GraphicsContext3D members</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440309</commentid>
    <comment_count>2</comment_count>
      <attachid>101483</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-07-21 01:48:33 -0700</bug_when>
    <thetext>Comment on attachment 101483
adopt GraphicsContext3D members

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

The code changes are good. Please resubmit with a more informative ChangeLog.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Existing webgl layout tests should test this.

WebGL, not webgl.

&gt; Source/WebCore/ChangeLog:11
&gt; +        where they will be needed when we adopt GraphicsContext3DOpenGL.cpp

Missing a period, this upsets some people :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440383</commentid>
    <comment_count>3</comment_count>
      <attachid>101583</attachid>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-07-21 07:03:20 -0700</bug_when>
    <thetext>Created attachment 101583
update ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440387</commentid>
    <comment_count>4</comment_count>
      <attachid>101583</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-07-21 07:13:41 -0700</bug_when>
    <thetext>Comment on attachment 101583
update ChangeLog

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440416</commentid>
    <comment_count>5</comment_count>
      <attachid>101583</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-21 08:12:19 -0700</bug_when>
    <thetext>Comment on attachment 101583
update ChangeLog

Clearing flags on attachment: 101583

Committed r91469: &lt;http://trac.webkit.org/changeset/91469&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440417</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-21 08:12:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101483</attachid>
            <date>2011-07-20 10:42:22 -0700</date>
            <delta_ts>2011-07-21 07:03:20 -0700</delta_ts>
            <desc>adopt GraphicsContext3D members</desc>
            <filename>part1.diff</filename>
            <type>text/plain</type>
            <size>22501</size>
            <attacher name="Andrew Wason">rectalogic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhZjBmMjVkLi5kMzQ2ZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMTEtMDctMjAgIEFuZHJldyBXYXNvbiAgPHJlY3RhbG9naWNAcmVjdGFsb2dpYy5jb20+
CisKKyAgICAgICAgW1F0XSBBZG9wdCBleGlzdGluZyBHcmFwaGljc0NvbnRleHQzRCBtZW1iZXJz
IChwYXJ0IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NDg3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEV4aXN0aW5nIHdlYmdsIGxheW91dCB0ZXN0cyBzaG91bGQgdGVzdCB0aGlzLgorCisgICAgICAg
IE1vdmUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBtZW1iZXJzIGludG8gR3JhcGhpY3NDb250
ZXh0M0QKKyAgICAgICAgd2hlcmUgdGhleSB3aWxsIGJlIG5lZWRlZCB3aGVuIHdlIGFkb3B0IEdy
YXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRUb1RleHR1
cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
Ym91bmRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBo
aWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0
Zm9ybVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMp
OgorCiAyMDExLTA3LTIwICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgog
CiAgICAgICAgIE1lZGlhU3RyZWFtIEFQSTogVXBkYXRlIHRoZSB0cmFja2xpc3RzIHRvIHRoZSBs
YXRlc3Qgc3BlYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKaW5kZXggMWQwZjJmOC4uNWU0N2VmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC05
MCw2ICs5MCw4IEBAIGNsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0Q7CiAj
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspCiBjbGFzcyBFeHRlbnNpb25zM0RPcGVu
R0w7CisjZWxpZiBQTEFURk9STShRVCkKK2NsYXNzIEV4dGVuc2lvbnMzRFF0OwogI2VuZGlmCiBj
bGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2U7CkBAIC05MDcsNyArOTA5LDcgQEAgcHVibGlj
OgogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3dlYkdMTGF5ZXI7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKICAgICB0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAg
IFN0cmluZyBzb3VyY2U7CiAgICAgICAgIFN0cmluZyBsb2c7CkBAIC05MTUsMTAgKzkxNywxNSBA
QCBwdWJsaWM6CiAgICAgfSBTaGFkZXJTb3VyY2VFbnRyeTsKICAgICBIYXNoTWFwPFBsYXRmb3Jt
M0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5PiBtX3NoYWRlclNvdXJjZU1hcDsKIAorI2lmIFBM
QVRGT1JNKFFUKQorICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RRdDsKKyAgICBPd25QdHI8
RXh0ZW5zaW9uczNEUXQ+IG1fZXh0ZW5zaW9uczsKKyNlbHNlCiAgICAgZnJpZW5kIGNsYXNzIEV4
dGVuc2lvbnMzRE9wZW5HTDsKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOwogCiAg
ICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTD4gbV9leHRlbnNpb25zOworI2VuZGlmCiAKICAg
ICBBdHRyaWJ1dGVzIG1fYXR0cnM7CiAgICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRl
eEFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA3MmIyODhiLi5kMTE2YmFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcApAQCAtNjYsMTMgKzY2LDEwIEBAIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwKICNlbmRpZgogewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpOworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR3JhcGhpY3NDb250
ZXh0M0QqLCBIb3N0V2luZG93Kik7CiAgICAgfkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsK
IAotICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fdmFsaWQ7IH0KLQogICAgIFFHTFdpZGdl
dCogZ2V0Vmlld3BvcnRHTFdpZGdldCgpOwotICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQogICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykgY29uc3Q7CiAjZW5kaWYK
QEAgLTgwLDIyICs3NywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludChRUGFpbnRlciosIGNv
bnN0IFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSosIFFXaWRnZXQqKTsKICAgICBRUmVjdEYgYm91
bmRpbmdSZWN0KCkgY29uc3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBt
X2F0dHJzOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgSG9zdFdpbmRv
dyogbV9ob3N0V2luZG93OwogICAgIFFHTFdpZGdldCogbV9nbFdpZGdldDsKICAgICBRR0xXaWRn
ZXQqIG1fdmlld3BvcnRHTFdpZGdldDsKLSAgICBRUmVjdEYgbV9ib3VuZGluZ1JlY3Q7Ci0gICAg
R0x1aW50IG1fdGV4dHVyZTsKLSAgICBHTHVpbnQgbV9jYW52YXNGYm87Ci0gICAgR0x1aW50IG1f
Y3VycmVudEZibzsKLSAgICBHTHVpbnQgbV9kZXB0aEJ1ZmZlcjsKLSAgICBib29sIG1fbGF5ZXJD
b21wb3NpdGVkOwotICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGludD4gbV9zeW50aGV0aWNFcnJv
cnM7Ci0KLSAgICBPd25QdHI8RXh0ZW5zaW9uczNEUXQ+IG1fZXh0ZW5zaW9uczsKLQotcHJpdmF0
ZToKLSAgICBib29sIG1fdmFsaWQ7CiB9OwogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dM
RVMyQ29tcGxpYW50KCkgY29uc3QKQEAgLTEwNywxNyArOTIsMTEgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiAjZW5kaWYKIH0KIAotR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKLSAgICA6IG1f
YXR0cnMoYXR0cnMpCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdp
bmRvdykKICAgICAsIG1fZ2xXaWRnZXQoMCkKICAgICAsIG1fdmlld3BvcnRHTFdpZGdldCgwKQot
ICAgICwgbV90ZXh0dXJlKDApCi0gICAgLCBtX2NhbnZhc0ZibygwKQotICAgICwgbV9jdXJyZW50
RmJvKDApCi0gICAgLCBtX2RlcHRoQnVmZmVyKDApCi0gICAgLCBtX2xheWVyQ29tcG9zaXRlZChm
YWxzZSkKLSAgICAsIG1fdmFsaWQodHJ1ZSkKIHsKICAgICBtX3ZpZXdwb3J0R0xXaWRnZXQgPSBn
ZXRWaWV3cG9ydEdMV2lkZ2V0KCk7CiAKQEAgLTEyNiw2OSArMTA1LDE5IEBAIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0CiAgICAgZWxzZQogICAgICAgICBtX2dsV2lkZ2V0ID0gbmV3IFFHTFdpZGdl
dCgpOwogCi0gICAgaWYgKCFtX2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJHcmFwaGljc0NvbnRleHQzRDogUUdMV2lkZ2V0IGluaXRpYWxpemF0aW9uIGZhaWxlZC4i
KTsKLSAgICAgICAgbV92YWxpZCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgLy8gR2VvbWV0cnkgY2FuIGJlIHNldCB0byB6ZXJvIGJlY2F1c2UgbV9nbFdpZGdldCBpcyB1
c2VkIG9ubHkgZm9yIGl0cyBRR0xDb250ZXh0LgogICAgIG1fZ2xXaWRnZXQtPnNldEdlb21ldHJ5
KDAsIDAsIDAsIDApOwogCi0jaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBtX2F0dHJz
LnN0ZW5jaWwgPSBmYWxzZTsKLSNlbHNlCi0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAg
ICAgbV9hdHRycy5kZXB0aCA9IHRydWU7Ci0jZW5kaWYKLSAgICBtX2F0dHJzLmFudGlhbGlhcyA9
IGZhbHNlOwotCiAgICAgbV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAotICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7
Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9w
ZW5HTFNoaW1zKCk7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYg
KCFzdWNjZXNzKSB7Ci0gICAgICAgIG1fdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUgY2FudmFzIEZCTy4KLSAgICBn
bEdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9jYW52YXNGYm8pOwotCi0gICAgZ2xH
ZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFH
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJm
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBnbFRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGds
VGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7
Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0K
LSAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKC8qIGNv
dW50ICovIDEsICZtX2RlcHRoQnVmZmVyKTsKLQogI2lmICFkZWZpbmVkKFFUX09QRU5HTF9FU18y
KQogICAgIGdsRW5hYmxlKEdMX1BPSU5UX1NQUklURSk7CiAgICAgZ2xFbmFibGUoR0xfVkVSVEVY
X1BST0dSQU1fUE9JTlRfU0laRSk7CiAjZW5kaWYKLQotICAgIC8vIEJpbmQgY2FudmFzIEZCTyBh
bmQgc2V0IGluaXRpYWwgY2xlYXIgY29sb3IgdG8gYmxhY2suCi0gICAgbV9jdXJyZW50RmJvID0g
bV9jYW52YXNGYm87Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2NhbnZhc0Zibyk7Ci0gICAgZ2xDbGVhckNvbG9yKDAuMCwgMC4wLCAwLjAs
IDAuMCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQz
REludGVybmFsKCkKIHsKLSAgICBtX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwotICAgIGlmICht
X2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOwotICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZm
ZXIpOwotICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9jYW52YXNGYm8pOwotICAg
IH0KICAgICBkZWxldGUgbV9nbFdpZGdldDsKICAgICBtX2dsV2lkZ2V0ID0gMDsKIH0KQEAgLTIx
MSw2OSArMTQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgcXVpbnQzMiBzd2FwQmdyVG9SZ2IocXVpbnQz
MiBwaXhlbCkKICAgICByZXR1cm4gKChwaXhlbCA8PCAxNikgJiAweGZmMDAwMCkgfCAoKHBpeGVs
ID4+IDE2KSAmIDB4ZmYpIHwgKHBpeGVsICYgMHhmZjAwZmYwMCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0g
ICAgaWYgKHdpZHRoID09IG1fYm91bmRpbmdSZWN0LndpZHRoKCkgJiYgaGVpZ2h0ID09IG1fYm91
bmRpbmdSZWN0LmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2JvdW5kaW5nUmVj
dCA9IFFSZWN0RihRUG9pbnRGKDAsIDApLCBRU2l6ZUYod2lkdGgsIGhlaWdodCkpOwotCi0gICAg
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLQotICAgIC8vIENyZWF0ZSBjb2xvciBidWZmZXIK
LSAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1
cmUpOwotICAgIGlmIChtX2F0dHJzLmFscGhhKQotICAgICAgICBnbFRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIC8qIGxldmVsICovIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAvKiBib3JkZXIgKi8gMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAvKiBkYXRhICovIDApOwot
ICAgIGVsc2UKLSAgICAgICAgZ2xUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAvKiBsZXZlbCAqLyAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCLCB3aWR0aCwgaGVpZ2h0
LCAvKiBib3JkZXIgKi8gMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIC8qIGRhdGEgKi8gMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0KLSAgICBpZiAobV9hdHRycy5kZXB0aCkg
ewotICAgICAgICAvLyBDcmVhdGUgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVycy4KLSAgICAgICAg
Z2xCaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVw
dGhCdWZmZXIpOwotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgICAgIGdsUmVuZGVy
YnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOwotI2Vsc2UKLSAgICAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4LCB3
aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQpOwotI2VuZGlmCi0gICAgICAgIGdsQmlu
ZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICB9
Ci0KLSAgICAvLyBDb25zdHJ1Y3QgY2FudmFzIEZCTy4KLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fY2FudmFzRmJvKTsKLSAgICBnbEZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV90ZXh0dXJlLCAwKTsKLSAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAgICAgZ2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSNpZiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAg
ICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1
ZmZlcik7Ci0jZW5kaWYKLQotICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICBMT0df
RVJST1IoIkdyYXBoaWNzQ29udGV4dDNEOiBDYW52YXMgRkJPIGluaXRpYWxpemF0aW9uIGZhaWxl
ZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBjbGVhckZsYWdzID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgp
Ci0gICAgICAgIGNsZWFyRmxhZ3MgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9C
SVQ7Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgY2xlYXJGbGFncyB8PSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotCi0gICAgZ2xDbGVhcihjbGVhckZs
YWdzKTsKLSAgICBnbEZsdXNoKCk7Ci19Ci0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdAogewogICAgIGlm
ICh0ZXh0dXJlTWFwcGVyLT5pc09wZW5HTEJhY2tlZCgpKSB7CiAgICAgICAgIFRleHR1cmVNYXBw
ZXJHTCogdGV4bWFwR0wgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFw
cGVyKTsKLSAgICAgICAgdGV4bWFwR0wtPmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgIW1fYXR0cnMu
YWxwaGEsIEZsb2F0U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBtYXNr
LCB0cnVlIC8qIGZsaXAgKi8pOworICAgICAgICB0ZXhtYXBHTC0+ZHJhd1RleHR1cmUobV9jb250
ZXh0LT5tX3RleHR1cmUsICFtX2NvbnRleHQtPm1fYXR0cnMuYWxwaGEsIEZsb2F0U2l6ZSgxLCAx
KSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrLCB0cnVlIC8qIGZsaXAgKi8pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yODMsMjEgKzE1NSwyMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIq
IHRleHR1cmVNYXBwZQogICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwogICAgIHBh
aW50ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CiAKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gbV9j
b250ZXh0LT5tX2N1cnJlbnRIZWlnaHQ7CisgICAgY29uc3QgaW50IHdpZHRoID0gbV9jb250ZXh0
LT5tX2N1cnJlbnRXaWR0aDsKKwogICAgIC8vIEFsdGVybmF0aXZlbHkgcmVhZCBwaXhlbHMgdG8g
YSBtZW1vcnkgYnVmZmVyLgotICAgIFFJbWFnZSBvZmZzY3JlZW5JbWFnZShtX2JvdW5kaW5nUmVj
dC53aWR0aCgpLCBtX2JvdW5kaW5nUmVjdC5oZWlnaHQoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMy
KTsKKyAgICBRSW1hZ2Ugb2Zmc2NyZWVuSW1hZ2Uod2lkdGgsIGhlaWdodCwgUUltYWdlOjpGb3Jt
YXRfQVJHQjMyKTsKICAgICBxdWludDMyKiBpbWFnZVBpeGVscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
cXVpbnQzMio+KG9mZnNjcmVlbkltYWdlLmJpdHMoKSk7CiAKICAgICBtX2dsV2lkZ2V0LT5tYWtl
Q3VycmVudCgpOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9jYW52YXNGYm8pOwotICAgIGdsUmVhZFBpeGVscygvKiB4ICovIDAsIC8qIHkg
Ki8gMCwgbV9ib3VuZGluZ1JlY3Qud2lkdGgoKSwgbV9ib3VuZGluZ1JlY3QuaGVpZ2h0KCksIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwg
aW1hZ2VQaXhlbHMpOwotCi0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX2N1cnJlbnRGYm8pOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0LT5tX2Zibyk7CisgICAgZ2xSZWFk
UGl4ZWxzKC8qIHggKi8gMCwgLyogeSAqLyAwLCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGltYWdlUGl4ZWxz
KTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fY29udGV4dC0+bV9ib3VuZEZCTyk7CiAKICAgICAvLyBPcGVuR0wgZ2l2ZXMgdXMgQUJHUiBv
biAzMiBiaXRzLCBhbmQgd2l0aCB0aGUgb3JpZ2luIGF0IHRoZSBib3R0b20gbGVmdAogICAgIC8v
IFdlIG5lZWQgUkdCMzIgb3IgQVJHQjMyX1BNLCB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBs
ZWZ0LgogICAgIHF1aW50MzIqIHBpeGVsc1NyYyA9IGltYWdlUGl4ZWxzOwotICAgIGNvbnN0IGlu
dCBoZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fYm91bmRpbmdSZWN0LmhlaWdodCgpKTsKLSAg
ICBjb25zdCBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fYm91bmRpbmdSZWN0LndpZHRo
KCkpOwogICAgIGNvbnN0IGludCBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjsKICAgICBmb3IgKGlu
dCByb3cgPSAwOyByb3cgPCBoYWxmSGVpZ2h0OyArK3JvdykgewogICAgICAgICBjb25zdCBpbnQg
dGFyZ2V0SWR4ID0gKGhlaWdodCAtIDEgLSByb3cpICogd2lkdGg7CkBAIC0zMjQsNyArMTk2LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGUKIAogUVJlY3RGIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYm91bmRpbmdSZWN0
OworICAgIHJldHVybiBRUmVjdEYoUVBvaW50RigwLCAwKSwgUVNpemVGKG1fY29udGV4dC0+bV9j
dXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFT
dHlsZU9wdGlvbkdyYXBoaWNzSXRlbSogb3B0aW9uLCBRV2lkZ2V0KiB3aWRnZXQpCkBAIC0zMzcs
NyArMjA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludChRUGFpbnRl
ciogcGFpbnRlciwgY29uc3QgUVN0eWxlT3B0aW9uR3JhcGgKICAgICAvLyB3aXRoIGJyb3dzZXJz
IE9wZW5HTCBjb250ZXh0LgogICAgIFFHTFdpZGdldCogdmlld3BvcnRHTFdpZGdldCA9IGdldFZp
ZXdwb3J0R0xXaWRnZXQoKTsKICAgICBpZiAodmlld3BvcnRHTFdpZGdldCAmJiB2aWV3cG9ydEdM
V2lkZ2V0ID09IG1fdmlld3BvcnRHTFdpZGdldCAmJiB2aWV3cG9ydEdMV2lkZ2V0ID09IHBhaW50
ZXItPmRldmljZSgpKSB7Ci0gICAgICAgIHZpZXdwb3J0R0xXaWRnZXQtPmRyYXdUZXh0dXJlKHJl
Y3QsIG1fdGV4dHVyZSk7CisgICAgICAgIHZpZXdwb3J0R0xXaWRnZXQtPmRyYXdUZXh0dXJlKHJl
Y3QsIG1fY29udGV4dC0+bV90ZXh0dXJlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MzQ2LDEwICsyMTgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50KFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaAogICAgIHF1aW50MzIqIGlt
YWdlUGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4ob2Zmc2NyZWVuSW1hZ2UuYml0
cygpKTsKIAogICAgIG1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Ci0gICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NhbnZhc0Zibyk7CisgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRl
eHQtPm1fZmJvKTsKICAgICBnbFJlYWRQaXhlbHMoLyogeCAqLyAwLCAvKiB5ICovIDAsIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBpbWFnZVBpeGVscyk7Ci0KLSAgICBnbEJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fY3VycmVudEZibyk7Cisg
ICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Nv
bnRleHQtPm1fYm91bmRGQk8pOwogCiAgICAgLy8gT3BlbkdMIGdpdmVzIHVzIEFCR1Igb24gMzIg
Yml0cywgYW5kIHdpdGggdGhlIG9yaWdpbiBhdCB0aGUgYm90dG9tIGxlZnQKICAgICAvLyBXZSBu
ZWVkIFJHQjMyIG9yIEFSR0IzMl9QTSwgd2l0aCB0aGUgb3JpZ2luIGF0IHRoZSB0b3AgbGVmdC4K
QEAgLTM4OCwxNCArMjU5LDc3IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpCiB9CiAKIEdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCkKLSAgICA6IG1faXNSZXNv
dXJjZVNhZmUoZmFsc2UpLCBtX2ludGVybmFsKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQz
REludGVybmFsKGF0dHJzLCBob3N0V2luZG93KSkpCisgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQor
ICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCisgICAgLCBtX2lzUmVzb3VyY2VTYWZlKGZhbHNlKQor
ICAgICwgbV9hdHRycyhhdHRycykKKyAgICAsIG1fdGV4dHVyZSgwKQorICAgICwgbV9jb21wb3Np
dG9yVGV4dHVyZSgwKQorICAgICwgbV9mYm8oMCkKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KDApCisgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKKyAgICAsIG1faW50ZXJuYWxDb2xv
ckZvcm1hdCgwKQorICAgICwgbV9ib3VuZEZCTygwKQorICAgICwgbV9hY3RpdmVUZXh0dXJlKDAp
CisgICAgLCBtX2JvdW5kVGV4dHVyZTAoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAg
ICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcigwKQorICAgICwgbV9pbnRlcm5hbChhZG9wdFB0cihuZXcgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbCh0aGlzLCBob3N0V2luZG93KSkpCiB7Ci0gICAgaWYgKCFtX2ludGVy
bmFsLT5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWwuY2xlYXIoKTsKKyNpZiBkZWZpbmVk
KFFUX09QRU5HTF9FU18yKQorICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOworI2Vsc2UKKyAg
ICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyNl
bmRpZgorICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisKKyAgICBpZiAoIW1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPmlzVmFsaWQoKSkgeworICAgICAgICBMT0dfRVJST1IoIkdyYXBoaWNz
Q29udGV4dDNEOiBRR0xXaWRnZXQgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOworICAgICAgICBt
X2ludGVybmFsID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRy
dWU7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6
ZU9wZW5HTFNoaW1zKCk7CisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAg
aWYgKCFzdWNjZXNzKSB7CisgICAgICAgIG1faW50ZXJuYWwgPSBudWxscHRyOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJP
LgorICAgIGdsR2VuRnJhbWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZtX2Zibyk7CisKKyAgICBn
bEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
QUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRl
cmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGdsVGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAg
Z2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KTsKKyAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsK
KworICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoLyog
Y291bnQgKi8gMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKworICAgIC8vIEJpbmQgY2FudmFz
IEZCTyBhbmQgc2V0IGluaXRpYWwgY2xlYXIgY29sb3IgdG8gYmxhY2suCisgICAgbV9ib3VuZEZC
TyA9IG1fZmJvOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mYm8pOworICAgIGdsQ2xlYXJDb2xvcigwLjAsIDAuMCwgMC4wLCAwLjApOwog
fQogCiBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsKKyAgICBtX2lu
dGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworICAgIGlmIChtX2ludGVybmFsLT5t
X2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKKyAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAg
fQogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkKQEAgLTQwNSw3ICszMzksNyBAQCBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCkKIAogUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV90ZXh0dXJlOworICAgIHJldHVy
biBtX3RleHR1cmU7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC00
NDQsNyArMzc4LDU0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQogICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CiAgICAgbV9jdXJyZW50
SGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgbV9pbnRlcm5hbC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0
KTsKKyAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOworCisgICAgLy8g
Q3JlYXRlIGNvbG9yIGJ1ZmZlcgorICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpCisgICAgICAg
IGdsVGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgLyogbGV2ZWwgKi8g
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHdpZHRoLCBoZWlnaHQsIC8qIGJvcmRlciAqLyAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIC8qIGRhdGEgKi8gMCk7CisgICAgZWxzZQorICAgICAgICBnbFRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIC8qIGxldmVsICovIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0IsIHdpZHRoLCBoZWlnaHQsIC8qIGJvcmRlciAqLyAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgLyogZGF0YSAqLyAwKTsKKyAg
ICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKworICAg
IGlmIChtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgIC8vIENyZWF0ZSBkZXB0aCBhbmQgc3RlbmNp
bCBidWZmZXJzLgorICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworI2lmIGRlZmluZWQoUVRfT1BF
TkdMX0VTXzIpCisgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYsIHdp
ZHRoLCBoZWlnaHQpOworI2Vsc2UKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAg
ICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWln
aHQpOworI2VuZGlmCisgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICB9CisKKyAgICAvLyBDb25zdHJ1Y3QgY2FudmFzIEZC
Ty4KKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBpZiAobV9hdHRycy5k
ZXB0aCkKKyAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisjaWYg
IWRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAg
ICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyNlbmRpZgorCisgICAg
R0xlbnVtIHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIExPR19FUlJPUigiR3JhcGhpY3NDb250ZXh0
M0Q6IENhbnZhcyBGQk8gaW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaW50IGNsZWFyRmxhZ3MgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QlVGRkVSX0JJVDsKKyAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgY2xlYXJGbGFncyB8
PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICBpZiAobV9hdHRycy5z
dGVuY2lsKQorICAgICAgICBjbGVhckZsYWdzIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0JVRkZFUl9CSVQ7CisKKyAgICBnbENsZWFyKGNsZWFyRmxhZ3MpOworICAgIGdsRmx1c2goKTsK
IH0KIAogSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKSBjb25zdApAQCAtNDkzLDggKzQ3NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QgYnVmZmVyKQogewogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VD
dXJyZW50KCk7Ci0gICAgbV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvID0gYnVmZmVyID8gYnVmZmVy
IDogbV9pbnRlcm5hbC0+bV9jYW52YXNGYm87Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIodGFyZ2V0
LCBtX2ludGVybmFsLT5tX2N1cnJlbnRGYm8pOworICAgIG1fYm91bmRGQk8gPSBidWZmZXIgPyBi
dWZmZXIgOiBtX2ZibzsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG1fYm91bmRGQk8p
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCkBAIC03OTksMTUgKzc4MCwx
NSBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJgogCiBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQogewotICAgIHJl
dHVybiBtX2ludGVybmFsLT5tX2F0dHJzOworICAgIHJldHVybiBtX2F0dHJzOwogfQogCiBHQzNE
ZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQogewotICAgIGlmIChtX2ludGVybmFs
LT5tX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIExpc3RIYXNoU2V0PEdD
M0RlbnVtPjo6aXRlcmF0b3IgaXRlciA9IG1faW50ZXJuYWwtPm1fc3ludGhldGljRXJyb3JzLmJl
Z2luKCk7CisgICAgaWYgKG1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsKKyAgICAgICAg
TGlzdEhhc2hTZXQ8R0MzRGVudW0+OjppdGVyYXRvciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMu
YmVnaW4oKTsKICAgICAgICAgR0MzRGVudW0gZXJyID0gKml0ZXI7Ci0gICAgICAgIG1faW50ZXJu
YWwtPm1fc3ludGhldGljRXJyb3JzLnJlbW92ZShpdGVyKTsKKyAgICAgICAgbV9zeW50aGV0aWNF
cnJvcnMucmVtb3ZlKGl0ZXIpOwogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIApAQCAtMTQ3
NywzMCArMTQ1OCwzMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhl
c2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpCiB7Ci0gICAgbV9pbnRlcm5hbC0+bV9zeW50aGV0
aWNFcnJvcnMuYWRkKGVycm9yKTsKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKIHsKLSAg
ICBtX2ludGVybmFsLT5tX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7CisgICAgbV9sYXllckNvbXBv
c2l0ZWQgPSB0cnVlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENo
YW5nZWQoKQogewogICAgIC8vIEZJWE1FOiBBbnkgYWNjZWxlcmF0ZWQgY29tcG9zaXRvciBuZWVk
cyB0byBiZSB0b2xkIHRvIHJlLXJlYWQgZnJvbSBoZXJlLgotICAgIG1faW50ZXJuYWwtPm1fbGF5
ZXJDb21wb3NpdGVkID0gZmFsc2U7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKIH0K
IAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+bV9sYXllckNvbXBvc2l0ZWQ7CisgICAgcmV0dXJuIG1fbGF5
ZXJDb21wb3NpdGVkOwogfQogCiBFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRF
eHRlbnNpb25zKCkKIHsKLSAgICBpZiAoIW1faW50ZXJuYWwtPm1fZXh0ZW5zaW9ucykKLSAgICAg
ICAgbV9pbnRlcm5hbC0+bV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRFF0
KTsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV9leHRlbnNpb25zLmdldCgpOworICAgIGlmICgh
bV9leHRlbnNpb25zKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5z
aW9uczNEUXQpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7CiB9CiAKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCg==
</data>
<flag name="review"
          id="96414"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101583</attachid>
            <date>2011-07-21 07:03:20 -0700</date>
            <delta_ts>2011-07-21 08:12:19 -0700</delta_ts>
            <desc>update ChangeLog</desc>
            <filename>part1.diff</filename>
            <type>text/plain</type>
            <size>22727</size>
            <attacher name="Andrew Wason">rectalogic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhZjBmMjVkLi5iYjRlNzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMDctMjEgIEFuZHJldyBXYXNvbiAgPHJlY3RhbG9naWNAcmVjdGFsb2dpYy5jb20+
CisKKyAgICAgICAgW1F0XSBBZG9wdCBleGlzdGluZyBHcmFwaGljc0NvbnRleHQzRCBtZW1iZXJz
IChwYXJ0IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NDg3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEV4aXN0aW5nIFdlYkdMIGxheW91dCB0ZXN0cyBzaG91bGQgdGVzdCB0aGlzLgorCisgICAgICAg
IFJlbW92ZSBHcmFwaGljc0NvbnRleHQzREludGVybmFsIG1lbWJlcnMgYW5kIHVzZSB0aGUgZXhp
c3RpbmcKKyAgICAgICAgY29ycmVzcG9uZGluZyBtZW1iZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0
M0QgaW5zdGVhZC4KKyAgICAgICAgTW92ZSBtb3N0IG9mIHRoZSBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsIGNvbnN0cnVjdG9yLCBkZXN0cnVjdG9yCisgICAgICAgIGFuZCB0aGUgcmVzaGFwZSgp
IG1ldGhvZCBpbnRvIEdyYXBoaWNzQ29udGV4dDNELgorICAgICAgICBUaGUgR3JhcGhpY3NDb250
ZXh0M0QgbWVtYmVycyB3aWxsIGJlIG5lZWRlZCB3aGVuIHdlIGFkb3B0CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50VG9UZXh0dXJl
TWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJv
dW5kaW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToK
KwogMjAxMS0wNy0yMCAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBNZWRpYVN0cmVhbSBBUEk6IFVwZGF0ZSB0aGUgdHJhY2tsaXN0cyB0byB0aGUgbGF0
ZXN0IHNwZWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCmluZGV4IDFkMGYyZjguLjVlNDdlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtOTAs
NiArOTAsOCBAQCBjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNEOwogI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKQogY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdM
OworI2VsaWYgUExBVEZPUk0oUVQpCitjbGFzcyBFeHRlbnNpb25zM0RRdDsKICNlbmRpZgogY2xh
c3MgSG9zdFdpbmRvdzsKIGNsYXNzIEltYWdlOwpAQCAtOTA3LDcgKzkwOSw3IEBAIHB1YmxpYzoK
ICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCiAgICAgdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgICBT
dHJpbmcgc291cmNlOwogICAgICAgICBTdHJpbmcgbG9nOwpAQCAtOTE1LDEwICs5MTcsMTUgQEAg
cHVibGljOgogICAgIH0gU2hhZGVyU291cmNlRW50cnk7CiAgICAgSGFzaE1hcDxQbGF0Zm9ybTNE
T2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT4gbV9zaGFkZXJTb3VyY2VNYXA7CiAKKyNpZiBQTEFU
Rk9STShRVCkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNEUXQ7CisgICAgT3duUHRyPEV4
dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7CisjZWxzZQogICAgIGZyaWVuZCBjbGFzcyBFeHRl
bnNpb25zM0RPcGVuR0w7CiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKIAogICAg
IE93blB0cjxFeHRlbnNpb25zM0RPcGVuR0w+IG1fZXh0ZW5zaW9uczsKKyNlbmRpZgogCiAgICAg
QXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhB
cnJheTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggNzJiMjg4Yi4uZDExNmJhZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHAKQEAgLTY2LDEzICs2NiwxMCBAQCBjbGFzcyBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsCiAjZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93KTsKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4
dDNEKiwgSG9zdFdpbmRvdyopOwogICAgIH5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7CiAK
LSAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBtX3ZhbGlkOyB9Ci0KICAgICBRR0xXaWRnZXQq
IGdldFZpZXdwb3J0R0xXaWRnZXQoKTsKLSAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUikKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spIGNvbnN0OwogI2VuZGlmCkBA
IC04MCwyMiArNzcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqLCBjb25z
dCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qLCBRV2lkZ2V0Kik7CiAgICAgUVJlY3RGIGJvdW5k
aW5nUmVjdCgpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9h
dHRyczsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIEhvc3RXaW5kb3cq
IG1faG9zdFdpbmRvdzsKICAgICBRR0xXaWRnZXQqIG1fZ2xXaWRnZXQ7CiAgICAgUUdMV2lkZ2V0
KiBtX3ZpZXdwb3J0R0xXaWRnZXQ7Ci0gICAgUVJlY3RGIG1fYm91bmRpbmdSZWN0OwotICAgIEdM
dWludCBtX3RleHR1cmU7Ci0gICAgR0x1aW50IG1fY2FudmFzRmJvOwotICAgIEdMdWludCBtX2N1
cnJlbnRGYm87Ci0gICAgR0x1aW50IG1fZGVwdGhCdWZmZXI7Ci0gICAgYm9vbCBtX2xheWVyQ29t
cG9zaXRlZDsKLSAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBpbnQ+IG1fc3ludGhldGljRXJyb3Jz
OwotCi0gICAgT3duUHRyPEV4dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBtX3ZhbGlkOwogfTsKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVT
MkNvbXBsaWFudCgpIGNvbnN0CkBAIC0xMDcsMTcgKzkyLDExIEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogI2VuZGlmCiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCi0gICAgOiBtX2F0
dHJzKGF0dHJzKQorR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dykKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9ob3N0V2luZG93KGhvc3RXaW5k
b3cpCiAgICAgLCBtX2dsV2lkZ2V0KDApCiAgICAgLCBtX3ZpZXdwb3J0R0xXaWRnZXQoMCkKLSAg
ICAsIG1fdGV4dHVyZSgwKQotICAgICwgbV9jYW52YXNGYm8oMCkKLSAgICAsIG1fY3VycmVudEZi
bygwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQotICAgICwgbV9sYXllckNvbXBvc2l0ZWQoZmFs
c2UpCi0gICAgLCBtX3ZhbGlkKHRydWUpCiB7CiAgICAgbV92aWV3cG9ydEdMV2lkZ2V0ID0gZ2V0
Vmlld3BvcnRHTFdpZGdldCgpOwogCkBAIC0xMjYsNjkgKzEwNSwxOSBAQCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dAogICAgIGVsc2UKICAgICAgICAgbV9nbFdpZGdldCA9IG5ldyBRR0xXaWRnZXQo
KTsKIAotICAgIGlmICghbV9nbFdpZGdldC0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIExPR19FUlJP
UigiR3JhcGhpY3NDb250ZXh0M0Q6IFFHTFdpZGdldCBpbml0aWFsaXphdGlvbiBmYWlsZWQuIik7
Ci0gICAgICAgIG1fdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IC8vIEdlb21ldHJ5IGNhbiBiZSBzZXQgdG8gemVybyBiZWNhdXNlIG1fZ2xXaWRnZXQgaXMgdXNl
ZCBvbmx5IGZvciBpdHMgUUdMQ29udGV4dC4KICAgICBtX2dsV2lkZ2V0LT5zZXRHZW9tZXRyeSgw
LCAwLCAwLCAwKTsKIAotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgbV9hdHRycy5z
dGVuY2lsID0gZmFsc2U7Ci0jZWxzZQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAg
IG1fYXR0cnMuZGVwdGggPSB0cnVlOwotI2VuZGlmCi0gICAgbV9hdHRycy5hbnRpYWxpYXMgPSBm
YWxzZTsKLQogICAgIG1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAKLSAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVu
R0xTaGltcygpOwotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotICAgIGlmICgh
c3VjY2VzcykgewotICAgICAgICBtX3ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBDcmVhdGUgYnVmZmVycyBmb3IgdGhlIGNhbnZhcyBGQk8uCi0gICAgZ2xH
ZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fY2FudmFzRmJvKTsKLQotICAgIGdsR2Vu
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19G
SUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyZihH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
TUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBnbFRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwot
ICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotCi0g
ICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygvKiBjb3Vu
dCAqLyAxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0KICNpZiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMikK
ICAgICBnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOwogICAgIGdsRW5hYmxlKEdMX1ZFUlRFWF9Q
Uk9HUkFNX1BPSU5UX1NJWkUpOwogI2VuZGlmCi0KLSAgICAvLyBCaW5kIGNhbnZhcyBGQk8gYW5k
IHNldCBpbml0aWFsIGNsZWFyIGNvbG9yIHRvIGJsYWNrLgotICAgIG1fY3VycmVudEZibyA9IG1f
Y2FudmFzRmJvOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9jYW52YXNGYm8pOwotICAgIGdsQ2xlYXJDb2xvcigwLjAsIDAuMCwgMC4wLCAw
LjApOwogfQogCiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbCgpCiB7Ci0gICAgbV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAgICBpZiAobV9n
bFdpZGdldC0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKLSAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVy
KTsKLSAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fY2FudmFzRmJvKTsKLSAgICB9
CiAgICAgZGVsZXRlIG1fZ2xXaWRnZXQ7CiAgICAgbV9nbFdpZGdldCA9IDA7CiB9CkBAIC0yMTEs
NjkgKzE0MCwxMiBAQCBzdGF0aWMgaW5saW5lIHF1aW50MzIgc3dhcEJnclRvUmdiKHF1aW50MzIg
cGl4ZWwpCiAgICAgcmV0dXJuICgocGl4ZWwgPDwgMTYpICYgMHhmZjAwMDApIHwgKChwaXhlbCA+
PiAxNikgJiAweGZmKSB8IChwaXhlbCAmIDB4ZmYwMGZmMDApOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAg
IGlmICh3aWR0aCA9PSBtX2JvdW5kaW5nUmVjdC53aWR0aCgpICYmIGhlaWdodCA9PSBtX2JvdW5k
aW5nUmVjdC5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9ib3VuZGluZ1JlY3Qg
PSBRUmVjdEYoUVBvaW50RigwLCAwKSwgUVNpemVGKHdpZHRoLCBoZWlnaHQpKTsKLQotICAgIG1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Ci0KLSAgICAvLyBDcmVhdGUgY29sb3IgYnVmZmVyCi0g
ICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJl
KTsKLSAgICBpZiAobV9hdHRycy5hbHBoYSkKLSAgICAgICAgZ2xUZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAvKiBsZXZlbCAqLyAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgd2lkdGgsIGhlaWdodCwgLyogYm9yZGVyICovIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgLyogZGF0YSAqLyAwKTsKLSAg
ICBlbHNlCi0gICAgICAgIGdsVGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgLyogbGV2ZWwgKi8gMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiwgd2lkdGgsIGhlaWdodCwg
LyogYm9yZGVyICovIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCAvKiBkYXRhICovIDApOwotICAgIGdsQmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotCi0gICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsK
LSAgICAgICAgLy8gQ3JlYXRlIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnMuCi0gICAgICAgIGds
QmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRo
QnVmZmVyKTsKLSNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotICAgICAgICBnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSNlbHNlCi0gICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR0xfREVQVEgyNF9TVEVOQ0lMOCwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3Rv
cmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKLSNlbmRpZgotICAgICAgICBnbEJpbmRS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgfQot
Ci0gICAgLy8gQ29uc3RydWN0IGNhbnZhcyBGQk8uCi0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NhbnZhc0Zibyk7Ci0gICAgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fdGV4dHVyZSwgMCk7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgIGdsRnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0jaWYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZm
ZXIpOwotI2VuZGlmCi0KLSAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUik7Ci0gICAgaWYgKHN0YXR1cyAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJHcmFwaGljc0NvbnRleHQzRDogQ2FudmFzIEZCTyBpbml0aWFsaXphdGlvbiBmYWlsZWQu
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgY2xlYXJGbGFncyA9IEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChtX2F0dHJzLmRlcHRoKQot
ICAgICAgICBjbGVhckZsYWdzIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklU
OwotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgIGNsZWFyRmxhZ3MgfD0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKLQotICAgIGdsQ2xlYXIoY2xlYXJGbGFn
cyk7Ci0gICAgZ2xGbHVzaCgpOwotfQotCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykgY29uc3QKIHsKICAgICBpZiAo
dGV4dHVyZU1hcHBlci0+aXNPcGVuR0xCYWNrZWQoKSkgewogICAgICAgICBUZXh0dXJlTWFwcGVy
R0wqIHRleG1hcEdMID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBl
cik7Ci0gICAgICAgIHRleG1hcEdMLT5kcmF3VGV4dHVyZShtX3RleHR1cmUsICFtX2F0dHJzLmFs
cGhhLCBGbG9hdFNpemUoMSwgMSksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywg
dHJ1ZSAvKiBmbGlwICovKTsKKyAgICAgICAgdGV4bWFwR0wtPmRyYXdUZXh0dXJlKG1fY29udGV4
dC0+bV90ZXh0dXJlLCAhbV9jb250ZXh0LT5tX2F0dHJzLmFscGhhLCBGbG9hdFNpemUoMSwgMSks
IHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgdHJ1ZSAvKiBmbGlwICovKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjgzLDIxICsxNTUsMjEgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0
ZXh0dXJlTWFwcGUKICAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKICAgICBwYWlu
dGVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwogCisgICAgY29uc3QgaW50IGhlaWdodCA9IG1fY29u
dGV4dC0+bV9jdXJyZW50SGVpZ2h0OworICAgIGNvbnN0IGludCB3aWR0aCA9IG1fY29udGV4dC0+
bV9jdXJyZW50V2lkdGg7CisKICAgICAvLyBBbHRlcm5hdGl2ZWx5IHJlYWQgcGl4ZWxzIHRvIGEg
bWVtb3J5IGJ1ZmZlci4KLSAgICBRSW1hZ2Ugb2Zmc2NyZWVuSW1hZ2UobV9ib3VuZGluZ1JlY3Qu
d2lkdGgoKSwgbV9ib3VuZGluZ1JlY3QuaGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7
CisgICAgUUltYWdlIG9mZnNjcmVlbkltYWdlKHdpZHRoLCBoZWlnaHQsIFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMik7CiAgICAgcXVpbnQzMiogaW1hZ2VQaXhlbHMgPSByZWludGVycHJldF9jYXN0PHF1
aW50MzIqPihvZmZzY3JlZW5JbWFnZS5iaXRzKCkpOwogCiAgICAgbV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fY2FudmFzRmJvKTsKLSAgICBnbFJlYWRQaXhlbHMoLyogeCAqLyAwLCAvKiB5ICov
IDAsIG1fYm91bmRpbmdSZWN0LndpZHRoKCksIG1fYm91bmRpbmdSZWN0LmhlaWdodCgpLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGlt
YWdlUGl4ZWxzKTsKLQotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgbV9jdXJyZW50RmJvKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fY29udGV4dC0+bV9mYm8pOworICAgIGdsUmVhZFBp
eGVscygvKiB4ICovIDAsIC8qIHkgKi8gMCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBpbWFnZVBpeGVscyk7
CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2NvbnRleHQtPm1fYm91bmRGQk8pOwogCiAgICAgLy8gT3BlbkdMIGdpdmVzIHVzIEFCR1Igb24g
MzIgYml0cywgYW5kIHdpdGggdGhlIG9yaWdpbiBhdCB0aGUgYm90dG9tIGxlZnQKICAgICAvLyBX
ZSBuZWVkIFJHQjMyIG9yIEFSR0IzMl9QTSwgd2l0aCB0aGUgb3JpZ2luIGF0IHRoZSB0b3AgbGVm
dC4KICAgICBxdWludDMyKiBwaXhlbHNTcmMgPSBpbWFnZVBpeGVsczsKLSAgICBjb25zdCBpbnQg
aGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihtX2JvdW5kaW5nUmVjdC5oZWlnaHQoKSk7Ci0gICAg
Y29uc3QgaW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihtX2JvdW5kaW5nUmVjdC53aWR0aCgp
KTsKICAgICBjb25zdCBpbnQgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7CiAgICAgZm9yIChpbnQg
cm93ID0gMDsgcm93IDwgaGFsZkhlaWdodDsgKytyb3cpIHsKICAgICAgICAgY29uc3QgaW50IHRh
cmdldElkeCA9IChoZWlnaHQgLSAxIC0gcm93KSAqIHdpZHRoOwpAQCAtMzI0LDcgKzE5Niw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlCiAKIFFSZWN0RiBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpib3VuZGluZ1JlY3QoKSBjb25zdAogewotICAgIHJldHVybiBtX2JvdW5kaW5nUmVjdDsK
KyAgICByZXR1cm4gUVJlY3RGKFFQb2ludEYoMCwgMCksIFFTaXplRihtX2NvbnRleHQtPm1fY3Vy
cmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU3R5
bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbiwgUVdpZGdldCogd2lkZ2V0KQpAQCAtMzM3LDcg
KzIwOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnQoUVBhaW50ZXIq
IHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvbkdyYXBoCiAgICAgLy8gd2l0aCBicm93c2VycyBP
cGVuR0wgY29udGV4dC4KICAgICBRR0xXaWRnZXQqIHZpZXdwb3J0R0xXaWRnZXQgPSBnZXRWaWV3
cG9ydEdMV2lkZ2V0KCk7CiAgICAgaWYgKHZpZXdwb3J0R0xXaWRnZXQgJiYgdmlld3BvcnRHTFdp
ZGdldCA9PSBtX3ZpZXdwb3J0R0xXaWRnZXQgJiYgdmlld3BvcnRHTFdpZGdldCA9PSBwYWludGVy
LT5kZXZpY2UoKSkgewotICAgICAgICB2aWV3cG9ydEdMV2lkZ2V0LT5kcmF3VGV4dHVyZShyZWN0
LCBtX3RleHR1cmUpOworICAgICAgICB2aWV3cG9ydEdMV2lkZ2V0LT5kcmF3VGV4dHVyZShyZWN0
LCBtX2NvbnRleHQtPm1fdGV4dHVyZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM0
NiwxMCArMjE4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludChRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlT3B0aW9uR3JhcGgKICAgICBxdWludDMyKiBpbWFn
ZVBpeGVscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMio+KG9mZnNjcmVlbkltYWdlLmJpdHMo
KSk7CiAKICAgICBtX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwotICAgIGdsQmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jYW52YXNGYm8pOworICAgIGds
QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0
LT5tX2Zibyk7CiAgICAgZ2xSZWFkUGl4ZWxzKC8qIHggKi8gMCwgLyogeSAqLyAwLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgaW1hZ2VQaXhlbHMpOwotCi0gICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2N1cnJlbnRGYm8pOworICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250
ZXh0LT5tX2JvdW5kRkJPKTsKIAogICAgIC8vIE9wZW5HTCBnaXZlcyB1cyBBQkdSIG9uIDMyIGJp
dHMsIGFuZCB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIGJvdHRvbSBsZWZ0CiAgICAgLy8gV2UgbmVl
ZCBSR0IzMiBvciBBUkdCMzJfUE0sIHdpdGggdGhlIG9yaWdpbiBhdCB0aGUgdG9wIGxlZnQuCkBA
IC0zODgsMTQgKzI1OSw3NyBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogfQogCiBHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wpCi0gICAgOiBtX2lzUmVzb3Vy
Y2VTYWZlKGZhbHNlKSwgbV9pbnRlcm5hbChhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbChhdHRycywgaG9zdFdpbmRvdykpKQorICAgIDogbV9jdXJyZW50V2lkdGgoMCkKKyAg
ICAsIG1fY3VycmVudEhlaWdodCgwKQorICAgICwgbV9pc1Jlc291cmNlU2FmZShmYWxzZSkKKyAg
ICAsIG1fYXR0cnMoYXR0cnMpCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fY29tcG9zaXRv
clRleHR1cmUoMCkKKyAgICAsIG1fZmJvKDApCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigw
KQorICAgICwgbV9sYXllckNvbXBvc2l0ZWQoZmFsc2UpCisgICAgLCBtX2ludGVybmFsQ29sb3JG
b3JtYXQoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAgICAsIG1fYWN0aXZlVGV4dHVyZSgwKQor
ICAgICwgbV9ib3VuZFRleHR1cmUwKDApCisgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCisgICAg
LCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIoMCkKKyAgICAsIG1faW50ZXJuYWwoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwodGhpcywgaG9zdFdpbmRvdykpKQogewotICAgIGlmICghbV9pbnRlcm5h
bC0+aXNWYWxpZCgpKQotICAgICAgICBtX2ludGVybmFsLmNsZWFyKCk7CisjaWYgZGVmaW5lZChR
VF9PUEVOR0xfRVNfMikKKyAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyNlbHNlCisgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisjZW5k
aWYKKyAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworCisgICAgaWYgKCFtX2ludGVybmFs
LT5tX2dsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJHcmFwaGljc0Nv
bnRleHQzRDogUUdMV2lkZ2V0IGluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgbV9p
bnRlcm5hbCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVl
OworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxpemVP
cGVuR0xTaGltcygpOworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICBtX2ludGVybmFsID0gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUgY2FudmFzIEZCTy4K
KyAgICBnbEdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9mYm8pOworCisgICAgZ2xH
ZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFH
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJm
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGds
VGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7
CisgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisK
KyAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKC8qIGNv
dW50ICovIDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisKKyAgICAvLyBCaW5kIGNhbnZhcyBG
Qk8gYW5kIHNldCBpbml0aWFsIGNsZWFyIGNvbG9yIHRvIGJsYWNrLgorICAgIG1fYm91bmRGQk8g
PSBtX2ZibzsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZmJvKTsKKyAgICBnbENsZWFyQ29sb3IoMC4wLCAwLjAsIDAuMCwgMC4wKTsKIH0K
IAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7CisgICAgbV9pbnRl
cm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBpZiAobV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+aXNWYWxpZCgpKSB7CisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4
dHVyZSk7CisgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgIH0K
IH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCgpCkBAIC00MDUsNyArMzM5LDcgQEAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
CiAKIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm1fdGV4dHVyZTsKKyAgICByZXR1cm4g
bV90ZXh0dXJlOwogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNDQ0
LDcgKzM3OCw1NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCkKICAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwogICAgIG1fY3VycmVudEhl
aWdodCA9IGhlaWdodDsKIAotICAgIG1faW50ZXJuYWwtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7
CisgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKworICAgIC8vIENy
ZWF0ZSBjb2xvciBidWZmZXIKKyAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIGlmIChtX2F0dHJzLmFscGhhKQorICAgICAgICBn
bFRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIC8qIGxldmVsICovIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAvKiBib3JkZXIgKi8gMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCAvKiBkYXRhICovIDApOworICAgIGVsc2UKKyAgICAgICAgZ2xUZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAvKiBsZXZlbCAqLyAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCLCB3aWR0aCwgaGVpZ2h0LCAvKiBib3JkZXIgKi8gMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIC8qIGRhdGEgKi8gMCk7CisgICAg
Z2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAgICBp
ZiAobV9hdHRycy5kZXB0aCkgeworICAgICAgICAvLyBDcmVhdGUgZGVwdGggYW5kIHN0ZW5jaWwg
YnVmZmVycy4KKyAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyNpZiBkZWZpbmVkKFFUX09QRU5H
TF9FU18yKQorICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0
aCwgaGVpZ2h0KTsKKyNlbHNlCisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAg
ICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgR0xfREVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0
KTsKKyNlbmRpZgorICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgMCk7CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0IGNhbnZhcyBGQk8u
CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgaWYgKG1fYXR0cnMuZGVw
dGgpCisgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworI2lmICFk
ZWZpbmVkKFFUX09QRU5HTF9FU18yKQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAg
IGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKworICAgIEdM
ZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSKTsKKyAgICBpZiAoc3RhdHVzICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBMT0dfRVJST1IoIkdyYXBoaWNzQ29udGV4dDNE
OiBDYW52YXMgRkJPIGluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGludCBjbGVhckZsYWdzID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JV
RkZFUl9CSVQ7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgIGNsZWFyRmxhZ3MgfD0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7CisgICAgaWYgKG1fYXR0cnMuc3Rl
bmNpbCkKKyAgICAgICAgY2xlYXJGbGFncyB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9C
VUZGRVJfQklUOworCisgICAgZ2xDbGVhcihjbGVhckZsYWdzKTsKKyAgICBnbEZsdXNoKCk7CiB9
CiAKIEludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkgY29uc3QKQEAgLTQ5Myw4ICs0NzQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
QnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9y
bTNET2JqZWN0IGJ1ZmZlcikKIHsKICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwotICAgIG1faW50ZXJuYWwtPm1fY3VycmVudEZibyA9IGJ1ZmZlciA/IGJ1ZmZlciA6
IG1faW50ZXJuYWwtPm1fY2FudmFzRmJvOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKHRhcmdldCwg
bV9pbnRlcm5hbC0+bV9jdXJyZW50RmJvKTsKKyAgICBtX2JvdW5kRkJPID0gYnVmZmVyID8gYnVm
ZmVyIDogbV9mYm87CisgICAgZ2xCaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBtX2JvdW5kRkJPKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQpAQCAtNzk5LDE1ICs3ODAsMTUg
QEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYKIAogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKIHsKLSAgICByZXR1
cm4gbV9pbnRlcm5hbC0+bV9hdHRyczsKKyAgICByZXR1cm4gbV9hdHRyczsKIH0KIAogR0MzRGVu
dW0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKIHsKLSAgICBpZiAobV9pbnRlcm5hbC0+
bV9zeW50aGV0aWNFcnJvcnMuc2l6ZSgpID4gMCkgewotICAgICAgICBMaXN0SGFzaFNldDxHQzNE
ZW51bT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5iZWdp
bigpOworICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7CisgICAgICAgIExp
c3RIYXNoU2V0PEdDM0RlbnVtPjo6aXRlcmF0b3IgaXRlciA9IG1fc3ludGhldGljRXJyb3JzLmJl
Z2luKCk7CiAgICAgICAgIEdDM0RlbnVtIGVyciA9ICppdGVyOwotICAgICAgICBtX2ludGVybmFs
LT5tX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIG1fc3ludGhldGljRXJy
b3JzLnJlbW92ZShpdGVyKTsKICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKQEAgLTE0Nzcs
MzAgKzE0NTgsMzAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmUpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNp
emVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQogewotICAgIG1faW50ZXJuYWwtPm1fc3ludGhldGlj
RXJyb3JzLmFkZChlcnJvcik7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCiB7Ci0gICAg
bV9pbnRlcm5hbC0+bV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOworICAgIG1fbGF5ZXJDb21wb3Np
dGVkID0gdHJ1ZTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFu
Z2VkKCkKIHsKICAgICAvLyBGSVhNRTogQW55IGFjY2VsZXJhdGVkIGNvbXBvc2l0b3IgbmVlZHMg
dG8gYmUgdG9sZCB0byByZS1yZWFkIGZyb20gaGVyZS4KLSAgICBtX2ludGVybmFsLT5tX2xheWVy
Q29tcG9zaXRlZCA9IGZhbHNlOworICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1faW50ZXJuYWwtPm1fbGF5ZXJDb21wb3NpdGVkOworICAgIHJldHVybiBtX2xheWVy
Q29tcG9zaXRlZDsKIH0KIAogRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0
ZW5zaW9ucygpCiB7Ci0gICAgaWYgKCFtX2ludGVybmFsLT5tX2V4dGVuc2lvbnMpCi0gICAgICAg
IG1faW50ZXJuYWwtPm1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RRdCk7
Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPm1fZXh0ZW5zaW9ucy5nZXQoKTsKKyAgICBpZiAoIW1f
ZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lv
bnMzRFF0KTsKKyAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwogfQogCiBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>