<?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>6421</bug_id>
          
          <creation_ts>2006-01-08 01:28:50 -0800</creation_ts>
          <short_desc>&lt;text&gt; textLength attribute is not respected</short_desc>
          <delta_ts>2007-10-11 16:27:10 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6422</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>ian</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>27971</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-08 01:28:50 -0800</bug_when>
    <thetext>&lt;text&gt; textLength attribute is not respected

http://www.w3.org/TR/SVG/text.html#TextElement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58323</commentid>
    <comment_count>1</comment_count>
      <attachid>16634</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-10-11 16:01:49 -0700</bug_when>
    <thetext>Created attachment 16634
Initial patch

Also fixes bug 6422.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58325</commentid>
    <comment_count>2</comment_count>
      <attachid>16634</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-10-11 16:24:48 -0700</bug_when>
    <thetext>Comment on attachment 16634
Initial patch

r=me, with the changes we discussed in irc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58326</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-10-11 16:27:10 -0700</bug_when>
    <thetext>Landed in r26371.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16634</attachid>
            <date>2007-10-11 16:01:49 -0700</date>
            <delta_ts>2007-10-11 16:24:48 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>FixSVGTextLength.diff</filename>
            <type>text/plain</type>
            <size>31040</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjM2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDctMTAtMTEgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlczogaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQyMSAo
PHRleHQ+IHRleHRMZW5ndGggYXR0cmlidXRlIGlzIG5vdCByZXNwZWN0ZWQpCisgICAgICAgIEZp
eGVzOiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDIyICg8dGV4dD4g
bGVuZ3RoQWRqdXN0IGF0dHJpYnV0ZSBpcyBub3QgcmVzcGVjdGVkKQorCisgICAgICAgIEltcGxl
bWVudCB0ZXh0TGVuZ3RoIGFuZCBmdWxsIGxlbmd0aEFkanVzdCAoYm90aCAnc3BhY2luZycgJiAn
c3BhY2luZ0FuZEdseXBocycgbW9kZSkKKyAgICAgICAgZm9yIDx0ZXh0PiAmIDx0c3Bhbj4gJiBm
cmllbmRzLiA8dGV4dFBhdGg+IGlzIHN0aWxsIHRvZG8sIGFzIGl0J3Mgc3BlY2lhbC4KKworICAg
ICAgICBBbHNvIGZpeCB1c2FnZSBvZiBjdW1tdWxhdGVkR2x5cGhXaWR0aC9IZWlnaHQgaW4gU1ZH
SW5saW5lVGV4dEJveCwgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzIHdhcworICAgICAgICBzdXBw
b3NlZCB0byBiZSB1c2VkIGluIHRoZSBkaXN0YW5jZSBjYWxjdWxhdGlvbnMsIHRvIHRha2UgcGVy
IGNoYXJhY3RlciB0cmFuc2Zvcm1hdGlvbnMgaW50byBhY2NvdW50IChpZS4gcm90YXRpb24pLgor
CisgICAgICAgIEZpeGVzOiBzdmcvVzNDLVNWRy0xLjEvdGV4dC10ZXh0LTAxLWIuc3ZnIChjb21w
bGVsdHkgZml4ZWQgdGhlIHNpbmdsZSBXM0MgdGV4dExlbmd0aCB0ZXN0Y2FzZSkKKyAgICAgICAg
UGFydGx5IGZpeGVkOiBzdmcvYmF0aWsvdGV4dC90ZXh0T25QYXRoU3BhY2VzLnN2ZyAoa2Vybmlu
ZyBzdXBwb3J0IG1pc3NpbmcpCisgICAgICAgIFBhcnRseSBmaXhlZDogc3ZnL2JhdGlrL3RleHQv
dGV4dExheW91dC5zdmcgKHdvcmQtbGV0dGVyIHNwYWNpbmcgJiB0ZXh0TGVuZ3RoIGlzIHRvZG8p
CisKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHVGV4dENvbnRlbnRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NoYXJhY3RlckxheW91dEluZm86Om5leHRQYXRoTGF5
b3V0UG9pbnRBbmRBbmdsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91
dEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua1dhbGtlcjo6b3BlcmF0b3IoKSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW5saW5lVGV4dEJveENsb3Nlc3RDaGFyYWN0ZXJUb1Bvc2l0aW9uV2Fsa2VyOjpjaHVua1Bv
cnRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94U2VsZWN0
aW9uUmVjdFdhbGtlcjo6Y2h1bmtQb3J0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW5saW5lVGV4dEJveDo6c3ZnQ2hhcmFjdGVySGl0c1Bvc2l0aW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290
SW5saW5lQm94UGFpbnRXYWxrZXI6OmNodW5rUG9ydGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmN1bW11bGF0ZWRXaWR0aE9ySGVpZ2h0T2ZUZXh0Q2h1bmspOgorICAgICAgICAoV2Vi
Q29yZTo6Y3VtbXVsYXRlZFdpZHRoT2ZUZXh0Q2h1bmspOgorICAgICAgICAoV2ViQ29yZTo6Y3Vt
bXVsYXRlZEhlaWdodE9mVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5VGV4dEFu
Y2hvclRvVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5VGV4dExlbmd0aENvcnJl
Y3Rpb25Ub1RleHRDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94Ojpi
dWlsZExheW91dEluZm9ybWF0aW9uRm9yVGV4dEJveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
b290SW5saW5lQm94OjpidWlsZFRleHRDaHVua3MpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9v
dElubGluZUJveDo6bGF5b3V0VGV4dENodW5rcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290
SW5saW5lQm94Ojp3YWxrVGV4dENodW5rcyk6CisKIDIwMDctMTAtMTEgIE9saXZlciBIdW50ICA8
b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvLgpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjM2
OSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpTVkdUZXh0
Q29udGVudEVsZQogICAgICwgU1ZHVGVzdHMoKQogICAgICwgU1ZHTGFuZ1NwYWNlKCkKICAgICAs
IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQotICAgICwgbV90ZXh0TGVuZ3RoKHRoaXMs
IExlbmd0aE1vZGVXaWR0aCkKLSAgICAsIG1fbGVuZ3RoQWRqdXN0KDApCisgICAgLCBtX3RleHRM
ZW5ndGgodGhpcywgTGVuZ3RoTW9kZU90aGVyKQorICAgICwgbV9sZW5ndGhBZGp1c3QoTEVOR1RI
QURKVVNUX1NQQUNJTkcpCiB7CiB9CiAKQEAgLTk4LDEwICs5OCwxMiBAQCB2b2lkIFNWR1RleHRD
b250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyCiAKIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgLy9p
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKQotICAgIC8vICAg
IHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFs
dWUoKSkpOwotICAgIC8vZWxzZQotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRl
eHRMZW5ndGhBdHRyKSB7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGVuZ3Ro
QWRqdXN0QXR0cikgeworICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAic3BhY2luZyIpCisg
ICAgICAgICAgICBzZXRMZW5ndGhBZGp1c3RCYXNlVmFsdWUoTEVOR1RIQURKVVNUX1NQQUNJTkcp
OworICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJzcGFjaW5nQW5kR2x5cGhzIikK
KyAgICAgICAgICAgIHNldExlbmd0aEFkanVzdEJhc2VWYWx1ZShMRU5HVEhBREpVU1RfU1BBQ0lO
R0FOREdMWVBIUyk7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRl
eHRMZW5ndGhBdHRyKSB7CiAgICAgICAgIHNldFRleHRMZW5ndGhCYXNlVmFsdWUoU1ZHTGVuZ3Ro
KHRoaXMsIExlbmd0aE1vZGVPdGhlciwgYXR0ci0+dmFsdWUoKSkpOwogICAgICAgICBpZiAodGV4
dExlbmd0aCgpLnZhbHVlKCkgPCAwLjApCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciB0ZXh0IGF0
dHJpYnV0ZSA8dGV4dExlbmd0aD4gaXMgbm90IGFsbG93ZWQiKTsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3BwCShyZXZpc2lvbiAyNjM2OSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3RlckxheW91dEluZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpwcm9j
ZXNzZWRDaAogICAgIH0KIH0KIAotYm9vbCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpuZXh0UGF0
aExheW91dFBvaW50QW5kQW5nbGUoZmxvYXQmIHgsIGZsb2F0JiB5LCBmbG9hdCYgYW5nbGUsIGZs
b2F0IGdseXBoQWR2YW5jZSwgZmxvYXQgbmV3T2Zmc2V0KQorYm9vbCBTVkdDaGFyYWN0ZXJMYXlv
dXRJbmZvOjpuZXh0UGF0aExheW91dFBvaW50QW5kQW5nbGUoZmxvYXQmIHgsIGZsb2F0JiB5LCBm
bG9hdCYgYW5nbGUsIGZsb2F0IGdseXBoQWR2YW5jZSwgZmxvYXQgZXh0cmFBZHZhbmNlLCBmbG9h
dCBuZXdPZmZzZXQpCiB7CiAgICAgaWYgKGxheW91dFBhdGhMZW5ndGggPD0gMC4wKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yMjUsNiArMjI1LDkgQEAgYm9vbCBTVkdDaGFyYWN0ZXJMYXlv
dXRJbmZvOjpuZXh0UGF0aExheQogICAgIGlmIChuZXdPZmZzZXQgIT0gRkxUX01JTikKICAgICAg
ICAgY3VycmVudE9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgbmV3T2Zmc2V0OwogCisgICAgLy8gUmVz
cGVjdCB0cmFuc2xhdGlvbiBhbG9uZyBwYXRoIChleHRyYUFkdmFuY2UgaXMgb3J0aG9nb25hbCB0
byB0aGUgcGF0aCkKKyAgICBjdXJyZW50T2Zmc2V0ICs9IGV4dHJhQWR2YW5jZTsKKwogICAgIGZs
b2F0IG9mZnNldCA9IGN1cnJlbnRPZmZzZXQgKyBnbHlwaEFkdmFuY2UgLyAyLjA7CiAgICAgY3Vy
cmVudE9mZnNldCArPSBnbHlwaEFkdmFuY2U7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NW
R0NoYXJhY3RlckxheW91dEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmgJKHJldmlzaW9uIDI2MzY5KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICsz
Miw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdSZW5k
ZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR1RleHRDb250ZW50RWxlbWVudC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTk2LDcgKzk3LDcgQEAgc3RydWN0IFNWR0NoYXJhY3RlckxheW91
dEluZm8gewogICAgIHZvaWQgcHJvY2Vzc2VkQ2h1bmsoZmxvYXQgc2F2ZWRTaGlmdFgsIGZsb2F0
IHNhdmVkU2hpZnRZKTsKICAgICB2b2lkIHByb2Nlc3NlZFNpbmdsZUNoYXJhY3RlcigpOwogCi0g
ICAgYm9vbCBuZXh0UGF0aExheW91dFBvaW50QW5kQW5nbGUoZmxvYXQmIHgsIGZsb2F0JiB5LCBm
bG9hdCYgYW5nbGUsIGZsb2F0IGdseXBoQWR2YW5jZSwgZmxvYXQgbmV3T2Zmc2V0KTsKKyAgICBi
b29sIG5leHRQYXRoTGF5b3V0UG9pbnRBbmRBbmdsZShmbG9hdCYgeCwgZmxvYXQmIHksIGZsb2F0
JiBhbmdsZSwgZmxvYXQgZ2x5cGhBZHZhbmNlLCBmbG9hdCBleHRyYUFkdmFuY2UsIGZsb2F0IG5l
d09mZnNldCk7CiAKICAgICAvLyBVc2VkIGZvciB0ZXh0LW9uLXBhdGguCiAgICAgdm9pZCBhZGRM
YXlvdXRJbmZvcm1hdGlvbihJbmxpbmVGbG93Qm94KiwgZmxvYXQgdGV4dEFuY2hvck9mZnNldCA9
IDAuMCk7CkBAIC0yMDIsMTkgKzIwMywzNCBAQCBzdHJ1Y3QgU1ZHSW5saW5lQm94Q2hhcmFjdGVy
UmFuZ2UgewogICAgIElubGluZUJveCogYm94OwogfTsKIAorLy8gQ29udmVuaWVuY2UgdHlwZWRl
ZgordHlwZWRlZiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR0xlbmd0aEFkanVzdFR5cGUgRUxl
bmd0aEFkanVzdDsKKwogc3RydWN0IFNWR1RleHRDaHVuayB7CiAgICAgU1ZHVGV4dENodW5rKCkK
ICAgICAgICAgOiBhbmNob3IoVEFfU1RBUlQpCisgICAgICAgICwgdGV4dExlbmd0aCgwLjApCisg
ICAgICAgICwgbGVuZ3RoQWRqdXN0KFNWR1RleHRDb250ZW50RWxlbWVudDo6TEVOR1RIQURKVVNU
X1NQQUNJTkcpCisgICAgICAgICwgY3RtKCkKICAgICAgICAgLCBpc1ZlcnRpY2FsVGV4dChmYWxz
ZSkKICAgICAgICAgLCBpc1RleHRQYXRoKGZhbHNlKQogICAgICAgICAsIHN0YXJ0KDApCiAgICAg
ICAgICwgZW5kKDApCiAgICAgeyB9CiAKKyAgICAvLyB0ZXh0LWFuY2hvciBzdXBwb3J0CiAgICAg
RVRleHRBbmNob3IgYW5jaG9yOworCisgICAgLy8gdGV4dExlbmd0aCAmIGxlbmd0aEFkanVzdCBz
dXBwb3J0CisgICAgZmxvYXQgdGV4dExlbmd0aDsKKyAgICBFTGVuZ3RoQWRqdXN0IGxlbmd0aEFk
anVzdDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOworCisgICAgLy8gc3RhdHVzIGZsYWdzCiAg
ICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA6IDE7CiAgICAgYm9vbCBpc1RleHRQYXRoIDogMTsKIAor
ICAgIC8vIG1haW4gY2h1bmsgZGF0YQogICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3Igc3Rh
cnQ7CiAgICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBlbmQ7CiAKQEAgLTIyNCw4ICsyNDAs
OSBAQCBzdHJ1Y3QgU1ZHVGV4dENodW5rIHsKIHN0cnVjdCBTVkdUZXh0Q2h1bmtXYWxrZXJCYXNl
IHsKICAgICB2aXJ0dWFsIH5TVkdUZXh0Q2h1bmtXYWxrZXJCYXNlKCkgeyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgb3BlcmF0b3IoKShTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRP
ZmZzZXQsIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBWZWN0
b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBlbmQpID0gMDsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
b3BlcmF0b3IoKShTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZzZXQsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY2h1bmtDdG0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgc3RhcnQsIGNvbnN0IFZlY3RvcjxT
VkdDaGFyPjo6aXRlcmF0b3ImIGVuZCkgPSAwOworCiAgICAgLy8gRm9sbG93aW5ncyBtZXRob2Rz
IGFyZSBvbmx5IHVzZWQgZm9yIHBhaW50aW5nIHRleHQgY2h1bmtzCiAgICAgdmlydHVhbCB2b2lk
IHN0YXJ0KElubGluZUJveCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kKElubGluZUJveCop
ID0gMDsKQEAgLTIzOSw2ICsyNTYsNyBAQCBzdHJ1Y3QgU1ZHVGV4dENodW5rV2Fsa2VyIDogcHVi
bGljIFNWR1RlCiBwdWJsaWM6CiAgICAgdHlwZWRlZiB2b2lkIChDYWxsYmFja0NsYXNzOjoqU1ZH
VGV4dENodW5rV2Fsa2VyQ2FsbGJhY2spKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzdGFydE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjaHVua0N0bSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgc3RhcnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIGVuZCk7CiAKQEAgLTI2Niw5ICsyODQsMTAgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQod2Fsa2VyKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgb3BlcmF0b3IoKShTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZzZXQs
IGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBWZWN0b3I8U1ZH
Q2hhcj46Oml0ZXJhdG9yJiBlbmQpCisgICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoU1ZHSW5s
aW5lVGV4dEJveCogdGV4dEJveCwgaW50IHN0YXJ0T2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGNodW5rQ3RtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxT
VkdDaGFyPjo6aXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9y
JiBlbmQpCiAgICAgewotICAgICAgICAoKm1fb2JqZWN0LiptX3dhbGtlckNhbGxiYWNrKSh0ZXh0
Qm94LCBzdGFydE9mZnNldCwgc3RhcnQsIGVuZCk7CisgICAgICAgICgqbV9vYmplY3QuKm1fd2Fs
a2VyQ2FsbGJhY2spKHRleHRCb3gsIHN0YXJ0T2Zmc2V0LCBjaHVua0N0bSwgc3RhcnQsIGVuZCk7
CiAgICAgfQogCiAgICAgLy8gRm9sbG93aW5ncyBtZXRob2RzIGFyZSBvbmx5IHVzZWQgZm9yIHBh
aW50aW5nIHRleHQgY2h1bmtzCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAkocmV2aXNpb24gMjYzNjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw4IEBAIHN0cnVjdCBTVkdJbmxp
bmVUZXh0Qm94Q2xvc2VzdENoYXJhY3RlclQKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBjaHVu
a1BvcnRpb25DYWxsYmFjayhTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZz
ZXQsIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBWZWN0b3I8
U1ZHQ2hhcj46Oml0ZXJhdG9yJiBlbmQpCisgICAgdm9pZCBjaHVua1BvcnRpb25DYWxsYmFjayhT
VkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZzZXQsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgY2h1bmtDdG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBW
ZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBzdGFydCwgY29uc3QgVmVjdG9yPFNWR0NoYXI+Ojpp
dGVyYXRvciYgZW5kKQogICAgIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJv
eC0+dGV4dE9iamVjdCgpLT5zdHlsZSgpOwogCkBAIC0xMzksMTIgKzE0MCwxNSBAQCBzdHJ1Y3Qg
U1ZHSW5saW5lVGV4dEJveENsb3Nlc3RDaGFyYWN0ZXJUCiAgICAgICAgICAgICBpZiAodGV4dEJv
eC0+bV9yZXZlcnNlZCkKICAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSB0ZXh0Qm94LT5zdGFy
dCgpICsgdGV4dEJveC0+ZW5kKCkgLSBuZXdPZmZzZXQ7CiAKLSAgICAgICAgICAgIGZsb2F0IGds
eXBoV2lkdGggPSB0ZXh0Qm94LT5jYWxjdWxhdGVHbHlwaFdpZHRoKHN0eWxlLCBuZXdPZmZzZXQp
OwotICAgICAgICAgICAgZmxvYXQgZ2x5cGhIZWlnaHQgPSB0ZXh0Qm94LT5jYWxjdWxhdGVHbHlw
aEhlaWdodChzdHlsZSwgbmV3T2Zmc2V0KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaFJl
Y3QgPSB0ZXh0Qm94LT5jYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMoc3R5bGUsIG5ld09mZnNldCwg
Kml0KTsKKyAgICAgICAgICAgIGdseXBoUmVjdC5zZXRXaWR0aChnbHlwaFJlY3Qud2lkdGgoKSAv
IDIuMCk7CisgICAgICAgICAgICBnbHlwaFJlY3Quc2V0SGVpZ2h0KGdseXBoUmVjdC5oZWlnaHQo
KSAvIDIuMCk7CisKKyAgICAgICAgICAgIGdseXBoUmVjdCA9IGNodW5rQ3RtLm1hcFJlY3QoZ2x5
cGhSZWN0KTsKIAogICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3RhbmNlcyByZWxhdGl2ZSB0
byB0aGUgZ2x5cGggbWlkLXBvaW50LiBJIGhvcGUgdGhpcyBpcyBhY2N1cmF0ZSBlbm91Z2guCi0g
ICAgICAgICAgICBmbG9hdCB4RGlzdGFuY2UgPSAoKml0KS54ICsgZ2x5cGhXaWR0aCAvIDIuMCAt
IG1feDsKLSAgICAgICAgICAgIGZsb2F0IHlEaXN0YW5jZSA9ICgqaXQpLnkgLSBnbHlwaEhlaWdo
dCAvIDIuMCAtIG1feTsKKyAgICAgICAgICAgIGZsb2F0IHhEaXN0YW5jZSA9IGdseXBoUmVjdC54
KCkgKyBnbHlwaFJlY3Qud2lkdGgoKSAtIG1feDsKKyAgICAgICAgICAgIGZsb2F0IHlEaXN0YW5j
ZSA9IGdseXBoUmVjdC55KCkgLSBnbHlwaFJlY3QuaGVpZ2h0KCkgLSBtX3k7CiAKICAgICAgICAg
ICAgIGZsb2F0IG5ld0Rpc3RhbmNlID0gc3FydCh4RGlzdGFuY2UgKiB4RGlzdGFuY2UgKyB5RGlz
dGFuY2UgKiB5RGlzdGFuY2UpOwogICAgICAgICAgICAgaWYgKG5ld0Rpc3RhbmNlIDw9IG1fZGlz
dGFuY2UpIHsKQEAgLTE4OSw3ICsxOTMsOCBAQCBzdHJ1Y3QgU1ZHSW5saW5lVGV4dEJveFNlbGVj
dGlvblJlY3RXYWxrCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgY2h1bmtQb3J0aW9uQ2FsbGJh
Y2soU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50IHN0YXJ0T2Zmc2V0LCBjb25zdCBWZWN0
b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBzdGFydCwgY29uc3QgVmVjdG9yPFNWR0NoYXI+OjppdGVy
YXRvciYgZW5kKQorICAgIHZvaWQgY2h1bmtQb3J0aW9uQ2FsbGJhY2soU1ZHSW5saW5lVGV4dEJv
eCogdGV4dEJveCwgaW50IHN0YXJ0T2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNodW5r
Q3RtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0NoYXI+
OjppdGVyYXRvciYgc3RhcnQsIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIGVuZCkK
ICAgICB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPnRleHRPYmplY3Qo
KS0+c3R5bGUoKTsKIApAQCAtMjAyLDYgKzIwNyw4IEBAIHN0cnVjdCBTVkdJbmxpbmVUZXh0Qm94
U2VsZWN0aW9uUmVjdFdhbGsKIAogICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0LnVuaXRlKHRl
eHRCb3gtPmNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhzdHlsZSwgbmV3T2Zmc2V0LCAqaXQpKTsK
ICAgICAgICAgfQorCisgICAgICAgIG1fc2VsZWN0aW9uUmVjdCA9IGNodW5rQ3RtLm1hcFJlY3Qo
bV9zZWxlY3Rpb25SZWN0KTsKICAgICB9CiAKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdCgp
IGNvbnN0CkBAIC0yMzQsOSArMjQxLDcgQEAgYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjpzdmdDaGFy
YWN0ZXJIaXRzUAogCiAgICAgU1ZHQ2hhciYgY2hhckF0UG9zID0gKmNoYXJBdFBvc1B0cjsKICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0T2JqZWN0KCktPnN0eWxlKG1fZmlyc3RMaW5lKTsK
LQotICAgIGZsb2F0IGdseXBoV2lkdGggPSBjYWxjdWxhdGVHbHlwaFdpZHRoKHN0eWxlLCBvZmZz
ZXQpOwotICAgIGZsb2F0IGdseXBoSGVpZ2h0ID0gY2FsY3VsYXRlR2x5cGhIZWlnaHQoc3R5bGUs
IG9mZnNldCk7CisgICAgRmxvYXRSZWN0IGdseXBoUmVjdCA9IGNhbGN1bGF0ZUdseXBoQm91bmRh
cmllcyhzdHlsZSwgb2Zmc2V0LCBjaGFyQXRQb3MpOwogCiAgICAgaWYgKG1fcmV2ZXJzZWQpCiAg
ICAgICAgIG9mZnNldCsrOwpAQCAtMjQ1LDcgKzI1MCw3IEBAIGJvb2wgU1ZHSW5saW5lVGV4dEJv
eDo6c3ZnQ2hhcmFjdGVySGl0c1AKICAgICAvLyAoIzEzOTEwKSBUaGlzIGNvZGUgZG9lcyBub3Qg
aGFuZGxlIGJvdHRvbS10by10b3AvdG9wLXRvLWJvdHRvbSB2ZXJ0aWNhbCB0ZXh0LgogCiAgICAg
Ly8gQ2hlY2sgd2hldGhlciB5IHBvc2l0aW9uIGhpdHMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIAot
ICAgIGlmICh5IDwgY2hhckF0UG9zLnkgLSBnbHlwaEhlaWdodCB8fCB5ID4gY2hhckF0UG9zLnkp
CisgICAgaWYgKHkgPCBjaGFyQXRQb3MueSAtIGdseXBoUmVjdC5oZWlnaHQoKSB8fCB5ID4gY2hh
ckF0UG9zLnkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENoZWNrIHdoZXRoZXIg
eCBwb3NpdGlvbiBoaXRzIHRoZSBjdXJyZW50IGNoYXJhY3RlcgpAQCAtMjU5LDExICsyNjQsMTEg
QEAgYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjpzdmdDaGFyYWN0ZXJIaXRzUAogICAgIH0KIAogICAg
IC8vIElmIHdlIGFyZSBwYXN0IHRoZSBsYXN0IGdseXBoIG9mIHRoaXMgYm94LCBkb24ndCBtYXJr
IGl0IGFzICdoaXQnIGFueW1vcmUuCi0gICAgaWYgKHggPj0gY2hhckF0UG9zLnggKyBnbHlwaFdp
ZHRoICYmIG9mZnNldCA9PSAoaW50KSBlbmQoKSkKKyAgICBpZiAoeCA+PSBjaGFyQXRQb3MueCAr
IGdseXBoUmVjdC53aWR0aCgpICYmIG9mZnNldCA9PSAoaW50KSBlbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gU25hcCB0byBjaGFyYWN0ZXIgYXQgaGFsZiBvZiBpdCdzIGFk
dmFuY2UKLSAgICBpZiAoeCA+PSBjaGFyQXRQb3MueCArIGdseXBoV2lkdGggLyAyLjApCisgICAg
aWYgKHggPj0gY2hhckF0UG9zLnggKyBnbHlwaFJlY3Qud2lkdGgoKSAvIDIuMCkKICAgICAgICAg
b2Zmc2V0ICs9IG1fcmV2ZXJzZWQgPyAtMSA6IDE7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAyNjM2OSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTMsNyArMjUzLDggQEAgc3RydWN0IFNWR1Jvb3RJbmxpbmVCb3hQYWludFdhbGtlciB7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIGNodW5rUG9ydGlvbkNhbGxi
YWNrKFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGludCBzdGFydE9mZnNldCwgY29uc3QgVmVj
dG9yPFNWR0NoYXI+OjppdGVyYXRvciYgc3RhcnQsIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6aXRl
cmF0b3ImIGVuZCkKKyAgICB2b2lkIGNodW5rUG9ydGlvbkNhbGxiYWNrKFNWR0lubGluZVRleHRC
b3gqIHRleHRCb3gsIGludCBzdGFydE9mZnNldCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjaHVu
a0N0bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdDaGFy
Pjo6aXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBlbmQp
CiAgICAgewogICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdGV4dEJveC0+dGV4dE9iamVjdCgp
OwogICAgICAgICBBU1NFUlQodGV4dCk7CkBAIC0yNjksNiArMjcwLDkgQEAgc3RydWN0IFNWR1Jv
b3RJbmxpbmVCb3hQYWludFdhbGtlciB7CiAgICAgICAgIEludFBvaW50IGRlY29yYXRpb25Pcmln
aW47CiAgICAgICAgIFNWR1RleHREZWNvcmF0aW9uSW5mbyBpbmZvOwogCisgICAgICAgIGlmICgh
Y2h1bmtDdG0uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgbV9wYWludEluZm8uY29udGV4dC0+
Y29uY2F0Q1RNKGNodW5rQ3RtKTsKKwogICAgICAgICBmb3IgKFZlY3RvcjxTVkdDaGFyPjo6aXRl
cmF0b3IgaXQgPSBzdGFydDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoISgq
aXQpLnZpc2libGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMDgsNiArMzEyLDkg
QEAgc3RydWN0IFNWR1Jvb3RJbmxpbmVCb3hQYWludFdhbGtlciB7CiAgICAgICAgICAgICAvLyBT
a2lwIHByb2Nlc3NlZCBjaGFyYWN0ZXJzCiAgICAgICAgICAgICBpdCA9IGl0U2VhcmNoIC0gMTsK
ICAgICAgICAgfQorCisgICAgICAgIGlmICghY2h1bmtDdG0uaXNJZGVudGl0eSgpKQorICAgICAg
ICAgICAgbV9wYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKGNodW5rQ3RtLmludmVyc2UoKSk7
CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNDEyLDUxICs0MTksODkgQEAgVGV4dFN0eWxlIHN2Z1Rl
eHRTdHlsZUZvcklubGluZVRleHRCb3goUgogICAgIHJldHVybiBUZXh0U3R5bGUoZmFsc2UsIHhQ
b3MsIHRleHRCb3gtPnRvQWRkKCksIHRleHRCb3gtPm1fcmV2ZXJzZWQsIHRleHRCb3gtPm1fZGly
T3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKTsKIH0KIAotc3RhdGljIGZsb2F0
IGN1bW11bGF0ZWRXaWR0aE9mVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmspCitzdGF0aWMg
ZmxvYXQgY3VtbXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRleHRDaHVuayhTVkdUZXh0Q2h1bmsmIGNo
dW5rLCBib29sIGNhbGNXaWR0aE9ubHkpCiB7Ci0gICAgZmxvYXQgd2lkdGggPSAwLjA7CisgICAg
ZmxvYXQgbGVuZ3RoID0gMC4wOworICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgY2hhckl0
ID0gY2h1bmsuc3RhcnQ7CiAKICAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+
OjppdGVyYXRvciBpdCA9IGNodW5rLmJveGVzLmJlZ2luKCk7CiAgICAgVmVjdG9yPFNWR0lubGlu
ZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0b3IgZW5kID0gY2h1bmsuYm94ZXMuZW5kKCk7CiAK
LSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB3aWR0aCArPSBjdW1tdWxhdGVk
V2lkdGhPZklubGluZUJveENoYXJhY3RlclJhbmdlKCppdCk7CisgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAq
aXQ7CiAKLSAgICByZXR1cm4gd2lkdGg7Ci19CisgICAgICAgIFNWR0lubGluZVRleHRCb3gqIGJv
eCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihyYW5nZS5ib3gpOworICAgICAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBib3gtPm9iamVjdCgpLT5zdHlsZSgpOwogCi1zdGF0aWMgZmxv
YXQgY3VtbXVsYXRlZEhlaWdodE9mVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmspCi17Ci0g
ICAgZmxvYXQgaGVpZ2h0ID0gMC4wOworICAgICAgICBmb3IgKGludCBpID0gcmFuZ2Uuc3RhcnRP
ZmZzZXQ7IGkgPCByYW5nZS5lbmRPZmZzZXQ7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKGNo
YXJJdCA8PSBjaHVuay5lbmQpOwogCi0gICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJh
bmdlPjo6aXRlcmF0b3IgaXQgPSBjaHVuay5ib3hlcy5iZWdpbigpOwotICAgIFZlY3RvcjxTVkdJ
bmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGVuZCA9IGNodW5rLmJveGVzLmVuZCgp
OworICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGhvdyBtYW55IGNoYXJhY3RlcnMgLSBzdGFydGlu
ZyBmcm9tIHRoZSBjdXJyZW50IC0gY2FuIGJlIG1lYXN1cmVkIGF0IG9uY2UuCisgICAgICAgICAg
ICAvLyBJbXBvcnRhbnQgZm9yIG5vbi1hYnNvbHV0ZSBwb3NpdGlvbmVkIG5vbi1sYXRpbjEgdGV4
dCAoaWUuIEFyYWJpYykgd2hlcmUgaWUuIHRoZSB3aWR0aAorICAgICAgICAgICAgLy8gb2YgYSBz
dHJpbmcgaXMgbm90IHRoZSBzdW0gb2YgdGhlIGJvdW5kYXJpZXMgb2YgYWxsIGNvbnRhaW5lZCBn
bHlwaHMuCisgICAgICAgICAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0U2VhcmNoID0g
Y2hhckl0ICsgMTsKKyAgICAgICAgICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgZW5kU2Vh
cmNoID0gY2hhckl0ICsgcmFuZ2UuZW5kT2Zmc2V0IC0gaTsKKyAgICAgICAgICAgIHdoaWxlIChp
dFNlYXJjaCAhPSBlbmRTZWFyY2gpIHsKKyAgICAgICAgICAgICAgICBpZiAoKCppdFNlYXJjaCku
ZHJhd25TZXBlcmF0ZWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgaXRTZWFyY2grKzsKKyAgICAgICAgICAgIH0KIAotICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIGhlaWdodCArPSBjdW1tdWxhdGVkSGVpZ2h0T2ZJbmxpbmVCb3hDaGFy
YWN0ZXJSYW5nZSgqaXQpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvc2l0aW9uT2Zmc2V0
ID0gaXRTZWFyY2ggLSBjaGFySXQ7CiAKLSAgICByZXR1cm4gaGVpZ2h0OwotfQorICAgICAgICAg
ICAgLy8gQ2FsY3VsYXRlIHdpZHRoL2hlaWdodCBvZiBzdWJyYW5nZQorICAgICAgICAgICAgU1ZH
SW5saW5lQm94Q2hhcmFjdGVyUmFuZ2Ugc3ViUmFuZ2U7CisgICAgICAgICAgICBzdWJSYW5nZS5i
b3ggPSByYW5nZS5ib3g7CisgICAgICAgICAgICBzdWJSYW5nZS5zdGFydE9mZnNldCA9IGk7Cisg
ICAgICAgICAgICBzdWJSYW5nZS5lbmRPZmZzZXQgPSBpICsgcG9zaXRpb25PZmZzZXQ7CiAKLXN0
YXRpYyB2b2lkIGFwcGx5VGV4dEFuY2hvclRvVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmsp
Ci17Ci0jaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAwCi0gICAgewotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkhhbmRsZSBURVhUIENIVU5LISBhbmNob3I9JWksIGlzVmVydGljYWxUZXh0PSVp
LCBpc1RleHRQYXRoPSVpIHN0YXJ0PSVwLCBlbmQ9JXAgLT4gZGlzdDogJWlcbiIsCi0gICAgICAg
ICAgICAgICAgKGludCkgY2h1bmsuYW5jaG9yLCAoaW50KSBjaHVuay5pc1ZlcnRpY2FsVGV4dCwg
KGludCkgY2h1bmsuaXNUZXh0UGF0aCwgY2h1bmsuc3RhcnQsIGNodW5rLmVuZCwgKHVuc2lnbmVk
IGludCkgKGNodW5rLmVuZC1jaHVuay5zdGFydCkpOworICAgICAgICAgICAgaWYgKGNhbGNXaWR0
aE9ubHkpCisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGN1bW11bGF0ZWRXaWR0aE9mSW5saW5l
Qm94Q2hhcmFjdGVyUmFuZ2Uoc3ViUmFuZ2UpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGxlbmd0aCArPSBjdW1tdWxhdGVkSGVpZ2h0T2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5n
ZShzdWJSYW5nZSk7CiAKLSAgICAgICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdl
Pjo6aXRlcmF0b3IgYm94SXQgPSBjaHVuay5ib3hlcy5iZWdpbigpOwotICAgICAgICBWZWN0b3I8
U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+OjppdGVyYXRvciBib3hFbmQgPSBjaHVuay5ib3hl
cy5lbmQoKTsKKyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBnYXAgYmV0d2VlbiB0aGUgcHJldmlv
dXMgJiBjdXJyZW50IHJhbmdlCisgICAgICAgICAgICAvLyA8dGV4dCB4PSIxMCA1MCA3MCI+QUJD
RDwvdGV4dD4gLSB3ZSBuZWVkIHRvIHRha2UgdGhlIGdhcHMgYmV0d2VlbiBBICYgQiBpbnRvIGFj
Y291bnQKKyAgICAgICAgICAgIC8vIHNvIGFkZCAiNDAiIGFzIHdpZHRoLCBhbmQgYW5hbG9nb3Vz
IGZvciBCICYgQywgYWRkICIyMCIgYXMgd2lkdGguCisgICAgICAgICAgICBpZiAoaXRTZWFyY2gg
PiBjaHVuay5zdGFydCAmJiBpdFNlYXJjaCA8IGNodW5rLmVuZCkgeworICAgICAgICAgICAgICAg
IFNWR0NoYXImIGxhc3RDaGFyYWN0ZXIgPSAqKGl0U2VhcmNoIC0gMSk7CisgICAgICAgICAgICAg
ICAgU1ZHQ2hhciYgY3VycmVudENoYXJhY3RlciA9ICppdFNlYXJjaDsKKworICAgICAgICAgICAg
ICAgIGludCBvZmZzZXQgPSBib3gtPm1fcmV2ZXJzZWQgPyBib3gtPmVuZCgpIC0gaSAtIHBvc2l0
aW9uT2Zmc2V0ICsgMTogYm94LT5zdGFydCgpICsgaSArIHBvc2l0aW9uT2Zmc2V0IC0gMTsKKwor
ICAgICAgICAgICAgICAgIGlmIChjYWxjV2lkdGhPbmx5KSB7CisgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGxhc3RHbHlwaFdpZHRoID0gYm94LT5jYWxjdWxhdGVHbHlwaFdpZHRoKHN0eWxlLCBv
ZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gY3VycmVudENoYXJhY3Rlci54
IC0gbGFzdENoYXJhY3Rlci54IC0gbGFzdEdseXBoV2lkdGg7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgbGFzdEdseXBoSGVpZ2h0ID0gYm94LT5j
YWxjdWxhdGVHbHlwaEhlaWdodChzdHlsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoICs9IGN1cnJlbnRDaGFyYWN0ZXIueSAtIGxhc3RDaGFyYWN0ZXIueSAtIGxhc3RHbHlw
aEhlaWdodDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgdW5z
aWduZWQgaW50IGkgPSAwOwotICAgICAgICBmb3IgKDsgYm94SXQgIT0gYm94RW5kOyArK2JveEl0
KSB7Ci0gICAgICAgICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94
SXQ7IGkrKzsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUkFOR0UgJWkgU1RBUlRPRkZT
RVQ6ICVpLCBFTkRPRkZTRVQ6ICVpLCBCT1g6ICVwXG4iLCBpLCByYW5nZS5zdGFydE9mZnNldCwg
cmFuZ2UuZW5kT2Zmc2V0LCByYW5nZS5ib3gpOworICAgICAgICAgICAgLy8gQWR2YW5jZSBwcm9j
ZXNzZWQgY2hhcmFjdGVycworICAgICAgICAgICAgaSArPSBwb3NpdGlvbk9mZnNldCAtIDE7Cisg
ICAgICAgICAgICBjaGFySXQgPSBpdFNlYXJjaDsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgog
Ci0gICAgaWYgKGNodW5rLmFuY2hvciA9PSBUQV9TVEFSVCB8fCBjaHVuay5pc1RleHRQYXRoKQor
ICAgIEFTU0VSVChjaGFySXQgPT0gY2h1bmsuZW5kKTsKKyAgICByZXR1cm4gbGVuZ3RoOworfQor
CitzdGF0aWMgZmxvYXQgY3VtbXVsYXRlZFdpZHRoT2ZUZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBj
aHVuaykKK3sKKyAgICByZXR1cm4gY3VtbXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRleHRDaHVuayhj
aHVuaywgdHJ1ZSk7Cit9CisKK3N0YXRpYyBmbG9hdCBjdW1tdWxhdGVkSGVpZ2h0T2ZUZXh0Q2h1
bmsoU1ZHVGV4dENodW5rJiBjaHVuaykKK3sKKyAgICByZXR1cm4gY3VtbXVsYXRlZFdpZHRoT3JI
ZWlnaHRPZlRleHRDaHVuayhjaHVuaywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBhcHBseVRl
eHRBbmNob3JUb1RleHRDaHVuayhTVkdUZXh0Q2h1bmsmIGNodW5rKQoreworICAgIGlmIChjaHVu
ay5hbmNob3IgPT0gVEFfU1RBUlQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZsb2F0IHNoaWZ0
ID0gMC4wOwpAQCAtNTAxLDYgKzU0Niw1MiBAQCBzdGF0aWMgdm9pZCBhcHBseVRleHRBbmNob3JU
b1RleHRDaHVuayhTCiAgICAgfQogfQogCitzdGF0aWMgdm9pZCBhcHBseVRleHRMZW5ndGhDb3Jy
ZWN0aW9uVG9UZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVuaykKK3sKKyAgICBpZiAoY2h1bmsu
dGV4dExlbmd0aCA8PSBGTFRfRVBTSUxPTikgLy8gTm90IHN1cmUsIHdoeSA8PSAwLjAgZG9lc24n
dCB3b3JrIGhlcmUgKHNvbWUgZmx0cG9pbnQgaXNzdWUpCisgICAgICAgIHJldHVybjsKKworICAg
IGZsb2F0IGNvbXB1dGVkV2lkdGggPSBjdW1tdWxhdGVkV2lkdGhPZlRleHRDaHVuayhjaHVuayk7
CisgICAgZmxvYXQgY29tcHV0ZWRIZWlnaHQgPSBjdW1tdWxhdGVkSGVpZ2h0T2ZUZXh0Q2h1bmso
Y2h1bmspOworCisgICAgaWYgKChjb21wdXRlZFdpZHRoIDw9IDAuMCAmJiAhY2h1bmsuaXNWZXJ0
aWNhbFRleHQpIHx8CisgICAgICAgIChjb21wdXRlZEhlaWdodCA8PSAwLjAgJiYgY2h1bmsuaXNW
ZXJ0aWNhbFRleHQpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBjb21wdXRlZExlbmd0
aDsKKworICAgIGlmIChjaHVuay5pc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgY29tcHV0ZWRMZW5n
dGggPSBjb21wdXRlZEhlaWdodDsKKyAgICBlbHNlCisgICAgICAgIGNvbXB1dGVkTGVuZ3RoID0g
Y29tcHV0ZWRXaWR0aDsKKworICAgIGlmIChjaHVuay5sZW5ndGhBZGp1c3QgPT0gU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpMRU5HVEhBREpVU1RfU1BBQ0lOR0FOREdMWVBIUykgeworICAgICAgICBT
VkdDaGFyJiBmaXJzdENoYXIgPSAqKGNodW5rLnN0YXJ0KTsKKyAgICAgICAgY2h1bmsuY3RtLnRy
YW5zbGF0ZShmaXJzdENoYXIueCwgZmlyc3RDaGFyLnkpOworCisgICAgICAgIGlmIChjaHVuay5p
c1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGNodW5rLmN0bS5zY2FsZSgxLjAsIGNodW5rLnRl
eHRMZW5ndGggLyBjb21wdXRlZExlbmd0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNo
dW5rLmN0bS5zY2FsZShjaHVuay50ZXh0TGVuZ3RoIC8gY29tcHV0ZWRMZW5ndGgsIDEuMCk7CisK
KyAgICAgICAgY2h1bmsuY3RtLnRyYW5zbGF0ZSgtZmlyc3RDaGFyLngsIC1maXJzdENoYXIueSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgc3BhY2luZ1RvQXBwbHkgPSAoY2h1bmsudGV4
dExlbmd0aCAtIGNvbXB1dGVkTGVuZ3RoKSAvIGZsb2F0KGNodW5rLmVuZCAtIGNodW5rLnN0YXJ0
KTsKKworICAgICAgICAvLyBBcHBseSBjb3JyZWN0aW9uIHRvIGNodW5rIAorICAgICAgICBWZWN0
b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGNodW5rSXQgPSBjaHVuay5zdGFydDsKKyAgICAgICAgZm9y
ICg7IGNodW5rSXQgIT0gY2h1bmsuZW5kOyArK2NodW5rSXQpIHsKKyAgICAgICAgICAgIFNWR0No
YXImIGN1ckNoYXIgPSAqY2h1bmtJdDsKKyAgICAgICAgICAgIGN1ckNoYXIuZHJhd25TZXBlcmF0
ZWQgPSB0cnVlOworCisgICAgICAgICAgICBpZiAoY2h1bmsuaXNWZXJ0aWNhbFRleHQpCisgICAg
ICAgICAgICAgICAgY3VyQ2hhci55ICs9IChjaHVua0l0IC0gY2h1bmsuc3RhcnQpICogc3BhY2lu
Z1RvQXBwbHk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3VyQ2hhci54ICs9
IChjaHVua0l0IC0gY2h1bmsuc3RhcnQpICogc3BhY2luZ1RvQXBwbHk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKIHZvaWQgU1ZHUm9vdElubGluZUJveDo6Y29tcHV0ZVBlckNoYXJhY3RlckxheW91
dEluZm9ybWF0aW9uKCkKIHsKICAgICAvLyBDbGVhbiB1cCBhbnkgcHJldmlvdXMgbGF5b3V0IGlu
Zm9ybWF0aW9uCkBAIC03OTAsMjcgKzg4MSwxNCBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmJ1
aWxkTGF5b3V0SW5mb3JtCiAgICAgICAgICAgICBpbmZvLmN1cnkgPSBpbmZvLnlWYWx1ZU5leHQo
KTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIENhbGN1bGF0ZSBhYnNvbHV0ZSB4L3kgdmFsdWVz
LCBpZiBuZWVkZWQKLSAgICAgICAgaWYgKCFpbmZvLmluUGF0aExheW91dCgpKQotICAgICAgICAg
ICAgc3ZnQ2hhci52aXNpYmxlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBm
bG9hdCBnbHlwaEFkdmFuY2UgPSBpc1ZlcnRpY2FsVGV4dCA/IGdseXBoSGVpZ2h0IDogZ2x5cGhX
aWR0aDsKLSAgICAgICAgICAgIGZsb2F0IG5ld09mZnNldCA9IEZMVF9NSU47Ci0KLSAgICAgICAg
ICAgIGlmIChhc3NpZ25lZFggJiYgIWlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAgIG5l
d09mZnNldCA9IGluZm8uY3VyeDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGFzc2lnbmVkWSAmJiBp
c1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBpbmZvLmN1cnk7Ci0K
LSAgICAgICAgICAgIHN2Z0NoYXIudmlzaWJsZSA9IGluZm8ubmV4dFBhdGhMYXlvdXRQb2ludEFu
ZEFuZ2xlKGluZm8uY3VyeCwgaW5mby5jdXJ5LCBpbmZvLmFuZ2xlLCBnbHlwaEFkdmFuY2UsIG5l
d09mZnNldCk7Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAg
ICAgICAgfQorICAgICAgICBmbG9hdCBkeCA9IDAuMDsKKyAgICAgICAgZmxvYXQgZHkgPSAwLjA7
CiAKICAgICAgICAgLy8gQXBwbHkgeC1heGlzIHNoaWZ0CiAgICAgICAgIGlmIChpbmZvLmR4VmFs
dWVBdmFpbGFibGUoKSkgewogICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRy
dWU7CiAKLSAgICAgICAgICAgIGZsb2F0IGR4ID0gaW5mby5keFZhbHVlTmV4dCgpOworICAgICAg
ICAgICAgZHggPSBpbmZvLmR4VmFsdWVOZXh0KCk7CiAgICAgICAgICAgICBpbmZvLmR4ICs9IGR4
OwogCiAgICAgICAgICAgICBpZiAoIWluZm8uaW5QYXRoTGF5b3V0KCkpCkBAIC04MjEsMTMgKzg5
OSwzMSBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmJ1aWxkTGF5b3V0SW5mb3JtCiAgICAgICAg
IGlmIChpbmZvLmR5VmFsdWVBdmFpbGFibGUoKSkgewogICAgICAgICAgICAgc3ZnQ2hhci5kcmF3
blNlcGVyYXRlZCA9IHRydWU7CiAKLSAgICAgICAgICAgIGZsb2F0IGR5ID0gaW5mby5keVZhbHVl
TmV4dCgpOworICAgICAgICAgICAgZHkgPSBpbmZvLmR5VmFsdWVOZXh0KCk7CiAgICAgICAgICAg
ICBpbmZvLmR5ICs9IGR5OwogCiAgICAgICAgICAgICBpZiAoIWluZm8uaW5QYXRoTGF5b3V0KCkp
CiAgICAgICAgICAgICAgICAgaW5mby5jdXJ5ICs9IGR5OwogICAgICAgICB9CiAKKyAgICAgICAg
Ly8gQ2FsY3VsYXRlIGFic29sdXRlIHgveSB2YWx1ZXMsIGlmIG5lZWRlZAorICAgICAgICBpZiAo
IWluZm8uaW5QYXRoTGF5b3V0KCkpCisgICAgICAgICAgICBzdmdDaGFyLnZpc2libGUgPSB0cnVl
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZSA9IGlzVmVy
dGljYWxUZXh0ID8gZ2x5cGhIZWlnaHQgOiBnbHlwaFdpZHRoOworICAgICAgICAgICAgZmxvYXQg
ZXh0cmFBZHZhbmNlID0gaXNWZXJ0aWNhbFRleHQgPyBkeSA6IGR4OworCisgICAgICAgICAgICBm
bG9hdCBuZXdPZmZzZXQgPSBGTFRfTUlOOworCisgICAgICAgICAgICBpZiAoYXNzaWduZWRYICYm
ICFpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBpbmZvLmN1cng7
CisgICAgICAgICAgICBlbHNlIGlmIChhc3NpZ25lZFkgJiYgaXNWZXJ0aWNhbFRleHQpCisgICAg
ICAgICAgICAgICAgbmV3T2Zmc2V0ID0gaW5mby5jdXJ5OworCisgICAgICAgICAgICBzdmdDaGFy
LnZpc2libGUgPSBpbmZvLm5leHRQYXRoTGF5b3V0UG9pbnRBbmRBbmdsZShpbmZvLmN1cngsIGlu
Zm8uY3VyeSwgaW5mby5hbmdsZSwgZ2x5cGhBZHZhbmNlLCBleHRyYUFkdmFuY2UsIG5ld09mZnNl
dCk7CisgICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAg
fQorCiAgICAgICAgIC8vIEFwcGx5IHJvdGF0aW9uCiAgICAgICAgIGlmIChpbmZvLmFuZ2xlVmFs
dWVBdmFpbGFibGUoKSkKICAgICAgICAgICAgIGluZm8uYW5nbGUgPSBpbmZvLmFuZ2xlVmFsdWVO
ZXh0KCk7CkBAIC04NTQsMTQgKzk1MCwxNyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmJ1aWxk
TGF5b3V0SW5mb3JtCiAgICAgICAgICAgICBzdmdDaGFyLnBhdGhYU2hpZnQgPSAwLjA7CiAgICAg
ICAgICAgICBzdmdDaGFyLnBhdGhZU2hpZnQgPSAwLjA7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBzdmdDaGFyLnBhdGhYU2hpZnQgPSBpbmZvLmR4ICsgaW5mby5zaGlmdHg7Ci0gICAg
ICAgICAgICBzdmdDaGFyLnBhdGhZU2hpZnQgPSBpbmZvLmR5ICsgaW5mby5zaGlmdHk7CisgICAg
ICAgICAgICBzdmdDaGFyLnBhdGhYU2hpZnQgPSBpbmZvLnNoaWZ0eDsKKyAgICAgICAgICAgIHN2
Z0NoYXIucGF0aFlTaGlmdCA9IGluZm8uc2hpZnR5OwogCiAgICAgICAgICAgICAvLyBUcmFuc2xh
dGUgdG8gZ2x5cGggbWlkcG9pbnQKLSAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAg
ICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkgewogICAgICAgICAgICAgICAgIHN2Z0NoYXIu
cGF0aFlTaGlmdCAtPSBnbHlwaEhlaWdodCAvIDIuMDsKLSAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzdmdDaGFyLnBhdGhYU2hpZnQgKz0gaW5mby5keDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoWVNoaWZ0ICs9IGluZm8uZHk7CiAg
ICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoWFNoaWZ0IC09IGdseXBoV2lkdGggLyAyLjA7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAKICAgICAgICAgLy8gQ29ycmVjdCBjaGFyYWN0ZXIg
cG9zaXRpb24gZm9yIHZlcnRpY2FsIHRleHQgbGF5b3V0CkBAIC05MjAsNiArMTAxOSwxMiBAQCB2
b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmJ1aWxkVGV4dENodW5rcyhJCiAgICAgICAgICAgICBSZW5k
ZXJUZXh0KiB0ZXh0ID0gdGV4dEJveC0+dGV4dE9iamVjdCgpOwogICAgICAgICAgICAgQVNTRVJU
KHRleHQpOwogCisgICAgICAgICAgICBTVkdFbGVtZW50KiB0ZXh0RWxlbWVudCA9IHN2Z19keW5h
bWljX2Nhc3QodGV4dC0+ZWxlbWVudCgpLT5wYXJlbnQoKSk7CisgICAgICAgICAgICBBU1NFUlQo
dGV4dC0+ZWxlbWVudCgpKTsKKworICAgICAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50KiB0
ZXh0Q29udGVudCA9IHN0YXRpY19jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudCo+KHRleHRFbGVt
ZW50KTsKKyAgICAgICAgICAgIEFTU0VSVCh0ZXh0Q29udGVudCk7CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIFN0YXJ0IG5ldyBjaGFyYWN0ZXIgcmFuZ2UgZm9yIHRoZSBmaXJzdCBjaHVu
awogICAgICAgICAgICAgYm9vbCBpc0ZpcnN0Q2hhcmFjdGVyID0gbV9zdmdUZXh0Q2h1bmtzLmlz
RW1wdHkoKSAmJiBpbmZvLmNodW5rLnN0YXJ0ID09IGluZm8uaXQgJiYgaW5mby5jaHVuay5zdGFy
dCA9PSBpbmZvLmNodW5rLmVuZDsKICAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2hhcmFjdGVyKSB7
CkBAIC05NDksNiArMTA1NCw4IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRUZXh0Q2h1
bmtzKEkKICAgICAgICAgICAgICAgICAgICAgaW5mby5jaHVuay5pc1ZlcnRpY2FsVGV4dCA9IGlz
VmVydGljYWxXcml0aW5nTW9kZSh0ZXh0LT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgaW5mby5jaHVuay5pc1RleHRQYXRoID0gaW5mby5oYW5kbGluZ1RleHRQYXRo
OwogICAgICAgICAgICAgICAgICAgICBpbmZvLmNodW5rLmFuY2hvciA9IHRleHQtPnN0eWxlKCkt
PnN2Z1N0eWxlKCktPnRleHRBbmNob3IoKTsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5jaHVu
ay50ZXh0TGVuZ3RoID0gdGV4dENvbnRlbnQtPnRleHRMZW5ndGgoKS52YWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICBpbmZvLmNodW5rLmxlbmd0aEFkanVzdCA9IChFTGVuZ3RoQWRqdXN0KSB0
ZXh0Q29udGVudC0+bGVuZ3RoQWRqdXN0KCk7CiAKICNpZiBERUJVR19DSFVOS19CVUlMRElORyA+
IDEKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfCAtPiBBc3NpZ24gY2h1
bmsgcHJvcGVydGllcywgaXNWZXJ0aWNhbFRleHQ9JWksIGFuY2hvcj0laVxuIiwgaW5mby5jaHVu
ay5pc1ZlcnRpY2FsVGV4dCwgaW5mby5jaHVuay5hbmNob3IpOwpAQCAtOTgxLDYgKzEwODgsOCBA
QCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmJ1aWxkVGV4dENodW5rcyhJCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmZvLmNodW5rLmlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdN
b2RlKHRleHQtPnN0eWxlKCktPnN2Z1N0eWxlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aW5mby5jaHVuay5pc1RleHRQYXRoID0gaW5mby5oYW5kbGluZ1RleHRQYXRoOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mby5jaHVuay5hbmNob3IgPSB0ZXh0LT5zdHlsZSgpLT5zdmdTdHls
ZSgpLT50ZXh0QW5jaG9yKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmNodW5rLnRl
eHRMZW5ndGggPSB0ZXh0Q29udGVudC0+dGV4dExlbmd0aCgpLnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmZvLmNodW5rLmxlbmd0aEFkanVzdCA9IChFTGVuZ3RoQWRqdXN0KSB0
ZXh0Q29udGVudC0+bGVuZ3RoQWRqdXN0KCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJh
bmdlLmJveCA9IGN1cnI7CiAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydE9mZnNl
dCA9IGk7CkBAIC0xMDc2LDggKzExODUsMzMgQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpsYXlv
dXRUZXh0Q2h1bmtzKAogICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+OjppdGVyYXRvciBpdCA9IG1f
c3ZnVGV4dENodW5rcy5iZWdpbigpOwogICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+OjppdGVyYXRv
ciBlbmQgPSBtX3N2Z1RleHRDaHVua3MuZW5kKCk7CiAKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBhcHBseVRleHRBbmNob3JUb1RleHRDaHVuaygqaXQpOworICAgIGZvciAo
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU1ZHVGV4dENodW5rJiBjaHVuayA9ICppdDsK
KworI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMAorICAgICAgICB7CisgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkhhbmRsZSBURVhUIENIVU5LISBhbmNob3I9JWksIHRleHRMZW5ndGg9
JWYsIGxlbmd0aEFkanVzdD0laSwgaXNWZXJ0aWNhbFRleHQ9JWksIGlzVGV4dFBhdGg9JWkgc3Rh
cnQ9JXAsIGVuZD0lcCAtPiBkaXN0OiAlaVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKGludCkg
Y2h1bmsuYW5jaG9yLCBjaHVuay50ZXh0TGVuZ3RoLCAoaW50KSBjaHVuay5sZW5ndGhBZGp1c3Qs
IChpbnQpIGNodW5rLmlzVmVydGljYWxUZXh0LAorICAgICAgICAgICAgICAgICAgICAoaW50KSBj
aHVuay5pc1RleHRQYXRoLCBjaHVuay5zdGFydCwgY2h1bmsuZW5kLCAodW5zaWduZWQgaW50KSAo
Y2h1bmsuZW5kIC0gY2h1bmsuc3RhcnQpKTsKKworICAgICAgICAgICAgVmVjdG9yPFNWR0lubGlu
ZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0b3IgYm94SXQgPSBjaHVuay5ib3hlcy5iZWdpbigp
OworICAgICAgICAgICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0
b3IgYm94RW5kID0gY2h1bmsuYm94ZXMuZW5kKCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBpID0gMDsKKyAgICAgICAgICAgIGZvciAoOyBib3hJdCAhPSBib3hFbmQ7ICsrYm94SXQpIHsK
KyAgICAgICAgICAgICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94
SXQ7IGkrKzsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiBSQU5HRSAlaSBT
VEFSVE9GRlNFVDogJWksIEVORE9GRlNFVDogJWksIEJPWDogJXBcbiIsIGksIHJhbmdlLnN0YXJ0
T2Zmc2V0LCByYW5nZS5lbmRPZmZzZXQsIHJhbmdlLmJveCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8vIHRleHQtcGF0aCAmIHRleHQtYW5jaG9yL3RleHRM
ZW5ndGggbmVlZCBzcGVjaWFsIHRyZWF0bWVudC4KKyAgICAgICAgaWYgKGNodW5rLmlzVGV4dFBh
dGgpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhcHBseVRleHRMZW5ndGhDb3Jy
ZWN0aW9uVG9UZXh0Q2h1bmsoY2h1bmspOworICAgICAgICBhcHBseVRleHRBbmNob3JUb1RleHRD
aHVuayhjaHVuayk7CisgICAgfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGFpbnRTZXJ2
ZXJUb1RleHREZWNvcmF0aW9uSW5mbyhFVGV4dERlY29yYXRpb24gZGVjb3JhdGlvbiwgU1ZHVGV4
dERlY29yYXRpb25JbmZvJiBpbmZvLCBSZW5kZXJPYmplY3QqIG9iamVjdCkKQEAgLTExODQsMTMg
KzEzMTgsMTMgQEAgdm9pZCBTVkdSb290SW5saW5lQm94Ojp3YWxrVGV4dENodW5rcyhTVgogCiAg
ICAgICAgICAgICAvLyBQcm9jZXNzIHRoaXMgY2h1bmsgcG9ydGlvbgogICAgICAgICAgICAgaWYg
KHRleHRCb3gpCi0gICAgICAgICAgICAgICAgKCp3YWxrZXIpKHJhbmdlVGV4dEJveCwgcmFuZ2Uu
c3RhcnRPZmZzZXQsIGl0Q2hhckJlZ2luLCBpdENoYXJFbmQpOworICAgICAgICAgICAgICAgICgq
d2Fsa2VyKShyYW5nZVRleHRCb3gsIHJhbmdlLnN0YXJ0T2Zmc2V0LCBjdXJDaHVuay5jdG0sIGl0
Q2hhckJlZ2luLCBpdENoYXJFbmQpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHdhbGtlci0+c2V0dXBGaWxsKHJhbmdlLmJveCkpCi0gICAgICAgICAgICAgICAgICAg
ICgqd2Fsa2VyKShyYW5nZVRleHRCb3gsIHJhbmdlLnN0YXJ0T2Zmc2V0LCBpdENoYXJCZWdpbiwg
aXRDaGFyRW5kKTsKKyAgICAgICAgICAgICAgICAgICAgKCp3YWxrZXIpKHJhbmdlVGV4dEJveCwg
cmFuZ2Uuc3RhcnRPZmZzZXQsIGN1ckNodW5rLmN0bSwgaXRDaGFyQmVnaW4sIGl0Q2hhckVuZCk7
CiAKICAgICAgICAgICAgICAgICBpZiAod2Fsa2VyLT5zZXR1cFN0cm9rZShyYW5nZS5ib3gpKQot
ICAgICAgICAgICAgICAgICAgICAoKndhbGtlcikocmFuZ2VUZXh0Qm94LCByYW5nZS5zdGFydE9m
ZnNldCwgaXRDaGFyQmVnaW4sIGl0Q2hhckVuZCk7CisgICAgICAgICAgICAgICAgICAgICgqd2Fs
a2VyKShyYW5nZVRleHRCb3gsIHJhbmdlLnN0YXJ0T2Zmc2V0LCBjdXJDaHVuay5jdG0sIGl0Q2hh
ckJlZ2luLCBpdENoYXJFbmQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjaHVua09m
ZnNldCArPSBsZW5ndGg7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM2OSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDA3LTEwLTExICBO
aWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIFNWRyBiYXNlbGluZSBhZnRl
ciB0aGUgdGV4dExlbmd0aCBhZGRpdGlvbiAmIHN0cmluZyBib3VuZCBmaXhlcy4KKworICAgICAg
ICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvYW5pbWF0ZS1lbGVtLTI4LXQtZXhwZWN0
ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9hbmlt
YXRlLWVsZW0tMjgtdC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9X
M0MtU1ZHLTEuMS9leHRlbmQtbmFtZXNwYWNlLTAxLWYtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9maWx0ZXJzLWZlbGVtLTAxLWItZXhw
ZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9m
aWx0ZXJzLWZlbGVtLTAxLWItZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9z
dmcvVzNDLVNWRy0xLjEvZmlsdGVycy10aWxlLTAxLWItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9pbnRlcmFjdC16b29tLTAxLXQtZXhw
ZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9p
bnRlcmFjdC16b29tLTAxLXQtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9z
dmcvVzNDLVNWRy0xLjEvdGV4dC10ZXh0LTAxLWItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDEtYi1leHBlY3RlZC5w
bmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDEt
Yi1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdXNlLWlu
ZmluaXRlLXJlY3Vyc2lvbi1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuICh3YXMgbWlzc2luZyBp
biBTVk4pCisgICAgICAgICogc3ZnL2JhdGlrL3RleHQvdGV4dExheW91dC1leHBlY3RlZC5jaGVj
a3N1bToKKyAgICAgICAgKiBzdmcvYmF0aWsvdGV4dC90ZXh0TGF5b3V0LWV4cGVjdGVkLnBuZzoK
KyAgICAgICAgKiBzdmcvYmF0aWsvdGV4dC90ZXh0TGF5b3V0LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBzdmcvYmF0aWsvdGV4dC90ZXh0TGVuZ3RoLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAg
ICAqIHN2Zy9iYXRpay90ZXh0L3RleHRMZW5ndGgtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHN2
Zy9iYXRpay90ZXh0L3RleHRMZW5ndGgtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy9iYXRp
ay90ZXh0L3RleHRPblBhdGhTcGFjZXMtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogc3Zn
L2JhdGlrL3RleHQvdGV4dE9uUGF0aFNwYWNlcy1leHBlY3RlZC5wbmc6CisgICAgICAgICogc3Zn
L2JhdGlrL3RleHQvdGV4dE9uUGF0aFNwYWNlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3Zn
L3RleHQvdGV4dC10ZXh0LTAxLWItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogc3ZnL3Rl
eHQvdGV4dC10ZXh0LTAxLWItZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHN2Zy90ZXh0L3RleHQt
dGV4dC0wMS1iLWV4cGVjdGVkLnR4dDoKKwogMjAwNy0xMC0xMSAgT2xpdmVyIEh1bnQgIDxvbGl2
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa28uCkBAIC03OSwxMCArMTEw
LDEwIEBACiAKIDIwMDctMTAtMDkgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KIAotICAgIAlOb3QgcmV2aWV3ZWQuCisgICAgICAgIE5vdCByZXZpZXdlZC4KIAotICAg
IAlSZWdlbmVyYXRlIHRoZSBTVkcgdGVzdCBiYXNlbGluZSwgdGhleSBoYXZlIGJlZW4gZ2VuZXJh
dGVkIHdpdGggX3RydW5rXyBpbnN0ZWFkIG9mIGZlYXR1cmUtYnJhbmNoLgotICAgIAlOb3Qgc3Vy
ZSB3aG8gY29tbWl0dGVkIGl0LCBidXQgaXQncyB3cm9uZyAtIHNvIEknbSBmaXhpbmcuCisgICAg
ICAgIFJlZ2VuZXJhdGUgdGhlIFNWRyB0ZXN0IGJhc2VsaW5lLCB0aGV5IGhhdmUgYmVlbiBnZW5l
cmF0ZWQgd2l0aCBfdHJ1bmtfIGluc3RlYWQgb2YgZmVhdHVyZS1icmFuY2guCisgICAgICAgIE5v
dCBzdXJlIHdobyBjb21taXR0ZWQgaXQsIGJ1dCBpdCdzIHdyb25nIC0gc28gSSdtIGZpeGluZy4K
IAogICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvYW5pbWF0ZS1lbGVtLTAy
LXQtZXhwZWN0ZWQudHh0OgogICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEv
YW5pbWF0ZS1lbGVtLTAzLXQtZXhwZWN0ZWQudHh0Ogo=
</data>
<flag name="review"
          id="7031"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>