<?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>115841</bug_id>
          
          <creation_ts>2013-05-08 18:54:51 -0700</creation_ts>
          <short_desc>fourthTier: DFG should have its own notion of StructureChain, and it should be possible to validate it after compilation finishes</short_desc>
          <delta_ts>2013-05-09 16:01:08 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>115598</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>886567</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-08 18:54:51 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886568</commentid>
    <comment_count>1</comment_count>
      <attachid>201128</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-08 18:55:19 -0700</bug_when>
    <thetext>Created attachment 201128
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886940</commentid>
    <comment_count>2</comment_count>
      <attachid>201250</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-09 10:33:38 -0700</bug_when>
    <thetext>Created attachment 201250
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886949</commentid>
    <comment_count>3</comment_count>
      <attachid>201251</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-09 10:50:10 -0700</bug_when>
    <thetext>Created attachment 201251
the patch

Simplified a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886961</commentid>
    <comment_count>4</comment_count>
      <attachid>201253</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-09 11:15:45 -0700</bug_when>
    <thetext>Created attachment 201253
the patch

Fix an assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887138</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-09 16:01:08 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/149851</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201128</attachid>
            <date>2013-05-08 18:55:19 -0700</date>
            <delta_ts>2013-05-09 10:33:38 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42481</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDk3NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwxMCBAQAogCQkwRjQ2ODBENDE0QkJE
MjQ5MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyog
SG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgKi87IH07CiAJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3
MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1
cm5WYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQx
MDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovOyB9OworCQkwRjRFMUEwRTE3M0FFRERD
MDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwQzE3M0FFRERDMDA3RUUyRDMgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CisJCTBGNEUxQTBGMTczQUVEREMwMDdF
RTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGNEUxQTEyMTczQUYwN0IwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0
dXJlQ2hhaW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjRFMUExMTE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEUx
QTEzMTczQUYwN0UwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTEwMTczQUYw
NzgwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLzsgfTsKIAkJMEY1
NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENFM0Uy
NSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0Uy
NSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUMx
OTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZE
IC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpAQCAtMTEzNCw2ICsxMTM4LDEwIEBACiAJ
CTBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIg
LyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIb3N0Q2FsbFJldHVyblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjRFMUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEUxQTEwMTczQUYwNzgwMDdFRTJEMyAvKiBE
RkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2ly
ZWRTdHJ1Y3R1cmVDaGFpbnMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFp
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRFMUExMTE3M0FGMDc4MDA3
RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdE
ZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNo
YWlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1NDFBRjE2MTNDMUZCMDBD
RTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3BlY2lhbFBvaW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjU1NDFCMDE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlY2lhbFBvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RW
YWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yNjEzLDYgKzI2MjEsOCBAQAogCQkJCTBGQjdGMzhGMTVFRDhFMzgw
MEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRF
NzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAw
RDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKKwkJCQkwRjRFMUEwQzE3M0FFRERD
MDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCisJCQkJMEY0RTFBMEQx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlC
Qjk1QjBFMTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMx
MTY2N0EwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQk4NkJG
NjQyQTE0OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8sCkBAIC0yNjM0LDggKzI2NDQs
NiBAQAogCQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICov
LAogCQkJCUY2OTJBODVFMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNwcCAqLywKIAkJ
CQlGNjkyQTg1RjAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5oICovLAotCQkJCUUxOEUz
QTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8sCi0JCQkJRTE4RTNBNTYwREY5Mjc4QzAw
RDkwQjM0IC8qIFZNLmggKi8sCiAJCQkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0EyIC8qIEpTR2xv
YmFsT2JqZWN0LmNwcCAqLywKIAkJCQlBOEU4OTQzMzBDRDA2MDNGMDAzNjcxNzkgLyogSlNHbG9i
YWxPYmplY3QuaCAqLywKIAkJCQlCQzc1NkZDNjBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuY3BwICovLApAQCAtMjc3NCw2ICsyNzgyLDggQEAKIAkJCQk1RDUzNzI2
RTBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oICovLAogCQkJCTBGRUIzRUNCMTYyMzdGNDcw
MEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovLAogCQkJCTg2NjczOUQxMTNCRkRF
NzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKKwkJCQlFMThFM0E1NzBERjky
NzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAorCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAv
KiBWTS5oICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAq
LywKIAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJ
CUE3RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKQEAgLTI4MTcs
NiArMjgyNyw4IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNEUxQTEwMTczQUYwNzgw
MDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLywKKwkJCQkwRjRFMUEx
MTE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovLAogCQkJ
CTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJ
CQkwRjYyMDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJ
CTBGNTVDMTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAg
LTMxOTEsNiArMzIwMyw3IEBACiAJCQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1
cmVDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk3MEVEMUQzQUUw
MEYxRjY4MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYz
MzIwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRFMUEw
RjE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNh
Y2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29k
ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzQsNiArMzI4Nyw3IEBACiAJCQkJMEZD
MDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRFMUExMjE3M0FGMDdCMDA3RUUyRDMg
LyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5
NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZG
Qzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3Rl
ckJhbmsuaCBpbiBIZWFkZXJzICovLApAQCAtNDE4NCw2ICs0MTk4LDcgQEAKIAkJCQkxNDI4MDgz
QTEwN0VDMDc1MDAxM0U3QjIgLyogSlNTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlENTEwN0VDMzc2MDA0MjdBNDggLyogSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCNzRFMEE0MzAzMjgwMDUxN0NGQyAvKiBK
U1N0cmluZ1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZBQUIzODBCNjZBOTQ0MDBFNTVG
MTYgLyogSlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQwQzE1N0VF
MDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQyMDgsNiArNDIyMyw3IEBACiAJCQkJMEY0NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50
RXhjZXB0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUy
NzIgLyogTExJbnRTbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzOUMxNEJD
RjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNEUx
QTEzMTczQUYwN0UwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50
ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVE
IC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9u
IDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYKIH0KIAotdm9pZCBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yQ2hhaW4oR2V0QnlJZFN0YXR1cyYgcmVzdWx0LCBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit2b2lkIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JDaGFpbihHZXRCeUlkU3RhdHVzJiByZXN1bHQsIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgU3RyaW5nSW1wbCogdWlkKQogewogI2lmIEVOQUJMRShKSVQpICYm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAvLyBWYWxpZGF0ZSB0aGUgY2hhaW4uIElmIHRo
ZSBjaGFpbiBpcyBpbnZhbGlkLCB0aGVuIGN1cnJlbnRseSB0aGUgYmVzdCB0aGluZwpAQCAtNzcs
MTcgKzc3LDEzIEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKEdldEIKICAg
ICAvLyBoYXZlIG5vdyBpcyB0aGF0IGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQg
YmV0d2VlbiB3aGVuIGl0IHdhcwogICAgIC8vIGNhY2hlZCBvbiBpbiB0aGUgYmFzZWxpbmUgSklU
IGFuZCB3aGVuIHRoZSBERkcgdHJpZWQgdG8gaW5saW5lIHRoZSBhY2Nlc3MsCiAgICAgLy8gdGhl
biB3ZSBmYWxsIGJhY2sgb24gYSBwb2x5bW9ycGhpYyBhY2Nlc3MuCi0gICAgU3RydWN0dXJlKiBj
dXJyZW50U3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0
ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0Lm1fY2hhaW4uc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgQVNTRVJUKCFjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSk7Ci0gICAgICAgIGN1cnJlbnRPYmplY3QgPSBhc09iamVjdChjdXJyZW50U3RydWN0dXJlLT5w
cm90b3R5cGVGb3JMb29rdXAocHJvZmlsZWRCbG9jaykpOwotICAgICAgICBjdXJyZW50U3RydWN0
dXJlID0gcmVzdWx0Lm1fY2hhaW5baV07Ci0gICAgICAgIGlmIChjdXJyZW50T2JqZWN0LT5zdHJ1
Y3R1cmUoKSAhPSBjdXJyZW50U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoIXJlc3VsdC5tX2NoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIEFTU0VSVChjdXJyZW50T2JqZWN0KTsKKyAgICBKU09iamVjdCogY3VycmVu
dE9iamVjdCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOworICAgIFN0cnVj
dHVyZSogY3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7CisgICAgCisg
ICAgQVNTRVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKICAgICAgICAg
CiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1Zh
bHVlOwpAQCAtOTksMTMgKzk1LDEyIEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNo
YWluKEdldEIKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVj
dHVyZSk7CisgICAgcmVzdWx0Lm1fc3RydWN0dXJlU2V0LmFkZChyZXN1bHQubV9jaGFpbi0+aGVh
ZCgpKTsKICAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVl
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFNKHBy
b2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTSh1aWQpOwotICAgIFVOVVNFRF9QQVJBTShz
dHJ1Y3R1cmUpOwogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogI2VuZGlmCiB9CkBA
IC0yMTgsMjEgKzIxMywyMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOiB7CiAgICAgICAgIGlmICghc3R1
YkluZm8udS5nZXRCeUlkUHJvdG8uaXNEaXJlY3QpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uYXBwZW5k
KHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSk7Ci0gICAg
ICAgIGNvbXB1dGVGb3JDaGFpbigKLSAgICAgICAgICAgIHJlc3VsdCwgcHJvZmlsZWRCbG9jaywg
dWlkLAotICAgICAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSk7CisgICAgICAgIHJlc3VsdC5tX2NoYWluID0gYWRvcHRSZWYobmV3IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4oCisgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAorICAgICAgICAg
ICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKKyAg
ICAgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQo
KSkpOworICAgICAgICBjb21wdXRlRm9yQ2hhaW4ocmVzdWx0LCBwcm9maWxlZEJsb2NrLCB1aWQp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9jaGFpbjogewogICAgICAgICBpZiAoIXN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmlzRGly
ZWN0KQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywgdHJ1ZSk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHViSW5mby51LmdldEJ5SWRDaGFp
bi5jb3VudDsgKytpKQotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uYXBwZW5kKHN0dWJJbmZv
LnUuZ2V0QnlJZENoYWluLmNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotICAgICAgICBjb21wdXRl
Rm9yQ2hhaW4oCi0gICAgICAgICAgICByZXN1bHQsIHByb2ZpbGVkQmxvY2ssIHVpZCwKLSAgICAg
ICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkp
OworICAgICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKAorICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgIHN0dWJJbmZv
LnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksCisgICAgICAgICAgICBz
dHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwKKyAgICAgICAgICAgIHN0dWJJbmZv
LnUuZ2V0QnlJZENoYWluLmNvdW50KSk7CisgICAgICAgIGNvbXB1dGVGb3JDaGFpbihyZXN1bHQs
IHByb2ZpbGVkQmxvY2ssIHVpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJ
KHJldmlzaW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR2V0
QnlJZFN0YXR1c19oCiAjZGVmaW5lIEdldEJ5SWRTdGF0dXNfaAogCisjaW5jbHVkZSAiSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlU2V0LmgiCiAjaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+CkBAIC01OSw3ICs2
MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBHZXRCeUlkU3RhdHVzKAogICAgICAgICBTdGF0ZSBz
dGF0ZSwgYm9vbCB3YXNTZWVuSW5KSVQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
ID0gU3RydWN0dXJlU2V0KCksCi0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFs
aWRPZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKSwgVmVjdG9yPFN0cnVj
dHVyZSo+IGNoYWluID0gVmVjdG9yPFN0cnVjdHVyZSo+KCkpCisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFs
dWUoKSwgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IG51bGxwdHIp
CiAgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX3N0cnVjdHVyZVNldChzdHJ1
Y3R1cmVTZXQpCiAgICAgICAgICwgbV9jaGFpbihjaGFpbikKQEAgLTgyLDE5ICs4MywxOSBAQCBw
dWJsaWM6CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBN
YWtlc0NhbGxzOyB9CiAgICAgCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQo
KSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IFZlY3RvcjxTdHJ1
Y3R1cmUqPiYgY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluOyB9IC8vIFJldHVybnMgZW1w
dHkgdmVjdG9yIGlmIHRoaXMgaXMgYSBkaXJlY3QgYWNjZXNzLgorICAgIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKj4obV9jaGFpbi5nZXQoKSk7IH0gLy8gUmV0dXJucyBudWxsIGlmIHRoaXMgaXMg
YSBkaXJlY3QgYWNjZXNzLgogICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfSAvLyBSZXR1cm5zIEpTVmFsdWUoKSBpZiB0aGVyZSBpcyBu
byBzcGVjaWZpYyB2YWx1ZS4KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX29mZnNldDsgfQogICAgIAogICAgIGJvb2wgd2FzU2VlbkluSklUKCkgY29uc3QgeyBy
ZXR1cm4gbV93YXNTZWVuSW5KSVQ7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQg
Y29tcHV0ZUZvckNoYWluKEdldEJ5SWRTdGF0dXMmIHJlc3VsdCwgQ29kZUJsb2NrKiwgU3RyaW5n
SW1wbCogdWlkLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlRm9yQ2hhaW4o
R2V0QnlJZFN0YXR1cyYgcmVzdWx0LCBDb2RlQmxvY2sqLCBTdHJpbmdJbXBsKiB1aWQpOwogICAg
IHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBTdGF0ZSBtX3N0
YXRlOwogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKLSAgICBWZWN0b3I8U3RydWN0
dXJlKj4gbV9jaGFpbjsKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFp
bjsKICAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29m
ZnNldDsKICAgICBib29sIG1fd2FzU2VlbkluSklUOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ5NzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw3ICs3Miw5IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZyb20KICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7
CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0
dXJlLCBuZXdTdHJ1Y3R1cmUsIGNoYWluLCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKAorICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwK
KyAgICAgICAgYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9j
aywgc3RydWN0dXJlLCBjaGFpbikpLCBvZmZzZXQpOwogI2Vsc2UKICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhOb0luZm9ybWF0aW9uLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKICNlbmRpZgpA
QCAtMTI1LDcgKzEyNyw5IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLAogICAgICAgICAgICAgICAgIHN0
dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCiAgICAg
ICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCks
Ci0gICAgICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQo
KSwKKyAgICAgICAgICAgICAgICBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigK
KyAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpLAogICAgICAgICAgICAgICAg
IG9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CkBAIC0xNzIsOSArMTc2LDEyIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBpZiAoc3RydWN0dXJl
LT50eXBlSW5mbygpLnR5cGUoKSA9PSBTdHJpbmdUeXBlKQogICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbj4gY2hhaW47CiAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICBjaGFpbiA9IGFk
b3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KSk7CisgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBzZXR0
ZXJzIG9yIHJlYWQtb25seSBwcm9wZXJ0aWVzLCB0aGVuIGdpdmUgdXAuCi0gICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgdWlkKSkKKyAg
ICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCB1aWQpKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhc24ndCBiZWVuIG5vcm1hbGl6ZWQgKGkuZS4g
dGhlcmUgYXJlIHByb3hpZXMgb3IgZGljdGlvbmFyaWVzKQpAQCAtMTg0LDcgKzE5MSw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgLy8gZGljdGlv
bmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IHRob3NlIG9iamVjdHMg
d2VyZSBuZXZlciB1c2VkIGFzCiAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUg
cHJvdG90eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBv
ZgogICAgICAgICAvLyB0aGUgb3RoZXIgY2hlY2tzIGJlbG93IHdpbGwgZmFpbC4KLSAgICAgICAg
aWYgKCFpc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkp
CisgICAgICAgIGlmICghY2hhaW4tPmlzTm9ybWFsaXplZCgpKQogICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQogICAgIApAQCAtMjA3LDkgKzIx
NCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBBU1NF
UlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpKTsKICAg
ICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKLSAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cygKLSAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCB0cmFuc2l0aW9u
LAotICAgICAgICBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKHZtLCBnbG9iYWxPYmplY3QpLCBv
ZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVRyYW5zaXRpb24sIHN0cnVj
dHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZzZXQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2lmbmRlZiBQdXRCeUlkU3RhdHVzX2gKICNkZWZpbmUgUHV0QnlJZFN0YXR1c19oCiAKKyNp
bmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZz
ZXQuaCIKICNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdJbXBsLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RhdGUgc3RhdGUs
CiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLAorICAg
ICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHN0cnVjdHVyZUNoYWluLAog
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkK
ICAgICAgICAgLCBtX29sZFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmUpCkBAIC0xMDMsNyArMTA0LDcg
QEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7IH0KICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmV3U3RydWN0dXJlOyB9Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVj
dHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbjsgfQorICAgIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmVDaGFpbi5nZXQoKTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgCiBwcml2YXRlOgpAQCAtMTEyLDcgKzExMyw3IEBAIHBy
aXZhdGU6CiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBTdHJ1Y3R1cmUqIG1fb2xkU3RydWN0dXJl
OwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIG1f
c3RydWN0dXJlQ2hhaW47CisgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fc3Ry
dWN0dXJlQ2hhaW47CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNyArMTI3Nyw3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgICAgICAgICAgLy8gQXNzZXJ0
IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUgY29tcHV0ZUZvcigpIG1l
dGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBiZSBhYmxlIHRvIHJldHVy
bi4KICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXN0YXR1cy5jaGFpbigpKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lm
aWNWYWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9n
cmFwaCwgc3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ5NzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MjUsMTIgKzE3MjUsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
R2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoZ2V0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVT
ZXQoKSkpLCBiYXNlKTsKICAgICAKLSAgICBpZiAoIWdldEJ5SWRTdGF0dXMuY2hhaW4oKS5pc0Vt
cHR5KCkpIHsKKyAgICBpZiAoZ2V0QnlJZFN0YXR1cy5jaGFpbigpKSB7CisgICAgICAgIG1fZ3Jh
cGgubV9jaGFpbnMuYWRkTGF6aWx5KGdldEJ5SWRTdGF0dXMuY2hhaW4oKSk7CiAgICAgICAgIFN0
cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGdldEJ5SWRTdGF0dXMuc3RydWN0dXJlU2V0KCku
c2luZ2xldG9uU3RydWN0dXJlKCk7CiAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0g
MDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdldEJ5SWRTdGF0dXMuY2hhaW4o
KS5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2V0QnlJ
ZFN0YXR1cy5jaGFpbigpLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY3VycmVudE9iamVj
dCA9IGFzT2JqZWN0KGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykpOwotICAgICAgICAgICAgY3VycmVudFN0cnVjdHVyZSA9
IGdldEJ5SWRTdGF0dXMuY2hhaW4oKVtpXTsKKyAgICAgICAgICAgIGN1cnJlbnRTdHJ1Y3R1cmUg
PSBnZXRCeUlkU3RhdHVzLmNoYWluKCktPmF0KGkpOwogICAgICAgICAgICAgYmFzZSA9IGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjayhjdXJyZW50T2JqZWN0LCBjdXJyZW50U3RydWN0dXJlKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTI2MDgsMTMgKzI2MDksMTQgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NE
YXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2UocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSk7
CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlk
ZW50aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFo
YXNFeGl0U2l0ZQotICAgICAgICAgICAgICAgICAgICAgICAmJiBwdXRCeUlkU3RhdHVzLmlzU2lt
cGxlVHJhbnNpdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZUNoYWlu
SXNTdGlsbFZhbGlkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSkpIHsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoCisgICAgICAgICAgICAgICAgIWhhc0V4aXRTaXRlCisg
ICAgICAgICAgICAgICAgJiYgcHV0QnlJZFN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKQorICAg
ICAgICAgICAgICAgICYmICghcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpCisgICAgICAg
ICAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+aXNTdGlsbFZh
bGlkKCkpKSB7CiAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY2hhaW5zLmFkZExhemlseShw
dXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCkpOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAg
ICAgICAgICAgIGlmICghZGlyZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcHV0QnlJ
ZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKQEAg
LTI2MjIsOCArMjYyNCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVy
ZSgpLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4qIGl0ID0gcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5oZWFk
KCk7ICppdDsgKytpdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5
cGUgPSAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHB1
dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+YXQoaSktPnN0b3JlZFByb3RvdHlwZSgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0OTc2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1
cy5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0
YXR1cy5jaGFpbigpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMu
Y2hhaW4oKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5z
aW5nbGV0b25TdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIE5vdyBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZSwgcHVzaCB0aGUg
Q0ZBIGZvcndhcmQgb3ZlciB0aGUgR2V0QnlJZApAQCAtMjU5LDggKzI1OSwxMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0b3JlZFByb3Rv
dHlwZSgpLmFzQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiogaXQgPSBzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+aGVhZCgpOyAqaXQ7ICsr
aXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9ICgq
aXQpLT5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV9jaGFpbnMuYWRkTGF6aWx5KHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gc3RhdHVzLnN0cnVjdHVyZUNo
YWluKCktPmF0KGkpLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90
eXBlLmlzQ2VsbCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFN0cnVjdHVyZUNoYWlucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitEZXNpcmVkU3RydWN0
dXJlQ2hhaW5zOjpEZXNpcmVkU3RydWN0dXJlQ2hhaW5zKCkgeyB9CitEZXNpcmVkU3RydWN0dXJl
Q2hhaW5zOjp+RGVzaXJlZFN0cnVjdHVyZUNoYWlucygpIHsgfQorCitib29sIERlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIW1fdmVjdG9y
W2ldLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Rlc2lyZWRT
dHJ1Y3R1cmVDaGFpbnNfaAorI2RlZmluZSBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIERlc2lyZWRTdHJ1Y3R1
cmVDaGFpbnMgeworcHVibGljOgorICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMoKTsKKyAgICB+
RGVzaXJlZFN0cnVjdHVyZUNoYWlucygpOworICAgIAorICAgIHZvaWQgYWRkTGF6aWx5KFBhc3NS
ZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4pCisgICAgeworICAgICAgICBtX3Zl
Y3Rvci5hcHBlbmQoY2hhaW4pOworICAgIH0KKyAgICAKKyAgICBib29sIGFyZVN0aWxsVmFsaWQo
KSBjb25zdDsKK3ByaXZhdGU6CisgICAgVmVjdG9yPFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNo
YWluPiA+IG1fdmVjdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdEZXNpcmVkU3RydWN0dXJlQ2hh
aW5zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MzAsNiArNDMwLDEyIEBAIHZvaWQgR3JhcGg6OnJlc2V0RXhpdFN0
YXRlcygpCiAgICAgfQogfQogCitib29sIEdyYXBoOjppc1N0aWxsVmFsaWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2No
YWlucy5hcmVTdGlsbFZhbGlkKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
NDk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdBc3NlbWJseUhlbHBlcnMuaCIK
ICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHRGVzaXJlZElkZW50aWZp
ZXJzLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oIgogI2luY2x1ZGUg
IkRGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNp
bmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgpAQCAtNjk1LDYgKzY5Niw4IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0Owor
ICAgIAogICAgIFZNJiBtX3ZtOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVm
UHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gbV9jb21waWxhdGlvbjsKQEAgLTcyNCw2ICs3Mjcs
NyBAQCBwdWJsaWM6CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbV9tdXN0SGFuZGxlVmFsdWVzOwog
ICAgIERlc2lyZWRXYXRjaHBvaW50cyBtX3dhdGNocG9pbnRzOwogICAgIERlc2lyZWRJZGVudGlm
aWVycyBtX2lkZW50aWZpZXJzOworICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMgbV9jaGFpbnM7
CiAgICAgCiAgICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBtX2ZpeHBvaW50U3RhdGU7CiAg
ICAgR3JhcGhGb3JtIG1fZm9ybTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDcgKzI3
NSw3IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQogCiBib29sIEpJVENvbXBpbGVyOjps
aW5rKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSkKIHsKLSAgICBpZiAoIW1fZ3JhcGgubV93
YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpCisgICAgaWYgKCFtX2dyYXBoLmlzU3RpbGxWYWxp
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAg
LTM3Miw3ICszNzIsNyBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogCiBi
b29sIEpJVENvbXBpbGVyOjpsaW5rRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGVudHJ5V2l0aEFyaXR5Q2hlY2spCiB7Ci0gICAgaWYg
KCFtX2dyYXBoLm1fd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZCgpKQorICAgIGlmICghbV9ncmFw
aC5pc1N0aWxsVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gPT09IExp
bmsgPT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9u
IDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZUVudHJ5KENDYWxs
SGVscGVycyYgagogCiBib29sIGxpbmsoU3RhdGUmIHN0YXRlLCBSZWZQdHI8SlNDOjpKSVRDb2Rl
PiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2sp
CiB7Ci0gICAgaWYgKCFzdGF0ZS5ncmFwaC5tX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkg
eworICAgIGlmICghc3RhdGUuZ3JhcGguaXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgTExWTURp
c3Bvc2VFeGVjdXRpb25FbmdpbmUoc3RhdGUuZW5naW5lKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVh
ZCkKKyAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKKyAgICAsIG1faGVhZChoZWFk
KQoreworICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gaGVhZDsgY3VycmVudDsgY3VycmVu
dCA9IGN1cnJlbnQtPnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpKQorICAgICAgICBtX3ZlY3Rv
ci5hcHBlbmQoY3VycmVudCk7Cit9CisKK0ludGVuZGVkU3RydWN0dXJlQ2hhaW46OkludGVuZGVk
U3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3Ry
dWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpCisgICAgOiBtX2dsb2JhbE9iamVjdChjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKQorICAgICwgbV9oZWFkKGhlYWQpCit7CisgICAgbV92ZWN0b3Iu
YXBwZW5kKHByb3RvdHlwZVN0cnVjdHVyZSk7Cit9CisKK0ludGVuZGVkU3RydWN0dXJlQ2hhaW46
OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSog
aGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQorICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkKKyAgICAsIG1faGVhZChoZWFkKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGNoYWluLT5oZWFkKClbaV07ICsraSkKKyAgICAgICAgbV92ZWN0b3IuYXBw
ZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOworfQorCitJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
OjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUq
IGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY291bnQpCisgICAgOiBtX2ds
b2JhbE9iamVjdChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQorICAgICwgbV9oZWFkKGhlYWQp
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIG1f
dmVjdG9yLmFwcGVuZChjaGFpbi0+aGVhZCgpW2ldLmdldCgpKTsKK30KKworSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6fkludGVuZGVkU3RydWN0dXJlQ2hhaW4oKQoreworfQorCitib29sIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW46OmlzU3RpbGxWYWxpZCgpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSBj
dXJyZW50UHJvdG90eXBlID0gbV9oZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9iYWxPYmpl
Y3QpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoYXNPYmplY3QoY3VycmVudFByb3RvdHlwZSktPnN0cnVjdHVyZSgpICE9
IG1fdmVjdG9yW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjdXJyZW50
UHJvdG90eXBlID0gbV92ZWN0b3JbaV0tPnN0b3JlZFByb3RvdHlwZSgpOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXRjaGVzKFN0
cnVjdHVyZUNoYWluKiBjaGFpbikgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdmVjdG9yW2ldICE9IGNo
YWluLT5oZWFkKClbaV0uZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGlmIChjaGFpbi0+aGVhZCgpW21fdmVjdG9yLnNpemUoKV0pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3RydWN0dXJlQ2hhaW4qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OmNoYWluKFZNJiB2bSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNTdGlsbFZh
bGlkKCkpOworICAgIFN0cnVjdHVyZUNoYWluKiByZXN1bHQgPSBTdHJ1Y3R1cmVDaGFpbjo6Y3Jl
YXRlKHZtLCBtX2hlYWQpOworICAgIEFTU0VSVChtYXRjaGVzKHJlc3VsdCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Jvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0
U3RvcmVUbyhWTSYgdm0sIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKKyAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOworICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFk
T25seSB8IEFjY2Vzc29yKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjppc05vcm1hbGl6ZWQoKQoreworICAgIGlmIChtX2hlYWQtPnR5cGVJbmZv
KCkudHlwZSgpID09IFByb3h5VHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1fdmVjdG9yW2ldOworICAgICAgICBpZiAoc3RydWN0dXJlLT50
eXBlSW5mbygpLnR5cGUoKSA9PSBQcm94eVR5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSlNPYmplY3QqIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW46OnRlcm1pbmFsUHJvdG90eXBlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoIW1fdmVjdG9yLmlzRW1wdHkoKSk7CisgICAgaWYgKG1fdmVjdG9yLnNpemUoKSA9PSAxKQor
ICAgICAgICByZXR1cm4gYXNPYmplY3QobV9oZWFkLT5wcm90b3R5cGVGb3JMb29rdXAobV9nbG9i
YWxPYmplY3QpKTsKKyAgICByZXR1cm4gYXNPYmplY3QobV92ZWN0b3JbbV92ZWN0b3Iuc2l6ZSgp
IC0gMl0tPnN0b3JlZFByb3RvdHlwZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCisjZGVmaW5l
IEludGVuZGVkU3RydWN0dXJlQ2hhaW5faAorCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVC
bG9jazsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgU3RydWN0dXJlQ2hhaW47CitjbGFz
cyBWTTsKKworY2xhc3MgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiA6IHB1YmxpYyBSZWZDb3VudGVk
PEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHsKK3B1YmxpYzoKKyAgICBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZCk7Cisg
ICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
KiBoZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSk7CisgICAgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4pOworICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25l
ZCBjb3VudCk7CisgICAgfkludGVuZGVkU3RydWN0dXJlQ2hhaW4oKTsKKyAgICAKKyAgICBib29s
IGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIGJvb2wgbWF0Y2hlcyhTdHJ1Y3R1cmVDaGFpbiop
IGNvbnN0OworICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbihWTSYpIGNvbnN0OworICAgIGJvb2wg
bWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFN0cmluZ0ltcGwqIHVpZCk7CisgICAgYm9vbCBpc05v
cm1hbGl6ZWQoKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGhlYWQoKSBjb25zdCB7IHJldHVybiBt
X2hlYWQ7IH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
LnNpemUoKTsgfQorICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3Zl
Y3RvcltpbmRleF07IH0KKyAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7
IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAKKyAgICBKU09iamVjdCogdGVybWluYWxQcm90b3R5
cGUoKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBt
X3ZlY3Rvci5sYXN0KCk7IH0KK3ByaXZhdGU6CisgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFs
T2JqZWN0OworICAgIFN0cnVjdHVyZSogbV9oZWFkOworICAgIFZlY3RvcjxTdHJ1Y3R1cmUqPiBt
X3ZlY3RvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3MCwxMyArOTcwLDkgQEAg
dm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICB0aGlzT2Jq
ZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFN0cmluZ0ltcGwqIHVp
ZCkKK2Jvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0m
IHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIC8vIE5vdGUsIHRoaXMgbWV0
aG9kIGlzIGNhbGxlZCBmcm9tIHR3byBraW5kcyBvZiBwbGFjZXM6ICgxKSBhc3NlcnRpb25zIGFu
ZCAoMikKLSAgICAvLyB0aGUgY29tcGlsYXRpb24gdGhyZWFkLiBBcyBzdWNoLCBpdCBkb2VzIHRo
aW5ncyBzb21ld2hhdCBjYXJlZnVsbHkgdG8gZW5zdXJlCi0gICAgLy8gdGhyZWFkIHNhZmV0eS4g
Q3VycmVudGx5IHRoYXQgb25seSBhZmZlY3RzIHRoZSB3YXkgd2UgZG8gU3RydWN0dXJlOjpnZXQo
KS4KLSAgICAKLSAgICB1bnNpZ25lZCBpID0gdG9VSW50MzJGcm9tU3RyaW5nSW1wbCh1aWQpOwor
ICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwogICAgIGlmIChpICE9IFBy
b3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAgICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5N
YXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKTsKICAgICAKQEAgLTk4OSw3ICs5ODUsNyBAQCBi
b29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlCiAgICAgICAgIAogICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldENvbmN1cnJlbnRseSh2
bSwgdWlkLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNw
ZWNpZmljVmFsdWUpOwogICAgICAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTAwMCwxMSArOTk2LDYgQEAgYm9v
bCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAgIH0KIH0KIAotYm9vbCBT
dHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIHByb3RvdHlwZUNoYWluTWF5SW50
ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKLX0KLQogI2lmIERPX1BST1BF
UlRZTUFQX0NPTlNURU5DWV9DSEVDSwogCiB2b2lkIFByb3BlcnR5VGFibGU6OmNoZWNrQ29uc2lz
dGVuY3koKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHJldmlzaW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDggQEAgcHVibGljOgogICAgIHZv
aWQgc2V0R2xvYmFsT2JqZWN0KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkg
eyBtX2dsb2JhbE9iamVjdC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KICAgICAgICAg
CiAgICAgSlNWYWx1ZSBzdG9yZWRQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlw
ZS5nZXQoKTsgfQorICAgIEpTT2JqZWN0KiBzdG9yZWRQcm90b3R5cGVPYmplY3QoKSBjb25zdDsK
KyAgICBTdHJ1Y3R1cmUqIHN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpIGNvbnN0OwogICAgIEpT
VmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIEpTVmFsdWUg
cHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgSlNWYWx1ZSBw
cm90b3R5cGVGb3JMb29rdXAoQ29kZUJsb2NrKikgY29uc3Q7CkBAIC0xNjIsNyArMTY0LDYgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKICAgICAgICAgCiAgICAgLy8gV2lsbCBqdXN0IHRoZSBwcm90b3R5cGUgY2hhaW4gaW50
ZXJjZXB0IHRoaXMgcHJvcGVydHkgYWNjZXNzPwotICAgIGJvb2wgcHJvdG90eXBlQ2hhaW5NYXlJ
bnRlcmNlcHRTdG9yZVRvKFZNJiwgU3RyaW5nSW1wbCogdWlkKTsKICAgICBib29sIHByb3RvdHlw
ZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIAog
ICAgIGJvb2wgdHJhbnNpdGlvbkRpZEludm9sdmVTcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1
cm4gISFtX3NwZWNpZmljVmFsdWVJblByZXZpb3VzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxNDk3NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDIyIEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6Y3JlYXRlKFZNJiAKICAgICByZXR1cm4gbmV3U3RydWN0dXJlOwogfQogCitpbmxpbmUgSlNP
YmplY3QqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgY29uc3QKK3sKKyAgICBK
U1ZhbHVlIHZhbHVlID0gbV9wcm90b3R5cGUuZ2V0KCk7CisgICAgaWYgKHZhbHVlLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYXNPYmplY3QodmFsdWUpOworfQorCitp
bmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpIGNv
bnN0Cit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IHN0b3JlZFByb3RvdHlwZU9iamVjdCgpOwor
ICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gb2JqZWN0LT5z
dHJ1Y3R1cmUoKTsKK30KKwogaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQoIWlzQ29tcGls
YXRpb25UaHJlYWQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201250</attachid>
            <date>2013-05-09 10:33:38 -0700</date>
            <delta_ts>2013-05-09 10:50:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47218</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5ODIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAorMjAxMy0wNS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgaGF2ZSBpdHMgb3duIG5vdGlvbiBvZiBTdHJ1Y3R1cmVD
aGFpbiwgYW5kIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB2YWxpZGF0ZSBpdCBhZnRlciBjb21w
aWxhdGlvbiBmaW5pc2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1ODQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiwgd2hpY2gg
aXMgbGlrZSBTdHJ1Y3R1cmVDaGFpbiwgZXhjZXB0IHRoYXQgaXQgaG9sZHMgYSBiaXQKKyAgICAg
ICAgbW9yZSBpbmZvcm1hdGlvbiBhbmQgY2FuIGJlIHZhbGlkYXRlZCBpbmRlcGVuZGFudGx5IG9m
IGl0cyBvd25pbmcgU3RydWN0dXJlIGFuZCBsZXhpY2FsCisgICAgICAgIEdsb2JhbE9iamVjdCwg
c2luY2UgaXQgcmVtZW1iZXJzIGJvdGggb2YgdGhvc2UgdGhpbmdzLiBJdCdzIGFsc28gbWFsbG9j
J2QgYW5kIFJlZkNvdW50ZWQKKyAgICAgICAgcmF0aGVyIHRoYW4gR0MnZCwgc28gaXQgY2FuIGJl
IGFsbG9jYXRlZCBpbiBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkLgorICAgICAgICAK
KyAgICAgICAgR2F2ZSB0aGlzIGNsYXNzIGEgYnVuY2ggb2YgbWV0aG9kcyB0byBhbGxvdyB0aGUg
Zm9sbG93aW5nIGlkaW9tOgorICAgICAgICAKKyAgICAgICAgLSBTbmFwc2hvdCBhIHN0cnVjdHVy
ZSBjaGFpbiBjb25jdXJyZW50bHkuIFRoaXMgc3RydWN0dXJlIGNoYWluIG1heSBlbmQgdXAgYmVp
bmcKKyAgICAgICAgICB3cm9uZyBpbiBjYXNlIG9mIHJhY2VzLCBidXQgaW4gdGhhdCBjYXNlIHdl
IHdpbGwgZmluZCBvdXQgd2hlbiB3ZSB0cnkgdG8gdmFsaWRhdGUKKyAgICAgICAgICBpdC4KKyAg
ICAgICAgCisgICAgICAgIC0gUGVyZm9ybSB2YWxpZGF0aW9uIG9uIHRoZSBzdHJ1Y3R1cmUgY2hh
aW4gaXRzZWxmLCB3aXRob3V0IHJlY29tcHV0aW5nIHRoZSBjaGFpbi4KKyAgICAgICAgICBQcmV2
aW91c2x5LCBtYW55IGNoYWluIHZhbGlkYXRpb24gbWV0aG9kcyAocHJvdG90eXBlQ2hhaW5NYXlJ
bnRlcmNlcHRTdG9yZVRvKCkgZm9yCisgICAgICAgICAgZXhhbXBsZSkgcmVjb21wdXRlZCB0aGUg
Y2hhaW4sIGFuZCBoZW5jZSwgd2VyZSBpbmhlcmVudGx5IHJhY3k6IHlvdSBjb3VsZCBidWlsZCBv
bmUKKyAgICAgICAgICBjaGFpbiBhbmQgdGhlbiB2YWxpZGF0ZSBhZ2FpbnN0IGEgZGlmZmVyZW50
IGNoYWluLCBhbmQgaGVuY2Ugbm90IHJlYWxpemUgdGhhdCB0aGUKKyAgICAgICAgICBjaGFpbiB5
b3UgZGlkIGJ1aWxkIHdhcyBhY3R1YWxseSBicm9rZW4gZm9yIHlvdXIgcHVycG9zZXMsIGJlY2F1
c2UgdGhlIGNoYWluIHlvdQorICAgICAgICAgIGNoZWNrZWQgd2FzIGEgZGlmZmVyZW50IG9uZS4K
KyAgICAgICAgCisgICAgICAgIC0gVmFsaWRhdGUgdGhhdCB0aGUgY2hhaW4gaXMgc3RpbGwgdGhl
IHJpZ2h0IG9uZSBhdCBhbnkgdGltZSwgYWxsb3dpbmcgdGhlIGNhbmNlbGxhdGlvbgorICAgICAg
ICAgIG9mIGNvbXBpbGF0aW9uIGlmIHRoZXJlIHdhcyBhIHJhY2UuCisgICAgICAgIAorICAgICAg
ICBBbHNvIGFkZGVkIERGRzo6RGVzaXJlZFN0cnVjdHVyZUNoYWlucywgd2hpY2ggdHJhY2tzIHRo
b3NlIGludGVuZGVkIHN0cnVjdHVyZSBjaGFpbnMgdGhhdAorICAgICAgICB0aGUgY29tcGlsZXIg
aGFkIGFscmVhZHkgY2hvc2VuIHRvIHVzZS4gSWYgYW55IG9mIHRob3NlIGFyZSBpbnZhbGlkIGF0
IGxpbmsgdGltZSwgdGhyb3cKKyAgICAgICAgb3V0IHRoZSBjb21waWxhdGlvbi4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JDaGFpbik6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6R2V0QnlJZFN0YXR1cyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0
dXM6OmNoYWluKToKKyAgICAgICAgKEdldEJ5SWRTdGF0dXMpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRl
RnJvbUxMSW50KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6Cisg
ICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpQdXRCeUlk
U3RhdHVzOjpQdXRCeUlkU3RhdHVzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6c3Ry
dWN0dXJlQ2hhaW4pOgorICAgICAgICAoUHV0QnlJZFN0YXR1cyk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4
ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZv
bGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6RGVzaXJlZFN0cnVjdHVyZUNoYWluczo6RGVzaXJlZFN0cnVjdHVyZUNoYWlucyk6CisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZFN0cnVjdHVyZUNoYWluczo6fkRlc2lyZWRTdHJ1Y3R1cmVD
aGFpbnMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRTdHJ1Y3R1cmVDaGFpbnM6OmFyZVN0
aWxsVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmg6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRTdHJ1Y3R1cmVDaGFpbnM6OmFkZExhemlseSk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNT
dGlsbFZhbGlkKToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmxpbmtGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbik6CisgICAgICAgIChKU0M6
OkludGVuZGVkU3RydWN0dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKToKKyAgICAg
ICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKToKKyAgICAgICAg
KEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyk6CisgICAgICAgIChKU0M6Oklu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OmNoYWluKToKKyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyk6CisgICAgICAgIChKU0M6OkludGVuZGVk
U3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCk6CisgICAgICAgIChKU0M6OkludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OnRlcm1pbmFsUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0ludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbik6CisgICAgICAgIChKU0M6OkludGVuZGVkU3RydWN0dXJlQ2hh
aW46OmhlYWQpOgorICAgICAgICAoSlNDOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpzaXplKToK
KyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6YXQpOgorICAgICAgICAoSlND
OjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6SW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bGFzdCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0
U3RvcmVUbyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlT2JqZWN0KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKToKKwogMjAx
My0wNS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGJy
b2tlbiAzMi1iaXQgYnVpbGQgKyBzb21lIGNsZWFuIHVwIGluIEpJVFN0dWJzLmNwcC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwxMCBAQAogCQkwRjQ2ODBENDE0QkJEMjQ5MDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5jcHAgKi87IH07CiAJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUw
OEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovOyB9OworCQkwRjRFMUEwRTE3M0FFRERDMDA3RUUy
RDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwQzE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CisJCTBGNEUxQTBGMTczQUVEREMwMDdFRTJEMyAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGNEUxQTEyMTczQUYwN0IwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hh
aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRF
MUExMTE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEUxQTEzMTcz
QUYwN0UwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTEwMTczQUYwNzgwMDdF
RTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLzsgfTsKIAkJMEY1NTQxQjEx
NjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBT
cGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBT
cGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUMxOTQxNzI3
NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERG
R0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpAQCAtMTEzNCw2ICsxMTM4LDEwIEBACiAJCTBGNDY4
MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9z
dENhbGxSZXR1cm5WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIb3N0
Q2FsbFJldHVyblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4
MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVuZGVk
U3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRFMUEw
RDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEUxQTEwMTczQUYwNzgwMDdFRTJEMyAvKiBERkdEZXNp
cmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRFMUExMTE3M0FGMDc4MDA3RUUyRDMg
LyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVk
U3RydWN0dXJlQ2hhaW5zLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3BlY2lhbFBvaW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1
NDFCMDE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3BlY2lhbFBvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5j
cHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNjEzLDYgKzI2MjEsOCBAQAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdC
MiAvKiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyog
SW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1
IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKKwkJCQkwRjRFMUEwQzE3M0FFRERDMDA3RUUy
RDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCisJCQkJMEY0RTFBMEQxNzNBRURE
QzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBF
MTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0Ew
RTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQk4NkJGNjQyQTE0
OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8sCkBAIC0yNjM0LDggKzI2NDQsNiBAQAog
CQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICovLAogCQkJ
CUY2OTJBODVFMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNwcCAqLywKIAkJCQlGNjky
QTg1RjAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5oICovLAotCQkJCUUxOEUzQTU3MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8sCi0JCQkJRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0
IC8qIFZNLmggKi8sCiAJCQkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0EyIC8qIEpTR2xvYmFsT2Jq
ZWN0LmNwcCAqLywKIAkJCQlBOEU4OTQzMzBDRDA2MDNGMDAzNjcxNzkgLyogSlNHbG9iYWxPYmpl
Y3QuaCAqLywKIAkJCQlCQzc1NkZDNjBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuY3BwICovLApAQCAtMjc3NCw2ICsyNzgyLDggQEAKIAkJCQk1RDUzNzI2RTBFMUM1
NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oICovLAogCQkJCTBGRUIzRUNCMTYyMzdGNDcwMEFCNjdB
RCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEwMDIz
RDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKKwkJCQlFMThFM0E1NzBERjkyNzhDMDBE
OTBCMzQgLyogVk0uY3BwICovLAorCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5o
ICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywKIAkJ
CQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENC
Nzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKQEAgLTI4MTcsNiArMjgy
Nyw4IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNEUxQTEwMTczQUYwNzgwMDdFRTJE
MyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLywKKwkJCQkwRjRFMUExMTE3M0FG
MDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovLAogCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNTVD
MTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAgLTMxOTEs
NiArMzIwMyw3IEBACiAJCQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxs
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4
MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0
aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzQsNiArMzI4Nyw3IEBACiAJCQkJMEZDMDk3NkEx
NDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5
NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRFMUExMjE3M0FGMDdCMDA3RUUyRDMgLyogREZH
RGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVG
OTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1RTE0
RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsu
aCBpbiBIZWFkZXJzICovLApAQCAtNDE4NCw2ICs0MTk4LDcgQEAKIAkJCQkxNDI4MDgzQTEwN0VD
MDc1MDAxM0U3QjIgLyogSlNTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENTEw
N0VDMzc2MDA0MjdBNDggLyogSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjYwMEI1
QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCNzRFMEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0cmlu
Z1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZBQUIzODBCNjZBOTQ0MDBFNTVGMTYgLyog
SlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQwQzE1N0VFMDlGMDA0
QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyMDgs
NiArNDIyMyw3IEBACiAJCQkJMEY0NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyog
TExJbnRTbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAw
ODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNEUxQTEzMTcz
QUYwN0UwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1h
Y2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE0OTc2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYKIH0KIAotdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yQ2hhaW4oR2V0QnlJZFN0YXR1cyYgcmVzdWx0LCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit2b2lkIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JDaGFpbihHZXRCeUlkU3RhdHVzJiByZXN1bHQsIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgU3RyaW5nSW1wbCogdWlkKQogewogI2lmIEVOQUJMRShKSVQpICYmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKICAgICAvLyBWYWxpZGF0ZSB0aGUgY2hhaW4uIElmIHRoZSBjaGFp
biBpcyBpbnZhbGlkLCB0aGVuIGN1cnJlbnRseSB0aGUgYmVzdCB0aGluZwpAQCAtNzcsMTcgKzc3
LDEzIEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKEdldEIKICAgICAvLyBo
YXZlIG5vdyBpcyB0aGF0IGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQgYmV0d2Vl
biB3aGVuIGl0IHdhcwogICAgIC8vIGNhY2hlZCBvbiBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB3
aGVuIHRoZSBERkcgdHJpZWQgdG8gaW5saW5lIHRoZSBhY2Nlc3MsCiAgICAgLy8gdGhlbiB3ZSBm
YWxsIGJhY2sgb24gYSBwb2x5bW9ycGhpYyBhY2Nlc3MuCi0gICAgU3RydWN0dXJlKiBjdXJyZW50
U3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gMDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0Lm1fY2hhaW4uc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgQVNTRVJUKCFjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7Ci0g
ICAgICAgIGN1cnJlbnRPYmplY3QgPSBhc09iamVjdChjdXJyZW50U3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAocHJvZmlsZWRCbG9jaykpOwotICAgICAgICBjdXJyZW50U3RydWN0dXJlID0g
cmVzdWx0Lm1fY2hhaW5baV07Ci0gICAgICAgIGlmIChjdXJyZW50T2JqZWN0LT5zdHJ1Y3R1cmUo
KSAhPSBjdXJyZW50U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIXJlc3VsdC5tX2NoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIEFTU0VSVChjdXJyZW50T2JqZWN0KTsKKyAgICBKU09iamVjdCogY3VycmVudE9iamVj
dCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOworICAgIFN0cnVjdHVyZSog
Y3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7CisgICAgCisgICAgQVNT
RVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKICAgICAgICAgCiAgICAg
dW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwpA
QCAtOTksMTMgKzk1LDEyIEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKEdl
dEIKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7
CisgICAgcmVzdWx0Lm1fc3RydWN0dXJlU2V0LmFkZChyZXN1bHQubV9jaGFpbi0+aGVhZCgpKTsK
ICAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVlKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVk
QmxvY2spOwogICAgIFVOVVNFRF9QQVJBTSh1aWQpOwotICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1
cmUpOwogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogI2VuZGlmCiB9CkBAIC0yMTgs
MjEgKzIxMywyMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAg
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOiB7CiAgICAgICAgIGlmICghc3R1YkluZm8u
dS5nZXRCeUlkUHJvdG8uaXNEaXJlY3QpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uYXBwZW5kKHN0dWJJ
bmZvLnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgIGNv
bXB1dGVGb3JDaGFpbigKLSAgICAgICAgICAgIHJlc3VsdCwgcHJvZmlsZWRCbG9jaywgdWlkLAot
ICAgICAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIHJlc3VsdC5tX2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oCisgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAorICAgICAgICAgICAgc3R1
YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKKyAgICAgICAg
ICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSkpOwor
ICAgICAgICBjb21wdXRlRm9yQ2hhaW4ocmVzdWx0LCBwcm9maWxlZEJsb2NrLCB1aWQpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9j
aGFpbjogewogICAgICAgICBpZiAoIXN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmlzRGlyZWN0KQog
ICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywgdHJ1ZSk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jb3Vu
dDsgKytpKQotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uYXBwZW5kKHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotICAgICAgICBjb21wdXRlRm9yQ2hh
aW4oCi0gICAgICAgICAgICByZXN1bHQsIHByb2ZpbGVkQmxvY2ssIHVpZCwKLSAgICAgICAgICAg
IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworICAg
ICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAorICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgIHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksCisgICAgICAgICAgICBzdHViSW5m
by51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwKKyAgICAgICAgICAgIHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmNvdW50KSk7CisgICAgICAgIGNvbXB1dGVGb3JDaGFpbihyZXN1bHQsIHByb2Zp
bGVkQmxvY2ssIHVpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJldmlz
aW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR2V0QnlJZFN0
YXR1c19oCiAjZGVmaW5lIEdldEJ5SWRTdGF0dXNfaAogCisjaW5jbHVkZSAiSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU2V0LmgiCiAjaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+CkBAIC01OSw3ICs2MCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBHZXRCeUlkU3RhdHVzKAogICAgICAgICBTdGF0ZSBzdGF0ZSwg
Ym9vbCB3YXNTZWVuSW5KSVQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3Ry
dWN0dXJlU2V0KCksCi0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZz
ZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKSwgVmVjdG9yPFN0cnVjdHVyZSo+
IGNoYWluID0gVmVjdG9yPFN0cnVjdHVyZSo+KCkpCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IGludmFsaWRPZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKSwg
UGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IG51bGxwdHIpCiAgICAg
ICAgIDogbV9zdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVT
ZXQpCiAgICAgICAgICwgbV9jaGFpbihjaGFpbikKQEAgLTgyLDE5ICs4MywxOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBNYWtlc0Nh
bGxzOyB9CiAgICAgCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IFZlY3RvcjxTdHJ1Y3R1cmUq
PiYgY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluOyB9IC8vIFJldHVybnMgZW1wdHkgdmVj
dG9yIGlmIHRoaXMgaXMgYSBkaXJlY3QgYWNjZXNzLgorICAgIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKj4obV9jaGFpbi5nZXQoKSk7IH0gLy8gUmV0dXJucyBudWxsIGlmIHRoaXMgaXMgYSBkaXJl
Y3QgYWNjZXNzLgogICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3BlY2lmaWNWYWx1ZTsgfSAvLyBSZXR1cm5zIEpTVmFsdWUoKSBpZiB0aGVyZSBpcyBubyBzcGVj
aWZpYyB2YWx1ZS4KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQogICAgIAogICAgIGJvb2wgd2FzU2VlbkluSklUKCkgY29uc3QgeyByZXR1cm4g
bV93YXNTZWVuSW5KSVQ7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0
ZUZvckNoYWluKEdldEJ5SWRTdGF0dXMmIHJlc3VsdCwgQ29kZUJsb2NrKiwgU3RyaW5nSW1wbCog
dWlkLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlRm9yQ2hhaW4oR2V0QnlJ
ZFN0YXR1cyYgcmVzdWx0LCBDb2RlQmxvY2sqLCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIHN0YXRp
YyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBTdGF0ZSBtX3N0YXRlOwog
ICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKLSAgICBWZWN0b3I8U3RydWN0dXJlKj4g
bV9jaGFpbjsKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKICAg
ICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
ICAgICBib29sIG1fd2FzU2VlbkluSklUOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw3ICs3MiwxMCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGcm9tCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwogICAg
IAotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVRyYW5zaXRpb24sIHN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBjaGFpbiwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygK
KyAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsCisgICAg
ICAgIGNoYWluID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRC
bG9jaywgc3RydWN0dXJlLCBjaGFpbikpIDogMCwKKyAgICAgICAgb2Zmc2V0KTsKICNlbHNlCiAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9m
ZnNldCk7CiAjZW5kaWYKQEAgLTEyNSw3ICsxMjgsOSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwKICAg
ICAgICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0
dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24u
c3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5z
aXRpb24uY2hhaW4uZ2V0KCksCisgICAgICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5jaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkgOiAwLAogICAgICAgICAgICAgICAg
IG9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CkBAIC0xNzIsOSArMTc3LDEyIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBpZiAoc3RydWN0dXJl
LT50eXBlSW5mbygpLnR5cGUoKSA9PSBTdHJpbmdUeXBlKQogICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbj4gY2hhaW47CiAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICBjaGFpbiA9IGFk
b3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KSk7CisgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBzZXR0
ZXJzIG9yIHJlYWQtb25seSBwcm9wZXJ0aWVzLCB0aGVuIGdpdmUgdXAuCi0gICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgdWlkKSkKKyAg
ICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCB1aWQpKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhc24ndCBiZWVuIG5vcm1hbGl6ZWQgKGkuZS4g
dGhlcmUgYXJlIHByb3hpZXMgb3IgZGljdGlvbmFyaWVzKQpAQCAtMTg0LDcgKzE5Miw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgLy8gZGljdGlv
bmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IHRob3NlIG9iamVjdHMg
d2VyZSBuZXZlciB1c2VkIGFzCiAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUg
cHJvdG90eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBv
ZgogICAgICAgICAvLyB0aGUgb3RoZXIgY2hlY2tzIGJlbG93IHdpbGwgZmFpbC4KLSAgICAgICAg
aWYgKCFpc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkp
CisgICAgICAgIGlmICghY2hhaW4tPmlzTm9ybWFsaXplZCgpKQogICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQogICAgIApAQCAtMjA3LDkgKzIx
NSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBBU1NF
UlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpKTsKICAg
ICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKLSAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cygKLSAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCB0cmFuc2l0aW9u
LAotICAgICAgICBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKHZtLCBnbG9iYWxPYmplY3QpLCBv
ZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVRyYW5zaXRpb24sIHN0cnVj
dHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZzZXQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2lmbmRlZiBQdXRCeUlkU3RhdHVzX2gKICNkZWZpbmUgUHV0QnlJZFN0YXR1c19oCiAKKyNp
bmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZz
ZXQuaCIKICNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdJbXBsLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RhdGUgc3RhdGUs
CiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLAorICAg
ICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHN0cnVjdHVyZUNoYWluLAog
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkK
ICAgICAgICAgLCBtX29sZFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmUpCkBAIC0xMDMsNyArMTA0LDcg
QEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7IH0KICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmV3U3RydWN0dXJlOyB9Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVj
dHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbjsgfQorICAgIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmVDaGFpbi5nZXQoKTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgCiBwcml2YXRlOgpAQCAtMTEyLDcgKzExMyw3IEBAIHBy
aXZhdGU6CiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBTdHJ1Y3R1cmUqIG1fb2xkU3RydWN0dXJl
OwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIG1f
c3RydWN0dXJlQ2hhaW47CisgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fc3Ry
dWN0dXJlQ2hhaW47CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNyArMTI3Nyw3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgICAgICAgICAgLy8gQXNzZXJ0
IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUgY29tcHV0ZUZvcigpIG1l
dGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBiZSBhYmxlIHRvIHJldHVy
bi4KICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXN0YXR1cy5jaGFpbigpKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lm
aWNWYWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9n
cmFwaCwgc3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ5NzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MjUsMTIgKzE3MjUsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
R2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoZ2V0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVT
ZXQoKSkpLCBiYXNlKTsKICAgICAKLSAgICBpZiAoIWdldEJ5SWRTdGF0dXMuY2hhaW4oKS5pc0Vt
cHR5KCkpIHsKKyAgICBpZiAoZ2V0QnlJZFN0YXR1cy5jaGFpbigpKSB7CisgICAgICAgIG1fZ3Jh
cGgubV9jaGFpbnMuYWRkTGF6aWx5KGdldEJ5SWRTdGF0dXMuY2hhaW4oKSk7CiAgICAgICAgIFN0
cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGdldEJ5SWRTdGF0dXMuc3RydWN0dXJlU2V0KCku
c2luZ2xldG9uU3RydWN0dXJlKCk7CiAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0g
MDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdldEJ5SWRTdGF0dXMuY2hhaW4o
KS5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2V0QnlJ
ZFN0YXR1cy5jaGFpbigpLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY3VycmVudE9iamVj
dCA9IGFzT2JqZWN0KGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykpOwotICAgICAgICAgICAgY3VycmVudFN0cnVjdHVyZSA9
IGdldEJ5SWRTdGF0dXMuY2hhaW4oKVtpXTsKKyAgICAgICAgICAgIGN1cnJlbnRTdHJ1Y3R1cmUg
PSBnZXRCeUlkU3RhdHVzLmNoYWluKCktPmF0KGkpOwogICAgICAgICAgICAgYmFzZSA9IGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjayhjdXJyZW50T2JqZWN0LCBjdXJyZW50U3RydWN0dXJlKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTI1OTAsNiArMjU5MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXgsCiAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZpZXJOdW1iZXJdKTsKKwog
ICAgICAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgICAgICAgICAgCkBAIC0yNjA4LDEzICsyNjEw
LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBpbmRleFJlbGF0aXZlVG9CYXNlKHB1
dEJ5SWRTdGF0dXMub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRh
LmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICghaGFzRXhpdFNpdGUKLSAgICAgICAgICAgICAgICAgICAgICAg
JiYgcHV0QnlJZFN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKQotICAgICAgICAgICAgICAgICAg
ICAgICAmJiBzdHJ1Y3R1cmVDaGFpbklzU3RpbGxWYWxpZCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMu
b2xkU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVz
LnN0cnVjdHVyZUNoYWluKCkpKSB7Ci0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoCisgICAgICAg
ICAgICAgICAgIWhhc0V4aXRTaXRlCisgICAgICAgICAgICAgICAgJiYgcHV0QnlJZFN0YXR1cy5p
c1NpbXBsZVRyYW5zaXRpb24oKQorICAgICAgICAgICAgICAgICYmICghcHV0QnlJZFN0YXR1cy5z
dHJ1Y3R1cmVDaGFpbigpCisgICAgICAgICAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMuc3Ry
dWN0dXJlQ2hhaW4oKS0+aXNTdGlsbFZhbGlkKCkpKSB7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2NoYWlucy5hZGRMYXppbHkocHV0QnlJZFN0YXR1cy5zdHJ1
Y3R1cmVDaGFpbigpKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHV0QnlJ
ZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgICAgICAgICBpZiAoIWRp
cmVjdCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMub2xkU3RydWN0
dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpKSB7CkBAIC0yNjIyLDggKzI2MjUsOCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90
eXBlKCkuYXNDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBp
dCA9IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+aGVhZCgpOyAqaXQ7ICsraXQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gKCppdCktPnN0b3Jl
ZFByb3RvdHlwZSgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBwdXRCeUlkU3RhdHVzLnN0cnVj
dHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlz
Q2VsbCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlU2V0KCku
c2l6ZSgpID09IDEpOwotICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzLmNoYWluKCkpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJl
KCkgPT0gc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBO
b3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92ZXIg
dGhlIEdldEJ5SWQKQEAgLTI1OSw4ICsyNTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0g
c3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSAoKml0KS0+c3RvcmVkUHJvdG90
eXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY2hhaW5zLmFkZExhemls
eShzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0dXMuc3Ry
dWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3Rv
cmVkUHJvdG90eXBlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFN0
cnVjdHVyZUNoYWlucy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRGVz
aXJlZFN0cnVjdHVyZUNoYWlucy5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRGVzaXJlZFN0cnVjdHVyZUNoYWluczo6RGVzaXJl
ZFN0cnVjdHVyZUNoYWlucygpIHsgfQorRGVzaXJlZFN0cnVjdHVyZUNoYWluczo6fkRlc2lyZWRT
dHJ1Y3R1cmVDaGFpbnMoKSB7IH0KKworYm9vbCBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zOjphcmVT
dGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0
b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3ZlY3RvcltpXS0+aXNTdGlsbFZhbGlk
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkU3RydWN0dXJl
Q2hhaW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkU3RydWN0dXJlQ2hhaW5zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zX2gK
KyNkZWZpbmUgREZHRGVzaXJlZFN0cnVjdHVyZUNoYWluc19oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zIHsKK3B1Ymxp
YzoKKyAgICBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zKCk7CisgICAgfkRlc2lyZWRTdHJ1Y3R1cmVD
aGFpbnMoKTsKKyAgICAKKyAgICB2b2lkIGFkZExhemlseShQYXNzUmVmUHRyPEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4+IGNoYWluKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWlu
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7Citwcml2YXRl
OgorICAgIFZlY3RvcjxSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gPiBtX3ZlY3RvcjsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZFN0cnVjdHVyZUNoYWluc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDk3NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMwLDYgKzQzMCwxMiBAQCB2b2lkIEdyYXBoOjpyZXNldEV4aXRTdGF0ZXMoKQogICAgIH0KIH0K
IAorYm9vbCBHcmFwaDo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93YXRj
aHBvaW50cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgbV9jaGFpbnMuYXJlU3RpbGxWYWxp
ZCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiREZHQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHQmFz
aWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Rlc2lyZWRJZGVudGlmaWVycy5oIgorI2luY2x1ZGUg
IkRGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuaCIKICNpbmNsdWRlICJERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xp
dmVkU3RhdGUuaCIKQEAgLTY5NSw2ICs2OTYsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICAKICAgICBWTSYgbV92
bTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29t
cGlsYXRpb24+IG1fY29tcGlsYXRpb247CkBAIC03MjQsNiArNzI3LDcgQEAgcHVibGljOgogICAg
IE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVzdEhhbmRsZVZhbHVlczsKICAgICBEZXNpcmVkV2F0Y2hw
b2ludHMgbV93YXRjaHBvaW50czsKICAgICBEZXNpcmVkSWRlbnRpZmllcnMgbV9pZGVudGlmaWVy
czsKKyAgICBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zIG1fY2hhaW5zOwogICAgIAogICAgIE9wdGlt
aXphdGlvbkZpeHBvaW50U3RhdGUgbV9maXhwb2ludFN0YXRlOwogICAgIEdyYXBoRm9ybSBtX2Zv
cm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUsNyBAQCBib29sIEpJVENv
bXBpbGVyOjpjb21waWxlKCkKIAogYm9vbCBKSVRDb21waWxlcjo6bGluayhSZWZQdHI8SlNDOjpK
SVRDb2RlPiYgZW50cnkpCiB7Ci0gICAgaWYgKCFtX2dyYXBoLm1fd2F0Y2hwb2ludHMuYXJlU3Rp
bGxWYWxpZCgpKQorICAgIGlmICghbV9ncmFwaC5pc1N0aWxsVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgdGhpcywg
bV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0zNzIsNyArMzcyLDcgQEAg
Ym9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKIAogYm9vbCBKSVRDb21waWxlcjo6
bGlua0Z1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNrKQogewotICAgIGlmICghbV9ncmFwaC5tX3dhdGNo
cG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkKKyAgICBpZiAoIW1fZ3JhcGguaXNTdGlsbFZhbGlkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vID09PSBMaW5rID09PQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVFbnRyeShDQ2FsbEhlbHBlcnMmIGoKIAogYm9v
bCBsaW5rKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKQogewotICAgIGlmICghc3Rh
dGUuZ3JhcGgubV93YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpIHsKKyAgICBpZiAoIXN0YXRl
LmdyYXBoLmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIExMVk1EaXNwb3NlRXhlY3V0aW9uRW5n
aW5lKHN0YXRlLmVuZ2luZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgorCituYW1lc3BhY2UgSlND
IHsKKworSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWQpCisgICAgOiBtX2dsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3QpCisgICAgLCBtX2hlYWQoaGVhZCkKK3sKKyAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOworICAg
IGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKFN0cnVj
dHVyZSogY3VycmVudCA9IGFzT2JqZWN0KHByb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCisgICAgICAg
IG1fdmVjdG9yLmFwcGVuZChjdXJyZW50KTsKK30KKworSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBo
ZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKKyAgICA6IG1fZ2xvYmFsT2JqZWN0
KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCisgICAgLCBtX2hlYWQoaGVhZCkKK3sKKyAgICBt
X3ZlY3Rvci5hcHBlbmQocHJvdG90eXBlU3RydWN0dXJlKTsKK30KKworSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pCisgICAgOiBtX2dsb2JhbE9iamVj
dChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQorICAgICwgbV9oZWFkKGhlYWQpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgY2hhaW4tPmhlYWQoKVtpXTsgKytpKQorICAgICAgICBtX3Zl
Y3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Cit9CisKK0ludGVuZGVkU3RydWN0
dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCkKKyAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCisgICAgLCBtX2hl
YWQoaGVhZCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOworfQorCitJbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpCit7Cit9CisKK2Jv
b2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBK
U1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX2hlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2ds
b2JhbE9iamVjdCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChhc09iamVjdChjdXJyZW50UHJvdG90eXBlKS0+c3RydWN0
dXJlKCkgIT0gbV92ZWN0b3JbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGN1cnJlbnRQcm90b3R5cGUgPSBtX3ZlY3RvcltpXS0+c3RvcmVkUHJvdG90eXBlKCk7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om1h
dGNoZXMoU3RydWN0dXJlQ2hhaW4qIGNoYWluKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV92ZWN0b3Jb
aV0gIT0gY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKGNoYWluLT5oZWFkKClbbV92ZWN0b3Iuc2l6ZSgpXSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitTdHJ1Y3R1cmVDaGFpbiogSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6Y2hhaW4oVk0mIHZtKSBjb25zdAoreworICAgIEFTU0VSVChp
c1N0aWxsVmFsaWQoKSk7CisgICAgU3RydWN0dXJlQ2hhaW4qIHJlc3VsdCA9IFN0cnVjdHVyZUNo
YWluOjpjcmVhdGUodm0sIG1faGVhZCk7CisgICAgQVNTRVJUKG1hdGNoZXMocmVzdWx0KSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJ
bnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOworICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodm0sIHVp
ZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIGlmICghaXNWYWxpZE9mZnNl
dChvZmZzZXQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCit7CisgICAgaWYgKG1faGVhZC0+
dHlwZUluZm8oKS50eXBlKCkgPT0gUHJveHlUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92ZWN0b3JbaV07CisgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFByb3h5VHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitKU09iamVj
dCogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGVybWluYWxQcm90b3R5cGUoKSBjb25zdAorewor
ICAgIEFTU0VSVCghbV92ZWN0b3IuaXNFbXB0eSgpKTsKKyAgICBpZiAobV92ZWN0b3Iuc2l6ZSgp
ID09IDEpCisgICAgICAgIHJldHVybiBhc09iamVjdChtX2hlYWQtPnByb3RvdHlwZUZvckxvb2t1
cChtX2dsb2JhbE9iamVjdCkpOworICAgIHJldHVybiBhc09iamVjdChtX3ZlY3RvclttX3ZlY3Rv
ci5zaXplKCkgLSAyXS0+c3RvcmVkUHJvdG90eXBlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gK
KyNkZWZpbmUgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCisKKyNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29kZUJsb2NrOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmVDaGFp
bjsKK2NsYXNzIFZNOworCitjbGFzcyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluIDogcHVibGljIFJl
ZkNvdW50ZWQ8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4geworcHVibGljOgorICAgIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBo
ZWFkKTsKKyAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbik7CisgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IHVuc2lnbmVkIGNvdW50KTsKKyAgICB+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpOworICAgIAor
ICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgYm9vbCBtYXRjaGVzKFN0cnVjdHVy
ZUNoYWluKikgY29uc3Q7CisgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKFZNJikgY29uc3Q7Cisg
ICAgYm9vbCBtYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgU3RyaW5nSW1wbCogdWlkKTsKKyAgICBi
b29sIGlzTm9ybWFsaXplZCgpOworICAgIAorICAgIFN0cnVjdHVyZSogaGVhZCgpIGNvbnN0IHsg
cmV0dXJuIG1faGVhZDsgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3Iuc2l6ZSgpOyB9CisgICAgU3RydWN0dXJlKiBhdChzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIG1fdmVjdG9yW2luZGV4XTsgfQorICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3Qg
aW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIAorICAgIEpTT2JqZWN0KiB0ZXJtaW5h
bFByb3RvdHlwZSgpIGNvbnN0OworICAgIAorICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmVjdG9yLmxhc3QoKTsgfQorcHJpdmF0ZToKKyAgICBKU0dsb2JhbE9iamVjdCog
bV9nbG9iYWxPYmplY3Q7CisgICAgU3RydWN0dXJlKiBtX2hlYWQ7CisgICAgVmVjdG9yPFN0cnVj
dHVyZSo+IG1fdmVjdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwMiw3ICsx
MDAyLDI4IEBAIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2UKIAogYm9v
bCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHByb3RvdHlwZUNoYWluTWF5
SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICB1bnNpZ25lZCBp
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpCisgICAgICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5k
ZXhlZEFjY2Vzc2VzKCk7CisgICAgCisgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSB0aGlz
OyA7KSB7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gY3VycmVudC0+c3RvcmVkUHJvdG90
eXBlKCk7CisgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBjdXJyZW50ID0gcHJvdG90eXBlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cisg
ICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
VmFsdWUpOworICAgICAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFk
T25seSB8IEFjY2Vzc29yKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogI2lmIERPX1BST1BFUlRZTUFQX0NPTlNU
RU5DWV9DSEVDSwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDggQEAgcHVibGljOgogICAg
IHZvaWQgc2V0R2xvYmFsT2JqZWN0KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkgeyBtX2dsb2JhbE9iamVjdC5zZXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KICAgICAg
ICAgCiAgICAgSlNWYWx1ZSBzdG9yZWRQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3Rv
dHlwZS5nZXQoKTsgfQorICAgIEpTT2JqZWN0KiBzdG9yZWRQcm90b3R5cGVPYmplY3QoKSBjb25z
dDsKKyAgICBTdHJ1Y3R1cmUqIHN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpIGNvbnN0OwogICAg
IEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIEpTVmFs
dWUgcHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgSlNWYWx1
ZSBwcm90b3R5cGVGb3JMb29rdXAoQ29kZUJsb2NrKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAx
NDk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDIyIEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6Y3JlYXRlKFZNJiAKICAgICByZXR1cm4gbmV3U3RydWN0dXJlOwogfQogCitpbmxp
bmUgSlNPYmplY3QqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgY29uc3QKK3sK
KyAgICBKU1ZhbHVlIHZhbHVlID0gbV9wcm90b3R5cGUuZ2V0KCk7CisgICAgaWYgKHZhbHVlLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYXNPYmplY3QodmFsdWUpOwor
fQorCitpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnN0b3JlZFByb3RvdHlwZVN0cnVjdHVy
ZSgpIGNvbnN0Cit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IHN0b3JlZFByb3RvdHlwZU9iamVj
dCgpOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKTsKK30KKwogaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201251</attachid>
            <date>2013-05-09 10:50:10 -0700</date>
            <delta_ts>2013-05-09 11:15:45 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48075</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5ODIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAorMjAxMy0wNS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgaGF2ZSBpdHMgb3duIG5vdGlvbiBvZiBTdHJ1Y3R1cmVD
aGFpbiwgYW5kIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB2YWxpZGF0ZSBpdCBhZnRlciBjb21w
aWxhdGlvbiBmaW5pc2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1ODQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiwgd2hpY2gg
aXMgbGlrZSBTdHJ1Y3R1cmVDaGFpbiwgZXhjZXB0IHRoYXQgaXQgaG9sZHMgYSBiaXQKKyAgICAg
ICAgbW9yZSBpbmZvcm1hdGlvbiBhbmQgY2FuIGJlIHZhbGlkYXRlZCBpbmRlcGVuZGFudGx5IG9m
IGl0cyBvd25pbmcgU3RydWN0dXJlIGFuZCBsZXhpY2FsCisgICAgICAgIEdsb2JhbE9iamVjdCwg
c2luY2UgaXQgcmVtZW1iZXJzIGJvdGggb2YgdGhvc2UgdGhpbmdzLiBJdCdzIGFsc28gbWFsbG9j
J2QgYW5kIFJlZkNvdW50ZWQKKyAgICAgICAgcmF0aGVyIHRoYW4gR0MnZCwgc28gaXQgY2FuIGJl
IGFsbG9jYXRlZCBpbiBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkLgorICAgICAgICAK
KyAgICAgICAgR2F2ZSB0aGlzIGNsYXNzIGEgYnVuY2ggb2YgbWV0aG9kcyB0byBhbGxvdyB0aGUg
Zm9sbG93aW5nIGlkaW9tOgorICAgICAgICAKKyAgICAgICAgLSBTbmFwc2hvdCBhIHN0cnVjdHVy
ZSBjaGFpbiBjb25jdXJyZW50bHkuIFRoaXMgc3RydWN0dXJlIGNoYWluIG1heSBlbmQgdXAgYmVp
bmcKKyAgICAgICAgICB3cm9uZyBpbiBjYXNlIG9mIHJhY2VzLCBidXQgaW4gdGhhdCBjYXNlIHdl
IHdpbGwgZmluZCBvdXQgd2hlbiB3ZSB0cnkgdG8gdmFsaWRhdGUKKyAgICAgICAgICBpdC4KKyAg
ICAgICAgCisgICAgICAgIC0gUGVyZm9ybSB2YWxpZGF0aW9uIG9uIHRoZSBzdHJ1Y3R1cmUgY2hh
aW4gaXRzZWxmLCB3aXRob3V0IHJlY29tcHV0aW5nIHRoZSBjaGFpbi4KKyAgICAgICAgICBQcmV2
aW91c2x5LCBtYW55IGNoYWluIHZhbGlkYXRpb24gbWV0aG9kcyAocHJvdG90eXBlQ2hhaW5NYXlJ
bnRlcmNlcHRTdG9yZVRvKCkgZm9yCisgICAgICAgICAgZXhhbXBsZSkgcmVjb21wdXRlZCB0aGUg
Y2hhaW4sIGFuZCBoZW5jZSwgd2VyZSBpbmhlcmVudGx5IHJhY3k6IHlvdSBjb3VsZCBidWlsZCBv
bmUKKyAgICAgICAgICBjaGFpbiBhbmQgdGhlbiB2YWxpZGF0ZSBhZ2FpbnN0IGEgZGlmZmVyZW50
IGNoYWluLCBhbmQgaGVuY2Ugbm90IHJlYWxpemUgdGhhdCB0aGUKKyAgICAgICAgICBjaGFpbiB5
b3UgZGlkIGJ1aWxkIHdhcyBhY3R1YWxseSBicm9rZW4gZm9yIHlvdXIgcHVycG9zZXMsIGJlY2F1
c2UgdGhlIGNoYWluIHlvdQorICAgICAgICAgIGNoZWNrZWQgd2FzIGEgZGlmZmVyZW50IG9uZS4K
KyAgICAgICAgCisgICAgICAgIC0gVmFsaWRhdGUgdGhhdCB0aGUgY2hhaW4gaXMgc3RpbGwgdGhl
IHJpZ2h0IG9uZSBhdCBhbnkgdGltZSwgYWxsb3dpbmcgdGhlIGNhbmNlbGxhdGlvbgorICAgICAg
ICAgIG9mIGNvbXBpbGF0aW9uIGlmIHRoZXJlIHdhcyBhIHJhY2UuCisgICAgICAgIAorICAgICAg
ICBBbHNvIGFkZGVkIERGRzo6RGVzaXJlZFN0cnVjdHVyZUNoYWlucywgd2hpY2ggdHJhY2tzIHRo
b3NlIGludGVuZGVkIHN0cnVjdHVyZSBjaGFpbnMgdGhhdAorICAgICAgICB0aGUgY29tcGlsZXIg
aGFkIGFscmVhZHkgY2hvc2VuIHRvIHVzZS4gSWYgYW55IG9mIHRob3NlIGFyZSBpbnZhbGlkIGF0
IGxpbmsgdGltZSwgdGhyb3cKKyAgICAgICAgb3V0IHRoZSBjb21waWxhdGlvbi4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JDaGFpbik6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6R2V0QnlJZFN0YXR1cyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0
dXM6OmNoYWluKToKKyAgICAgICAgKEdldEJ5SWRTdGF0dXMpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRl
RnJvbUxMSW50KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6Cisg
ICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpQdXRCeUlk
U3RhdHVzOjpQdXRCeUlkU3RhdHVzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6c3Ry
dWN0dXJlQ2hhaW4pOgorICAgICAgICAoUHV0QnlJZFN0YXR1cyk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4
ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZv
bGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6RGVzaXJlZFN0cnVjdHVyZUNoYWluczo6RGVzaXJlZFN0cnVjdHVyZUNoYWlucyk6CisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZFN0cnVjdHVyZUNoYWluczo6fkRlc2lyZWRTdHJ1Y3R1cmVD
aGFpbnMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRTdHJ1Y3R1cmVDaGFpbnM6OmFyZVN0
aWxsVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmg6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRTdHJ1Y3R1cmVDaGFpbnM6OmFkZExhemlseSk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNT
dGlsbFZhbGlkKToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmxpbmtGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbik6CisgICAgICAgIChKU0M6
OkludGVuZGVkU3RydWN0dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKToKKyAgICAg
ICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKToKKyAgICAgICAg
KEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyk6CisgICAgICAgIChKU0M6Oklu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OmNoYWluKToKKyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyk6CisgICAgICAgIChKU0M6OkludGVuZGVk
U3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCk6CisgICAgICAgIChKU0M6OkludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OnRlcm1pbmFsUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0ludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbik6CisgICAgICAgIChKU0M6OkludGVuZGVkU3RydWN0dXJlQ2hh
aW46OmhlYWQpOgorICAgICAgICAoSlNDOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpzaXplKToK
KyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6YXQpOgorICAgICAgICAoSlND
OjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6SW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bGFzdCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0
U3RvcmVUbyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlT2JqZWN0KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKToKKwogMjAx
My0wNS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGJy
b2tlbiAzMi1iaXQgYnVpbGQgKyBzb21lIGNsZWFuIHVwIGluIEpJVFN0dWJzLmNwcC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwxMCBAQAogCQkwRjQ2ODBENDE0QkJEMjQ5MDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5jcHAgKi87IH07CiAJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUw
OEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovOyB9OworCQkwRjRFMUEwRTE3M0FFRERDMDA3RUUy
RDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwQzE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CisJCTBGNEUxQTBGMTczQUVEREMwMDdFRTJEMyAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGNEUxQTEyMTczQUYwN0IwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hh
aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRF
MUExMTE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEUxQTEzMTcz
QUYwN0UwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTEwMTczQUYwNzgwMDdF
RTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLzsgfTsKIAkJMEY1NTQxQjEx
NjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBT
cGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBT
cGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUMxOTQxNzI3
NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERG
R0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpAQCAtMTEzNCw2ICsxMTM4LDEwIEBACiAJCTBGNDY4
MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9z
dENhbGxSZXR1cm5WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIb3N0
Q2FsbFJldHVyblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4
MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVuZGVk
U3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRFMUEw
RDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEUxQTEwMTczQUYwNzgwMDdFRTJEMyAvKiBERkdEZXNp
cmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRFMUExMTE3M0FGMDc4MDA3RUUyRDMg
LyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVk
U3RydWN0dXJlQ2hhaW5zLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3BlY2lhbFBvaW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1
NDFCMDE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3BlY2lhbFBvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5j
cHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNjEzLDYgKzI2MjEsOCBAQAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdC
MiAvKiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyog
SW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1
IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKKwkJCQkwRjRFMUEwQzE3M0FFRERDMDA3RUUy
RDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCisJCQkJMEY0RTFBMEQxNzNBRURE
QzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBF
MTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0Ew
RTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQk4NkJGNjQyQTE0
OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8sCkBAIC0yNjM0LDggKzI2NDQsNiBAQAog
CQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICovLAogCQkJ
CUY2OTJBODVFMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNwcCAqLywKIAkJCQlGNjky
QTg1RjAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5oICovLAotCQkJCUUxOEUzQTU3MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8sCi0JCQkJRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0
IC8qIFZNLmggKi8sCiAJCQkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0EyIC8qIEpTR2xvYmFsT2Jq
ZWN0LmNwcCAqLywKIAkJCQlBOEU4OTQzMzBDRDA2MDNGMDAzNjcxNzkgLyogSlNHbG9iYWxPYmpl
Y3QuaCAqLywKIAkJCQlCQzc1NkZDNjBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuY3BwICovLApAQCAtMjc3NCw2ICsyNzgyLDggQEAKIAkJCQk1RDUzNzI2RTBFMUM1
NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oICovLAogCQkJCTBGRUIzRUNCMTYyMzdGNDcwMEFCNjdB
RCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEwMDIz
RDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKKwkJCQlFMThFM0E1NzBERjkyNzhDMDBE
OTBCMzQgLyogVk0uY3BwICovLAorCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5o
ICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywKIAkJ
CQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENC
Nzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKQEAgLTI4MTcsNiArMjgy
Nyw4IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNEUxQTEwMTczQUYwNzgwMDdFRTJE
MyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLywKKwkJCQkwRjRFMUExMTE3M0FG
MDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovLAogCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNTVD
MTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAgLTMxOTEs
NiArMzIwMyw3IEBACiAJCQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxs
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4
MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0
aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzQsNiArMzI4Nyw3IEBACiAJCQkJMEZDMDk3NkEx
NDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5
NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRFMUExMjE3M0FGMDdCMDA3RUUyRDMgLyogREZH
RGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVG
OTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1RTE0
RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsu
aCBpbiBIZWFkZXJzICovLApAQCAtNDE4NCw2ICs0MTk4LDcgQEAKIAkJCQkxNDI4MDgzQTEwN0VD
MDc1MDAxM0U3QjIgLyogSlNTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENTEw
N0VDMzc2MDA0MjdBNDggLyogSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjYwMEI1
QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCNzRFMEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0cmlu
Z1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZBQUIzODBCNjZBOTQ0MDBFNTVGMTYgLyog
SlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQwQzE1N0VFMDlGMDA0
QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyMDgs
NiArNDIyMyw3IEBACiAJCQkJMEY0NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyog
TExJbnRTbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAw
ODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNEUxQTEzMTcz
QUYwN0UwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1h
Y2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE0OTc2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYKIH0KIAotdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yQ2hhaW4oR2V0QnlJZFN0YXR1cyYgcmVzdWx0LCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit2b2lkIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JDaGFpbihHZXRCeUlkU3RhdHVzJiByZXN1bHQsIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgU3RyaW5nSW1wbCogdWlkKQogewogI2lmIEVOQUJMRShKSVQpICYmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKICAgICAvLyBWYWxpZGF0ZSB0aGUgY2hhaW4uIElmIHRoZSBjaGFp
biBpcyBpbnZhbGlkLCB0aGVuIGN1cnJlbnRseSB0aGUgYmVzdCB0aGluZwpAQCAtNzcsMTcgKzc3
LDEzIEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKEdldEIKICAgICAvLyBo
YXZlIG5vdyBpcyB0aGF0IGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQgYmV0d2Vl
biB3aGVuIGl0IHdhcwogICAgIC8vIGNhY2hlZCBvbiBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB3
aGVuIHRoZSBERkcgdHJpZWQgdG8gaW5saW5lIHRoZSBhY2Nlc3MsCiAgICAgLy8gdGhlbiB3ZSBm
YWxsIGJhY2sgb24gYSBwb2x5bW9ycGhpYyBhY2Nlc3MuCi0gICAgU3RydWN0dXJlKiBjdXJyZW50
U3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gMDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0Lm1fY2hhaW4uc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgQVNTRVJUKCFjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7Ci0g
ICAgICAgIGN1cnJlbnRPYmplY3QgPSBhc09iamVjdChjdXJyZW50U3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAocHJvZmlsZWRCbG9jaykpOwotICAgICAgICBjdXJyZW50U3RydWN0dXJlID0g
cmVzdWx0Lm1fY2hhaW5baV07Ci0gICAgICAgIGlmIChjdXJyZW50T2JqZWN0LT5zdHJ1Y3R1cmUo
KSAhPSBjdXJyZW50U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIXJlc3VsdC5tX2NoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIEFTU0VSVChjdXJyZW50T2JqZWN0KTsKKyAgICBKU09iamVjdCogY3VycmVudE9iamVj
dCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOworICAgIFN0cnVjdHVyZSog
Y3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7CisgICAgCisgICAgQVNT
RVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKICAgICAgICAgCiAgICAg
dW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwpA
QCAtOTksMTMgKzk1LDEyIEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKEdl
dEIKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7
CisgICAgcmVzdWx0Lm1fc3RydWN0dXJlU2V0LmFkZChyZXN1bHQubV9jaGFpbi0+aGVhZCgpKTsK
ICAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVlKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVk
QmxvY2spOwogICAgIFVOVVNFRF9QQVJBTSh1aWQpOwotICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1
cmUpOwogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogI2VuZGlmCiB9CkBAIC0yMTgs
MjEgKzIxMywyMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAg
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOiB7CiAgICAgICAgIGlmICghc3R1YkluZm8u
dS5nZXRCeUlkUHJvdG8uaXNEaXJlY3QpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uYXBwZW5kKHN0dWJJ
bmZvLnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgIGNv
bXB1dGVGb3JDaGFpbigKLSAgICAgICAgICAgIHJlc3VsdCwgcHJvZmlsZWRCbG9jaywgdWlkLAot
ICAgICAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIHJlc3VsdC5tX2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oCisgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAorICAgICAgICAgICAgc3R1
YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKKyAgICAgICAg
ICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSkpOwor
ICAgICAgICBjb21wdXRlRm9yQ2hhaW4ocmVzdWx0LCBwcm9maWxlZEJsb2NrLCB1aWQpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9j
aGFpbjogewogICAgICAgICBpZiAoIXN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmlzRGlyZWN0KQog
ICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywgdHJ1ZSk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jb3Vu
dDsgKytpKQotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uYXBwZW5kKHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotICAgICAgICBjb21wdXRlRm9yQ2hh
aW4oCi0gICAgICAgICAgICByZXN1bHQsIHByb2ZpbGVkQmxvY2ssIHVpZCwKLSAgICAgICAgICAg
IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworICAg
ICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAorICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgIHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksCisgICAgICAgICAgICBzdHViSW5m
by51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwKKyAgICAgICAgICAgIHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmNvdW50KSk7CisgICAgICAgIGNvbXB1dGVGb3JDaGFpbihyZXN1bHQsIHByb2Zp
bGVkQmxvY2ssIHVpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJldmlz
aW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR2V0QnlJZFN0
YXR1c19oCiAjZGVmaW5lIEdldEJ5SWRTdGF0dXNfaAogCisjaW5jbHVkZSAiSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU2V0LmgiCiAjaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+CkBAIC01OSw3ICs2MCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBHZXRCeUlkU3RhdHVzKAogICAgICAgICBTdGF0ZSBzdGF0ZSwg
Ym9vbCB3YXNTZWVuSW5KSVQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3Ry
dWN0dXJlU2V0KCksCi0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZz
ZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKSwgVmVjdG9yPFN0cnVjdHVyZSo+
IGNoYWluID0gVmVjdG9yPFN0cnVjdHVyZSo+KCkpCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IGludmFsaWRPZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKSwg
UGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IG51bGxwdHIpCiAgICAg
ICAgIDogbV9zdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVT
ZXQpCiAgICAgICAgICwgbV9jaGFpbihjaGFpbikKQEAgLTgyLDE5ICs4MywxOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBNYWtlc0Nh
bGxzOyB9CiAgICAgCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IFZlY3RvcjxTdHJ1Y3R1cmUq
PiYgY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluOyB9IC8vIFJldHVybnMgZW1wdHkgdmVj
dG9yIGlmIHRoaXMgaXMgYSBkaXJlY3QgYWNjZXNzLgorICAgIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKj4obV9jaGFpbi5nZXQoKSk7IH0gLy8gUmV0dXJucyBudWxsIGlmIHRoaXMgaXMgYSBkaXJl
Y3QgYWNjZXNzLgogICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3BlY2lmaWNWYWx1ZTsgfSAvLyBSZXR1cm5zIEpTVmFsdWUoKSBpZiB0aGVyZSBpcyBubyBzcGVj
aWZpYyB2YWx1ZS4KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQogICAgIAogICAgIGJvb2wgd2FzU2VlbkluSklUKCkgY29uc3QgeyByZXR1cm4g
bV93YXNTZWVuSW5KSVQ7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0
ZUZvckNoYWluKEdldEJ5SWRTdGF0dXMmIHJlc3VsdCwgQ29kZUJsb2NrKiwgU3RyaW5nSW1wbCog
dWlkLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlRm9yQ2hhaW4oR2V0QnlJ
ZFN0YXR1cyYgcmVzdWx0LCBDb2RlQmxvY2sqLCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIHN0YXRp
YyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBTdGF0ZSBtX3N0YXRlOwog
ICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKLSAgICBWZWN0b3I8U3RydWN0dXJlKj4g
bV9jaGFpbjsKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKICAg
ICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
ICAgICBib29sIG1fd2FzU2VlbkluSklUOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw3ICs3MiwxMCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGcm9tCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwogICAg
IAotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVRyYW5zaXRpb24sIHN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBjaGFpbiwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygK
KyAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsCisgICAg
ICAgIGNoYWluID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRC
bG9jaywgc3RydWN0dXJlLCBjaGFpbikpIDogMCwKKyAgICAgICAgb2Zmc2V0KTsKICNlbHNlCiAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9m
ZnNldCk7CiAjZW5kaWYKQEAgLTEyNSw3ICsxMjgsOSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwKICAg
ICAgICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0
dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24u
c3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5z
aXRpb24uY2hhaW4uZ2V0KCksCisgICAgICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5jaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkgOiAwLAogICAgICAgICAgICAgICAg
IG9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CkBAIC0xNzIsOSArMTc3LDEyIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBpZiAoc3RydWN0dXJl
LT50eXBlSW5mbygpLnR5cGUoKSA9PSBTdHJpbmdUeXBlKQogICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbj4gY2hhaW47CiAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICBjaGFpbiA9IGFk
b3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KSk7CisgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBzZXR0
ZXJzIG9yIHJlYWQtb25seSBwcm9wZXJ0aWVzLCB0aGVuIGdpdmUgdXAuCi0gICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgdWlkKSkKKyAg
ICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCB1aWQpKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhc24ndCBiZWVuIG5vcm1hbGl6ZWQgKGkuZS4g
dGhlcmUgYXJlIHByb3hpZXMgb3IgZGljdGlvbmFyaWVzKQpAQCAtMTg0LDcgKzE5Miw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgLy8gZGljdGlv
bmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IHRob3NlIG9iamVjdHMg
d2VyZSBuZXZlciB1c2VkIGFzCiAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUg
cHJvdG90eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBv
ZgogICAgICAgICAvLyB0aGUgb3RoZXIgY2hlY2tzIGJlbG93IHdpbGwgZmFpbC4KLSAgICAgICAg
aWYgKCFpc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkp
CisgICAgICAgIGlmICghY2hhaW4tPmlzTm9ybWFsaXplZCgpKQogICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQogICAgIApAQCAtMjA3LDkgKzIx
NSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBBU1NF
UlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpKTsKICAg
ICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKLSAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cygKLSAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCB0cmFuc2l0aW9u
LAotICAgICAgICBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKHZtLCBnbG9iYWxPYmplY3QpLCBv
ZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVRyYW5zaXRpb24sIHN0cnVj
dHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZzZXQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2lmbmRlZiBQdXRCeUlkU3RhdHVzX2gKICNkZWZpbmUgUHV0QnlJZFN0YXR1c19oCiAKKyNp
bmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZz
ZXQuaCIKICNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdJbXBsLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RhdGUgc3RhdGUs
CiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLAorICAg
ICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHN0cnVjdHVyZUNoYWluLAog
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkK
ICAgICAgICAgLCBtX29sZFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmUpCkBAIC0xMDMsNyArMTA0LDcg
QEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7IH0KICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmV3U3RydWN0dXJlOyB9Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVj
dHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbjsgfQorICAgIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmVDaGFpbi5nZXQoKTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgCiBwcml2YXRlOgpAQCAtMTEyLDcgKzExMyw3IEBAIHBy
aXZhdGU6CiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBTdHJ1Y3R1cmUqIG1fb2xkU3RydWN0dXJl
OwogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgU3RydWN0dXJlQ2hhaW4qIG1f
c3RydWN0dXJlQ2hhaW47CisgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fc3Ry
dWN0dXJlQ2hhaW47CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNyArMTI3Nyw3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgICAgICAgICAgLy8gQXNzZXJ0
IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUgY29tcHV0ZUZvcigpIG1l
dGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBiZSBhYmxlIHRvIHJldHVy
bi4KICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXN0YXR1cy5jaGFpbigpKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lm
aWNWYWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9n
cmFwaCwgc3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ5NzY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MjUsMTIgKzE3MjUsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
R2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoZ2V0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVT
ZXQoKSkpLCBiYXNlKTsKICAgICAKLSAgICBpZiAoIWdldEJ5SWRTdGF0dXMuY2hhaW4oKS5pc0Vt
cHR5KCkpIHsKKyAgICBpZiAoZ2V0QnlJZFN0YXR1cy5jaGFpbigpKSB7CisgICAgICAgIG1fZ3Jh
cGgubV9jaGFpbnMuYWRkTGF6aWx5KGdldEJ5SWRTdGF0dXMuY2hhaW4oKSk7CiAgICAgICAgIFN0
cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGdldEJ5SWRTdGF0dXMuc3RydWN0dXJlU2V0KCku
c2luZ2xldG9uU3RydWN0dXJlKCk7CiAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0g
MDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdldEJ5SWRTdGF0dXMuY2hhaW4o
KS5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2V0QnlJ
ZFN0YXR1cy5jaGFpbigpLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY3VycmVudE9iamVj
dCA9IGFzT2JqZWN0KGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykpOwotICAgICAgICAgICAgY3VycmVudFN0cnVjdHVyZSA9
IGdldEJ5SWRTdGF0dXMuY2hhaW4oKVtpXTsKKyAgICAgICAgICAgIGN1cnJlbnRTdHJ1Y3R1cmUg
PSBnZXRCeUlkU3RhdHVzLmNoYWluKCktPmF0KGkpOwogICAgICAgICAgICAgYmFzZSA9IGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjayhjdXJyZW50T2JqZWN0LCBjdXJyZW50U3RydWN0dXJlKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTI1OTAsNiArMjU5MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXgsCiAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZpZXJOdW1iZXJdKTsKKwog
ICAgICAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgICAgICAgICAgCkBAIC0yNjA4LDEzICsyNjEw
LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBpbmRleFJlbGF0aXZlVG9CYXNlKHB1
dEJ5SWRTdGF0dXMub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRh
LmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICghaGFzRXhpdFNpdGUKLSAgICAgICAgICAgICAgICAgICAgICAg
JiYgcHV0QnlJZFN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKQotICAgICAgICAgICAgICAgICAg
ICAgICAmJiBzdHJ1Y3R1cmVDaGFpbklzU3RpbGxWYWxpZCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMu
b2xkU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVz
LnN0cnVjdHVyZUNoYWluKCkpKSB7Ci0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoCisgICAgICAg
ICAgICAgICAgIWhhc0V4aXRTaXRlCisgICAgICAgICAgICAgICAgJiYgcHV0QnlJZFN0YXR1cy5p
c1NpbXBsZVRyYW5zaXRpb24oKQorICAgICAgICAgICAgICAgICYmICghcHV0QnlJZFN0YXR1cy5z
dHJ1Y3R1cmVDaGFpbigpCisgICAgICAgICAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMuc3Ry
dWN0dXJlQ2hhaW4oKS0+aXNTdGlsbFZhbGlkKCkpKSB7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2NoYWlucy5hZGRMYXppbHkocHV0QnlJZFN0YXR1cy5zdHJ1
Y3R1cmVDaGFpbigpKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHV0QnlJ
ZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgICAgICAgICBpZiAoIWRp
cmVjdCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMub2xkU3RydWN0
dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpKSB7CkBAIC0yNjIyLDggKzI2MjUsOCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90
eXBlKCkuYXNDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBp
dCA9IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+aGVhZCgpOyAqaXQ7ICsraXQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gKCppdCktPnN0b3Jl
ZFByb3RvdHlwZSgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBwdXRCeUlkU3RhdHVzLnN0cnVj
dHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlz
Q2VsbCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlU2V0KCku
c2l6ZSgpID09IDEpOwotICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzLmNoYWluKCkpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJl
KCkgPT0gc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBO
b3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92ZXIg
dGhlIEdldEJ5SWQKQEAgLTI1OSw4ICsyNTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0g
c3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSAoKml0KS0+c3RvcmVkUHJvdG90
eXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY2hhaW5zLmFkZExhemls
eShzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0dXMuc3Ry
dWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3Rv
cmVkUHJvdG90eXBlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFN0
cnVjdHVyZUNoYWlucy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRGVz
aXJlZFN0cnVjdHVyZUNoYWlucy5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRGVzaXJlZFN0cnVjdHVyZUNoYWluczo6RGVzaXJl
ZFN0cnVjdHVyZUNoYWlucygpIHsgfQorRGVzaXJlZFN0cnVjdHVyZUNoYWluczo6fkRlc2lyZWRT
dHJ1Y3R1cmVDaGFpbnMoKSB7IH0KKworYm9vbCBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zOjphcmVT
dGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0
b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3ZlY3RvcltpXS0+aXNTdGlsbFZhbGlk
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkU3RydWN0dXJl
Q2hhaW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkU3RydWN0dXJlQ2hhaW5zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zX2gK
KyNkZWZpbmUgREZHRGVzaXJlZFN0cnVjdHVyZUNoYWluc19oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zIHsKK3B1Ymxp
YzoKKyAgICBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zKCk7CisgICAgfkRlc2lyZWRTdHJ1Y3R1cmVD
aGFpbnMoKTsKKyAgICAKKyAgICB2b2lkIGFkZExhemlseShQYXNzUmVmUHRyPEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4+IGNoYWluKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWlu
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7Citwcml2YXRl
OgorICAgIFZlY3RvcjxSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gPiBtX3ZlY3RvcjsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZFN0cnVjdHVyZUNoYWluc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDk3NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMwLDYgKzQzMCwxMiBAQCB2b2lkIEdyYXBoOjpyZXNldEV4aXRTdGF0ZXMoKQogICAgIH0KIH0K
IAorYm9vbCBHcmFwaDo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93YXRj
aHBvaW50cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgbV9jaGFpbnMuYXJlU3RpbGxWYWxp
ZCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiREZHQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHQmFz
aWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Rlc2lyZWRJZGVudGlmaWVycy5oIgorI2luY2x1ZGUg
IkRGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuaCIKICNpbmNsdWRlICJERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xp
dmVkU3RhdGUuaCIKQEAgLTY5NSw2ICs2OTYsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICAKICAgICBWTSYgbV92
bTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29t
cGlsYXRpb24+IG1fY29tcGlsYXRpb247CkBAIC03MjQsNiArNzI3LDcgQEAgcHVibGljOgogICAg
IE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVzdEhhbmRsZVZhbHVlczsKICAgICBEZXNpcmVkV2F0Y2hw
b2ludHMgbV93YXRjaHBvaW50czsKICAgICBEZXNpcmVkSWRlbnRpZmllcnMgbV9pZGVudGlmaWVy
czsKKyAgICBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zIG1fY2hhaW5zOwogICAgIAogICAgIE9wdGlt
aXphdGlvbkZpeHBvaW50U3RhdGUgbV9maXhwb2ludFN0YXRlOwogICAgIEdyYXBoRm9ybSBtX2Zv
cm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUsNyBAQCBib29sIEpJVENv
bXBpbGVyOjpjb21waWxlKCkKIAogYm9vbCBKSVRDb21waWxlcjo6bGluayhSZWZQdHI8SlNDOjpK
SVRDb2RlPiYgZW50cnkpCiB7Ci0gICAgaWYgKCFtX2dyYXBoLm1fd2F0Y2hwb2ludHMuYXJlU3Rp
bGxWYWxpZCgpKQorICAgIGlmICghbV9ncmFwaC5pc1N0aWxsVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgdGhpcywg
bV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0zNzIsNyArMzcyLDcgQEAg
Ym9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKIAogYm9vbCBKSVRDb21waWxlcjo6
bGlua0Z1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNrKQogewotICAgIGlmICghbV9ncmFwaC5tX3dhdGNo
cG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkKKyAgICBpZiAoIW1fZ3JhcGguaXNTdGlsbFZhbGlkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vID09PSBMaW5rID09PQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVFbnRyeShDQ2FsbEhlbHBlcnMmIGoKIAogYm9v
bCBsaW5rKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKQogewotICAgIGlmICghc3Rh
dGUuZ3JhcGgubV93YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpIHsKKyAgICBpZiAoIXN0YXRl
LmdyYXBoLmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIExMVk1EaXNwb3NlRXhlY3V0aW9uRW5n
aW5lKHN0YXRlLmVuZ2luZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgorCituYW1lc3BhY2UgSlND
IHsKKworSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWQpCisgICAgOiBtX2dsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3QpCisgICAgLCBtX2hlYWQoaGVhZCkKK3sKKyAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IGhlYWQtPnByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOworICAg
IGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKFN0cnVj
dHVyZSogY3VycmVudCA9IGFzT2JqZWN0KHByb3RvdHlwZSktPnN0cnVjdHVyZSgpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpCisgICAgICAg
IG1fdmVjdG9yLmFwcGVuZChjdXJyZW50KTsKK30KKworSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBo
ZWFkLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSkKKyAgICA6IG1fZ2xvYmFsT2JqZWN0
KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCisgICAgLCBtX2hlYWQoaGVhZCkKK3sKKyAgICBt
X3ZlY3Rvci5hcHBlbmQocHJvdG90eXBlU3RydWN0dXJlKTsKK30KKworSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pCisgICAgOiBtX2dsb2JhbE9iamVj
dChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQorICAgICwgbV9oZWFkKGhlYWQpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgY2hhaW4tPmhlYWQoKVtpXTsgKytpKQorICAgICAgICBtX3Zl
Y3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Cit9CisKK0ludGVuZGVkU3RydWN0
dXJlQ2hhaW46OkludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZSogaGVhZCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCkKKyAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCisgICAgLCBtX2hl
YWQoaGVhZCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgbV92ZWN0b3IuYXBwZW5kKGNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOworfQorCitJbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjp+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpCit7Cit9CisKK2Jv
b2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKCkgY29uc3QKK3sKKyAgICBK
U1ZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX2hlYWQtPnByb3RvdHlwZUZvckxvb2t1cChtX2ds
b2JhbE9iamVjdCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChhc09iamVjdChjdXJyZW50UHJvdG90eXBlKS0+c3RydWN0
dXJlKCkgIT0gbV92ZWN0b3JbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGN1cnJlbnRQcm90b3R5cGUgPSBtX3ZlY3RvcltpXS0+c3RvcmVkUHJvdG90eXBlKCk7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om1h
dGNoZXMoU3RydWN0dXJlQ2hhaW4qIGNoYWluKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV92ZWN0b3Jb
aV0gIT0gY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKGNoYWluLT5oZWFkKClbbV92ZWN0b3Iuc2l6ZSgpXSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitTdHJ1Y3R1cmVDaGFpbiogSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6Y2hhaW4oVk0mIHZtKSBjb25zdAoreworICAgIEFTU0VSVChp
c1N0aWxsVmFsaWQoKSk7CisgICAgU3RydWN0dXJlQ2hhaW4qIHJlc3VsdCA9IFN0cnVjdHVyZUNo
YWluOjpjcmVhdGUodm0sIG1faGVhZCk7CisgICAgQVNTRVJUKG1hdGNoZXMocmVzdWx0KSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJ
bnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOworICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodm0sIHVp
ZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIGlmICghaXNWYWxpZE9mZnNl
dChvZmZzZXQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCgpCit7CisgICAgaWYgKG1faGVhZC0+
dHlwZUluZm8oKS50eXBlKCkgPT0gUHJveHlUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92ZWN0b3JbaV07CisgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFByb3h5VHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitKU09iamVj
dCogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6dGVybWluYWxQcm90b3R5cGUoKSBjb25zdAorewor
ICAgIEFTU0VSVCghbV92ZWN0b3IuaXNFbXB0eSgpKTsKKyAgICBpZiAobV92ZWN0b3Iuc2l6ZSgp
ID09IDEpCisgICAgICAgIHJldHVybiBhc09iamVjdChtX2hlYWQtPnByb3RvdHlwZUZvckxvb2t1
cChtX2dsb2JhbE9iamVjdCkpOworICAgIHJldHVybiBhc09iamVjdChtX3ZlY3RvclttX3ZlY3Rv
ci5zaXplKCkgLSAyXS0+c3RvcmVkUHJvdG90eXBlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gK
KyNkZWZpbmUgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbl9oCisKKyNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29kZUJsb2NrOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmVDaGFp
bjsKK2NsYXNzIFZNOworCitjbGFzcyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluIDogcHVibGljIFJl
ZkNvdW50ZWQ8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4geworcHVibGljOgorICAgIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBo
ZWFkKTsKKyAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbik7CisgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IHVuc2lnbmVkIGNvdW50KTsKKyAgICB+SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigpOworICAgIAor
ICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAgYm9vbCBtYXRjaGVzKFN0cnVjdHVy
ZUNoYWluKikgY29uc3Q7CisgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKFZNJikgY29uc3Q7Cisg
ICAgYm9vbCBtYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgU3RyaW5nSW1wbCogdWlkKTsKKyAgICBi
b29sIGlzTm9ybWFsaXplZCgpOworICAgIAorICAgIFN0cnVjdHVyZSogaGVhZCgpIGNvbnN0IHsg
cmV0dXJuIG1faGVhZDsgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3Iuc2l6ZSgpOyB9CisgICAgU3RydWN0dXJlKiBhdChzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIG1fdmVjdG9yW2luZGV4XTsgfQorICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3Qg
aW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIAorICAgIEpTT2JqZWN0KiB0ZXJtaW5h
bFByb3RvdHlwZSgpIGNvbnN0OworICAgIAorICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmVjdG9yLmxhc3QoKTsgfQorcHJpdmF0ZToKKyAgICBKU0dsb2JhbE9iamVjdCog
bV9nbG9iYWxPYmplY3Q7CisgICAgU3RydWN0dXJlKiBtX2hlYWQ7CisgICAgVmVjdG9yPFN0cnVj
dHVyZSo+IG1fdmVjdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcwLDEzICs5
NzAsOSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAg
IHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOwogfQogCi1ib29sIFN0
cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgU3RyaW5n
SW1wbCogdWlkKQorYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgLy8gTm90ZSwg
dGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gdHdvIGtpbmRzIG9mIHBsYWNlczogKDEpIGFzc2Vy
dGlvbnMgYW5kICgyKQotICAgIC8vIHRoZSBjb21waWxhdGlvbiB0aHJlYWQuIEFzIHN1Y2gsIGl0
IGRvZXMgdGhpbmdzIHNvbWV3aGF0IGNhcmVmdWxseSB0byBlbnN1cmUKLSAgICAvLyB0aHJlYWQg
c2FmZXR5LiBDdXJyZW50bHkgdGhhdCBvbmx5IGFmZmVjdHMgdGhlIHdheSB3ZSBkbyBTdHJ1Y3R1
cmU6OmdldCgpLgotICAgIAotICAgIHVuc2lnbmVkIGkgPSB0b1VJbnQzMkZyb21TdHJpbmdJbXBs
KHVpZCk7CisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgaWYg
KGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAgICByZXR1cm4gYW55T2JqZWN0
SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpOwogICAgIApAQCAtOTg5LDcgKzk4
NSw3IEBAIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2UKICAgICAgICAg
CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0Q29uY3Vy
cmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkBAIC0xMDAwLDExICs5OTYs
NiBAQCBib29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlCiAgICAgfQogfQog
Ci1ib29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gcHJvdG90eXBlQ2hh
aW5NYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwotfQotCiAjaWYg
RE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCiAKIHZvaWQgUHJvcGVydHlUYWJsZTo6Y2hl
Y2tDb25zaXN0ZW5jeSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw2ICsxNTQsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldCh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQog
ICAgICAgICAKICAgICBKU1ZhbHVlIHN0b3JlZFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvdG90eXBlLmdldCgpOyB9CisgICAgSlNPYmplY3QqIHN0b3JlZFByb3RvdHlwZU9iamVjdCgp
IGNvbnN0OworICAgIFN0cnVjdHVyZSogc3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkgY29uc3Q7
CiAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAg
SlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICBK
U1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChDb2RlQmxvY2sqKSBjb25zdDsKQEAgLTE2Miw3ICsx
NjQsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogICAgICAgICAKICAgICAvLyBXaWxsIGp1c3QgdGhlIHByb3RvdHlwZSBj
aGFpbiBpbnRlcmNlcHQgdGhpcyBwcm9wZXJ0eSBhY2Nlc3M/Ci0gICAgYm9vbCBwcm90b3R5cGVD
aGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIGJvb2wg
cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgUHJvcGVydHlOYW1lKTsKICAg
ICAgICAgCiAgICAgYm9vbCB0cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSBjb25z
dCB7IHJldHVybiAhIW1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXM7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9u
IDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMjIgQEAgaW5saW5lIFN0cnVjdHVyZSog
U3RydWN0dXJlOjpjcmVhdGUoVk0mIAogICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7CiB9CiAKK2lu
bGluZSBKU09iamVjdCogU3RydWN0dXJlOjpzdG9yZWRQcm90b3R5cGVPYmplY3QoKSBjb25zdAor
eworICAgIEpTVmFsdWUgdmFsdWUgPSBtX3Byb3RvdHlwZS5nZXQoKTsKKyAgICBpZiAodmFsdWUu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBhc09iamVjdCh2YWx1ZSk7
Cit9CisKK2lubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlU3RydWN0
dXJlKCkgY29uc3QKK3sKKyAgICBKU09iamVjdCogb2JqZWN0ID0gc3RvcmVkUHJvdG90eXBlT2Jq
ZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBv
YmplY3QtPnN0cnVjdHVyZSgpOworfQorCiBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEFTU0VSVCgh
aXNDb21waWxhdGlvblRocmVhZCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201253</attachid>
            <date>2013-05-09 11:15:45 -0700</date>
            <delta_ts>2013-05-09 15:39:41 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48524</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5ODIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAorMjAxMy0wNS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgaGF2ZSBpdHMgb3duIG5vdGlvbiBvZiBTdHJ1Y3R1cmVD
aGFpbiwgYW5kIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB2YWxpZGF0ZSBpdCBhZnRlciBjb21w
aWxhdGlvbiBmaW5pc2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1ODQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiwgd2hpY2gg
aXMgbGlrZSBTdHJ1Y3R1cmVDaGFpbiwgZXhjZXB0IHRoYXQgaXQgaG9sZHMgYSBiaXQKKyAgICAg
ICAgbW9yZSBpbmZvcm1hdGlvbiBhbmQgY2FuIGJlIHZhbGlkYXRlZCBpbmRlcGVuZGFudGx5IG9m
IGl0cyBvd25pbmcgU3RydWN0dXJlIGFuZCBsZXhpY2FsCisgICAgICAgIEdsb2JhbE9iamVjdCwg
c2luY2UgaXQgcmVtZW1iZXJzIGJvdGggb2YgdGhvc2UgdGhpbmdzLiBJdCdzIGFsc28gbWFsbG9j
J2QgYW5kIFJlZkNvdW50ZWQKKyAgICAgICAgcmF0aGVyIHRoYW4gR0MnZCwgc28gaXQgY2FuIGJl
IGFsbG9jYXRlZCBpbiBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkLgorICAgICAgICAK
KyAgICAgICAgR2F2ZSB0aGlzIGNsYXNzIGEgYnVuY2ggb2YgbWV0aG9kcyB0byBhbGxvdyB0aGUg
Zm9sbG93aW5nIGlkaW9tOgorICAgICAgICAKKyAgICAgICAgLSBTbmFwc2hvdCBhIHN0cnVjdHVy
ZSBjaGFpbiBjb25jdXJyZW50bHkuIFRoaXMgc3RydWN0dXJlIGNoYWluIG1heSBlbmQgdXAgYmVp
bmcKKyAgICAgICAgICB3cm9uZyBpbiBjYXNlIG9mIHJhY2VzLCBidXQgaW4gdGhhdCBjYXNlIHdl
IHdpbGwgZmluZCBvdXQgd2hlbiB3ZSB0cnkgdG8gdmFsaWRhdGUKKyAgICAgICAgICBpdC4KKyAg
ICAgICAgCisgICAgICAgIC0gUGVyZm9ybSB2YWxpZGF0aW9uIG9uIHRoZSBzdHJ1Y3R1cmUgY2hh
aW4gaXRzZWxmLCB3aXRob3V0IHJlY29tcHV0aW5nIHRoZSBjaGFpbi4KKyAgICAgICAgICBQcmV2
aW91c2x5LCBtYW55IGNoYWluIHZhbGlkYXRpb24gbWV0aG9kcyAocHJvdG90eXBlQ2hhaW5NYXlJ
bnRlcmNlcHRTdG9yZVRvKCkgZm9yCisgICAgICAgICAgZXhhbXBsZSkgcmVjb21wdXRlZCB0aGUg
Y2hhaW4sIGFuZCBoZW5jZSwgd2VyZSBpbmhlcmVudGx5IHJhY3k6IHlvdSBjb3VsZCBidWlsZCBv
bmUKKyAgICAgICAgICBjaGFpbiBhbmQgdGhlbiB2YWxpZGF0ZSBhZ2FpbnN0IGEgZGlmZmVyZW50
IGNoYWluLCBhbmQgaGVuY2Ugbm90IHJlYWxpemUgdGhhdCB0aGUKKyAgICAgICAgICBjaGFpbiB5
b3UgZGlkIGJ1aWxkIHdhcyBhY3R1YWxseSBicm9rZW4gZm9yIHlvdXIgcHVycG9zZXMsIGJlY2F1
c2UgdGhlIGNoYWluIHlvdQorICAgICAgICAgIGNoZWNrZWQgd2FzIGEgZGlmZmVyZW50IG9uZS4K
KyAgICAgICAgCisgICAgICAgIC0gVmFsaWRhdGUgdGhhdCB0aGUgY2hhaW4gaXMgc3RpbGwgdGhl
IHJpZ2h0IG9uZSBhdCBhbnkgdGltZSwgYWxsb3dpbmcgdGhlIGNhbmNlbGxhdGlvbgorICAgICAg
ICAgIG9mIGNvbXBpbGF0aW9uIGlmIHRoZXJlIHdhcyBhIHJhY2UuCisgICAgICAgIAorICAgICAg
ICBBbHNvIGFkZGVkIERGRzo6RGVzaXJlZFN0cnVjdHVyZUNoYWlucywgd2hpY2ggdHJhY2tzIHRo
b3NlIGludGVuZGVkIHN0cnVjdHVyZSBjaGFpbnMgdGhhdAorICAgICAgICB0aGUgY29tcGlsZXIg
aGFkIGFscmVhZHkgY2hvc2VuIHRvIHVzZS4gSWYgYW55IG9mIHRob3NlIGFyZSBpbnZhbGlkIGF0
IGxpbmsgdGltZSwgdGhyb3cKKyAgICAgICAgb3V0IHRoZSBjb21waWxhdGlvbi4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JDaGFpbik6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6R2V0QnlJZFN0YXR1cyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0
dXM6OmNoYWluKToKKyAgICAgICAgKEdldEJ5SWRTdGF0dXMpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRl
RnJvbUxMSW50KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6Cisg
ICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpQdXRCeUlk
U3RhdHVzOjpQdXRCeUlkU3RhdHVzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6c3Ry
dWN0dXJlQ2hhaW4pOgorICAgICAgICAoUHV0QnlJZFN0YXR1cyk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4
ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZv
bGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6RGVzaXJlZFN0cnVjdHVyZUNoYWluczo6RGVzaXJlZFN0cnVjdHVyZUNoYWlucyk6CisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZFN0cnVjdHVyZUNoYWluczo6fkRlc2lyZWRTdHJ1Y3R1cmVD
aGFpbnMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRTdHJ1Y3R1cmVDaGFpbnM6OmFyZVN0
aWxsVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmg6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRTdHJ1Y3R1cmVDaGFpbnM6OmFkZExhemlseSk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNT
dGlsbFZhbGlkKToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmxpbmtGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbik6CisgICAgICAgIChKU0M6
OkludGVuZGVkU3RydWN0dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKToKKyAgICAg
ICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNTdGlsbFZhbGlkKToKKyAgICAgICAg
KEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyk6CisgICAgICAgIChKU0M6Oklu
dGVuZGVkU3RydWN0dXJlQ2hhaW46OmNoYWluKToKKyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyk6CisgICAgICAgIChKU0M6OkludGVuZGVk
U3RydWN0dXJlQ2hhaW46OmlzTm9ybWFsaXplZCk6CisgICAgICAgIChKU0M6OkludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46OnRlcm1pbmFsUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0ludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbik6CisgICAgICAgIChKU0M6OkludGVuZGVkU3RydWN0dXJlQ2hh
aW46OmhlYWQpOgorICAgICAgICAoSlNDOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpzaXplKToK
KyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6YXQpOgorICAgICAgICAoSlND
OjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6SW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bGFzdCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0
U3RvcmVUbyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlT2JqZWN0KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKToKKwogMjAx
My0wNS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGJy
b2tlbiAzMi1iaXQgYnVpbGQgKyBzb21lIGNsZWFuIHVwIGluIEpJVFN0dWJzLmNwcC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwxMCBAQAogCQkwRjQ2ODBENDE0QkJEMjQ5MDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5jcHAgKi87IH07CiAJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUw
OEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovOyB9OworCQkwRjRFMUEwRTE3M0FFRERDMDA3RUUy
RDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwQzE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CisJCTBGNEUxQTBGMTczQUVEREMwMDdFRTJEMyAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGNEUxQTEyMTczQUYwN0IwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hh
aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRF
MUExMTE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEUxQTEzMTcz
QUYwN0UwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTEwMTczQUYwNzgwMDdF
RTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLzsgfTsKIAkJMEY1NTQxQjEx
NjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBT
cGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBT
cGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUMxOTQxNzI3
NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERG
R0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpAQCAtMTEzNCw2ICsxMTM4LDEwIEBACiAJCTBGNDY4
MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9z
dENhbGxSZXR1cm5WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIb3N0
Q2FsbFJldHVyblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4
MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVuZGVk
U3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRFMUEw
RDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEUxQTEwMTczQUYwNzgwMDdFRTJEMyAvKiBERkdEZXNp
cmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRFMUExMTE3M0FGMDc4MDA3RUUyRDMg
LyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVk
U3RydWN0dXJlQ2hhaW5zLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3BlY2lhbFBvaW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1
NDFCMDE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3BlY2lhbFBvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5j
cHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNjEzLDYgKzI2MjEsOCBAQAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdC
MiAvKiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyog
SW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1
IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKKwkJCQkwRjRFMUEwQzE3M0FFRERDMDA3RUUy
RDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8sCisJCQkJMEY0RTFBMEQxNzNBRURE
QzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBF
MTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0Ew
RTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQk4NkJGNjQyQTE0
OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8sCkBAIC0yNjM0LDggKzI2NDQsNiBAQAog
CQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICovLAogCQkJ
CUY2OTJBODVFMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNwcCAqLywKIAkJCQlGNjky
QTg1RjAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5oICovLAotCQkJCUUxOEUzQTU3MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8sCi0JCQkJRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0
IC8qIFZNLmggKi8sCiAJCQkJMTRERTBENjgwRDAyNDMxNDAwQUFDQ0EyIC8qIEpTR2xvYmFsT2Jq
ZWN0LmNwcCAqLywKIAkJCQlBOEU4OTQzMzBDRDA2MDNGMDAzNjcxNzkgLyogSlNHbG9iYWxPYmpl
Y3QuaCAqLywKIAkJCQlCQzc1NkZDNjBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuY3BwICovLApAQCAtMjc3NCw2ICsyNzgyLDggQEAKIAkJCQk1RDUzNzI2RTBFMUM1
NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oICovLAogCQkJCTBGRUIzRUNCMTYyMzdGNDcwMEFCNjdB
RCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEwMDIz
RDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKKwkJCQlFMThFM0E1NzBERjkyNzhDMDBE
OTBCMzQgLyogVk0uY3BwICovLAorCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5o
ICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywKIAkJ
CQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENC
Nzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKQEAgLTI4MTcsNiArMjgy
Nyw4IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNEUxQTEwMTczQUYwNzgwMDdFRTJE
MyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLywKKwkJCQkwRjRFMUExMTE3M0FG
MDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovLAogCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNTVD
MTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAgLTMxOTEs
NiArMzIwMyw3IEBACiAJCQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxs
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4
MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0
aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzQsNiArMzI4Nyw3IEBACiAJCQkJMEZDMDk3NkEx
NDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5
NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRFMUExMjE3M0FGMDdCMDA3RUUyRDMgLyogREZH
RGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVG
OTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1RTE0
RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsu
aCBpbiBIZWFkZXJzICovLApAQCAtNDE4NCw2ICs0MTk4LDcgQEAKIAkJCQkxNDI4MDgzQTEwN0VD
MDc1MDAxM0U3QjIgLyogSlNTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENTEw
N0VDMzc2MDA0MjdBNDggLyogSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjYwMEI1
QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCNzRFMEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0cmlu
Z1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZBQUIzODBCNjZBOTQ0MDBFNTVGMTYgLyog
SlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQwQzE1N0VFMDlGMDA0
QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyMDgs
NiArNDIyMyw3IEBACiAJCQkJMEY0NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyog
TExJbnRTbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAw
ODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNEUxQTEzMTcz
QUYwN0UwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1h
Y2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE0OTc2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYKIH0KIAotdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yQ2hhaW4oR2V0QnlJZFN0YXR1cyYgcmVzdWx0LCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit2b2lkIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JDaGFpbihHZXRCeUlkU3RhdHVzJiByZXN1bHQsIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgU3RyaW5nSW1wbCogdWlkKQogewogI2lmIEVOQUJMRShKSVQpICYmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKICAgICAvLyBWYWxpZGF0ZSB0aGUgY2hhaW4uIElmIHRoZSBjaGFp
biBpcyBpbnZhbGlkLCB0aGVuIGN1cnJlbnRseSB0aGUgYmVzdCB0aGluZwpAQCAtNzcsMTcgKzc3
LDEzIEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKEdldEIKICAgICAvLyBo
YXZlIG5vdyBpcyB0aGF0IGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQgYmV0d2Vl
biB3aGVuIGl0IHdhcwogICAgIC8vIGNhY2hlZCBvbiBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB3
aGVuIHRoZSBERkcgdHJpZWQgdG8gaW5saW5lIHRoZSBhY2Nlc3MsCiAgICAgLy8gdGhlbiB3ZSBm
YWxsIGJhY2sgb24gYSBwb2x5bW9ycGhpYyBhY2Nlc3MuCi0gICAgU3RydWN0dXJlKiBjdXJyZW50
U3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gMDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0Lm1fY2hhaW4uc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgQVNTRVJUKCFjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7Ci0g
ICAgICAgIGN1cnJlbnRPYmplY3QgPSBhc09iamVjdChjdXJyZW50U3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAocHJvZmlsZWRCbG9jaykpOwotICAgICAgICBjdXJyZW50U3RydWN0dXJlID0g
cmVzdWx0Lm1fY2hhaW5baV07Ci0gICAgICAgIGlmIChjdXJyZW50T2JqZWN0LT5zdHJ1Y3R1cmUo
KSAhPSBjdXJyZW50U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIXJlc3VsdC5tX2NoYWluLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIEFTU0VSVChjdXJyZW50T2JqZWN0KTsKKyAgICBKU09iamVjdCogY3VycmVudE9iamVj
dCA9IHJlc3VsdC5tX2NoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOworICAgIFN0cnVjdHVyZSog
Y3VycmVudFN0cnVjdHVyZSA9IHJlc3VsdC5tX2NoYWluLT5sYXN0KCk7CisgICAgCisgICAgQVNT
RVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKICAgICAgICAgCiAgICAg
dW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwpA
QCAtOTksMTMgKzk1LDEyIEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKEdl
dEIKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7
CisgICAgcmVzdWx0Lm1fc3RydWN0dXJlU2V0LmFkZChyZXN1bHQubV9jaGFpbi0+aGVhZCgpKTsK
ICAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVlKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVk
QmxvY2spOwogICAgIFVOVVNFRF9QQVJBTSh1aWQpOwotICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1
cmUpOwogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogI2VuZGlmCiB9CkBAIC0yMTgs
MjEgKzIxMywyMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAg
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOiB7CiAgICAgICAgIGlmICghc3R1YkluZm8u
dS5nZXRCeUlkUHJvdG8uaXNEaXJlY3QpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hhaW4uYXBwZW5kKHN0dWJJ
bmZvLnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgIGNv
bXB1dGVGb3JDaGFpbigKLSAgICAgICAgICAgIHJlc3VsdCwgcHJvZmlsZWRCbG9jaywgdWlkLAot
ICAgICAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIHJlc3VsdC5tX2NoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oCisgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAorICAgICAgICAgICAgc3R1
YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKKyAgICAgICAg
ICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSkpOwor
ICAgICAgICBjb21wdXRlRm9yQ2hhaW4ocmVzdWx0LCBwcm9maWxlZEJsb2NrLCB1aWQpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9j
aGFpbjogewogICAgICAgICBpZiAoIXN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmlzRGlyZWN0KQog
ICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywgdHJ1ZSk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jb3Vu
dDsgKytpKQotICAgICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uYXBwZW5kKHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmNoYWluLT5oZWFkKClbaV0uZ2V0KCkpOwotICAgICAgICBjb21wdXRlRm9yQ2hh
aW4oCi0gICAgICAgICAgICByZXN1bHQsIHByb2ZpbGVkQmxvY2ssIHVpZCwKLSAgICAgICAgICAg
IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworICAg
ICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAorICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgIHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksCisgICAgICAgICAgICBzdHViSW5m
by51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwKKyAgICAgICAgICAgIHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmNvdW50KSk7CisgICAgICAgIGNvbXB1dGVGb3JDaGFpbihyZXN1bHQsIHByb2Zp
bGVkQmxvY2ssIHVpZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJldmlz
aW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR2V0QnlJZFN0
YXR1c19oCiAjZGVmaW5lIEdldEJ5SWRTdGF0dXNfaAogCisjaW5jbHVkZSAiSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU2V0LmgiCiAjaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+CkBAIC01OSw3ICs2MCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBHZXRCeUlkU3RhdHVzKAogICAgICAgICBTdGF0ZSBzdGF0ZSwg
Ym9vbCB3YXNTZWVuSW5KSVQsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3Ry
dWN0dXJlU2V0KCksCi0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZz
ZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKSwgVmVjdG9yPFN0cnVjdHVyZSo+
IGNoYWluID0gVmVjdG9yPFN0cnVjdHVyZSo+KCkpCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IGludmFsaWRPZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKSwg
UGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IG51bGxwdHIpCiAgICAg
ICAgIDogbV9zdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVT
ZXQpCiAgICAgICAgICwgbV9jaGFpbihjaGFpbikKQEAgLTgyLDE5ICs4MywxOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBNYWtlc0Nh
bGxzOyB9CiAgICAgCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQotICAgIGNvbnN0IFZlY3RvcjxTdHJ1Y3R1cmUq
PiYgY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluOyB9IC8vIFJldHVybnMgZW1wdHkgdmVj
dG9yIGlmIHRoaXMgaXMgYSBkaXJlY3QgYWNjZXNzLgorICAgIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4qIGNoYWluKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxJbnRlbmRlZFN0cnVjdHVyZUNo
YWluKj4obV9jaGFpbi5nZXQoKSk7IH0gLy8gUmV0dXJucyBudWxsIGlmIHRoaXMgaXMgYSBkaXJl
Y3QgYWNjZXNzLgogICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3BlY2lmaWNWYWx1ZTsgfSAvLyBSZXR1cm5zIEpTVmFsdWUoKSBpZiB0aGVyZSBpcyBubyBzcGVj
aWZpYyB2YWx1ZS4KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQogICAgIAogICAgIGJvb2wgd2FzU2VlbkluSklUKCkgY29uc3QgeyByZXR1cm4g
bV93YXNTZWVuSW5KSVQ7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0
ZUZvckNoYWluKEdldEJ5SWRTdGF0dXMmIHJlc3VsdCwgQ29kZUJsb2NrKiwgU3RyaW5nSW1wbCog
dWlkLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlRm9yQ2hhaW4oR2V0QnlJ
ZFN0YXR1cyYgcmVzdWx0LCBDb2RlQmxvY2sqLCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIHN0YXRp
YyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBTdGF0ZSBtX3N0YXRlOwog
ICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKLSAgICBWZWN0b3I8U3RydWN0dXJlKj4g
bV9jaGFpbjsKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKICAg
ICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
ICAgICBib29sIG1fd2FzU2VlbkluSklUOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw3ICs3MiwxMCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGcm9tCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwogICAg
IAotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVRyYW5zaXRpb24sIHN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBjaGFpbiwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygK
KyAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsCisgICAg
ICAgIGNoYWluID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRC
bG9jaywgc3RydWN0dXJlLCBjaGFpbikpIDogMCwKKyAgICAgICAgb2Zmc2V0KTsKICNlbHNlCiAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9m
ZnNldCk7CiAjZW5kaWYKQEAgLTEyNSw3ICsxMjgsOSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwKICAg
ICAgICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0
dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24u
c3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5z
aXRpb24uY2hhaW4uZ2V0KCksCisgICAgICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5jaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkgOiAwLAogICAgICAgICAgICAgICAg
IG9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CkBAIC0xNzIsOSArMTc3LDEyIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBpZiAoc3RydWN0dXJl
LT50eXBlSW5mbygpLnR5cGUoKSA9PSBTdHJpbmdUeXBlKQogICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbj4gY2hhaW47CiAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICBjaGFpbiA9IGFk
b3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KSk7CisgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBzZXR0
ZXJzIG9yIHJlYWQtb25seSBwcm9wZXJ0aWVzLCB0aGVuIGdpdmUgdXAuCi0gICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgdWlkKSkKKyAg
ICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCB1aWQpKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhc24ndCBiZWVuIG5vcm1hbGl6ZWQgKGkuZS4g
dGhlcmUgYXJlIHByb3hpZXMgb3IgZGljdGlvbmFyaWVzKQpAQCAtMTg0LDcgKzE5Miw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgLy8gZGljdGlv
bmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IHRob3NlIG9iamVjdHMg
d2VyZSBuZXZlciB1c2VkIGFzCiAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUg
cHJvdG90eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBv
ZgogICAgICAgICAvLyB0aGUgb3RoZXIgY2hlY2tzIGJlbG93IHdpbGwgZmFpbC4KLSAgICAgICAg
aWYgKCFpc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkp
CisgICAgICAgIGlmICghY2hhaW4tPmlzTm9ybWFsaXplZCgpKQogICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQogICAgIApAQCAtMjA3LDkgKzIx
NSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBBU1NF
UlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpKTsKICAg
ICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKLSAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cygKLSAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCB0cmFuc2l0aW9u
LAotICAgICAgICBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKHZtLCBnbG9iYWxPYmplY3QpLCBv
ZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVRyYW5zaXRpb24sIHN0cnVj
dHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZzZXQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTQ5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2lmbmRlZiBQdXRCeUlkU3RhdHVzX2gKICNkZWZpbmUgUHV0QnlJZFN0YXR1c19oCiAKKyNp
bmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZz
ZXQuaCIKICNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdJbXBsLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RhdGUgc3RhdGUs
CiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLAorICAg
ICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHN0cnVjdHVyZUNoYWluLAog
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkK
ICAgICAgICAgLCBtX29sZFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmUpCkBAIC04Niw3ICs4Nyw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCgobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9u
IHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCkgPT0gIW1fb2xkU3RydWN0dXJlKTsKICAgICAg
ICAgQVNTRVJUKChtX3N0YXRlICE9IFNpbXBsZVRyYW5zaXRpb24pID09ICFtX25ld1N0cnVjdHVy
ZSk7Ci0gICAgICAgIEFTU0VSVCgobV9zdGF0ZSAhPSBTaW1wbGVUcmFuc2l0aW9uKSA9PSAhbV9z
dHJ1Y3R1cmVDaGFpbik7CisgICAgICAgIEFTU0VSVCghKChtX3N0YXRlICE9IFNpbXBsZVRyYW5z
aXRpb24pICYmIG1fc3RydWN0dXJlQ2hhaW4pKTsKICAgICAgICAgQVNTRVJUKChtX3N0YXRlID09
IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoKSA9PSAobV9vZmZzZXQg
PT0gaW52YWxpZE9mZnNldCkpOwogICAgIH0KICAgICAKQEAgLTEwMyw3ICsxMDQsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X29sZFN0cnVjdHVyZTsgfQogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7IH0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hh
aW4oKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNoYWluOyB9CisgICAgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNo
YWluLmdldCgpOyB9CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KICAgICAKIHByaXZhdGU6CkBAIC0xMTIsNyArMTEzLDcgQEAgcHJpdmF0ZToK
ICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIFN0cnVjdHVyZSogbV9vbGRTdHJ1Y3R1cmU7CiAgICAg
U3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogbV9zdHJ1Y3R1
cmVDaGFpbjsKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9zdHJ1Y3R1cmVD
aGFpbjsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQ5
NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI3Nyw3ICsxMjc3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdz
IHRoYXQgd2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAx
KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5jaGFpbigpLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzLmNoYWluKCkpOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5zcGVjaWZpY1ZhbHVl
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBz
dGF0dXMuc3BlY2lmaWNWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTcyNSwxMiArMTcyNSwxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KAogICAgICAgICAgICAgICAgIAogICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChnZXRCeUlkU3RhdHVzLnN0cnVjdHVyZVNldCgpKSks
IGJhc2UpOwogICAgIAotICAgIGlmICghZ2V0QnlJZFN0YXR1cy5jaGFpbigpLmlzRW1wdHkoKSkg
eworICAgIGlmIChnZXRCeUlkU3RhdHVzLmNoYWluKCkpIHsKKyAgICAgICAgbV9ncmFwaC5tX2No
YWlucy5hZGRMYXppbHkoZ2V0QnlJZFN0YXR1cy5jaGFpbigpKTsKICAgICAgICAgU3RydWN0dXJl
KiBjdXJyZW50U3RydWN0dXJlID0gZ2V0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0
b25TdHJ1Y3R1cmUoKTsKICAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRPYmplY3QgPSAwOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2V0QnlJZFN0YXR1cy5jaGFpbigpLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnZXRCeUlkU3RhdHVz
LmNoYWluKCktPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjdXJyZW50T2JqZWN0ID0gYXNP
YmplY3QoY3VycmVudFN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBjdXJyZW50U3RydWN0dXJlID0gZ2V0QnlJ
ZFN0YXR1cy5jaGFpbigpW2ldOworICAgICAgICAgICAgY3VycmVudFN0cnVjdHVyZSA9IGdldEJ5
SWRTdGF0dXMuY2hhaW4oKS0+YXQoaSk7CiAgICAgICAgICAgICBiYXNlID0gYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRTdHJ1Y3R1cmUpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjU5MCw2ICsyNTkxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCwKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmllck51bWJlcl0pOworCiAgICAgICAg
ICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAgICAgICAKQEAgLTI2MDgsMTMgKzI2MTAsMTQgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2UocHV0QnlJZFN0
YXR1cy5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRp
Zmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKCFoYXNFeGl0U2l0ZQotICAgICAgICAgICAgICAgICAgICAgICAmJiBwdXRC
eUlkU3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICYm
IHN0cnVjdHVyZUNoYWluSXNTdGlsbFZhbGlkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlyZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1
Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMuc3RydWN0
dXJlQ2hhaW4oKSkpIHsKLQorICAgICAgICAgICAgfSBlbHNlIGlmICgKKyAgICAgICAgICAgICAg
ICAhaGFzRXhpdFNpdGUKKyAgICAgICAgICAgICAgICAmJiBwdXRCeUlkU3RhdHVzLmlzU2ltcGxl
VHJhbnNpdGlvbigpCisgICAgICAgICAgICAgICAgJiYgKCFwdXRCeUlkU3RhdHVzLnN0cnVjdHVy
ZUNoYWluKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVD
aGFpbigpLT5pc1N0aWxsVmFsaWQoKSkpIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fY2hhaW5zLmFkZExhemlseShwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNo
YWluKCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwdXRCeUlkU3RhdHVz
Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICAgICAgICAgIGlmICghZGlyZWN0KSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+
c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKQEAgLTI2MjIsOCArMjYyNSw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKS5h
c0NlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHV0
QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5oZWFkKCk7ICppdDsgKytpdCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSAoKml0KS0+c3RvcmVkUHJvdG90
eXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwdXRC
eUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hh
aW4oKS0+YXQoaSktPnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByb3RvdHlwZS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjMsNyArMTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkg
PT0gMSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5jaGFpbigpLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMuY2hhaW4oKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSA9PSBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIE5vdyBiZWZv
cmUgd2UgZG8gYW55dGhpbmcgZWxzZSwgcHVzaCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgR2V0
QnlJZApAQCAtMjU5LDggKzI1OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBzdGF0dXMu
c3RydWN0dXJlQ2hhaW4oKS0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9ICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jaGFpbnMuYWRkTGF6aWx5KHN0YXR1
cy5zdHJ1Y3R1cmVDaGFpbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXR1cy5zdHJ1Y3R1cmVD
aGFpbigpLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gc3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90
b3R5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVs
bCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkU3RydWN0dXJl
Q2hhaW5zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFN0cnVjdHVyZUNoYWlucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkU3Ry
dWN0dXJlQ2hhaW5zLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitEZXNpcmVkU3RydWN0dXJlQ2hhaW5zOjpEZXNpcmVkU3RydWN0
dXJlQ2hhaW5zKCkgeyB9CitEZXNpcmVkU3RydWN0dXJlQ2hhaW5zOjp+RGVzaXJlZFN0cnVjdHVy
ZUNoYWlucygpIHsgfQorCitib29sIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnM6OmFyZVN0aWxsVmFs
aWQoKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAoIW1fdmVjdG9yW2ldLT5pc1N0aWxsVmFsaWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnNfaAorI2RlZmlu
ZSBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMgeworcHVibGljOgorICAg
IERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMoKTsKKyAgICB+RGVzaXJlZFN0cnVjdHVyZUNoYWlucygp
OworICAgIAorICAgIHZvaWQgYWRkTGF6aWx5KFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gY2hhaW4pCisgICAgeworICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2hhaW4pOworICAg
IH0KKyAgICAKKyAgICBib29sIGFyZVN0aWxsVmFsaWQoKSBjb25zdDsKK3ByaXZhdGU6CisgICAg
VmVjdG9yPFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiA+IG1fdmVjdG9yOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0OTc2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsNiAr
NDMwLDEyIEBAIHZvaWQgR3JhcGg6OnJlc2V0RXhpdFN0YXRlcygpCiAgICAgfQogfQogCitib29s
IEdyYXBoOjppc1N0aWxsVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3dhdGNocG9pbnRz
LmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2NoYWlucy5hcmVTdGlsbFZhbGlkKCk7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJERkdBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
LmgiCiAjaW5jbHVkZSAiREZHRGVzaXJlZElkZW50aWZpZXJzLmgiCisjaW5jbHVkZSAiREZHRGVz
aXJlZFN0cnVjdHVyZUNoYWlucy5oIgogI2luY2x1ZGUgIkRGR0Rlc2lyZWRXYXRjaHBvaW50cy5o
IgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0
ZS5oIgpAQCAtNjk1LDYgKzY5Niw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAK
KyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIAogICAgIFZNJiBtX3ZtOwogICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlv
bj4gbV9jb21waWxhdGlvbjsKQEAgLTcyNCw2ICs3MjcsNyBAQCBwdWJsaWM6CiAgICAgT3BlcmFu
ZHM8SlNWYWx1ZT4gbV9tdXN0SGFuZGxlVmFsdWVzOwogICAgIERlc2lyZWRXYXRjaHBvaW50cyBt
X3dhdGNocG9pbnRzOwogICAgIERlc2lyZWRJZGVudGlmaWVycyBtX2lkZW50aWZpZXJzOworICAg
IERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMgbV9jaGFpbnM7CiAgICAgCiAgICAgT3B0aW1pemF0aW9u
Rml4cG9pbnRTdGF0ZSBtX2ZpeHBvaW50U3RhdGU7CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiAxNDk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDcgKzI3NSw3IEBAIGJvb2wgSklUQ29tcGlsZXI6
OmNvbXBpbGUoKQogCiBib29sIEpJVENvbXBpbGVyOjpsaW5rKFJlZlB0cjxKU0M6OkpJVENvZGU+
JiBlbnRyeSkKIHsKLSAgICBpZiAoIW1fZ3JhcGgubV93YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlk
KCkpCisgICAgaWYgKCFtX2dyYXBoLmlzU3RpbGxWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAgLTM3Miw3ICszNzIsNyBAQCBib29sIEpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogCiBib29sIEpJVENvbXBpbGVyOjpsaW5rRnVu
Y3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGVudHJ5V2l0aEFyaXR5Q2hlY2spCiB7Ci0gICAgaWYgKCFtX2dyYXBoLm1fd2F0Y2hwb2ludHMu
YXJlU3RpbGxWYWxpZCgpKQorICAgIGlmICghbV9ncmFwaC5pc1N0aWxsVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gPT09IExpbmsgPT09CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDE0OTc2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgc3RhdGljIHZvaWQgY29tcGlsZUVudHJ5KENDYWxsSGVscGVycyYgagogCiBib29sIGxpbmso
U3RhdGUmIHN0YXRlLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCiB7Ci0gICAgaWYgKCFzdGF0ZS5ncmFw
aC5tX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkgeworICAgIGlmICghc3RhdGUuZ3JhcGgu
aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUoc3Rh
dGUuZW5naW5lKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hh
aW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbi5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVhZCkKKyAgICA6IG1fZ2xvYmFsT2JqZWN0
KGdsb2JhbE9iamVjdCkKKyAgICAsIG1faGVhZChoZWFkKQoreworICAgIEpTVmFsdWUgcHJvdG90
eXBlID0gaGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCk7CisgICAgaWYgKHBy
b3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoU3RydWN0dXJlKiBj
dXJyZW50ID0gYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCk7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgbV92ZWN0
b3IuYXBwZW5kKGN1cnJlbnQpOworfQorCitJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjpJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0
cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlKQorICAgIDogbV9nbG9iYWxPYmplY3QoY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkKKyAgICAsIG1faGVhZChoZWFkKQoreworICAgIG1fdmVjdG9y
LmFwcGVuZChwcm90b3R5cGVTdHJ1Y3R1cmUpOworfQorCitJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
OjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUq
IGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKKyAgICA6IG1fZ2xvYmFsT2JqZWN0KGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpCisgICAgLCBtX2hlYWQoaGVhZCkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBjaGFpbi0+aGVhZCgpW2ldOyArK2kpCisgICAgICAgIG1fdmVjdG9yLmFw
cGVuZChjaGFpbi0+aGVhZCgpW2ldLmdldCgpKTsKK30KKworSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
KiBoZWFkLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHVuc2lnbmVkIGNvdW50KQorICAgIDogbV9n
bG9iYWxPYmplY3QoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKKyAgICAsIG1faGVhZChoZWFk
KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBt
X3ZlY3Rvci5hcHBlbmQoY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7Cit9CisKK0ludGVuZGVkU3Ry
dWN0dXJlQ2hhaW46On5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCkKK3sKK30KKworYm9vbCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjppc1N0aWxsVmFsaWQoKSBjb25zdAoreworICAgIEpTVmFsdWUg
Y3VycmVudFByb3RvdHlwZSA9IG1faGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGFzT2JqZWN0KGN1cnJlbnRQcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAh
PSBtX3ZlY3RvcltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY3VycmVu
dFByb3RvdHlwZSA9IG1fdmVjdG9yW2ldLT5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF0Y2hlcyhT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4pIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3ZlY3RvcltpXSAhPSBj
aGFpbi0+aGVhZCgpW2ldLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBpZiAoY2hhaW4tPmhlYWQoKVttX3ZlY3Rvci5zaXplKCldKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1N0cnVjdHVyZUNoYWluKiBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluOjpjaGFpbihWTSYgdm0pIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzU3RpbGxW
YWxpZCgpKTsKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcmVzdWx0ID0gU3RydWN0dXJlQ2hhaW46OmNy
ZWF0ZSh2bSwgbV9oZWFkKTsKKyAgICBBU1NFUlQobWF0Y2hlcyhyZXN1bHQpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om1heUludGVyY2Vw
dFN0b3JlVG8oVk0mIHZtLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CisgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKKyAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gbV92ZWN0b3JbaV0tPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRy
aWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVh
ZE9ubHkgfCBBY2Nlc3NvcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbjo6aXNOb3JtYWxpemVkKCkKK3sKKyAgICBpZiAobV9oZWFkLT50eXBlSW5m
bygpLnR5cGUoKSA9PSBQcm94eVR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCkgPT0gUHJveHlUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0pTT2JqZWN0KiBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluOjp0ZXJtaW5hbFByb3RvdHlwZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFtX3ZlY3Rvci5pc0VtcHR5KCkpOworICAgIGlmIChtX3ZlY3Rvci5zaXplKCkgPT0gMSkK
KyAgICAgICAgcmV0dXJuIGFzT2JqZWN0KG1faGVhZC0+cHJvdG90eXBlRm9yTG9va3VwKG1fZ2xv
YmFsT2JqZWN0KSk7CisgICAgcmV0dXJuIGFzT2JqZWN0KG1fdmVjdG9yW21fdmVjdG9yLnNpemUo
KSAtIDJdLT5zdG9yZWRQcm90b3R5cGUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEludGVuZGVkU3RydWN0dXJlQ2hhaW5faAorI2RlZmlu
ZSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluX2gKKworI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2Rl
QmxvY2s7CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIFN0cnVjdHVyZUNoYWluOworY2xh
c3MgVk07CisKK2NsYXNzIEludGVuZGVkU3RydWN0dXJlQ2hhaW4gOiBwdWJsaWMgUmVmQ291bnRl
ZDxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiB7CitwdWJsaWM6CisgICAgSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWQpOwor
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZSogaGVhZCwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaGVhZCwgU3RydWN0
dXJlQ2hhaW4qIGNoYWluKTsKKyAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGhlYWQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWdu
ZWQgY291bnQpOworICAgIH5JbnRlbmRlZFN0cnVjdHVyZUNoYWluKCk7CisgICAgCisgICAgYm9v
bCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICBib29sIG1hdGNoZXMoU3RydWN0dXJlQ2hhaW4q
KSBjb25zdDsKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oVk0mKSBjb25zdDsKKyAgICBib29s
IG1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBTdHJpbmdJbXBsKiB1aWQpOworICAgIGJvb2wgaXNO
b3JtYWxpemVkKCk7CisgICAgCisgICAgU3RydWN0dXJlKiBoZWFkKCkgY29uc3QgeyByZXR1cm4g
bV9oZWFkOyB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rv
ci5zaXplKCk7IH0KKyAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92
ZWN0b3JbaW5kZXhdOyB9CisgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgCisgICAgSlNPYmplY3QqIHRlcm1pbmFsUHJvdG90
eXBlKCkgY29uc3Q7CisgICAgCisgICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3IubGFzdCgpOyB9Citwcml2YXRlOgorICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2Jh
bE9iamVjdDsKKyAgICBTdHJ1Y3R1cmUqIG1faGVhZDsKKyAgICBWZWN0b3I8U3RydWN0dXJlKj4g
bV92ZWN0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEludGVuZGVk
U3RydWN0dXJlQ2hhaW5faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzAsMTMgKzk3MCw5IEBA
IHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdGhpc09i
amVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3RydWN0dXJl
Ojpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBTdHJpbmdJbXBsKiB1
aWQpCitib29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICAvLyBOb3RlLCB0aGlzIG1l
dGhvZCBpcyBjYWxsZWQgZnJvbSB0d28ga2luZHMgb2YgcGxhY2VzOiAoMSkgYXNzZXJ0aW9ucyBh
bmQgKDIpCi0gICAgLy8gdGhlIGNvbXBpbGF0aW9uIHRocmVhZC4gQXMgc3VjaCwgaXQgZG9lcyB0
aGluZ3Mgc29tZXdoYXQgY2FyZWZ1bGx5IHRvIGVuc3VyZQotICAgIC8vIHRocmVhZCBzYWZldHku
IEN1cnJlbnRseSB0aGF0IG9ubHkgYWZmZWN0cyB0aGUgd2F5IHdlIGRvIFN0cnVjdHVyZTo6Z2V0
KCkuCi0gICAgCi0gICAgdW5zaWduZWQgaSA9IHRvVUludDMyRnJvbVN0cmluZ0ltcGwodWlkKTsK
KyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKICAgICBpZiAoaSAhPSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWlu
TWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCk7CiAgICAgCkBAIC05ODksNyArOTg1LDcgQEAg
Ym9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAgICAgICAKICAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXRDb25jdXJyZW50bHko
dm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBz
cGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKQEAgLTEwMDAsMTEgKzk5Niw2IEBAIGJv
b2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2UKICAgICB9CiB9CiAKLWJvb2wg
U3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBwcm90b3R5cGVDaGFpbk1heUlu
dGVyY2VwdFN0b3JlVG8odm0sIHByb3BlcnR5TmFtZS51aWQoKSk7Ci19Ci0KICNpZiBET19QUk9Q
RVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sKIAogdm9pZCBQcm9wZXJ0eVRhYmxlOjpjaGVja0NvbnNp
c3RlbmN5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CShyZXZpc2lvbiAxNDk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEdsb2JhbE9iamVjdChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
IHsgbV9nbG9iYWxPYmplY3Quc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CiAgICAgICAg
IAogICAgIEpTVmFsdWUgc3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5
cGUuZ2V0KCk7IH0KKyAgICBKU09iamVjdCogc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgY29uc3Q7
CisgICAgU3RydWN0dXJlKiBzdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSBjb25zdDsKICAgICBK
U1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUqKSBjb25zdDsKICAgICBKU1ZhbHVl
IHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIEpTVmFsdWUg
cHJvdG90eXBlRm9yTG9va3VwKENvZGVCbG9jayopIGNvbnN0OwpAQCAtMTYyLDcgKzE2NCw2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAgICAgICAgIAogICAgIC8vIFdpbGwganVzdCB0aGUgcHJvdG90eXBlIGNoYWluIGlu
dGVyY2VwdCB0aGlzIHByb3BlcnR5IGFjY2Vzcz8KLSAgICBib29sIHByb3RvdHlwZUNoYWluTWF5
SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgYm9vbCBwcm90b3R5
cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAK
ICAgICBib29sIHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuICEhbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTQ5NzY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwyMiBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmNyZWF0ZShWTSYgCiAgICAgcmV0dXJuIG5ld1N0cnVjdHVyZTsKIH0KIAoraW5saW5lIEpT
T2JqZWN0KiBTdHJ1Y3R1cmU6OnN0b3JlZFByb3RvdHlwZU9iamVjdCgpIGNvbnN0Cit7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fcHJvdG90eXBlLmdldCgpOworICAgIGlmICh2YWx1ZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVlKTsKK30KKwor
aW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpzdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSBj
b25zdAoreworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdG9yZWRQcm90b3R5cGVPYmplY3QoKTsK
KyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG9iamVjdC0+
c3RydWN0dXJlKCk7Cit9CisKIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgQVNTRVJUKCFpc0NvbXBp
bGF0aW9uVGhyZWFkKCkpOwo=
</data>
<flag name="review"
          id="222575"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>