<?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>64478</bug_id>
          
          <creation_ts>2011-07-13 12:38:30 -0700</creation_ts>
          <short_desc>Switch table rendering to to new layout types</short_desc>
          <delta_ts>2011-07-13 15:24:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>436603</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-13 12:38:30 -0700</bug_when>
    <thetext>Convert table rendering to new layout abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436644</commentid>
    <comment_count>1</comment_count>
      <attachid>100707</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-13 14:13:16 -0700</bug_when>
    <thetext>Created attachment 100707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436701</commentid>
    <comment_count>2</comment_count>
      <attachid>100707</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 15:24:45 -0700</bug_when>
    <thetext>Comment on attachment 100707
Patch

Clearing flags on attachment: 100707

Committed r90955: &lt;http://trac.webkit.org/changeset/90955&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436702</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 15:24:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100707</attachid>
            <date>2011-07-13 14:13:16 -0700</date>
            <delta_ts>2011-07-13 15:24:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64478-20110713141315.patch</filename>
            <type>text/plain</type>
            <size>52620</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwOTQxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDctMTMgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCB0YWJsZSByZW5kZXJp
bmcgdG8gdG8gbmV3IGxheW91dCB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisg
ICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL0F1dG9UYWJsZUxheW91dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5o
OgorCiAyMDExLTA3LTEyICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBTdGFuZGFyZGl6ZSBXaW5DYWlybyBjb25kaXRpb25hbGl6ZWQgY29kZSB1bmRlciBQ
TEFURk9STSBtYWNyby4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVM
YXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFi
bGVMYXlvdXQuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw4ICs2OSw4IEBAIHZv
aWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4oaW50IGUKICAgICAgICAgICAgICAgICBp
ZiAoY2VsbC0+Y29sU3BhbigpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQSBjZWxs
IG9yaWdpbmF0ZXMgaW4gdGhpcyBjb2x1bW4uICBFbnN1cmUgd2UgaGF2ZQogICAgICAgICAgICAg
ICAgICAgICAvLyBhIG1pbi9tYXggd2lkdGggb2YgYXQgbGVhc3QgMXB4IGZvciB0aGlzIGNvbHVt
biBub3cuCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGgg
PSBtYXgoY29sdW1uTGF5b3V0Lm1pbkxvZ2ljYWxXaWR0aCwgY2VsbEhhc0NvbnRlbnQgPyAxIDog
MCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91dC5tYXhMb2dpY2FsV2lkdGggPSBt
YXgoY29sdW1uTGF5b3V0Lm1heExvZ2ljYWxXaWR0aCwgMSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oY29sdW1uTGF5
b3V0Lm1pbkxvZ2ljYWxXaWR0aCwgY2VsbEhhc0NvbnRlbnQgPyAxIDogMCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbkxheW91dC5tYXhMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4o
Y29sdW1uTGF5b3V0Lm1heExvZ2ljYWxXaWR0aCwgMSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChjZWxsLT5wcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNlbGwtPmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGggPSBtYXgoY2VsbC0+bWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoKCksIGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGgpOwpAQCAt
MTE5LDggKzExOSw4IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4oaW50IGUK
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlZmZDb2wgfHwgc2VjdGlvbi0+cHJpbWFyeUNl
bGxBdChpLCBlZmZDb2wgLSAxKSAhPSBjZWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgc3Bhbm5pbmcgY2VsbCBvcmlnaW5hdGVzIGluIHRoaXMgY29sdW1uLiAgRW5zdXJlIHdlIGhh
dmUKICAgICAgICAgICAgICAgICAgICAgLy8gYSBtaW4vbWF4IHdpZHRoIG9mIGF0IGxlYXN0IDFw
eCBmb3IgdGhpcyBjb2x1bW4gbm93LgotICAgICAgICAgICAgICAgICAgICBjb2x1bW5MYXlvdXQu
bWluTG9naWNhbFdpZHRoID0gbWF4KGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGgsIGNlbGxI
YXNDb250ZW50ID8gMSA6IDApOwotICAgICAgICAgICAgICAgICAgICBjb2x1bW5MYXlvdXQubWF4
TG9naWNhbFdpZHRoID0gbWF4KGNvbHVtbkxheW91dC5tYXhMb2dpY2FsV2lkdGgsIDEpOworICAg
ICAgICAgICAgICAgICAgICBjb2x1bW5MYXlvdXQubWluTG9naWNhbFdpZHRoID0gbWF4PExheW91
dFVuaXQ+KGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGgsIGNlbGxIYXNDb250ZW50ID8gMSA6
IDApOworICAgICAgICAgICAgICAgICAgICBjb2x1bW5MYXlvdXQubWF4TG9naWNhbFdpZHRoID0g
bWF4PExheW91dFVuaXQ+KGNvbHVtbkxheW91dC5tYXhMb2dpY2FsV2lkdGgsIDEpOwogICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRTcGFuQ2VsbChjZWxsKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkBAIC0zMDUsMTMgKzMwNSwxMyBAQCBpbnQgQXV0b1RhYmxlTGF5b3V0Ojpj
YWxjRWZmZWN0aXZlTG9naWNhCiAgICAgICAgIGludCBjZWxsTWluTG9naWNhbFdpZHRoID0gY2Vs
bC0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBzcGFjaW5nSW5Sb3dEaXJlY3Rpb247CiAg
ICAgICAgIGZsb2F0IGNlbGxNYXhMb2dpY2FsV2lkdGggPSBjZWxsLT5tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSArIHNwYWNpbmdJblJvd0RpcmVjdGlvbjsKICAgICAgICAgZmxvYXQgdG90YWxQ
ZXJjZW50ID0gMDsKLSAgICAgICAgaW50IHNwYW5NaW5Mb2dpY2FsV2lkdGggPSAwOworICAgICAg
ICBMYXlvdXRVbml0IHNwYW5NaW5Mb2dpY2FsV2lkdGggPSAwOwogICAgICAgICBmbG9hdCBzcGFu
TWF4TG9naWNhbFdpZHRoID0gMDsKICAgICAgICAgYm9vbCBhbGxDb2xzQXJlUGVyY2VudCA9IHRy
dWU7CiAgICAgICAgIGJvb2wgYWxsQ29sc0FyZUZpeGVkID0gdHJ1ZTsKICAgICAgICAgYm9vbCBo
YXZlQXV0byA9IGZhbHNlOwogICAgICAgICBib29sIHNwYW5IYXNFbXB0eUNlbGxzT25seSA9IHRy
dWU7Ci0gICAgICAgIGludCBmaXhlZFdpZHRoID0gMDsKKyAgICAgICAgTGF5b3V0VW5pdCBmaXhl
ZFdpZHRoID0gMDsKICAgICAgICAgd2hpbGUgKGxhc3RDb2wgPCBuRWZmQ29scyAmJiBzcGFuID4g
MCkgewogICAgICAgICAgICAgTGF5b3V0JiBjb2x1bW5MYXlvdXQgPSBtX2xheW91dFN0cnVjdFts
YXN0Q29sXTsKICAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uTGF5b3V0LmxvZ2ljYWxXaWR0aC50
eXBlKCkpIHsKQEAgLTM5MCwxOSArMzkwLDE5IEBAIGludCBBdXRvVGFibGVMYXlvdXQ6OmNhbGNF
ZmZlY3RpdmVMb2dpY2EKICAgICAgICAgaWYgKGNlbGxNaW5Mb2dpY2FsV2lkdGggPiBzcGFuTWlu
TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICBpZiAoYWxsQ29sc0FyZUZpeGVkKSB7CiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3MgPSBlZmZDb2w7IGZpeGVkV2lkdGggPiAwICYm
IHBvcyA8IGxhc3RDb2w7ICsrcG9zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjZWxsTG9n
aWNhbFdpZHRoID0gbWF4KG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWluTG9naWNhbFdp
ZHRoLCBjZWxsTWluTG9naWNhbFdpZHRoICogbV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2FsV2lk
dGgudmFsdWUoKSAvIGZpeGVkV2lkdGgpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IGNlbGxMb2dpY2FsV2lkdGggPSBtYXgobV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5M
b2dpY2FsV2lkdGgsIGNlbGxNaW5Mb2dpY2FsV2lkdGggKiBtX2xheW91dFN0cnVjdFtwb3NdLmxv
Z2ljYWxXaWR0aC52YWx1ZSgpIC8gZml4ZWRXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGZp
eGVkV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2FsV2lkdGgudmFsdWUoKTsKICAg
ICAgICAgICAgICAgICAgICAgY2VsbE1pbkxvZ2ljYWxXaWR0aCAtPSBjZWxsTG9naWNhbFdpZHRo
OwogICAgICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1pbkxv
Z2ljYWxXaWR0aCA9IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBmbG9hdCByZW1haW5pbmdNYXhMb2dpY2Fs
V2lkdGggPSBzcGFuTWF4TG9naWNhbFdpZHRoOwotICAgICAgICAgICAgICAgIGludCByZW1haW5p
bmdNaW5Mb2dpY2FsV2lkdGggPSBzcGFuTWluTG9naWNhbFdpZHRoOworICAgICAgICAgICAgICAg
IExheW91dFVuaXQgcmVtYWluaW5nTWluTG9naWNhbFdpZHRoID0gc3Bhbk1pbkxvZ2ljYWxXaWR0
aDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBHaXZlIG1pbiB0byB2YXJp
YWJsZSBmaXJzdCwgdG8gZml4ZWQgc2Vjb25kLCBhbmQgdG8gb3RoZXJzIHRoaXJkLgogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zID0gZWZmQ29sOyByZW1haW5pbmdNYXhMb2dpY2Fs
V2lkdGggPj0gMCAmJiBwb3MgPCBsYXN0Q29sOyArK3BvcykgewogICAgICAgICAgICAgICAgICAg
ICBpZiAobV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2FsV2lkdGguaXNGaXhlZCgpICYmIGhhdmVB
dXRvICYmIGZpeGVkV2lkdGggPD0gY2VsbE1pbkxvZ2ljYWxXaWR0aCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGNvbE1pbkxvZ2ljYWxXaWR0aCA9IG1heChtX2xheW91dFN0cnVjdFtw
b3NdLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCwgbV9sYXlvdXRTdHJ1Y3RbcG9zXS5sb2dpY2Fs
V2lkdGgudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sTWluTG9naWNh
bFdpZHRoID0gbWF4PExheW91dFVuaXQ+KG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWlu
TG9naWNhbFdpZHRoLCBtX2xheW91dFN0cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC52YWx1ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9z
XS5sb2dpY2FsV2lkdGgudmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmlu
Z01pbkxvZ2ljYWxXaWR0aCAtPSBtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2lj
YWxXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ01heExvZ2ljYWxXaWR0
aCAtPSBtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aDsKQEAgLTQx
Myw4ICs0MTMsOCBAQCBpbnQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlTG9naWNhCiAK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvcyA9IGVmZkNvbDsgcmVtYWluaW5nTWF4
TG9naWNhbFdpZHRoID49IDAgJiYgcG9zIDwgbGFzdENvbCAmJiByZW1haW5pbmdNaW5Mb2dpY2Fs
V2lkdGggPCBjZWxsTWluTG9naWNhbFdpZHRoOyArK3BvcykgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoIShtX2xheW91dFN0cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC5pc0ZpeGVkKCkgJiYgaGF2
ZUF1dG8gJiYgZml4ZWRXaWR0aCA8PSBjZWxsTWluTG9naWNhbFdpZHRoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGNvbE1pbkxvZ2ljYWxXaWR0aCA9IG1heChtX2xheW91dFN0cnVj
dFtwb3NdLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCwgc3RhdGljX2Nhc3Q8aW50PihyZW1haW5p
bmdNYXhMb2dpY2FsV2lkdGggPyBjZWxsTWluTG9naWNhbFdpZHRoICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoKSAvIHJlbWFp
bmluZ01heExvZ2ljYWxXaWR0aCA6IGNlbGxNaW5Mb2dpY2FsV2lkdGgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbE1pbkxvZ2ljYWxXaWR0aCA9IG1pbihtX2xheW91dFN0cnVjdFtwb3Nd
LmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aCArIChjZWxsTWluTG9naWNhbFdpZHRoIC0gcmVtYWlu
aW5nTWluTG9naWNhbFdpZHRoKSwgY29sTWluTG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjb2xNaW5Mb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4obV9sYXlv
dXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIHN0YXRpY19jYXN0PGludD4o
cmVtYWluaW5nTWF4TG9naWNhbFdpZHRoID8gY2VsbE1pbkxvZ2ljYWxXaWR0aCAqIHN0YXRpY19j
YXN0PGZsb2F0PihtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCkg
LyByZW1haW5pbmdNYXhMb2dpY2FsV2lkdGggOiBjZWxsTWluTG9naWNhbFdpZHRoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb2xNaW5Mb2dpY2FsV2lkdGggPSBtaW48TGF5b3V0VW5pdD4o
bV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGggKyAoY2VsbE1pbkxv
Z2ljYWxXaWR0aCAtIHJlbWFpbmluZ01pbkxvZ2ljYWxXaWR0aCksIGNvbE1pbkxvZ2ljYWxXaWR0
aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdNYXhMb2dpY2FsV2lkdGggLT0g
bV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGg7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZW1haW5pbmdNaW5Mb2dpY2FsV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3Rb
cG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICBj
ZWxsTWluTG9naWNhbFdpZHRoIC09IGNvbE1pbkxvZ2ljYWxXaWR0aDsKQEAgLTQyNiw3ICs0MjYs
NyBAQCBpbnQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlTG9naWNhCiAgICAgICAgIGlm
ICghY2VsbExvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewogICAgICAgICAgICAgaWYgKGNlbGxN
YXhMb2dpY2FsV2lkdGggPiBzcGFuTWF4TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBwb3MgPSBlZmZDb2w7IHNwYW5NYXhMb2dpY2FsV2lkdGggPj0gMCAmJiBw
b3MgPCBsYXN0Q29sOyArK3BvcykgewotICAgICAgICAgICAgICAgICAgICBpbnQgY29sTWF4TG9n
aWNhbFdpZHRoID0gbWF4KG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWF4TG9naWNhbFdp
ZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KHNwYW5NYXhMb2dpY2FsV2lkdGggPyBjZWxsTWF4TG9naWNh
bFdpZHRoICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZl
TWF4TG9naWNhbFdpZHRoKSAvIHNwYW5NYXhMb2dpY2FsV2lkdGggOiBjZWxsTWF4TG9naWNhbFdp
ZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBjb2xNYXhMb2dpY2FsV2lkdGggPSBtYXg8
TGF5b3V0VW5pdD4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgs
IHN0YXRpY19jYXN0PGludD4oc3Bhbk1heExvZ2ljYWxXaWR0aCA/IGNlbGxNYXhMb2dpY2FsV2lk
dGggKiBzdGF0aWNfY2FzdDxmbG9hdD4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhM
b2dpY2FsV2lkdGgpIC8gc3Bhbk1heExvZ2ljYWxXaWR0aCA6IGNlbGxNYXhMb2dpY2FsV2lkdGgp
KTsKICAgICAgICAgICAgICAgICAgICAgc3Bhbk1heExvZ2ljYWxXaWR0aCAtPSBtX2xheW91dFN0
cnVjdFtwb3NdLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICAgICAg
Y2VsbE1heExvZ2ljYWxXaWR0aCAtPSBjb2xNYXhMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAg
ICAgICAgIG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoID0gY29s
TWF4TG9naWNhbFdpZHRoOwpAQCAtNTM3LDcgKzUzNyw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0
OjpsYXlvdXQoKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5FZmZDb2xzOyArK2kp
IHsKICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0u
ZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc1Bl
cmNlbnQoKSkgewotICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2VsbExvZ2ljYWxXaWR0aCA9
IG1heChtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIGxvZ2ljYWxX
aWR0aC5jYWxjTWluVmFsdWUodGFibGVMb2dpY2FsV2lkdGgpKTsKKyAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IGNlbGxMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4obV9sYXlvdXRTdHJ1
Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCBsb2dpY2FsV2lkdGguY2FsY01pblZhbHVl
KHRhYmxlTG9naWNhbFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmxlICs9IG1fbGF5
b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoIC0gY2VsbExvZ2ljYWxXaWR0aDsKICAg
ICAgICAgICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCA9IGNl
bGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTEg
KzYwLDExIEBAIHByaXZhdGU6CiAKICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxXaWR0aDsKICAgICAg
ICAgTGVuZ3RoIGVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKLSAgICAgICAgaW50IG1pbkxvZ2ljYWxX
aWR0aDsKLSAgICAgICAgaW50IG1heExvZ2ljYWxXaWR0aDsKLSAgICAgICAgaW50IGVmZmVjdGl2
ZU1pbkxvZ2ljYWxXaWR0aDsKLSAgICAgICAgaW50IGVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aDsK
LSAgICAgICAgaW50IGNvbXB1dGVkTG9naWNhbFdpZHRoOworICAgICAgICBMYXlvdXRVbml0IG1p
bkxvZ2ljYWxXaWR0aDsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhMb2dpY2FsV2lkdGg7CisgICAg
ICAgIExheW91dFVuaXQgZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOworICAgICAgICBMYXlvdXRV
bml0IGVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aDsKKyAgICAgICAgTGF5b3V0VW5pdCBjb21wdXRl
ZExvZ2ljYWxXaWR0aDsKICAgICAgICAgYm9vbCBlbXB0eUNlbGxzT25seTsKICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lv
biA5MDkzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTA4LDcgKzUwOCw3IEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6aXND
b250ZW50RWRpdGFibGUoKSAKICAgICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRl
cmVySXNFZGl0YWJsZSgpOwogfQogCi1ib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RC
YXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCitib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5v
ZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gSWYgaXQgaXMg
bm90IGEgcmVjdC1iYXNlZCBoaXQgdGVzdCwgdGhpcyBtZXRob2QgaGFzIHRvIGJlIG5vLW9wLgog
ICAgIC8vIFJldHVybiBmYWxzZSwgc28gdGhlIGhpdCB0ZXN0IHN0b3BzLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgaXMg
cmVjdC1iYXNlZCBoaXQgdGVzdCBhbmQgbmVlZHMgdG8gY29udGludWUgdW50aWwgdGhlIHJlY3Qg
aXMgZnVsbHkKICAgICAvLyBlbmNsb3NlZCBieSB0aGUgYm91bmRhcmllcyBvZiBhIG5vZGUuCi0g
ICAgYm9vbCBhZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYgPSBJbnRSZWN0KCkpOwor
ICAgIGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKICAg
ICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNvbnN0IExheW91dFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGFwcGVu
ZChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTAsNyArNjUwLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIG5ld0xpbmUoRUNsZWFyKTsKIAogICAgIFBvc2l0aW9uIHBvc2l0aW9uRm9y
Qm94KElubGluZUJveCosIGJvb2wgc3RhcnQgPSB0cnVlKSBjb25zdDsKLSAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBJbnRQb2ludCYp
OworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVu
KGNvbnN0IExheW91dFBvaW50Jik7CiAKICAgICAvLyBBZGp1c3QgZnJvbSBwYWludGluZyBvZmZz
ZXRzIHRvIHRoZSBsb2NhbCBjb29yZHMgb2YgdGhpcyByZW5kZXJlcgogICAgIHZvaWQgb2Zmc2V0
Rm9yQ29udGVudHMoSW50UG9pbnQmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gOTA5MzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OTEsNzIgKzQ5MSw3MiBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVs
T2JqZWN0OjpvZmZzZXRUCiAgICAgcmV0dXJuIHlQb3M7CiB9CiAKLWludCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFkZGluZ1RvcChib29sKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFkZGluZ1RvcChib29sKSBjb25zdAogewotICAgIGludCB3ID0gMDsKKyAgICBM
YXlvdXRVbml0IHcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5nID0gc3R5bGUoKS0+cGFkZGluZ1Rv
cCgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQogICAgICAgICB3ID0gY29udGFpbmlu
Z0Jsb2NrKCktPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwogICAgIHJldHVybiBwYWRkaW5nLmNh
bGNNaW5WYWx1ZSh3KTsKIH0KIAotaW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nQm90
dG9tKGJvb2wpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5n
Qm90dG9tKGJvb2wpIGNvbnN0CiB7Ci0gICAgaW50IHcgPSAwOworICAgIExheW91dFVuaXQgdyA9
IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nQm90dG9tKCk7CiAgICAg
aWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCiAgICAgICAgIHcgPSBjb250YWluaW5nQmxvY2soKS0+
YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CiAgICAgcmV0dXJuIHBhZGRpbmcuY2FsY01pblZhbHVl
KHcpOwogfQogCi1pbnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhZGRpbmdMZWZ0KGJvb2wpIGNv
bnN0CitMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nTGVmdChib29sKSBj
b25zdAogewotICAgIGludCB3ID0gMDsKKyAgICBMYXlvdXRVbml0IHcgPSAwOwogICAgIExlbmd0
aCBwYWRkaW5nID0gc3R5bGUoKS0+cGFkZGluZ0xlZnQoKTsKICAgICBpZiAocGFkZGluZy5pc1Bl
cmNlbnQoKSkKICAgICAgICAgdyA9IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVMb2dpY2Fs
V2lkdGgoKTsKICAgICByZXR1cm4gcGFkZGluZy5jYWxjTWluVmFsdWUodyk7CiB9CiAKLWludCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFkZGluZ1JpZ2h0KGJvb2wpIGNvbnN0CitMYXlvdXRVbml0
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nUmlnaHQoYm9vbCkgY29uc3QKIHsKLSAgICBp
bnQgdyA9IDA7CisgICAgTGF5b3V0VW5pdCB3ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0
eWxlKCktPnBhZGRpbmdSaWdodCgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQogICAg
ICAgICB3ID0gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwogICAg
IHJldHVybiBwYWRkaW5nLmNhbGNNaW5WYWx1ZSh3KTsKIH0KIAotaW50IFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWRkaW5nQmVmb3JlKGJvb2wpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWRkaW5nQmVmb3JlKGJvb2wpIGNvbnN0CiB7Ci0gICAgaW50IHcgPSAwOwor
ICAgIExheW91dFVuaXQgdyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRk
aW5nQmVmb3JlKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCiAgICAgICAgIHcgPSBj
b250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CiAgICAgcmV0dXJuIHBh
ZGRpbmcuY2FsY01pblZhbHVlKHcpOwogfQogCi1pbnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
ZGRpbmdBZnRlcihib29sKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFkZGluZ0FmdGVyKGJvb2wpIGNvbnN0CiB7Ci0gICAgaW50IHcgPSAwOworICAgIExheW91dFVu
aXQgdyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nQWZ0ZXIoKTsK
ICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKICAgICAgICAgdyA9IGNvbnRhaW5pbmdCbG9j
aygpLT5hdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKICAgICByZXR1cm4gcGFkZGluZy5jYWxjTWlu
VmFsdWUodyk7CiB9CiAKLWludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFkZGluZ1N0YXJ0KGJv
b2wpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nU3RhcnQo
Ym9vbCkgY29uc3QKIHsKLSAgICBpbnQgdyA9IDA7CisgICAgTGF5b3V0VW5pdCB3ID0gMDsKICAg
ICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdTdGFydCgpOwogICAgIGlmIChwYWRk
aW5nLmlzUGVyY2VudCgpKQogICAgICAgICB3ID0gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCgpOwogICAgIHJldHVybiBwYWRkaW5nLmNhbGNNaW5WYWx1ZSh3KTsKIH0K
IAotaW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nRW5kKGJvb2wpIGNvbnN0CitMYXlv
dXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nRW5kKGJvb2wpIGNvbnN0CiB7Ci0g
ICAgaW50IHcgPSAwOworICAgIExheW91dFVuaXQgdyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcg
PSBzdHlsZSgpLT5wYWRkaW5nRW5kKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCiAg
ICAgICAgIHcgPSBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CkBA
IC0yMTUzLDcgKzIxNTMsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNo
YWRvCiAKICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGZpbGwganVzdCBvdXRzaWRlIHRoZSBjbGlw
LCBhZGRpbmcgMSBwaXhlbCBzZXBhcmF0aW9uIHNvIHRoYXQgdGhlIGZpbGwgZG9lcyBub3QKICAg
ICAgICAgICAgIC8vIGJsZWVkIGluIChkdWUgdG8gYW50aWFsaWFzaW5nKSBpZiB0aGUgY29udGV4
dCBpcyB0cmFuc2Zvcm1lZC4KLSAgICAgICAgICAgIExheW91dFNpemUgZXh0cmFPZmZzZXQocGFp
bnRSZWN0LndpZHRoKCkgKyBtYXgoMCwgc2hhZG93T2Zmc2V0LndpZHRoKCkpICsgc2hhZG93Qmx1
ciArIDIgKiBzaGFkb3dTcHJlYWQgKyAxLCAwKTsKKyAgICAgICAgICAgIExheW91dFNpemUgZXh0
cmFPZmZzZXQocGFpbnRSZWN0LndpZHRoKCkgKyBtYXg8TGF5b3V0VW5pdD4oMCwgc2hhZG93T2Zm
c2V0LndpZHRoKCkpICsgc2hhZG93Qmx1ciArIDIgKiBzaGFkb3dTcHJlYWQgKyAxLCAwKTsKICAg
ICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKICAgICAgICAgICAgIGZpbGxS
ZWN0Lm1vdmUoZXh0cmFPZmZzZXQpOwogCkBAIC0yMjEwLDE4ICsyMjEwLDE4IEBAIHZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG8KIAogICAgICAgICAgICAgaWYgKCFpbmNs
dWRlTG9naWNhbExlZnRFZGdlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkg
ewotICAgICAgICAgICAgICAgICAgICBob2xlUmVjdC5tb3ZlKC1tYXgoc2hhZG93T2Zmc2V0Lndp
ZHRoKCksIDApIC0gc2hhZG93Qmx1ciwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGhvbGVSZWN0
LnNldFdpZHRoKGhvbGVSZWN0LndpZHRoKCkgKyBtYXgoc2hhZG93T2Zmc2V0LndpZHRoKCksIDAp
ICsgc2hhZG93Qmx1cik7CisgICAgICAgICAgICAgICAgICAgIGhvbGVSZWN0Lm1vdmUoLW1heDxM
YXlvdXRVbml0PihzaGFkb3dPZmZzZXQud2lkdGgoKSwgMCkgLSBzaGFkb3dCbHVyLCAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgaG9sZVJlY3Quc2V0V2lkdGgoaG9sZVJlY3Qud2lkdGgoKSArIG1h
eDxMYXlvdXRVbml0PihzaGFkb3dPZmZzZXQud2lkdGgoKSwgMCkgKyBzaGFkb3dCbHVyKTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBob2xlUmVjdC5tb3Zl
KDAsIC1tYXgoc2hhZG93T2Zmc2V0LmhlaWdodCgpLCAwKSAtIHNoYWRvd0JsdXIpOwotICAgICAg
ICAgICAgICAgICAgICBob2xlUmVjdC5zZXRIZWlnaHQoaG9sZVJlY3QuaGVpZ2h0KCkgKyBtYXgo
c2hhZG93T2Zmc2V0LmhlaWdodCgpLCAwKSArIHNoYWRvd0JsdXIpOworICAgICAgICAgICAgICAg
ICAgICBob2xlUmVjdC5tb3ZlKDAsIC1tYXg8TGF5b3V0VW5pdD4oc2hhZG93T2Zmc2V0LmhlaWdo
dCgpLCAwKSAtIHNoYWRvd0JsdXIpOworICAgICAgICAgICAgICAgICAgICBob2xlUmVjdC5zZXRI
ZWlnaHQoaG9sZVJlY3QuaGVpZ2h0KCkgKyBtYXg8TGF5b3V0VW5pdD4oc2hhZG93T2Zmc2V0Lmhl
aWdodCgpLCAwKSArIHNoYWRvd0JsdXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICghaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpIHsKICAgICAgICAg
ICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAgICAgICAgICBob2xlUmVjdC5z
ZXRXaWR0aChob2xlUmVjdC53aWR0aCgpIC0gbWluKHNoYWRvd09mZnNldC53aWR0aCgpLCAwKSAr
IHNoYWRvd0JsdXIpOworICAgICAgICAgICAgICAgICAgICBob2xlUmVjdC5zZXRXaWR0aChob2xl
UmVjdC53aWR0aCgpIC0gbWluPExheW91dFVuaXQ+KHNoYWRvd09mZnNldC53aWR0aCgpLCAwKSAr
IHNoYWRvd0JsdXIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
aG9sZVJlY3Quc2V0SGVpZ2h0KGhvbGVSZWN0LmhlaWdodCgpIC0gbWluKHNoYWRvd09mZnNldC5o
ZWlnaHQoKSwgMCkgKyBzaGFkb3dCbHVyKTsKKyAgICAgICAgICAgICAgICAgICAgaG9sZVJlY3Qu
c2V0SGVpZ2h0KGhvbGVSZWN0LmhlaWdodCgpIC0gbWluPExheW91dFVuaXQ+KHNoYWRvd09mZnNl
dC5oZWlnaHQoKSwgMCkgKyBzaGFkb3dCbHVyKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgQ29sb3IgZmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigp
LCBzaGFkb3dDb2xvci5ibHVlKCksIDI1NSk7CkBAIC0yMjM4LDcgKzIyMzgsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvCiAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKGJvcmRlci5yZWN0KCkpOwogCi0gICAgICAgICAg
ICBMYXlvdXRTaXplIGV4dHJhT2Zmc2V0KDIgKiBwYWludFJlY3Qud2lkdGgoKSArIG1heCgwLCBz
aGFkb3dPZmZzZXQud2lkdGgoKSkgKyBzaGFkb3dCbHVyIC0gMiAqIHNoYWRvd1NwcmVhZCArIDEs
IDApOworICAgICAgICAgICAgTGF5b3V0U2l6ZSBleHRyYU9mZnNldCgyICogcGFpbnRSZWN0Lndp
ZHRoKCkgKyBtYXg8TGF5b3V0VW5pdD4oMCwgc2hhZG93T2Zmc2V0LndpZHRoKCkpICsgc2hhZG93
Qmx1ciAtIDIgKiBzaGFkb3dTcHJlYWQgKyAxLCAwKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRy
YW5zbGF0ZShleHRyYU9mZnNldC53aWR0aCgpLCBleHRyYU9mZnNldC5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA5MDkz
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MiwzMyArNzIsMzMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBib3JkZXJCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKIAogICAgIC8vIFZpcnR1YWwg
c2luY2UgdGFibGUgY2VsbHMgb3ZlcnJpZGUKLSAgICB2aXJ0dWFsIGludCBwYWRkaW5nVG9wKGJv
b2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGlu
dCBwYWRkaW5nQm90dG9tKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGludCBwYWRkaW5nTGVmdChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRk
aW5nID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGFkZGluZ1JpZ2h0KGJvb2wgaW5j
bHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWRk
aW5nQmVmb3JlKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGludCBwYWRkaW5nQWZ0ZXIoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9
IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZGRpbmdTdGFydChib29sIGluY2x1ZGVJ
bnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGFkZGluZ0Vu
ZChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIGludCBib3JkZXJUb3AoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJUb3BXaWR0
aCgpOyB9Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVyQm90dG9tKCkgY29uc3QgeyByZXR1cm4gc3R5
bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKTsgfQotICAgIHZpcnR1YWwgaW50IGJvcmRlckxlZnQo
KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKTsgfQotICAgIHZpcnR1
YWwgaW50IGJvcmRlclJpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVyUmlnaHRX
aWR0aCgpOyB9Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVyQmVmb3JlKCkgY29uc3QgeyByZXR1cm4g
c3R5bGUoKS0+Ym9yZGVyQmVmb3JlV2lkdGgoKTsgfQotICAgIHZpcnR1YWwgaW50IGJvcmRlckFm
dGVyKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVyQWZ0ZXJXaWR0aCgpOyB9Ci0gICAg
dmlydHVhbCBpbnQgYm9yZGVyU3RhcnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJT
dGFydFdpZHRoKCk7IH0KLSAgICB2aXJ0dWFsIGludCBib3JkZXJFbmQoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5ib3JkZXJFbmRXaWR0aCgpOyB9Ci0KLSAgICBpbnQgYm9yZGVyQW5kUGFkZGlu
Z0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBw
YWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCk7IH0KLSAgICBpbnQgYm9yZGVyQW5kUGFkZGlu
Z1dpZHRoKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBh
ZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsgfQotICAgIGludCBib3JkZXJBbmRQYWRkaW5n
TG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckJlZm9yZSgpICsgYm9yZGVyQWZ0
ZXIoKSArIHBhZGRpbmdCZWZvcmUoKSArIHBhZGRpbmdBZnRlcigpOyB9Ci0gICAgaW50IGJvcmRl
ckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBib3JkZXJTdGFydCgpICsg
Ym9yZGVyRW5kKCkgKyBwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKTsgfQotICAgIGludCBi
b3JkZXJBbmRQYWRkaW5nTG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6IGJv
cmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOyB9Ci0KLSAgICBpbnQgYm9yZGVyQW5kUGFkZGluZ1N0
YXJ0KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyU3RhcnQoKSArIHBhZGRpbmdTdGFydCgpOyB9Ci0g
ICAgaW50IGJvcmRlckxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSA6IGJvcmRlclRvcCgpOyB9Ci0gICAg
aW50IGJvcmRlckxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJSaWdodCgpIDogYm9yZGVyQm90dG9tKCk7IH0KKyAg
ICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ1RvcChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRk
aW5nID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZGRpbmdCb3R0b20o
Ym9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBwYWRkaW5nTGVmdChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZGRpbmdSaWdodChib29sIGluY2x1
ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0
IHBhZGRpbmdCZWZvcmUoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0
OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nQWZ0ZXIoYm9vbCBpbmNsdWRlSW50cmlu
c2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5n
U3RhcnQoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nRW5kKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcg
PSB0cnVlKSBjb25zdDsKKworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBib3JkZXJUb3AoKSBjb25z
dCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpOyB9CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IGJvcmRlckJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJvcmRlckJvdHRv
bVdpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFVuaXQgYm9yZGVyTGVmdCgpIGNvbnN0IHsg
cmV0dXJuIHN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpOyB9CisgICAgdmlydHVhbCBMYXlvdXRV
bml0IGJvcmRlclJpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0
aCgpOyB9CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGJvcmRlckJlZm9yZSgpIGNvbnN0IHsgcmV0
dXJuIHN0eWxlKCktPmJvcmRlckJlZm9yZVdpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFVu
aXQgYm9yZGVyQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJBZnRlcldpZHRo
KCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFVuaXQgYm9yZGVyU3RhcnQoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5ib3JkZXJTdGFydFdpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFVuaXQg
Ym9yZGVyRW5kKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVyRW5kV2lkdGgoKTsgfQor
CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
Ym9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0
b20oKTsgfQorICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRk
aW5nUmlnaHQoKTsgfQorICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWln
aHQoKSBjb25zdCB7IHJldHVybiBib3JkZXJCZWZvcmUoKSArIGJvcmRlckFmdGVyKCkgKyBwYWRk
aW5nQmVmb3JlKCkgKyBwYWRkaW5nQWZ0ZXIoKTsgfQorICAgIExheW91dFVuaXQgYm9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlclN0YXJ0KCkgKyBib3Jk
ZXJFbmQoKSArIHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpOyB9CisgICAgTGF5b3V0VW5p
dCBib3JkZXJBbmRQYWRkaW5nTG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6
IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOyB9CisKKyAgICBMYXlvdXRVbml0IGJvcmRlckFu
ZFBhZGRpbmdTdGFydCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlclN0YXJ0KCkgKyBwYWRkaW5nU3Rh
cnQoKTsgfQorICAgIExheW91dFVuaXQgYm9yZGVyTG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyTGVmdCgpIDogYm9y
ZGVyVG9wKCk7IH0KKyAgICBMYXlvdXRVbml0IGJvcmRlckxvZ2ljYWxSaWdodCgpIGNvbnN0IHsg
cmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJSaWdodCgp
IDogYm9yZGVyQm90dG9tKCk7IH0KIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXJnaW5Ub3Ao
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG1hcmdpbkJvdHRvbSgpIGNvbnN0
ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlz
aW9uIDkwOTMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NTIsNyArNTUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSGl0
VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIHZp
cnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
KyAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91
dFBvaW50Jik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbihpbnQg
b2Zmc2V0LCBFQWZmaW5pdHkpOwogICAgIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9z
aXRpb24oY29uc3QgUG9zaXRpb24mKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCB2
b2lkIFJlbmRlclRhYmxlOjpjb21wdXRlTG9naWNhbFdpZHRoKCkKICAgICAgICAgICAgIG1hcmdp
blRvdGFsICs9IHN0eWxlKCktPm1hcmdpbkVuZCgpLmNhbGNWYWx1ZShhdmFpbGFibGVMb2dpY2Fs
V2lkdGgpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFN1YnRyYWN0IG91dCBvdXIgbWFyZ2lu
cyB0byBnZXQgdGhlIGF2YWlsYWJsZSBjb250ZW50IHdpZHRoLgotICAgICAgICBMYXlvdXRVbml0
IGF2YWlsYWJsZUNvbnRlbnRMb2dpY2FsV2lkdGggPSBtYXgoMCwgY29udGFpbmVyV2lkdGhJbklu
bGluZURpcmVjdGlvbiAtIG1hcmdpblRvdGFsKTsKKyAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFi
bGVDb250ZW50TG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDAsIGNvbnRhaW5lcldpZHRo
SW5JbmxpbmVEaXJlY3Rpb24gLSBtYXJnaW5Ub3RhbCk7CiAgICAgICAgIAogICAgICAgICAvLyBF
bnN1cmUgd2UgYXJlbid0IGJpZ2dlciB0aGFuIG91ciBtYXggd2lkdGggb3Igc21hbGxlciB0aGFu
IG91ciBtaW4gd2lkdGguCiAgICAgICAgIHNldExvZ2ljYWxXaWR0aChtaW4oYXZhaWxhYmxlQ29u
dGVudExvZ2ljYWxXaWR0aCwgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkpKTsKQEAgLTM0OSwx
MiArMzQ5LDEyIEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgICAgIGNvbXB1dGVk
TG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHRMZW5ndGgudmFsdWUoKSAtIChib3JkZXJBbmRQ
YWRkaW5nQmVmb3JlICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyKTsKICAgICB9IGVsc2UgaWYgKGxv
Z2ljYWxIZWlnaHRMZW5ndGguaXNQZXJjZW50KCkpCiAgICAgICAgIGNvbXB1dGVkTG9naWNhbEhl
aWdodCA9IGNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0TGVuZ3Ro
KTsKLSAgICBjb21wdXRlZExvZ2ljYWxIZWlnaHQgPSBtYXgoMCwgY29tcHV0ZWRMb2dpY2FsSGVp
Z2h0KTsKKyAgICBjb21wdXRlZExvZ2ljYWxIZWlnaHQgPSBtYXg8TGF5b3V0VW5pdD4oMCwgY29t
cHV0ZWRMb2dpY2FsSGVpZ2h0KTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQogICAgICAgICAgICAgLy8gRklYTUU6IERp
c3RyaWJ1dGUgZXh0cmEgaGVpZ2h0IGJldHdlZW4gYWxsIHRhYmxlIGJvZHkgc2VjdGlvbnMgaW5z
dGVhZCBvZiBnaXZpbmcgaXQgYWxsIHRvIHRoZSBmaXJzdCBvbmUuCi0gICAgICAgICAgICB0b1Jl
bmRlclRhYmxlU2VjdGlvbihjaGlsZCktPmxheW91dFJvd3MoY2hpbGQgPT0gbV9maXJzdEJvZHkg
PyBtYXgoMCwgY29tcHV0ZWRMb2dpY2FsSGVpZ2h0IC0gdG90YWxTZWN0aW9uTG9naWNhbEhlaWdo
dCkgOiAwKTsKKyAgICAgICAgICAgIHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKS0+bGF5b3V0
Um93cyhjaGlsZCA9PSBtX2ZpcnN0Qm9keSA/IG1heDxMYXlvdXRVbml0PigwLCBjb21wdXRlZExv
Z2ljYWxIZWlnaHQgLSB0b3RhbFNlY3Rpb25Mb2dpY2FsSGVpZ2h0KSA6IDApOwogICAgIH0KIAog
ICAgIGlmICghbV9maXJzdEJvZHkgJiYgY29tcHV0ZWRMb2dpY2FsSGVpZ2h0ID4gdG90YWxTZWN0
aW9uTG9naWNhbEhlaWdodCAmJiAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpIHsKQEAgLTc4
MiwxNCArNzgyLDE0IEBAIHZvaWQgUmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKCkgY29uc3QK
ICAgICBtX25lZWRzU2VjdGlvblJlY2FsYyA9IGZhbHNlOwogfQogCi1pbnQgUmVuZGVyVGFibGU6
OmNhbGNCb3JkZXJTdGFydCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclRhYmxlOjpjYWxjQm9y
ZGVyU3RhcnQoKSBjb25zdAogewogICAgIGlmIChjb2xsYXBzZUJvcmRlcnMoKSkgewogICAgICAg
ICAvLyBEZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBjZWxsIG9mIHRoZSBmaXJzdCByb3cuIFNlZSB0
aGUgQ1NTIDIuMSBzcGVjLCBzZWN0aW9uIDE3LjYuMi4KICAgICAgICAgaWYgKCFudW1FZmZDb2xz
KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICB1bnNpZ25lZCBib3JkZXJXaWR0
aCA9IDA7CisgICAgICAgIExheW91dFVuaXQgYm9yZGVyV2lkdGggPSAwOwogCiAgICAgICAgIGNv
bnN0IEJvcmRlclZhbHVlJiB0YiA9IHN0eWxlKCktPmJvcmRlclN0YXJ0KCk7CiAgICAgICAgIGlm
ICh0Yi5zdHlsZSgpID09IEJISURERU4pCkBAIC04MDIsNyArODAyLDcgQEAgaW50IFJlbmRlclRh
YmxlOjpjYWxjQm9yZGVyU3RhcnQoKSBjb25zdAogICAgICAgICAgICAgaWYgKGdiLnN0eWxlKCkg
PT0gQkhJRERFTikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGlmIChn
Yi5zdHlsZSgpID4gQkhJRERFTikKLSAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heChi
b3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdiLndpZHRoKCkpKTsKKyAgICAgICAg
ICAgICAgICBib3JkZXJXaWR0aCA9IG1heDxMYXlvdXRVbml0Pihib3JkZXJXaWR0aCwgZ2Iud2lk
dGgoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
Zmlyc3ROb25FbXB0eVNlY3Rpb24gPSBtX2hlYWQgPyBtX2hlYWQgOiAobV9maXJzdEJvZHkgPyBt
X2ZpcnN0Qm9keSA6IG1fZm9vdCk7CkBAIC04MTUsNyArODE1LDcgQEAgaW50IFJlbmRlclRhYmxl
OjpjYWxjQm9yZGVyU3RhcnQoKSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgICAgICAgICBpZiAoc2Iuc3R5bGUoKSA+IEJISURERU4pCi0gICAgICAgICAgICAgICAgYm9y
ZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzYi53aWR0
aCgpKSk7CisgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oYm9y
ZGVyV2lkdGgsIHNiLndpZHRoKCkpOwogCiAgICAgICAgICAgICBjb25zdCBSZW5kZXJUYWJsZVNl
Y3Rpb246OkNlbGxTdHJ1Y3QmIGNzID0gZmlyc3ROb25FbXB0eVNlY3Rpb24tPmNlbGxBdCgwLCAw
KTsKICAgICAgICAgICAgIApAQCAtODI5LDkgKzgyOSw5IEBAIGludCBSZW5kZXJUYWJsZTo6Y2Fs
Y0JvcmRlclN0YXJ0KCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAgICAgICAgICAgICBpZiAoY2Iuc3R5bGUoKSA+IEJISURERU4pCi0gICAgICAgICAgICAgICAg
ICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y2Iud2lkdGgoKSkpOworICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heDxMYXlv
dXRVbml0Pihib3JkZXJXaWR0aCwgY2Iud2lkdGgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHJi
LnN0eWxlKCkgPiBCSElEREVOKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1h
eChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJiLndpZHRoKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oYm9yZGVyV2lkdGgs
IHJiLndpZHRoKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiAo
Ym9yZGVyV2lkdGggKyAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMCA6IDEp
KSAvIDI7CkBAIC04MzksMTQgKzgzOSwxNCBAQCBpbnQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJT
dGFydCgpIGNvbnN0CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpib3JkZXJTdGFydCgpOwogfQog
Ci1pbnQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJFbmQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5k
ZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCgpIGNvbnN0CiB7CiAgICAgaWYgKGNvbGxhcHNlQm9yZGVy
cygpKSB7CiAgICAgICAgIC8vIERldGVybWluZWQgYnkgdGhlIGxhc3QgY2VsbCBvZiB0aGUgZmly
c3Qgcm93LiBTZWUgdGhlIENTUyAyLjEgc3BlYywgc2VjdGlvbiAxNy42LjIuCiAgICAgICAgIGlm
ICghbnVtRWZmQ29scygpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgdW5zaWdu
ZWQgYm9yZGVyV2lkdGggPSAwOworICAgICAgICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0gMDsK
IAogICAgICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgdGIgPSBzdHlsZSgpLT5ib3JkZXJFbmQoKTsK
ICAgICAgICAgaWYgKHRiLnN0eWxlKCkgPT0gQkhJRERFTikKQEAgLTg2MCw3ICs4NjAsNyBAQCBp
bnQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJFbmQoKSBjb25zdAogICAgICAgICAgICAgaWYgKGdi
LnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgIGlmIChnYi5zdHlsZSgpID4gQkhJRERFTikKLSAgICAgICAgICAgICAgICBib3JkZXJXaWR0
aCA9IG1heChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdiLndpZHRoKCkpKTsK
KyAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heDxMYXlvdXRVbml0Pihib3JkZXJXaWR0
aCwgZ2Iud2lkdGgoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJlbmRlclRhYmxl
U2VjdGlvbiogZmlyc3ROb25FbXB0eVNlY3Rpb24gPSBtX2hlYWQgPyBtX2hlYWQgOiAobV9maXJz
dEJvZHkgPyBtX2ZpcnN0Qm9keSA6IG1fZm9vdCk7CkBAIC04NzMsNyArODczLDcgQEAgaW50IFJl
bmRlclRhYmxlOjpjYWxjQm9yZGVyRW5kKCkgY29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKIAogICAgICAgICAgICAgaWYgKHNiLnN0eWxlKCkgPiBCSElEREVOKQotICAgICAgICAgICAg
ICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c2Iud2lkdGgoKSkpOworICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gbWF4PExheW91dFVu
aXQ+KGJvcmRlcldpZHRoLCBzYi53aWR0aCgpKTsKIAogICAgICAgICAgICAgY29uc3QgUmVuZGVy
VGFibGVTZWN0aW9uOjpDZWxsU3RydWN0JiBjcyA9IGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5jZWxs
QXQoMCwgZW5kQ29sdW1uKTsKICAgICAgICAgICAgIApAQCAtODg3LDkgKzg4Nyw5IEBAIGludCBS
ZW5kZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgICAgICAgICAgICAgaWYgKGNiLnN0eWxlKCkgPiBCSElEREVOKQotICAg
ICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNiLndpZHRoKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lk
dGggPSBtYXg8TGF5b3V0VW5pdD4oYm9yZGVyV2lkdGgsIGNiLndpZHRoKCkpOwogICAgICAgICAg
ICAgICAgIGlmIChyYi5zdHlsZSgpID4gQkhJRERFTikKLSAgICAgICAgICAgICAgICAgICAgYm9y
ZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYi53aWR0
aCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gbWF4PExheW91dFVuaXQ+
KGJvcmRlcldpZHRoLCByYi53aWR0aCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gKGJvcmRlcldpZHRoICsgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IDEgOiAwKSkgLyAyOwpAQCAtOTAzLDI1ICs5MDMsMjUgQEAgdm9pZCBSZW5kZXJUYWJs
ZTo6cmVjYWxjQm9yZGVyc0luUm93RGlyZQogICAgIG1fYm9yZGVyRW5kID0gY2FsY0JvcmRlckVu
ZCgpOwogfQogCi1pbnQgUmVuZGVyVGFibGU6OmJvcmRlckJlZm9yZSgpIGNvbnN0CitMYXlvdXRV
bml0IFJlbmRlclRhYmxlOjpib3JkZXJCZWZvcmUoKSBjb25zdAogewogICAgIGlmIChjb2xsYXBz
ZUJvcmRlcnMoKSkKICAgICAgICAgcmV0dXJuIG91dGVyQm9yZGVyQmVmb3JlKCk7CiAgICAgcmV0
dXJuIFJlbmRlckJsb2NrOjpib3JkZXJCZWZvcmUoKTsKIH0KIAotaW50IFJlbmRlclRhYmxlOjpi
b3JkZXJBZnRlcigpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclRhYmxlOjpib3JkZXJBZnRlcigp
IGNvbnN0CiB7CiAgICAgaWYgKGNvbGxhcHNlQm9yZGVycygpKQogICAgICAgICByZXR1cm4gb3V0
ZXJCb3JkZXJBZnRlcigpOwogICAgIHJldHVybiBSZW5kZXJCbG9jazo6Ym9yZGVyQWZ0ZXIoKTsK
IH0KIAotaW50IFJlbmRlclRhYmxlOjpvdXRlckJvcmRlckJlZm9yZSgpIGNvbnN0CitMYXlvdXRV
bml0IFJlbmRlclRhYmxlOjpvdXRlckJvcmRlckJlZm9yZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFj
b2xsYXBzZUJvcmRlcnMoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IGJvcmRlcldpZHRo
ID0gMDsKKyAgICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0gMDsKICAgICBSZW5kZXJUYWJsZVNl
Y3Rpb24qIHRvcFNlY3Rpb247CiAgICAgaWYgKG1faGVhZCkKICAgICAgICAgdG9wU2VjdGlvbiA9
IG1faGVhZDsKQEAgLTkzMywyMiArOTMzLDIyIEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3Jk
ZXJCZWZvcmUoKSBjb24KICAgICAgICAgdG9wU2VjdGlvbiA9IDA7CiAgICAgaWYgKHRvcFNlY3Rp
b24pIHsKICAgICAgICAgYm9yZGVyV2lkdGggPSB0b3BTZWN0aW9uLT5vdXRlckJvcmRlckJlZm9y
ZSgpOwotICAgICAgICBpZiAoYm9yZGVyV2lkdGggPT0gLTEpCisgICAgICAgIGlmIChib3JkZXJX
aWR0aCA8IDApCiAgICAgICAgICAgICByZXR1cm4gMDsgICAvLyBPdmVycmlkZGVuIGJ5IGhpZGRl
bgogICAgIH0KICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgdGIgPSBzdHlsZSgpLT5ib3JkZXJCZWZv
cmUoKTsKICAgICBpZiAodGIuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAodGIuc3R5bGUoKSA+IEJISURERU4pCi0gICAgICAgIGJvcmRlcldpZHRoID0gbWF4
KGJvcmRlcldpZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KHRiLndpZHRoKCkgLyAyKSk7CisgICAgICAg
IGJvcmRlcldpZHRoID0gbWF4PExheW91dFVuaXQ+KGJvcmRlcldpZHRoLCB0Yi53aWR0aCgpIC8g
Mik7CiAgICAgcmV0dXJuIGJvcmRlcldpZHRoOwogfQogCi1pbnQgUmVuZGVyVGFibGU6Om91dGVy
Qm9yZGVyQWZ0ZXIoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJB
ZnRlcigpIGNvbnN0CiB7CiAgICAgaWYgKCFjb2xsYXBzZUJvcmRlcnMoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaW50IGJvcmRlcldpZHRoID0gMDsKKyAgICBMYXlvdXRVbml0IGJvcmRlcldp
ZHRoID0gMDsKICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGJvdHRvbVNlY3Rpb247CiAgICAgaWYg
KG1fZm9vdCkKICAgICAgICAgYm90dG9tU2VjdGlvbiA9IG1fZm9vdDsKQEAgLTk1OSwyMyArOTU5
LDIzIEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJBZnRlcigpIGNvbnMKICAgICB9CiAg
ICAgaWYgKGJvdHRvbVNlY3Rpb24pIHsKICAgICAgICAgYm9yZGVyV2lkdGggPSBib3R0b21TZWN0
aW9uLT5vdXRlckJvcmRlckFmdGVyKCk7Ci0gICAgICAgIGlmIChib3JkZXJXaWR0aCA9PSAtMSkK
KyAgICAgICAgaWYgKGJvcmRlcldpZHRoIDwgMCkKICAgICAgICAgICAgIHJldHVybiAwOyAgIC8v
IE92ZXJyaWRkZW4gYnkgaGlkZGVuCiAgICAgfQogICAgIGNvbnN0IEJvcmRlclZhbHVlJiB0YiA9
IHN0eWxlKCktPmJvcmRlckFmdGVyKCk7CiAgICAgaWYgKHRiLnN0eWxlKCkgPT0gQkhJRERFTikK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHRiLnN0eWxlKCkgPiBCSElEREVOKQotICAgICAg
ICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8aW50PigodGIud2lk
dGgoKSArIDEpIC8gMikpOworICAgICAgICBib3JkZXJXaWR0aCA9IG1heDxMYXlvdXRVbml0Pihi
b3JkZXJXaWR0aCwgKHRiLndpZHRoKCkgKyAxKSAvIDIpOwogICAgIHJldHVybiBib3JkZXJXaWR0
aDsKIH0KIAotaW50IFJlbmRlclRhYmxlOjpvdXRlckJvcmRlclN0YXJ0KCkgY29uc3QKK0xheW91
dFVuaXQgUmVuZGVyVGFibGU6Om91dGVyQm9yZGVyU3RhcnQoKSBjb25zdAogewogICAgIGlmICgh
Y29sbGFwc2VCb3JkZXJzKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGJvcmRlcldp
ZHRoID0gMDsKKyAgICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0gMDsKIAogICAgIGNvbnN0IEJv
cmRlclZhbHVlJiB0YiA9IHN0eWxlKCktPmJvcmRlclN0YXJ0KCk7CiAgICAgaWYgKHRiLnN0eWxl
KCkgPT0gQkhJRERFTikKQEAgLTk4NywxMSArOTg3LDEwIEBAIGludCBSZW5kZXJUYWJsZTo6b3V0
ZXJCb3JkZXJTdGFydCgpIGNvbnMKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IGlmICghY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaW50IHN3ID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQpLT5vdXRlckJvcmRlclN0
YXJ0KCk7Ci0gICAgICAgIGlmIChzdyA9PSAtMSkKKyAgICAgICAgTGF5b3V0VW5pdCBzdyA9IHRv
UmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKS0+b3V0ZXJCb3JkZXJTdGFydCgpOworICAgICAgICBp
ZiAoc3cgPCAwKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFsbEhpZGRlbiA9IGZhbHNlOworICAgICAgICBhbGxIaWRkZW4gPSBmYWxzZTsKICAgICAg
ICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN3KTsKICAgICB9CiAgICAgaWYgKGFs
bEhpZGRlbikKQEAgLTEwMDAsMTIgKzk5OSwxMiBAQCBpbnQgUmVuZGVyVGFibGU6Om91dGVyQm9y
ZGVyU3RhcnQoKSBjb25zCiAgICAgcmV0dXJuIGJvcmRlcldpZHRoOwogfQogCi1pbnQgUmVuZGVy
VGFibGU6Om91dGVyQm9yZGVyRW5kKCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyVGFibGU6Om91
dGVyQm9yZGVyRW5kKCkgY29uc3QKIHsKICAgICBpZiAoIWNvbGxhcHNlQm9yZGVycygpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIGludCBib3JkZXJXaWR0aCA9IDA7CisgICAgTGF5b3V0VW5p
dCBib3JkZXJXaWR0aCA9IDA7CiAKICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgdGIgPSBzdHlsZSgp
LT5ib3JkZXJFbmQoKTsKICAgICBpZiAodGIuc3R5bGUoKSA9PSBCSElEREVOKQpAQCAtMTAxNywx
MSArMTAxNiwxMCBAQCBpbnQgUmVuZGVyVGFibGU6Om91dGVyQm9yZGVyRW5kKCkgY29uc3QKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICghY2hpbGQtPmlzVGFibGVTZWN0
aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaW50IHN3ID0gdG9SZW5kZXJU
YWJsZVNlY3Rpb24oY2hpbGQpLT5vdXRlckJvcmRlckVuZCgpOwotICAgICAgICBpZiAoc3cgPT0g
LTEpCisgICAgICAgIExheW91dFVuaXQgc3cgPSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCkt
Pm91dGVyQm9yZGVyRW5kKCk7CisgICAgICAgIGlmIChzdyA8IDApCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWxsSGlkZGVuID0gZmFsc2U7CisgICAg
ICAgIGFsbEhpZGRlbiA9IGZhbHNlOwogICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJX
aWR0aCwgc3cpOwogICAgIH0KICAgICBpZiAoYWxsSGlkZGVuKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDMzICs0OSwz
MyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjb2xsYXBzZUJvcmRlcnMoKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLT5ib3JkZXJDb2xsYXBzZSgpOyB9CiAKLSAgICBpbnQgYm9yZGVyU3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX2JvcmRlclN0YXJ0OyB9Ci0gICAgaW50IGJvcmRlckVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYm9yZGVyRW5kOyB9Ci0gICAgaW50IGJvcmRlckJlZm9yZSgpIGNvbnN0
OwotICAgIGludCBib3JkZXJBZnRlcigpIGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVyU3Rh
cnQoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclN0YXJ0OyB9CisgICAgTGF5b3V0VW5pdCBib3Jk
ZXJFbmQoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlckVuZDsgfQorICAgIExheW91dFVuaXQgYm9y
ZGVyQmVmb3JlKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJBZnRlcigpIGNvbnN0Owog
Ci0gICAgaW50IGJvcmRlckxlZnQoKSBjb25zdAorICAgIExheW91dFVuaXQgYm9yZGVyTGVmdCgp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKICAgICAgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBib3JkZXJTdGFydCgpIDogYm9yZGVyRW5kKCk7CiAgICAgICAgIHJldHVybiBzdHlsZSgp
LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gYm9yZGVyQWZ0ZXIoKSA6IGJvcmRlckJl
Zm9yZSgpOwogICAgIH0KIAotICAgIGludCBib3JkZXJSaWdodCgpIGNvbnN0CisgICAgTGF5b3V0
VW5pdCBib3JkZXJSaWdodCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoc3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBib3JkZXJFbmQoKSA6IGJvcmRlclN0YXJ0KCk7CiAgICAg
ICAgIHJldHVybiBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gYm9yZGVy
QmVmb3JlKCkgOiBib3JkZXJBZnRlcigpOwogICAgIH0KIAotICAgIGludCBib3JkZXJUb3AoKSBj
b25zdAorICAgIExheW91dFVuaXQgYm9yZGVyVG9wKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJu
IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBib3JkZXJBZnRlcigpIDog
Ym9yZGVyQmVmb3JlKCk7CiAgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyBib3JkZXJTdGFydCgpIDogYm9yZGVyRW5kKCk7CiAgICAgfQogCi0gICAgaW50
IGJvcmRlckJvdHRvbSgpIGNvbnN0CisgICAgTGF5b3V0VW5pdCBib3JkZXJCb3R0b20oKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
CiAgICAgICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSA/IGJvcmRlckJlZm9yZSgpIDogYm9yZGVyQWZ0ZXIoKTsKQEAgLTg0LDQxICs4NCw0MSBAQCBw
dWJsaWM6CiAKICAgICBjb25zdCBDb2xvciBiZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4gc3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsgfQog
Ci0gICAgaW50IG91dGVyQm9yZGVyQmVmb3JlKCkgY29uc3Q7Ci0gICAgaW50IG91dGVyQm9yZGVy
QWZ0ZXIoKSBjb25zdDsKLSAgICBpbnQgb3V0ZXJCb3JkZXJTdGFydCgpIGNvbnN0OwotICAgIGlu
dCBvdXRlckJvcmRlckVuZCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3V0ZXJCb3JkZXJCZWZv
cmUoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG91dGVyQm9yZGVyQWZ0ZXIoKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IG91dGVyQm9yZGVyU3RhcnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG91
dGVyQm9yZGVyRW5kKCkgY29uc3Q7CiAKLSAgICBpbnQgb3V0ZXJCb3JkZXJMZWZ0KCkgY29uc3QK
KyAgICBMYXlvdXRVbml0IG91dGVyQm9yZGVyTGVmdCgpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVy
biBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvdXRlckJvcmRlclN0YXJ0KCkg
OiBvdXRlckJvcmRlckVuZCgpOwogICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSA/IG91dGVyQm9yZGVyQWZ0ZXIoKSA6IG91dGVyQm9yZGVyQmVmb3Jl
KCk7CiAgICAgfQogCi0gICAgaW50IG91dGVyQm9yZGVyUmlnaHQoKSBjb25zdAorICAgIExheW91
dFVuaXQgb3V0ZXJCb3JkZXJSaWdodCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBzdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvdXRlckJvcmRlckVuZCgpIDogb3V0ZXJCb3Jk
ZXJTdGFydCgpOwogICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGlu
Z01vZGUoKSA/IG91dGVyQm9yZGVyQmVmb3JlKCkgOiBvdXRlckJvcmRlckFmdGVyKCk7CiAgICAg
fQogCi0gICAgaW50IG91dGVyQm9yZGVyVG9wKCkgY29uc3QKKyAgICBMYXlvdXRVbml0IG91dGVy
Qm9yZGVyVG9wKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCkgPyBvdXRlckJvcmRlckFmdGVyKCkgOiBvdXRlckJvcmRlckJlZm9y
ZSgpOwogICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
b3V0ZXJCb3JkZXJTdGFydCgpIDogb3V0ZXJCb3JkZXJFbmQoKTsKICAgICB9CiAKLSAgICBpbnQg
b3V0ZXJCb3JkZXJCb3R0b20oKSBjb25zdAorICAgIExheW91dFVuaXQgb3V0ZXJCb3JkZXJCb3R0
b20oKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSA/IG91dGVyQm9yZGVyQmVmb3JlKCkgOiBvdXRlckJvcmRlckFmdGVyKCk7CiAg
ICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvdXRlckJv
cmRlckVuZCgpIDogb3V0ZXJCb3JkZXJTdGFydCgpOwogICAgIH0KIAotICAgIGludCBjYWxjQm9y
ZGVyU3RhcnQoKSBjb25zdDsKLSAgICBpbnQgY2FsY0JvcmRlckVuZCgpIGNvbnN0OworICAgIExh
eW91dFVuaXQgY2FsY0JvcmRlclN0YXJ0KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjYWxjQm9y
ZGVyRW5kKCkgY29uc3Q7CiAgICAgdm9pZCByZWNhbGNCb3JkZXJzSW5Sb3dEaXJlY3Rpb24oKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CkBAIC0yNTgsOCArMjU4LDggQEAgcHJpdmF0ZToKICAg
ICAKICAgICBzaG9ydCBtX2hTcGFjaW5nOwogICAgIHNob3J0IG1fdlNwYWNpbmc7Ci0gICAgaW50
IG1fYm9yZGVyU3RhcnQ7Ci0gICAgaW50IG1fYm9yZGVyRW5kOworICAgIExheW91dFVuaXQgbV9i
b3JkZXJTdGFydDsKKyAgICBMYXlvdXRVbml0IG1fYm9yZGVyRW5kOwogfTsKIAogaW5saW5lIFJl
bmRlclRhYmxlKiB0b1JlbmRlclRhYmxlKFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29t
cHV0ZVByZWZlcnJlZExvCiAgICAgICAgICAgICAvLyB0byBtYWtlIHRoZSBtaW53aWR0aCBvZiB0
aGUgY2VsbCBpbnRvIHRoZSBmaXhlZCB3aWR0aC4gIFRoZXkgZG8gdGhpcwogICAgICAgICAgICAg
Ly8gZXZlbiBpbiBzdHJpY3QgbW9kZSwgc28gZG8gbm90IG1ha2UgdGhpcyBhIHF1aXJrLiAgQWZm
ZWN0ZWQgdGhlIHRvcAogICAgICAgICAgICAgLy8gb2YgaGlwdG9wLmNvbS4KLSAgICAgICAgICAg
IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KHcudmFsdWUoKSwgbV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgg
PSBtYXg8TGF5b3V0VW5pdD4ody52YWx1ZSgpLCBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7
CiAgICAgfQogfQogCkBAIC0xNjMsNTAgKzE2Myw1MCBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6
bGF5b3V0KCkKICAgICBzZXRDZWxsV2lkdGhDaGFuZ2VkKGZhbHNlKTsKIH0KIAotaW50IFJlbmRl
clRhYmxlQ2VsbDo6cGFkZGluZ1RvcChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25z
dAorTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdUb3AoYm9vbCBpbmNsdWRlSW50
cmluc2ljUGFkZGluZykgY29uc3QKIHsKLSAgICBpbnQgcmVzdWx0ID0gUmVuZGVyQmxvY2s6OnBh
ZGRpbmdUb3AoKTsKKyAgICBMYXlvdXRVbml0IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpwYWRkaW5n
VG9wKCk7CiAgICAgaWYgKCFpbmNsdWRlSW50cmluc2ljUGFkZGluZyB8fCAhaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4gcmVzdWx0
ICsgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSA/IGlu
dHJpbnNpY1BhZGRpbmdCZWZvcmUoKSA6IGludHJpbnNpY1BhZGRpbmdBZnRlcigpKTsKIH0KIAot
aW50IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0JvdHRvbShib29sIGluY2x1ZGVJbnRyaW5zaWNQ
YWRkaW5nKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdCb3R0b20o
Ym9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZykgY29uc3QKIHsKLSAgICBpbnQgcmVzdWx0ID0g
UmVuZGVyQmxvY2s6OnBhZGRpbmdCb3R0b20oKTsKKyAgICBMYXlvdXRVbml0IHJlc3VsdCA9IFJl
bmRlckJsb2NrOjpwYWRkaW5nQm90dG9tKCk7CiAgICAgaWYgKCFpbmNsdWRlSW50cmluc2ljUGFk
ZGluZyB8fCAhaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICByZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gVG9wVG9C
b3R0b21Xcml0aW5nTW9kZSA/IGludHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFk
ZGluZ0JlZm9yZSgpKTsKIH0KIAotaW50IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0xlZnQoYm9v
bCBpbmNsdWRlSW50cmluc2ljUGFkZGluZykgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyVGFibGVD
ZWxsOjpwYWRkaW5nTGVmdChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdAogewot
ICAgIGludCByZXN1bHQgPSBSZW5kZXJCbG9jazo6cGFkZGluZ0xlZnQoKTsKKyAgICBMYXlvdXRV
bml0IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpwYWRkaW5nTGVmdCgpOwogICAgIGlmICghaW5jbHVk
ZUludHJpbnNpY1BhZGRpbmcgfHwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCktPndyaXRpbmdNb2Rl
KCkgPT0gTGVmdFRvUmlnaHRXcml0aW5nTW9kZSA/IGludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSA6
IGludHJpbnNpY1BhZGRpbmdBZnRlcigpKTsKICAgICAKIH0KIAotaW50IFJlbmRlclRhYmxlQ2Vs
bDo6cGFkZGluZ1JpZ2h0KGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0CitMYXlv
dXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1JpZ2h0KGJvb2wgaW5jbHVkZUludHJpbnNp
Y1BhZGRpbmcpIGNvbnN0CiB7ICAgCi0gICAgaW50IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpwYWRk
aW5nUmlnaHQoKTsKKyAgICBMYXlvdXRVbml0IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpwYWRkaW5n
UmlnaHQoKTsKICAgICBpZiAoIWluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nIHx8IGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJuIHJlc3Vs
dCArIChzdHlsZSgpLT53cml0aW5nTW9kZSgpID09IExlZnRUb1JpZ2h0V3JpdGluZ01vZGUgPyBp
bnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSA6IGludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSk7CiB9CiAK
LWludCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdCZWZvcmUoYm9vbCBpbmNsdWRlSW50cmluc2lj
UGFkZGluZykgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nQmVmb3Jl
KGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0CiB7Ci0gICAgaW50IHJlc3VsdCA9
IFJlbmRlckJsb2NrOjpwYWRkaW5nQmVmb3JlKCk7CisgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBS
ZW5kZXJCbG9jazo6cGFkZGluZ0JlZm9yZSgpOwogICAgIGlmICghaW5jbHVkZUludHJpbnNpY1Bh
ZGRpbmcpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJuIHJlc3VsdCArIGludHJp
bnNpY1BhZGRpbmdCZWZvcmUoKTsKIH0KIAotaW50IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0Fm
dGVyKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRl
clRhYmxlQ2VsbDo6cGFkZGluZ0FmdGVyKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNv
bnN0CiB7Ci0gICAgaW50IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpwYWRkaW5nQWZ0ZXIoKTsKKyAg
ICBMYXlvdXRVbml0IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpwYWRkaW5nQWZ0ZXIoKTsKICAgICBp
ZiAoIWluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IHJldHVybiByZXN1bHQgKyBpbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKTsKQEAgLTIzOSwxMSArMjM5
LDExIEBAIEludFJlY3QgUmVuZGVyVGFibGVDZWxsOjpjbGlwcGVkT3ZlcmZsb3cKICAgICAgICAg
cmV0dXJuIFJlbmRlckJsb2NrOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50
Q29udGFpbmVyKTsKIAogICAgIGJvb2wgcnRsID0gIXRhYmxlKCktPnN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKTsKLSAgICBpbnQgb3V0bGluZVNpemUgPSBzdHlsZSgpLT5vdXRsaW5l
U2l6ZSgpOwotICAgIGludCBsZWZ0ID0gbWF4KGJvcmRlckhhbGZMZWZ0KHRydWUpLCBvdXRsaW5l
U2l6ZSk7Ci0gICAgaW50IHJpZ2h0ID0gbWF4KGJvcmRlckhhbGZSaWdodCh0cnVlKSwgb3V0bGlu
ZVNpemUpOwotICAgIGludCB0b3AgPSBtYXgoYm9yZGVySGFsZlRvcCh0cnVlKSwgb3V0bGluZVNp
emUpOwotICAgIGludCBib3R0b20gPSBtYXgoYm9yZGVySGFsZkJvdHRvbSh0cnVlKSwgb3V0bGlu
ZVNpemUpOworICAgIExheW91dFVuaXQgb3V0bGluZVNpemUgPSBzdHlsZSgpLT5vdXRsaW5lU2l6
ZSgpOworICAgIExheW91dFVuaXQgbGVmdCA9IG1heChib3JkZXJIYWxmTGVmdCh0cnVlKSwgb3V0
bGluZVNpemUpOworICAgIExheW91dFVuaXQgcmlnaHQgPSBtYXgoYm9yZGVySGFsZlJpZ2h0KHRy
dWUpLCBvdXRsaW5lU2l6ZSk7CisgICAgTGF5b3V0VW5pdCB0b3AgPSBtYXgoYm9yZGVySGFsZlRv
cCh0cnVlKSwgb3V0bGluZVNpemUpOworICAgIExheW91dFVuaXQgYm90dG9tID0gbWF4KGJvcmRl
ckhhbGZCb3R0b20odHJ1ZSksIG91dGxpbmVTaXplKTsKICAgICBpZiAoKGxlZnQgJiYgIXJ0bCkg
fHwgKHJpZ2h0ICYmIHJ0bCkpIHsKICAgICAgICAgaWYgKFJlbmRlclRhYmxlQ2VsbCogYmVmb3Jl
ID0gdGFibGUoKS0+Y2VsbEJlZm9yZSh0aGlzKSkgewogICAgICAgICAgICAgdG9wID0gbWF4KHRv
cCwgYmVmb3JlLT5ib3JkZXJIYWxmVG9wKHRydWUpKTsKQEAgLTI3MCw3ICsyNzAsNyBAQCBJbnRS
ZWN0IFJlbmRlclRhYmxlQ2VsbDo6Y2xpcHBlZE92ZXJmbG93CiAgICAgfQogICAgIGxlZnQgPSBt
YXgobGVmdCwgLW1pblhWaXN1YWxPdmVyZmxvdygpKTsKICAgICB0b3AgPSBtYXgodG9wLCAtbWlu
WVZpc3VhbE92ZXJmbG93KCkpOwotICAgIEludFJlY3QgcigtbGVmdCwgLSB0b3AsIGxlZnQgKyBt
YXgod2lkdGgoKSArIHJpZ2h0LCBtYXhYVmlzdWFsT3ZlcmZsb3coKSksIHRvcCArIG1heChoZWln
aHQoKSArIGJvdHRvbSwgbWF4WVZpc3VhbE92ZXJmbG93KCkpKTsKKyAgICBMYXlvdXRSZWN0IHIo
LWxlZnQsIC0gdG9wLCBsZWZ0ICsgbWF4KHdpZHRoKCkgKyByaWdodCwgbWF4WFZpc3VhbE92ZXJm
bG93KCkpLCB0b3AgKyBtYXgoaGVpZ2h0KCkgKyBib3R0b20sIG1heFlWaXN1YWxPdmVyZmxvdygp
KSk7CiAKICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkgewogICAgICAgICAvLyBGSVhN
RTogbGF5b3V0RGVsdGEgbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBwYXJ0cyBiZWZvcmUvYWZ0ZXIg
dHJhbnNmb3JtcyBhbmQKQEAgLTY5Niw0OSArNjk2LDQ5IEBAIENvbGxhcHNlZEJvcmRlclZhbHVl
IFJlbmRlclRhYmxlQ2VsbDo6Y28KICAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gY29sbGFwc2VkRW5kQm9yZGVyKCkgOiBjb2xsYXBzZWRTdGFydEJvcmRl
cigpOwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJMZWZ0KCkgY29uc3QKK0xheW91
dFVuaXQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJMZWZ0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
dGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkgPyBib3JkZXJIYWxmTGVmdChmYWxzZSkgOiBSZW5k
ZXJCbG9jazo6Ym9yZGVyTGVmdCgpOwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJS
aWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyUmlnaHQoKSBj
b25zdAogewogICAgIHJldHVybiB0YWJsZSgpLT5jb2xsYXBzZUJvcmRlcnMoKSA/IGJvcmRlckhh
bGZSaWdodChmYWxzZSkgOiBSZW5kZXJCbG9jazo6Ym9yZGVyUmlnaHQoKTsKIH0KIAotaW50IFJl
bmRlclRhYmxlQ2VsbDo6Ym9yZGVyVG9wKCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyVGFibGVD
ZWxsOjpib3JkZXJUb3AoKSBjb25zdAogewogICAgIHJldHVybiB0YWJsZSgpLT5jb2xsYXBzZUJv
cmRlcnMoKSA/IGJvcmRlckhhbGZUb3AoZmFsc2UpIDogUmVuZGVyQmxvY2s6OmJvcmRlclRvcCgp
OwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJCb3R0b20oKSBjb25zdAorTGF5b3V0
VW5pdCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckJvdHRvbSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHRhYmxlKCktPmNvbGxhcHNlQm9yZGVycygpID8gYm9yZGVySGFsZkJvdHRvbShmYWxzZSkgOiBS
ZW5kZXJCbG9jazo6Ym9yZGVyQm90dG9tKCk7CiB9CiAKIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYxOTEsIG1ha2UgdGhlIGNvbGxhcHNlZCBib3Jk
ZXIgZHJhd2luZwogLy8gd29yayB3aXRoIGRpZmZlcmVudCBibG9jayBmbG93IHZhbHVlcyBpbnN0
ZWFkIG9mIGJlaW5nIGhhcmQtY29kZWQgdG8gdG9wLXRvLWJvdHRvbS4KLWludCBSZW5kZXJUYWJs
ZUNlbGw6OmJvcmRlclN0YXJ0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyVGFibGVDZWxsOjpi
b3JkZXJTdGFydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRhYmxlKCktPmNvbGxhcHNlQm9yZGVy
cygpID8gYm9yZGVySGFsZlN0YXJ0KGZhbHNlKSA6IFJlbmRlckJsb2NrOjpib3JkZXJTdGFydCgp
OwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJFbmQoKSBjb25zdAorTGF5b3V0VW5p
dCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckVuZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRhYmxl
KCktPmNvbGxhcHNlQm9yZGVycygpID8gYm9yZGVySGFsZkVuZChmYWxzZSkgOiBSZW5kZXJCbG9j
azo6Ym9yZGVyRW5kKCk7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckJlZm9yZSgp
IGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQmVmb3JlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gdGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkgPyBib3JkZXJIYWxmQmVm
b3JlKGZhbHNlKSA6IFJlbmRlckJsb2NrOjpib3JkZXJCZWZvcmUoKTsKIH0KIAotaW50IFJlbmRl
clRhYmxlQ2VsbDo6Ym9yZGVyQWZ0ZXIoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNl
bGw6OmJvcmRlckFmdGVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gdGFibGUoKS0+Y29sbGFwc2VC
b3JkZXJzKCkgPyBib3JkZXJIYWxmQWZ0ZXIoZmFsc2UpIDogUmVuZGVyQmxvY2s6OmJvcmRlckFm
dGVyKCk7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZMZWZ0KGJvb2wgb3V0
ZXIpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkxlZnQoYm9v
bCBvdXRlcikgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCkt
PnN0eWxlKCk7CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
CkBAIC03NDYsNyArNzQ2LDcgQEAgaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkxlZnQo
Ym9vbAogICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
ID8gYm9yZGVySGFsZkFmdGVyKG91dGVyKSA6IGJvcmRlckhhbGZCZWZvcmUob3V0ZXIpOwogfQog
Ci1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmUmlnaHQoYm9vbCBvdXRlcikgY29uc3QK
K0xheW91dFVuaXQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmUmlnaHQoYm9vbCBvdXRlcikg
Y29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7
CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC03NTQs
NyArNzU0LDcgQEAgaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZlJpZ2h0KGJvbwogICAg
IHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gYm9yZGVy
SGFsZkJlZm9yZShvdXRlcikgOiBib3JkZXJIYWxmQWZ0ZXIob3V0ZXIpOwogfQogCi1pbnQgUmVu
ZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmVG9wKGJvb2wgb3V0ZXIpIGNvbnN0CitMYXlvdXRVbml0
IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZlRvcChib29sIG91dGVyKSBjb25zdAogewogICAg
IFJlbmRlclN0eWxlKiB0YWJsZVN0eWxlID0gdGFibGUoKS0+c3R5bGUoKTsKICAgICBpZiAodGFi
bGVTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTc2Miw3ICs3NjIsNyBAQCBp
bnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmVG9wKGJvb2wgCiAgICAgcmV0dXJuIHRhYmxl
U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGJvcmRlckhhbGZTdGFydChvdXRlcikg
OiBib3JkZXJIYWxmRW5kKG91dGVyKTsKIH0KIAotaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVy
SGFsZkJvdHRvbShib29sIG91dGVyKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6
OmJvcmRlckhhbGZCb3R0b20oYm9vbCBvdXRlcikgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSog
dGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC03NzAsNyArNzcwLDcgQEAgaW50IFJlbmRlclRhYmxl
Q2VsbDo6Ym9yZGVySGFsZkJvdHRvbShibwogICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBib3JkZXJIYWxmRW5kKG91dGVyKSA6IGJvcmRlckhhbGZTdGFy
dChvdXRlcik7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZTdGFydChib29s
IG91dGVyKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZTdGFy
dChib29sIG91dGVyKSBjb25zdAogewogICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvcmRlciA9
IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKCk7CiAgICAgaWYgKGJvcmRlci5leGlzdHMoKSkKQEAgLTc3
OCw3ICs3NzgsNyBAQCBpbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmU3RhcnQoYm9vCiAg
ICAgcmV0dXJuIDA7CiB9CiAgICAgCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmRW5k
KGJvb2wgb3V0ZXIpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFs
ZkVuZChib29sIG91dGVyKSBjb25zdAogewogICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvcmRl
ciA9IGNvbGxhcHNlZEVuZEJvcmRlcigpOwogICAgIGlmIChib3JkZXIuZXhpc3RzKCkpCkBAIC03
ODYsNyArNzg2LDcgQEAgaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkVuZChib29sIAog
ICAgIHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmQmVmb3Jl
KGJvb2wgb3V0ZXIpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFs
ZkJlZm9yZShib29sIG91dGVyKSBjb25zdAogewogICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJv
cmRlciA9IGNvbGxhcHNlZEJlZm9yZUJvcmRlcigpOwogICAgIGlmIChib3JkZXIuZXhpc3RzKCkp
CkBAIC03OTQsNyArNzk0LDcgQEAgaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkJlZm9y
ZShibwogICAgIHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxm
QWZ0ZXIoYm9vbCBvdXRlcikgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyVGFibGVDZWxsOjpib3Jk
ZXJIYWxmQWZ0ZXIoYm9vbCBvdXRlcikgY29uc3QKIHsKICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSBib3JkZXIgPSBjb2xsYXBzZWRBZnRlckJvcmRlcigpOwogICAgIGlmIChib3JkZXIuZXhpc3Rz
KCkpCkBAIC05MjMsMTUgKzkyMywxNSBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRDb2xs
YXBzZWRCb3JkCiAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm90dG9tVmFsID0gY29sbGFwc2Vk
Qm90dG9tQm9yZGVyKCk7CiAgICAgIAogICAgIC8vIEFkanVzdCBvdXIgeC95L3dpZHRoL2hlaWdo
dCBzbyB0aGF0IHdlIHBhaW50IHRoZSBjb2xsYXBzZWQgYm9yZGVycyBhdCB0aGUgY29ycmVjdCBs
b2NhdGlvbi4KLSAgICBpbnQgdG9wV2lkdGggPSB0b3BWYWwud2lkdGgoKTsKLSAgICBpbnQgYm90
dG9tV2lkdGggPSBib3R0b21WYWwud2lkdGgoKTsKLSAgICBpbnQgbGVmdFdpZHRoID0gbGVmdFZh
bC53aWR0aCgpOwotICAgIGludCByaWdodFdpZHRoID0gcmlnaHRWYWwud2lkdGgoKTsKLSAgICAK
LSAgICBpbnQgeCA9IHBhaW50UmVjdC54KCkgLSBsZWZ0V2lkdGggLyAyOwotICAgIGludCB5ID0g
cGFpbnRSZWN0LnkoKSAtIHRvcFdpZHRoIC8gMjsKLSAgICBpbnQgdyA9IHBhaW50UmVjdC53aWR0
aCgpICsgbGVmdFdpZHRoIC8gMiArIChyaWdodFdpZHRoICsgMSkgLyAyOwotICAgIGludCBoID0g
cGFpbnRSZWN0LmhlaWdodCgpICsgdG9wV2lkdGggLyAyICsgKGJvdHRvbVdpZHRoICsgMSkgLyAy
OworICAgIExheW91dFVuaXQgdG9wV2lkdGggPSB0b3BWYWwud2lkdGgoKTsKKyAgICBMYXlvdXRV
bml0IGJvdHRvbVdpZHRoID0gYm90dG9tVmFsLndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBsZWZ0
V2lkdGggPSBsZWZ0VmFsLndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCByaWdodFdpZHRoID0gcmln
aHRWYWwud2lkdGgoKTsKKyAgICAKKyAgICBMYXlvdXRVbml0IHggPSBwYWludFJlY3QueCgpIC0g
bGVmdFdpZHRoIC8gMjsKKyAgICBMYXlvdXRVbml0IHkgPSBwYWludFJlY3QueSgpIC0gdG9wV2lk
dGggLyAyOworICAgIExheW91dFVuaXQgdyA9IHBhaW50UmVjdC53aWR0aCgpICsgbGVmdFdpZHRo
IC8gMiArIChyaWdodFdpZHRoICsgMSkgLyAyOworICAgIExheW91dFVuaXQgaCA9IHBhaW50UmVj
dC5oZWlnaHQoKSArIHRvcFdpZHRoIC8gMiArIChib3R0b21XaWR0aCArIDEpIC8gMjsKICAgICAK
ICAgICBFQm9yZGVyU3R5bGUgdG9wU3R5bGUgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZSh0b3BWYWwu
c3R5bGUoKSk7CiAgICAgRUJvcmRlclN0eWxlIGJvdHRvbVN0eWxlID0gY29sbGFwc2VkQm9yZGVy
U3R5bGUoYm90dG9tVmFsLnN0eWxlKCkpOwpAQCAtMTA0NSwxMSArMTA0NSwxMSBAQCB2b2lkIFJl
bmRlclRhYmxlQ2VsbDo6c2Nyb2xsYmFyc0NoYW5nZWQoCiAKICAgICAvLyBTaHJpbmsgb3VyIGlu
dHJpbnNpYyBwYWRkaW5nIGFzIG11Y2ggYXMgcG9zc2libGUgdG8gYWNjb21tb2RhdGUgdGhlIHNj
cm9sbGJhci4KICAgICBpZiAoc3R5bGUoKS0+dmVydGljYWxBbGlnbigpID09IE1JRERMRSkgewot
ICAgICAgICBpbnQgdG90YWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIGludCBo
ZWlnaHRXaXRob3V0SW50cmluc2ljUGFkZGluZyA9IHRvdGFsSGVpZ2h0IC0gaW50cmluc2ljUGFk
ZGluZ0JlZm9yZSgpIC0gaW50cmluc2ljUGFkZGluZ0FmdGVyKCk7CisgICAgICAgIExheW91dFVu
aXQgdG90YWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIExheW91dFVuaXQgaGVp
Z2h0V2l0aG91dEludHJpbnNpY1BhZGRpbmcgPSB0b3RhbEhlaWdodCAtIGludHJpbnNpY1BhZGRp
bmdCZWZvcmUoKSAtIGludHJpbnNpY1BhZGRpbmdBZnRlcigpOwogICAgICAgICB0b3RhbEhlaWdo
dCAtPSBzY3JvbGxiYXJIZWlnaHQ7Ci0gICAgICAgIGludCBuZXdCZWZvcmVQYWRkaW5nID0gKHRv
dGFsSGVpZ2h0IC0gaGVpZ2h0V2l0aG91dEludHJpbnNpY1BhZGRpbmcpIC8gMjsKLSAgICAgICAg
aW50IG5ld0FmdGVyUGFkZGluZyA9IHRvdGFsSGVpZ2h0IC0gaGVpZ2h0V2l0aG91dEludHJpbnNp
Y1BhZGRpbmcgLSBuZXdCZWZvcmVQYWRkaW5nOworICAgICAgICBMYXlvdXRVbml0IG5ld0JlZm9y
ZVBhZGRpbmcgPSAodG90YWxIZWlnaHQgLSBoZWlnaHRXaXRob3V0SW50cmluc2ljUGFkZGluZykg
LyAyOworICAgICAgICBMYXlvdXRVbml0IG5ld0FmdGVyUGFkZGluZyA9IHRvdGFsSGVpZ2h0IC0g
aGVpZ2h0V2l0aG91dEludHJpbnNpY1BhZGRpbmcgLSBuZXdCZWZvcmVQYWRkaW5nOwogICAgICAg
ICBzZXRJbnRyaW5zaWNQYWRkaW5nQmVmb3JlKG5ld0JlZm9yZVBhZGRpbmcpOwogICAgICAgICBz
ZXRJbnRyaW5zaWNQYWRkaW5nQWZ0ZXIobmV3QWZ0ZXJQYWRkaW5nKTsKICAgICB9IGVsc2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgJKHJldmlzaW9u
IDkwOTMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NywyNCArNTcsMjQgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRh
dGVMb2dpY2FsV2lkdGgoaW50KTsKIAotICAgIHZpcnR1YWwgaW50IGJvcmRlckxlZnQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGludCBib3JkZXJSaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50
IGJvcmRlclRvcCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJvcmRlckJvdHRvbSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IGJvcmRlclN0YXJ0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
Ym9yZGVyRW5kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVyQmVmb3JlKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVyQWZ0ZXIoKSBjb25zdDsKLQotICAgIGludCBib3JkZXJI
YWxmTGVmdChib29sIG91dGVyKSBjb25zdDsKLSAgICBpbnQgYm9yZGVySGFsZlJpZ2h0KGJvb2wg
b3V0ZXIpIGNvbnN0OwotICAgIGludCBib3JkZXJIYWxmVG9wKGJvb2wgb3V0ZXIpIGNvbnN0Owot
ICAgIGludCBib3JkZXJIYWxmQm90dG9tKGJvb2wgb3V0ZXIpIGNvbnN0OwotCi0gICAgaW50IGJv
cmRlckhhbGZTdGFydChib29sIG91dGVyKSBjb25zdDsKLSAgICBpbnQgYm9yZGVySGFsZkVuZChi
b29sIG91dGVyKSBjb25zdDsKLSAgICBpbnQgYm9yZGVySGFsZkJlZm9yZShib29sIG91dGVyKSBj
b25zdDsKLSAgICBpbnQgYm9yZGVySGFsZkFmdGVyKGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBib3JkZXJMZWZ0KCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRV
bml0IGJvcmRlclJpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGJvcmRlclRv
cCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBib3JkZXJCb3R0b20oKSBjb25zdDsK
KyAgICB2aXJ0dWFsIExheW91dFVuaXQgYm9yZGVyU3RhcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFVuaXQgYm9yZGVyRW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGJv
cmRlckJlZm9yZSgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBib3JkZXJBZnRlcigp
IGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmTGVmdChib29sIG91dGVyKSBjb25z
dDsKKyAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZSaWdodChib29sIG91dGVyKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IGJvcmRlckhhbGZUb3AoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0
VW5pdCBib3JkZXJIYWxmQm90dG9tKGJvb2wgb3V0ZXIpIGNvbnN0OworCisgICAgTGF5b3V0VW5p
dCBib3JkZXJIYWxmU3RhcnQoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3Jk
ZXJIYWxmRW5kKGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVySGFsZkJl
Zm9yZShib29sIG91dGVyKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZBZnRlcihi
b29sIG91dGVyKSBjb25zdDsKIAogICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFN0
YXJ0Qm9yZGVyKCkgY29uc3Q7CiAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkRW5k
Qm9yZGVyKCkgY29uc3Q7CkBAIC0xMDgsMTYgKzEwOCwxNiBAQCBwdWJsaWM6CiAgICAgaW50IGlu
dHJpbnNpY1BhZGRpbmdCZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY1BhZGRpbmdC
ZWZvcmU7IH0KICAgICBpbnQgaW50cmluc2ljUGFkZGluZ0FmdGVyKCkgY29uc3QgeyByZXR1cm4g
bV9pbnRyaW5zaWNQYWRkaW5nQWZ0ZXI7IH0KIAotICAgIHZpcnR1YWwgaW50IHBhZGRpbmdUb3Ao
Ym9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwg
aW50IHBhZGRpbmdCb3R0b20oYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNv
bnN0OwotICAgIHZpcnR1YWwgaW50IHBhZGRpbmdMZWZ0KGJvb2wgaW5jbHVkZUludHJpbnNpY1Bh
ZGRpbmcgPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWRkaW5nUmlnaHQoYm9vbCBp
bmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0
VW5pdCBwYWRkaW5nVG9wKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ0JvdHRvbShib29sIGluY2x1ZGVJbnRy
aW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZGRp
bmdMZWZ0KGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ1JpZ2h0KGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRp
bmcgPSB0cnVlKSBjb25zdDsKICAgICAKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBqdXN0IGFz
c3VtZSB0aGUgY2VsbCBoYXMgdGhlIHNhbWUgYmxvY2sgZmxvdyBkaXJlY3Rpb24gYXMgdGhlIHRh
YmxlLiAgSXQncyBsaWtlbHkgd2UnbGwKICAgICAvLyBjcmVhdGUgYW4gZXh0cmEgYW5vbnltb3Vz
IFJlbmRlckJsb2NrIHRvIGhhbmRsZSBtaXhpbmcgZGlyZWN0aW9uYWxpdHkgYW55d2F5LCBpbiB3
aGljaCBjYXNlIHdlIGNhbiBsb2NrCiAgICAgLy8gdGhlIGJsb2NrIGZsb3cgZGlyZWN0aW9uYWxp
dHkgb2YgdGhlIGNlbGxzIHRvIHRoZSB0YWJsZSdzIGRpcmVjdGlvbmFsaXR5LgotICAgIHZpcnR1
YWwgaW50IHBhZGRpbmdCZWZvcmUoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZGRpbmdBZnRlcihib29sIGluY2x1ZGVJbnRyaW5z
aWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZGRpbmdC
ZWZvcmUoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nQWZ0ZXIoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGlu
ZyA9IHRydWUpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRPdmVycmlkZVNpemVGcm9tUm93SGVpZ2h0
KGludCk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>