<?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>8933</bug_id>
          
          <creation_ts>2006-05-15 18:08:58 -0700</creation_ts>
          <short_desc>Split css_stylesheetimpl.* into separate files (one per class).</short_desc>
          <delta_ts>2006-05-15 19:06:06 -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>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>42425</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 18:08:58 -0700</bug_when>
    <thetext>The world is a safer place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42426</commentid>
    <comment_count>1</comment_count>
      <attachid>8338</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 18:10:01 -0700</bug_when>
    <thetext>Created attachment 8338
do the splits! (ignoring whitespace changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42427</commentid>
    <comment_count>2</comment_count>
      <attachid>8338</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-05-15 18:12:09 -0700</bug_when>
    <thetext>Comment on attachment 8338
do the splits! (ignoring whitespace changes)

rs=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8338</attachid>
            <date>2006-05-15 18:10:01 -0700</date>
            <delta_ts>2006-05-15 18:12:09 -0700</delta_ts>
            <desc>do the splits! (ignoring whitespace changes)</desc>
            <filename>split.patch</filename>
            <type>text/plain</type>
            <size>77882</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0Mzk2KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTY0LDYg
KzExNjQsMTQgQEAKIAkJQThFQTdGNzEwQTE5NEFGRDAwQThFRjVGIC8qIE5vdGF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBN0Y2OTBBMTk0
QUZEMDBBOEVGNUYgLyogTm90YXRpb24uaCAqLzsgfTsKIAkJQThFQTdGNzMwQTE5NEFGRDAwQThF
RjVGIC8qIEVudGl0eVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThFQTdGNkIwQTE5NEFGRDAwQThFRjVGIC8qIEVudGl0eVJlZmVyZW5j
ZS5oICovOyB9OwogCQlBOEVBN0Y3NTBBMTk0QUZEMDBBOEVGNUYgLyogRW50aXR5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBN0Y2RDBBMTk0QUZE
MDBBOEVGNUYgLyogRW50aXR5LmggKi87IH07CisJCUE4RUE4MDA3MEExOTUxNkUwMEE4RUY1RiAv
KiBDU1NTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEVBN0ZGRjBBMTk1MTZFMDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVldC5oICovOyB9
OworCQlBOEVBODAwODBBMTk1MTZFMDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBODAwMDBBMTk1MTZF
MDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVldC5jcHAgKi87IH07CisJCUE4RUE4MDA5MEExOTUxNkUw
MEE4RUY1RiAvKiBNZWRpYUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThFQTgwMDEwQTE5NTE2RTAwQThFRjVGIC8qIE1lZGlhTGlzdC5jcHAg
Ki87IH07CisJCUE4RUE4MDBBMEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0TGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTgwMDIwQTE5
NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXRMaXN0LmggKi87IH07CisJCUE4RUE4MDBCMEExOTUx
NkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBODAwMzBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVT
aGVldExpc3QuY3BwICovOyB9OworCQlBOEVBODAwQzBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVT
aGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThF
QTgwMDQwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuaCAqLzsgfTsKKwkJQThFQTgwMEQw
QTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTgwMDUwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxl
U2hlZXQuY3BwICovOyB9OworCQlBOEVBODAwRTBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBODAw
NjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0LmggKi87IH07CiAJCUE4RkQ4Qjg2MDg3Q0I0
NEMwMERDMzcwNyAvKiBLV1FXTWF0cml4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4NUQ3QThDMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4
LmNwcCAqLzsgfTsKIAkJQThGRDhCODcwODdDQjQ1NzAwREMzNzA3IC8qIEtXUVdNYXRyaXguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NUQ3QThEMDg3
OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4LmggKi87IH07CiAJCUE4RkVGQjBBMDk3OUY0NzIw
MDU4MzlGRCAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZFRkIwODA5NzlGNDcyMDA1ODM5RkQgLyogUmVuZGVy
Rm9yZWlnbk9iamVjdC5oICovOyB9OwpAQCAtMTI2MCw4ICsxMjY4LDYgQEAKIAkJQkNFQTQ3OTAw
OTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ3N0QwOTdDQUFDODAw
OTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oICovOyB9OwogCQlCQ0VBNDc5
MjA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3J1bGVpbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0NzdGMDk3Q0FBQzgwMDk0QzlFNCAvKiBj
c3NfcnVsZWltcGwuY3BwICovOyB9OwogCQlCQ0VBNDc5MzA5N0NBQUM4MDA5NEM5RTQgLyogY3Nz
X3J1bGVpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0VBNDc4MDA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3J1bGVpbXBsLmggKi87IH07Ci0JCUJD
RUE0Nzk0MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3Nfc3R5bGVzaGVldGltcGwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ3ODEwOTdDQUFDODAw
OTRDOUU0IC8qIGNzc19zdHlsZXNoZWV0aW1wbC5jcHAgKi87IH07Ci0JCUJDRUE0Nzk1MDk3Q0FB
QzgwMDk0QzlFNCAvKiBjc3Nfc3R5bGVzaGVldGltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0NzgyMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3Nf
c3R5bGVzaGVldGltcGwuaCAqLzsgfTsKIAkJQkNFQTQ3OTYwOTdDQUFDODAwOTRDOUU0IC8qIGNz
c192YWx1ZWltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNFQTQ3ODMwOTdDQUFDODAwOTRDOUU0IC8qIGNzc192YWx1ZWltcGwuY3BwICovOyB9
OwogCQlCQ0VBNDc5NzA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3ZhbHVlaW1wbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ3ODQwOTdDQUFDODAw
OTRDOUU0IC8qIGNzc192YWx1ZWltcGwuaCAqLzsgfTsKIAkJQkNFQTQ3OTgwOTdDQUFDODAwOTRD
OUU0IC8qIGNzc2hlbHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0VBNDc4NTA5N0NBQUM4MDA5NEM5RTQgLyogY3NzaGVscGVyLmNwcCAqLzsg
fTsKQEAgLTI2NTIsNiArMjY1OCwxNCBAQAogCQlBOEVBN0Y2QjBBMTk0QUZEMDBBOEVGNUYgLyog
RW50aXR5UmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbnRp
dHlSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThFQTdGNkMwQTE5
NEFGRDAwQThFRjVGIC8qIEVudGl0eVJlZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRW50aXR5UmVmZXJlbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQThFQTdGNkQwQTE5NEFGRDAwQThFRjVGIC8qIEVudGl0eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW50aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4RUE3RkZGMEExOTUxNkUwMEE4RUY1RiAvKiBDU1NTdHlsZVNoZWV0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTdHlsZVNoZWV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE4MDAwMEExOTUxNkUwMEE4RUY1RiAvKiBDU1NTdHls
ZVNoZWV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NTdHls
ZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTgwMDEwQTE5NTE2
RTAwQThFRjVGIC8qIE1lZGlhTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVkaWFMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThF
QTgwMDIwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXRMaXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNoZWV0TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOEVBODAwMzBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldExpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlU2hlZXRMaXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTgwMDQwQTE5NTE2RTAwQThFRjVG
IC8qIFN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxl
U2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTgwMDUwQTE5NTE2RTAw
QThFRjVGIC8qIFN0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0eWxlU2hlZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEVB
ODAwNjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QThGRUZCMDgwOTc5RjQ3MjAwNTgzOUZEIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckZvcmVpZ25PYmplY3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGRUZCMDkwOTc5RjQ3MjAwNTgzOUZEIC8qIFJlbmRl
ckZvcmVpZ25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlckZvcmVpZ25PYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEZFRkIyRjA5NzlGNEY2MDA1ODM5RkQgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZvcmVpZ25PYmplY3RFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NTcsOCArMjc3MSw2IEBA
CiAJCUJDRUE0NzdFMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NHcmFtbWFyLnkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS55YWNjOyBwYXRoID0gQ1NTR3JhbW1hci55OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0VBNDc3RjA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3J1bGVpbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjc3NfcnVsZWltcGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VBNDc4MDA5N0NBQUM4MDA5NEM5RTQgLyog
Y3NzX3J1bGVpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjc3NfcnVs
ZWltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNFQTQ3ODEwOTdDQUFDODAw
OTRDOUU0IC8qIGNzc19zdHlsZXNoZWV0aW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gY3NzX3N0eWxlc2hlZXRpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQkNFQTQ3ODIwOTdDQUFDODAwOTRDOUU0IC8qIGNzc19zdHlsZXNoZWV0aW1w
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY3NzX3N0eWxlc2hlZXRpbXBs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0NzgzMDk3Q0FBQzgwMDk0QzlF
NCAvKiBjc3NfdmFsdWVpbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBjc3NfdmFsdWVpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNF
QTQ3ODQwOTdDQUFDODAwOTRDOUU0IC8qIGNzc192YWx1ZWltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IGNzc192YWx1ZWltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkNFQTQ3ODUwOTdDQUFDODAwOTRDOUU0IC8qIGNzc2hlbHBlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gY3NzaGVscGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1MDQsMTQgKzQ1MTYsMTEgQEAKIAkJRjUyM0QxODQwMkRF
NDJFODAxODYzNUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJMTQyMDExQUUwQTAwMzExNzAwODMwM0Y5IC8qIENTU1N0eWxlRGVjbGFyYXRp
b24uaWRsICovLAogCQkJCTkzMDcwNUM3MDlFMEM5NUYwMEIxN0ZFNCAvKiBDb3VudGVyLmlkbCAq
LywKIAkJCQlCQ0VBNDc3QTA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX2Jhc2UuY3BwICovLAogCQkJ
CUJDRUE0NzdCMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NfYmFzZS5oICovLAogCQkJCUJDRUE0NzdG
MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NfcnVsZWltcGwuY3BwICovLAogCQkJCUJDRUE0NzgwMDk3
Q0FBQzgwMDk0QzlFNCAvKiBjc3NfcnVsZWltcGwuaCAqLywKLQkJCQlCQ0VBNDc4MTA5N0NBQUM4
MDA5NEM5RTQgLyogY3NzX3N0eWxlc2hlZXRpbXBsLmNwcCAqLywKLQkJCQlCQ0VBNDc4MjA5N0NB
QUM4MDA5NEM5RTQgLyogY3NzX3N0eWxlc2hlZXRpbXBsLmggKi8sCiAJCQkJQkNFQTQ3ODMwOTdD
QUFDODAwOTRDOUU0IC8qIGNzc192YWx1ZWltcGwuY3BwICovLAogCQkJCUJDRUE0Nzg0MDk3Q0FB
QzgwMDk0QzlFNCAvKiBjc3NfdmFsdWVpbXBsLmggKi8sCiAJCQkJQkNFQTQ3N0MwOTdDQUFDODAw
OTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8sCkBAIC00NTI0LDgg
KzQ1MzMsMTEgQEAKIAkJCQk5MzA3MDU5MDA5RTBDNzU4MDBCMTdGRTQgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuaWRsICovLAogCQkJCUJDRUE0Nzg5MDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NQcm9wZXJ0
eU5hbWVzLmluICovLAogCQkJCTE0Q0Y3QTcwMDlGNUNGOUEwMEVCMzY2NSAvKiBDU1NSdWxlLmlk
bCAqLywKKwkJCQkxNDIwMTFBRTBBMDAzMTE3MDA4MzAzRjkgLyogQ1NTU3R5bGVEZWNsYXJhdGlv
bi5pZGwgKi8sCiAJCQkJQkNFQTQ3OEEwOTdDQUFDODAwOTRDOUU0IC8qIGNzc3N0eWxlc2VsZWN0
b3IuY3BwICovLAogCQkJCUJDRUE0NzhCMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NzdHlsZXNlbGVj
dG9yLmggKi8sCisJCQkJQThFQTgwMDAwQTE5NTE2RTAwQThFRjVGIC8qIENTU1N0eWxlU2hlZXQu
Y3BwICovLAorCQkJCUE4RUE3RkZGMEExOTUxNkUwMEE4RUY1RiAvKiBDU1NTdHlsZVNoZWV0Lmgg
Ki8sCiAJCQkJMTRDRjc4NzEwOUY1ODdDQTAwRUIzNjY1IC8qIENTU1ZhbHVlLmlkbCAqLywKIAkJ
CQlCQ0VBNDc4QzA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTVmFsdWVLZXl3b3Jkcy5pbiAqLywKIAkJ
CQk5M0NBNEM5OTA5REY5M0ZBMDBERjg2NzcgLyogaHRtbDQuY3NzICovLApAQCAtNDUzMyw3ICs0
NTQ1LDEzIEBACiAJCQkJOTNDQTRDOUIwOURGOTNGQTAwREY4Njc3IC8qIG1ha2Vwcm9wICovLAog
CQkJCTkzQ0E0QzlDMDlERjkzRkEwMERGODY3NyAvKiBtYWtldG9rZW5pemVyICovLAogCQkJCTkz
Q0E0QzlEMDlERjkzRkEwMERGODY3NyAvKiBtYWtldmFsdWVzICovLAorCQkJCUE4RUE4MDAxMEEx
OTUxNkUwMEE4RUY1RiAvKiBNZWRpYUxpc3QuY3BwICovLAorCQkJCUE4RUE4MDA2MEExOTUxNkUw
MEE4RUY1RiAvKiBNZWRpYUxpc3QuaCAqLywKIAkJCQk5M0NBNEM5RjA5REY5M0ZBMDBERjg2Nzcg
LyogcXVpcmtzLmNzcyAqLywKKwkJCQlBOEVBODAwNTBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVT
aGVldC5jcHAgKi8sCisJCQkJQThFQTgwMDQwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQu
aCAqLywKKwkJCQlBOEVBODAwMzBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldExpc3QuY3Bw
ICovLAorCQkJCUE4RUE4MDAyMEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0TGlzdC5oICov
LAogCQkJCTkzQ0E0Q0EyMDlERjkzRkEwMERGODY3NyAvKiBzdmcuY3NzICovLAogCQkJCTkzQ0E0
Q0EzMDlERjkzRkEwMERGODY3NyAvKiB0b2tlbml6ZXIuZmxleCAqLywKIAkJCSk7CkBAIC01MTU5
LDcgKzUxNzcsNiBAQAogCQkJCUJDRUE0NzhFMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NfYmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ3OTAwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ3OTMwOTdDQUFD
ODAwOTRDOUU0IC8qIGNzc19ydWxlaW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNFQTQ3OTUw
OTdDQUFDODAwOTRDOUU0IC8qIGNzc19zdHlsZXNoZWV0aW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNFQTQ3OTcwOTdDQUFDODAwOTRDOUU0IC8qIGNzc192YWx1ZWltcGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRUE0NzlCMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NwYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRUE0NzlFMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NzdHlsZXNlbGVjdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTU1MDgsNiArNTUyNSwxMCBAQAogCQkJCUE4RUE3RjcxMEEx
OTRBRkQwMEE4RUY1RiAvKiBOb3RhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdGNzMw
QTE5NEFGRDAwQThFRjVGIC8qIEVudGl0eVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThFQTdGNzUwQTE5NEFGRDAwQThFRjVGIC8qIEVudGl0eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QThFQTgwMDcwQTE5NTE2RTAwQThFRjVGIC8qIENTU1N0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUE4RUE4MDBBMEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0TGlzdC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQThFQTgwMEMwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuaCBp
biBIZWFkZXJzICovLAorCQkJCUE4RUE4MDBFMEExOTUxNkUwMEE4RUY1RiAvKiBNZWRpYUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpAQCAtNTk5Myw3ICs2MDE0LDYgQEAKIAkJCQlCQ0VBNDc4RDA5N0NB
QUM4MDA5NEM5RTQgLyogY3NzX2Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ3OEYw
OTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0VBNDc5MjA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3J1bGVpbXBsLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUJDRUE0Nzk0MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3Nfc3R5
bGVzaGVldGltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ3OTYwOTdDQUFDODAwOTRD
OUU0IC8qIGNzc192YWx1ZWltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ3OTgwOTdD
QUFDODAwOTRDOUU0IC8qIGNzc2hlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDc5
QTA5N0NBQUM4MDA5NEM5RTQgLyogY3NzcGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjMx
NSw2ICs2MzM1LDEwIEBACiAJCQkJQThFQTdFQkYwQTE5NDVEMDAwQThFRjVGIC8qIE5vdGF0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE3RUMxMEExOTQ1RDAwMEE4RUY1RiAvKiBFbnRp
dHlSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTdFQzMwQTE5NDVEMDAwQThF
RjVGIC8qIEVudGl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEVBODAwODBBMTk1MTZFMDBB
OEVGNUYgLyogQ1NTU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEVBODAwOTBB
MTk1MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4RUE4
MDBCMEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0TGlzdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBOEVBODAwRDBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9u
IDE0Mzk2KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNDQgQEAKIDIw
MDYtMDUtMTUgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBsZS5jb20+CiAKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgY3NzX3N0eWxlc2hlZXRp
bXBsLiogaW50byBzZXBhcmF0ZSBmaWxlcyAob25lIHBlciBjbGFzcykuCisgICAgICAgIGh0dHA6
Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkzMworCisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OkNTU1N0eWxl
U2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6YWRkUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpkZWxldGVSdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2hlZXQ6OmRvY0xvYWRlcik6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuaDogQWRk
ZWQuCisgICAgICAgICogY3NzL01lZGlhTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFMaXN0OjpNZWRpYUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0Ojpj
b250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6OnBhcmVudFN0eWxlU2hlZXQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjpwYXJlbnRSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhTGlzdDo6ZGVsZXRlTWVkaXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
TGlzdDo6c2V0TWVkaWFUZXh0KToKKyAgICAgICAgKiBjc3MvTWVkaWFMaXN0Lmg6IEFkZGVkLgor
ICAgICAgICAqIGNzcy9TdHlsZVNoZWV0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0OjpTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6OnBh
cmVudFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldDo6c2V0TWVkaWEp
OgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTaGVldDo6b3duZXJOb2RlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0Ojp+U3R5bGVTaGVldExp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldExpc3Q6OmFkZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNoZWV0TGlzdDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRMaXN0OjppdGVtKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldExpc3QuaDogQWRkZWQu
CisgICAgICAgICogY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oOiBSZW1vdmVkLgorCisyMDA2LTA1LTE1ICBFcmlj
IFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgorCiAgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOiBidWlsZCBmaXguCiAKIDIwMDYtMDUtMTUgIEVyaWMgU2VpZGVs
ICA8ZXNlaWRlbEBhcHBsZS5jb20+CkluZGV4OiBjc3MvQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY3NzL0NTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxNDM4MikKKysrIGNzcy9D
U1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksODggKzE5LDM5IEBACiAgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCisjaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiY3NzX3J1bGVpbXBsLmgiCi0jaW5jbHVkZSAiY3Nz
X3ZhbHVlaW1wbC5oIgotI2luY2x1ZGUgImNzc3BhcnNlci5oIgotI2luY2x1ZGUgIkhUTUxEb2N1
bWVudC5oIgotI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
Ik5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1TdHlsZVNoZWV0OjpTdHlsZVNoZWV0KFN0eWxlU2hlZXQgKnBhcmVudFNoZWV0LCBT
dHJpbmcgaHJlZikKLSAgICA6IFN0eWxlTGlzdChwYXJlbnRTaGVldCkKLXsKLSAgICBtX2Rpc2Fi
bGVkID0gZmFsc2U7Ci0gICAgbV9wYXJlbnROb2RlID0gMDsKLSAgICBtX3N0ckhyZWYgPSBocmVm
OwotfQotCi0KLVN0eWxlU2hlZXQ6OlN0eWxlU2hlZXQoV2ViQ29yZTo6Tm9kZSAqcGFyZW50Tm9k
ZSwgU3RyaW5nIGhyZWYpCi0gICAgOiBTdHlsZUxpc3QoMCkKLXsKLSAgICBtX3BhcmVudE5vZGUg
PSBwYXJlbnROb2RlOwotICAgIG1fZGlzYWJsZWQgPSBmYWxzZTsKLSAgICBtX3N0ckhyZWYgPSBo
cmVmOwotfQotCi1TdHlsZVNoZWV0OjpTdHlsZVNoZWV0KFN0eWxlQmFzZSAqb3duZXIsIFN0cmlu
ZyBocmVmKQotICAgIDogU3R5bGVMaXN0KG93bmVyKQotewotICAgIG1fZGlzYWJsZWQgPSBmYWxz
ZTsKLSAgICBtX3BhcmVudE5vZGUgPSAwOwotICAgIG1fc3RySHJlZiA9IGhyZWY7Ci19Ci0KLVN0
eWxlU2hlZXQ6On5TdHlsZVNoZWV0KCkKLXsKLSAgICBpZiAobV9tZWRpYSkKLSAgICAgICAgbV9t
ZWRpYS0+c2V0UGFyZW50KDApOwotfQotCi1TdHlsZVNoZWV0ICpTdHlsZVNoZWV0OjpwYXJlbnRT
dHlsZVNoZWV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5p
c1N0eWxlU2hlZXQoKSkgPyBzdGF0aWNfY2FzdDxTdHlsZVNoZWV0ICo+KHBhcmVudCgpKSA6IDA7
Ci19Ci0KLXZvaWQgU3R5bGVTaGVldDo6c2V0TWVkaWEoTWVkaWFMaXN0ICptZWRpYSkKLXsKLSAg
ICBtX21lZGlhID0gbWVkaWE7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQogQ1NTU3R5bGVT
aGVldDo6Q1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0ICpwYXJlbnRTaGVldCwgU3RyaW5nIGhy
ZWYpCiAgICAgOiBTdHlsZVNoZWV0KHBhcmVudFNoZWV0LCBocmVmKQorICAgICwgbV9kb2MocGFy
ZW50U2hlZXQgPyBwYXJlbnRTaGVldC0+ZG9jKCkgOiAwKQorICAgICwgbV9pbXBsaWNpdChmYWxz
ZSkKKyAgICAsIG1fbmFtZXNwYWNlcygwKQogewotICAgIG1fZG9jID0gcGFyZW50U2hlZXQgPyBw
YXJlbnRTaGVldC0+ZG9jKCkgOiAwOwotICAgIG1faW1wbGljaXQgPSBmYWxzZTsKLSAgICBtX25h
bWVzcGFjZXMgPSAwOwogfQogCiBDU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KE5vZGUgKnBh
cmVudE5vZGUsIFN0cmluZyBocmVmLCBib29sIF9pbXBsaWNpdCkKICAgICA6IFN0eWxlU2hlZXQo
cGFyZW50Tm9kZSwgaHJlZikKKyAgICAsIG1fZG9jKHBhcmVudE5vZGUtPmRvY3VtZW50KCkpCisg
ICAgLCBtX2ltcGxpY2l0KF9pbXBsaWNpdCkgCisgICAgLCBtX25hbWVzcGFjZXMoMCkKIHsKLSAg
ICBtX2RvYyA9IHBhcmVudE5vZGUtPmRvY3VtZW50KCk7Ci0gICAgbV9pbXBsaWNpdCA9IF9pbXBs
aWNpdDsgCi0gICAgbV9uYW1lc3BhY2VzID0gMDsKIH0KIAogQ1NTU3R5bGVTaGVldDo6Q1NTU3R5
bGVTaGVldChDU1NSdWxlICpvd25lclJ1bGUsIFN0cmluZyBocmVmKQogICAgIDogU3R5bGVTaGVl
dChvd25lclJ1bGUsIGhyZWYpCisgICAgLCBtX2RvYygwKQorICAgICwgbV9pbXBsaWNpdChmYWxz
ZSkKKyAgICAsIG1fbmFtZXNwYWNlcygwKQogewotICAgIG1fZG9jID0gMDsKLSAgICBtX2ltcGxp
Y2l0ID0gZmFsc2U7Ci0gICAgbV9uYW1lc3BhY2VzID0gMDsKIH0KIAogQ1NTUnVsZSAqQ1NTU3R5
bGVTaGVldDo6b3duZXJSdWxlKCkgY29uc3QKQEAgLTIxMyw3ICsxNjQsNyBAQAogICAgICAgICBt
X3BhcmVudE5vZGUtPnNoZWV0TG9hZGVkKCk7CiB9CiAKLVdlYkNvcmU6OkRvY0xvYWRlciAqQ1NT
U3R5bGVTaGVldDo6ZG9jTG9hZGVyKCkKK0RvY0xvYWRlciAqQ1NTU3R5bGVTaGVldDo6ZG9jTG9h
ZGVyKCkKIHsKICAgICBpZiAoICFtX2RvYyApIC8vIGRvYyBpcyAwIGZvciB0aGUgdXNlci0gYW5k
IGRlZmF1bHQtc2hlZXQhCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjMyLDExNiArMTgzLDQgQEAK
ICAgICAgICAgbV9kb2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKIH0KIAotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLQotU3R5bGVTaGVldExpc3Q6On5TdHlsZVNoZWV0TGlzdCgpCi17Ci0gICAg
Zm9yICggRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxTdHlsZVNoZWV0PiBpdCAoIHN0eWxlU2hl
ZXRzICk7IGl0LmN1cnJlbnQoKTsgKytpdCApCi0gICAgICAgIGl0LmN1cnJlbnQoKS0+ZGVyZWYo
KTsKLX0KLQotdm9pZCBTdHlsZVNoZWV0TGlzdDo6YWRkKCBTdHlsZVNoZWV0KiBzICkKLXsKLSAg
ICBpZiAoICFzdHlsZVNoZWV0cy5jb250YWluc1JlZiggcyApICkgewotICAgICAgICBzLT5yZWYo
KTsKLSAgICAgICAgc3R5bGVTaGVldHMuYXBwZW5kKCBzICk7Ci0gICAgfQotfQotCi12b2lkIFN0
eWxlU2hlZXRMaXN0OjpyZW1vdmUoIFN0eWxlU2hlZXQqIHMgKQotewotICAgIGlmICggc3R5bGVT
aGVldHMucmVtb3ZlUmVmKCBzICkgKQotICAgICAgICBzLT5kZXJlZigpOwotfQotCi11bnNpZ25l
ZCBTdHlsZVNoZWV0TGlzdDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICAvLyBoYWNrIHNvIGltcGxp
Y2l0IEJPRFkgc3R5bGVzaGVldHMgZG9uJ3QgZ2V0IGNvdW50ZWQgaGVyZQotICAgIHVuc2lnbmVk
IGwgPSAwOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVTaGVldD4gaXQoc3R5
bGVTaGVldHMpOwotICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpIHsKLSAgICAgICAgaWYg
KCFpdC5jdXJyZW50KCktPmlzQ1NTU3R5bGVTaGVldCgpIHx8ICFzdGF0aWNfY2FzdDxDU1NTdHls
ZVNoZWV0Kj4oaXQuY3VycmVudCgpKS0+aW1wbGljaXQoKSkKLSAgICAgICAgICAgIGwrKzsKLSAg
ICB9Ci0gICAgcmV0dXJuIGw7Ci19Ci0KLVN0eWxlU2hlZXQgKlN0eWxlU2hlZXRMaXN0OjppdGVt
ICggdW5zaWduZWQgaW5kZXggKQotewotICAgIHVuc2lnbmVkIGwgPSAwOwotICAgIERlcHJlY2F0
ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVTaGVldD4gaXQoc3R5bGVTaGVldHMpOwotICAgIGZvciAo
OyBpdC5jdXJyZW50KCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCFpdC5jdXJyZW50KCktPmlzQ1NT
U3R5bGVTaGVldCgpIHx8ICFzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oaXQuY3VycmVudCgp
KS0+aW1wbGljaXQoKSkgewotICAgICAgICAgICAgaWYgKGwgPT0gaW5kZXgpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGl0LmN1cnJlbnQoKTsKLSAgICAgICAgICAgIGwrKzsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTWVkaWFMaXN0OjpNZWRpYUxpc3QoIENTU1N0eWxlU2hlZXQgKnBhcmVudFNo
ZWV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZtZWRpYSAp
Ci0gICAgOiBTdHlsZUJhc2UoIHBhcmVudFNoZWV0ICkKLXsKLSAgICBzZXRNZWRpYVRleHQoIG1l
ZGlhICk7Ci19Ci0KLU1lZGlhTGlzdDo6TWVkaWFMaXN0KCBDU1NSdWxlICpwYXJlbnRSdWxlLCBj
b25zdCBTdHJpbmcgJm1lZGlhICkKLSAgICA6IFN0eWxlQmFzZShwYXJlbnRSdWxlKQotewotICAg
IHNldE1lZGlhVGV4dCggbWVkaWEgKTsKLX0KLQotYm9vbCBNZWRpYUxpc3Q6OmNvbnRhaW5zKCBj
b25zdCBTdHJpbmcgJm1lZGl1bSApIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbHN0TWVkaWEuY291
bnQoKSA9PSAwIHx8IG1fbHN0TWVkaWEuY29udGFpbnMoIG1lZGl1bSApIHx8Ci0gICAgICAgICAg
ICBtX2xzdE1lZGlhLmNvbnRhaW5zKCAiYWxsIiApOwotfQotCi1DU1NTdHlsZVNoZWV0ICpNZWRp
YUxpc3Q6OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAotewotICAgIHJldHVybiBwYXJlbnQoKS0+
aXNDU1NTdHlsZVNoZWV0KCkgPyBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0ICo+KHBhcmVudCgp
KSA6IDA7Ci19Ci0KLUNTU1J1bGUgKk1lZGlhTGlzdDo6cGFyZW50UnVsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHBhcmVudCgpLT5pc1J1bGUoKSA/IHN0YXRpY19jYXN0PENTU1J1bGUgKj4ocGFy
ZW50KCkpIDogMDsKLX0KLQotdm9pZCBNZWRpYUxpc3Q6OmRlbGV0ZU1lZGl1bSggY29uc3QgU3Ry
aW5nICZvbGRNZWRpdW0gKQotewotICAgIGZvciAoIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8U3RyaW5n
Pjo6SXRlcmF0b3IgaXQgPSBtX2xzdE1lZGlhLmJlZ2luKCk7IGl0ICE9IG1fbHN0TWVkaWEuZW5k
KCk7ICsraXQgKSB7Ci0gICAgICAgIGlmICgoKml0KSA9PSBvbGRNZWRpdW0pIHsKLSAgICAgICAg
ICAgIG1fbHN0TWVkaWEucmVtb3ZlKCBpdCApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1XZWJDb3JlOjpTdHJpbmcgTWVkaWFMaXN0OjptZWRpYVRleHQoKSBj
b25zdAotewotICAgIFN0cmluZyB0ZXh0ID0gIiI7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVM
aXN0PFN0cmluZz46OkNvbnN0SXRlcmF0b3IgaXQgPSBtX2xzdE1lZGlhLmJlZ2luKCk7IGl0ICE9
IG1fbHN0TWVkaWEuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKHRleHQubGVuZ3RoKCkgPiAw
KQotICAgICAgICAgICAgdGV4dCArPSAiLCAiOwotICAgICAgICB0ZXh0ICs9ICppdDsKLSAgICB9
Ci0gICAgcmV0dXJuIHRleHQ7Ci19Ci0KLXZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29u
c3QgV2ViQ29yZTo6U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBtX2xzdE1lZGlhLmNsZWFyKCk7Ci0g
ICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbGlzdCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxp
dCgnLCcsIHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgZm9yIChEZXByZWNhdGVkU3Ry
aW5nTGlzdDo6SXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxpc3QuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgU3RyaW5nIG1lZGl1bSA9ICgqaXQpLnN0cmlwV2hpdGVTcGFjZSgpOwot
ICAgICAgICBpZiAoIW1lZGl1bS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2xzdE1lZGlhLmFw
cGVuZChtZWRpdW0pOwotICAgIH0KLX0KLQogfQpJbmRleDogY3NzL01lZGlhTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gY3NzL01lZGlhTGlzdC5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgY3NzL01l
ZGlhTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDI3MiArMTksMjEgQEAKICAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJjc3Nfc3R5bGVzaGVldGltcGwuaCIKKyNpbmNsdWRlICJNZWRpYUxp
c3QuaCIKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJjc3NfcnVsZWlt
cGwuaCIKLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCi0jaW5jbHVkZSAiY3NzcGFyc2VyLmgi
Ci0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVk
ZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdHlsZVNoZWV0OjpTdHlsZVNoZWV0KFN0eWxlU2hl
ZXQgKnBhcmVudFNoZWV0LCBTdHJpbmcgaHJlZikKLSAgICA6IFN0eWxlTGlzdChwYXJlbnRTaGVl
dCkKLXsKLSAgICBtX2Rpc2FibGVkID0gZmFsc2U7Ci0gICAgbV9wYXJlbnROb2RlID0gMDsKLSAg
ICBtX3N0ckhyZWYgPSBocmVmOwotfQotCi0KLVN0eWxlU2hlZXQ6OlN0eWxlU2hlZXQoV2ViQ29y
ZTo6Tm9kZSAqcGFyZW50Tm9kZSwgU3RyaW5nIGhyZWYpCi0gICAgOiBTdHlsZUxpc3QoMCkKLXsK
LSAgICBtX3BhcmVudE5vZGUgPSBwYXJlbnROb2RlOwotICAgIG1fZGlzYWJsZWQgPSBmYWxzZTsK
LSAgICBtX3N0ckhyZWYgPSBocmVmOwotfQotCi1TdHlsZVNoZWV0OjpTdHlsZVNoZWV0KFN0eWxl
QmFzZSAqb3duZXIsIFN0cmluZyBocmVmKQotICAgIDogU3R5bGVMaXN0KG93bmVyKQotewotICAg
IG1fZGlzYWJsZWQgPSBmYWxzZTsKLSAgICBtX3BhcmVudE5vZGUgPSAwOwotICAgIG1fc3RySHJl
ZiA9IGhyZWY7Ci19Ci0KLVN0eWxlU2hlZXQ6On5TdHlsZVNoZWV0KCkKLXsKLSAgICBpZiAobV9t
ZWRpYSkKLSAgICAgICAgbV9tZWRpYS0+c2V0UGFyZW50KDApOwotfQotCi1TdHlsZVNoZWV0ICpT
dHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVu
dCgpICYmIHBhcmVudCgpLT5pc1N0eWxlU2hlZXQoKSkgPyBzdGF0aWNfY2FzdDxTdHlsZVNoZWV0
ICo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KLXZvaWQgU3R5bGVTaGVldDo6c2V0TWVkaWEoTWVkaWFM
aXN0ICptZWRpYSkKLXsKLSAgICBtX21lZGlhID0gbWVkaWE7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLQotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0ICpwYXJl
bnRTaGVldCwgU3RyaW5nIGhyZWYpCi0gICAgOiBTdHlsZVNoZWV0KHBhcmVudFNoZWV0LCBocmVm
KQotewotICAgIG1fZG9jID0gcGFyZW50U2hlZXQgPyBwYXJlbnRTaGVldC0+ZG9jKCkgOiAwOwot
ICAgIG1faW1wbGljaXQgPSBmYWxzZTsKLSAgICBtX25hbWVzcGFjZXMgPSAwOwotfQotCi1DU1NT
dHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KE5vZGUgKnBhcmVudE5vZGUsIFN0cmluZyBocmVmLCBi
b29sIF9pbXBsaWNpdCkKLSAgICA6IFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZikKLXsKLSAg
ICBtX2RvYyA9IHBhcmVudE5vZGUtPmRvY3VtZW50KCk7Ci0gICAgbV9pbXBsaWNpdCA9IF9pbXBs
aWNpdDsgCi0gICAgbV9uYW1lc3BhY2VzID0gMDsKLX0KLQotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5
bGVTaGVldChDU1NSdWxlICpvd25lclJ1bGUsIFN0cmluZyBocmVmKQotICAgIDogU3R5bGVTaGVl
dChvd25lclJ1bGUsIGhyZWYpCi17Ci0gICAgbV9kb2MgPSAwOwotICAgIG1faW1wbGljaXQgPSBm
YWxzZTsKLSAgICBtX25hbWVzcGFjZXMgPSAwOwotfQotCi1DU1NSdWxlICpDU1NTdHlsZVNoZWV0
Ojpvd25lclJ1bGUoKSBjb25zdAotewotICAgIHJldHVybiAocGFyZW50KCkgJiYgcGFyZW50KCkt
PmlzUnVsZSgpKSA/IHN0YXRpY19jYXN0PENTU1J1bGUgKj4ocGFyZW50KCkpIDogMDsKLX0KLQot
dW5zaWduZWQgQ1NTU3R5bGVTaGVldDo6aW5zZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGUsIHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYg
KGluZGV4ID4gbGVuZ3RoKCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIENTU1BhcnNlciBwKHVzZVN0cmljdFBhcnNpbmcoKSk7
Ci0gICAgUmVmUHRyPENTU1J1bGU+IHIgPSBwLnBhcnNlUnVsZSh0aGlzLCBydWxlKTsKLQotICAg
IGlmICghcikgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIC8vICMjIwotICAgIC8vIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2Vk
IGlmIHRoZSBydWxlIGNhbm5vdCBiZSBpbnNlcnRlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGUu
Zy4gaWYgYW4KLSAgICAvL0BpbXBvcnQgcnVsZSBpcyBpbnNlcnRlZCBhZnRlciBhIHN0YW5kYXJk
IHJ1bGUgc2V0IG9yIG90aGVyIGF0LXJ1bGUuCi0gICAgaW5zZXJ0KGluZGV4LCByLnJlbGVhc2Uo
KSk7Ci0gICAgCi0gICAgc3R5bGVTaGVldENoYW5nZWQoKTsKLSAgICAKLSAgICByZXR1cm4gaW5k
ZXg7Ci19Ci0KLXVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUoIGNvbnN0IFN0cmluZyAm
c2VsZWN0b3IsIGNvbnN0IFN0cmluZyAmc3R5bGUsIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgICBpbmRleCA9IGxlbmd0aCgpOwot
ICAgIHJldHVybiBpbnNlcnRSdWxlKHNlbGVjdG9yICsgIiB7ICIgKyBzdHlsZSArICIgfSIsIGlu
ZGV4LCBlYyk7Ci19Ci0KLUNTU1J1bGVMaXN0ICpDU1NTdHlsZVNoZWV0Ojpjc3NSdWxlcygpCi17
Ci0gICAgcmV0dXJuIG5ldyBDU1NSdWxlTGlzdCh0aGlzKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNo
ZWV0OjpkZWxldGVSdWxlKCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlYyA9IDA7Ci0gICAgcmVtb3ZlKGluZGV4
KTsKLSAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU1N0eWxlU2hlZXQ6OmFk
ZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25z
dCBBdG9taWNTdHJpbmcmIHVyaSkKLXsKLSAgICBpZiAodXJpLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9uYW1lc3BhY2VzID0gbmV3IENTU05hbWVzcGFjZShwcmVmaXgsIHVy
aSwgbV9uYW1lc3BhY2VzKTsKLSAgICAKLSAgICBpZiAocHJlZml4LmlzRW1wdHkoKSkKLSAgICAg
ICAgLy8gU2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBvbiB0aGUgcGFyc2VyIHNvIHRoYXQgc2Vs
ZWN0b3JzIHRoYXQgb21pdCBuYW1lc3BhY2UgaW5mbyB3aWxsCi0gICAgICAgIC8vIGJlIGFibGUg
dG8gcGljayBpdCB1cCBlYXNpbHkuCi0gICAgICAgIHAtPmRlZmF1bHROYW1lc3BhY2UgPSB1cmk7
Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgQ1NTU3R5bGVTaGVldDo6ZGV0ZXJtaW5lTmFtZXNw
YWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQotewotICAgIGlmIChwcmVmaXguaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbnVsbEF0b207IC8vIE5vIG5hbWVzcGFjZS4gSWYgYW4gZWxl
bWVudC9hdHRyaWJ1dGUgaGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24ndCBtYXRjaCBpdC4KLSAgICBl
bHNlIGlmIChwcmVmaXggPT0gc3RhckF0b20pCi0gICAgICAgIHJldHVybiBzdGFyQXRvbTsgLy8g
V2UnbGwgbWF0Y2ggYW55IG5hbWVzcGFjZS4KLSAgICBlbHNlIGlmIChtX25hbWVzcGFjZXMpIHsK
LSAgICAgICAgQ1NTTmFtZXNwYWNlKiBucyA9IG1fbmFtZXNwYWNlcy0+bmFtZXNwYWNlRm9yUHJl
Zml4KHByZWZpeCk7Ci0gICAgICAgIGlmIChucykKLSAgICAgICAgICAgIHJldHVybiBucy0+dXJp
KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsQXRvbTsgLy8gQXNzdW1lIHdlIHdvbnQgbWF0Y2gg
YW55IG5hbWVzcGFjZXMuCi19Ci0KLWJvb2wgQ1NTU3R5bGVTaGVldDo6cGFyc2VTdHJpbmcoY29u
c3QgU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0KQotewotICAgIHNldFN0cmljdFBhcnNpbmco
c3RyaWN0KTsKLSAgICBDU1NQYXJzZXIgcCggc3RyaWN0ICk7Ci0gICAgcC5wYXJzZVNoZWV0KCB0
aGlzLCBzdHJpbmcgKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NTdHlsZVNoZWV0
Ojppc0xvYWRpbmcoKQotewotICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBTdHlsZUJhc2UqIHJ1bGUg
PSBpdGVtKGkpOwotICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkgJiYgc3RhdGljX2Nh
c3Q8Q1NTSW1wb3J0UnVsZSo+KHJ1bGUpLT5pc0xvYWRpbmcoKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTaGVl
dDo6Y2hlY2tMb2FkZWQoKQotewotICAgIGlmIChpc0xvYWRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChwYXJlbnQoKSkKLSAgICAgICAgcGFyZW50KCktPmNoZWNrTG9hZGVkKCk7Ci0g
ICAgaWYgKG1fcGFyZW50Tm9kZSkKLSAgICAgICAgbV9wYXJlbnROb2RlLT5zaGVldExvYWRlZCgp
OwotfQotCi1XZWJDb3JlOjpEb2NMb2FkZXIgKkNTU1N0eWxlU2hlZXQ6OmRvY0xvYWRlcigpCi17
Ci0gICAgaWYgKCAhbV9kb2MgKSAvLyBkb2MgaXMgMCBmb3IgdGhlIHVzZXItIGFuZCBkZWZhdWx0
LXNoZWV0IQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vICMjIyByZW1vdmU/IChjbGllbnRz
IGp1c3QgdXNlIHNoZWV0LT5kb2MoKS0+ZG9jTG9hZGVyKCkpCi0gICAgcmV0dXJuIG1fZG9jLT5k
b2NMb2FkZXIoKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHlsZVNoZWV0Q2hhbmdlZCgp
Ci17Ci0gICAgLyogRklYTUU6IFdlIGRvbid0IG5lZWQgdG8gZG8gZXZlcnl0aGluZyB1cGRhdGVT
dHlsZVNlbGVjdG9yIGRvZXMsCi0gICAgICogYmFzaWNhbGx5IHdlIGp1c3QgbmVlZCB0byByZWNy
ZWF0ZSB0aGUgZG9jdW1lbnQncyBzZWxlY3RvciB3aXRoIHRoZQotICAgICAqIGFscmVhZHkgZXhp
c3Rpbmcgc3R5bGUgc2hlZXRzLgotICAgICAqLwotICAgIGlmIChtX2RvYykKLSAgICAgICAgbV9k
b2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LQotU3R5bGVTaGVldExpc3Q6On5TdHlsZVNoZWV0TGlzdCgpCi17Ci0gICAgZm9yICggRGVwcmVj
YXRlZFB0ckxpc3RJdGVyYXRvcjxTdHlsZVNoZWV0PiBpdCAoIHN0eWxlU2hlZXRzICk7IGl0LmN1
cnJlbnQoKTsgKytpdCApCi0gICAgICAgIGl0LmN1cnJlbnQoKS0+ZGVyZWYoKTsKLX0KLQotdm9p
ZCBTdHlsZVNoZWV0TGlzdDo6YWRkKCBTdHlsZVNoZWV0KiBzICkKLXsKLSAgICBpZiAoICFzdHls
ZVNoZWV0cy5jb250YWluc1JlZiggcyApICkgewotICAgICAgICBzLT5yZWYoKTsKLSAgICAgICAg
c3R5bGVTaGVldHMuYXBwZW5kKCBzICk7Ci0gICAgfQotfQotCi12b2lkIFN0eWxlU2hlZXRMaXN0
OjpyZW1vdmUoIFN0eWxlU2hlZXQqIHMgKQotewotICAgIGlmICggc3R5bGVTaGVldHMucmVtb3Zl
UmVmKCBzICkgKQotICAgICAgICBzLT5kZXJlZigpOwotfQotCi11bnNpZ25lZCBTdHlsZVNoZWV0
TGlzdDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICAvLyBoYWNrIHNvIGltcGxpY2l0IEJPRFkgc3R5
bGVzaGVldHMgZG9uJ3QgZ2V0IGNvdW50ZWQgaGVyZQotICAgIHVuc2lnbmVkIGwgPSAwOwotICAg
IERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVTaGVldD4gaXQoc3R5bGVTaGVldHMpOwot
ICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCFpdC5jdXJyZW50
KCktPmlzQ1NTU3R5bGVTaGVldCgpIHx8ICFzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oaXQu
Y3VycmVudCgpKS0+aW1wbGljaXQoKSkKLSAgICAgICAgICAgIGwrKzsKLSAgICB9Ci0gICAgcmV0
dXJuIGw7Ci19Ci0KLVN0eWxlU2hlZXQgKlN0eWxlU2hlZXRMaXN0OjppdGVtICggdW5zaWduZWQg
aW5kZXggKQorTWVkaWFMaXN0OjpNZWRpYUxpc3QoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQp
CisgICAgOiBTdHlsZUJhc2UocGFyZW50U2hlZXQpCiB7Ci0gICAgdW5zaWduZWQgbCA9IDA7Ci0g
ICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxTdHlsZVNoZWV0PiBpdChzdHlsZVNoZWV0cyk7
Ci0gICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkgewotICAgICAgICBpZiAoIWl0LmN1cnJl
bnQoKS0+aXNDU1NTdHlsZVNoZWV0KCkgfHwgIXN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihp
dC5jdXJyZW50KCkpLT5pbXBsaWNpdCgpKSB7Ci0gICAgICAgICAgICBpZiAobCA9PSBpbmRleCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gaXQuY3VycmVudCgpOwotICAgICAgICAgICAgbCsrOwog
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1NZWRpYUxpc3Q6Ok1lZGlhTGlzdCggQ1NTU3R5bGVTaGVl
dCAqcGFyZW50U2hlZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcgJm1lZGlhICkKK01lZGlhTGlzdDo6TWVkaWFMaXN0KENTU1N0eWxlU2hlZXQqIHBhcmVudFNo
ZWV0LCBjb25zdCBTdHJpbmcmIG1lZGlhKQogICAgIDogU3R5bGVCYXNlKCBwYXJlbnRTaGVldCAp
CiB7CiAgICAgc2V0TWVkaWFUZXh0KCBtZWRpYSApOwpAQCAtMjk4LDggKzQ3LDcgQEAKIAogYm9v
bCBNZWRpYUxpc3Q6OmNvbnRhaW5zKCBjb25zdCBTdHJpbmcgJm1lZGl1bSApIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fbHN0TWVkaWEuY291bnQoKSA9PSAwIHx8IG1fbHN0TWVkaWEuY29udGFpbnMo
IG1lZGl1bSApIHx8Ci0gICAgICAgICAgICBtX2xzdE1lZGlhLmNvbnRhaW5zKCAiYWxsIiApOwor
ICAgIHJldHVybiBtX2xzdE1lZGlhLmNvdW50KCkgPT0gMCB8fCBtX2xzdE1lZGlhLmNvbnRhaW5z
KG1lZGl1bSkgfHwgbV9sc3RNZWRpYS5jb250YWlucygiYWxsIik7CiB9CiAKIENTU1N0eWxlU2hl
ZXQgKk1lZGlhTGlzdDo6cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0CkluZGV4OiBjc3MvY3NzX3N0
eWxlc2hlZXRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCShy
ZXZpc2lvbiAxNDM4MikKKysrIGNzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00g
aW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAq
LwotCi0jaWZuZGVmIENTU19jc3Nfc3R5bGVzaGVldGltcGxfaF8KLSNkZWZpbmUgQ1NTX2Nzc19z
dHlsZXNoZWV0aW1wbF9oXwotCi0jaW5jbHVkZSAiY3NzX2Jhc2UuaCIKLSNpbmNsdWRlICJEZXBy
ZWNhdGVkUHRyTGlzdC5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3QuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NQYXJzZXI7Ci1jbGFzcyBDU1NSdWxlOwotY2xh
c3MgQ1NTUnVsZUxpc3Q7Ci1jbGFzcyBDU1NTdHlsZVJ1bGU7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0
OwotY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwotY2xhc3MgRG9j
TG9hZGVyOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBNZWRpYUxpc3Q7Ci1jbGFzcyBOb2RlOwot
Y2xhc3MgU3R5bGVTaGVldDsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3Mg
U3R5bGVTaGVldCA6IHB1YmxpYyBTdHlsZUxpc3QgewotcHVibGljOgotICAgIFN0eWxlU2hlZXQo
Tm9kZSAqb3duZXJOb2RlLCBTdHJpbmcgaHJlZiA9IFN0cmluZygpKTsKLSAgICBTdHlsZVNoZWV0
KFN0eWxlU2hlZXQgKnBhcmVudFNoZWV0LCBTdHJpbmcgaHJlZiA9IFN0cmluZygpKTsKLSAgICBT
dHlsZVNoZWV0KFN0eWxlQmFzZSAqb3duZXIsIFN0cmluZyBocmVmID0gU3RyaW5nKCkpOwotICAg
IFN0eWxlU2hlZXQoQ2FjaGVkQ1NTU3R5bGVTaGVldCAqY2FjaGVkLCBTdHJpbmcgaHJlZiA9IFN0
cmluZygpKTsKLSAgICB2aXJ0dWFsIH5TdHlsZVNoZWV0KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBTdHJp
bmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Ci0KLSAgICBib29sIGRpc2FibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQotICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9v
bCBkaXNhYmxlZCkgeyBtX2Rpc2FibGVkID0gZGlzYWJsZWQ7IHN0eWxlU2hlZXRDaGFuZ2VkKCk7
IH0KLQotICAgIE5vZGUgKm93bmVyTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsg
fQotICAgIFN0eWxlU2hlZXQgKnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdDsKLSAgICBTdHJpbmcg
aHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fc3RySHJlZjsgfQotICAgIFN0cmluZyB0aXRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyVGl0bGU7IH0KLSAgICBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gbV9tZWRpYS5nZXQoKTsgfQotICAgIHZvaWQgc2V0TWVkaWEoTWVkaWFMaXN0Kik7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgpIHsgfQotICAgIAotcHJvdGVjdGVkOgot
ICAgIE5vZGUgKm1fcGFyZW50Tm9kZTsKLSAgICBTdHJpbmcgbV9zdHJIcmVmOwotICAgIFN0cmlu
ZyBtX3N0clRpdGxlOwotICAgIFJlZlB0cjxNZWRpYUxpc3Q+IG1fbWVkaWE7Ci0gICAgYm9vbCBt
X2Rpc2FibGVkOwotfTsKLQotY2xhc3MgQ1NTU3R5bGVTaGVldCA6IHB1YmxpYyBTdHlsZVNoZWV0
Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTU3R5bGVTaGVldChOb2RlICpwYXJlbnROb2RlLCBTdHJpbmcg
aHJlZiA9IFN0cmluZygpLCBib29sIF9pbXBsaWNpdCA9IGZhbHNlKTsKLSAgICBDU1NTdHlsZVNo
ZWV0KENTU1N0eWxlU2hlZXQgKnBhcmVudFNoZWV0LCBTdHJpbmcgaHJlZiA9IFN0cmluZygpKTsK
LSAgICBDU1NTdHlsZVNoZWV0KENTU1J1bGUgKm93bmVyUnVsZSwgU3RyaW5nIGhyZWYgPSBTdHJp
bmcoKSk7Ci0gICAgCi0gICAgfkNTU1N0eWxlU2hlZXQoKSB7IGRlbGV0ZSBtX25hbWVzcGFjZXM7
IH0KLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICJ0
ZXh0L2NzcyI7IH0KLQotICAgIENTU1J1bGUgKm93bmVyUnVsZSgpIGNvbnN0OwotICAgIENTU1J1
bGVMaXN0ICpjc3NSdWxlcygpOwotICAgIHVuc2lnbmVkIGluc2VydFJ1bGUoY29uc3QgU3RyaW5n
ICZydWxlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGVsZXRl
UnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVuc2lnbmVkIGFkZFJ1
bGUoY29uc3QgU3RyaW5nICZzZWxlY3RvciwgY29uc3QgU3RyaW5nICZzdHlsZSwgaW50IGluZGV4
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCByZW1vdmVSdWxlKHVuc2lnbmVkIGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykgeyBkZWxldGVSdWxlKGluZGV4LCBlYyk7IH0KLSAgICAKLSAgICB2
b2lkIGFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBkZXRl
cm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwotICAgIAotICAgIHZp
cnR1YWwgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgpOwotCi0gICAgdmlydHVhbCBib29sIHBhcnNl
U3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNMb2FkaW5nKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQoKTsKLSAg
ICBEb2NMb2FkZXIqIGRvY0xvYWRlcigpOwotICAgIERvY3VtZW50KiBkb2MoKSB7IHJldHVybiBt
X2RvYzsgfQotICAgIGJvb2wgaW1wbGljaXQoKSB7IHJldHVybiBtX2ltcGxpY2l0OyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBEb2N1bWVudCogbV9kb2M7Ci0gICAgYm9vbCBtX2ltcGxpY2l0OwotICAg
IENTU05hbWVzcGFjZSogbV9uYW1lc3BhY2VzOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1jbGFzcyBTdHlsZVNoZWV0TGlzdCA6IHB1YmxpYyBTaGFyZWQ8U3R5bGVTaGVldExpc3Q+
Ci17Ci1wdWJsaWM6Ci0gICAgflN0eWxlU2hlZXRMaXN0KCk7Ci0KLSAgICAvLyB0aGUgZm9sbG93
aW5nIHR3byBpZ25vcmUgaW1wbGljaXQgc3R5bGVzaGVldHMKLSAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKLSAgICBTdHlsZVNoZWV0KiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKLQotICAgIHZv
aWQgYWRkKFN0eWxlU2hlZXQqIHMpOwotICAgIHZvaWQgcmVtb3ZlKFN0eWxlU2hlZXQqIHMpOwot
Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8U3R5bGVTaGVldD4gc3R5bGVTaGVldHM7Ci19OwotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIE1lZGlhTGlzdCA6IHB1YmxpYyBTdHlsZUJh
c2UKLXsKLXB1YmxpYzoKLSAgICBNZWRpYUxpc3QoKSA6IFN0eWxlQmFzZSgwKSB7fQotICAgIE1l
ZGlhTGlzdChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCkgOiBTdHlsZUJhc2UocGFyZW50U2hl
ZXQpIHt9Ci0gICAgTWVkaWFMaXN0KENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0LCBjb25zdCBT
dHJpbmcmIG1lZGlhKTsKLSAgICBNZWRpYUxpc3QoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3Qg
U3RyaW5nJiBtZWRpYSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUxpc3QoKSB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7
Ci0gICAgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuY291bnQoKTsgfQotICAgIFN0cmluZyBpdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlhW2luZGV4XTsgfQotICAgIHZv
aWQgZGVsZXRlTWVkaXVtKGNvbnN0IFN0cmluZyYgb2xkTWVkaXVtKTsKLSAgICB2b2lkIGFwcGVu
ZE1lZGl1bShjb25zdCBTdHJpbmcmIG5ld01lZGl1bSkgeyBtX2xzdE1lZGlhLmFwcGVuZChuZXdN
ZWRpdW0pOyB9Ci0KLSAgICBTdHJpbmcgbWVkaWFUZXh0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRN
ZWRpYVRleHQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGUg
bGlzdCBjb250YWlucyBlaXRoZXIgdGhlIHJlcXVlc3RlZCBtZWRpdW0sIG9yIHRoZQotICAgICAq
IGNhdGNoLWFsbCAiYWxsIiBtZWRpYSB0eXBlLiBSZXR1cm5zIHRydWUgd2hlbiBmb3VuZCwgZmFs
c2Ugb3RoZXJ3aXNlLgotICAgICAqIFNpbmNlIG5vdCBzcGVjaWZ5aW5nIG1lZGlhIHR5cGVzIHNo
b3VsZCBiZSB0cmVhdGVkIGFzICJhbGwiIGFjY29yZGluZwotICAgICAqIHRvIERPTSBzcGVjcywg
YW4gZW1wdHkgbGlzdCBhbHdheXMgcmV0dXJucyB0cnVlLgotICAgICAqCi0gICAgICogX05PVF8g
cGFydCBvZiB0aGUgRE9NIQotICAgICAqLwotICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5n
JiBtZWRpdW0pIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxT
dHJpbmc+IG1fbHN0TWVkaWE7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi0jZW5kaWYKSW5kZXg6
IGNzcy9TdHlsZVNoZWV0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9TdHlsZVNoZWV0TGlzdC5o
CShyZXZpc2lvbiAxNDM4MikKKysrIGNzcy9TdHlsZVNoZWV0TGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMCwxMDYgKzIwLDE2IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAq
LwogCi0jaWZuZGVmIENTU19jc3Nfc3R5bGVzaGVldGltcGxfaF8KLSNkZWZpbmUgQ1NTX2Nzc19z
dHlsZXNoZWV0aW1wbF9oXworI2lmbmRlZiBTdHlsZVNoZWV0TGlzdF9ICisjZGVmaW5lIFN0eWxl
U2hlZXRMaXN0X0gKIAotI2luY2x1ZGUgImNzc19iYXNlLmgiCisjaW5jbHVkZSAiU2hhcmVkLmgi
CiAjaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkVmFs
dWVMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTUGFyc2VyOwotY2xh
c3MgQ1NTUnVsZTsKLWNsYXNzIENTU1J1bGVMaXN0OwotY2xhc3MgQ1NTU3R5bGVSdWxlOwotY2xh
c3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU1ZhbHVlOwotY2xhc3MgQ2FjaGVkQ1NTU3R5bGVT
aGVldDsKLWNsYXNzIERvY0xvYWRlcjsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgTWVkaWFMaXN0
OwotY2xhc3MgTm9kZTsKIGNsYXNzIFN0eWxlU2hlZXQ7CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7Ci0KLWNsYXNzIFN0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVMaXN0IHsKLXB1YmxpYzoK
LSAgICBTdHlsZVNoZWV0KE5vZGUgKm93bmVyTm9kZSwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7
Ci0gICAgU3R5bGVTaGVldChTdHlsZVNoZWV0ICpwYXJlbnRTaGVldCwgU3RyaW5nIGhyZWYgPSBT
dHJpbmcoKSk7Ci0gICAgU3R5bGVTaGVldChTdHlsZUJhc2UgKm93bmVyLCBTdHJpbmcgaHJlZiA9
IFN0cmluZygpKTsKLSAgICBTdHlsZVNoZWV0KENhY2hlZENTU1N0eWxlU2hlZXQgKmNhY2hlZCwg
U3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7Ci0gICAgdmlydHVhbCB+U3R5bGVTaGVldCgpOwotCi0g
ICAgdmlydHVhbCBib29sIGlzU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotCi0g
ICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KLSAgICB2b2lk
IHNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpIHsgbV9kaXNhYmxlZCA9IGRpc2FibGVkOyBzdHls
ZVNoZWV0Q2hhbmdlZCgpOyB9Ci0KLSAgICBOb2RlICpvd25lck5vZGUoKSBjb25zdCB7IHJldHVy
biBtX3BhcmVudE5vZGU7IH0KLSAgICBTdHlsZVNoZWV0ICpwYXJlbnRTdHlsZVNoZWV0KCkgY29u
c3Q7Ci0gICAgU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX3N0ckhyZWY7IH0KLSAgICBT
dHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3N0clRpdGxlOyB9Ci0gICAgTWVkaWFMaXN0
KiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWEuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1l
ZGlhKE1lZGlhTGlzdCopOwotCi0gICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoKSB7IH0KLSAg
ICAKLXByb3RlY3RlZDoKLSAgICBOb2RlICptX3BhcmVudE5vZGU7Ci0gICAgU3RyaW5nIG1fc3Ry
SHJlZjsKLSAgICBTdHJpbmcgbV9zdHJUaXRsZTsKLSAgICBSZWZQdHI8TWVkaWFMaXN0PiBtX21l
ZGlhOwotICAgIGJvb2wgbV9kaXNhYmxlZDsKLX07Ci0KLWNsYXNzIENTU1N0eWxlU2hlZXQgOiBw
dWJsaWMgU3R5bGVTaGVldAotewotcHVibGljOgotICAgIENTU1N0eWxlU2hlZXQoTm9kZSAqcGFy
ZW50Tm9kZSwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSwgYm9vbCBfaW1wbGljaXQgPSBmYWxzZSk7
Ci0gICAgQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0ICpwYXJlbnRTaGVldCwgU3RyaW5nIGhy
ZWYgPSBTdHJpbmcoKSk7Ci0gICAgQ1NTU3R5bGVTaGVldChDU1NSdWxlICpvd25lclJ1bGUsIFN0
cmluZyBocmVmID0gU3RyaW5nKCkpOwotICAgIAotICAgIH5DU1NTdHlsZVNoZWV0KCkgeyBkZWxl
dGUgbV9uYW1lc3BhY2VzOyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVl
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBj
b25zdCB7IHJldHVybiAidGV4dC9jc3MiOyB9Ci0KLSAgICBDU1NSdWxlICpvd25lclJ1bGUoKSBj
b25zdDsKLSAgICBDU1NSdWxlTGlzdCAqY3NzUnVsZXMoKTsKLSAgICB1bnNpZ25lZCBpbnNlcnRS
dWxlKGNvbnN0IFN0cmluZyAmcnVsZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIGRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB1bnNpZ25lZCBhZGRSdWxlKGNvbnN0IFN0cmluZyAmc2VsZWN0b3IsIGNvbnN0IFN0cmluZyAm
c3R5bGUsIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVtb3ZlUnVsZSh1
bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgZGVsZXRlUnVsZShpbmRleCwgZWMp
OyB9Ci0gICAgCi0gICAgdm9pZCBhZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpOwotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmLCBib29sIHN0cmljdCA9IHRydWUp
OwotCi0gICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpOwotCi0gICAgdmlydHVhbCB2b2lkIGNo
ZWNrTG9hZGVkKCk7Ci0gICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIoKTsKLSAgICBEb2N1bWVudCog
ZG9jKCkgeyByZXR1cm4gbV9kb2M7IH0KLSAgICBib29sIGltcGxpY2l0KCkgeyByZXR1cm4gbV9p
bXBsaWNpdDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRG9jdW1lbnQqIG1fZG9jOwotICAgIGJvb2wg
bV9pbXBsaWNpdDsKLSAgICBDU1NOYW1lc3BhY2UqIG1fbmFtZXNwYWNlczsKLX07Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQogY2xhc3MgU3R5bGVTaGVldExpc3QgOiBwdWJsaWMgU2hhcmVk
PFN0eWxlU2hlZXRMaXN0PgogewogcHVibGljOgpAQCAtMTI5LDQ4ICszOSwxMiBAQAogICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIFN0eWxlU2hlZXQqIGl0ZW0odW5zaWduZWQgaW5k
ZXgpOwogCi0gICAgdm9pZCBhZGQoU3R5bGVTaGVldCogcyk7Ci0gICAgdm9pZCByZW1vdmUoU3R5
bGVTaGVldCogcyk7CisgICAgdm9pZCBhZGQoU3R5bGVTaGVldCopOworICAgIHZvaWQgcmVtb3Zl
KFN0eWxlU2hlZXQqKTsKIAogICAgIERlcHJlY2F0ZWRQdHJMaXN0PFN0eWxlU2hlZXQ+IHN0eWxl
U2hlZXRzOwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUxpc3Qg
OiBwdWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAgTWVkaWFMaXN0KCkgOiBTdHlsZUJh
c2UoMCkge30KLSAgICBNZWRpYUxpc3QoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQpIDogU3R5
bGVCYXNlKHBhcmVudFNoZWV0KSB7fQotICAgIE1lZGlhTGlzdChDU1NTdHlsZVNoZWV0KiBwYXJl
bnRTaGVldCwgY29uc3QgU3RyaW5nJiBtZWRpYSk7Ci0gICAgTWVkaWFMaXN0KENTU1J1bGUqIHBh
cmVudFJ1bGUsIGNvbnN0IFN0cmluZyYgbWVkaWEpOwotCi0gICAgdmlydHVhbCBib29sIGlzTWVk
aWFMaXN0KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5
bGVTaGVldCgpIGNvbnN0OwotICAgIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdDsKLSAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlhLmNvdW50KCk7IH0KLSAg
ICBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9sc3RNZWRpYVtp
bmRleF07IH0KLSAgICB2b2lkIGRlbGV0ZU1lZGl1bShjb25zdCBTdHJpbmcmIG9sZE1lZGl1bSk7
Ci0gICAgdm9pZCBhcHBlbmRNZWRpdW0oY29uc3QgU3RyaW5nJiBuZXdNZWRpdW0pIHsgbV9sc3RN
ZWRpYS5hcHBlbmQobmV3TWVkaXVtKTsgfQotCi0gICAgU3RyaW5nIG1lZGlhVGV4dCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0TWVkaWFUZXh0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgLyoqCi0gICAg
ICogQ2hlY2sgaWYgdGhlIGxpc3QgY29udGFpbnMgZWl0aGVyIHRoZSByZXF1ZXN0ZWQgbWVkaXVt
LCBvciB0aGUKLSAgICAgKiBjYXRjaC1hbGwgImFsbCIgbWVkaWEgdHlwZS4gUmV0dXJucyB0cnVl
IHdoZW4gZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICAgKiBTaW5jZSBub3Qgc3BlY2lmeWlu
ZyBtZWRpYSB0eXBlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyAiYWxsIiBhY2NvcmRpbmcKLSAgICAg
KiB0byBET00gc3BlY3MsIGFuIGVtcHR5IGxpc3QgYWx3YXlzIHJldHVybnMgdHJ1ZS4KLSAgICAg
KgotICAgICAqIF9OT1RfIHBhcnQgb2YgdGhlIERPTSEKLSAgICAgKi8KLSAgICBib29sIGNvbnRh
aW5zKGNvbnN0IFN0cmluZyYgbWVkaXVtKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3Q8U3RyaW5nPiBtX2xzdE1lZGlhOwotfTsKLQogfSAvLyBuYW1lc3BhY2UK
IAogI2VuZGlmCkluZGV4OiBjc3MvU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9TdHls
ZVNoZWV0LmgJKHJldmlzaW9uIDE0MzgyKQorKysgY3NzL1N0eWxlU2hlZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjAsMzYgKzIwLDIyIEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
ICAqLwogCi0jaWZuZGVmIENTU19jc3Nfc3R5bGVzaGVldGltcGxfaF8KLSNkZWZpbmUgQ1NTX2Nz
c19zdHlsZXNoZWV0aW1wbF9oXworI2lmbmRlZiBTdHlsZVNoZWV0X0gKKyNkZWZpbmUgU3R5bGVT
aGVldF9ICiAKICNpbmNsdWRlICJjc3NfYmFzZS5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJM
aXN0LmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIENTU1BhcnNlcjsKLWNsYXNzIENTU1J1bGU7Ci1jbGFzcyBDU1NSdWxl
TGlzdDsKLWNsYXNzIENTU1N0eWxlUnVsZTsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBD
U1NWYWx1ZTsKLWNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBEb2NMb2FkZXI7Ci1j
bGFzcyBEb2N1bWVudDsKLWNsYXNzIE1lZGlhTGlzdDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBTdHls
ZVNoZWV0OwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworY2xhc3MgQ2FjaGVkQ1NTU3R5
bGVTaGVldDsKIAogY2xhc3MgU3R5bGVTaGVldCA6IHB1YmxpYyBTdHlsZUxpc3QgewogcHVibGlj
OgogICAgIFN0eWxlU2hlZXQoTm9kZSAqb3duZXJOb2RlLCBTdHJpbmcgaHJlZiA9IFN0cmluZygp
KTsKICAgICBTdHlsZVNoZWV0KFN0eWxlU2hlZXQgKnBhcmVudFNoZWV0LCBTdHJpbmcgaHJlZiA9
IFN0cmluZygpKTsKICAgICBTdHlsZVNoZWV0KFN0eWxlQmFzZSAqb3duZXIsIFN0cmluZyBocmVm
ID0gU3RyaW5nKCkpOwotICAgIFN0eWxlU2hlZXQoQ2FjaGVkQ1NTU3R5bGVTaGVldCAqY2FjaGVk
LCBTdHJpbmcgaHJlZiA9IFN0cmluZygpKTsKKyAgICBTdHlsZVNoZWV0KENhY2hlZENTU1N0eWxl
U2hlZXQqLCBTdHJpbmcgaHJlZiA9IFN0cmluZygpKTsKICAgICB2aXJ0dWFsIH5TdHlsZVNoZWV0
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQpAQCAtNzgsOTkgKzY0LDYgQEAKICAgICBib29sIG1fZGlzYWJsZWQ7CiB9OwogCi1jbGFz
cyBDU1NTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hlZXQKLXsKLXB1YmxpYzoKLSAgICBDU1NT
dHlsZVNoZWV0KE5vZGUgKnBhcmVudE5vZGUsIFN0cmluZyBocmVmID0gU3RyaW5nKCksIGJvb2wg
X2ltcGxpY2l0ID0gZmFsc2UpOwotICAgIENTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCAqcGFy
ZW50U2hlZXQsIFN0cmluZyBocmVmID0gU3RyaW5nKCkpOwotICAgIENTU1N0eWxlU2hlZXQoQ1NT
UnVsZSAqb3duZXJSdWxlLCBTdHJpbmcgaHJlZiA9IFN0cmluZygpKTsKLSAgICAKLSAgICB+Q1NT
U3R5bGVTaGVldCgpIHsgZGVsZXRlIG1fbmFtZXNwYWNlczsgfQotICAgIAotICAgIHZpcnR1YWwg
Ym9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0
dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsgfQotCi0gICAgQ1NT
UnVsZSAqb3duZXJSdWxlKCkgY29uc3Q7Ci0gICAgQ1NTUnVsZUxpc3QgKmNzc1J1bGVzKCk7Ci0g
ICAgdW5zaWduZWQgaW5zZXJ0UnVsZShjb25zdCBTdHJpbmcgJnJ1bGUsIHVuc2lnbmVkIGluZGV4
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4LCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdW5zaWduZWQgYWRkUnVsZShjb25zdCBTdHJpbmcgJnNlbGVj
dG9yLCBjb25zdCBTdHJpbmcgJnN0eWxlLCBpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHJlbW92ZVJ1bGUodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGRl
bGV0ZVJ1bGUoaW5kZXgsIGVjKTsgfQotICAgIAotICAgIHZvaWQgYWRkTmFtZXNwYWNlKENTU1Bh
cnNlciogcCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYg
dXJpKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRldGVybWluZU5hbWVzcGFjZShjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHN0eWxlU2hlZXRD
aGFuZ2VkKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwg
Ym9vbCBzdHJpY3QgPSB0cnVlKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBjaGVja0xvYWRlZCgpOwotICAgIERvY0xvYWRlciogZG9jTG9hZGVy
KCk7Ci0gICAgRG9jdW1lbnQqIGRvYygpIHsgcmV0dXJuIG1fZG9jOyB9Ci0gICAgYm9vbCBpbXBs
aWNpdCgpIHsgcmV0dXJuIG1faW1wbGljaXQ7IH0KLQotcHJvdGVjdGVkOgotICAgIERvY3VtZW50
KiBtX2RvYzsKLSAgICBib29sIG1faW1wbGljaXQ7Ci0gICAgQ1NTTmFtZXNwYWNlKiBtX25hbWVz
cGFjZXM7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIFN0eWxlU2hlZXRM
aXN0IDogcHVibGljIFNoYXJlZDxTdHlsZVNoZWV0TGlzdD4KLXsKLXB1YmxpYzoKLSAgICB+U3R5
bGVTaGVldExpc3QoKTsKLQotICAgIC8vIHRoZSBmb2xsb3dpbmcgdHdvIGlnbm9yZSBpbXBsaWNp
dCBzdHlsZXNoZWV0cwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIFN0eWxlU2hl
ZXQqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwotCi0gICAgdm9pZCBhZGQoU3R5bGVTaGVldCogcyk7
Ci0gICAgdm9pZCByZW1vdmUoU3R5bGVTaGVldCogcyk7Ci0KLSAgICBEZXByZWNhdGVkUHRyTGlz
dDxTdHlsZVNoZWV0PiBzdHlsZVNoZWV0czsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgTWVkaWFMaXN0IDogcHVibGljIFN0eWxlQmFzZQotewotcHVibGljOgotICAgIE1l
ZGlhTGlzdCgpIDogU3R5bGVCYXNlKDApIHt9Ci0gICAgTWVkaWFMaXN0KENTU1N0eWxlU2hlZXQq
IHBhcmVudFNoZWV0KSA6IFN0eWxlQmFzZShwYXJlbnRTaGVldCkge30KLSAgICBNZWRpYUxpc3Qo
Q1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQsIGNvbnN0IFN0cmluZyYgbWVkaWEpOwotICAgIE1l
ZGlhTGlzdChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBTdHJpbmcmIG1lZGlhKTsKLQotICAg
IHZpcnR1YWwgYm9vbCBpc01lZGlhTGlzdCgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIENTU1N0
eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdDsKLSAgICBDU1NSdWxlKiBwYXJlbnRS
dWxlKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sc3RN
ZWRpYS5jb3VudCgpOyB9Ci0gICAgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fbHN0TWVkaWFbaW5kZXhdOyB9Ci0gICAgdm9pZCBkZWxldGVNZWRpdW0oY29uc3Qg
U3RyaW5nJiBvbGRNZWRpdW0pOwotICAgIHZvaWQgYXBwZW5kTWVkaXVtKGNvbnN0IFN0cmluZyYg
bmV3TWVkaXVtKSB7IG1fbHN0TWVkaWEuYXBwZW5kKG5ld01lZGl1bSk7IH0KLQotICAgIFN0cmlu
ZyBtZWRpYVRleHQoKSBjb25zdDsKLSAgICB2b2lkIHNldE1lZGlhVGV4dChjb25zdCBTdHJpbmcm
KTsKLQotICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoZSBsaXN0IGNvbnRhaW5zIGVpdGhlciB0
aGUgcmVxdWVzdGVkIG1lZGl1bSwgb3IgdGhlCi0gICAgICogY2F0Y2gtYWxsICJhbGwiIG1lZGlh
IHR5cGUuIFJldHVybnMgdHJ1ZSB3aGVuIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuCi0gICAgICog
U2luY2Ugbm90IHNwZWNpZnlpbmcgbWVkaWEgdHlwZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgImFs
bCIgYWNjb3JkaW5nCi0gICAgICogdG8gRE9NIHNwZWNzLCBhbiBlbXB0eSBsaXN0IGFsd2F5cyBy
ZXR1cm5zIHRydWUuCi0gICAgICoKLSAgICAgKiBfTk9UXyBwYXJ0IG9mIHRoZSBET00hCi0gICAg
ICovCi0gICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIG1lZGl1bSkgY29uc3Q7Ci0KLXBy
b3RlY3RlZDoKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PFN0cmluZz4gbV9sc3RNZWRpYTsKLX07
Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogY3NzL0NTU1N0eWxlU2hlZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBjc3MvQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxNDM4MikKKysrIGNz
cy9DU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDY0ICsyMCwxOSBAQAogICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBDU1NfY3NzX3N0eWxl
c2hlZXRpbXBsX2hfCi0jZGVmaW5lIENTU19jc3Nfc3R5bGVzaGVldGltcGxfaF8KKyNpZm5kZWYg
Q1NTU3R5bGVTaGVldF9ICisjZGVmaW5lIENTU1N0eWxlU2hlZXRfSAogCi0jaW5jbHVkZSAiY3Nz
X2Jhc2UuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgotI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ1NTUGFyc2VyOwotY2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1J1
bGVMaXN0OwotY2xhc3MgQ1NTU3R5bGVSdWxlOwotY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNz
IENTU1ZhbHVlOwotY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNsYXNzIERvY0xvYWRlcjsK
LWNsYXNzIERvY3VtZW50OwotY2xhc3MgTWVkaWFMaXN0OwotY2xhc3MgTm9kZTsKLWNsYXNzIFN0
eWxlU2hlZXQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIFN0eWxlU2hl
ZXQgOiBwdWJsaWMgU3R5bGVMaXN0IHsKLXB1YmxpYzoKLSAgICBTdHlsZVNoZWV0KE5vZGUgKm93
bmVyTm9kZSwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7Ci0gICAgU3R5bGVTaGVldChTdHlsZVNo
ZWV0ICpwYXJlbnRTaGVldCwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7Ci0gICAgU3R5bGVTaGVl
dChTdHlsZUJhc2UgKm93bmVyLCBTdHJpbmcgaHJlZiA9IFN0cmluZygpKTsKLSAgICBTdHlsZVNo
ZWV0KENhY2hlZENTU1N0eWxlU2hlZXQgKmNhY2hlZCwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7
Ci0gICAgdmlydHVhbCB+U3R5bGVTaGVldCgpOwotCi0gICAgdmlydHVhbCBib29sIGlzU3R5bGVT
aGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUo
KSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KLSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wgZGlzYWJs
ZWQpIHsgbV9kaXNhYmxlZCA9IGRpc2FibGVkOyBzdHlsZVNoZWV0Q2hhbmdlZCgpOyB9Ci0KLSAg
ICBOb2RlICpvd25lck5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudE5vZGU7IH0KLSAgICBT
dHlsZVNoZWV0ICpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7Ci0gICAgU3RyaW5nIGhyZWYoKSBj
b25zdCB7IHJldHVybiBtX3N0ckhyZWY7IH0KLSAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0clRpdGxlOyB9Ci0gICAgTWVkaWFMaXN0KiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVkaWEuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lZGlhKE1lZGlhTGlzdCopOwotCi0gICAg
dmlydHVhbCBib29sIGlzTG9hZGluZygpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc3R5bGVTaGVldENoYW5nZWQoKSB7IH0KLSAgICAKLXByb3RlY3RlZDoKLSAgICBOb2Rl
ICptX3BhcmVudE5vZGU7Ci0gICAgU3RyaW5nIG1fc3RySHJlZjsKLSAgICBTdHJpbmcgbV9zdHJU
aXRsZTsKLSAgICBSZWZQdHI8TWVkaWFMaXN0PiBtX21lZGlhOwotICAgIGJvb2wgbV9kaXNhYmxl
ZDsKLX07Ci0KIGNsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldAogewogcHVi
bGljOgpAQCAtOTgsNyArNTMsNyBAQAogICAgIHVuc2lnbmVkIGFkZFJ1bGUoY29uc3QgU3RyaW5n
ICZzZWxlY3RvciwgY29uc3QgU3RyaW5nICZzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCByZW1vdmVSdWxlKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBl
YykgeyBkZWxldGVSdWxlKGluZGV4LCBlYyk7IH0KICAgICAKLSAgICB2b2lkIGFkZE5hbWVzcGFj
ZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNT
dHJpbmcmIHVyaSk7CisgICAgdm9pZCBhZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiwgY29uc3QgQXRv
bWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKTsKICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZp
eCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CkBAIC0xMTgs
NTkgKzczLDYgQEAKICAgICBDU1NOYW1lc3BhY2UqIG1fbmFtZXNwYWNlczsKIH07CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgU3R5bGVTaGVldExpc3QgOiBwdWJsaWMgU2hhcmVk
PFN0eWxlU2hlZXRMaXN0PgotewotcHVibGljOgotICAgIH5TdHlsZVNoZWV0TGlzdCgpOwotCi0g
ICAgLy8gdGhlIGZvbGxvd2luZyB0d28gaWdub3JlIGltcGxpY2l0IHN0eWxlc2hlZXRzCi0gICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgU3R5bGVTaGVldCogaXRlbSh1bnNpZ25lZCBp
bmRleCk7Ci0KLSAgICB2b2lkIGFkZChTdHlsZVNoZWV0KiBzKTsKLSAgICB2b2lkIHJlbW92ZShT
dHlsZVNoZWV0KiBzKTsKLQotICAgIERlcHJlY2F0ZWRQdHJMaXN0PFN0eWxlU2hlZXQ+IHN0eWxl
U2hlZXRzOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBNZWRpYUxpc3Qg
OiBwdWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAgTWVkaWFMaXN0KCkgOiBTdHlsZUJh
c2UoMCkge30KLSAgICBNZWRpYUxpc3QoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQpIDogU3R5
bGVCYXNlKHBhcmVudFNoZWV0KSB7fQotICAgIE1lZGlhTGlzdChDU1NTdHlsZVNoZWV0KiBwYXJl
bnRTaGVldCwgY29uc3QgU3RyaW5nJiBtZWRpYSk7Ci0gICAgTWVkaWFMaXN0KENTU1J1bGUqIHBh
cmVudFJ1bGUsIGNvbnN0IFN0cmluZyYgbWVkaWEpOwotCi0gICAgdmlydHVhbCBib29sIGlzTWVk
aWFMaXN0KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5
bGVTaGVldCgpIGNvbnN0OwotICAgIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdDsKLSAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlhLmNvdW50KCk7IH0KLSAg
ICBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9sc3RNZWRpYVtp
bmRleF07IH0KLSAgICB2b2lkIGRlbGV0ZU1lZGl1bShjb25zdCBTdHJpbmcmIG9sZE1lZGl1bSk7
Ci0gICAgdm9pZCBhcHBlbmRNZWRpdW0oY29uc3QgU3RyaW5nJiBuZXdNZWRpdW0pIHsgbV9sc3RN
ZWRpYS5hcHBlbmQobmV3TWVkaXVtKTsgfQotCi0gICAgU3RyaW5nIG1lZGlhVGV4dCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0TWVkaWFUZXh0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgLyoqCi0gICAg
ICogQ2hlY2sgaWYgdGhlIGxpc3QgY29udGFpbnMgZWl0aGVyIHRoZSByZXF1ZXN0ZWQgbWVkaXVt
LCBvciB0aGUKLSAgICAgKiBjYXRjaC1hbGwgImFsbCIgbWVkaWEgdHlwZS4gUmV0dXJucyB0cnVl
IHdoZW4gZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICAgKiBTaW5jZSBub3Qgc3BlY2lmeWlu
ZyBtZWRpYSB0eXBlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyAiYWxsIiBhY2NvcmRpbmcKLSAgICAg
KiB0byBET00gc3BlY3MsIGFuIGVtcHR5IGxpc3QgYWx3YXlzIHJldHVybnMgdHJ1ZS4KLSAgICAg
KgotICAgICAqIF9OT1RfIHBhcnQgb2YgdGhlIERPTSEKLSAgICAgKi8KLSAgICBib29sIGNvbnRh
aW5zKGNvbnN0IFN0cmluZyYgbWVkaXVtKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3Q8U3RyaW5nPiBtX2xzdE1lZGlhOwotfTsKLQogfSAvLyBuYW1lc3BhY2UK
IAogI2VuZGlmCkluZGV4OiBjc3MvTWVkaWFMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL01lZGlh
TGlzdC5oCShyZXZpc2lvbiAxNDM4MikKKysrIGNzcy9NZWRpYUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjAsMTI4ICsyMCwyMSBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAg
Ki8KIAotI2lmbmRlZiBDU1NfY3NzX3N0eWxlc2hlZXRpbXBsX2hfCi0jZGVmaW5lIENTU19jc3Nf
c3R5bGVzaGVldGltcGxfaF8KKyNpZm5kZWYgTWVkaWFMaXN0X0gKKyNkZWZpbmUgTWVkaWFMaXN0
X0gKIAogI2luY2x1ZGUgImNzc19iYXNlLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3Qu
aCIKICNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQ1NTUGFyc2VyOwotY2xhc3MgQ1NTUnVsZTsKLWNsYXNzIENTU1J1bGVMaXN0
OwotY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU1Zh
bHVlOwotY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKLWNsYXNzIERvY0xvYWRlcjsKLWNsYXNz
IERvY3VtZW50OwotY2xhc3MgTWVkaWFMaXN0OwotY2xhc3MgTm9kZTsKLWNsYXNzIFN0eWxlU2hl
ZXQ7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIFN0eWxlU2hlZXQgOiBw
dWJsaWMgU3R5bGVMaXN0IHsKLXB1YmxpYzoKLSAgICBTdHlsZVNoZWV0KE5vZGUgKm93bmVyTm9k
ZSwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7Ci0gICAgU3R5bGVTaGVldChTdHlsZVNoZWV0ICpw
YXJlbnRTaGVldCwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7Ci0gICAgU3R5bGVTaGVldChTdHls
ZUJhc2UgKm93bmVyLCBTdHJpbmcgaHJlZiA9IFN0cmluZygpKTsKLSAgICBTdHlsZVNoZWV0KENh
Y2hlZENTU1N0eWxlU2hlZXQgKmNhY2hlZCwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7Ci0gICAg
dmlydHVhbCB+U3R5bGVTaGVldCgpOwotCi0gICAgdmlydHVhbCBib29sIGlzU3R5bGVTaGVldCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25z
dCB7IHJldHVybiBTdHJpbmcoKTsgfQotCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzYWJsZWQ7IH0KLSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpIHsg
bV9kaXNhYmxlZCA9IGRpc2FibGVkOyBzdHlsZVNoZWV0Q2hhbmdlZCgpOyB9Ci0KLSAgICBOb2Rl
ICpvd25lck5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudE5vZGU7IH0KLSAgICBTdHlsZVNo
ZWV0ICpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7Ci0gICAgU3RyaW5nIGhyZWYoKSBjb25zdCB7
IHJldHVybiBtX3N0ckhyZWY7IH0KLSAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0clRpdGxlOyB9Ci0gICAgTWVkaWFMaXN0KiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVk
aWEuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lZGlhKE1lZGlhTGlzdCopOwotCi0gICAgdmlydHVh
bCBib29sIGlzTG9hZGluZygpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVTaGVldENoYW5nZWQoKSB7IH0KLSAgICAKLXByb3RlY3RlZDoKLSAgICBOb2RlICptX3Bh
cmVudE5vZGU7Ci0gICAgU3RyaW5nIG1fc3RySHJlZjsKLSAgICBTdHJpbmcgbV9zdHJUaXRsZTsK
LSAgICBSZWZQdHI8TWVkaWFMaXN0PiBtX21lZGlhOwotICAgIGJvb2wgbV9kaXNhYmxlZDsKLX07
Ci0KLWNsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldAotewotcHVibGljOgot
ICAgIENTU1N0eWxlU2hlZXQoTm9kZSAqcGFyZW50Tm9kZSwgU3RyaW5nIGhyZWYgPSBTdHJpbmco
KSwgYm9vbCBfaW1wbGljaXQgPSBmYWxzZSk7Ci0gICAgQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNo
ZWV0ICpwYXJlbnRTaGVldCwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7Ci0gICAgQ1NTU3R5bGVT
aGVldChDU1NSdWxlICpvd25lclJ1bGUsIFN0cmluZyBocmVmID0gU3RyaW5nKCkpOwotICAgIAot
ICAgIH5DU1NTdHlsZVNoZWV0KCkgeyBkZWxldGUgbV9uYW1lc3BhY2VzOyB9Ci0gICAgCi0gICAg
dmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiAidGV4dC9jc3MiOyB9Ci0K
LSAgICBDU1NSdWxlICpvd25lclJ1bGUoKSBjb25zdDsKLSAgICBDU1NSdWxlTGlzdCAqY3NzUnVs
ZXMoKTsKLSAgICB1bnNpZ25lZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmluZyAmcnVsZSwgdW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRlbGV0ZVJ1bGUodW5zaWduZWQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1bnNpZ25lZCBhZGRSdWxlKGNvbnN0IFN0cmlu
ZyAmc2VsZWN0b3IsIGNvbnN0IFN0cmluZyAmc3R5bGUsIGludCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgcmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgZGVsZXRlUnVsZShpbmRleCwgZWMpOyB9Ci0gICAgCi0gICAgdm9pZCBhZGROYW1lc3Bh
Y2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWlj
U3RyaW5nJiB1cmkpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGV0ZXJtaW5lTmFtZXNwYWNl
KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc3R5
bGVTaGVldENoYW5nZWQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBT
dHJpbmcmLCBib29sIHN0cmljdCA9IHRydWUpOwotCi0gICAgdmlydHVhbCBib29sIGlzTG9hZGlu
ZygpOwotCi0gICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7Ci0gICAgRG9jTG9hZGVyKiBk
b2NMb2FkZXIoKTsKLSAgICBEb2N1bWVudCogZG9jKCkgeyByZXR1cm4gbV9kb2M7IH0KLSAgICBi
b29sIGltcGxpY2l0KCkgeyByZXR1cm4gbV9pbXBsaWNpdDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
RG9jdW1lbnQqIG1fZG9jOwotICAgIGJvb2wgbV9pbXBsaWNpdDsKLSAgICBDU1NOYW1lc3BhY2Uq
IG1fbmFtZXNwYWNlczsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgU3R5
bGVTaGVldExpc3QgOiBwdWJsaWMgU2hhcmVkPFN0eWxlU2hlZXRMaXN0PgotewotcHVibGljOgot
ICAgIH5TdHlsZVNoZWV0TGlzdCgpOwotCi0gICAgLy8gdGhlIGZvbGxvd2luZyB0d28gaWdub3Jl
IGltcGxpY2l0IHN0eWxlc2hlZXRzCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAg
U3R5bGVTaGVldCogaXRlbSh1bnNpZ25lZCBpbmRleCk7Ci0KLSAgICB2b2lkIGFkZChTdHlsZVNo
ZWV0KiBzKTsKLSAgICB2b2lkIHJlbW92ZShTdHlsZVNoZWV0KiBzKTsKLQotICAgIERlcHJlY2F0
ZWRQdHJMaXN0PFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXRzOwotfTsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBjbGFzcyBNZWRpYUxpc3QgOiBwdWJsaWMgU3R5bGVCYXNlCiB7CiBwdWJsaWM6
CiAgICAgTWVkaWFMaXN0KCkgOiBTdHlsZUJhc2UoMCkge30KLSAgICBNZWRpYUxpc3QoQ1NTU3R5
bGVTaGVldCogcGFyZW50U2hlZXQpIDogU3R5bGVCYXNlKHBhcmVudFNoZWV0KSB7fQorICAgIE1l
ZGlhTGlzdChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCk7CiAgICAgTWVkaWFMaXN0KENTU1N0
eWxlU2hlZXQqIHBhcmVudFNoZWV0LCBjb25zdCBTdHJpbmcmIG1lZGlhKTsKICAgICBNZWRpYUxp
c3QoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgU3RyaW5nJiBtZWRpYSk7CiAKSW5kZXg6IGNz
cy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3Nfc3R5bGVzaGVl
dGltcGwuY3BwCShyZXZpc2lvbiAxNDM4MikKKysrIGNzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0NyArMCwwIEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiAoQykgMTk5OS0y
MDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiY3NzX3N0
eWxlc2hlZXRpbXBsLmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJjc3NfcnVsZWltcGwuaCIKLSNpbmNsdWRlICJj
c3NfdmFsdWVpbXBsLmgiCi0jaW5jbHVkZSAiY3NzcGFyc2VyLmgiCi0jaW5jbHVkZSAiSFRNTERv
Y3VtZW50LmgiCi0jaW5jbHVkZSAibG9hZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU3R5bGVTaGVldDo6U3R5bGVTaGVldChTdHls
ZVNoZWV0ICpwYXJlbnRTaGVldCwgU3RyaW5nIGhyZWYpCi0gICAgOiBTdHlsZUxpc3QocGFyZW50
U2hlZXQpCi17Ci0gICAgbV9kaXNhYmxlZCA9IGZhbHNlOwotICAgIG1fcGFyZW50Tm9kZSA9IDA7
Ci0gICAgbV9zdHJIcmVmID0gaHJlZjsKLX0KLQotCi1TdHlsZVNoZWV0OjpTdHlsZVNoZWV0KFdl
YkNvcmU6Ok5vZGUgKnBhcmVudE5vZGUsIFN0cmluZyBocmVmKQotICAgIDogU3R5bGVMaXN0KDAp
Ci17Ci0gICAgbV9wYXJlbnROb2RlID0gcGFyZW50Tm9kZTsKLSAgICBtX2Rpc2FibGVkID0gZmFs
c2U7Ci0gICAgbV9zdHJIcmVmID0gaHJlZjsKLX0KLQotU3R5bGVTaGVldDo6U3R5bGVTaGVldChT
dHlsZUJhc2UgKm93bmVyLCBTdHJpbmcgaHJlZikKLSAgICA6IFN0eWxlTGlzdChvd25lcikKLXsK
LSAgICBtX2Rpc2FibGVkID0gZmFsc2U7Ci0gICAgbV9wYXJlbnROb2RlID0gMDsKLSAgICBtX3N0
ckhyZWYgPSBocmVmOwotfQotCi1TdHlsZVNoZWV0Ojp+U3R5bGVTaGVldCgpCi17Ci0gICAgaWYg
KG1fbWVkaWEpCi0gICAgICAgIG1fbWVkaWEtPnNldFBhcmVudCgwKTsKLX0KLQotU3R5bGVTaGVl
dCAqU3R5bGVTaGVldDo6cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChw
YXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNTdHlsZVNoZWV0KCkpID8gc3RhdGljX2Nhc3Q8U3R5bGVT
aGVldCAqPihwYXJlbnQoKSkgOiAwOwotfQotCi12b2lkIFN0eWxlU2hlZXQ6OnNldE1lZGlhKE1l
ZGlhTGlzdCAqbWVkaWEpCi17Ci0gICAgbV9tZWRpYSA9IG1lZGlhOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0KLUNTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCAq
cGFyZW50U2hlZXQsIFN0cmluZyBocmVmKQotICAgIDogU3R5bGVTaGVldChwYXJlbnRTaGVldCwg
aHJlZikKLXsKLSAgICBtX2RvYyA9IHBhcmVudFNoZWV0ID8gcGFyZW50U2hlZXQtPmRvYygpIDog
MDsKLSAgICBtX2ltcGxpY2l0ID0gZmFsc2U7Ci0gICAgbV9uYW1lc3BhY2VzID0gMDsKLX0KLQot
Q1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChOb2RlICpwYXJlbnROb2RlLCBTdHJpbmcgaHJl
ZiwgYm9vbCBfaW1wbGljaXQpCi0gICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYpCi17
Ci0gICAgbV9kb2MgPSBwYXJlbnROb2RlLT5kb2N1bWVudCgpOwotICAgIG1faW1wbGljaXQgPSBf
aW1wbGljaXQ7IAotICAgIG1fbmFtZXNwYWNlcyA9IDA7Ci19Ci0KLUNTU1N0eWxlU2hlZXQ6OkNT
U1N0eWxlU2hlZXQoQ1NTUnVsZSAqb3duZXJSdWxlLCBTdHJpbmcgaHJlZikKLSAgICA6IFN0eWxl
U2hlZXQob3duZXJSdWxlLCBocmVmKQotewotICAgIG1fZG9jID0gMDsKLSAgICBtX2ltcGxpY2l0
ID0gZmFsc2U7Ci0gICAgbV9uYW1lc3BhY2VzID0gMDsKLX0KLQotQ1NTUnVsZSAqQ1NTU3R5bGVT
aGVldDo6b3duZXJSdWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVu
dCgpLT5pc1J1bGUoKSkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlICo+KHBhcmVudCgpKSA6IDA7Ci19
Ci0KLXVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxl
LCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAg
IGlmIChpbmRleCA+IGxlbmd0aCgpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBDU1NQYXJzZXIgcCh1c2VTdHJpY3RQYXJzaW5n
KCkpOwotICAgIFJlZlB0cjxDU1NSdWxlPiByID0gcC5wYXJzZVJ1bGUodGhpcywgcnVsZSk7Ci0K
LSAgICBpZiAoIXIpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICAvLyAjIyMKLSAgICAvLyBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJh
aXNlZCBpZiB0aGUgcnVsZSBjYW5ub3QgYmUgaW5zZXJ0ZWQgYXQgdGhlIHNwZWNpZmllZCBpbmRl
eCBlLmcuIGlmIGFuCi0gICAgLy9AaW1wb3J0IHJ1bGUgaXMgaW5zZXJ0ZWQgYWZ0ZXIgYSBzdGFu
ZGFyZCBydWxlIHNldCBvciBvdGhlciBhdC1ydWxlLgotICAgIGluc2VydChpbmRleCwgci5yZWxl
YXNlKCkpOwotICAgIAotICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7Ci0gICAgCi0gICAgcmV0dXJu
IGluZGV4OwotfQotCi11bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjphZGRSdWxlKCBjb25zdCBTdHJp
bmcgJnNlbGVjdG9yLCBjb25zdCBTdHJpbmcgJnN0eWxlLCBpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgaW5kZXggPSBsZW5ndGgo
KTsKLSAgICByZXR1cm4gaW5zZXJ0UnVsZShzZWxlY3RvciArICIgeyAiICsgc3R5bGUgKyAiIH0i
LCBpbmRleCwgZWMpOwotfQotCi1DU1NSdWxlTGlzdCAqQ1NTU3R5bGVTaGVldDo6Y3NzUnVsZXMo
KQotewotICAgIHJldHVybiBuZXcgQ1NTUnVsZUxpc3QodGhpcyk7Ci19Ci0KLXZvaWQgQ1NTU3R5
bGVTaGVldDo6ZGVsZXRlUnVsZSggdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZWMgPSAwOwotICAgIHJlbW92ZShp
bmRleCk7Ci0gICAgc3R5bGVTaGVldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNoZWV0
OjphZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwg
Y29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCi17Ci0gICAgaWYgKHVyaS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fbmFtZXNwYWNlcyA9IG5ldyBDU1NOYW1lc3BhY2UocHJlZml4
LCB1cmksIG1fbmFtZXNwYWNlcyk7Ci0gICAgCi0gICAgaWYgKHByZWZpeC5pc0VtcHR5KCkpCi0g
ICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHBhcnNlciBzbyB0aGF0
IHNlbGVjdG9ycyB0aGF0IG9taXQgbmFtZXNwYWNlIGluZm8gd2lsbAotICAgICAgICAvLyBiZSBh
YmxlIHRvIHBpY2sgaXQgdXAgZWFzaWx5LgotICAgICAgICBwLT5kZWZhdWx0TmFtZXNwYWNlID0g
dXJpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIENTU1N0eWxlU2hlZXQ6OmRldGVybWluZU5h
bWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKLXsKLSAgICBpZiAocHJlZml4Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxBdG9tOyAvLyBObyBuYW1lc3BhY2UuIElmIGFu
IGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0Y2ggaXQuCi0g
ICAgZWxzZSBpZiAocHJlZml4ID09IHN0YXJBdG9tKQotICAgICAgICByZXR1cm4gc3RhckF0b207
IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCi0gICAgZWxzZSBpZiAobV9uYW1lc3BhY2Vz
KSB7Ci0gICAgICAgIENTU05hbWVzcGFjZSogbnMgPSBtX25hbWVzcGFjZXMtPm5hbWVzcGFjZUZv
clByZWZpeChwcmVmaXgpOwotICAgICAgICBpZiAobnMpCi0gICAgICAgICAgICByZXR1cm4gbnMt
PnVyaSgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbEF0b207IC8vIEFzc3VtZSB3ZSB3b250IG1h
dGNoIGFueSBuYW1lc3BhY2VzLgotfQotCi1ib29sIENTU1N0eWxlU2hlZXQ6OnBhcnNlU3RyaW5n
KGNvbnN0IFN0cmluZyAmc3RyaW5nLCBib29sIHN0cmljdCkKLXsKLSAgICBzZXRTdHJpY3RQYXJz
aW5nKHN0cmljdCk7Ci0gICAgQ1NTUGFyc2VyIHAoIHN0cmljdCApOwotICAgIHAucGFyc2VTaGVl
dCggdGhpcywgc3RyaW5nICk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVT
aGVldDo6aXNMb2FkaW5nKCkKLXsKLSAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgU3R5bGVCYXNlKiBy
dWxlID0gaXRlbShpKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpICYmIHN0YXRp
Y19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKS0+aXNMb2FkaW5nKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENTU1N0eWxl
U2hlZXQ6OmNoZWNrTG9hZGVkKCkKLXsKLSAgICBpZiAoaXNMb2FkaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAocGFyZW50KCkpCi0gICAgICAgIHBhcmVudCgpLT5jaGVja0xvYWRlZCgp
OwotICAgIGlmIChtX3BhcmVudE5vZGUpCi0gICAgICAgIG1fcGFyZW50Tm9kZS0+c2hlZXRMb2Fk
ZWQoKTsKLX0KLQotV2ViQ29yZTo6RG9jTG9hZGVyICpDU1NTdHlsZVNoZWV0Ojpkb2NMb2FkZXIo
KQotewotICAgIGlmICggIW1fZG9jICkgLy8gZG9jIGlzIDAgZm9yIHRoZSB1c2VyLSBhbmQgZGVm
YXVsdC1zaGVldCEKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyAjIyMgcmVtb3ZlPyAoY2xp
ZW50cyBqdXN0IHVzZSBzaGVldC0+ZG9jKCktPmRvY0xvYWRlcigpKQotICAgIHJldHVybiBtX2Rv
Yy0+ZG9jTG9hZGVyKCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTaGVldDo6c3R5bGVTaGVldENoYW5n
ZWQoKQotewotICAgIC8qIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRvIGRvIGV2ZXJ5dGhpbmcgdXBk
YXRlU3R5bGVTZWxlY3RvciBkb2VzLAotICAgICAqIGJhc2ljYWxseSB3ZSBqdXN0IG5lZWQgdG8g
cmVjcmVhdGUgdGhlIGRvY3VtZW50J3Mgc2VsZWN0b3Igd2l0aCB0aGUKLSAgICAgKiBhbHJlYWR5
IGV4aXN0aW5nIHN0eWxlIHNoZWV0cy4KLSAgICAgKi8KLSAgICBpZiAobV9kb2MpCi0gICAgICAg
IG1fZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0KLVN0eWxlU2hlZXRMaXN0Ojp+U3R5bGVTaGVldExpc3QoKQotewotICAgIGZvciAoIERl
cHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVTaGVldD4gaXQgKCBzdHlsZVNoZWV0cyApOyBp
dC5jdXJyZW50KCk7ICsraXQgKQotICAgICAgICBpdC5jdXJyZW50KCktPmRlcmVmKCk7Ci19Ci0K
LXZvaWQgU3R5bGVTaGVldExpc3Q6OmFkZCggU3R5bGVTaGVldCogcyApCi17Ci0gICAgaWYgKCAh
c3R5bGVTaGVldHMuY29udGFpbnNSZWYoIHMgKSApIHsKLSAgICAgICAgcy0+cmVmKCk7Ci0gICAg
ICAgIHN0eWxlU2hlZXRzLmFwcGVuZCggcyApOwotICAgIH0KLX0KLQotdm9pZCBTdHlsZVNoZWV0
TGlzdDo6cmVtb3ZlKCBTdHlsZVNoZWV0KiBzICkKLXsKLSAgICBpZiAoIHN0eWxlU2hlZXRzLnJl
bW92ZVJlZiggcyApICkKLSAgICAgICAgcy0+ZGVyZWYoKTsKLX0KLQotdW5zaWduZWQgU3R5bGVT
aGVldExpc3Q6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgLy8gaGFjayBzbyBpbXBsaWNpdCBCT0RZ
IHN0eWxlc2hlZXRzIGRvbid0IGdldCBjb3VudGVkIGhlcmUKLSAgICB1bnNpZ25lZCBsID0gMDsK
LSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXQ+IGl0KHN0eWxlU2hlZXRz
KTsKLSAgICBmb3IgKDsgaXQuY3VycmVudCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXQuY3Vy
cmVudCgpLT5pc0NTU1N0eWxlU2hlZXQoKSB8fCAhc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+
KGl0LmN1cnJlbnQoKSktPmltcGxpY2l0KCkpCi0gICAgICAgICAgICBsKys7Ci0gICAgfQotICAg
IHJldHVybiBsOwotfQotCi1TdHlsZVNoZWV0ICpTdHlsZVNoZWV0TGlzdDo6aXRlbSAoIHVuc2ln
bmVkIGluZGV4ICkKLXsKLSAgICB1bnNpZ25lZCBsID0gMDsKLSAgICBEZXByZWNhdGVkUHRyTGlz
dEl0ZXJhdG9yPFN0eWxlU2hlZXQ+IGl0KHN0eWxlU2hlZXRzKTsKLSAgICBmb3IgKDsgaXQuY3Vy
cmVudCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXQuY3VycmVudCgpLT5pc0NTU1N0eWxlU2hl
ZXQoKSB8fCAhc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGl0LmN1cnJlbnQoKSktPmltcGxp
Y2l0KCkpIHsKLSAgICAgICAgICAgIGlmIChsID09IGluZGV4KQotICAgICAgICAgICAgICAgIHJl
dHVybiBpdC5jdXJyZW50KCk7Ci0gICAgICAgICAgICBsKys7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLU1lZGlhTGlzdDo6TWVkaWFMaXN0KCBDU1NTdHlsZVNoZWV0ICpwYXJlbnRTaGVldCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbWVkaWEgKQotICAgIDog
U3R5bGVCYXNlKCBwYXJlbnRTaGVldCApCi17Ci0gICAgc2V0TWVkaWFUZXh0KCBtZWRpYSApOwot
fQotCi1NZWRpYUxpc3Q6Ok1lZGlhTGlzdCggQ1NTUnVsZSAqcGFyZW50UnVsZSwgY29uc3QgU3Ry
aW5nICZtZWRpYSApCi0gICAgOiBTdHlsZUJhc2UocGFyZW50UnVsZSkKLXsKLSAgICBzZXRNZWRp
YVRleHQoIG1lZGlhICk7Ci19Ci0KLWJvb2wgTWVkaWFMaXN0Ojpjb250YWlucyggY29uc3QgU3Ry
aW5nICZtZWRpdW0gKSBjb25zdAotewotICAgIHJldHVybiBtX2xzdE1lZGlhLmNvdW50KCkgPT0g
MCB8fCBtX2xzdE1lZGlhLmNvbnRhaW5zKCBtZWRpdW0gKSB8fAotICAgICAgICAgICAgbV9sc3RN
ZWRpYS5jb250YWlucyggImFsbCIgKTsKLX0KLQotQ1NTU3R5bGVTaGVldCAqTWVkaWFMaXN0Ojpw
YXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFyZW50KCktPmlzQ1NTU3R5
bGVTaGVldCgpID8gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihwYXJlbnQoKSkgOiAwOwot
fQotCi1DU1NSdWxlICpNZWRpYUxpc3Q6OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAgIHJldHVy
biBwYXJlbnQoKS0+aXNSdWxlKCkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlICo+KHBhcmVudCgpKSA6
IDA7Ci19Ci0KLXZvaWQgTWVkaWFMaXN0OjpkZWxldGVNZWRpdW0oIGNvbnN0IFN0cmluZyAmb2xk
TWVkaXVtICkKLXsKLSAgICBmb3IgKCBEZXByZWNhdGVkVmFsdWVMaXN0PFN0cmluZz46Okl0ZXJh
dG9yIGl0ID0gbV9sc3RNZWRpYS5iZWdpbigpOyBpdCAhPSBtX2xzdE1lZGlhLmVuZCgpOyArK2l0
ICkgewotICAgICAgICBpZiAoKCppdCkgPT0gb2xkTWVkaXVtKSB7Ci0gICAgICAgICAgICBtX2xz
dE1lZGlhLnJlbW92ZSggaXQgKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotV2ViQ29yZTo6U3RyaW5nIE1lZGlhTGlzdDo6bWVkaWFUZXh0KCkgY29uc3QKLXsK
LSAgICBTdHJpbmcgdGV4dCA9ICIiOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdDxTdHJp
bmc+OjpDb25zdEl0ZXJhdG9yIGl0ID0gbV9sc3RNZWRpYS5iZWdpbigpOyBpdCAhPSBtX2xzdE1l
ZGlhLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICh0ZXh0Lmxlbmd0aCgpID4gMCkKLSAgICAg
ICAgICAgIHRleHQgKz0gIiwgIjsKLSAgICAgICAgdGV4dCArPSAqaXQ7Ci0gICAgfQotICAgIHJl
dHVybiB0ZXh0OwotfQotCi12b2lkIE1lZGlhTGlzdDo6c2V0TWVkaWFUZXh0KGNvbnN0IFdlYkNv
cmU6OlN0cmluZyAmdmFsdWUpCi17Ci0gICAgbV9sc3RNZWRpYS5jbGVhcigpOwotICAgIERlcHJl
Y2F0ZWRTdHJpbmdMaXN0IGxpc3QgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJywnLCB2
YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIGZvciAoRGVwcmVjYXRlZFN0cmluZ0xpc3Q6
Okl0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBsaXN0LmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgIFN0cmluZyBtZWRpdW0gPSAoKml0KS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAg
aWYgKCFtZWRpdW0uaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9sc3RNZWRpYS5hcHBlbmQobWVk
aXVtKTsKLSAgICB9Ci19Ci0KLX0KSW5kZXg6IGNzcy9TdHlsZVNoZWV0TGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAkocmV2aXNpb24gMTQzODIpCisrKyBjc3Mv
U3R5bGVTaGVldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwyMjIgKzE5LDEzIEBACiAg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCisjaW5jbHVkZSAi
U3R5bGVTaGVldExpc3QuaCIKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgImNzc19ydWxlaW1wbC5oIgotI2luY2x1ZGUg
ImNzc192YWx1ZWltcGwuaCIKLSNpbmNsdWRlICJjc3NwYXJzZXIuaCIKLSNpbmNsdWRlICJIVE1M
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotU3R5bGVTaGVldDo6U3R5bGVTaGVldChTdHlsZVNoZWV0ICpwYXJlbnRTaGVldCwgU3RyaW5n
IGhyZWYpCi0gICAgOiBTdHlsZUxpc3QocGFyZW50U2hlZXQpCi17Ci0gICAgbV9kaXNhYmxlZCA9
IGZhbHNlOwotICAgIG1fcGFyZW50Tm9kZSA9IDA7Ci0gICAgbV9zdHJIcmVmID0gaHJlZjsKLX0K
LQotCi1TdHlsZVNoZWV0OjpTdHlsZVNoZWV0KFdlYkNvcmU6Ok5vZGUgKnBhcmVudE5vZGUsIFN0
cmluZyBocmVmKQotICAgIDogU3R5bGVMaXN0KDApCi17Ci0gICAgbV9wYXJlbnROb2RlID0gcGFy
ZW50Tm9kZTsKLSAgICBtX2Rpc2FibGVkID0gZmFsc2U7Ci0gICAgbV9zdHJIcmVmID0gaHJlZjsK
LX0KLQotU3R5bGVTaGVldDo6U3R5bGVTaGVldChTdHlsZUJhc2UgKm93bmVyLCBTdHJpbmcgaHJl
ZikKLSAgICA6IFN0eWxlTGlzdChvd25lcikKLXsKLSAgICBtX2Rpc2FibGVkID0gZmFsc2U7Ci0g
ICAgbV9wYXJlbnROb2RlID0gMDsKLSAgICBtX3N0ckhyZWYgPSBocmVmOwotfQotCi1TdHlsZVNo
ZWV0Ojp+U3R5bGVTaGVldCgpCi17Ci0gICAgaWYgKG1fbWVkaWEpCi0gICAgICAgIG1fbWVkaWEt
PnNldFBhcmVudCgwKTsKLX0KLQotU3R5bGVTaGVldCAqU3R5bGVTaGVldDo6cGFyZW50U3R5bGVT
aGVldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNTdHls
ZVNoZWV0KCkpID8gc3RhdGljX2Nhc3Q8U3R5bGVTaGVldCAqPihwYXJlbnQoKSkgOiAwOwotfQot
Ci12b2lkIFN0eWxlU2hlZXQ6OnNldE1lZGlhKE1lZGlhTGlzdCAqbWVkaWEpCi17Ci0gICAgbV9t
ZWRpYSA9IG1lZGlhOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLUNTU1N0eWxlU2hlZXQ6
OkNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCAqcGFyZW50U2hlZXQsIFN0cmluZyBocmVmKQot
ICAgIDogU3R5bGVTaGVldChwYXJlbnRTaGVldCwgaHJlZikKLXsKLSAgICBtX2RvYyA9IHBhcmVu
dFNoZWV0ID8gcGFyZW50U2hlZXQtPmRvYygpIDogMDsKLSAgICBtX2ltcGxpY2l0ID0gZmFsc2U7
Ci0gICAgbV9uYW1lc3BhY2VzID0gMDsKLX0KLQotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVl
dChOb2RlICpwYXJlbnROb2RlLCBTdHJpbmcgaHJlZiwgYm9vbCBfaW1wbGljaXQpCi0gICAgOiBT
dHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYpCi17Ci0gICAgbV9kb2MgPSBwYXJlbnROb2RlLT5k
b2N1bWVudCgpOwotICAgIG1faW1wbGljaXQgPSBfaW1wbGljaXQ7IAotICAgIG1fbmFtZXNwYWNl
cyA9IDA7Ci19Ci0KLUNTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoQ1NTUnVsZSAqb3duZXJS
dWxlLCBTdHJpbmcgaHJlZikKLSAgICA6IFN0eWxlU2hlZXQob3duZXJSdWxlLCBocmVmKQotewot
ICAgIG1fZG9jID0gMDsKLSAgICBtX2ltcGxpY2l0ID0gZmFsc2U7Ci0gICAgbV9uYW1lc3BhY2Vz
ID0gMDsKLX0KLQotQ1NTUnVsZSAqQ1NTU3R5bGVTaGVldDo6b3duZXJSdWxlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1bGUoKSkgPyBzdGF0aWNfY2Fz
dDxDU1NSdWxlICo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KLXVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6
Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpbmRleCA+IGxlbmd0aCgpKSB7Ci0g
ICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
ICBDU1NQYXJzZXIgcCh1c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIFJlZlB0cjxDU1NSdWxlPiBy
ID0gcC5wYXJzZVJ1bGUodGhpcywgcnVsZSk7Ci0KLSAgICBpZiAoIXIpIHsKLSAgICAgICAgZWMg
PSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyAjIyMKLSAg
ICAvLyBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNlZCBpZiB0aGUgcnVsZSBjYW5ub3QgYmUg
aW5zZXJ0ZWQgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBlLmcuIGlmIGFuCi0gICAgLy9AaW1wb3J0
IHJ1bGUgaXMgaW5zZXJ0ZWQgYWZ0ZXIgYSBzdGFuZGFyZCBydWxlIHNldCBvciBvdGhlciBhdC1y
dWxlLgotICAgIGluc2VydChpbmRleCwgci5yZWxlYXNlKCkpOwotICAgIAotICAgIHN0eWxlU2hl
ZXRDaGFuZ2VkKCk7Ci0gICAgCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi11bnNpZ25lZCBDU1NT
dHlsZVNoZWV0OjphZGRSdWxlKCBjb25zdCBTdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBTdHJpbmcg
JnN0eWxlLCBpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpbmRleCA9
PSAtMSkKLSAgICAgICAgaW5kZXggPSBsZW5ndGgoKTsKLSAgICByZXR1cm4gaW5zZXJ0UnVsZShz
ZWxlY3RvciArICIgeyAiICsgc3R5bGUgKyAiIH0iLCBpbmRleCwgZWMpOwotfQotCi1DU1NSdWxl
TGlzdCAqQ1NTU3R5bGVTaGVldDo6Y3NzUnVsZXMoKQotewotICAgIHJldHVybiBuZXcgQ1NTUnVs
ZUxpc3QodGhpcyk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTaGVldDo6ZGVsZXRlUnVsZSggdW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpbmRleCA+PSBsZW5ndGgo
KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgZWMgPSAwOwotICAgIHJlbW92ZShpbmRleCk7Ci0gICAgc3R5bGVTaGVldENoYW5n
ZWQoKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNoZWV0OjphZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBw
LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCi17
Ci0gICAgaWYgKHVyaS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmFtZXNw
YWNlcyA9IG5ldyBDU1NOYW1lc3BhY2UocHJlZml4LCB1cmksIG1fbmFtZXNwYWNlcyk7Ci0gICAg
Ci0gICAgaWYgKHByZWZpeC5pc0VtcHR5KCkpCi0gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBu
YW1lc3BhY2Ugb24gdGhlIHBhcnNlciBzbyB0aGF0IHNlbGVjdG9ycyB0aGF0IG9taXQgbmFtZXNw
YWNlIGluZm8gd2lsbAotICAgICAgICAvLyBiZSBhYmxlIHRvIHBpY2sgaXQgdXAgZWFzaWx5Lgot
ICAgICAgICBwLT5kZWZhdWx0TmFtZXNwYWNlID0gdXJpOwotfQotCi1jb25zdCBBdG9taWNTdHJp
bmcmIENTU1N0eWxlU2hlZXQ6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCkKLXsKLSAgICBpZiAocHJlZml4LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxBdG9tOyAvLyBObyBuYW1lc3BhY2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5h
bWVzcGFjZSwgd2Ugd29uJ3QgbWF0Y2ggaXQuCi0gICAgZWxzZSBpZiAocHJlZml4ID09IHN0YXJB
dG9tKQotICAgICAgICByZXR1cm4gc3RhckF0b207IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3Bh
Y2UuCi0gICAgZWxzZSBpZiAobV9uYW1lc3BhY2VzKSB7Ci0gICAgICAgIENTU05hbWVzcGFjZSog
bnMgPSBtX25hbWVzcGFjZXMtPm5hbWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwotICAgICAgICBp
ZiAobnMpCi0gICAgICAgICAgICByZXR1cm4gbnMtPnVyaSgpOwotICAgIH0KLSAgICByZXR1cm4g
bnVsbEF0b207IC8vIEFzc3VtZSB3ZSB3b250IG1hdGNoIGFueSBuYW1lc3BhY2VzLgotfQotCi1i
b29sIENTU1N0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyAmc3RyaW5nLCBib29s
IHN0cmljdCkKLXsKLSAgICBzZXRTdHJpY3RQYXJzaW5nKHN0cmljdCk7Ci0gICAgQ1NTUGFyc2Vy
IHAoIHN0cmljdCApOwotICAgIHAucGFyc2VTaGVldCggdGhpcywgc3RyaW5nICk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKLXsKLSAgICB1
bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
OyArK2kpIHsKLSAgICAgICAgU3R5bGVCYXNlKiBydWxlID0gaXRlbShpKTsKLSAgICAgICAgaWYg
KHJ1bGUtPmlzSW1wb3J0UnVsZSgpICYmIHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxl
KS0+aXNMb2FkaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIENTU1N0eWxlU2hlZXQ6OmNoZWNrTG9hZGVkKCkKLXsKLSAg
ICBpZiAoaXNMb2FkaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAocGFyZW50KCkpCi0g
ICAgICAgIHBhcmVudCgpLT5jaGVja0xvYWRlZCgpOwotICAgIGlmIChtX3BhcmVudE5vZGUpCi0g
ICAgICAgIG1fcGFyZW50Tm9kZS0+c2hlZXRMb2FkZWQoKTsKLX0KLQotV2ViQ29yZTo6RG9jTG9h
ZGVyICpDU1NTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQotewotICAgIGlmICggIW1fZG9jICkgLy8g
ZG9jIGlzIDAgZm9yIHRoZSB1c2VyLSBhbmQgZGVmYXVsdC1zaGVldCEKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAvLyAjIyMgcmVtb3ZlPyAoY2xpZW50cyBqdXN0IHVzZSBzaGVldC0+ZG9jKCkt
PmRvY0xvYWRlcigpKQotICAgIHJldHVybiBtX2RvYy0+ZG9jTG9hZGVyKCk7Ci19Ci0KLXZvaWQg
Q1NTU3R5bGVTaGVldDo6c3R5bGVTaGVldENoYW5nZWQoKQotewotICAgIC8qIEZJWE1FOiBXZSBk
b24ndCBuZWVkIHRvIGRvIGV2ZXJ5dGhpbmcgdXBkYXRlU3R5bGVTZWxlY3RvciBkb2VzLAotICAg
ICAqIGJhc2ljYWxseSB3ZSBqdXN0IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGRvY3VtZW50J3Mgc2Vs
ZWN0b3Igd2l0aCB0aGUKLSAgICAgKiBhbHJlYWR5IGV4aXN0aW5nIHN0eWxlIHNoZWV0cy4KLSAg
ICAgKi8KLSAgICBpZiAobV9kb2MpCi0gICAgICAgIG1fZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9y
KCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KIFN0eWxlU2hlZXRMaXN0Ojp+U3R5
bGVTaGVldExpc3QoKQogewogICAgIGZvciAoIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5
bGVTaGVldD4gaXQgKCBzdHlsZVNoZWV0cyApOyBpdC5jdXJyZW50KCk7ICsraXQgKQpAQCAtMjgx
LDY3ICs3Miw0IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLU1lZGlhTGlzdDo6TWVkaWFMaXN0KCBDU1NTdHlsZVNoZWV0ICpw
YXJlbnRTaGVldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAm
bWVkaWEgKQotICAgIDogU3R5bGVCYXNlKCBwYXJlbnRTaGVldCApCi17Ci0gICAgc2V0TWVkaWFU
ZXh0KCBtZWRpYSApOwotfQotCi1NZWRpYUxpc3Q6Ok1lZGlhTGlzdCggQ1NTUnVsZSAqcGFyZW50
UnVsZSwgY29uc3QgU3RyaW5nICZtZWRpYSApCi0gICAgOiBTdHlsZUJhc2UocGFyZW50UnVsZSkK
LXsKLSAgICBzZXRNZWRpYVRleHQoIG1lZGlhICk7Ci19Ci0KLWJvb2wgTWVkaWFMaXN0Ojpjb250
YWlucyggY29uc3QgU3RyaW5nICZtZWRpdW0gKSBjb25zdAotewotICAgIHJldHVybiBtX2xzdE1l
ZGlhLmNvdW50KCkgPT0gMCB8fCBtX2xzdE1lZGlhLmNvbnRhaW5zKCBtZWRpdW0gKSB8fAotICAg
ICAgICAgICAgbV9sc3RNZWRpYS5jb250YWlucyggImFsbCIgKTsKLX0KLQotQ1NTU3R5bGVTaGVl
dCAqTWVkaWFMaXN0OjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFy
ZW50KCktPmlzQ1NTU3R5bGVTaGVldCgpID8gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihw
YXJlbnQoKSkgOiAwOwotfQotCi1DU1NSdWxlICpNZWRpYUxpc3Q6OnBhcmVudFJ1bGUoKSBjb25z
dAotewotICAgIHJldHVybiBwYXJlbnQoKS0+aXNSdWxlKCkgPyBzdGF0aWNfY2FzdDxDU1NSdWxl
ICo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KLXZvaWQgTWVkaWFMaXN0OjpkZWxldGVNZWRpdW0oIGNv
bnN0IFN0cmluZyAmb2xkTWVkaXVtICkKLXsKLSAgICBmb3IgKCBEZXByZWNhdGVkVmFsdWVMaXN0
PFN0cmluZz46Okl0ZXJhdG9yIGl0ID0gbV9sc3RNZWRpYS5iZWdpbigpOyBpdCAhPSBtX2xzdE1l
ZGlhLmVuZCgpOyArK2l0ICkgewotICAgICAgICBpZiAoKCppdCkgPT0gb2xkTWVkaXVtKSB7Ci0g
ICAgICAgICAgICBtX2xzdE1lZGlhLnJlbW92ZSggaXQgKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotV2ViQ29yZTo6U3RyaW5nIE1lZGlhTGlzdDo6bWVkaWFU
ZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgdGV4dCA9ICIiOwotICAgIGZvciAoRGVwcmVjYXRl
ZFZhbHVlTGlzdDxTdHJpbmc+OjpDb25zdEl0ZXJhdG9yIGl0ID0gbV9sc3RNZWRpYS5iZWdpbigp
OyBpdCAhPSBtX2xzdE1lZGlhLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICh0ZXh0Lmxlbmd0
aCgpID4gMCkKLSAgICAgICAgICAgIHRleHQgKz0gIiwgIjsKLSAgICAgICAgdGV4dCArPSAqaXQ7
Ci0gICAgfQotICAgIHJldHVybiB0ZXh0OwotfQotCi12b2lkIE1lZGlhTGlzdDo6c2V0TWVkaWFU
ZXh0KGNvbnN0IFdlYkNvcmU6OlN0cmluZyAmdmFsdWUpCi17Ci0gICAgbV9sc3RNZWRpYS5jbGVh
cigpOwotICAgIERlcHJlY2F0ZWRTdHJpbmdMaXN0IGxpc3QgPSBEZXByZWNhdGVkU3RyaW5nTGlz
dDo6c3BsaXQoJywnLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIGZvciAoRGVwcmVj
YXRlZFN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBsaXN0LmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIFN0cmluZyBtZWRpdW0gPSAoKml0KS5zdHJpcFdoaXRlU3Bh
Y2UoKTsKLSAgICAgICAgaWYgKCFtZWRpdW0uaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9sc3RN
ZWRpYS5hcHBlbmQobWVkaXVtKTsKLSAgICB9Ci19Ci0KIH0KSW5kZXg6IGNzcy9TdHlsZVNoZWV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBjc3MvU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDE0MzgyKQor
KysgY3NzL1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw0NSArMTksMzYgQEAK
ICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAt
IFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0KICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJjc3Nfc3R5bGVzaGVldGltcGwuaCIKKyNpbmNsdWRl
ICJTdHlsZVNoZWV0LmgiCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJjc3NfcnVsZWltcGwuaCIKLSNpbmNsdWRlICJj
c3NfdmFsdWVpbXBsLmgiCi0jaW5jbHVkZSAiY3NzcGFyc2VyLmgiCi0jaW5jbHVkZSAiSFRNTERv
Y3VtZW50LmgiCi0jaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogU3R5
bGVTaGVldDo6U3R5bGVTaGVldChTdHlsZVNoZWV0ICpwYXJlbnRTaGVldCwgU3RyaW5nIGhyZWYp
CiAgICAgOiBTdHlsZUxpc3QocGFyZW50U2hlZXQpCisgICAgLCBtX3BhcmVudE5vZGUoMCkKKyAg
ICAsIG1fc3RySHJlZihocmVmKQorICAgICwgbV9kaXNhYmxlZChmYWxzZSkKIHsKLSAgICBtX2Rp
c2FibGVkID0gZmFsc2U7Ci0gICAgbV9wYXJlbnROb2RlID0gMDsKLSAgICBtX3N0ckhyZWYgPSBo
cmVmOwogfQogCiAKLVN0eWxlU2hlZXQ6OlN0eWxlU2hlZXQoV2ViQ29yZTo6Tm9kZSAqcGFyZW50
Tm9kZSwgU3RyaW5nIGhyZWYpCitTdHlsZVNoZWV0OjpTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5v
ZGUsIFN0cmluZyBocmVmKQogICAgIDogU3R5bGVMaXN0KDApCisgICAgLCBtX3BhcmVudE5vZGUo
cGFyZW50Tm9kZSkKKyAgICAsIG1fc3RySHJlZihocmVmKQorICAgICwgbV9kaXNhYmxlZChmYWxz
ZSkKIHsKLSAgICBtX3BhcmVudE5vZGUgPSBwYXJlbnROb2RlOwotICAgIG1fZGlzYWJsZWQgPSBm
YWxzZTsKLSAgICBtX3N0ckhyZWYgPSBocmVmOwogfQogCiBTdHlsZVNoZWV0OjpTdHlsZVNoZWV0
KFN0eWxlQmFzZSAqb3duZXIsIFN0cmluZyBocmVmKQogICAgIDogU3R5bGVMaXN0KG93bmVyKQor
ICAgICwgbV9wYXJlbnROb2RlKDApCisgICAgLCBtX3N0ckhyZWYoaHJlZikKKyAgICAsIG1fZGlz
YWJsZWQoZmFsc2UpCiB7Ci0gICAgbV9kaXNhYmxlZCA9IGZhbHNlOwotICAgIG1fcGFyZW50Tm9k
ZSA9IDA7Ci0gICAgbV9zdHJIcmVmID0gaHJlZjsKIH0KIAogU3R5bGVTaGVldDo6flN0eWxlU2hl
ZXQoKQpAQCAtNzYsMjcyICs2Nyw0IEBACiAgICAgbV9tZWRpYSA9IG1lZGlhOwogfQogCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0KLUNTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVT
aGVldCAqcGFyZW50U2hlZXQsIFN0cmluZyBocmVmKQotICAgIDogU3R5bGVTaGVldChwYXJlbnRT
aGVldCwgaHJlZikKLXsKLSAgICBtX2RvYyA9IHBhcmVudFNoZWV0ID8gcGFyZW50U2hlZXQtPmRv
YygpIDogMDsKLSAgICBtX2ltcGxpY2l0ID0gZmFsc2U7Ci0gICAgbV9uYW1lc3BhY2VzID0gMDsK
LX0KLQotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChOb2RlICpwYXJlbnROb2RlLCBTdHJp
bmcgaHJlZiwgYm9vbCBfaW1wbGljaXQpCi0gICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhy
ZWYpCi17Ci0gICAgbV9kb2MgPSBwYXJlbnROb2RlLT5kb2N1bWVudCgpOwotICAgIG1faW1wbGlj
aXQgPSBfaW1wbGljaXQ7IAotICAgIG1fbmFtZXNwYWNlcyA9IDA7Ci19Ci0KLUNTU1N0eWxlU2hl
ZXQ6OkNTU1N0eWxlU2hlZXQoQ1NTUnVsZSAqb3duZXJSdWxlLCBTdHJpbmcgaHJlZikKLSAgICA6
IFN0eWxlU2hlZXQob3duZXJSdWxlLCBocmVmKQotewotICAgIG1fZG9jID0gMDsKLSAgICBtX2lt
cGxpY2l0ID0gZmFsc2U7Ci0gICAgbV9uYW1lc3BhY2VzID0gMDsKLX0KLQotQ1NTUnVsZSAqQ1NT
U3R5bGVTaGVldDo6b3duZXJSdWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYm
IHBhcmVudCgpLT5pc1J1bGUoKSkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlICo+KHBhcmVudCgpKSA6
IDA7Ci19Ci0KLXVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5n
JiBydWxlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAw
OwotICAgIGlmIChpbmRleCA+IGxlbmd0aCgpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBDU1NQYXJzZXIgcCh1c2VTdHJpY3RQ
YXJzaW5nKCkpOwotICAgIFJlZlB0cjxDU1NSdWxlPiByID0gcC5wYXJzZVJ1bGUodGhpcywgcnVs
ZSk7Ci0KLSAgICBpZiAoIXIpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyAjIyMKLSAgICAvLyBISUVSQVJDSFlfUkVRVUVTVF9F
UlI6IFJhaXNlZCBpZiB0aGUgcnVsZSBjYW5ub3QgYmUgaW5zZXJ0ZWQgYXQgdGhlIHNwZWNpZmll
ZCBpbmRleCBlLmcuIGlmIGFuCi0gICAgLy9AaW1wb3J0IHJ1bGUgaXMgaW5zZXJ0ZWQgYWZ0ZXIg
YSBzdGFuZGFyZCBydWxlIHNldCBvciBvdGhlciBhdC1ydWxlLgotICAgIGluc2VydChpbmRleCwg
ci5yZWxlYXNlKCkpOwotICAgIAotICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7Ci0gICAgCi0gICAg
cmV0dXJuIGluZGV4OwotfQotCi11bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjphZGRSdWxlKCBjb25z
dCBTdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBTdHJpbmcgJnN0eWxlLCBpbnQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgaW5kZXggPSBs
ZW5ndGgoKTsKLSAgICByZXR1cm4gaW5zZXJ0UnVsZShzZWxlY3RvciArICIgeyAiICsgc3R5bGUg
KyAiIH0iLCBpbmRleCwgZWMpOwotfQotCi1DU1NSdWxlTGlzdCAqQ1NTU3R5bGVTaGVldDo6Y3Nz
UnVsZXMoKQotewotICAgIHJldHVybiBuZXcgQ1NTUnVsZUxpc3QodGhpcyk7Ci19Ci0KLXZvaWQg
Q1NTU3R5bGVTaGVldDo6ZGVsZXRlUnVsZSggdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkgewotICAgICAgICBlYyA9IElOREVY
X1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZWMgPSAwOwotICAgIHJl
bW92ZShpbmRleCk7Ci0gICAgc3R5bGVTaGVldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NTdHls
ZVNoZWV0OjphZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCi17Ci0gICAgaWYgKHVyaS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmFtZXNwYWNlcyA9IG5ldyBDU1NOYW1lc3BhY2Uo
cHJlZml4LCB1cmksIG1fbmFtZXNwYWNlcyk7Ci0gICAgCi0gICAgaWYgKHByZWZpeC5pc0VtcHR5
KCkpCi0gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHBhcnNlciBz
byB0aGF0IHNlbGVjdG9ycyB0aGF0IG9taXQgbmFtZXNwYWNlIGluZm8gd2lsbAotICAgICAgICAv
LyBiZSBhYmxlIHRvIHBpY2sgaXQgdXAgZWFzaWx5LgotICAgICAgICBwLT5kZWZhdWx0TmFtZXNw
YWNlID0gdXJpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIENTU1N0eWxlU2hlZXQ6OmRldGVy
bWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKLXsKLSAgICBpZiAocHJl
Zml4LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxBdG9tOyAvLyBObyBuYW1lc3BhY2Uu
IElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0Y2gg
aXQuCi0gICAgZWxzZSBpZiAocHJlZml4ID09IHN0YXJBdG9tKQotICAgICAgICByZXR1cm4gc3Rh
ckF0b207IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCi0gICAgZWxzZSBpZiAobV9uYW1l
c3BhY2VzKSB7Ci0gICAgICAgIENTU05hbWVzcGFjZSogbnMgPSBtX25hbWVzcGFjZXMtPm5hbWVz
cGFjZUZvclByZWZpeChwcmVmaXgpOwotICAgICAgICBpZiAobnMpCi0gICAgICAgICAgICByZXR1
cm4gbnMtPnVyaSgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbEF0b207IC8vIEFzc3VtZSB3ZSB3
b250IG1hdGNoIGFueSBuYW1lc3BhY2VzLgotfQotCi1ib29sIENTU1N0eWxlU2hlZXQ6OnBhcnNl
U3RyaW5nKGNvbnN0IFN0cmluZyAmc3RyaW5nLCBib29sIHN0cmljdCkKLXsKLSAgICBzZXRTdHJp
Y3RQYXJzaW5nKHN0cmljdCk7Ci0gICAgQ1NTUGFyc2VyIHAoIHN0cmljdCApOwotICAgIHAucGFy
c2VTaGVldCggdGhpcywgc3RyaW5nICk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NT
U3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKLXsKLSAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgU3R5bGVC
YXNlKiBydWxlID0gaXRlbShpKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpICYm
IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKS0+aXNMb2FkaW5nKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENT
U1N0eWxlU2hlZXQ6OmNoZWNrTG9hZGVkKCkKLXsKLSAgICBpZiAoaXNMb2FkaW5nKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAocGFyZW50KCkpCi0gICAgICAgIHBhcmVudCgpLT5jaGVja0xv
YWRlZCgpOwotICAgIGlmIChtX3BhcmVudE5vZGUpCi0gICAgICAgIG1fcGFyZW50Tm9kZS0+c2hl
ZXRMb2FkZWQoKTsKLX0KLQotV2ViQ29yZTo6RG9jTG9hZGVyICpDU1NTdHlsZVNoZWV0Ojpkb2NM
b2FkZXIoKQotewotICAgIGlmICggIW1fZG9jICkgLy8gZG9jIGlzIDAgZm9yIHRoZSB1c2VyLSBh
bmQgZGVmYXVsdC1zaGVldCEKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyAjIyMgcmVtb3Zl
PyAoY2xpZW50cyBqdXN0IHVzZSBzaGVldC0+ZG9jKCktPmRvY0xvYWRlcigpKQotICAgIHJldHVy
biBtX2RvYy0+ZG9jTG9hZGVyKCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTaGVldDo6c3R5bGVTaGVl
dENoYW5nZWQoKQotewotICAgIC8qIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRvIGRvIGV2ZXJ5dGhp
bmcgdXBkYXRlU3R5bGVTZWxlY3RvciBkb2VzLAotICAgICAqIGJhc2ljYWxseSB3ZSBqdXN0IG5l
ZWQgdG8gcmVjcmVhdGUgdGhlIGRvY3VtZW50J3Mgc2VsZWN0b3Igd2l0aCB0aGUKLSAgICAgKiBh
bHJlYWR5IGV4aXN0aW5nIHN0eWxlIHNoZWV0cy4KLSAgICAgKi8KLSAgICBpZiAobV9kb2MpCi0g
ICAgICAgIG1fZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0KLVN0eWxlU2hlZXRMaXN0Ojp+U3R5bGVTaGVldExpc3QoKQotewotICAgIGZv
ciAoIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVTaGVldD4gaXQgKCBzdHlsZVNoZWV0
cyApOyBpdC5jdXJyZW50KCk7ICsraXQgKQotICAgICAgICBpdC5jdXJyZW50KCktPmRlcmVmKCk7
Ci19Ci0KLXZvaWQgU3R5bGVTaGVldExpc3Q6OmFkZCggU3R5bGVTaGVldCogcyApCi17Ci0gICAg
aWYgKCAhc3R5bGVTaGVldHMuY29udGFpbnNSZWYoIHMgKSApIHsKLSAgICAgICAgcy0+cmVmKCk7
Ci0gICAgICAgIHN0eWxlU2hlZXRzLmFwcGVuZCggcyApOwotICAgIH0KLX0KLQotdm9pZCBTdHls
ZVNoZWV0TGlzdDo6cmVtb3ZlKCBTdHlsZVNoZWV0KiBzICkKLXsKLSAgICBpZiAoIHN0eWxlU2hl
ZXRzLnJlbW92ZVJlZiggcyApICkKLSAgICAgICAgcy0+ZGVyZWYoKTsKLX0KLQotdW5zaWduZWQg
U3R5bGVTaGVldExpc3Q6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgLy8gaGFjayBzbyBpbXBsaWNp
dCBCT0RZIHN0eWxlc2hlZXRzIGRvbid0IGdldCBjb3VudGVkIGhlcmUKLSAgICB1bnNpZ25lZCBs
ID0gMDsKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXQ+IGl0KHN0eWxl
U2hlZXRzKTsKLSAgICBmb3IgKDsgaXQuY3VycmVudCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgh
aXQuY3VycmVudCgpLT5pc0NTU1N0eWxlU2hlZXQoKSB8fCAhc3RhdGljX2Nhc3Q8Q1NTU3R5bGVT
aGVldCo+KGl0LmN1cnJlbnQoKSktPmltcGxpY2l0KCkpCi0gICAgICAgICAgICBsKys7Ci0gICAg
fQotICAgIHJldHVybiBsOwotfQotCi1TdHlsZVNoZWV0ICpTdHlsZVNoZWV0TGlzdDo6aXRlbSAo
IHVuc2lnbmVkIGluZGV4ICkKLXsKLSAgICB1bnNpZ25lZCBsID0gMDsKLSAgICBEZXByZWNhdGVk
UHRyTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXQ+IGl0KHN0eWxlU2hlZXRzKTsKLSAgICBmb3IgKDsg
aXQuY3VycmVudCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICghaXQuY3VycmVudCgpLT5pc0NTU1N0
eWxlU2hlZXQoKSB8fCAhc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGl0LmN1cnJlbnQoKSkt
PmltcGxpY2l0KCkpIHsKLSAgICAgICAgICAgIGlmIChsID09IGluZGV4KQotICAgICAgICAgICAg
ICAgIHJldHVybiBpdC5jdXJyZW50KCk7Ci0gICAgICAgICAgICBsKys7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLU1lZGlhTGlzdDo6TWVkaWFMaXN0KCBDU1NTdHlsZVNoZWV0ICpwYXJlbnRTaGVl
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbWVkaWEgKQot
ICAgIDogU3R5bGVCYXNlKCBwYXJlbnRTaGVldCApCi17Ci0gICAgc2V0TWVkaWFUZXh0KCBtZWRp
YSApOwotfQotCi1NZWRpYUxpc3Q6Ok1lZGlhTGlzdCggQ1NTUnVsZSAqcGFyZW50UnVsZSwgY29u
c3QgU3RyaW5nICZtZWRpYSApCi0gICAgOiBTdHlsZUJhc2UocGFyZW50UnVsZSkKLXsKLSAgICBz
ZXRNZWRpYVRleHQoIG1lZGlhICk7Ci19Ci0KLWJvb2wgTWVkaWFMaXN0Ojpjb250YWlucyggY29u
c3QgU3RyaW5nICZtZWRpdW0gKSBjb25zdAotewotICAgIHJldHVybiBtX2xzdE1lZGlhLmNvdW50
KCkgPT0gMCB8fCBtX2xzdE1lZGlhLmNvbnRhaW5zKCBtZWRpdW0gKSB8fAotICAgICAgICAgICAg
bV9sc3RNZWRpYS5jb250YWlucyggImFsbCIgKTsKLX0KLQotQ1NTU3R5bGVTaGVldCAqTWVkaWFM
aXN0OjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFyZW50KCktPmlz
Q1NTU3R5bGVTaGVldCgpID8gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihwYXJlbnQoKSkg
OiAwOwotfQotCi1DU1NSdWxlICpNZWRpYUxpc3Q6OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAg
IHJldHVybiBwYXJlbnQoKS0+aXNSdWxlKCkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlICo+KHBhcmVu
dCgpKSA6IDA7Ci19Ci0KLXZvaWQgTWVkaWFMaXN0OjpkZWxldGVNZWRpdW0oIGNvbnN0IFN0cmlu
ZyAmb2xkTWVkaXVtICkKLXsKLSAgICBmb3IgKCBEZXByZWNhdGVkVmFsdWVMaXN0PFN0cmluZz46
Okl0ZXJhdG9yIGl0ID0gbV9sc3RNZWRpYS5iZWdpbigpOyBpdCAhPSBtX2xzdE1lZGlhLmVuZCgp
OyArK2l0ICkgewotICAgICAgICBpZiAoKCppdCkgPT0gb2xkTWVkaXVtKSB7Ci0gICAgICAgICAg
ICBtX2xzdE1lZGlhLnJlbW92ZSggaXQgKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotV2ViQ29yZTo6U3RyaW5nIE1lZGlhTGlzdDo6bWVkaWFUZXh0KCkgY29u
c3QKLXsKLSAgICBTdHJpbmcgdGV4dCA9ICIiOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlz
dDxTdHJpbmc+OjpDb25zdEl0ZXJhdG9yIGl0ID0gbV9sc3RNZWRpYS5iZWdpbigpOyBpdCAhPSBt
X2xzdE1lZGlhLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICh0ZXh0Lmxlbmd0aCgpID4gMCkK
LSAgICAgICAgICAgIHRleHQgKz0gIiwgIjsKLSAgICAgICAgdGV4dCArPSAqaXQ7Ci0gICAgfQot
ICAgIHJldHVybiB0ZXh0OwotfQotCi12b2lkIE1lZGlhTGlzdDo6c2V0TWVkaWFUZXh0KGNvbnN0
IFdlYkNvcmU6OlN0cmluZyAmdmFsdWUpCi17Ci0gICAgbV9sc3RNZWRpYS5jbGVhcigpOwotICAg
IERlcHJlY2F0ZWRTdHJpbmdMaXN0IGxpc3QgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQo
JywnLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIGZvciAoRGVwcmVjYXRlZFN0cmlu
Z0xpc3Q6Okl0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBsaXN0LmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIFN0cmluZyBtZWRpdW0gPSAoKml0KS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAg
ICAgICAgaWYgKCFtZWRpdW0uaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9sc3RNZWRpYS5hcHBl
bmQobWVkaXVtKTsKLSAgICB9Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS9XZWJD
b3JlLnZjcHJvagkocmV2aXNpb24gMTQzOTUpCisrKyBXZWJDb3JlLnZjcHJvai9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODMxLDExICsxODMxLDM1IEBACiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGNzc1xj
c3Nfc3R5bGVzaGVldGltcGwuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGNzc1xDU1NT
dHlsZVNoZWV0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGNzc1xjc3Nfc3R5bGVzaGVldGltcGwuaCINCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxjc3NcQ1NTU3R5bGVTaGVldC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cY3NzXE1lZGlhTGlzdC5jcHAiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxjc3Nc
TWVkaWFMaXN0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxjc3NcU3R5bGVTaGVldExpc3QuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cY3NzXFN0eWxlU2hlZXRMaXN0
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxjc3NcU3R5bGVTaGVldC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxjc3NcU3R5bGVTaGVldC5oIg0KIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQo=
</data>
<flag name="review"
          id="2349"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>