<?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>127181</bug_id>
          
          <creation_ts>2014-01-17 12:02:57 -0800</creation_ts>
          <short_desc>Remove unused TOUCH_ADJUSTMENT code.</short_desc>
          <delta_ts>2014-01-17 16:29:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>bunhere</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>969192</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-01-17 12:02:57 -0800</bug_when>
    <thetext>Nobody is using the TOUCH_ADJUSTMENT code on trunk anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969193</commentid>
    <comment_count>1</comment_count>
      <attachid>221480</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-01-17 12:06:06 -0800</bug_when>
    <thetext>Created attachment 221480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969316</commentid>
    <comment_count>2</comment_count>
      <attachid>221480</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-17 16:29:52 -0800</bug_when>
    <thetext>Comment on attachment 221480
Patch

Clearing flags on attachment: 221480

Committed r162231: &lt;http://trac.webkit.org/changeset/162231&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969317</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-17 16:29:55 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221480</attachid>
            <date>2014-01-17 12:06:06 -0800</date>
            <delta_ts>2014-01-17 16:29:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127181.diff</filename>
            <type>text/plain</type>
            <size>37352</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMjU2Y2MxLi5kNDY4NzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTQtMDEtMTcgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlbW92ZSB1bnVzZWQgVE9VQ0hfQURKVVNUTUVOVCBjb2RlLgorICAgICAgICA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTI3MTgxPgorCisgICAgICAgIFRoZXJlIGFyZSBubyBwb3J0cyB1c2lu
ZyB0aGUgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpIGZlYXR1cmUKKyAgICAgICAgYW55bW9yZSwg
c28gbnVrZSBpdCBmcm9tIG9yYml0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAqIHBhZ2Uv
RXZlbnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5pbjoKKyAgICAgICAgKiBw
YWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9Ub3VjaEFk
anVzdG1lbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
cy5pZGw6CisKIDIwMTQtMDEtMTcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CiAKICAgICAgICAgTW9yZSBub24tTWFjIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCA2ZDIyYTQ5Li5kODhkMmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCkBAIC05MiwxMCArOTIsNiBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKLSNpZiBFTkFCTEUoVE9V
Q0hfQURKVVNUTUVOVCkKLSNpbmNsdWRlICJUb3VjaEFkanVzdG1lbnQuaCIKLSNlbmRpZgotCiAj
aWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRJbnN0YW5jZS5oIgpAQCAtMjYyNSw0MyArMjYyMSw2IEBAIHZvaWQgRXZlbnRIYW5kbGVy
OjpkZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIoTm9kZSogc3RhcnROb2RlLCBXaGVlbEV2ZW50KiB3
aGVlbEV2CiAgICAgICAgIG1fcHJldmlvdXNXaGVlbFNjcm9sbGVkRWxlbWVudCA9IHN0b3BFbGVt
ZW50OwogfQogCi0jaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCi1ib29sIEV2ZW50SGFuZGxl
cjo6YmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3VjaENl
bnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwg
Tm9kZSomIHRhcmdldE5vZGUpCi17Ci0gICAgSW50UG9pbnQgaGl0VGVzdFBvaW50ID0gbV9mcmFt
ZS52aWV3KCktPndpbmRvd1RvQ29udGVudHModG91Y2hDZW50ZXIpOwotICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdEF0UG9pbnQoaGl0VGVzdFBvaW50LCBIaXRUZXN0UmVx
dWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCB0b3VjaFJhZGl1cyk7Ci0K
LSAgICBJbnRSZWN0IHRvdWNoUmVjdCh0b3VjaENlbnRlciAtIHRvdWNoUmFkaXVzLCB0b3VjaFJh
ZGl1cyArIHRvdWNoUmFkaXVzKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgYWJsZSB0byBo
YW5kbGUgdGFyZ2V0Tm9kZSBiZWluZyBhIHNoYWRvdyBET00gbm9kZSB0byBhdm9pZCBwZXJmb3Jt
aW5nIHVuY2Vzc2FyeSBoaXQgdGVzdHMKLSAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSBmdXJ0aGVy
IHByb2Nlc3Npbmcgb24gdGhlIG5vZGUgaXMgcmVxdWlyZWQuIFJldHVybmluZyB0aGUgc2hhZG93
IGFuY2VzdG9yIHByZXZlbnRzIGEKLSAgICAvLyByZWdyZXNzaW9uIGluIHRvdWNoYWRqdXN0bWVu
dC9odG1sLWxhYmVsLmh0bWwuIFNvbWUgcmVmaW5lbWVudCBpcyByZXF1aXJlZCB0byB0ZXN0aW5n
L2ludGVybmFscyB0bwotICAgIC8vIGhhbmRsZSB0YXJnZXROb2RlIGJlaW5nIGEgc2hhZG93IERP
TSBub2RlLiAKLSAgICBib29sIHN1Y2Nlc3MgPSBmaW5kQmVzdENsaWNrYWJsZUNhbmRpZGF0ZSh0
YXJnZXROb2RlLCB0YXJnZXRQb2ludCwgdG91Y2hDZW50ZXIsIHRvdWNoUmVjdCwgcmVzdWx0LnJl
Y3RCYXNlZFRlc3RSZXN1bHQoKSk7Ci0gICAgaWYgKHN1Y2Nlc3MgJiYgdGFyZ2V0Tm9kZSkKLSAg
ICAgICAgdGFyZ2V0Tm9kZSA9IHRhcmdldE5vZGUtPmRlcHJlY2F0ZWRTaGFkb3dBbmNlc3Rvck5v
ZGUoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OmJlc3RD
b250ZXh0TWVudU5vZGVGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwg
Y29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwgTm9kZSom
IHRhcmdldE5vZGUpCi17Ci0gICAgSW50UG9pbnQgaGl0VGVzdFBvaW50ID0gbV9mcmFtZS52aWV3
KCktPndpbmRvd1RvQ29udGVudHModG91Y2hDZW50ZXIpOwotICAgIEhpdFRlc3RSZXN1bHQgcmVz
dWx0ID0gaGl0VGVzdFJlc3VsdEF0UG9pbnQoaGl0VGVzdFBvaW50LCBIaXRUZXN0UmVxdWVzdDo6
UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCB0b3VjaFJhZGl1cyk7Ci0KLSAgICBJ
bnRSZWN0IHRvdWNoUmVjdCh0b3VjaENlbnRlciAtIHRvdWNoUmFkaXVzLCB0b3VjaFJhZGl1cyAr
IHRvdWNoUmFkaXVzKTsKLSAgICByZXR1cm4gZmluZEJlc3RDb250ZXh0TWVudUNhbmRpZGF0ZSh0
YXJnZXROb2RlLCB0YXJnZXRQb2ludCwgdG91Y2hDZW50ZXIsIHRvdWNoUmVjdCwgcmVzdWx0LnJl
Y3RCYXNlZFRlc3RSZXN1bHQoKSk7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpiZXN0Wm9vbWFi
bGVBcmVhRm9yVG91Y2hQb2ludChjb25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvbnN0IElu
dFNpemUmIHRvdWNoUmFkaXVzLCBJbnRSZWN0JiB0YXJnZXRBcmVhLCBOb2RlKiYgdGFyZ2V0Tm9k
ZSkKLXsKLSAgICBJbnRQb2ludCBoaXRUZXN0UG9pbnQgPSBtX2ZyYW1lLnZpZXcoKS0+d2luZG93
VG9Db250ZW50cyh0b3VjaENlbnRlcik7Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRU
ZXN0UmVzdWx0QXRQb2ludChoaXRUZXN0UG9pbnQsIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8
IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dTaGFkb3dD
b250ZW50LCB0b3VjaFJhZGl1cyk7Ci0KLSAgICBJbnRSZWN0IHRvdWNoUmVjdCh0b3VjaENlbnRl
ciAtIHRvdWNoUmFkaXVzLCB0b3VjaFJhZGl1cyArIHRvdWNoUmFkaXVzKTsKLSAgICByZXR1cm4g
ZmluZEJlc3Rab29tYWJsZUFyZWEodGFyZ2V0Tm9kZSwgdGFyZ2V0QXJlYSwgdG91Y2hDZW50ZXIs
IHRvdWNoUmVjdCwgcmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKSk7Ci19Ci0jZW5kaWYKLQog
I2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0
TWVudUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAppbmRleCAxZTkxNDQ2Li5mNWE0ZmNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKQEAgLTIxNSwxMiArMjE1LDYgQEAgcHVibGljOgogICAgIHZvaWQgZGVm
YXVsdFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqLCBUb3VjaEV2ZW50Kik7CiAjZW5kaWYKIAotI2lm
IEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQotICAgIGJvb2wgYmVzdENsaWNrYWJsZU5vZGVGb3JU
b3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91
Y2hSYWRpdXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwgTm9kZSomIHRhcmdldE5vZGUpOwotICAg
IGJvb2wgYmVzdENvbnRleHRNZW51Tm9kZUZvclRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRv
dWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBv
aW50LCBOb2RlKiYgdGFyZ2V0Tm9kZSk7Ci0gICAgYm9vbCBiZXN0Wm9vbWFibGVBcmVhRm9yVG91
Y2hQb2ludChjb25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNpemUmIHRvdWNo
UmFkaXVzLCBJbnRSZWN0JiB0YXJnZXRBcmVhLCBOb2RlKiYgdGFyZ2V0Tm9kZSk7Ci0jZW5kaWYK
LQogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZl
bnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVF
dmVudEZvcktleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5p
biBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4KaW5kZXggYTM3NDE3Yy4uMTcxODk2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCkBAIC0xNTEsMTEgKzE1MSw2IEBAIHJlcXVlc3RB
bmltYXRpb25GcmFtZUVuYWJsZWQgaW5pdGlhbD10cnVlCiBkZXZpY2VTdXBwb3J0c1RvdWNoIGlu
aXRpYWw9ZmFsc2UKIGRldmljZVN1cHBvcnRzTW91c2UgaW5pdGlhbD10cnVlCiAKLSMgRm9yIHRv
dWNoIGFkanVzdG1lbnQgdG8gYXBwbHksIHRoZSBjb21waWxlIG9wdGlvbiBUT1VDSF9BREpVU1RN
RU5UIG11c3QgYWxzbyBiZSBlbmFibGVkLgotIyBUaGlzIHNldHRpbmcgYWRkcyBhIG1lYW5zIHRv
IGR5bmFtaWNhbGx5IGRpc2FibGUgdGhlIGZlYXR1cmUgYXQgcnVudGltZSBvbiBzeXN0ZW1zIHdp
dGgKLSMgc3VwcG9ydCBmb3IgdG91Y2ggYWRqdXN0bWVudC4KLXRvdWNoQWRqdXN0bWVudEVuYWJs
ZWQgaW5pdGlhbD10cnVlCi0KIGZpeGVkUG9zaXRpb25DcmVhdGVzU3RhY2tpbmdDb250ZXh0IGlu
aXRpYWw9ZGVmYXVsdEZpeGVkUG9zaXRpb25DcmVhdGVzU3RhY2tpbmdDb250ZXh0CiBzeW5jWEhS
SW5Eb2N1bWVudHNFbmFibGVkIGluaXRpYWw9dHJ1ZQogY29va2llRW5hYmxlZCBpbml0aWFsPXRy
dWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjU4OGNiZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RvdWNoQWRqdXN0bWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MDMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVG91Y2hBZGp1c3Rt
ZW50LmgiCi0KLSNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgi
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1l
T3duZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxMYWJlbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJ
bnRQb2ludC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5j
bHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNoYWRvd1Jv
b3QuaCIKLSNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgVG91Y2hBZGp1c3RtZW50IHsKLQot
Y29uc3QgZmxvYXQgemVyb1RvbGVyYW5jZSA9IDFlLTZmOwotCi0vLyBDbGFzcyBmb3IgcmVtZW1i
ZXJpbmcgYWJzb2x1dGUgcXVhZHMgb2YgYSB0YXJnZXQgbm9kZSBhbmQgd2hhdCBub2RlIHRoZXkg
cmVwcmVzZW50LgotY2xhc3MgU3VidGFyZ2V0R2VvbWV0cnkgewotcHVibGljOgotICAgIFN1YnRh
cmdldEdlb21ldHJ5KE5vZGUqIG5vZGUsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKLSAgICAgICAg
OiBtX25vZGUobm9kZSkKLSAgICAgICAgLCBtX3F1YWQocXVhZCkKLSAgICB7IH0KLQotICAgIE5v
ZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICBGbG9hdFF1YWQgcXVhZCgp
IGNvbnN0IHsgcmV0dXJuIG1fcXVhZDsgfQotICAgIEludFJlY3QgYm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX3F1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsgfQotCi1wcml2YXRlOgot
ICAgIE5vZGUqIG1fbm9kZTsKLSAgICBGbG9hdFF1YWQgbV9xdWFkOwotfTsKLQotdHlwZWRlZiBW
ZWN0b3I8U3VidGFyZ2V0R2VvbWV0cnk+IFN1YnRhcmdldEdlb21ldHJ5TGlzdDsKLXR5cGVkZWYg
Ym9vbCAoKk5vZGVGaWx0ZXIpKE5vZGUqKTsKLXR5cGVkZWYgdm9pZCAoKkFwcGVuZFN1YnRhcmdl
dHNGb3JOb2RlKShOb2RlKiwgU3VidGFyZ2V0R2VvbWV0cnlMaXN0Jik7Ci10eXBlZGVmIGZsb2F0
ICgqRGlzdGFuY2VGdW5jdGlvbikoY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgU3VidGFyZ2V0R2VvbWV0cnkmKTsKLQotLy8gVGFrZXMgbm9uLWNvbnN0IE5vZGUqIGJlY2F1
c2UgaXNDb250ZW50RWRpdGFibGUgaXMgYSBub24tY29uc3QgZnVuY3Rpb24uCi1ib29sIG5vZGVS
ZXNwb25kc1RvVGFwR2VzdHVyZShOb2RlKiBub2RlKQotewotICAgIGlmIChub2RlLT53aWxsUmVz
cG9uZFRvTW91c2VDbGlja0V2ZW50cygpIHx8IG5vZGUtPndpbGxSZXNwb25kVG9Nb3VzZU1vdmVF
dmVudHMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gQWNjZXB0IG5vZGVzIHRoYXQg
aGFzIGEgQ1NTIGVmZmVjdCB3aGVuIHRvdWNoZWQuCi0gICAgaWYgKG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwotICAg
ICAgICBpZiAoZWxlbWVudC0+aXNNb3VzZUZvY3VzYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGlmIChlbGVtZW50LT5jaGlsZHJlbkFmZmVjdGVkQnlBY3RpdmUoKSB8
fCBlbGVtZW50LT5jaGlsZHJlbkFmZmVjdGVkQnlIb3ZlcigpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGlmIChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBub2RlLT5y
ZW5kZXJTdHlsZSgpKSB7Ci0gICAgICAgIGlmIChyZW5kZXJTdHlsZS0+YWZmZWN0ZWRCeUFjdGl2
ZSgpIHx8IHJlbmRlclN0eWxlLT5hZmZlY3RlZEJ5SG92ZXIoKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgbm9kZUlzWm9vbVRh
cmdldChOb2RlKiBub2RlKQotewotICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+
aXNTaGFkb3dSb290KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChub2Rl
LT5yZW5kZXJlcigpKTsKLSAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNCb3goKTsKLX0K
LQotYm9vbCBwcm92aWRlc0NvbnRleHRNZW51SXRlbXMoTm9kZSogbm9kZSkKLXsKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIHRyaWVzIHRvIG1hdGNoIHRoZSBub2RlcyB0aGF0IHJlY2VpdmUgc3BlY2lh
bCBjb250ZXh0LW1lbnUgaXRlbXMgaW4KLSAgICAvLyBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnBv
cHVsYXRlKCksIGFuZCBzaG91bGQgYmUga2VwdCB1cHRvZGF0ZSB3aXRoIHRob3NlLgotICAgIEFT
U0VSVChub2RlLT5yZW5kZXJlcigpIHx8IG5vZGUtPmlzU2hhZG93Um9vdCgpKTsKLSAgICBpZiAo
IW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobm9kZS0+
aXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG5vZGUt
PmlzTGluaygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobm9kZS0+cmVuZGVyZXIo
KS0+aXNJbWFnZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobm9kZS0+cmVuZGVy
ZXIoKS0+aXNNZWRpYSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobm9kZS0+cmVu
ZGVyZXIoKS0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGNvbnRl
eHQgbWVudSBnZXN0dXJlIHdpbGwgdHJpZ2dlciBhIHNlbGVjdGlvbiBhbGwgc2VsZWN0YWJsZSBu
b2RlcyBhcmUgdmFsaWQgdGFyZ2V0cy4KLSAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmZy
YW1lKCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTZWxlY3RPbkNvbnRleHR1YWxNZW51Q2xp
Y2soKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAvLyBPbmx5IHRoZSBzZWxl
Y3RlZCBwYXJ0IG9mIHRoZSByZW5kZXJlciBpcyBhIHZhbGlkIHRhcmdldCwgYnV0IHRoaXMgd2ls
bCBiZSBjb3JyZWN0ZWQgaW4KLSAgICAgICAgLy8gYXBwZW5kQ29udGV4dFN1YnRhcmdldHNGb3JO
b2RlLgotICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+c2VsZWN0aW9uU3RhdGUoKSAhPSBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kUXVh
ZHNUb1N1YnRhcmdldExpc3QoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBOb2RlKiBub2RlLCBT
dWJ0YXJnZXRHZW9tZXRyeUxpc3QmIHN1YnRhcmdldHMpCi17Ci0gICAgVmVjdG9yPEZsb2F0UXVh
ZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcXVhZHMuYmVnaW4oKTsKLSAgICBjb25zdCBWZWN0b3I8
RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcXVhZHMuZW5kKCk7Ci0gICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgc3VidGFyZ2V0cy5hcHBlbmQoU3VidGFyZ2V0R2Vv
bWV0cnkobm9kZSwgKml0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRCYXNpY1N1
YnRhcmdldHNGb3JOb2RlKE5vZGUqIG5vZGUsIFN1YnRhcmdldEdlb21ldHJ5TGlzdCYgc3VidGFy
Z2V0cykKLXsKLSAgICAvLyBOb2RlIGd1YXJhbnRlZWQgdG8gaGF2ZSByZW5kZXJlciBkdWUgdG8g
Y2hlY2sgaW4gbm9kZSBmaWx0ZXIuCi0gICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkpOwotCi0g
ICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgbm9kZS0+cmVuZGVyZXIoKS0+YWJzb2x1
dGVRdWFkcyhxdWFkcyk7Ci0KLSAgICBhcHBlbmRRdWFkc1RvU3VidGFyZ2V0TGlzdChxdWFkcywg
bm9kZSwgc3VidGFyZ2V0cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRDb250ZXh0
U3VidGFyZ2V0c0Zvck5vZGUoTm9kZSogbm9kZSwgU3VidGFyZ2V0R2VvbWV0cnlMaXN0JiBzdWJ0
YXJnZXRzKQotewotICAgIC8vIFRoaXMgaXMgYSB2YXJpYW50IG9mIGFwcGVuZEJhc2ljU3VidGFy
Z2V0c0Zvck5vZGUgdGhhdCBhZGRzIHNwZWNpYWwgc3VidGFyZ2V0cyBmb3IKLSAgICAvLyBzZWxl
Y3RlZCBvciBhdXRvLXNlbGVjdGFibGUgcGFydHMgb2YgdGV4dCBub2Rlcy4KLSAgICBBU1NFUlQo
bm9kZS0+cmVuZGVyZXIoKSk7Ci0KLSAgICBpZiAoIW5vZGUtPmlzVGV4dE5vZGUoKSkKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZEJhc2ljU3VidGFyZ2V0c0Zvck5vZGUobm9kZSwgc3VidGFyZ2V0cyk7
Ci0KLSAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHQqPihub2Rl
KTsKLSAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0ZXh0Tm9kZS0+cmVuZGVyZXIoKTsK
LQotICAgIGlmICh0ZXh0UmVuZGVyZXItPmZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91
bGRTZWxlY3RPbkNvbnRleHR1YWxNZW51Q2xpY2soKSkgewotICAgICAgICAvLyBNYWtlIHN1YnRh
cmdldHMgb3V0IG9mIGV2ZXJ5IHdvcmQuCi0gICAgICAgIFN0cmluZyB0ZXh0VmFsdWUgPSB0ZXh0
Tm9kZS0+ZGF0YSgpOwotICAgICAgICBUZXh0QnJlYWtJdGVyYXRvciogd29yZEl0ZXJhdG9yID0g
d29yZEJyZWFrSXRlcmF0b3IodGV4dFZhbHVlLmNoYXJhY3RlcnMoKSwgdGV4dFZhbHVlLmxlbmd0
aCgpKTsKLSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB0ZXh0QnJlYWtGaXJzdCh3b3JkSXRlcmF0
b3IpOwotICAgICAgICBpZiAobGFzdE9mZnNldCA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaW50IG9mZnNldDsKLSAgICAgICAgd2hpbGUgKChvZmZzZXQgPSB0ZXh0QnJlYWtO
ZXh0KHdvcmRJdGVyYXRvcikpICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAoaXNXb3JkVGV4dEJy
ZWFrKHdvcmRJdGVyYXRvcikpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBx
dWFkcyA9IHRleHRSZW5kZXJlci0+YWJzb2x1dGVRdWFkc0ZvclJhbmdlKGxhc3RPZmZzZXQsIG9m
ZnNldCk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kUXVhZHNUb1N1YnRhcmdldExpc3QocXVhZHMs
IHRleHROb2RlLCBzdWJ0YXJnZXRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxhc3RP
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAodGV4
dFJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9u
ZSkKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRCYXNpY1N1YnRhcmdldHNGb3JOb2RlKG5vZGUs
IHN1YnRhcmdldHMpOwotICAgICAgICAvLyBJZiBzZWxlY3RlZCwgbWFrZSBzdWJ0YXJnZXRzIG91
dCBvZiBvbmx5IHRoZSBzZWxlY3RlZCBwYXJ0IG9mIHRoZSB0ZXh0LgotICAgICAgICBpbnQgc3Rh
cnRQb3MsIGVuZFBvczsKLSAgICAgICAgc3dpdGNoICh0ZXh0UmVuZGVyZXItPnNlbGVjdGlvblN0
YXRlKCkpIHsKLSAgICAgICAgY2FzZSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZToKLSAg
ICAgICAgICAgIHN0YXJ0UG9zID0gMDsKLSAgICAgICAgICAgIGVuZFBvcyA9IHRleHRSZW5kZXJl
ci0+dGV4dExlbmd0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25TdGFydDoKLSAgICAgICAgICAgIHRleHRSZW5kZXJlci0+c2VsZWN0
aW9uU3RhcnRFbmQoc3RhcnRQb3MsIGVuZFBvcyk7Ci0gICAgICAgICAgICBlbmRQb3MgPSB0ZXh0
UmVuZGVyZXItPnRleHRMZW5ndGgoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kOgotICAgICAgICAgICAgdGV4dFJlbmRlcmVyLT5z
ZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKLSAgICAgICAgICAgIHN0YXJ0UG9z
ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uQm90aDoKLSAgICAgICAgICAgIHRleHRSZW5kZXJlci0+c2VsZWN0aW9uU3RhcnRFbmQo
c3RhcnRQb3MsIGVuZFBvcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzID0gdGV4dFJlbmRlcmVy
LT5hYnNvbHV0ZVF1YWRzRm9yUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7Ci0gICAgICAgIGFwcGVu
ZFF1YWRzVG9TdWJ0YXJnZXRMaXN0KHF1YWRzLCB0ZXh0Tm9kZSwgc3VidGFyZ2V0cyk7Ci0gICAg
fQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kWm9vbWFibGVTdWJ0YXJnZXRzKE5vZGUq
IG5vZGUsIFN1YnRhcmdldEdlb21ldHJ5TGlzdCYgc3VidGFyZ2V0cykKLXsKLSAgICBSZW5kZXJC
b3gqIHJlbmRlcmVyID0gdG9SZW5kZXJCb3gobm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgQVNTRVJU
KHJlbmRlcmVyKTsKLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIEZsb2F0UmVj
dCBib3JkZXJCb3hSZWN0ID0gcmVuZGVyZXItPmJvcmRlckJveFJlY3QoKTsKLSAgICBGbG9hdFJl
Y3QgY29udGVudEJveFJlY3QgPSByZW5kZXJlci0+Y29udGVudEJveFJlY3QoKTsKLSAgICBxdWFk
cy5hcHBlbmQocmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoYm9yZGVyQm94UmVjdCkpOwot
ICAgIGlmIChib3JkZXJCb3hSZWN0ICE9IGNvbnRlbnRCb3hSZWN0KQotICAgICAgICBxdWFkcy5h
cHBlbmQocmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoY29udGVudEJveFJlY3QpKTsKLSAg
ICAvLyBGSVhNRTogRm9yIFJlbmRlckJsb2NrcywgYWRkIGNvbHVtbiBib3hlcyBhbmQgY29udGVu
dCBib3hlcyBjbGVhcmVkIGZvciBmbG9hdHMuCi0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBxdWFkcy5iZWdpbigpOwotICAgIGNvbnN0IFZlY3RvcjxGbG9hdFF1
YWQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBxdWFkcy5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBzdWJ0YXJnZXRzLmFwcGVuZChTdWJ0YXJnZXRHZW9tZXRyeShu
b2RlLCAqaXQpKTsKLX0KLQotc3RhdGljIGlubGluZSBOb2RlKiBwYXJlbnRTaGFkb3dIb3N0T3JP
d25lcihjb25zdCBOb2RlKiBub2RlKQotewotICAgIGlmIChOb2RlKiBhbmNlc3RvciA9IG5vZGUt
PnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwotICAg
IGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gdG9Eb2N1bWVudChu
b2RlKS0+b3duZXJFbGVtZW50KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIENvbXBpbGVzIGEg
bGlzdCBvZiBzdWJ0YXJnZXRzIG9mIGFsbCB0aGUgcmVsZXZhbnQgdGFyZ2V0IG5vZGVzLgotdm9p
ZCBjb21waWxlU3VidGFyZ2V0TGlzdChjb25zdCBOb2RlTGlzdEhhc2hTZXQmIGludGVyc2VjdGVk
Tm9kZXMsIFN1YnRhcmdldEdlb21ldHJ5TGlzdCYgc3VidGFyZ2V0cywgTm9kZUZpbHRlciBub2Rl
RmlsdGVyLCBBcHBlbmRTdWJ0YXJnZXRzRm9yTm9kZSBhcHBlbmRTdWJ0YXJnZXRzRm9yTm9kZSkK
LXsKLSAgICAvLyBGaW5kIGNhbmRpZGF0ZXMgcmVzcG9uZGluZyB0byB0YXAgZ2VzdHVyZSBldmVu
dHMgaW4gTyhuKSB0aW1lLgotICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiByZXNwb25kZXJNYXA7
Ci0gICAgSGFzaFNldDxOb2RlKj4gYW5jZXN0b3JzVG9SZXNwb25kZXJzU2V0OwotICAgIFZlY3Rv
cjxOb2RlKj4gY2FuZGlkYXRlczsKLSAgICBIYXNoU2V0PE5vZGUqPiBlZGl0YWJsZUFuY2VzdG9y
czsKLQotICAgIC8vIEEgbm9kZSBtYXRjaGluZyB0aGUgTm9kZUZpbHRlciBpcyBjYWxsZWQgYSBy
ZXNwb25kZXIuIENhbmRpZGF0ZSBub2RlcyBtdXN0IGVpdGhlciBiZSBhCi0gICAgLy8gcmVzcG9u
ZGVyIG9yIGhhdmUgYW4gYW5jZXN0b3IgdGhhdCBpcyBhIHJlc3BvbmRlci4KLSAgICAvLyBUaGlz
IGl0ZXJhdGlvbiB0ZXN0cyBhbGwgYW5jZXN0b3JzIGF0IG1vc3Qgb25jZSBieSBjYWNoaW5nIGVh
cmxpZXIgcmVzdWx0cy4KLSAgICBOb2RlTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGludGVyc2VjdGVkTm9kZXMuZW5kKCk7Ci0gICAgZm9yIChOb2RlTGlzdEhhc2hTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaW50ZXJzZWN0ZWROb2Rlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgTm9kZSogY29uc3Qgbm9kZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgVmVjdG9y
PE5vZGUqPiB2aXNpdGVkTm9kZXM7Ci0gICAgICAgIE5vZGUqIHJlc3BvbmRpbmdOb2RlID0gMDsK
LSAgICAgICAgZm9yIChOb2RlKiB2aXNpdGVkTm9kZSA9IG5vZGU7IHZpc2l0ZWROb2RlOyB2aXNp
dGVkTm9kZSA9IHZpc2l0ZWROb2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpIHsKLSAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHJlc3VsdCBmb3IgYSBjb21tb24g
YW5jZXN0b3IgZnJvbSBhbm90aGVyIGNhbmRpZGF0ZS4KLSAgICAgICAgICAgIHJlc3BvbmRpbmdO
b2RlID0gcmVzcG9uZGVyTWFwLmdldCh2aXNpdGVkTm9kZSk7Ci0gICAgICAgICAgICBpZiAocmVz
cG9uZGluZ05vZGUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB2aXNpdGVk
Tm9kZXMuYXBwZW5kKHZpc2l0ZWROb2RlKTsKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBu
b2RlIGZpbHRlciBhcHBsaWVzLCB3aGljaCB3b3VsZCBtZWFuIHdlIGhhdmUgZm91bmQgYSByZXNw
b25kaW5nIG5vZGUuCi0gICAgICAgICAgICBpZiAobm9kZUZpbHRlcih2aXNpdGVkTm9kZSkpIHsK
LSAgICAgICAgICAgICAgICByZXNwb25kaW5nTm9kZSA9IHZpc2l0ZWROb2RlOwotICAgICAgICAg
ICAgICAgIC8vIENvbnRpbnVlIHRoZSBpdGVyYXRpb24gdG8gY29sbGVjdCB0aGUgYW5jZXN0b3Jz
IG9mIHRoZSByZXNwb25kZXIsIHdoaWNoIHdlIHdpbGwgbmVlZCBsYXRlci4KLSAgICAgICAgICAg
ICAgICBmb3IgKHZpc2l0ZWROb2RlID0gcGFyZW50U2hhZG93SG9zdE9yT3duZXIodmlzaXRlZE5v
ZGUpOyB2aXNpdGVkTm9kZTsgdmlzaXRlZE5vZGUgPSBwYXJlbnRTaGFkb3dIb3N0T3JPd25lcih2
aXNpdGVkTm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSBhbmNlc3RvcnNUb1Jlc3BvbmRlcnNTZXQuYWRkKHZpc2l0ZWROb2Rl
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBJbnNlcnQg
dGhlIGRldGVjdGVkIHJlc3BvbmRlciBmb3IgYWxsIHRoZSB2aXNpdGVkIG5vZGVzLgotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdmlzaXRlZE5vZGVzLnNpemUoKTsgaisrKQotICAg
ICAgICAgICAgcmVzcG9uZGVyTWFwLmFkZCh2aXNpdGVkTm9kZXNbal0sIHJlc3BvbmRpbmdOb2Rl
KTsKLQotICAgICAgICBpZiAocmVzcG9uZGluZ05vZGUpCi0gICAgICAgICAgICBjYW5kaWRhdGVz
LmFwcGVuZChub2RlKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBjb21waWxlIHRoZSBsaXN0IG9mIGNv
bXBvbmVudCBhYnNvbHV0ZSBxdWFkcyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBib3VuZGluZyByZWN0
Ci0gICAgLy8gdG8gYmUgYWJsZSB0byBwZXJmb3JtIGJldHRlciBoaXQtdGVzdGluZyBvbiBpbmxp
bmUgbGlua3Mgb24gbGluZS1icmVha3MuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gY2FuZGlkYXRl
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZXNbaV07Ci0gICAgICAgIC8vIFNraXAg
bm9kZXMgd2hvJ3MgcmVzcG9uZGVycyBhcmUgYW5jZXN0b3JzIG9mIG90aGVyIHJlc3BvbmRlcnMu
IFRoaXMgZ2l2ZXMgcHJlZmVyZW5jZSB0bwotICAgICAgICAvLyB0aGUgaW5uZXItbW9zdCBldmVu
dC1oYW5kbGVycy4gU28gdGhhdCBhIGxpbmsgaXMgYWx3YXlzIHByZWZlcnJlZCBldmVuIHdoZW4g
Y29udGFpbmVkCi0gICAgICAgIC8vIGluIGFuIGVsZW1lbnQgdGhhdCBtb25pdG9ycyBhbGwgY2xp
Y2stZXZlbnRzLgotICAgICAgICBOb2RlKiByZXNwb25kaW5nTm9kZSA9IHJlc3BvbmRlck1hcC5n
ZXQoY2FuZGlkYXRlKTsKLSAgICAgICAgQVNTRVJUKHJlc3BvbmRpbmdOb2RlKTsKLSAgICAgICAg
aWYgKGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldC5jb250YWlucyhyZXNwb25kaW5nTm9kZSkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gQ29uc29saWRhdGUgYm91bmRzIGZvciBl
ZGl0YWJsZSBjb250ZW50LgotICAgICAgICBpZiAoZWRpdGFibGVBbmNlc3RvcnMuY29udGFpbnMo
Y2FuZGlkYXRlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY2FuZGlkYXRl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9
IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IGNhbmRpZGF0ZS0+cGFyZW50
T3JTaGFkb3dIb3N0Tm9kZSgpOwotICAgICAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQt
PmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IHBh
cmVudDsKLSAgICAgICAgICAgICAgICBpZiAoZWRpdGFibGVBbmNlc3RvcnMuY29udGFpbnMocmVw
bGFjZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVkaXRhYmxlQW5jZXN0b3JzLmFkZChyZXBsYWNlbWVudCk7Ci0gICAgICAgICAgICAgICAgcGFy
ZW50ID0gcGFyZW50LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYW5kaWRhdGUgPSByZXBsYWNlbWVudDsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoY2FuZGlkYXRlKQotICAgICAgICAgICAgYXBwZW5kU3VidGFyZ2V0c0Zvck5vZGUoY2FuZGlk
YXRlLCBzdWJ0YXJnZXRzKTsKLSAgICB9Ci19Ci0KLS8vIENvbXBpbGVzIGEgbGlzdCBvZiB6b29t
YWJsZSBzdWJ0YXJnZXRzLgotdm9pZCBjb21waWxlWm9vbWFibGVTdWJ0YXJnZXRzKGNvbnN0IE5v
ZGVMaXN0SGFzaFNldCYgaW50ZXJzZWN0ZWROb2RlcywgU3VidGFyZ2V0R2VvbWV0cnlMaXN0JiBz
dWJ0YXJnZXRzKQotewotICAgIE5vZGVMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
aW50ZXJzZWN0ZWROb2Rlcy5lbmQoKTsKLSAgICBmb3IgKE5vZGVMaXN0SGFzaFNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBpbnRlcnNlY3RlZE5vZGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBOb2RlKiBjb25zdCBjYW5kaWRhdGUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIGlm
IChub2RlSXNab29tVGFyZ2V0KGNhbmRpZGF0ZSkpCi0gICAgICAgICAgICBhcHBlbmRab29tYWJs
ZVN1YnRhcmdldHMoY2FuZGlkYXRlLCBzdWJ0YXJnZXRzKTsKLSAgICB9Ci19Ci0KLS8vIFRoaXMg
cmV0dXJucyBxdW90aWVudCBvZiB0aGUgdGFyZ2V0IGFyZWEgYW5kIGl0cyBpbnRlcnNlY3Rpb24g
d2l0aCB0aGUgdG91Y2ggYXJlYS4KLS8vIFRoaXMgd2lsbCBwcmlvcml0aXplIGxhcmdlc3QgaW50
ZXJzZWN0aW9uIGFuZCBzbWFsbGVzdCBhcmVhLCB3aGlsZSBiYWxhbmNpbmcgdGhlIHR3byBhZ2Fp
bnN0IGVhY2ggb3RoZXIuCi1mbG9hdCB6b29tYWJsZUludGVyc2VjdGlvblF1b3RpZW50KGNvbnN0
IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmIHRvdWNoQXJlYSwgY29uc3Qg
U3VidGFyZ2V0R2VvbWV0cnkmIHN1YnRhcmdldCkKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzdWJ0
YXJnZXQuYm91bmRpbmdCb3goKTsKLQotICAgIC8vIENvbnZlcnQgZnJvbSBmcmFtZSBjb29yZGlu
YXRlcyB0byB3aW5kb3cgY29vcmRpbmF0ZXMuCi0gICAgcmVjdCA9IHN1YnRhcmdldC5ub2RlKCkt
PmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1RvV2luZG93KHJlY3QpOwotCi0gICAgLy8gQ2hl
Y2sgdGhlIHJlY3RhbmdsZSBpcyBtZWFuaW5nZnVsIHpvb20gdGFyZ2V0LiBJdCBzaG91bGQgYXQg
bGVhc3QgY29udGFpbiB0aGUgaG90c3BvdC4KLSAgICBpZiAoIXJlY3QuY29udGFpbnModG91Y2hI
b3RzcG90KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZp
bml0eSgpOwotICAgIEludFJlY3QgaW50ZXJzZWN0aW9uID0gcmVjdDsKLSAgICBpbnRlcnNlY3Rp
b24uaW50ZXJzZWN0KHRvdWNoQXJlYSk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIHF1b3RpZW50IG9m
IHRoZSBpbnRlcnNlY3Rpb24uCi0gICAgcmV0dXJuIHJlY3Quc2l6ZSgpLmFyZWEoKSAvIChmbG9h
dClpbnRlcnNlY3Rpb24uc2l6ZSgpLmFyZWEoKTsKLX0KLQotLy8gVXNlcyBhIGh5YnJpZCBvZiBk
aXN0YW5jZSB0byBhZGp1c3QgYW5kIGludGVyc2VjdCByYXRpbywgbm9ybWFsaXppbmcgZWFjaCBz
Y29yZSBiZXR3ZWVuIDAgYW5kIDEKLS8vIGFuZCBjb21iaW5pbmcgdGhlbS4gVGhlIGRpc3RhbmNl
IHRvIGFkanVzdCB3b3JrcyBiZXN0IGZvciBkaXNhbWJpZ3VhdGluZyBjbGlja3Mgb24gdGFyZ2V0
cyBzdWNoCi0vLyBhcyBsaW5rcywgd2hlcmUgdGhlIHdpZHRoIG1heSBiZSBzaWduaWZpY2FudGx5
IGxhcmdlciB0aGFuIHRoZSB0b3VjaCB3aWR0aC4gVXNpbmcgYXJlYSBvZiBvdmVybGFwCi0vLyBp
biBzdWNoIGNhc2VzIGNhbiBsZWFkIHRvIGEgYmlhcyB0b3dhcmRzIHNob3J0ZXIgbGlua3MuIENv
bnZlcnNlbHksIHBlcmNlbnRhZ2Ugb2Ygb3ZlcmxhcCBjYW4KLS8vIHByb3ZpZGUgc3Ryb25nIGNv
bmZpZGVuY2UgaW4gdGFwcGluZyBvbiBhIHNtYWxsIHRhcmdldCwgd2hlcmUgdGhlIG92ZXJsYXAg
aXMgb2Z0ZW4gcXVpdGUgaGlnaCwKLS8vIGFuZCB3b3JrcyB3ZWxsIGZvciB0aWdodGx5IHBhY2tl
ZCBjb250cm9scy4KLWZsb2F0IGh5YnJpZERpc3RhbmNlRnVuY3Rpb24oY29uc3QgSW50UG9pbnQm
IHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hSZWN0LCBjb25zdCBTdWJ0YXJnZXRH
ZW9tZXRyeSYgc3VidGFyZ2V0KQotewotICAgIEludFJlY3QgcmVjdCA9IHN1YnRhcmdldC5ib3Vu
ZGluZ0JveCgpOwotCi0gICAgLy8gQ29udmVydCBmcm9tIGZyYW1lIGNvb3JkaW5hdGVzIHRvIHdp
bmRvdyBjb29yZGluYXRlcy4KLSAgICByZWN0ID0gc3VidGFyZ2V0Lm5vZGUoKS0+ZG9jdW1lbnQo
KS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7Ci0gICAKLSAgICBmbG9hdCByYWRpdXNT
cXVhcmVkID0gMC4yNWYgKiAodG91Y2hSZWN0LnNpemUoKS5kaWFnb25hbExlbmd0aFNxdWFyZWQo
KSk7Ci0gICAgZmxvYXQgZGlzdGFuY2VUb0FkanVzdFNjb3JlID0gcmVjdC5kaXN0YW5jZVNxdWFy
ZWRUb1BvaW50KHRvdWNoSG90c3BvdCkgLyByYWRpdXNTcXVhcmVkOwotCi0gICAgaW50IG1heE92
ZXJsYXBXaWR0aCA9IHN0ZDo6bWluKHRvdWNoUmVjdC53aWR0aCgpLCByZWN0LndpZHRoKCkpOwot
ICAgIGludCBtYXhPdmVybGFwSGVpZ2h0ID0gc3RkOjptaW4odG91Y2hSZWN0LmhlaWdodCgpLCBy
ZWN0LmhlaWdodCgpKTsKLSAgICBmbG9hdCBtYXhPdmVybGFwQXJlYSA9IHN0ZDo6bWF4KG1heE92
ZXJsYXBXaWR0aCAqIG1heE92ZXJsYXBIZWlnaHQsIDEpOwotICAgIHJlY3QuaW50ZXJzZWN0KHRv
dWNoUmVjdCk7Ci0gICAgZmxvYXQgaW50ZXJzZWN0QXJlYSA9IHJlY3Quc2l6ZSgpLmFyZWEoKTsK
LSAgICBmbG9hdCBpbnRlcnNlY3Rpb25TY29yZSA9IDEgLSBpbnRlcnNlY3RBcmVhIC8gbWF4T3Zl
cmxhcEFyZWE7Ci0KLSAgICBmbG9hdCBoeWJyaWRTY29yZSA9IGludGVyc2VjdGlvblNjb3JlICsg
ZGlzdGFuY2VUb0FkanVzdFNjb3JlOwotCi0gICAgcmV0dXJuIGh5YnJpZFNjb3JlOwotfQotCi1G
bG9hdFBvaW50IGNvbnRlbnRzVG9XaW5kb3coRnJhbWVWaWV3ICp2aWV3LCBGbG9hdFBvaW50IHB0
KQotewotICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihwdC54KCkgKyAwLjVmKTsKLSAgICBp
bnQgeSA9IHN0YXRpY19jYXN0PGludD4ocHQueSgpICsgMC41Zik7Ci0gICAgSW50UG9pbnQgYWRq
dXN0ZWQgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KEludFBvaW50KHgsIHkpKTsKLSAgICByZXR1
cm4gRmxvYXRQb2ludChhZGp1c3RlZC54KCksIGFkanVzdGVkLnkoKSk7Ci19Ci0KLS8vIEFkanVz
dHMgJ3BvaW50JyB0byB0aGUgbmVhcmVzdCBwb2ludCBpbnNpZGUgcmVjdCwgYW5kIGxlYXZlcyBp
dCB1bmNoYW5nZWQgaWYgYWxyZWFkeSBpbnNpZGUuCi12b2lkIGFkanVzdFBvaW50VG9SZWN0KEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBvaW50
LngoKSA8IHJlY3QueCgpKQotICAgICAgICBwb2ludC5zZXRYKHJlY3QueCgpKTsKLSAgICBlbHNl
IGlmIChwb2ludC54KCkgPiByZWN0Lm1heFgoKSkKLSAgICAgICAgcG9pbnQuc2V0WChyZWN0Lm1h
eFgoKSk7Ci0KLSAgICBpZiAocG9pbnQueSgpIDwgcmVjdC55KCkpCi0gICAgICAgIHBvaW50LnNl
dFkocmVjdC55KCkpOwotICAgIGVsc2UgaWYgKHBvaW50LnkoKSA+IHJlY3QubWF4WSgpKQotICAg
ICAgICBwb2ludC5zZXRZKHJlY3QubWF4WSgpKTsKLX0KLQotYm9vbCBzbmFwVG8oY29uc3QgU3Vi
dGFyZ2V0R2VvbWV0cnkmIGdlb20sIGNvbnN0IEludFBvaW50JiB0b3VjaFBvaW50LCBjb25zdCBJ
bnRSZWN0JiB0b3VjaEFyZWEsIEludFBvaW50JiBhZGp1c3RlZFBvaW50KQotewotICAgIEZyYW1l
VmlldyogdmlldyA9IGdlb20ubm9kZSgpLT5kb2N1bWVudCgpLnZpZXcoKTsKLSAgICBGbG9hdFF1
YWQgcXVhZCA9IGdlb20ucXVhZCgpOwotCi0gICAgaWYgKHF1YWQuaXNSZWN0aWxpbmVhcigpKSB7
Ci0gICAgICAgIEludFJlY3QgY29udGVudEJvdW5kcyA9IGdlb20uYm91bmRpbmdCb3goKTsKLSAg
ICAgICAgLy8gQ29udmVydCBmcm9tIGZyYW1lIGNvb3JkaW5hdGVzIHRvIHdpbmRvdyBjb29yZGlu
YXRlcy4KLSAgICAgICAgSW50UmVjdCBib3VuZHMgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGNv
bnRlbnRCb3VuZHMpOwotICAgICAgICBpZiAoYm91bmRzLmNvbnRhaW5zKHRvdWNoUG9pbnQpKSB7
Ci0gICAgICAgICAgICBhZGp1c3RlZFBvaW50ID0gdG91Y2hQb2ludDsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChib3VuZHMuaW50ZXJzZWN0cyh0b3Vj
aEFyZWEpKSB7Ci0gICAgICAgICAgICBib3VuZHMuaW50ZXJzZWN0KHRvdWNoQXJlYSk7Ci0gICAg
ICAgICAgICBhZGp1c3RlZFBvaW50ID0gYm91bmRzLmNlbnRlcigpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIFRoZSBmb2xsb3dpbmcgY29kZSB0cmllcyB0byBhZGp1c3QgdGhlIHBvaW50IHRvIHBsYWNl
IGluc2lkZSBhIGJvdGggdGhlIHRvdWNoQXJlYSBhbmQgdGhlIG5vbi1yZWN0aWxpbmVhciBxdWFk
LgotICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBwb2ludCBpbnNpZGUgdGhlIHRv
dWNoIGFyZWEgdGhhdCBpcyB0aGUgY2xvc2VzdCB0byB0aGUgcXVhZCBjZW50ZXIsIGJ1dCBkb2Vz
IG5vdAotICAgIC8vIGd1YXJhbnRlZSB0aGF0IHRoZSBwb2ludCB3aWxsIGJlIGluc2lkZSB0aGUg
cXVhZC4gQ29ybmVyLWNhc2VzIGV4aXN0IHdoZXJlIHRoZSBxdWFkIHdpbGwgaW50ZXJzZWN0IGJ1
dCB0aGlzCi0gICAgLy8gd2lsbCBmYWlsIHRvIGFkanVzdCB0aGUgcG9pbnQgdG8gc29tZXdoZXJl
IGluIHRoZSBpbnRlcnNlY3Rpb24uCi0KLSAgICAvLyBDb252ZXJ0IHF1YWQgZnJvbSBjb250ZW50
IHRvIHdpbmRvdyBjb29yZGluYXRlcy4KLSAgICBGbG9hdFBvaW50IHAxID0gY29udGVudHNUb1dp
bmRvdyh2aWV3LCBxdWFkLnAxKCkpOwotICAgIEZsb2F0UG9pbnQgcDIgPSBjb250ZW50c1RvV2lu
ZG93KHZpZXcsIHF1YWQucDIoKSk7Ci0gICAgRmxvYXRQb2ludCBwMyA9IGNvbnRlbnRzVG9XaW5k
b3codmlldywgcXVhZC5wMygpKTsKLSAgICBGbG9hdFBvaW50IHA0ID0gY29udGVudHNUb1dpbmRv
dyh2aWV3LCBxdWFkLnA0KCkpOwotICAgIHF1YWQgPSBGbG9hdFF1YWQocDEsIHAyLCBwMywgcDQp
OwotCi0gICAgaWYgKHF1YWQuY29udGFpbnNQb2ludCh0b3VjaFBvaW50KSkgewotICAgICAgICBh
ZGp1c3RlZFBvaW50ID0gdG91Y2hQb2ludDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgLy8gUHVsbCBwb2ludCB0b3dhcmRzIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnQuCi0g
ICAgRmxvYXRQb2ludCBjZW50ZXIgPSBxdWFkLmNlbnRlcigpOwotCi0gICAgYWRqdXN0UG9pbnRU
b1JlY3QoY2VudGVyLCB0b3VjaEFyZWEpOwotICAgIGFkanVzdGVkUG9pbnQgPSByb3VuZGVkSW50
UG9pbnQoY2VudGVyKTsKLQotICAgIHJldHVybiBxdWFkLmNvbnRhaW5zUG9pbnQoYWRqdXN0ZWRQ
b2ludCk7Ci19Ci0KLS8vIEEgZ2VuZXJpYyBmdW5jdGlvbiBmb3IgZmluZGluZyB0aGUgdGFyZ2V0
IG5vZGUgd2l0aCB0aGUgbG93ZXN0IGRpc3RhbmNlIG1ldHJpYy4gQSBkaXN0YW5jZSBtZXRyaWMg
aGVyZSBpcyB0aGUgcmVzdWx0Ci0vLyBvZiBhIGRpc3RhbmNlLWxpa2UgZnVuY3Rpb24sIHRoYXQg
Y29tcHV0ZXMgaG93IHdlbGwgdGhlIHRvdWNoIGhpdHMgdGhlIG5vZGUuCi0vLyBEaXN0YW5jZSBm
dW5jdGlvbnMgY291bGQgZm9yIGluc3RhbmNlIGJlIGRpc3RhbmNlIHNxdWFyZWQgb3IgYXJlYSBv
ZiBpbnRlcnNlY3Rpb24uCi1ib29sIGZpbmROb2RlV2l0aExvd2VzdERpc3RhbmNlTWV0cmljKE5v
ZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIEludFJlY3QmIHRhcmdldEFy
ZWEsIGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmIHRvdWNoQXJl
YSwgU3VidGFyZ2V0R2VvbWV0cnlMaXN0JiBzdWJ0YXJnZXRzLCBEaXN0YW5jZUZ1bmN0aW9uIGRp
c3RhbmNlRnVuY3Rpb24pCi17Ci0gICAgdGFyZ2V0Tm9kZSA9IDA7Ci0gICAgZmxvYXQgYmVzdERp
c3RhbmNlTWV0cmljID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7Ci0g
ICAgU3VidGFyZ2V0R2VvbWV0cnlMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN1YnRhcmdldHMu
YmVnaW4oKTsKLSAgICBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHN1YnRhcmdldHMuZW5kKCk7Ci0gICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKLQot
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGl0LT5u
b2RlKCk7Ci0gICAgICAgIGZsb2F0IGRpc3RhbmNlTWV0cmljID0gZGlzdGFuY2VGdW5jdGlvbih0
b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgKml0KTsKLSAgICAgICAgaWYgKGRpc3RhbmNlTWV0cmlj
IDwgYmVzdERpc3RhbmNlTWV0cmljKSB7Ci0gICAgICAgICAgICBpZiAoc25hcFRvKCppdCwgdG91
Y2hIb3RzcG90LCB0b3VjaEFyZWEsIGFkanVzdGVkUG9pbnQpKSB7Ci0gICAgICAgICAgICAgICAg
dGFyZ2V0UG9pbnQgPSBhZGp1c3RlZFBvaW50OwotICAgICAgICAgICAgICAgIHRhcmdldEFyZWEg
PSBpdC0+Ym91bmRpbmdCb3goKTsKLSAgICAgICAgICAgICAgICB0YXJnZXROb2RlID0gbm9kZTsK
LSAgICAgICAgICAgICAgICBiZXN0RGlzdGFuY2VNZXRyaWMgPSBkaXN0YW5jZU1ldHJpYzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZU1ldHJpYyAtIGJlc3REaXN0
YW5jZU1ldHJpYyA8IHplcm9Ub2xlcmFuY2UpIHsKLSAgICAgICAgICAgIGlmIChzbmFwVG8oKml0
LCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgYWRqdXN0ZWRQb2ludCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+aXNEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gVHJ5IHRvIGFsd2F5cyByZXR1cm4gdGhlIGlubmVyLW1vc3QgZWxlbWVudC4K
LSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UG9pbnQgPSBhZGp1c3RlZFBvaW50OwotICAgICAg
ICAgICAgICAgICAgICB0YXJnZXROb2RlID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0QXJlYSA9IGl0LT5ib3VuZGluZ0JveCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAodGFyZ2V0Tm9kZSkgewotICAgICAgICB0
YXJnZXRBcmVhID0gdGFyZ2V0Tm9kZS0+ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9XaW5k
b3codGFyZ2V0QXJlYSk7Ci0gICAgfQotICAgIHJldHVybiAodGFyZ2V0Tm9kZSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFRvdWNoQWRqdXN0bWVudAotCi1ib29sIGZpbmRCZXN0Q2xpY2thYmxlQ2Fu
ZGlkYXRlKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCAmdGFyZ2V0UG9pbnQsIGNvbnN0IElu
dFBvaW50ICZ0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QgJnRvdWNoQXJlYSwgY29uc3QgTm9k
ZUxpc3RIYXNoU2V0JiBub2RlTGlzdCkKLXsKLSAgICBJbnRSZWN0IHRhcmdldEFyZWE7Ci0gICAg
VG91Y2hBZGp1c3RtZW50OjpTdWJ0YXJnZXRHZW9tZXRyeUxpc3Qgc3VidGFyZ2V0czsKLSAgICBU
b3VjaEFkanVzdG1lbnQ6OmNvbXBpbGVTdWJ0YXJnZXRMaXN0KG5vZGVMaXN0LCBzdWJ0YXJnZXRz
LCBUb3VjaEFkanVzdG1lbnQ6Om5vZGVSZXNwb25kc1RvVGFwR2VzdHVyZSwgVG91Y2hBZGp1c3Rt
ZW50OjphcHBlbmRCYXNpY1N1YnRhcmdldHNGb3JOb2RlKTsKLSAgICByZXR1cm4gVG91Y2hBZGp1
c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3REaXN0YW5jZU1ldHJpYyh0YXJnZXROb2RlLCB0YXJn
ZXRQb2ludCwgdGFyZ2V0QXJlYSwgdG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsIHN1YnRhcmdldHMs
IFRvdWNoQWRqdXN0bWVudDo6aHlicmlkRGlzdGFuY2VGdW5jdGlvbik7Ci19Ci0KLWJvb2wgZmlu
ZEJlc3RDb250ZXh0TWVudUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQgJnRh
cmdldFBvaW50LCBjb25zdCBJbnRQb2ludCAmdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0ICZ0
b3VjaEFyZWEsIGNvbnN0IE5vZGVMaXN0SGFzaFNldCYgbm9kZUxpc3QpCi17Ci0gICAgSW50UmVj
dCB0YXJnZXRBcmVhOwotICAgIFRvdWNoQWRqdXN0bWVudDo6U3VidGFyZ2V0R2VvbWV0cnlMaXN0
IHN1YnRhcmdldHM7Ci0gICAgVG91Y2hBZGp1c3RtZW50Ojpjb21waWxlU3VidGFyZ2V0TGlzdChu
b2RlTGlzdCwgc3VidGFyZ2V0cywgVG91Y2hBZGp1c3RtZW50Ojpwcm92aWRlc0NvbnRleHRNZW51
SXRlbXMsIFRvdWNoQWRqdXN0bWVudDo6YXBwZW5kQ29udGV4dFN1YnRhcmdldHNGb3JOb2RlKTsK
LSAgICByZXR1cm4gVG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3REaXN0YW5jZU1l
dHJpYyh0YXJnZXROb2RlLCB0YXJnZXRQb2ludCwgdGFyZ2V0QXJlYSwgdG91Y2hIb3RzcG90LCB0
b3VjaEFyZWEsIHN1YnRhcmdldHMsIFRvdWNoQWRqdXN0bWVudDo6aHlicmlkRGlzdGFuY2VGdW5j
dGlvbik7Ci19Ci0KLWJvb2wgZmluZEJlc3Rab29tYWJsZUFyZWEoTm9kZSomIHRhcmdldE5vZGUs
IEludFJlY3QmIHRhcmdldEFyZWEsIGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0
IEludFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3RIYXNoU2V0JiBub2RlTGlzdCkKLXsK
LSAgICBJbnRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBUb3VjaEFkanVzdG1lbnQ6OlN1YnRhcmdl
dEdlb21ldHJ5TGlzdCBzdWJ0YXJnZXRzOwotICAgIFRvdWNoQWRqdXN0bWVudDo6Y29tcGlsZVpv
b21hYmxlU3VidGFyZ2V0cyhub2RlTGlzdCwgc3VidGFyZ2V0cyk7Ci0gICAgcmV0dXJuIFRvdWNo
QWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0RGlzdGFuY2VNZXRyaWModGFyZ2V0Tm9kZSwg
dGFyZ2V0UG9pbnQsIHRhcmdldEFyZWEsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBzdWJ0YXJn
ZXRzLCBUb3VjaEFkanVzdG1lbnQ6Onpvb21hYmxlSW50ZXJzZWN0aW9uUXVvdGllbnQpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RvdWNoQWRqdXN0bWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZhYzAwOC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBUb3VjaEFkanVzdG1lbnRfaAotI2Rl
ZmluZSBUb3VjaEFkanVzdG1lbnRfaAotCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRl
ICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCi0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYg
TGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4gTm9kZUxpc3RIYXNoU2V0OwotCi1ib29sIGZpbmRC
ZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0
UG9pbnQsIGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmIHRvdWNo
QXJlYSwgY29uc3QgTm9kZUxpc3RIYXNoU2V0Jik7Ci1ib29sIGZpbmRCZXN0Q29udGV4dE1lbnVD
YW5kaWRhdGUoTm9kZSomIHRhcmdldE5vZGUsIEludFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3Qg
SW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBO
b2RlTGlzdEhhc2hTZXQmKTsKLWJvb2wgZmluZEJlc3Rab29tYWJsZUFyZWEoTm9kZSomIHRhcmdl
dE5vZGUsIEludFJlY3QmIHRhcmdldEFyZWEsIGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3Qs
IGNvbnN0IEludFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3RIYXNoU2V0Jik7Ci0vLyBG
SVhNRTogSW1wbGVtZW50IHRoZSBzaW1pbGFyIGZ1bmN0aW9ucyBmb3Igb3RoZXIgZ2VzdHVyZXMg
aGVyZSBhcyB3ZWxsLgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDkzYzliZjIuLmY2Mzg4NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTExOCwxMCArMTE4LDYgQEAKICNpbmNsdWRl
ICJEZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShUT1VD
SF9BREpVU1RNRU5UKQotI2luY2x1ZGUgIldlYktpdFBvaW50LmgiCi0jZW5kaWYKLQogI2lmIEVO
QUJMRShNT1VTRV9DVVJTT1JfU0NBTEUpCiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNlbmRpZgpA
QCAtMTAzNCwxMDUgKzEwMzAsNiBAQCB2b2lkIEludGVybmFsczo6c2V0RGVsZWdhdGVzU2Nyb2xs
aW5nKGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgZG9jdW1lbnQtPnZpZXco
KS0+c2V0RGVsZWdhdGVzU2Nyb2xsaW5nKGVuYWJsZWQpOwogfQogCi0jaWYgRU5BQkxFKFRPVUNI
X0FESlVTVE1FTlQpCi1QYXNzUmVmUHRyPFdlYktpdFBvaW50PiBJbnRlcm5hbHM6OnRvdWNoUG9z
aXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lk
dGgsIGxvbmcgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVu
dC0+ZnJhbWUoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgSW50U2l6ZSByYWRpdXMod2lkdGggLyAyLCBoZWlnaHQg
LyAyKTsKLSAgICBJbnRQb2ludCBwb2ludCh4ICsgcmFkaXVzLndpZHRoKCksIHkgKyByYWRpdXMu
aGVpZ2h0KCkpOwotCi0gICAgTm9kZSogdGFyZ2V0Tm9kZTsKLSAgICBJbnRQb2ludCBhZGp1c3Rl
ZFBvaW50OwotCi0gICAgYm9vbCBmb3VuZE5vZGUgPSBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRI
YW5kbGVyKCkuYmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFk
anVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOwotICAgIGlmIChmb3VuZE5vZGUpCi0gICAgICAgIHJl
dHVybiBXZWJLaXRQb2ludDo6Y3JlYXRlKGFkanVzdGVkUG9pbnQueCgpLCBhZGp1c3RlZFBvaW50
LnkoKSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSogSW50ZXJuYWxzOjp0b3VjaE5vZGVB
ZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxv
bmcgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBjb250ZXh0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJh
bWUoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgSW50U2l6ZSByYWRpdXMod2lkdGggLyAyLCBoZWlnaHQgLyAyKTsK
LSAgICBJbnRQb2ludCBwb2ludCh4ICsgcmFkaXVzLndpZHRoKCksIHkgKyByYWRpdXMuaGVpZ2h0
KCkpOwotCi0gICAgTm9kZSogdGFyZ2V0Tm9kZTsKLSAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50
OwotICAgIGRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5iZXN0Q2xpY2thYmxlTm9k
ZUZvclRvdWNoUG9pbnQocG9pbnQsIHJhZGl1cywgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7
Ci0gICAgcmV0dXJuIHRhcmdldE5vZGU7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IElu
dGVybmFsczo6dG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q29udGV4dE1lbnVOb2RlKGxvbmcg
eCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7Ci0gICAgaWYgKCFk
b2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FD
Q0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEludFNpemUgcmFkaXVz
KHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7Ci0gICAgSW50UG9pbnQgcG9pbnQoeCArIHJhZGl1cy53
aWR0aCgpLCB5ICsgcmFkaXVzLmhlaWdodCgpKTsKLQotICAgIE5vZGUqIHRhcmdldE5vZGUgPSAw
OwotICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7Ci0KLSAgICBib29sIGZvdW5kTm9kZSA9IGRv
Y3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5iZXN0Q29udGV4dE1lbnVOb2RlRm9yVG91
Y2hQb2ludChwb2ludCwgcmFkaXVzLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKLSAgICBp
ZiAoZm91bmROb2RlKQotICAgICAgICByZXR1cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShhZGp1c3Rl
ZFBvaW50LngoKSwgYWRqdXN0ZWRQb2ludC55KCkpOwotCi0gICAgcmV0dXJuIFdlYktpdFBvaW50
OjpjcmVhdGUoeCwgeSk7Ci19Ci0KLU5vZGUqIEludGVybmFsczo6dG91Y2hOb2RlQWRqdXN0ZWRU
b0Jlc3RDb250ZXh0TWVudU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVp
Z2h0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250
ZXh0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkg
ewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgSW50U2l6ZSByYWRpdXMod2lkdGggLyAyLCBoZWlnaHQgLyAyKTsKLSAgICBJ
bnRQb2ludCBwb2ludCh4ICsgcmFkaXVzLndpZHRoKCksIHkgKyByYWRpdXMuaGVpZ2h0KCkpOwot
Ci0gICAgTm9kZSogdGFyZ2V0Tm9kZSA9IDA7Ci0gICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsK
LSAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuYmVzdENvbnRleHRNZW51Tm9k
ZUZvclRvdWNoUG9pbnQocG9pbnQsIHJhZGl1cywgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7
Ci0gICAgcmV0dXJuIHRhcmdldE5vZGU7Ci19Ci0KLVBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gSW50
ZXJuYWxzOjpiZXN0Wm9vbWFibGVBcmVhRm9yVG91Y2hQb2ludChsb25nIHgsIGxvbmcgeSwgbG9u
ZyB3aWR0aCwgbG9uZyBoZWlnaHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQgfHwgIWRv
Y3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHJhZGl1cyh3aWR0aCAvIDIsIGhl
aWdodCAvIDIpOwotICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSArIHJh
ZGl1cy5oZWlnaHQoKSk7Ci0KLSAgICBOb2RlKiB0YXJnZXROb2RlOwotICAgIEludFJlY3Qgem9v
bWFibGVBcmVhOwotICAgIGJvb2wgZm91bmROb2RlID0gZG9jdW1lbnQtPmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLmJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIHpv
b21hYmxlQXJlYSwgdGFyZ2V0Tm9kZSk7Ci0gICAgaWYgKGZvdW5kTm9kZSkKLSAgICAgICAgcmV0
dXJuIENsaWVudFJlY3Q6OmNyZWF0ZSh6b29tYWJsZUFyZWEpOwotCi0gICAgcmV0dXJuIDA7Ci19
Ci0jZW5kaWYKLQotCiBpbnQgSW50ZXJuYWxzOjpsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5j
ZShFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0
RG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDAyZmRlZWQuLjNh
Yzg5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtNTYsNyArNTYsNiBAQCBj
bGFzcyBQYWdlOwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
Y2xhc3MgU2hhZG93Um9vdDsKLWNsYXNzIFdlYktpdFBvaW50OwogY2xhc3MgTWFsbG9jU3RhdGlz
dGljczsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIGNsYXNzIFRpbWVSYW5nZXM7CkBA
IC0xNTgsMTMgKzE1Nyw2IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcmFuZ2VBc1RleHQoY29uc3Qg
UmFuZ2UqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIHNldERlbGVnYXRlc1Njcm9sbGlu
Zyhib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUoVE9VQ0hfQURKVVNU
TUVOVCkKLSAgICBQYXNzUmVmUHRyPFdlYktpdFBvaW50PiB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRU
b0Jlc3RDbGlja2FibGVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdo
dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIE5vZGUqIHRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xp
Y2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYktpdFBvaW50PiB0b3VjaFBvc2l0aW9uQWRq
dXN0ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxv
bmcgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgTm9kZSogdG91Y2hOb2RlQWRqdXN0ZWRU
b0Jlc3RDb250ZXh0TWVudU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVp
Z2h0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBiZXN0Wm9v
bWFibGVBcmVhRm9yVG91Y2hQb2ludChsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBo
ZWlnaHQsIEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgogCiAgICAgaW50IGxhc3RTcGVsbENoZWNr
UmVxdWVzdFNlcXVlbmNlKEV4Y2VwdGlvbkNvZGUmKTsKICAgICBpbnQgbGFzdFNwZWxsQ2hlY2tQ
cm9jZXNzZWRTZXF1ZW5jZShFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5pZGwKaW5kZXggZTBjMzk4Ny4uNWZhZGQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmlkbApAQCAtMTE0LDEzICsxMTQsNiBAQAogICAgIFtSYWlzZXNFeGNlcHRpb25dIERP
TVN0cmluZyByYW5nZUFzVGV4dChSYW5nZSByYW5nZSk7CiAKICAgICBbUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHNldERlbGVnYXRlc1Njcm9sbGluZyhib29sZWFuIGVuYWJsZWQpOwotI2lmIGRlZmlu
ZWQoRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQpICYmIEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UCi0g
ICAgW1JhaXNlc0V4Y2VwdGlvbl0gV2ViS2l0UG9pbnQgdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9C
ZXN0Q2xpY2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQp
OwotICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgdG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlj
a2FibGVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCk7Ci0gICAg
W1JhaXNlc0V4Y2VwdGlvbl0gV2ViS2l0UG9pbnQgdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0
Q29udGV4dE1lbnVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCk7
Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gTm9kZSB0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENvbnRl
eHRNZW51Tm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQpOwotICAg
IFtSYWlzZXNFeGNlcHRpb25dIENsaWVudFJlY3QgYmVzdFpvb21hYmxlQXJlYUZvclRvdWNoUG9p
bnQobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0KTsKLSNlbmRpZgogCiAg
ICAgW1JhaXNlc0V4Y2VwdGlvbl0gbG9uZyBsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5jZSgp
OwogICAgIFtSYWlzZXNFeGNlcHRpb25dIGxvbmcgbGFzdFNwZWxsQ2hlY2tQcm9jZXNzZWRTZXF1
ZW5jZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDZlNGRhOTcuLmU3NDc0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxNC0wMS0xNyAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIHVudXNlZCBUT1VDSF9BREpVU1RNRU5UIGNvZGUuCisgICAgICAg
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMjcxODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9XZWJQYWdlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludCk6CisKIDIwMTQtMDEtMTcgIEVucmlj
YSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0IFdlYlNlbGVj
dGlvbnMgaW4gV0syIG9uIGlPUy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlBhZ2VDb29yZGluYXRlZEdyYXBoaWNz
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1dlYlBhZ2VDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRleCAzMzEyYmVmLi40Y2VmOTg2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvV2ViUGFnZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlBhZ2VDb29y
ZGluYXRlZEdyYXBoaWNzLmNwcApAQCAtNDIsMjUgKzQyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi0jaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1F
TlQpCi12b2lkIFdlYlBhZ2U6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIGNvbnN0IEludFNpemUmIGFyZWEpCi17Ci0gICAgTm9kZSogbm9kZSA9IDA7Ci0g
ICAgSW50UmVjdCB6b29tYWJsZUFyZWE7Ci0gICAgYm9vbCBmb3VuZEFyZWFGb3JUb3VjaFBvaW50
ID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5iZXN0Wm9vbWFibGVB
cmVhRm9yVG91Y2hQb2ludChwb2ludCwgSW50U2l6ZShhcmVhLndpZHRoKCkgLyAyLCBhcmVhLmhl
aWdodCgpIC8gMiksIHpvb21hYmxlQXJlYSwgbm9kZSk7Ci0KLSAgICBpZiAoIWZvdW5kQXJlYUZv
clRvdWNoUG9pbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChub2RlKTsKLQotICAg
IGlmIChub2RlLT5kb2N1bWVudCgpLnZpZXcoKSkKLSAgICAgICAgem9vbWFibGVBcmVhID0gbm9k
ZS0+ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coem9vbWFibGVBcmVhKTsKLQot
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFpvb21hYmxlQXJlYShwb2lu
dCwgem9vbWFibGVBcmVhKSk7Ci19Ci0KLSNlbHNlCiB2b2lkIFdlYlBhZ2U6OmZpbmRab29tYWJs
ZUFyZWFGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IEludFNpemUmIGFyZWEp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGFyZWEpOwpAQCAtOTgsNyArNzksNiBAQCB2b2lkIFdlYlBh
Z2U6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0
IEludFNpemUmIGFyZQogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5k
Wm9vbWFibGVBcmVhKHBvaW50LCB6b29tYWJsZUFyZWEpKTsKIH0KLSNlbmRpZgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>