<?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>115300</bug_id>
          
          <creation_ts>2013-04-27 00:00:21 -0700</creation_ts>
          <short_desc>fourthTier: DFG tries to ref/deref StringImpls in a ton of places</short_desc>
          <delta_ts>2013-05-02 19:57:12 -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>
          <dependson>115393</dependson>
    
    <dependson>115468</dependson>
    
    <dependson>115525</dependson>
          <blocked>112839</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>882148</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-27 00:00:21 -0700</bug_when>
    <thetext>I will have to think about this.  I suspect that most uses of StringImpls in the DFG are totally safe.  But the ones that involve debug dumps probably aren&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882740</commentid>
    <comment_count>1</comment_count>
      <attachid>200041</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-29 13:24:37 -0700</bug_when>
    <thetext>Created attachment 200041
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882930</commentid>
    <comment_count>2</comment_count>
      <attachid>200081</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-29 22:16:37 -0700</bug_when>
    <thetext>Created attachment 200081
starting to run things

Still more work to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883235</commentid>
    <comment_count>3</comment_count>
      <attachid>200151</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-30 14:52:59 -0700</bug_when>
    <thetext>Created attachment 200151
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883239</commentid>
    <comment_count>4</comment_count>
      <attachid>200151</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-30 15:03:24 -0700</bug_when>
    <thetext>Comment on attachment 200151
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=200151&amp;action=review

r=me

&gt; Source/JavaScriptCore/runtime/Identifier.h:251
&gt; +    typedef HashMap&lt;StringImpl*, int, IdentifierRepHash, HashTraits&lt;StringImpl*&gt;, IdentifierMapIndexHashTraits&gt; ConcurrentIdentifierMap;

Maybe BorrowedIdentifierMap instead? I don&apos;t love &quot;Concurrent&quot; in the name because it might imply safety.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883396</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-30 23:58:59 -0700</bug_when>
    <thetext>Looks like I need to fix Structure::addPropertyTransitionToExistingStructure().  I&apos;ll do that shortly, and commit this after that is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884051</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-02 19:57:12 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/149516</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200041</attachid>
            <date>2013-04-29 13:24:37 -0700</date>
            <delta_ts>2013-04-29 22:16:37 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74241</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDkzMDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIwLDYgKzIyMCw4IEBACiAJCTBGODM2NEI3MTY0QjBD
MTEwMDUzMzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODM2NEI1MTY0QjBDMEUwMDUzMzI5QSAvKiBERkdC
cmFuY2hEaXJlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGluay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5MzE3MkUwNDlF
MDA3REJEQTUgLyogRlRMTGluay5jcHAgKi87IH07CiAJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRB
NSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOEYyQjk5MTcyRjA0RkYwMDdE
QkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rl
c2lyZWRJZGVudGlmaWVycy5jcHAgKi87IH07CisJCTBGOEYyQjlBMTcyRjA1MDEwMDdEQkRBNSAv
KiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk4MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRl
bnRpZmllcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGOTQz
QTE2Njc2MzExMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgKi87IH07CiAJ
CTBGOEY5NDQwMTY2NzYzMzAwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEY5NDNEMTY2NzYzMkQwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCAqLzsgfTsKIAkJMEY4Rjk0NDExNjY3NjMzMjAwRDYx
OTcxIC8qIENvZGVCbG9ja0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEY5NDNFMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExODUs
NiArMTE4Nyw4IEBACiAJCTBGODVBMzFFMTZBQjc2QUUwMDc3NTcxRSAvKiBERkdWYXJpYWRpY0Z1
bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhZGljRnVu
Y3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWRpY0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExpbmsuY3BwOyBwYXRoID0gZnRsL0ZUTExpbmsuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyog
RlRMTGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMaW5rLmg7IHBhdGggPSBmdGwvRlRMTGluay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUg
LyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2ly
ZWRJZGVudGlmaWVycy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8q
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkSWRlbnRp
ZmllcnMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY4Rjk0M0ExNjY3NjMxMTAwRDYxOTcxIC8qIENvZGVTcGVjaWFs
aXphdGlvbktpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZVNwZWNpYWxpemF0aW9uS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
OEY5NDNEMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0hhc2guY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjhGOTQzRTE2Njc2MzJEMDBENjE5NzEgLyogQ29kZUJsb2NrSGFz
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tIYXNoLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODUxLDYgKzI4NTUsOCBAQAogCQkJCTBGRkZD
OTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oICovLAogCQkJCTBGMkZDNzcwMTZF
MTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8sCiAJCQkJMEYyRkM3NzExNkUxMkY2
RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCisJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RC
REE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCisJCQkJMEY4RjJCOTgxNzJGMDRG
RDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAogCQkJCTBGRTg1MzQ5MTcy
M0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovLAogCQkJCTBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLywKIAkJCQkw
RkY0Mjc2MTE1OTFBMUM5MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCAqLywKQEAgLTM0
MDcsNiArMzQxMyw3IEBACiAJCQkJODZFM0M2MTIxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJDMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU1ZhbHVlUmVmLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjhGMkI5QTE3MkYw
NTAxMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtP
YmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC00Mjg2LDYgKzQyOTMsNyBA
QAogCQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4
RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1
ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4
RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3Jz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTFDMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExB
YnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI1RDcwOUIxNkRFOTlGNDAwRkNB
NkJDIC8qIEpTTWFuYWdlZFZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAx
NDkyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYgaWRl
bnQpCitHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJB
TShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oaWRlbnQpOworICAgIFVOVVNFRF9Q
QVJBTSh1aWQpOwogI2lmIEVOQUJMRShMTElOVCkKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRl
eDsKICAgICAKQEAgLTUyLDcgKzUyLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRnJvbQogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwogICAgIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50LCBhdHRy
aWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICpwcm9maWxlZEJsb2NrLT52
bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAg
aWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkBAIC02NCw3ICs2NCw3IEBAIEdldEJ5SWRTdGF0
dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICNlbmRpZgogfQogCi12b2lkIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JDaGFpbihHZXRCeUlkU3RhdHVzJiByZXN1bHQsIENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgSWRlbnRpZmllciYgaWRlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
dm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oR2V0QnlJZFN0YXR1cyYgcmVzdWx0
LCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAjaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQog
ICAgIC8vIFZhbGlkYXRlIHRoZSBjaGFpbi4gSWYgdGhlIGNoYWluIGlzIGludmFsaWQsIHRoZW4g
Y3VycmVudGx5IHRoZSBiZXN0IHRoaW5nCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvckNoYWluKEdldEIKICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CiAg
ICAgICAgIAogICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50LCBhdHRyaWJ1dGVz
SWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1
aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoY3VycmVudFN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAg
IGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQpKQpAQCAtMTA0LDI4ICsxMDQsMjgg
QEAgdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oR2V0QgogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGlkZW50KTsKKyAgICBVTlVTRURfUEFSQU0odWlkKTsKICAgICBVTlVT
RURfUEFSQU0oc3RydWN0dXJlKTsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICNl
bmRpZgogfQogCi1HZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJiBp
ZGVudCkKK0dldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAg
ICAgCiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShi
eXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oaWRlbnQpOworICAgIFVOVVNFRF9QQVJB
TSh1aWQpOwogI2lmIEVOQUJMRShKSVQpICYmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBp
ZiAoIXByb2ZpbGVkQmxvY2stPm51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKCkpCi0gICAgICAg
IHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGlk
ZW50KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCwgdWlkKTsKICAgICAKICAgICAvLyBGaXJzdCBjaGVjayBpZiBpdCBtYWtlcyBl
aXRoZXIgY2FsbHMsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBiZSBzdXBlciBjYXJlZnVsLCBv
cgogICAgIC8vIGlmIGl0J3Mgbm90IHNldCBhdCBhbGwsIGluIHdoaWNoIGNhc2Ugd2UgcHVudC4K
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBwcm9maWxlZEJsb2NrLT5nZXRTdHVi
SW5mbyhieXRlY29kZUluZGV4KTsKICAgICBpZiAoIXN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJl
dHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGlkZW50
KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNv
ZGVJbmRleCwgdWlkKTsKICAgICAKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IGxpc3Q7CiAgICAgaW50IGxpc3RTaXplOwpAQCAtMTU3LDE0ICsxNTcsMTQgQEAgR2V0QnlJZFN0
YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIHJlc3VsdC5tX3dhc1NlZW5JbkpJ
VCA9IHRydWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1bXBpbmcgb25s
eS4KICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc191
bnNldDoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCwgaWRlbnQpOworICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9m
aWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwogICAgICAgICAKICAgICBjYXNlIGFjY2Vz
c19nZXRfYnlfaWRfc2VsZjogewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKICAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsK
ICAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0g
ICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVk
LCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQs
IGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKICAgICAg
ICAgCkBAIC0xODksNyArMTg5LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAogICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgICAg
ICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CiAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBt
eU9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAgICAgICAgICpw
cm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFs
dWUpOworICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0
ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpKQogICAgICAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAg
ICAgICAgCkBAIC0yMjAsNyArMjIwLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywg
dHJ1ZSk7CiAgICAgICAgIHJlc3VsdC5tX2NoYWluLmFwcGVuZChzdHViSW5mby51LmdldEJ5SWRQ
cm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBjb21wdXRlRm9yQ2hhaW4o
Ci0gICAgICAgICAgICByZXN1bHQsIHByb2ZpbGVkQmxvY2ssIGlkZW50LAorICAgICAgICAgICAg
cmVzdWx0LCBwcm9maWxlZEJsb2NrLCB1aWQsCiAgICAgICAgICAgICBzdHViSW5mby51LmdldEJ5
SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtMjMxLDcgKzIzMSw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0dWJJbmZvLnUuZ2V0QnlJ
ZENoYWluLmNvdW50OyArK2kpCiAgICAgICAgICAgICByZXN1bHQubV9jaGFpbi5hcHBlbmQoc3R1
YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7CiAgICAgICAgIGNv
bXB1dGVGb3JDaGFpbigKLSAgICAgICAgICAgIHJlc3VsdCwgcHJvZmlsZWRCbG9jaywgaWRlbnQs
CisgICAgICAgICAgICByZXN1bHQsIHByb2ZpbGVkQmxvY2ssIHVpZCwKICAgICAgICAgICAgIHN0
dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0yNTUsMTIgKzI1NSwxMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotR2V0QnlJ
ZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIElkZW50aWZpZXImIGlkZW50KQorR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICAvLyBGb3Igbm93IHdlIG9ubHkgaGFuZGxlIHRoZSBzdXBlciBzaW1wbGUgc2VsZiBh
Y2Nlc3MgY2FzZS4gV2UgY291bGQgaGFuZGxlIHRoZQogICAgIC8vIHByb3RvdHlwZSBjYXNlIGlu
IHRoZSBmdXR1cmUuCiAgICAgCi0gICAgaWYgKFByb3BlcnR5TmFtZShpZGVudCkuYXNJbmRleCgp
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICBpZiAodG9VSW50MzJGcm9tU3RyaW5n
SW1wbCh1aWQpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgaWYgKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSkKQEAgLTI3MCwxMCArMjcwLDEw
IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgcmV0
dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgR2V0QnlJZFN0YXR1
cyByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gZmFsc2U7IC8vIFRvIG15IGtu
b3dsZWRnZSBub2JvZHkgdGhhdCB1c2VzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUqLCBJZGVu
dGlmaWVyJikgcmVhZHMgdGhpcyBmaWVsZCwgYnV0IEkgbWlnaHQgYXMgd2VsbCBiZSBob25lc3Q6
IG5vLCBpdCB3YXNuJ3Qgc2VlbiBpbiB0aGUgSklULCBzaW5jZSBJIGNvbXB1dGVkIGl0IHN0YXRp
Y2FsbHkuCisgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gZmFsc2U7IC8vIFRvIG15IGtub3ds
ZWRnZSBub2JvZHkgdGhhdCB1c2VzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUqLCBTdHJpbmdJ
bXBsKikgcmVhZHMgdGhpcyBmaWVsZCwgYnV0IEkgbWlnaHQgYXMgd2VsbCBiZSBob25lc3Q6IG5v
LCBpdCB3YXNuJ3Qgc2VlbiBpbiB0aGUgSklULCBzaW5jZSBJIGNvbXB1dGVkIGl0IHN0YXRpY2Fs
bHkuCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7
Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIGlk
ZW50LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1Zh
bHVlKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7IC8vIEl0J3MgcHJvYmFibHkgYSBw
cm90b3R5cGUgbG9va3VwLiBHaXZlIHVwIG9uIGxpZmUgZm9yIG5vdywgZXZlbiB0aG91Z2ggd2Ug
Y291bGQgdG90YWxseSBiZSB3YXkgc21hcnRlciBhYm91dCBpdC4KICAgICBpZiAoYXR0cmlidXRl
cyAmIEFjY2Vzc29yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAxNDkyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgSWRlbnRpZmll
cjsKIAogY2xhc3MgR2V0QnlJZFN0YXR1cyB7CiBwdWJsaWM6CkBAIC03MSw4ICs3MCw4IEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKChzdGF0ZSA9PSBTaW1wbGUpID09IChvZmZzZXQgIT0gaW52
YWxpZE9mZnNldCkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21w
dXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElkZW50aWZpZXImKTsK
LSAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKFZNJiwgU3RydWN0dXJlKiwgSWRl
bnRpZmllciYpOworICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKKyAgICBzdGF0aWMg
R2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKFZNJiwgU3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlk
KTsKICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAg
ICAKQEAgLTkwLDggKzg5LDggQEAgcHVibGljOgogICAgIGJvb2wgd2FzU2VlbkluSklUKCkgY29u
c3QgeyByZXR1cm4gbV93YXNTZWVuSW5KSVQ7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IHZvaWQgY29tcHV0ZUZvckNoYWluKEdldEJ5SWRTdGF0dXMmIHJlc3VsdCwgQ29kZUJsb2NrKiwg
SWRlbnRpZmllciYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1
dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmll
ciYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVGb3JDaGFpbihHZXRCeUlkU3RhdHVzJiByZXN1
bHQsIENvZGVCbG9jayosIFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKik7CisgICAgc3RhdGlj
IEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIFN0YXRlIG1fc3RhdGU7CiAg
ICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ5MjY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElkZW50aWZpZXImIGlkZW50KQorUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKQogewog
ICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlkZW50KTsKKyAgICBVTlVTRURfUEFSQU0odWlk
KTsKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJv
ZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXg7CiAKQEAg
LTQ5LDcgKzQ5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQog
ICAgIAogICAgIGlmIChpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2Rl
KGxsaW50X29wX3B1dF9ieV9pZCkKICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUg
PT0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpKSB7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KCpwcm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1
aWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQp
OwogICAgICAgICAKQEAgLTY4LDcgKzY4LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRnJvbQogICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChjaGFp
bik7CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkoKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50KTsKKyAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9j
ay0+dm0oKSwgdWlkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNl
dCk7CiAgICAgCkBAIC03OCwzMiArNzgsMzIgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRnJvbQogI2VuZGlmCiB9CiAKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIElkZW50aWZpZXImIGlkZW50KQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
U3RyaW5nSW1wbCogdWlkKQogewogICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIocHJvZmlsZWRC
bG9jay0+bV9sb2NrKTsKICAgICAKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAg
ICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShpZGVudCk7
CisgICAgVU5VU0VEX1BBUkFNKHVpZCk7CiAjaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQogICAgIGlmICghcHJvZmlsZWRCbG9jay0+bnVtYmVyT2ZTdHJ1Y3R1cmVTdHVi
SW5mb3MoKSkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywg
Ynl0ZWNvZGVJbmRleCwgaWRlbnQpOworICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChw
cm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwogICAgIAogICAgIGlmIChwcm9maWxl
ZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShieXRlY29kZUluZGV4KSkKICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7
CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gcHJvZmlsZWRCbG9jay0+
Z2V0U3R1YkluZm8oYnl0ZWNvZGVJbmRleCk7CiAgICAgaWYgKCFzdHViSW5mby5zZWVuKQotICAg
ICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4
LCBpZGVudCk7CisgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ss
IGJ5dGVjb2RlSW5kZXgsIHVpZCk7CiAgICAgCiAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NU
eXBlKSB7CiAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAgIHJldHVybiBjb21wdXRlRnJv
bUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGlkZW50KTsKKyAgICAgICAgcmV0
dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsK
ICAgICAgICAgCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6IHsKICAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KICAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFJl
cGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAgICAg
ICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgKnByb2Zp
bGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAogICAgICAgICAgICAgICAgIFNp
bXBsZVJlcGxhY2UsCkBAIC0xMTksNyArMTE5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICBBU1NFUlQoc3R1YkluZm8udS5wdXRCeUlkVHJhbnNp
dGlvbi5wcmV2aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52
YWxpZGF0ZWQoKSk7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAogICAgICAgICAg
ICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSgKLSAgICAgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQpOworICAgICAg
ICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAgICBpZiAoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygKICAg
ICAgICAgICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLApAQCAtMTM5LDkgKzEzOSw5IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogfQogCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRlbnRp
ZmllciYgaWRlbnQsIGJvb2wgaXNEaXJlY3QpCitQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KQogewotICAgIGlm
IChQcm9wZXJ0eU5hbWUoaWRlbnQpLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpCisgICAgaWYgKHRvVUludDMyRnJvbVN0cmluZ0ltcGwodWlkKSAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgIAogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90KCkpCkBAIC0xNTMsNyArMTUzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgSlNDZWxsKiBz
cGVjaWZpY1ZhbHVlSWdub3JlZDsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgdm0sIGlkZW50LCBhdHRyaWJ1dGVzLCBzcGVj
aWZpY1ZhbHVlSWdub3JlZCk7CisgICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
VmFsdWVJZ25vcmVkKTsKICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAg
IGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVhZE9ubHkpKQogICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CkBAIC0xNzQsNyArMTc0LDcgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIAogICAgIGlmICghaXNE
aXJlY3QpIHsKICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBv
ciByZWFkLW9ubHkgcHJvcGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICBpZiAoc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8odm0sIGlkZW50KSkKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCB1
aWQpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhc24ndCBiZWVuIG5v
cm1hbGl6ZWQgKGkuZS4gdGhlcmUgYXJlIHByb3hpZXMgb3IgZGljdGlvbmFyaWVzKQpAQCAtMjAx
LDcgKzIwMSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAvLyAtIElmIHdlJ3JlIG5vdCBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZp
YzogYWdhaW4sIHRoaXMgd291bGQgb25seSBiZSBhCiAgICAgLy8gICBwcm9ibGVtIGlmIHRoZSBl
eGlzdGluZyB0cmFuc2l0aW9uIGRpZCBoYXZlIGEgc3BlY2lmaWMgdmFsdWUsIHdoaWNoIHdlIGNo
ZWNrIGZvcgogICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4KLSAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBpZGVudCwgMCwgMCwgb2Zmc2V0KTsKKyAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCB1aWQsIDAsIDAsIG9mZnNldCk7CiAgICAg
aWYgKCF0cmFuc2l0aW9uKQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsgLy8gVGhpcyBvY2N1cnMgaW4gYml6YXJyZSBjYXNlcyBvbmx5LiBTZWUgYWJvdmUuCiAg
ICAgQVNTRVJUKCF0cmFuc2l0aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmgJKHJldmlzaW9uIDE0OTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBJZGVudGlmaWVyOwogY2xhc3Mg
Vk07CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTkwLDggKzg5
LDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8
fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgpID09IChtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0
KSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYpOwotICAgIHN0YXRp
YyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIElkZW50aWZpZXImLCBib29sIGlzRGlyZWN0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFN0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0lt
cGwqIHVpZCk7CisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KTsK
ICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAK
QEAgLTEwNyw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFB1
dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBJZGVudGlmaWVyJik7CisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZy
b21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1
aWQpOwogICAgIAogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgU3RydWN0dXJlKiBtX29sZFN0cnVj
dHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFs
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJKHJldmlzaW9uIDE0OTMwMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsMTEgKzMzLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgUmVzb2x2
ZUdsb2JhbFN0YXR1cyBjb21wdXRlRm9yU3RydWN0dXJlKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3N0YXRpYyBSZXNv
bHZlR2xvYmFsU3RhdHVzIGNvbXB1dGVGb3JTdHJ1Y3R1cmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgdW5zaWduZWQg
YXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpjb2RlQmxvY2st
PnZtKCksIGlkZW50aWZpZXIsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqY29k
ZUJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAg
ICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9
IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkBAIC00Niw3ICs0Niw3IEBAIHN0
YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVzIGNvbXB1dGVGb3JTdHIKICAgICByZXR1cm4gUmVzb2x2
ZUdsb2JhbFN0YXR1cyhSZXNvbHZlR2xvYmFsU3RhdHVzOjpTaW1wbGUsIHN0cnVjdHVyZSwgb2Zm
c2V0LCBzcGVjaWZpY1ZhbHVlKTsKIH0KIAotUmVzb2x2ZUdsb2JhbFN0YXR1cyBSZXNvbHZlR2xv
YmFsU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQsIFJlc29sdmVP
cGVyYXRpb24qIG9wZXJhdGlvbiwgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK1Jlc29sdmVHbG9i
YWxTdGF0dXMgUmVzb2x2ZUdsb2JhbFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgaW50LCBSZXNvbHZlT3BlcmF0aW9uKiBvcGVyYXRpb24sIFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAK
QEAgLTU0LDcgKzU0LDcgQEAgUmVzb2x2ZUdsb2JhbFN0YXR1cyBSZXNvbHZlR2xvYmFsU3RhdHVz
OgogICAgIGlmICghb3BlcmF0aW9uLT5tX3N0cnVjdHVyZSkKICAgICAgICAgcmV0dXJuIFJlc29s
dmVHbG9iYWxTdGF0dXMoKTsKICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvclN0cnVjdHVyZShj
b2RlQmxvY2ssIG9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuZ2V0KCksIGlkZW50aWZpZXIpOworICAg
IHJldHVybiBjb21wdXRlRm9yU3RydWN0dXJlKGNvZGVCbG9jaywgb3BlcmF0aW9uLT5tX3N0cnVj
dHVyZS5nZXQoKSwgdWlkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmgJ
KHJldmlzaW9uIDE0OTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNv
bHZlR2xvYmFsU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBJZGVudGlmaWVyOwogc3RydWN0
IFJlc29sdmVPcGVyYXRpb247CiBjbGFzcyBTdHJ1Y3R1cmU7CiAKQEAgLTYyLDcgKzYxLDcgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0
dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBpbnQgYnl0ZWNvZGVJbmRleCwgUmVzb2x2ZU9wZXJh
dGlvbiosIElkZW50aWZpZXImKTsKKyAgICBzdGF0aWMgUmVzb2x2ZUdsb2JhbFN0YXR1cyBjb21w
dXRlRm9yKENvZGVCbG9jayosIGludCBieXRlY29kZUluZGV4LCBSZXNvbHZlT3BlcmF0aW9uKiwg
U3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDkyNjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0
Nyw3ICsxMTQ3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBpbmxpbmluZy4KICAgICBib29sIG1faGF2
ZUJ1aWx0T3BlcmFuZE1hcHM7CiAgICAgLy8gTWFwcGluZyBiZXR3ZWVuIGlkZW50aWZpZXIgbmFt
ZXMgYW5kIG51bWJlcnMuCi0gICAgSWRlbnRpZmllck1hcCBtX2lkZW50aWZpZXJNYXA7CisgICAg
Q29uY3VycmVudElkZW50aWZpZXJNYXAgbV9pZGVudGlmaWVyTWFwOwogICAgIC8vIE1hcHBpbmcg
YmV0d2VlbiB2YWx1ZXMgYW5kIGNvbnN0YW50IG51bWJlcnMuCiAgICAgSlNWYWx1ZU1hcCBtX2pz
VmFsdWVNYXA7CiAgICAgLy8gSW5kZXggb2YgdGhlIGVtcHR5IHZhbHVlLCBvciBVSU5UX01BWCBp
ZiB0aGVyZSBpcyBubyBtYXBwaW5nLiBUaGlzIGlzIGEgaG9ycmlibGUKQEAgLTE5MDgsOCArMTkw
OCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKIAogICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpOwogCi0gICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyKTsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50LmltcGwoKSk7
CisgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlm
aWVyXTsKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3lt
Ym9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgIGlmICghbV9ncmFwaC5tX3dhdGNocG9pbnRz
LmlzU3RpbGxWYWxpZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKSB7CiAgICAgICAgICAgICAqdmFs
dWUgPSBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKGdsb2JhbE9iamVjdC0+YXNzZXJ0
UmVnaXN0ZXJJc0luVGhpc09iamVjdChwYy0+bV9yZWdpc3RlckFkZHJlc3MpKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjU4NSw5ICsyNTg1LDkg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
Tm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lk
ZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoaWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQg
PSBtX2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBH
ZXRCeUlkU3RhdHVzIGdldEJ5SWRTdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9jdXJy
ZW50SW5kZXgsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jaywgbV9jdXJyZW50SW5kZXgsIHVpZCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICAgICAgY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgZ2V0
QnlJZFN0YXR1cyk7CkBAIC0yNjA4LDcgKzI2MDgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0
dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRl
eCwKLSAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVt
YmVyKSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZpZXJO
dW1iZXJdKTsKICAgICAgICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAgICAgIApAQCAtMjcy
MSw4ICsyNzIxLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jazsKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0g
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcik7Ci0gICAgICAgICAgICBT
eW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQo
aWRlbnRpZmllci5pbXBsKCkpOworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFw
aC5tX2lkZW50aWZpZXJzKGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgU3ltYm9sVGFi
bGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7CiAg
ICAgICAgICAgICBpZiAoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgICAgICBQdXRHbG9iYWxWYXIsCkBAIC0zMjA5
LDcgKzMyMDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsVmFyaWFibGVQdXRDaGVj
a2VkOiB7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jazsKICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgICAgICBT
eW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRpZmllcikuaW1wbCgpKTsKKyAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgp
LT5nZXQobV9ncmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZpZXJdKTsKICAgICAgICAgICAgICAg
ICBpZiAoZW50cnkuY291bGRCZVdhdGNoZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFB1dEdsb2JhbFZhckNoZWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE9wSW5mbyhjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hc3NlcnRSZWdpc3RlcklzSW5UaGlz
T2JqZWN0KHB1dFRvQmFzZS0+bV9yZWdpc3RlckFkZHJlc3MpKSwKQEAgLTM1NzIsOSArMzU3Miw5
IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKIAogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyAr
K2kpIHsKICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihpKS5pbXBsKCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gYnl0ZUNvZGVQYXJzZXItPm1faWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNl
ci0+bV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CisgICAgICAgICAgICBDb25j
dXJyZW50SWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5t
X2lkZW50aWZpZXJNYXAuYWRkKHJlcCwgYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9pZGVudGlm
aWVycy5udW1iZXJPZklkZW50aWZpZXJzKCkpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRk
SWRlbnRpZmllcihJZGVudGlmaWVyKGJ5dGVDb2RlUGFyc2VyLT5tX3ZtLCByZXApKTsKKyAgICAg
ICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX2lkZW50aWZpZXJzLmFkZExhemls
eShyZXApOwogICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29k
ZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50
aWZpZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Rlc2lyZWRJZGVudGlmaWVyczo6
RGVzaXJlZElkZW50aWZpZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9jb2RlQmxv
Y2soY29kZUJsb2NrKQoreworfQorCitEZXNpcmVkSWRlbnRpZmllcnM6On5EZXNpcmVkSWRlbnRp
ZmllcnMoKQoreworfQorCit2b2lkIERlc2lyZWRJZGVudGlmaWVyczo6YWRkTGF6aWx5KFN0cmlu
Z0ltcGwqIHJlcCkKK3sKKyAgICBtX2FkZGVkSWRlbnRpZmllcnMuYXBwZW5kKHJlcCk7Cit9CisK
K3ZvaWQgRGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQoVk0mIHZtKQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2FkZGVkSWRlbnRpZmllcnMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIG1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVyKElkZW50aWZpZXIoJnZtLCBtX2FkZGVkSWRl
bnRpZmllcnNbaV0pKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZElkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR0Rlc2lyZWRJZGVudGlmaWVyc19oCisjZGVmaW5lIERGR0Rlc2lyZWRJ
ZGVudGlmaWVyc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllci5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIERlc2lyZWRJZGVu
dGlmaWVycyB7CitwdWJsaWM6CisgICAgRGVzaXJlZElkZW50aWZpZXJzKENvZGVCbG9jayopOwor
ICAgIH5EZXNpcmVkSWRlbnRpZmllcnMoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZklk
ZW50aWZpZXJzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJ
ZGVudGlmaWVycygpICsgbV9hZGRlZElkZW50aWZpZXJzLnNpemUoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhZGRMYXppbHkoU3RyaW5nSW1wbCopOworICAgIAorICAgIFN0cmluZ0ltcGwqIGF0
KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgbV9jb2Rl
QmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihpbmRleCkuaW1wbCgpOworICAgICAgICByZXR1cm4gbV9hZGRlZElk
ZW50aWZpZXJzW2luZGV4IC0gbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKV07Cisg
ICAgfQorICAgIAorICAgIFN0cmluZ0ltcGwmIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIAorICAgIHZvaWQgcmVhbGx5QWRkKFZNJik7
CisgICAgCitwcml2YXRlOgorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgVmVjdG9y
PFN0cmluZ0ltcGwqPiBtX2FkZGVkSWRlbnRpZmllcnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Rl
c2lyZWRJZGVudGlmaWVyc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCShyZXZpc2lvbiAxNDkyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBHcmFwaDo6R3JhcGgo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhmYWxzZSkK
ICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAg
ICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQorICAgICwgbV9pZGVudGlm
aWVycyhjb2RlQmxvY2spCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAg
ICAgLCBtX2Zvcm0oTG9hZFN0b3JlKQogICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2FsbHlV
bmlmaWVkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTQ5MjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZHQXJndW1lbnRQb3NpdGlvbi5o
IgogI2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2suaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVk
ZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKQEAgLTcyMiw2ICs3MjMsNyBAQCBwdWJsaWM6CiAgICAg
dW5zaWduZWQgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4g
bV9tdXN0SGFuZGxlVmFsdWVzOwogICAgIERlc2lyZWRXYXRjaHBvaW50cyBtX3dhdGNocG9pbnRz
OworICAgIERlc2lyZWRJZGVudGlmaWVycyBtX2lkZW50aWZpZXJzOwogICAgIAogICAgIE9wdGlt
aXphdGlvbkZpeHBvaW50U3RhdGUgbV9maXhwb2ludFN0YXRlOwogICAgIEdyYXBoRm9ybSBtX2Zv
cm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gMTQ5MzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw2ICsyNDcsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgY29kZUJsb2NrKCktPnNocmlua1Rv
Rml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAgICAgCiAgICAgbV9ncmFwaC5tX3dhdGNocG9p
bnRzLnJlYWxseUFkZCgpOworICAgIG1fZ3JhcGgubV9pZGVudGlmaWVycy5yZWFsbHlBZGQoKm1f
dm0pOwogfQogCiBib29sIEpJVENvbXBpbGVyOjpjb21waWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTQ5MjY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjY3LDE1ICsyNjcsMTUgQEAgdm9pZCogREZHX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0
aFJldHVybgogRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24p
CiAKICNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1
bmN0aW9uKSBcCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0
dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBJZGVudGlmaWVyKiwgUmV0dXJuQWRkcmVz
c1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0VuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNN
IFdURl9JTlRFUk5BTDsgXAogRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VD
SShmdW5jdGlvbikKIAogI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkkoZnVuY3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rp
b24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlm
aWVyKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7
IFwKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVz
c1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCiAKICNkZWZpbmUgVl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotdm9pZCBERkdf
T1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgSlNDZWxsKiwgSWRlbnRpZmllciosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5D
RURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCit2b2lkIERGR19PUEVSQVRJT04gZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBT
dHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5U
RVJOQUw7IFwKIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0
aW9uKQogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00ODQsNzAgKzQ4NCw3
NCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAg
ICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwgc2xvdCkpOworICAgIElkZW50
aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFs
dWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KSk7CiB9CiAKIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdFdpdGhSZXR1cm5B
ZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgSWRlbnRpZmllciog
cHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJuQWRk
cmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVp
ZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
IAorCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVz
cyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCAqcHJvcGVydHlOYW1lLCBzbG90KTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwog
CiAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSkpCi0gICAgICAgIGRmZ0J1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVl
LCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7CisgICAgICAgIGRmZ0J1aWxkR2V0QnlJ
RExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8pOwogCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBJ
ZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
K0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRM
aXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNl
LCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VW
YWx1ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsICpwcm9wZXJ0
eU5hbWUsIHNsb3QpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBp
ZGVudCwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIGRmZ0J1aWxkR2V0QnlJRFBy
b3RvTGlzdChleGVjLCBiYXNlVmFsdWUsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsK
KyAgICAgICAgZGZnQnVpbGRHZXRCeUlEUHJvdG9MaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
IH0KIAogSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCisKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1
aWQpOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIAogICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAgIFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4
ZWMsICpwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVl
LmdldChleGVjLCBpZGVudCwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpIHsKICAgICAgICAgaWYg
KHN0dWJJbmZvLnNlZW4pCi0gICAgICAgICAgICBkZmdSZXBhdGNoR2V0QnlJRChleGVjLCBiYXNl
VmFsdWUsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKKyAgICAgICAgICAgIGRmZ1Jl
cGF0Y2hHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CiAgICAgfQpAQCAt
NTU1LDEyICs1NTksMTQgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25H
ZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBiYXNlLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBmdW5jdGlvbiwgSWRl
bnRpZmllciogaWRlbnQpCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNh
bGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmdW5jdGlvbihleGVjLCBhc09i
amVjdChiYXNlKSwgKmlkZW50KSk7CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAg
ICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJh
c2UpLCBpZGVudCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogdmFsdWUp
CkBAIC03MzcsNTAgKzc0Myw1NSBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdF
eHBUZXN0CiAgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KGJhc2UpLT50ZXN0KGV4ZWMsIGlucHV0
KTsKIH0KICAgICAgICAgCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdCh0cnVlKTsKLSAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwgZXhlYywgKnBy
b3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIGJh
c2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCit2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+
cHV0KGJhc2UsIGV4ZWMsICpwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpLCBzbG90KTsKKyAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwgZXhlYywgaWRl
bnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJv
cGVydHlOYW1lKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAorICAgIElkZW50
aWZpZXIgaWRlbnQodm0sIHVpZCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CiAg
ICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSksIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgdWlk
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKLXZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHBy
b3BlcnR5TmFtZSkKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKKyAgICBJ
ZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNl
KTsKICAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1
dERpcmVjdChleGVjLT52bSgpLCAqcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgp
LCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiBWX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCog
dWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVz
cyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSk7CiAKQEAgLTc4OCwyMyArNzk5LDI0IEBAIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNl
KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKICAgICAKLSAgICBiYXNlVmFsdWUu
cHV0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBiYXNlVmFsdWUucHV0
KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgZGZnUmVwYXRjaFB1
dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgTm90
RGlyZWN0KTsKKyAgICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVu
dCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7CiAgICAgZWxzZQogICAgICAgICBzdHViSW5m
by5zZWVuID0gdHJ1ZTsKIH0KIAogVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpDSShvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAorICAgIElkZW50aWZpZXIgaWRl
bnQodm0sIHVpZCk7CiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29k
ZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwog
CkBAIC04MTIsMjMgKzgyNCwyNCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CiAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoZmFsc2UpOwogICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgKnByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBz
bG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChz
dHViSW5mby5zZWVuKQotICAgICAgICBkZmdSZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUs
ICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAgICAgICBkZmdS
ZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90
RGlyZWN0KTsKICAgICBlbHNlCiAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwogfQogCiBW
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciog
cHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsK
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CiAKQEAgLTgzNiwyMyAr
ODQ5LDI0IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKICAgICAKICAgICBBU1NFUlQoYmFzZS0+aXNPYmpl
Y3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVj
LT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIGRmZ1JlcGF0Y2hQ
dXRCeUlEKGV4ZWMsIGJhc2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3Qp
OworICAgICAgICBkZmdSZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1
YkluZm8sIERpcmVjdCk7CiAgICAgZWxzZQogICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsK
IH0KIAogVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAorICAgIElkZW50aWZpZXIg
aWRlbnQodm0sIHVpZCk7CiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+
Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
OwogCkBAIC04NjAsMjMgKzg3NCwyNCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIAogICAgIEFT
U0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNl
KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAg
aWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAg
ICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIERpcmVjdCk7CisgICAgICAgIGRmZ1JlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2Us
IGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKICAgICBlbHNlCiAgICAgICAgIHN0dWJJ
bmZvLnNlZW4gPSB0cnVlOwogfQogCiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0V2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxv
Y2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CiAKQEAg
LTg4NCwyMCArODk5LDIxIEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWMKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCh0cnVlKTsKICAgICAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7
CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBkZmdCdWlsZFB1
dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8s
IE5vdERpcmVjdCk7CisgICAgZGZnQnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIGlk
ZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKIH0KIAogVl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRM
aXN0KTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRM
aXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVp
ZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CiAgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3Mp
OwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLmFjY2Vzc1R5cGUpOwogCkBAIC05MDUsMjAgKzkyMSwyMSBAQCB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIAotICAgIGJhc2VWYWx1ZS5w
dXQoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VWYWx1ZS5wdXQo
ZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGRmZ0J1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCAqcHJv
cGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKKyAgICBkZmdCdWlsZFB1dEJ5
SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3Qp
OwogfQogCiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJ
ZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
K3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2Rl
QmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CiAg
ICAgCkBAIC05MjYsMjAgKzk0MywyMSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CiAgICAgCiAgICAgQVNT
RVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2Up
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBp
ZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGRmZ0J1aWxkUHV0QnlJZExpc3QoZXhl
YywgYmFzZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CisgICAgZGZn
QnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVj
dCk7CiB9CiAKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKKyAgICBJZGVu
dGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nl
c3NUeXBlKTsKIApAQCAtOTQ3LDEyICs5NjUsMTIgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWREaXJlYwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlKTsKICAgICAK
ICAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERp
cmVjdChleGVjLT52bSgpLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmpl
Y3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAg
IAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgZGZnQnVpbGRQdXRCeUlk
TGlzdChleGVjLCBiYXNlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsK
KyAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5m
bywgRGlyZWN0KTsKIH0KIAogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxl
c3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKQpAQCAtMTIxMSwzMCArMTIyOSwzMSBAQCB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTm90aWZ5R2xvYmFsCiAgICAgd2F0Y2hwb2ludFNldC0+bm90aWZ5V3JpdGUo
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlKEV4
ZWNTdGF0ZSogZXhlYywgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXNvbHZlT3BlcmF0aW9u
cyogb3BlcmF0aW9ucykKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVz
b2x2ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwqIHVpZCwgUmVzb2x2ZU9wZXJhdGlvbnMq
IG9wZXJhdGlvbnMpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsICpwcm9wZXJ0eU5hbWUsIG9wZXJhdGlvbnMpKTsKKyAg
ICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNTY29wZTo6cmVzb2x2ZShleGVjLCBpZGVudCwgb3BlcmF0aW9ucykpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlKEV4ZWNTdGF0ZSogZXhl
YywgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9u
cywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb25zKQorRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZShFeGVjU3RhdGUqIGV4ZWMsIFN0
cmluZ0ltcGwqIHVpZCwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9w
ZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9ucykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsICpwcm9w
ZXJ0eU5hbWUsIGZhbHNlLCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb25zKSk7CisgICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
U2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsIGlkZW50LCBmYWxzZSwgb3BlcmF0aW9ucywgcHV0VG9C
YXNlT3BlcmF0aW9ucykpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblJlc29sdmVCYXNlU3RyaWN0UHV0KEV4ZWNTdGF0ZSogZXhlYywgSWRlbnRpZmllciogcHJv
cGVydHlOYW1lLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucywgUHV0VG9CYXNlT3BlcmF0
aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb25zKQorRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25SZXNvbHZlQmFzZVN0cmljdFB1dChFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwq
IHVpZCwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlvbiog
cHV0VG9CYXNlT3BlcmF0aW9ucykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsICpwcm9wZXJ0eU5hbWUs
IHRydWUsIG9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbnMpKTsKKyAgICBJZGVudGlmaWVy
IGlkZW50KHZtLCB1aWQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVz
b2x2ZUJhc2UoZXhlYywgaWRlbnQsIHRydWUsIG9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlv
bnMpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZl
R2xvYmFsKEV4ZWNTdGF0ZSogZXhlYywgUmVzb2x2ZU9wZXJhdGlvbiogcmVzb2x2ZU9wZXJhdGlv
biwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllciogcHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlR2xvYmFsKEV4
ZWNTdGF0ZSogZXhlYywgUmVzb2x2ZU9wZXJhdGlvbiogcmVzb2x2ZU9wZXJhdGlvbiwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwpAQCAtMTI0Miw3ICsxMjYxLDggQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25SZQogICAgIFVOVVNFRF9QQVJBTShyZXNvbHZlT3BlcmF0aW9uKTsKICAgICBVTlVTRURf
UEFSQU0oZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQocmVzb2x2ZU9wZXJhdGlvbi0+bV9vcGVy
YXRpb24gPT0gUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2ZUdsb2JhbChleGVjLCAq
cHJvcGVydHlOYW1lLCBnbG9iYWxPYmplY3QsIHJlc29sdmVPcGVyYXRpb24pKTsKKyAgICBJZGVu
dGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29w
ZTo6cmVzb2x2ZUdsb2JhbChleGVjLCBpZGVudCwgZ2xvYmFsT2JqZWN0LCByZXNvbHZlT3BlcmF0
aW9uKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNDkyNjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsMjMgKzU1LDIzIEBAIGV4dGVybiAiQyIgewogICAgIFM6IHNpemVfdAogICAgIFo6
IGludDMyX3QKICAgICBEOiBkb3VibGUKLSAgICBJOiBJZGVudGlmaWVyKgorICAgIEk6IFN0cmlu
Z0ltcGwqCiAgICAgRzogR2xvYmFsUmVzb2x2ZUluZm8qCiAqLwogdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FQSkoRXhl
Y1N0YXRlKiwgSlNBcnJheSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
ICgqSl9ERkdPcGVyYXRpb25fRUFaKShFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCk7CiB0
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FQ0Mp
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNJKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJ
ZGVudGlmaWVyKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKIHR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDSikoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRURBKShFeGVjU3RhdGUqLCBkb3VibGUs
IEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VHcmlKc2dJKShFeGVjU3RhdGUqLCBSZXNvbHZlT3BlcmF0aW9uKiwgSlNHbG9i
YWxPYmplY3QqLCBJZGVudGlmaWVyKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSSkoRXhlY1N0YXRlKiwgSWRlbnRpZmllciopOwotdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUlSbyko
RXhlY1N0YXRlKiwgSWRlbnRpZmllciosIFJlc29sdmVPcGVyYXRpb25zKik7Ci10eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSVJvUHRibykoRXhl
Y1N0YXRlKiwgSWRlbnRpZmllciosIFJlc29sdmVPcGVyYXRpb25zKiwgUHV0VG9CYXNlT3BlcmF0
aW9uKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJh
dGlvbl9FR3JpSnNnSSkoRXhlY1N0YXRlKiwgUmVzb2x2ZU9wZXJhdGlvbiosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RyaW5nSW1wbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
ICgqSl9ERkdPcGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VJUm8pKEV4ZWNT
dGF0ZSosIFN0cmluZ0ltcGwqLCBSZXNvbHZlT3BlcmF0aW9ucyopOwordHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUlSb1B0Ym8pKEV4ZWNTdGF0
ZSosIFN0cmluZ0ltcGwqLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRvQmFzZU9wZXJhdGlvbiop
OwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKQSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VKSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIElkZW50aWZp
ZXIqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0
aW9uX0VKSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsKIHR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKSikoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKUCkoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiAoKkpfREZHT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7CkBAIC0xMDcsNyAr
MTA3LDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRl
ZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIERG
R19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ1opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGlu
dDMyX3QpOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0Mp
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJ
T04gKCpWX0RGR09wZXJhdGlvbl9FSkNJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlND
ZWxsKiwgSWRlbnRpZmllciopOwordHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09w
ZXJhdGlvbl9FSkNJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5n
SW1wbCopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSkpK
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUpQUCko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7CiB0eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSos
IHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xMzQsMTcgKzEzNCwxNyBAQCBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxDZWxsKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFy
cmF5SW50KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUq
LCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTm90aWZ5R2xvYmFsVmFyV3JpdGUoV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkg
V1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNv
bHZlKEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqLCBSZXNvbHZlT3BlcmF0aW9ucyopIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJhc2Uo
RXhlY1N0YXRlKiwgSWRlbnRpZmllciosIFJlc29sdmVPcGVyYXRpb25zKiwgUHV0VG9CYXNlT3Bl
cmF0aW9uKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25SZXNvbHZlQmFzZVN0cmljdFB1dChFeGVjU3RhdGUqLCBJZGVudGlmaWVyKiwgUmVzb2x2
ZU9wZXJhdGlvbnMqLCBQdXRUb0Jhc2VPcGVyYXRpb24qKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVHbG9iYWwoRXhlY1N0YXRlKiwg
UmVzb2x2ZU9wZXJhdGlvbiosIEpTR2xvYmFsT2JqZWN0KiwgSWRlbnRpZmllciopIFdURl9JTlRF
Uk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZShFeGVj
U3RhdGUqLCBTdHJpbmdJbXBsKiwgUmVzb2x2ZU9wZXJhdGlvbnMqKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlKEV4ZWNTdGF0
ZSosIFN0cmluZ0ltcGwqLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRvQmFzZU9wZXJhdGlvbiop
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVz
b2x2ZUJhc2VTdHJpY3RQdXQoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCosIFJlc29sdmVPcGVyYXRp
b25zKiwgUHV0VG9CYXNlT3BlcmF0aW9uKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlR2xvYmFsKEV4ZWNTdGF0ZSosIFJlc29sdmVP
cGVyYXRpb24qLCBKU0dsb2JhbE9iamVjdCosIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpIFdU
Rl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpIFdURl9JTlRFUk5BTDsKQEAg
LTE2NCwxOCArMTY0LDE4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
QXIKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0
YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkq
KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
Z0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5U
RVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRp
ZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlm
aWVyKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRO
b25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZf
SU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRl
bnRpZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwotdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50
aWZpZXIqKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlz
dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIC8vIFRoZXNl
IGNvbXBhcmlzb25zIHJldHVybiBhIGJvb2xlYW4gd2l0aGluIGEgc2l6ZV90IHN1Y2ggdGhhdCB0
aGUgdmFsdWUgaXMgemVybyBleHRlbmRlZCB0byBmaWxsIHRoZSByZWdpc3Rlci4KIHNpemVfdCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlND
ZWxsKikgV1RGX0lOVEVSTkFMOwogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0lkZW50aWZpZXIuaAkocmV2aXNpb24gMTQ5MjY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiAr
MjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8U3RyaW5nSW1wbD4sIGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVm
UHRyPFN0cmluZ0ltcGw+ID4sIElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZp
ZXJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBpbnQsIElkZW50aWZpZXJS
ZXBIYXNoLCBIYXNoVHJhaXRzPFN0cmluZ0ltcGwqPiwgSWRlbnRpZmllck1hcEluZGV4SGFzaFRy
YWl0cz4gQ29uY3VycmVudElkZW50aWZpZXJNYXA7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgSWRlbnRp
ZmllclRhYmxlOjphZGQoVSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTQ5MzAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcxLDcgKzc3
MSw3IEBAIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGEKICAgICByZXR1
cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldCht
X29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OmdldENvbmN1cnJlbnRseShWTSYsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVk
JiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQogewogICAgIC8vIFdlIGNhbid0
IGhhbmRsZSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJpZXMgYmVjYXVzZSB3ZSBjYW4ndCBoYW5kbGUg
Y29uY3VycmVudCByZW1vdmUncwogICAgIC8vIGZyb20gdGhlIHByb3BlcnR5IG1hcHMuCkBAIC03
ODQsNyArNzg0LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bAog
ICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0
cnVjdHVyZSwgdGFibGUpOwogICAgIAogICAgIGlmICh0YWJsZSkgewotICAgICAgICBQcm9wZXJ0
eU1hcEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5maW5kKHByb3BlcnR5TmFtZS51aWQoKSkuZmlyc3Q7
CisgICAgICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gdGFibGUtPmZpbmQodWlkKS5maXJz
dDsKICAgICAgICAgaWYgKGVudHJ5KSB7CiAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZW50cnkt
PmF0dHJpYnV0ZXM7CiAgICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gZW50cnktPnNwZWNpZmlj
VmFsdWUuZ2V0KCk7CkBAIC03OTcsNyArNzk3LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpnZXRDb25jdXJyZW50bAogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZXMu
c2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07Ci0gICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkgIT0gcHJvcGVydHlOYW1l
LnVpZCgpKQorICAgICAgICBpZiAoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpICE9
IHVpZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgYXR0cmlidXRl
cyA9IHN0cnVjdHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91czsKQEAgLTk1NiwxMyArOTU2LDEz
IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdGhp
c09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3RydWN0
dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQorYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJj
ZXB0U3RvcmVUbyhWTSYgdm0sIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICAvLyBOb3RlLCB0aGlz
IG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB0d28ga2luZHMgb2YgcGxhY2VzOiAoMSkgYXNzZXJ0aW9u
cyBhbmQgKDIpCiAgICAgLy8gdGhlIGNvbXBpbGF0aW9uIHRocmVhZC4gQXMgc3VjaCwgaXQgZG9l
cyB0aGluZ3Mgc29tZXdoYXQgY2FyZWZ1bGx5IHRvIGVuc3VyZQogICAgIC8vIHRocmVhZCBzYWZl
dHkuIEN1cnJlbnRseSB0aGF0IG9ubHkgYWZmZWN0cyB0aGUgd2F5IHdlIGRvIFN0cnVjdHVyZTo6
Z2V0KCkuCiAgICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Cisg
ICAgdW5zaWduZWQgaSA9IHRvVUludDMyRnJvbVN0cmluZ0ltcGwodWlkKTsKICAgICBpZiAoaSAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBhbnlPYmplY3RJbkNo
YWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCk7CiAgICAgCkBAIC05NzUsNyArOTc1LDcg
QEAgYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAgICAgICAKICAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXRDb25jdXJyZW50
bHkodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldENvbmN1cnJlbnRseSh2bSwgdWlk
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKCFKU0M6OmlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKQEAgLTk4Niw2
ICs5ODYsMTEgQEAgYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAg
IH0KIH0KIAorYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVU
byhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIHByb3Rv
dHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKK30K
KwogI2lmIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwogCiB2b2lkIFByb3BlcnR5VGFi
bGU6OmNoZWNrQ29uc2lzdGVuY3koKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE0OTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKICAgICAgICAgCiAgICAgLy8gV2lsbCBqdXN0IHRoZSBwcm90b3R5cGUgY2hhaW4gaW50
ZXJjZXB0IHRoaXMgcHJvcGVydHkgYWNjZXNzPworICAgIGJvb2wgcHJvdG90eXBlQ2hhaW5NYXlJ
bnRlcmNlcHRTdG9yZVRvKFZNJiwgU3RyaW5nSW1wbCogdWlkKTsKICAgICBib29sIHByb3RvdHlw
ZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIAog
ICAgIGJvb2wgdHJhbnNpdGlvbkRpZEludm9sdmVTcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1
cm4gISFtX3NwZWNpZmljVmFsdWVJblByZXZpb3VzOyB9CkBAIC0yNDEsOCArMjQyLDggQEAgcHVi
bGljOgogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1l
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKTsKIAot
ICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFByb3BlcnR5TmFtZSk7Ci0g
ICAgUHJvcGVydHlPZmZzZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNp
Z25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJvcGVydHlP
ZmZzZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCogdWlkKTsKKyAgICBQcm9wZXJ0
eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkJiBh
dHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKTsKIAogICAgIGJvb2wgaGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllczsgfQogICAgIGJvb2wgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNs
dWRpbmdQcm90bygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRlclBy
b3BlcnRpZXNFeGNsdWRpbmdQcm90bzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTQ5MzAxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MCwxMiArODAsMTIgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
Z2V0KFZNJgogICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZhbGlkT2Zmc2V0
OwogfQogICAgIAotaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVu
dGx5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK2lubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYgdm0sIFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKICAgICBKU0NlbGwqIHNwZWNpZmlj
VmFsdWVJZ25vcmVkOwogICAgIHJldHVybiBnZXRDb25jdXJyZW50bHkoCi0gICAgICAgIHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3JlZCk7Cisg
ICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3JlZCk7
CiB9CiAKIGlubGluZSBib29sIFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oCShyZXZpc2lvbiAxNDkyNjQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8bGltaXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGlsYXRp
b25UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nSGFzaGVyLmg+CkBAIC01ODQsMTEgKzU4
NSwxMyBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgdm9pZCByZWYoKQogICAgIHsKKyAgICAgICAg
QVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgICAgICBtX3JlZkNvdW50ICs9IHNf
cmVmQ291bnRJbmNyZW1lbnQ7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQgZGVyZWYoKQogICAg
IHsKKyAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgICAgICBpZiAo
bV9yZWZDb3VudCA9PSBzX3JlZkNvdW50SW5jcmVtZW50KSB7CiAgICAgICAgICAgICBkZWxldGUg
dGhpczsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200081</attachid>
            <date>2013-04-29 22:16:37 -0700</date>
            <delta_ts>2013-04-30 14:52:59 -0700</delta_ts>
            <desc>starting to run things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>109175</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDkzNTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIwLDYgKzIyMCw4IEBACiAJCTBGODM2NEI3MTY0QjBD
MTEwMDUzMzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODM2NEI1MTY0QjBDMEUwMDUzMzI5QSAvKiBERkdC
cmFuY2hEaXJlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGluay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5MzE3MkUwNDlF
MDA3REJEQTUgLyogRlRMTGluay5jcHAgKi87IH07CiAJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRB
NSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOEYyQjk5MTcyRjA0RkYwMDdE
QkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rl
c2lyZWRJZGVudGlmaWVycy5jcHAgKi87IH07CisJCTBGOEYyQjlBMTcyRjA1MDEwMDdEQkRBNSAv
KiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk4MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRl
bnRpZmllcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGOTQz
QTE2Njc2MzExMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgKi87IH07CiAJ
CTBGOEY5NDQwMTY2NzYzMzAwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEY5NDNEMTY2NzYzMkQwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCAqLzsgfTsKIAkJMEY4Rjk0NDExNjY3NjMzMjAwRDYx
OTcxIC8qIENvZGVCbG9ja0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEY5NDNFMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExODUs
NiArMTE4Nyw4IEBACiAJCTBGODVBMzFFMTZBQjc2QUUwMDc3NTcxRSAvKiBERkdWYXJpYWRpY0Z1
bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhZGljRnVu
Y3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWRpY0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExpbmsuY3BwOyBwYXRoID0gZnRsL0ZUTExpbmsuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyog
RlRMTGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMaW5rLmg7IHBhdGggPSBmdGwvRlRMTGluay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUg
LyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2ly
ZWRJZGVudGlmaWVycy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8q
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkSWRlbnRp
ZmllcnMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY4Rjk0M0ExNjY3NjMxMTAwRDYxOTcxIC8qIENvZGVTcGVjaWFs
aXphdGlvbktpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZVNwZWNpYWxpemF0aW9uS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
OEY5NDNEMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0hhc2guY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjhGOTQzRTE2Njc2MzJEMDBENjE5NzEgLyogQ29kZUJsb2NrSGFz
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tIYXNoLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODUxLDYgKzI4NTUsOCBAQAogCQkJCTBGRkZD
OTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oICovLAogCQkJCTBGMkZDNzcwMTZF
MTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8sCiAJCQkJMEYyRkM3NzExNkUxMkY2
RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCisJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RC
REE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCisJCQkJMEY4RjJCOTgxNzJGMDRG
RDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAogCQkJCTBGRTg1MzQ5MTcy
M0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovLAogCQkJCTBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLywKIAkJCQkw
RkY0Mjc2MTE1OTFBMUM5MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCAqLywKQEAgLTM0
MDcsNiArMzQxMyw3IEBACiAJCQkJODZFM0M2MTIxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJDMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU1ZhbHVlUmVmLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjhGMkI5QTE3MkYw
NTAxMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtP
YmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC00Mjg2LDYgKzQyOTMsNyBA
QAogCQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4
RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1
ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4
RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3Jz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTFDMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExB
YnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI1RDcwOUIxNkRFOTlGNDAwRkNB
NkJDIC8qIEpTTWFuYWdlZFZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAx
NDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYgaWRl
bnQpCitHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJB
TShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oaWRlbnQpOworICAgIFVOVVNFRF9Q
QVJBTSh1aWQpOwogI2lmIEVOQUJMRShMTElOVCkKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRl
eDsKICAgICAKQEAgLTUyLDcgKzUyLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRnJvbQogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwogICAgIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50LCBhdHRy
aWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICpwcm9maWxlZEJsb2NrLT52
bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAg
aWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkBAIC02NCw3ICs2NCw3IEBAIEdldEJ5SWRTdGF0
dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICNlbmRpZgogfQogCi12b2lkIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JDaGFpbihHZXRCeUlkU3RhdHVzJiByZXN1bHQsIENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgSWRlbnRpZmllciYgaWRlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
dm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oR2V0QnlJZFN0YXR1cyYgcmVzdWx0
LCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAjaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQog
ICAgIC8vIFZhbGlkYXRlIHRoZSBjaGFpbi4gSWYgdGhlIGNoYWluIGlzIGludmFsaWQsIHRoZW4g
Y3VycmVudGx5IHRoZSBiZXN0IHRoaW5nCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvckNoYWluKEdldEIKICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CiAg
ICAgICAgIAogICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50LCBhdHRyaWJ1dGVz
SWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1
aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoY3VycmVudFN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAg
IGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQpKQpAQCAtMTA0LDI4ICsxMDQsMjgg
QEAgdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oR2V0QgogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGlkZW50KTsKKyAgICBVTlVTRURfUEFSQU0odWlkKTsKICAgICBVTlVT
RURfUEFSQU0oc3RydWN0dXJlKTsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICNl
bmRpZgogfQogCi1HZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJiBp
ZGVudCkKK0dldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAg
ICAgCiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShi
eXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oaWRlbnQpOworICAgIFVOVVNFRF9QQVJB
TSh1aWQpOwogI2lmIEVOQUJMRShKSVQpICYmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBp
ZiAoIXByb2ZpbGVkQmxvY2stPm51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKCkpCi0gICAgICAg
IHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGlk
ZW50KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCwgdWlkKTsKICAgICAKICAgICAvLyBGaXJzdCBjaGVjayBpZiBpdCBtYWtlcyBl
aXRoZXIgY2FsbHMsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBiZSBzdXBlciBjYXJlZnVsLCBv
cgogICAgIC8vIGlmIGl0J3Mgbm90IHNldCBhdCBhbGwsIGluIHdoaWNoIGNhc2Ugd2UgcHVudC4K
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBwcm9maWxlZEJsb2NrLT5nZXRTdHVi
SW5mbyhieXRlY29kZUluZGV4KTsKICAgICBpZiAoIXN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJl
dHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGlkZW50
KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNv
ZGVJbmRleCwgdWlkKTsKICAgICAKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IGxpc3Q7CiAgICAgaW50IGxpc3RTaXplOwpAQCAtMTU3LDE0ICsxNTcsMTQgQEAgR2V0QnlJZFN0
YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIHJlc3VsdC5tX3dhc1NlZW5JbkpJ
VCA9IHRydWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1bXBpbmcgb25s
eS4KICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc191
bnNldDoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCwgaWRlbnQpOworICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9m
aWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwogICAgICAgICAKICAgICBjYXNlIGFjY2Vz
c19nZXRfYnlfaWRfc2VsZjogewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKICAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsK
ICAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0g
ICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVk
LCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQs
IGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKICAgICAg
ICAgCkBAIC0xODksNyArMTg5LDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAogICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgICAg
ICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CiAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBt
eU9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAgICAgICAgICpw
cm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFs
dWUpOworICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0
ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpKQogICAgICAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAg
ICAgICAgCkBAIC0yMjAsNyArMjIwLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywg
dHJ1ZSk7CiAgICAgICAgIHJlc3VsdC5tX2NoYWluLmFwcGVuZChzdHViSW5mby51LmdldEJ5SWRQ
cm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBjb21wdXRlRm9yQ2hhaW4o
Ci0gICAgICAgICAgICByZXN1bHQsIHByb2ZpbGVkQmxvY2ssIGlkZW50LAorICAgICAgICAgICAg
cmVzdWx0LCBwcm9maWxlZEJsb2NrLCB1aWQsCiAgICAgICAgICAgICBzdHViSW5mby51LmdldEJ5
SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtMjMxLDcgKzIzMSw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0dWJJbmZvLnUuZ2V0QnlJ
ZENoYWluLmNvdW50OyArK2kpCiAgICAgICAgICAgICByZXN1bHQubV9jaGFpbi5hcHBlbmQoc3R1
YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4tPmhlYWQoKVtpXS5nZXQoKSk7CiAgICAgICAgIGNv
bXB1dGVGb3JDaGFpbigKLSAgICAgICAgICAgIHJlc3VsdCwgcHJvZmlsZWRCbG9jaywgaWRlbnQs
CisgICAgICAgICAgICByZXN1bHQsIHByb2ZpbGVkQmxvY2ssIHVpZCwKICAgICAgICAgICAgIHN0
dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0yNTUsMTIgKzI1NSwxMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotR2V0QnlJ
ZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIElkZW50aWZpZXImIGlkZW50KQorR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICAvLyBGb3Igbm93IHdlIG9ubHkgaGFuZGxlIHRoZSBzdXBlciBzaW1wbGUgc2VsZiBh
Y2Nlc3MgY2FzZS4gV2UgY291bGQgaGFuZGxlIHRoZQogICAgIC8vIHByb3RvdHlwZSBjYXNlIGlu
IHRoZSBmdXR1cmUuCiAgICAgCi0gICAgaWYgKFByb3BlcnR5TmFtZShpZGVudCkuYXNJbmRleCgp
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICBpZiAodG9VSW50MzJGcm9tU3RyaW5n
SW1wbCh1aWQpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgaWYgKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSkKQEAgLTI3MCwxMCArMjcwLDEw
IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgcmV0
dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgR2V0QnlJZFN0YXR1
cyByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gZmFsc2U7IC8vIFRvIG15IGtu
b3dsZWRnZSBub2JvZHkgdGhhdCB1c2VzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUqLCBJZGVu
dGlmaWVyJikgcmVhZHMgdGhpcyBmaWVsZCwgYnV0IEkgbWlnaHQgYXMgd2VsbCBiZSBob25lc3Q6
IG5vLCBpdCB3YXNuJ3Qgc2VlbiBpbiB0aGUgSklULCBzaW5jZSBJIGNvbXB1dGVkIGl0IHN0YXRp
Y2FsbHkuCisgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gZmFsc2U7IC8vIFRvIG15IGtub3ds
ZWRnZSBub2JvZHkgdGhhdCB1c2VzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUqLCBTdHJpbmdJ
bXBsKikgcmVhZHMgdGhpcyBmaWVsZCwgYnV0IEkgbWlnaHQgYXMgd2VsbCBiZSBob25lc3Q6IG5v
LCBpdCB3YXNuJ3Qgc2VlbiBpbiB0aGUgSklULCBzaW5jZSBJIGNvbXB1dGVkIGl0IHN0YXRpY2Fs
bHkuCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7
Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIGlk
ZW50LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1Zh
bHVlKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7IC8vIEl0J3MgcHJvYmFibHkgYSBw
cm90b3R5cGUgbG9va3VwLiBHaXZlIHVwIG9uIGxpZmUgZm9yIG5vdywgZXZlbiB0aG91Z2ggd2Ug
Y291bGQgdG90YWxseSBiZSB3YXkgc21hcnRlciBhYm91dCBpdC4KICAgICBpZiAoYXR0cmlidXRl
cyAmIEFjY2Vzc29yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw2IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgSWRlbnRpZmllcjsK
IAogY2xhc3MgR2V0QnlJZFN0YXR1cyB7CiBwdWJsaWM6CkBAIC03MSw4ICs3MCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKChzdGF0ZSA9PSBTaW1wbGUpID09IChvZmZzZXQgIT0gaW52YWxp
ZE9mZnNldCkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElkZW50aWZpZXImKTsKLSAg
ICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKFZNJiwgU3RydWN0dXJlKiwgSWRlbnRp
ZmllciYpOworICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKKyAgICBzdGF0aWMgR2V0
QnlJZFN0YXR1cyBjb21wdXRlRm9yKFZNJiwgU3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlkKTsK
ICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAK
QEAgLTkwLDggKzg5LDggQEAgcHVibGljOgogICAgIGJvb2wgd2FzU2VlbkluSklUKCkgY29uc3Qg
eyByZXR1cm4gbV93YXNTZWVuSW5KSVQ7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZv
aWQgY29tcHV0ZUZvckNoYWluKEdldEJ5SWRTdGF0dXMmIHJlc3VsdCwgQ29kZUJsb2NrKiwgSWRl
bnRpZmllciYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVG
cm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYp
OworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVGb3JDaGFpbihHZXRCeUlkU3RhdHVzJiByZXN1bHQs
IENvZGVCbG9jayosIFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEdl
dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAg
U3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ5MzUxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxMSArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElkZW50aWZpZXImIGlkZW50KQorUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKQogewogICAg
IFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlkZW50KTsKKyAgICBVTlVTRURfUEFSQU0odWlkKTsK
ICNpZiBFTkFCTEUoTExJTlQpCiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gcHJvZmls
ZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXg7CiAKQEAgLTQ5
LDcgKzQ5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAg
IAogICAgIGlmIChpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKGxs
aW50X29wX3B1dF9ieV9pZCkKICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0g
TExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpKSB7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpw
cm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQp
OwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwog
ICAgICAgICAKQEAgLTY4LDcgKzY4LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRnJvbQogICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChjaGFpbik7
CiAgICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkoKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50KTsKKyAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+
dm0oKSwgdWlkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7
CiAgICAgCkBAIC03OCwzMiArNzgsMzIgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRnJvbQogI2VuZGlmCiB9CiAKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IElkZW50aWZpZXImIGlkZW50KQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3Ry
aW5nSW1wbCogdWlkKQogewogICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9j
ay0+bV9sb2NrKTsKICAgICAKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAg
VU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShpZGVudCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHVpZCk7CiAjaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQogICAgIGlmICghcHJvZmlsZWRCbG9jay0+bnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5m
b3MoKSkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCwgaWRlbnQpOworICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9m
aWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwogICAgIAogICAgIGlmIChwcm9maWxlZEJs
b2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShieXRlY29kZUluZGV4KSkKICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CiAg
ICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gcHJvZmlsZWRCbG9jay0+Z2V0
U3R1YkluZm8oYnl0ZWNvZGVJbmRleCk7CiAgICAgaWYgKCFzdHViSW5mby5zZWVuKQotICAgICAg
ICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCBp
ZGVudCk7CisgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIHVpZCk7CiAgICAgCiAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBl
KSB7CiAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxM
SW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGlkZW50KTsKKyAgICAgICAgcmV0dXJu
IGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKICAg
ICAgICAgCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6IHsKICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0KICAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFJlcGxh
Y2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAgICAgICAg
ICpwcm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgKnByb2ZpbGVk
QmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsK
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAogICAgICAgICAgICAgICAgIFNpbXBs
ZVJlcGxhY2UsCkBAIC0xMTksNyArMTE5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgICAgICBBU1NFUlQoc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlv
bi5wcmV2aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSk7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAogICAgICAgICAgICAg
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgK
LSAgICAgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQpOworICAgICAgICAg
ICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygKICAgICAg
ICAgICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLApAQCAtMTM5LDkgKzEzOSw5IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
fQogCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRlbnRpZmll
ciYgaWRlbnQsIGJvb2wgaXNEaXJlY3QpCitQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KQogewotICAgIGlmIChQ
cm9wZXJ0eU5hbWUoaWRlbnQpLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
CisgICAgaWYgKHRvVUludDMyRnJvbVN0cmluZ0ltcGwodWlkKSAhPSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwog
ICAgIAogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90KCkpCkBAIC0xNTMsNyArMTUzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgSlNDZWxsKiBzcGVj
aWZpY1ZhbHVlSWdub3JlZDsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgdm0sIGlkZW50LCBhdHRyaWJ1dGVzLCBzcGVjaWZp
Y1ZhbHVlSWdub3JlZCk7CisgICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFs
dWVJZ25vcmVkKTsKICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVhZE9ubHkpKQogICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CkBAIC0xNzQsNyArMTc0LDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIAogICAgIGlmICghaXNEaXJl
Y3QpIHsKICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciBy
ZWFkLW9ubHkgcHJvcGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICBpZiAoc3RydWN0dXJl
LT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8odm0sIGlkZW50KSkKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKHZtLCB1aWQp
KQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhc24ndCBiZWVuIG5vcm1h
bGl6ZWQgKGkuZS4gdGhlcmUgYXJlIHByb3hpZXMgb3IgZGljdGlvbmFyaWVzKQpAQCAtMjAxLDcg
KzIwMSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAv
LyAtIElmIHdlJ3JlIG5vdCBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYzog
YWdhaW4sIHRoaXMgd291bGQgb25seSBiZSBhCiAgICAgLy8gICBwcm9ibGVtIGlmIHRoZSBleGlz
dGluZyB0cmFuc2l0aW9uIGRpZCBoYXZlIGEgc3BlY2lmaWMgdmFsdWUsIHdoaWNoIHdlIGNoZWNr
IGZvcgogICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4KLSAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBpZGVudCwgMCwgMCwgb2Zmc2V0KTsKKyAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCB1aWQsIDAsIDAsIG9mZnNldCk7CiAgICAgaWYg
KCF0cmFuc2l0aW9uKQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsgLy8gVGhpcyBvY2N1cnMgaW4gYml6YXJyZSBjYXNlcyBvbmx5LiBTZWUgYWJvdmUuCiAgICAg
QVNTRVJUKCF0cmFuc2l0aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsyOCwxMSBAQAogCiAjaW5jbHVk
ZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2Rl
QmxvY2s7Ci1jbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgVk07CiBjbGFzcyBKU0dsb2JhbE9iamVj
dDsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTkwLDggKzkwLDggQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQoKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1Bh
dGgpID09IChtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KSk7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3IoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIElkZW50aWZpZXImLCBib29sIGlz
RGlyZWN0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayos
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIFB1
dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
U3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KTsKICAgICAKICAgICBTdGF0ZSBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAKQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJs
aWM6CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21M
TEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJik7Cisg
ICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIFN0YXRlIG1f
c3RhdGU7CiAgICAgU3RydWN0dXJlKiBtX29sZFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNv
bHZlR2xvYmFsU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDExIEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgUmVzb2x2ZUdsb2JhbFN0YXR1cyBjb21wdXRlRm9y
U3RydWN0dXJlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRl
bnRpZmllciYgaWRlbnRpZmllcikKK3N0YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVzIGNvbXB1dGVG
b3JTdHJ1Y3R1cmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBT
dHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KCpjb2RlQmxvY2stPnZtKCksIGlkZW50aWZpZXIsIGF0dHJp
YnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqY29kZUJsb2NrLT52bSgpLCB1aWQsIGF0dHJp
YnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCkBAIC00Niw3ICs0Niw3IEBAIHN0YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVz
IGNvbXB1dGVGb3JTdHIKICAgICByZXR1cm4gUmVzb2x2ZUdsb2JhbFN0YXR1cyhSZXNvbHZlR2xv
YmFsU3RhdHVzOjpTaW1wbGUsIHN0cnVjdHVyZSwgb2Zmc2V0LCBzcGVjaWZpY1ZhbHVlKTsKIH0K
IAotUmVzb2x2ZUdsb2JhbFN0YXR1cyBSZXNvbHZlR2xvYmFsU3RhdHVzOjpjb21wdXRlRm9yKENv
ZGVCbG9jayogY29kZUJsb2NrLCBpbnQsIFJlc29sdmVPcGVyYXRpb24qIG9wZXJhdGlvbiwgSWRl
bnRpZmllciYgaWRlbnRpZmllcikKK1Jlc29sdmVHbG9iYWxTdGF0dXMgUmVzb2x2ZUdsb2JhbFN0
YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50LCBSZXNvbHZlT3BlcmF0
aW9uKiBvcGVyYXRpb24sIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBDb2RlQmxvY2tMb2NrZXIg
bG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAKQEAgLTU0LDcgKzU0LDcgQEAgUmVzb2x2
ZUdsb2JhbFN0YXR1cyBSZXNvbHZlR2xvYmFsU3RhdHVzOgogICAgIGlmICghb3BlcmF0aW9uLT5t
X3N0cnVjdHVyZSkKICAgICAgICAgcmV0dXJuIFJlc29sdmVHbG9iYWxTdGF0dXMoKTsKICAgICAK
LSAgICByZXR1cm4gY29tcHV0ZUZvclN0cnVjdHVyZShjb2RlQmxvY2ssIG9wZXJhdGlvbi0+bV9z
dHJ1Y3R1cmUuZ2V0KCksIGlkZW50aWZpZXIpOworICAgIHJldHVybiBjb21wdXRlRm9yU3RydWN0
dXJlKGNvZGVCbG9jaywgb3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5nZXQoKSwgdWlkKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVzb2x2ZUdsb2JhbFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDExICsyOSwxMSBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNs
dWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENv
ZGVCbG9jazsKLWNsYXNzIElkZW50aWZpZXI7CiBzdHJ1Y3QgUmVzb2x2ZU9wZXJhdGlvbjsKIGNs
YXNzIFN0cnVjdHVyZTsKIApAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
ICAgICAKLSAgICBzdGF0aWMgUmVzb2x2ZUdsb2JhbFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9j
ayosIGludCBieXRlY29kZUluZGV4LCBSZXNvbHZlT3BlcmF0aW9uKiwgSWRlbnRpZmllciYpOwor
ICAgIHN0YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgaW50
IGJ5dGVjb2RlSW5kZXgsIFJlc29sdmVPcGVyYXRpb24qLCBTdHJpbmdJbXBsKiB1aWQpOwogICAg
IAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShy
ZXZpc2lvbiAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcyLDcgKzEyNzIsNyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJl
KCkpIHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92bSwgc3RydWN0
dXJlLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1faWRlbnRpZmllcnNbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSk7CiAgICAgICAgICAgICAg
ICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEFzc2Vy
dCB0aGluZ3MgdGhhdCB3ZSBjYW4ndCBoYW5kbGUgYW5kIHRoYXQgdGhlIGNvbXB1dGVGb3IoKSBt
ZXRob2QKICAgICAgICAgICAgICAgICAgICAgLy8gYWJvdmUgd29uJ3QgYmUgYWJsZSB0byByZXR1
cm4uCkBAIC0xNDczLDcgKzE0NzMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLAogICAgICAgICAgICAgICAg
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLAogICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSksCisgICAgICAgICAgICAgICAgbV9ncmFw
aC5tX2lkZW50aWZpZXJzW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0sCiAgICAgICAgICAgICAg
ICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgICAgIGlmIChzdGF0dXMu
aXNTaW1wbGVSZXBsYWNlKCkpIHsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIobV9ncmFwaCwgc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDkzNTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBpbmxpbmluZy4K
ICAgICBib29sIG1faGF2ZUJ1aWx0T3BlcmFuZE1hcHM7CiAgICAgLy8gTWFwcGluZyBiZXR3ZWVu
IGlkZW50aWZpZXIgbmFtZXMgYW5kIG51bWJlcnMuCi0gICAgSWRlbnRpZmllck1hcCBtX2lkZW50
aWZpZXJNYXA7CisgICAgQ29uY3VycmVudElkZW50aWZpZXJNYXAgbV9pZGVudGlmaWVyTWFwOwog
ICAgIC8vIE1hcHBpbmcgYmV0d2VlbiB2YWx1ZXMgYW5kIGNvbnN0YW50IG51bWJlcnMuCiAgICAg
SlNWYWx1ZU1hcCBtX2pzVmFsdWVNYXA7CiAgICAgLy8gSW5kZXggb2YgdGhlIGVtcHR5IHZhbHVl
LCBvciBVSU5UX01BWCBpZiB0aGVyZSBpcyBubyBtYXBwaW5nLiBUaGlzIGlzIGEgaG9ycmlibGUK
QEAgLTE4NzIsNyArMTg3Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9w
ZXJhdGkKICAgICBSZXNvbHZlT3BlcmF0aW9uKiByZXNvbHZlVmFsdWVPcGVyYXRpb24gPSBwYzsK
ICAgICBzd2l0Y2ggKHJlc29sdmVWYWx1ZU9wZXJhdGlvbi0+bV9vcGVyYXRpb24pIHsKICAgICBj
YXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5OiB7Ci0gICAg
ICAgIFJlc29sdmVHbG9iYWxTdGF0dXMgc3RhdHVzID0gUmVzb2x2ZUdsb2JhbFN0YXR1czo6Y29t
cHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1fY3VycmVudEluZGV4
LCByZXNvbHZlVmFsdWVPcGVyYXRpb24sIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZp
ZXIpKTsKKyAgICAgICAgUmVzb2x2ZUdsb2JhbFN0YXR1cyBzdGF0dXMgPSBSZXNvbHZlR2xvYmFs
U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9j
dXJyZW50SW5kZXgsIHJlc29sdmVWYWx1ZU9wZXJhdGlvbiwgbV9ncmFwaC5tX2lkZW50aWZpZXJz
W2lkZW50aWZpZXJdKTsKICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoc3RhdHVzLnN0cnVjdHVyZSgpKTsKIApAQCAtMTkwOCw4ICsxOTA4LDggQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aQogCiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7CiAKLSAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGlkZW50aWZpZXIpOwotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKKyAgICAg
ICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZpZXJdOwor
ICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5nZXQodWlkKTsKICAgICAgICAgaWYgKCFtX2dyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGls
bFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkpIHsKICAgICAgICAgICAgICp2YWx1ZSA9IGFk
ZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8oZ2xvYmFsT2JqZWN0LT5hc3NlcnRSZWdpc3Rl
cklzSW5UaGlzT2JqZWN0KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcykpLCBPcEluZm8ocHJlZGljdGlv
bikpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTg1LDkgKzI1ODUsOSBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlKiBi
YXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmll
clJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihpZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3Jh
cGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIEdldEJ5SWRT
dGF0dXMgZ2V0QnlJZFN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAg
ICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2N1cnJlbnRJbmRl
eCwgaWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLCBtX2N1cnJlbnRJbmRleCwgdWlkKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaGFuZGxlR2V0QnlJZCgKICAgICAgICAgICAgICAgICBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeUlkU3Rh
dHVzKTsKQEAgLTI2MDgsNyArMjYwOCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1cyA9IFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4LAotICAg
ICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmllck51bWJlcl0p
OwogICAgICAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgICAgICAgICAgCkBAIC0yNzIxLDggKzI3
MjEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
OwogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRd
LnUub3BlcmFuZF07Ci0gICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudGlm
aWVyLmltcGwoKSk7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLm1faWRl
bnRpZmllcnNbaWRlbnRpZmllck51bWJlcl07CisgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAg
ICAgIGlmICghZW50cnkuY291bGRCZVdhdGNoZWQoKSkgewogICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoCiAgICAgICAgICAgICAgICAgICAgIFB1dEdsb2JhbFZhciwKQEAgLTMyMDksNyArMzIw
OSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxWYXJpYWJsZVB1dENoZWNrZWQ6IHsK
ICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3At
Pm1fY29kZUJsb2NrOwogICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyKS5pbXBsKCkpOworICAgICAgICAgICAgICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCht
X2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmllcl0pOwogICAgICAgICAgICAgICAgIGlmIChl
bnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
UHV0R2xvYmFsVmFyQ2hlY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3Qo
cHV0VG9CYXNlLT5tX3JlZ2lzdGVyQWRkcmVzcykpLApAQCAtMzU3Miw5ICszNTcyLDkgQEAgQnl0
ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogCiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgewog
ICAgICAgICAgICAgU3RyaW5nSW1wbCogcmVwID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGkpLmlt
cGwoKTsKLSAgICAgICAgICAgIElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBieXRl
Q29kZVBhcnNlci0+bV9pZGVudGlmaWVyTWFwLmFkZChyZXAsIGJ5dGVDb2RlUGFyc2VyLT5tX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRJ
ZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1faWRlbnRp
Zmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX2lkZW50aWZpZXJzLm51
bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
Ci0gICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRJZGVudGlm
aWVyKElkZW50aWZpZXIoYnl0ZUNvZGVQYXJzZXItPm1fdm0sIHJlcCkpOworICAgICAgICAgICAg
ICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1faWRlbnRpZmllcnMuYWRkTGF6aWx5KHJlcCk7
CiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2st
Pm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGJvb2wgbmVlZHNXYXRjaHBvaW50ID0gIW1fc3RhdGUuZm9yTm9k
ZShjaGlsZCkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICB2bSgpLCBzdHJ1Y3R1cmUs
IGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdm0oKSwgc3RydWN0dXJlLCBtX2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmll
ck51bWJlcl0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc3RhdHVz
LmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGhh
bmRsZSBwcm90b3R5cGUgY2FzZXMuCkBAIC0yMjEsNyArMjIxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgdm0oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IoY29kZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwKLSAg
ICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJl
ciksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVy
TnVtYmVyXSwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBs
ZVJlcGxhY2UoKSAmJiAhc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50
aWZpZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Rlc2lyZWRJZGVudGlmaWVyczo6
RGVzaXJlZElkZW50aWZpZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9jb2RlQmxv
Y2soY29kZUJsb2NrKQoreworfQorCitEZXNpcmVkSWRlbnRpZmllcnM6On5EZXNpcmVkSWRlbnRp
ZmllcnMoKQoreworfQorCit2b2lkIERlc2lyZWRJZGVudGlmaWVyczo6YWRkTGF6aWx5KFN0cmlu
Z0ltcGwqIHJlcCkKK3sKKyAgICBtX2FkZGVkSWRlbnRpZmllcnMuYXBwZW5kKHJlcCk7Cit9CisK
K3ZvaWQgRGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQoVk0mIHZtKQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2FkZGVkSWRlbnRpZmllcnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgU3RyaW5nSW1wbCogcmVwID0gbV9hZGRlZElkZW50aWZpZXJzW2ldOworICAgICAgICBB
U1NFUlQocmVwLT5oYXNBdExlYXN0T25lUmVmKCkpOworICAgICAgICBtX2NvZGVCbG9jay0+YWRk
SWRlbnRpZmllcihJZGVudGlmaWVyKCZ2bSwgcmVwKSk7CisgICAgfQorfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRp
ZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRGVzaXJlZElkZW50aWZp
ZXJzX2gKKyNkZWZpbmUgREZHRGVzaXJlZElkZW50aWZpZXJzX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgRGVzaXJlZElkZW50aWZpZXJzIHsKK3B1YmxpYzoKKyAgICBEZXNpcmVk
SWRlbnRpZmllcnMoQ29kZUJsb2NrKik7CisgICAgfkRlc2lyZWRJZGVudGlmaWVycygpOworICAg
IAorICAgIHVuc2lnbmVkIG51bWJlck9mSWRlbnRpZmllcnMoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkgKyBtX2FkZGVkSWRlbnRpZmll
cnMuc2l6ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZExhemlseShTdHJpbmdJbXBsKik7
CisgICAgCisgICAgU3RyaW5nSW1wbCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICBTdHJpbmdJbXBsKiByZXN1bHQ7CisgICAgICAgIGlmIChpbmRleCA8IG1fY29kZUJs
b2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpCisgICAgICAgICAgICByZXN1bHQgPSBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihpbmRleCkuaW1wbCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXN1bHQgPSBtX2FkZGVkSWRlbnRpZmllcnNbaW5kZXggLSBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZJZGVudGlmaWVycygpXTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC0+aGFzQXRMZWFzdE9uZVJl
ZigpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU3RyaW5nSW1w
bCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisgICAgCisgICAgdm9pZCByZWFsbHlBZGQoVk0mKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBWZWN0b3I8U3RyaW5nSW1wbCo+IG1fYWRkZWRJZGVu
dGlmaWVyczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZElkZW50aWZpZXJzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MTEsNyArNzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHNldFVzZUtpbmRBbmRVbmJveElmUHJvZml0YWJsZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5p
ZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gdm0oKS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2lkZW50aWZpZXJzW25vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKV0gIT0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKTsKICAg
ICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCkBAIC0xMDE3LDEyICsxMDE3
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTGV0IHRoZSBzbG93IHBh
dGggd29ycnkgYWJvdXQgaXQuCiAgICAgfQogICAgIAotICAgIGJvb2wgaXNTdHJpbmdQcm90b3R5
cGVNZXRob2RTYW5lKFN0cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCkKKyAgICBib29sIGlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShT
dHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkKQogICAg
IHsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc1VudXNlZDsKICAgICAgICAgSlNDZWxsKiBz
cGVjaWZpY1ZhbHVlOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJpbmdQcm90
b3R5cGVTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgICAgIHZtKCksIGlkZW50
LCBhdHRyaWJ1dGVzVW51c2VkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgICAgIHZtKCksIHVp
ZCwgYXR0cmlidXRlc1VudXNlZCwgc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGlmICghaXNWYWxp
ZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAg
LTEwNjEsOSArMTA2MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIC8vICh0aGF0IHdvdWxkIGNhbGwg
dG9TdHJpbmcoKSkuIFdlIGRvbid0IHdhbnQgdGhlIERGRyB0byBoYXZlIHRvIGRpc3Rpbmd1aXNo
CiAgICAgICAgIC8vIGJldHdlZW4gdGhlIHR3bywganVzdCBiZWNhdXNlIHRoYXQgc2VlbXMgbGlr
ZSBpdCB3b3VsZCBnZXQgY29uZnVzaW5nLiBTbyB3ZQogICAgICAgICAvLyBqdXN0IHJlcXVpcmUg
Ym90aCBtZXRob2RzIHRvIGJlIHNhbmUuCi0gICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVN
ZXRob2RTYW5lKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT52
YWx1ZU9mKSkKKyAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5n
UHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlw
ZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nKSkKKyAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3Ry
aW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwo
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhmYWxzZSkKICAgICAsIG1fb3NyRW50
cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAsIG1fbXVzdEhhbmRs
ZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQorICAgICwgbV9pZGVudGlmaWVycyhjb2RlQmxvY2sp
CiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAgICAgLCBtX2Zvcm0oTG9h
ZFN0b3JlKQogICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2FsbHlVbmlmaWVkKQpAQCAtMTg4
LDcgKzE4OSw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAg
ICBpZiAobm9kZS0+aGFzUmVnaXN0ZXJQb2ludGVyKCkpCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImdsb2JhbCIsIGdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+ZmluZFJlZ2lz
dGVySW5kZXgobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpLCAiKCIsIFJhd1BvaW50ZXIobm9kZS0+
cmVnaXN0ZXJQb2ludGVyKCkpLCAiKSIpOwogICAgIGlmIChub2RlLT5oYXNJZGVudGlmaWVyKCkp
Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigp
LCAieyIsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSku
c3RyaW5nKCksICJ9Iik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgbm9kZS0+aWRl
bnRpZmllck51bWJlcigpLCAieyIsIG1faWRlbnRpZmllcnNbbm9kZS0+aWRlbnRpZmllck51bWJl
cigpXSwgIn0iKTsKICAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlU2V0KCkpIHsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7ICsraSkK
ICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgInN0cnVjdCgiLCBSYXdQb2ludGVyKG5vZGUt
PnN0cnVjdHVyZVNldCgpW2ldKSwgIjogIiwgSW5kZXhpbmdUeXBlRHVtcChub2RlLT5zdHJ1Y3R1
cmVTZXQoKVtpXS0+aW5kZXhpbmdUeXBlKCkpLCAiKSIpOwpAQCAtMjE3LDcgKzIxOCw3IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICB9CiAgICAgaWYgKG5v
ZGUtPmhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkpIHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEm
IHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YUluZGV4KCldOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJpZCIsIHN0b3JhZ2VB
Y2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
c3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlcikuc3RyaW5nKCksICJ9Iik7CisgICAg
ICAgIG91dC5wcmludChjb21tYSwgImlkIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51
bWJlciwgInsiLCBtX2lkZW50aWZpZXJzW3N0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1i
ZXJdLCAifSIpOwogICAgICAgICBvdXQucHJpbnQoIiwgIiwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKTsKICAgICB9CiAgICAgQVNTRVJUKG5vZGUtPmhh
c1ZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPmhhc0xvY2FsKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiREZHQXJndW1lbnRQb3NpdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Fzc2Vt
Ymx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdE
ZXNpcmVkSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCIK
ICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUu
aCIKQEAgLTcyMiw2ICs3MjMsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9vc3JFbnRyeUJ5
dGVjb2RlSW5kZXg7CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbV9tdXN0SGFuZGxlVmFsdWVzOwog
ICAgIERlc2lyZWRXYXRjaHBvaW50cyBtX3dhdGNocG9pbnRzOworICAgIERlc2lyZWRJZGVudGlm
aWVycyBtX2lkZW50aWZpZXJzOwogICAgIAogICAgIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUg
bV9maXhwb2ludFN0YXRlOwogICAgIEdyYXBoRm9ybSBtX2Zvcm07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTQ5MzUxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0Nyw2ICsyNDcsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZm
ZXImIGxpbmtCCiAgICAgY29kZUJsb2NrKCktPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNo
cmluayk7CiAgICAgCiAgICAgbV9ncmFwaC5tX3dhdGNocG9pbnRzLnJlYWxseUFkZCgpOworICAg
IG1fZ3JhcGgubV9pZGVudGlmaWVycy5yZWFsbHlBZGQoKm1fdm0pOwogfQogCiBib29sIEpJVENv
bXBpbGVyOjpjb21waWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDE1ICsyNjcsMTUg
QEAgdm9pZCogREZHX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybgogRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCiAKICNkZWZpbmUgSl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
LCBKU0NlbGwqLCBJZGVudGlmaWVyKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9N
X0FTTSBXVEZfSU5URVJOQUw7IFwKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rp
b24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBS
ZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAogRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikKIAogI2RlZmlu
ZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKiwgUmV0dXJuQWRkcmVzc1B0
cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0VuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9N
X0FTTSBXVEZfSU5URVJOQUw7IFwKIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkkoZnVuY3Rpb24pCiAKICNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotdm9pZCBERkdfT1BFUkFUSU9OIGZ1bmN0aW9uIyNX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgSWRl
bnRpZmllciosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVS
TkFMOyBcCit2b2lkIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRk
cmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKQogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CkBAIC00ODQsNzAgKzQ4NCw3NCBAQCBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKGJhc2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBi
YXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNl
LCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qo
YmFzZVZhbHVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhl
YywgKnByb3BlcnR5TmFtZSwgc2xvdCkpOworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBz
bG90KSk7CiB9CiAKIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShv
cGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAorCisgICAgSWRlbnRpZmllciBp
ZGVudCh2bSwgdWlkKTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5j
b2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7
CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChleGVjLCAqcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwogCiAgICAgaWYgKGFjY2Vzc1R5cGUg
PT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAg
IGRmZ0J1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCAqcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbyk7CisgICAgICAgIGRmZ0J1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVl
LCBpZGVudCwgc2xvdCwgc3R1YkluZm8pOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogCiBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkko
b3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5h
bWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0VuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKKyAg
ICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAg
ICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGJhc2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CiAgICAgCiAg
ICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSkpCi0gICAgICAgIGRmZ0J1aWxkR2V0QnlJRFByb3RvTGlzdChleGVjLCBiYXNlVmFs
dWUsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKKyAgICAgICAgZGZnQnVpbGRHZXRC
eUlEUHJvdG9MaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvKTsKIAog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogSl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7Ci1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZVdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgSWRlbnRp
ZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZVdpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgU3RyaW5nSW1w
bCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0gICAgCisKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5B
ZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHNs
b3QpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xv
dCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSkpIHsKICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAg
ICAgICAgICBkZmdSZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsICpwcm9wZXJ0eU5hbWUs
IHNsb3QsIHN0dWJJbmZvKTsKKyAgICAgICAgICAgIGRmZ1JlcGF0Y2hHZXRCeUlEKGV4ZWMsIGJh
c2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CiAgICAgfQpAQCAtNTU1LDEyICs1NTksMTQgQEAgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25DYWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBmdW5jdGlvbiwgSWRlbnRpZmllciogaWRlbnQpCitFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0
aW9uLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShmdW5jdGlvbihleGVjLCBhc09iamVjdChiYXNlKSwgKmlkZW50KSk7
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCBpZGVudCkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogdmFsdWUpCkBAIC03MzcsNTAgKzc0Myw1NSBA
QCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgcmV0dXJuIGFz
UmVnRXhwT2JqZWN0KGJhc2UpLT50ZXN0KGV4ZWMsIGlucHV0KTsKIH0KICAgICAgICAgCi12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9w
ZXJ0eU5hbWUpCit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBp
ZGVudCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKLSAgICBiYXNl
LT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwgZXhlYywgKnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1
dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3Qp
OwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJ
ZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChmYWxzZSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsICpwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBiYXNl
LT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwgZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lKQordm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlk
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CiAgICAgQVNTRVJUKGJhc2UtPmlzT2Jq
ZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgKnByb3Bl
cnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIGFzT2Jq
ZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lKQordm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1w
bCogdWlkKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIEFTU0VSVChiYXNl
LT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
ICpwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAg
ICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKKyAgICBJZGVudGlmaWVy
IGlkZW50KHZtLCB1aWQpOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KTsKIApAQCAtNzg4LDIzICs3OTksMjQgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRTdHJpYwogICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KHRydWUpOwogICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgKnByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVl
LCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlm
IChzdHViSW5mby5zZWVuKQotICAgICAgICBkZmdSZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFs
dWUsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAgICAgICBk
ZmdSZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywg
Tm90RGlyZWN0KTsKICAgICBlbHNlCiAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwogfQog
CiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJv
cGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CiAKQEAgLTgxMiwyMyArODI0LDI0
IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICBKU1ZhbHVl
IGJhc2VWYWx1ZShiYXNlKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CiAgICAg
Ci0gICAgYmFzZVZhbHVlLnB1dChleGVjLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cisg
ICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlm
IChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5
cGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAg
ICAgIGRmZ1JlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xv
dCwgc3R1YkluZm8sIE5vdERpcmVjdCk7CisgICAgICAgIGRmZ1JlcGF0Y2hQdXRCeUlEKGV4ZWMs
IGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwogICAgIGVsc2UK
ICAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CiB9CiAKIFZfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRy
ZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIApAQCAtODM2LDIzICs4NDksMjQgQEAgdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KHRydWUpOwogICAgIAogICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVj
dChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1
ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNz
VHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwg
KnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CisgICAgICAgIGRmZ1JlcGF0
Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKICAg
ICBlbHNlCiAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwogfQogCiBWX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVy
dHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJl
c3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1
YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CiAKQEAgLTg2MCwyMyArODc0
LDI0IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CiAgICAgCiAgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0
KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+
dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICBkZmdSZXBhdGNoUHV0
QnlJRChleGVjLCBiYXNlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsK
KyAgICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBEaXJlY3QpOwogICAgIGVsc2UKICAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CiB9
CiAKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9u
UHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3Bl
cnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhy
ZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIApAQCAtODg0LDIwICs4OTksMjEgQEAg
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlKGJhc2UpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOwogICAgIAotICAg
IGJhc2VWYWx1ZS5wdXQoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGJh
c2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNj
ZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGRmZ0J1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFz
ZVZhbHVlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKKyAgICBk
ZmdCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBOb3REaXJlY3QpOwogfQogCiBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRM
aXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBp
ZGVudCh2bSwgdWlkKTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5j
b2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7
CiAKQEAgLTkwNSwyMCArOTIxLDIxIEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkTm9uU3QKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChmYWxzZSk7CiAgICAgCi0gICAgYmFzZVZhbHVlLnB1dChleGVjLCAqcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgZGZn
QnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0
dWJJbmZvLCBOb3REaXJlY3QpOworICAgIGRmZ0J1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZh
bHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7CiB9CiAKIFZfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5
TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKICAgICAKQEAgLTkyNiwyMCArOTQz
LDIxIEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKICAgICAKICAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3Qo
KSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52
bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgZGZnQnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlLCAqcHJvcGVydHlO
YW1lLCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKKyAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4
ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKIH0KIAogVl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0QnVpbGRMaXN0KTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciog
cHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVp
ZCk7CiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCkt
PmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogCkBAIC05NDcs
MTIgKzk2NSwxMiBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOwogICAgIAogICAgIEFTU0VSVChiYXNlLT5p
c09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksICpw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0
KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5
cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsICpw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworICAgIGRmZ0J1aWxkUHV0QnlJ
ZExpc3QoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwogfQogCiBz
aXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCkBA
IC0xMjExLDMwICsxMjI5LDMxIEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlH
bG9iYWwKICAgICB3YXRjaHBvaW50U2V0LT5ub3RpZnlXcml0ZSgpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQorRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlKEV4ZWNTdGF0ZSogZXhl
YywgU3RyaW5nSW1wbCogdWlkLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucykKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmUo
ZXhlYywgKnByb3BlcnR5TmFtZSwgb3BlcmF0aW9ucykpOworICAgIElkZW50aWZpZXIgaWRlbnQo
dm0sIHVpZCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlKGV4
ZWMsIGlkZW50LCBvcGVyYXRpb25zKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUmVzb2x2ZUJhc2UoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyKiBwcm9w
ZXJ0eU5hbWUsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRp
b24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlc29sdmVCYXNlKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogdWlkLCBSZXNv
bHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VP
cGVyYXRpb25zKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgKnByb3BlcnR5TmFtZSwgZmFsc2UsIG9w
ZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbnMpKTsKKyAgICBJZGVudGlmaWVyIGlkZW50KHZt
LCB1aWQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2ZUJhc2Uo
ZXhlYywgaWRlbnQsIGZhbHNlLCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb25zKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJp
Y3RQdXQoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJlc29sdmVP
cGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJh
dGlvbnMpCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNl
U3RyaWN0UHV0KEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogdWlkLCBSZXNvbHZlT3BlcmF0
aW9ucyogb3BlcmF0aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb25z
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNT
Y29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgKnByb3BlcnR5TmFtZSwgdHJ1ZSwgb3BlcmF0aW9ucywg
cHV0VG9CYXNlT3BlcmF0aW9ucykpOworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlQmFzZShleGVjLCBpZGVu
dCwgdHJ1ZSwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9ucykpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVHbG9iYWwoRXhlY1N0YXRlKiBl
eGVjLCBSZXNvbHZlT3BlcmF0aW9uKiByZXNvbHZlT3BlcmF0aW9uLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVHbG9iYWwoRXhlY1N0YXRlKiBleGVjLCBSZXNv
bHZlT3BlcmF0aW9uKiByZXNvbHZlT3BlcmF0aW9uLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMjQyLDcgKzEyNjEs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgVU5VU0VE
X1BBUkFNKHJlc29sdmVPcGVyYXRpb24pOwogICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwogICAgIEFTU0VSVChyZXNvbHZlT3BlcmF0aW9uLT5tX29wZXJhdGlvbiA9PSBSZXNvbHZlT3Bl
cmF0aW9uOjpHZXRBbmRSZXR1cm5HbG9iYWxQcm9wZXJ0eSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKGV4ZWMsICpwcm9wZXJ0eU5hbWUsIGdsb2Jh
bE9iamVjdCwgcmVzb2x2ZU9wZXJhdGlvbikpOworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVp
ZCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKGV4
ZWMsIGlkZW50LCBnbG9iYWxPYmplY3QsIHJlc29sdmVPcGVyYXRpb24pKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwyMyArNTUsMjMg
QEAgZXh0ZXJuICJDIiB7CiAgICAgUzogc2l6ZV90CiAgICAgWjogaW50MzJfdAogICAgIEQ6IGRv
dWJsZQotICAgIEk6IElkZW50aWZpZXIqCisgICAgSTogU3RyaW5nSW1wbCoKICAgICBHOiBHbG9i
YWxSZXNvbHZlSW5mbyoKICovCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
KCpKX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VBKShFeGVjU3RhdGUqLCBKU0FycmF5Kik7
CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
QVopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIElkZW50aWZpZXIqKTsKK3R5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDSSkoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBF
bmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwotdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUdyaUpzZ0kp
KEV4ZWNTdGF0ZSosIFJlc29sdmVPcGVyYXRpb24qLCBKU0dsb2JhbE9iamVjdCosIElkZW50aWZp
ZXIqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0
aW9uX0VJKShFeGVjU3RhdGUqLCBJZGVudGlmaWVyKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSVJvKShFeGVjU3RhdGUqLCBJZGVudGlm
aWVyKiwgUmVzb2x2ZU9wZXJhdGlvbnMqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VJUm9QdGJvKShFeGVjU3RhdGUqLCBJZGVudGlmaWVy
KiwgUmVzb2x2ZU9wZXJhdGlvbnMqLCBQdXRUb0Jhc2VPcGVyYXRpb24qKTsKK3R5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VHcmlKc2dJKShFeGVj
U3RhdGUqLCBSZXNvbHZlT3BlcmF0aW9uKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJpbmdJbXBsKik7
Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
SSkoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUlSbykoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCos
IFJlc29sdmVPcGVyYXRpb25zKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FSVJvUHRibykoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCosIFJl
c29sdmVPcGVyYXRpb25zKiwgUHV0VG9CYXNlT3BlcmF0aW9uKik7CiB0eXBlZGVmIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRUpBKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNBcnJheSopOwot
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUpJ
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciopOwordHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUpJKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRUpQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9p
ZCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRp
b25fRVApKEV4ZWNTdGF0ZSosIHZvaWQqKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCB0eXBlZGVmIHZv
aWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZH
T3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZv
aWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9u
X0VKQ0kpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBJZGVudGlmaWVyKik7
Cit0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKQ0kpKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CiB0eXBlZGVmIHZv
aWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lk
IERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSlBQKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFU
SU9OICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVu
Y29kZWRKU1ZhbHVlKTsKQEAgLTEzNCwxNyArMTM0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uVmEKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbENlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0YXRlKiwg
SlNBcnJheSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRp
ZmllciopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmll
ciopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlJZFByb3RvQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlm
aWVyKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIElkZW50aWZpZXIq
KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNh
bGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmMsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmlu
Z0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5SWRQcm90b0J1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25D
YWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlHbG9iYWxW
YXJXcml0ZShXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmUoRXhlY1N0YXRlKiwgSWRl
bnRpZmllciosIFJlc29sdmVPcGVyYXRpb25zKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZShFeGVjU3RhdGUqLCBJZGVudGlm
aWVyKiwgUmVzb2x2ZU9wZXJhdGlvbnMqLCBQdXRUb0Jhc2VPcGVyYXRpb24qKSBXVEZfSU5URVJO
QUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlU3Ry
aWN0UHV0KEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRv
QmFzZU9wZXJhdGlvbiopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUqLCBSZXNvbHZlT3BlcmF0aW9uKiwg
SlNHbG9iYWxPYmplY3QqLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwq
LCBSZXNvbHZlT3BlcmF0aW9ucyopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJhc2UoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCosIFJl
c29sdmVPcGVyYXRpb25zKiwgUHV0VG9CYXNlT3BlcmF0aW9uKikgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZVN0cmljdFB1dChF
eGVjU3RhdGUqLCBTdHJpbmdJbXBsKiwgUmVzb2x2ZU9wZXJhdGlvbnMqLCBQdXRUb0Jhc2VPcGVy
YXRpb24qKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblJlc29sdmVHbG9iYWwoRXhlY1N0YXRlKiwgUmVzb2x2ZU9wZXJhdGlvbiosIEpTR2xvYmFs
T2JqZWN0KiwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkgV1RGX0lOVEVSTkFMOwogY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBzaXplX3QsIHNpemVfdCkgV1RGX0lOVEVSTkFMOwpAQCAtMTY0LDE4ICsxNjQsMTggQEAg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RG
X0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBv
cEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUq
LCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFM
Owotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZp
ZXIqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVu
dGlmaWVyKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZp
ZXIqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVS
TkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWls
ZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5B
TDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWls
ZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsK
K3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRM
aXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogLy8gVGhlc2UgY29tcGFyaXNvbnMgcmV0dXJu
IGEgYm9vbGVhbiB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4
dGVuZGVkIHRvIGZpbGwgdGhlIHJlZ2lzdGVyLgogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7
CiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZf
SU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENv
ZGVPCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlQ2hlY2subV9qdW1wLCB0aGlzLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsCiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFn
R1BSLCByZXN1bHRQYXlsb2FkR1BSKSwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQz
Ml90PihKU1ZhbHVlOjpDZWxsVGFnKSwgYmFzZVBheWxvYWRHUFIsCi0gICAgICAgICAgICAgICAg
aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgICAgICAgICAgaWRlbnRpZmll
clVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChzdHJ1Y3R1cmVDaGVjay5tX2p1bXApOwpAQCAtMjk1LDE0ICsyOTUsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLAogICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksCiAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZyksIGJhc2VQYXlsb2FkR1BS
LAotICAgICAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFzbG93UGF0aFRhcmdldC5pc1NldCgpKSB7CiAgICAg
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVDaGVjay5tX2p1bXAsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwKICAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBiYXNl
VGFnR1BST3JOb25lLCBiYXNlUGF5bG9hZEdQUiwKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVy
KGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50
aWZpZXJOdW1iZXIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVj
dHVyZUNoZWNrLm1fanVtcCk7CkBAIC0zMTAsNyArMzEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENh
bGwoCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsCiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQ
YXlsb2FkR1BSKSwgYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIsCi0gICAgICAgICAg
ICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgICAgICAgICAgaWRl
bnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgbV9q
aXQuYWRkUHJvcGVydHlBY2Nlc3MoCkBAIC0zNTEsMTQgKzM1MSwxNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgaWYgKCFzbG93UGF0aFRhcmdldC5pc1Nl
dCgpKSB7CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgc3Ry
dWN0dXJlQ2hlY2subV9qdW1wLCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBOb1Jlc3VsdCwgdmFsdWVU
YWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwKLSAgICAgICAgICAgIGJhc2VQYXlsb2FkR1BSLCBpZGVu
dGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgICAgIGJhc2VQYXlsb2FkR1BSLCBp
ZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICB9IGVsc2UgewogICAgICAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KHN0cnVjdHVyZUNoZWNrLm1fanVtcCk7CiAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1Bh
dGhUYXJnZXQpOwogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3B0aW1pemVkQ2FsbCwgTm9SZXN1bHQsIHZhbHVlVGFnR1BSLCB2
YWx1ZVBheWxvYWRHUFIsCi0gICAgICAgICAgICBiYXNlUGF5bG9hZEdQUiwgaWRlbnRpZmllcihp
ZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgICAgICBiYXNlUGF5bG9hZEdQUiwgaWRlbnRpZmll
clVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgfQogICAgIFJlZ2lzdGVyU2V0IGN1cnJlbnRs
eVVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzKCk7CiAgICAgY3VycmVudGx5VXNlZFJlZ2lz
dGVycy5jbGVhcihzY3JhdGNoR1BSKTsKQEAgLTQyMTUsNyArNDIxNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAgICAgICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRTZXQgPQogICAgICAgICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgpLT5nZXQoCi0gICAgICAgICAgICAgICAg
aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSktPmltcGwoKSkud2F0
Y2hwb2ludFNldCgpOworICAgICAgICAgICAgICAgIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRp
Zmllck51bWJlckZvckNoZWNrKCkpLT5pbXBsKCkpLndhdGNocG9pbnRTZXQoKTsKICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCkBAIC00MjQzLDcgKzQyNDMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgIGNhc2UgR2xv
YmFsVmFyV2F0Y2hwb2ludDogewogICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX2ppdC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKLSAg
ICAgICAgICAgIGlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkpLT5p
bXBsKCkpLndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgIGlkZW50aWZpZXJVSUQobm9kZS0+
aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkpLT5pbXBsKCkpLndhdGNocG9pbnRTZXQoKTsKICAg
ICAgICAgbV9qaXQuYWRkTGF6aWx5KHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLCBzZXQpOwogICAg
ICAgICAKICNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCkBAIC00NDY0LDcgKzQ0NjQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlc3Vs
dCByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlz
KTsKICAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1f
cmVzb2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUtPnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCld
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmUsIHJlc3VsdFRhZy5ncHIo
KSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgaWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIp
LCBkYXRhLnJlc29sdmVPcGVyYXRpb25zKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25SZXNvbHZlLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIGlkZW50aWZp
ZXJVSUQoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSwgZGF0YS5yZXNvbHZlT3BlcmF0aW9ucyk7CiAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigp
LCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDQ3NCw3ICs0NDc0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZXN1bHQg
cmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRUYWcodGhpcyk7
CiAgICAgICAgIFJlc29sdmVPcGVyYXRpb25EYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jl
c29sdmVPcGVyYXRpb25zRGF0YVtub2RlLT5yZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlQmFzZSwgcmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBpZGVudGlmaWVyKGRhdGEuaWRlbnRpZmllck51bWJl
ciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMsIGRhdGEucHV0VG9CYXNlT3BlcmF0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlQmFzZSwgcmVzdWx0VGFnLmdwcigp
LCByZXN1bHRQYXlsb2FkLmdwcigpLCBpZGVudGlmaWVyVUlEKGRhdGEuaWRlbnRpZmllck51bWJl
ciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMsIGRhdGEucHV0VG9CYXNlT3BlcmF0aW9uKTsKICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCks
IG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDg0LDcgKzQ0ODQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsK
ICAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVz
b2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUtPnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCldOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0LCByZXN1
bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIGlkZW50aWZpZXIoZGF0YS5pZGVudGlm
aWVyTnVtYmVyKSwgZGF0YS5yZXNvbHZlT3BlcmF0aW9ucywgZGF0YS5wdXRUb0Jhc2VPcGVyYXRp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0
LCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIGlkZW50aWZpZXJVSUQoZGF0
YS5pZGVudGlmaWVyTnVtYmVyKSwgZGF0YS5yZXNvbHZlT3BlcmF0aW9ucywgZGF0YS5wdXRUb0Jh
c2VPcGVyYXRpb24pOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ1Mjcs
NyArNDUyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzTm90TWF0
Y2gsIHRoaXMsIG9wZXJhdGlvblJlc29sdmVHbG9iYWwsCiAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgcmVzb2x2ZUluZm9HUFIsIGds
b2JhbE9iamVjdEdQUiwKLSAgICAgICAgICAgICAgICAmbV9qaXQuY29kZUJsb2NrKCktPmlkZW50
aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSkpOworICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXJVSUQoZGF0YS5pZGVudGlmaWVyTnVtYmVyKSkpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NSwxNCArMjU1LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICBpZiAoIXNsb3dQ
YXRoVGFyZ2V0LmlzU2V0KCkpIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAg
ICAgICAgICAgICBzdHJ1Y3R1cmVDaGVjay5tX2p1bXAsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0R1BSLCBiYXNlR1BSLAotICAgICAgICAgICAgaWRlbnRpZmllcihpZGVu
dGlmaWVyTnVtYmVyKSwgc3BpbGxNb2RlKTsKKyAgICAgICAgICAgIGlkZW50aWZpZXJVSUQoaWRl
bnRpZmllck51bWJlciksIHNwaWxsTW9kZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzdHJ1
Y3R1cmVDaGVjay5tX2p1bXApOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFy
Z2V0KTsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0R1BSLCBiYXNlR1BS
LAotICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSwgc3BpbGxNb2RlKTsK
KyAgICAgICAgICAgIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlciksIHNwaWxsTW9kZSk7
CiAgICAgfQogICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKAogICAgICAgICBQcm9wZXJ0eUFj
Y2Vzc1JlY29yZCgKQEAgLTMwMywxNCArMzAzLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNh
Y2hlZFB1dEJ5SWQoQ29kZU8KICAgICBpZiAoIXNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpIHsKICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzdHJ1Y3R1cmVDaGVj
ay5tX2p1bXAsIHRoaXMsIG9wdGltaXplZENhbGwsIE5vUmVzdWx0LCB2YWx1ZUdQUiwgYmFzZUdQ
UiwKLSAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgICAgICAg
ICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChzdHJ1Y3R1cmVDaGVjay5tX2p1bXApOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHNs
b3dQYXRoVGFyZ2V0KTsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wdGltaXplZENhbGwsIE5vUmVzdWx0LCB2YWx1ZUdQUiwg
YmFzZUdQUiwKLSAgICAgICAgICAgIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAg
ICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgfQogICAgIFJl
Z2lzdGVyU2V0IGN1cnJlbnRseVVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzKCk7CiAgICAg
Y3VycmVudGx5VXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoR1BSKTsKQEAgLTQxMTEsNyArNDEx
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
CiAgICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQgPQogICAgICAgICAgICAgbV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgpLT5nZXQo
Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hl
Y2soKSktPmltcGwoKSkud2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkpKS53YXRjaHBvaW50U2V0KCk7
CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KApAQCAtNDEzNCw3ICs0MTM0LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAg
ICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6IHsKICAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0
ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgp
LT5nZXQoCi0gICAgICAgICAgICBpZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXJGb3JD
aGVjaygpKS0+aW1wbCgpKS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICBpZGVudGlmaWVy
VUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpKSkud2F0Y2hwb2ludFNldCgpOwog
ICAgICAgICBtX2ppdC5hZGRMYXppbHkoc3BlY3VsYXRpb25XYXRjaHBvaW50KCksIHNldCk7CiAg
ICAgICAgIAogI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKQEAgLTQzNTIsNyArNDM1Miw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgUmVz
b2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVzb2x2ZU9wZXJhdGlv
bnNEYXRhW25vZGUtPnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCldOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmUsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllcihkYXRh
LmlkZW50aWZpZXJOdW1iZXIpLCBkYXRhLnJlc29sdmVPcGVyYXRpb25zKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlLCByZXN1bHQuZ3ByKCksIGlkZW50aWZpZXJVSUQo
ZGF0YS5pZGVudGlmaWVyTnVtYmVyKSwgZGF0YS5yZXNvbHZlT3BlcmF0aW9ucyk7CiAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtNDM2MSw3ICs0MzYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBHUFJSZXN1bHQgcmVz
dWx0KHRoaXMpOwogICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1faml0Lmdy
YXBoKCkubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS0+cmVzb2x2ZU9wZXJhdGlvbnNEYXRh
SW5kZXgoKV07Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJhc2UsIHJl
c3VsdC5ncHIoKSwgaWRlbnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIpLCBkYXRhLnJlc29s
dmVPcGVyYXRpb25zLCBkYXRhLnB1dFRvQmFzZU9wZXJhdGlvbik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJhc2UsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllclVJRChk
YXRhLmlkZW50aWZpZXJOdW1iZXIpLCBkYXRhLnJlc29sdmVPcGVyYXRpb25zLCBkYXRhLnB1dFRv
QmFzZU9wZXJhdGlvbik7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDM3MCw3ICs0MzcwLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OwogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBSZXNvbHZlT3BlcmF0
aW9uRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9k
ZS0+cmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpY3RQdXQsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllcihk
YXRhLmlkZW50aWZpZXJOdW1iZXIpLCBkYXRhLnJlc29sdmVPcGVyYXRpb25zLCBkYXRhLnB1dFRv
QmFzZU9wZXJhdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJh
c2VTdHJpY3RQdXQsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllclVJRChkYXRhLmlkZW50aWZpZXJO
dW1iZXIpLCBkYXRhLnJlc29sdmVPcGVyYXRpb25zLCBkYXRhLnB1dFRvQmFzZU9wZXJhdGlvbik7
CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtNDQwOSw3ICs0NDA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZXNEb250TWF0Y2gsIHRoaXMsIG9wZXJhdGlvblJlc29sdmVHbG9iYWwsCiAg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgZ2xvYmFsT2JqZWN0R1BS
LAotICAgICAgICAgICAgICAgICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihkYXRhLmlk
ZW50aWZpZXJOdW1iZXIpKSk7CisgICAgICAgICAgICAgICAgaWRlbnRpZmllclVJRChkYXRhLmlk
ZW50aWZpZXJOdW1iZXIpKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDkg
KzU4MCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
LmlzTnVsbCgpOwogICAgIH0KIAotICAgIElkZW50aWZpZXIqIGlkZW50aWZpZXIodW5zaWduZWQg
aW5kZXgpCisgICAgU3RyaW5nSW1wbCogaWRlbnRpZmllclVJRCh1bnNpZ25lZCBpbmRleCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiAmbV9qaXQuY29kZUJsb2NrKCktPmlkZW50aWZpZXIoaW5kZXgp
OworICAgICAgICByZXR1cm4gbV9qaXQuZ3JhcGgoKS5tX2lkZW50aWZpZXJzW2luZGV4XTsKICAg
ICB9CiAKICAgICAvLyBTcGlsbCBhbGwgVmlydHVhbFJlZ2lzdGVycyBiYWNrIHRvIHRoZSBKU1N0
YWNrLgpAQCAtOTU3LDI0ICs5NTcsMjQgQEAgcHVibGljOgogICAgICAgICBtX2ppdC56ZXJvRXh0
ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0
dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUdyaUpzZ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIElkZW50aWZpZXIqIGlkZW50aWZpZXIpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FR3JpSnNnSSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQog
ICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSWRlbnRpZmllciogaWRl
bnRpZmllcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsK
LSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
aWRlbnRpZmllcikpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJUm8gb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBJZGVudGlmaWVyKiBpZGVudGlmaWVyLCBSZXNvbHZlT3BlcmF0aW9ucyog
b3BlcmF0aW9ucykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3Bl
cmF0aW9uX0VJUm8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJpbmdJbXBsKiB1aWQsIFJl
c29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQogICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllciksIFRydXN0ZWRJ
bW1QdHIob3BlcmF0aW9ucykpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbVB0cih1aWQpLCBUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbnMpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VJUm9QdGJvIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSWRlbnRp
ZmllciogaWRlbnRpZmllciwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFz
ZU9wZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9ucykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJUm9QdGJvIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgU3RyaW5nSW1wbCogdWlkLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucywgUHV0
VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb25zKQogICAgIHsKLSAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllciks
IFRydXN0ZWRJbW1QdHIob3BlcmF0aW9ucyksIFRydXN0ZWRJbW1QdHIocHV0VG9CYXNlT3BlcmF0
aW9ucykpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cih1aWQpLCBUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbnMpLCBUcnVzdGVkSW1tUHRyKHB1
dFRvQmFzZU9wZXJhdGlvbnMpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCkBAIC0xMDMyLDE0ICsxMDMyLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJ
bW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIElkZW50aWZpZXIqIGlkZW50aWZpZXIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKLSAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIo
aWRlbnRpZmllcikpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpJIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIFN0cmluZ0ltcGwqIHVpZCkKICAg
ICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVz
dGVkSW1tUHRyKGlkZW50aWZpZXIpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
REEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCkBA
IC0xMjAyLDkgKzEyMDIsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSkNJ
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBJZGVudGlmaWVyKiBpZGVudGlm
aWVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25f
RUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlk
KQogICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAg
ICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9F
SkpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKQEAg
LTEzNTUsOSArMTM1NSw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUdyaUpzZ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBJZGVu
dGlmaWVyKiBpZGVudGlmaWVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUdyaUpzZ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1
aWQpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCkBAIC0xMzY1LDkg
KzEzNjUsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIElkZW50aWZpZXIq
IGlkZW50aWZpZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7CisgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCkBAIC0xNDMwLDE5ICsxNDMw
LDE5IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciogaWRl
bnRpZmllcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBHUFJSZWcgYXJnMSwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKLSAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikp
OworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3Rl
ZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSSBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpJIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcx
VGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7Ci0gICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7CisgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwg
SWRlbnRpZmllciogaWRlbnRpZmllcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgU3Ry
aW5nSW1wbCogdWlkKQogICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBUcnVzdGVkSW1tMzIoYXJn
MVRhZyksIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIFRy
dXN0ZWRJbW0zMihhcmcxVGFnKSwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCkBAIC0xNTcxLDE1
ICsxNTcxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUlSbyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBJZGVudGlmaWVyKiBpZGVudGlmaWVyLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucykK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJUm8g
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RyaW5n
SW1wbCogdWlkLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucykKICAgICB7Ci0gICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGlkZW50aWZp
ZXIpLCBUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbnMpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIodWlkKSwgVHJ1c3RlZEltbVB0cihvcGVy
YXRpb25zKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJUm9QdGJv
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIElkZW50
aWZpZXIqIGlkZW50aWZpZXIsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jh
c2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSVJvUHRibyBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQsIFJlc29sdmVP
cGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJh
dGlvbnMpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSwgVHJ1c3RlZEltbVB0cihvcGVyYXRpb25zKSwgVHJ1
c3RlZEltbVB0cihwdXRUb0Jhc2VPcGVyYXRpb25zKSk7CisgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCksIFRydXN0ZWRJbW1QdHIob3Bl
cmF0aW9ucyksIFRydXN0ZWRJbW1QdHIocHV0VG9CYXNlT3BlcmF0aW9ucykpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCkBAIC0xNjEzLDkgKzE2MTMsOSBAQCBw
dWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMy
QklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cihw
b2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9E
RkdPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBh
eWxvYWQsIEdQUlJlZyBhcmcyLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBs
KiB1aWQpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
RUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIsIFRydXN0ZWRJ
bW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIsIFRy
dXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9ERkdPcGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQ
YXlsb2FkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIu
aAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgfTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGlu
dCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+ID4sIElk
ZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZpZXJNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZ0ltcGwqLCBpbnQsIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFN0
cmluZ0ltcGwqPiwgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cz4gQ29uY3VycmVudElkZW50
aWZpZXJNYXA7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIEhh
c2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgSWRlbnRpZmllclRhYmxlOjphZGQoVSB2YWx1
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDEyICszMjEsMTIgQEAgdm9pZCBTdHJ1Y3R1
cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdAogICAgIGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmNs
ZWFyKCk7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFBy
b3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5n
SW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFBy
b3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKIAotICAgIGlmIChT
dHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFi
bGUuZ2V0KHByb3BlcnR5TmFtZS51aWQoKSwgYXR0cmlidXRlcykpIHsKKyAgICBpZiAoU3RydWN0
dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdl
dCh1aWQsIGF0dHJpYnV0ZXMpKSB7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZUluUHJl
dmlvdXMgPSBleGlzdGluZ1RyYW5zaXRpb24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0
KCk7CiAgICAgICAgIGlmIChzcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyAmJiBzcGVjaWZpY1ZhbHVl
SW5QcmV2aW91cyAhPSBzcGVjaWZpY1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0z
MzgsNiArMzM4LDExIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQK
ICAgICByZXR1cm4gMDsKIH0KIAorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK3sKKyAgICByZXR1cm4gYWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQo
KSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KTsKK30KKwogYm9vbCBTdHJ1Y3R1
cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdAog
ewogICAgIGZvciAoY29uc3QgU3RydWN0dXJlKiBjdXJyZW50ID0gdGhpczsgOykgewpAQCAtNzcx
LDcgKzc3Niw3IEBAIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGEKICAg
ICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9m
ZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwogfQogCi1Qcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVu
c2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQogewogICAgIC8vIFdl
IGNhbid0IGhhbmRsZSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJpZXMgYmVjYXVzZSB3ZSBjYW4ndCBo
YW5kbGUgY29uY3VycmVudCByZW1vdmUncwogICAgIC8vIGZyb20gdGhlIHByb3BlcnR5IG1hcHMu
CkBAIC03ODQsNyArNzg5LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJy
ZW50bAogICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVy
ZXMsIHN0cnVjdHVyZSwgdGFibGUpOwogICAgIAogICAgIGlmICh0YWJsZSkgewotICAgICAgICBQ
cm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5maW5kKHByb3BlcnR5TmFtZS51aWQoKSku
Zmlyc3Q7CisgICAgICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gdGFibGUtPmZpbmQodWlk
KS5maXJzdDsKICAgICAgICAgaWYgKGVudHJ5KSB7CiAgICAgICAgICAgICBhdHRyaWJ1dGVzID0g
ZW50cnktPmF0dHJpYnV0ZXM7CiAgICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gZW50cnktPnNw
ZWNpZmljVmFsdWUuZ2V0KCk7CkBAIC03OTcsNyArODAyLDcgQEAgUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjpnZXRDb25jdXJyZW50bAogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVj
dHVyZXMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07
Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkgIT0gcHJvcGVy
dHlOYW1lLnVpZCgpKQorICAgICAgICBpZiAoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdl
dCgpICE9IHVpZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgYXR0
cmlidXRlcyA9IHN0cnVjdHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91czsKQEAgLTk1NiwxMyAr
OTYxLDEzIEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAg
ICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wg
U3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5
SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICAvLyBOb3Rl
LCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB0d28ga2luZHMgb2YgcGxhY2VzOiAoMSkgYXNz
ZXJ0aW9ucyBhbmQgKDIpCiAgICAgLy8gdGhlIGNvbXBpbGF0aW9uIHRocmVhZC4gQXMgc3VjaCwg
aXQgZG9lcyB0aGluZ3Mgc29tZXdoYXQgY2FyZWZ1bGx5IHRvIGVuc3VyZQogICAgIC8vIHRocmVh
ZCBzYWZldHkuIEN1cnJlbnRseSB0aGF0IG9ubHkgYWZmZWN0cyB0aGUgd2F5IHdlIGRvIFN0cnVj
dHVyZTo6Z2V0KCkuCiAgICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7CisgICAgdW5zaWduZWQgaSA9IHRvVUludDMyRnJvbVN0cmluZ0ltcGwodWlkKTsKICAgICBp
ZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBhbnlPYmpl
Y3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCk7CiAgICAgCkBAIC05NzUsNyAr
OTgwLDcgQEAgYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAgICAg
ICAKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICAgICAgSlNDZWxsKiBzcGVjaWZp
Y1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXRDb25j
dXJyZW50bHkodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldENvbmN1cnJlbnRseSh2
bSwgdWlkLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKCFKU0M6Omlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKQEAg
LTk4Niw2ICs5OTEsMTEgQEAgYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJj
ZQogICAgIH0KIH0KIAorYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0
U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJu
IHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lLnVpZCgp
KTsKK30KKwogI2lmIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwogCiB2b2lkIFByb3Bl
cnR5VGFibGU6OmNoZWNrQ29uc2lzdGVuY3koKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwq
IHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0Jik7CisgICAgc3RhdGljIFN0cnVjdHVyZSog
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqLCBTdHJp
bmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwg
UHJvcGVydHlPZmZzZXQmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJl
KiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQ
cm9wZXJ0eU9mZnNldCYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVU
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUpOwpAQCAtMTYxLDYg
KzE2Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAogICAgIC8vIFdpbGwganVzdCB0aGUgcHJvdG90eXBl
IGNoYWluIGludGVyY2VwdCB0aGlzIHByb3BlcnR5IGFjY2Vzcz8KKyAgICBib29sIHByb3RvdHlw
ZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgYm9v
bCBwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9wZXJ0eU5hbWUpOwog
ICAgICAgICAKICAgICBib29sIHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuICEhbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQpAQCAtMjQxLDggKzI0
Myw4IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZN
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNW
YWx1ZSk7CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBQcm9wZXJ0
eU5hbWUpOwotICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFByb3BlcnR5
TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAg
IFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCk7Cisg
ICAgUHJvcGVydHlPZmZzZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCogdWlkLCB1
bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CiAKICAgICBib29s
IGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0dldHRlclNl
dHRlclByb3BlcnRpZXM7IH0KICAgICBib29sIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSBjb25zdCB7IHJldHVybiBtX2hhc1JlYWRPbmx5T3JHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG87IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE0OTM1
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtODAsMTIgKzgwLDEyIEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmdldChWTSYKICAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52
YWxpZE9mZnNldDsKIH0KICAgICAKLWlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6Omdl
dENvbmN1cnJlbnRseShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitpbmxpbmUg
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mIHZtLCBTdHJpbmdJ
bXBsKiB1aWQpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxs
KiBzcGVjaWZpY1ZhbHVlSWdub3JlZDsKICAgICByZXR1cm4gZ2V0Q29uY3VycmVudGx5KAotICAg
ICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUln
bm9yZWQpOworICAgICAgICB2bSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1
ZUlnbm9yZWQpOwogfQogCiBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9QcmludFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJp
bnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxNDkzNTEpCisrKyBTb3VyY2UvV1RGL3d0Zi9QcmludFN0
cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDExIEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBjb24KICAgICBvdXQucHJpbnQoc3RyaW5nLnV0ZjgoKSk7
CiB9CiAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBTdHJpbmdJ
bXBsKiBzdHJpbmcpCit7CisgICAgb3V0LnByaW50KHN0cmluZy0+dXRmOCgpKTsKK30KKwogdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGJvb2wgdmFsdWUpCiB7CiAgICAgaWYg
KHZhbHVlKQpJbmRleDogU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCShyZXZpc2lvbiAxNDkzNTEpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
IG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBDU3RyaW5nOwogY2xhc3MgU3RyaW5nOworY2xhc3Mg
U3RyaW5nSW1wbDsKIAogY2xhc3MgUHJpbnRTdHJlYW0gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOyBXVEZfTUFLRV9OT05DT1BZQUJMRShQcmludFN0cmVhbSk7CkBAIC0yMTEsOSArMjEy
LDExIEBAIHB1YmxpYzoKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBjb25zdCBjaGFyKik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgY29uc3QgQ1N0cmluZyYpOwogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGNvbnN0IFN0cmluZyYpOworV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGNvbnN0IFN0cmlu
Z0ltcGwqKTsKIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY2hh
ciogdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPih2
YWx1ZSkpOyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENT
dHJpbmcmIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBDU3Ry
aW5nJj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBTdHJpbmcmIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25z
dCBTdHJpbmcmPih2YWx1ZSkpOyB9CitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFN0cmluZ0ltcGwqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNf
Y2FzdDxjb25zdCBTdHJpbmdJbXBsKj4odmFsdWUpKTsgfQogV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGJvb2wpOwogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGludCk7CiBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgdW5zaWduZWQpOwpJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNp
bmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUg
PHd0Zi9Db21waWxhdGlvblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4K
QEAgLTU3OSwxOSArNTgwLDI3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBleGlzdGlu
Z0hhc2goKTsKICAgICAgICAgcmV0dXJuIGhhc2hTbG93Q2FzZSgpOwogICAgIH0KLQorICAgIAog
ICAgIGlubGluZSBib29sIGhhc09uZVJlZigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9yZWZDb3VudCA9PSBzX3JlZkNvdW50SW5jcmVtZW50OwogICAgIH0KKyAgICAKKyAgICAvLyBU
aGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIGFzc2VydGlvbnMuCisgICAgaW5saW5lIGJvb2wgaGFz
QXRMZWFzdE9uZVJlZigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX3JlZkNvdW50
OworICAgIH0KIAogICAgIGlubGluZSB2b2lkIHJlZigpCiAgICAgeworICAgICAgICBBU1NFUlQo
IWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgICAgIG1fcmVmQ291bnQgKz0gc19yZWZDb3Vu
dEluY3JlbWVudDsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBkZXJlZigpCiAgICAgeworICAg
ICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgICAgIGlmIChtX3JlZkNv
dW50ID09IHNfcmVmQ291bnRJbmNyZW1lbnQpIHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwog
ICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200151</attachid>
            <date>2013-04-30 14:52:59 -0700</date>
            <delta_ts>2013-04-30 15:03:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>178981</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5NDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBA
QAorMjAxMy0wNC0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyB0cmllcyB0byByZWYvZGVyZWYgU3RyaW5nSW1wbHMgaW4gYSB0b24g
b2YgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTUzMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIFN0cmluZyBvdmVyIGFueSBjb2RlIHRyYW5zaXRpdmVseSBjYWxsZWQgZnJvbSBE
RkcgY29tcGlsYXRpb24gdG8gdXNlCisgICAgICAgIFN0cmluZ0ltcGwqIGRpcmVjdGx5IGluc3Rl
YWQgb2YgU3RyaW5nLCBJZGVudGlmaWVyLCBvciBQcm9wZXJ0eU5hbWUuIEkgdXNlCisgICAgICAg
IHRoZSBjb252ZW50aW9uIG9mIHBhc3NpbmcgIlN0cmluZ0ltcGwqIHVpZCIgaW5zdGVhZCBvZiBh
biBJZGVudGlmaWVyIG9yCisgICAgICAgIFByb3BlcnR5TmFtZS4KKyAgICAgICAgCisgICAgICAg
IFN3aXRjaCBvdmVyIGFueSBjb2RlIHRyYW5zaXRpdmVseSBjYWxsZWQgZnJvbSBERkcgY29tcGls
YXRpb24gdG8gdXNlIENTdHJpbmdzCisgICAgICAgIHdoZW5ldmVyIHBvc3NpYmxlIGZvciBhbGwg
b2YgaXRzIGRlYnVnIGR1bXBpbmcuCisgICAgICAgIAorICAgICAgICBUaGlzIG1ha2VzIGl0IHBv
c3NpYmxlIHRvIGNvbXBpbGUgdGhpbmdzIHdpdGhvdXQgaGl0dGluZyB0aGUgcmVmL2RlcmVmCisg
ICAgICAgIGFzc2VydGlvbiBpbiBTdHJpbmdJbXBsLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmluZmVycmVkTmFtZSk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6c291cmNlQ29kZUZvclRvb2xzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzb3VyY2VDb2RlT25PbmVMaW5lKToKKyAgICAgICAgKEpTQzo6Y29uc3RhbnROYW1l
KToKKyAgICAgICAgKEpTQzo6aWROYW1lKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdp
c3Rlck5hbWUpOgorICAgICAgICAoSlNDOjpyZWdleHBUb1NvdXJjZVN0cmluZyk6CisgICAgICAg
IChKU0M6OnJlZ2V4cE5hbWUpOgorICAgICAgICAoSlNDOjpwb2ludGVyVG9Tb3VyY2VTdHJpbmcp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50VW5hcnlPcCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cHJpbnRCaW5hcnlPcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJp
bnRDb25kaXRpb25hbEp1bXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJ
ZE9wKToKKyAgICAgICAgKEpTQzo6ZHVtcFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6cHJpbnRDYWxsT3ApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50UHV0QnlJ
ZE9wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFN0cnVjdHVyZSk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tIYXNoLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6
aW5mZXJyZWROYW1lKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAg
IChJbmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKToKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEdldEJ5SWRTdGF0dXMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKFB1dEJ5SWRTdGF0dXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1JlZHVj
ZVdoaXRlc3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpyZWR1Y2VXaGl0ZXNwYWNlKToKKyAgICAg
ICAgKiBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmg6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpjb21w
dXRlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZUdsb2JhbFN0YXR1czo6Y29t
cHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKFJlc29sdmVHbG9iYWxTdGF0dXMpOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEJ5dGVDb2RlUGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKiBkZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9s
ZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZElkZW50
aWZpZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkRl
c2lyZWRJZGVudGlmaWVyczo6RGVzaXJlZElkZW50aWZpZXJzKToKKyAgICAgICAgKEpTQzo6REZH
OjpEZXNpcmVkSWRlbnRpZmllcnM6On5EZXNpcmVkSWRlbnRpZmllcnMpOgorICAgICAgICAoSlND
OjpERkc6OkRlc2lyZWRJZGVudGlmaWVyczo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpTQzo6REZH
OjpEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFkZCk6CisgICAgICAgICogZGZnL0RGR0Rlc2ly
ZWRJZGVudGlmaWVycy5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChEZXNpcmVk
SWRlbnRpZmllcnMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJZGVudGlmaWVyczo6bnVt
YmVyT2ZJZGVudGlmaWVycyk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJz
OjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjpvcGVyYXRvcltd
KToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpp
c1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXNzKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAo
R3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppZGVudGlm
aWVyVUlEKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlv
bik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBw
YXJzZXIvU291cmNlQ29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpT
Qzo6U291cmNlQ29kZTo6dG9VVEY4KToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZS5oOgor
ICAgICAgICAoU291cmNlQ29kZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29k
ZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGVzOjp0b0pTKToKKyAgICAg
ICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5oOgorICAgICAgICAoSlNDOjpQcm9maWxl
cjo6Qnl0ZWNvZGVzOjppbmZlcnJlZE5hbWUpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0
ZWNvZGVzOjpzb3VyY2VDb2RlKToKKyAgICAgICAgKEJ5dGVjb2Rlcyk6CisgICAgICAgICogcnVu
dGltZS9JZGVudGlmaWVyLmg6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OnV0ZjgpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSk6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRs
eSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRT
dG9yZVRvKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0
dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkpOgorCiAyMDEzLTA0LTI5ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogU3RyaW5nOjp1dGY4
KCkgc2hvdWxkIGFsc28gYmUgYXZhaWxhYmxlIGFzIFN0cmluZ0ltcGw6OnV0ZjgoKSBzbyB0aGF0
IHlvdSBkb24ndCBoYXZlIHRvIHJlZigpIGEgU3RyaW5nSW1wbCBqdXN0IHRvIGdldCBpdHMgdXRm
OCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ5MzUxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw2ICsyMjAsOSBAQAogCQkwRjgzNjRCNzE2
NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyog
REZHQnJhbmNoRGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTMxNzJF
MDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovOyB9OwogCQkwRjhGMkI5NjE3MkUwNEEzMDA3
REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjhGMkI5OTE3MkYwNEZG
MDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBE
RkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovOyB9OworCQkwRjhGMkI5QTE3MkYwNTAxMDA3REJE
QTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJl
ZElkZW50aWZpZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOUQxNzMwNkM4
QjAwN0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwICovOyB9OwogCQkwRjhGOTQzQzE2Njc2MzEzMDBE
NjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGOTQzQTE2Njc2MzExMDBENjE5NzEgLyogQ29k
ZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgKi87IH07CiAJCTBGOEY5NDQwMTY2NzYzMzAwMEQ2MTk3
MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEY5NDNEMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNw
cCAqLzsgfTsKIAkJMEY4Rjk0NDExNjY3NjMzMjAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEY5NDNFMTY2
NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExODUsNiArMTE4OCw5IEBACiAJCTBGODVBMzFF
MTZBQjc2QUUwMDc3NTcxRSAvKiBERkdWYXJpYWRpY0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhZGljRnVuY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWRpY0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjkz
MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExp
bmsuY3BwOyBwYXRoID0gZnRsL0ZUTExpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExMaW5rLmg7IHBhdGggPSBmdGwvRlRMTGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHA7IHBhdGgg
PSBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkSWRlbnRpZmllcnMuaDsgcGF0aCA9IGRmZy9ERkdE
ZXNpcmVkSWRlbnRpZmllcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4RjJC
OUQxNzMwNkM4QjAwN0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U291cmNlQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEY5NDNBMTY2
NzYzMTEwMEQ2MTk3MSAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGOTQzRDE2Njc2MzJEMDBENjE5NzEgLyogQ29k
ZUJsb2NrSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2Rl
QmxvY2tIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4Rjk0M0UxNjY3
NjMyRDAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29kZUJsb2NrSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjUxNyw2ICsyNTIzLDcgQEAKIAkJCQlBNzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFyc2Vy
TW9kZXMuaCAqLywKIAkJCQk2NTMwM0Q2MzE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5z
LmggKi8sCiAJCQkJODY5RUJDQjYwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCAqLywK
KwkJCQkwRjhGMkI5RDE3MzA2QzhCMDA3REJEQTUgLyogU291cmNlQ29kZS5jcHAgKi8sCiAJCQkJ
NjVFODY2RUUwREQ1OUFGQTAwQTJCMkExIC8qIFNvdXJjZUNvZGUuaCAqLywKIAkJCQkwRjQ5M0FG
ODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovLAogCQkJCTY1RTg2NkVE
MERENTlBRkEwMEEyQjJBMSAvKiBTb3VyY2VQcm92aWRlci5oICovLApAQCAtMjg1MSw2ICsyODU4
LDggQEAKIAkJCQkwRkZGQzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywK
IAkJCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLAogCQkJ
CTBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAorCQkJCTBGOEYy
Qjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovLAorCQkJ
CTBGOEYyQjk4MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCAqLywK
IAkJCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNw
cCAqLywKIAkJCQkwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9p
bnRzLmggKi8sCiAJCQkJMEZGNDI3NjExNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5jcHAgKi8sCkBAIC0zNDA3LDYgKzM0MTYsNyBAQAogCQkJCTg2RTNDNjEyMTY3QkFCRDcwMDZE
NzYwQSAvKiBKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAz
ODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYWx1ZVJlZi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFyaWFibGVP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBK
U1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAz
QjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAt
NDA3Niw2ICs0MDg2LDcgQEAKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIx
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOEYyQjlFMTczMDZDOEQwMDdEQkRBNSAvKiBTb3Vy
Y2VDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAv
KiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VE
MEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzRGMTUyMjhC
RjMwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyODYs
NiArNDI5Nyw3IEBACiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjBEMEMwRUYw
QjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVu
a0dlbmVyYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3
MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVENzA5QjE2
REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
U3RyaW5nIENvZGVCbG9jazo6aW5mZXJyZWROYW1lKCkgY29uc3QKK0NTdHJpbmcgQ29kZUJsb2Nr
OjppbmZlcnJlZE5hbWUoKSBjb25zdAogewogICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgewogICAg
IGNhc2UgR2xvYmFsQ29kZToKQEAgLTcyLDEwICs3MiwxMCBAQCBTdHJpbmcgQ29kZUJsb2NrOjpp
bmZlcnJlZE5hbWUoKSBjb25zdAogICAgIGNhc2UgRXZhbENvZGU6CiAgICAgICAgIHJldHVybiAi
PGV2YWw+IjsKICAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmluZmVycmVkTmFtZSgpLnN0
cmluZygpOworICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+aW5mZXJyZWROYW1lKCkudXRmOCgpOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIENSQVNIKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIENT
dHJpbmcoIiIsIDApOwogICAgIH0KIH0KIApAQCAtODQsMTAgKzg0LDEwIEBAIENvZGVCbG9ja0hh
c2ggQ29kZUJsb2NrOjpoYXNoKCkgY29uc3QKICAgICByZXR1cm4gQ29kZUJsb2NrSGFzaChvd25l
ckV4ZWN1dGFibGUoKS0+c291cmNlKCksIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAotU3Ry
aW5nIENvZGVCbG9jazo6c291cmNlQ29kZUZvclRvb2xzKCkgY29uc3QKK0NTdHJpbmcgQ29kZUJs
b2NrOjpzb3VyY2VDb2RlRm9yVG9vbHMoKSBjb25zdAogewogICAgIGlmIChjb2RlVHlwZSgpICE9
IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2Uo
KS50b1N0cmluZygpOworICAgICAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZSgp
LnRvVVRGOCgpOwogICAgIAogICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IHNvdXJjZSgp
OwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSk7CkBAIC05NSwxNSArOTUsMTQgQEAgU3RyaW5n
IENvZGVCbG9jazo6c291cmNlQ29kZUZvclRvb2xzKCkgYwogICAgIHVuc2lnbmVkIHVubGlua2Vk
U3RhcnRPZmZzZXQgPSB1bmxpbmtlZC0+c3RhcnRPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBsaW5r
ZWRTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAg
aW50IGRlbHRhID0gbGlua2VkU3RhcnRPZmZzZXQgLSB1bmxpbmtlZFN0YXJ0T2Zmc2V0OwotICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZCgiZnVuY3Rpb24gIik7
Ci0gICAgYnVpbGRlci5hcHBlbmQocHJvdmlkZXItPmdldFJhbmdlKAotICAgICAgICBkZWx0YSAr
IHVubGlua2VkLT5mdW5jdGlvblN0YXJ0T2Zmc2V0KCksCi0gICAgICAgIGRlbHRhICsgdW5saW5r
ZWQtPnN0YXJ0T2Zmc2V0KCkgKyB1bmxpbmtlZC0+c291cmNlTGVuZ3RoKCkpKTsKLSAgICByZXR1
cm4gYnVpbGRlci50b1N0cmluZygpOworICAgIHVuc2lnbmVkIHJhbmdlU3RhcnQgPSBkZWx0YSAr
IHVubGlua2VkLT5mdW5jdGlvblN0YXJ0T2Zmc2V0KCk7CisgICAgdW5zaWduZWQgcmFuZ2VFbmQg
PSBkZWx0YSArIHVubGlua2VkLT5zdGFydE9mZnNldCgpICsgdW5saW5rZWQtPnNvdXJjZUxlbmd0
aCgpOworICAgIHJldHVybiB0b0NTdHJpbmcoCisgICAgICAgICJmdW5jdGlvbiAiLAorICAgICAg
ICBwcm92aWRlci0+c291cmNlKCkuaW1wbCgpLT51dGY4Rm9yUmFuZ2UocmFuZ2VTdGFydCwgcmFu
Z2VFbmQgLSByYW5nZVN0YXJ0KSk7CiB9CiAKLVN0cmluZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVP
bk9uZUxpbmUoKSBjb25zdAorQ1N0cmluZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVPbk9uZUxpbmUo
KSBjb25zdAogewogICAgIHJldHVybiByZWR1Y2VXaGl0ZXNwYWNlKHNvdXJjZUNvZGVGb3JUb29s
cygpKTsKIH0KQEAgLTEyMSw1MCArMTIwLDI4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGMKICAgICBkdW1wQXNzdW1pbmdKSVRUeXBlKG91dCwgZ2V0SklUVHlwZSgp
KTsKIH0KIAotc3RhdGljIFN0cmluZyBlc2NhcGVRdW90ZXMoY29uc3QgU3RyaW5nJiBzdHIpCitz
dGF0aWMgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGssIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
U3RyaW5nIHJlc3VsdCA9IHN0cjsKLSAgICBzaXplX3QgcG9zID0gMDsKLSAgICB3aGlsZSAoKHBv
cyA9IHJlc3VsdC5maW5kKCdcIicsIHBvcykpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IG1ha2VTdHJpbmcocmVzdWx0LnN1YnN0cmluZ1NoYXJpbmdJbXBsKDAsIHBvcyksICJcIlxc
XCJcIiIsIHJlc3VsdC5zdWJzdHJpbmdTaGFyaW5nSW1wbChwb3MgKyAxKSk7Ci0gICAgICAgIHBv
cyArPSA0OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgU3RyaW5nIHZh
bHVlVG9Tb3VyY2VTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbCkKLXsKLSAgICBp
ZiAoIXZhbCkKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiMCIpOwotCi0gICAgaWYgKHZh
bC5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiXCIiLCBlc2NhcGVRdW90
ZXModmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksICJcIiIpOwotCi0gICAgcmV0dXJu
IHRvU3RyaW5nKHZhbCk7Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIGNvbnN0YW50TmFtZShFeGVjU3Rh
dGUqIGV4ZWMsIGludCBrLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBtYWtlU3RyaW5n
KHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywgdmFsdWUpLCAiKEBrIiwgU3RyaW5nOjpudW1iZXIo
ayAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSwgIikiKS51dGY4KCk7CisgICAgcmV0dXJu
IHRvQ1N0cmluZyh2YWx1ZSwgIihAayIsIGsgLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCwg
IikiKTsKIH0KIAogc3RhdGljIENTdHJpbmcgaWROYW1lKGludCBpZDAsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50KQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKGlkZW50LnN0cmluZygpLCAiKEBp
ZCIsIFN0cmluZzo6bnVtYmVyKGlkMCksICIpIikudXRmOCgpOworICAgIHJldHVybiB0b0NTdHJp
bmcoaWRlbnQuaW1wbCgpLCAiKEBpZCIsIGlkMCwgIikiKTsKIH0KIAotQ1N0cmluZyBDb2RlQmxv
Y2s6OnJlZ2lzdGVyTmFtZShFeGVjU3RhdGUqIGV4ZWMsIGludCByKSBjb25zdAorQ1N0cmluZyBD
b2RlQmxvY2s6OnJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3QKIHsKICAgICBpZiAociA9PSBtaXNz
aW5nVGhpc09iamVjdE1hcmtlcigpKQogICAgICAgICByZXR1cm4gIjxudWxsPiI7CiAKICAgICBp
ZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgocikpCi0gICAgICAgIHJldHVybiBjb25zdGFudE5h
bWUoZXhlYywgciwgZ2V0Q29uc3RhbnQocikpOworICAgICAgICByZXR1cm4gY29uc3RhbnROYW1l
KHIsIGdldENvbnN0YW50KHIpKTsKIAotICAgIHJldHVybiBtYWtlU3RyaW5nKCJyIiwgU3RyaW5n
OjpudW1iZXIocikpLnV0ZjgoKTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKCJyIiwgcik7CiB9CiAK
LXN0YXRpYyBTdHJpbmcgcmVnZXhwVG9Tb3VyY2VTdHJpbmcoUmVnRXhwKiByZWdFeHApCitzdGF0
aWMgQ1N0cmluZyByZWdleHBUb1NvdXJjZVN0cmluZyhSZWdFeHAqIHJlZ0V4cCkKIHsKICAgICBj
aGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwgMCB9OwogICAgIGludCBpbmRleCA9IDE7
CkBAIC0xNzUsMTkgKzE1MiwxNyBAQCBzdGF0aWMgU3RyaW5nIHJlZ2V4cFRvU291cmNlU3RyaW5n
KFJlZ0V4CiAgICAgaWYgKHJlZ0V4cC0+bXVsdGlsaW5lKCkpCiAgICAgICAgIHBvc3RmaXhbaW5k
ZXhdID0gJ20nOwogCi0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIi8iLCByZWdFeHAtPnBhdHRlcm4o
KSwgcG9zdGZpeCk7CisgICAgcmV0dXJuIHRvQ1N0cmluZygiLyIsIHJlZ0V4cC0+cGF0dGVybigp
LmltcGwoKSwgcG9zdGZpeCk7CiB9CiAKIHN0YXRpYyBDU3RyaW5nIHJlZ2V4cE5hbWUoaW50IHJl
LCBSZWdFeHAqIHJlZ2V4cCkKIHsKLSAgICByZXR1cm4gbWFrZVN0cmluZyhyZWdleHBUb1NvdXJj
ZVN0cmluZyhyZWdleHApLCAiKEByZSIsIFN0cmluZzo6bnVtYmVyKHJlKSwgIikiKS51dGY4KCk7
CisgICAgcmV0dXJuIHRvQ1N0cmluZyhyZWdleHBUb1NvdXJjZVN0cmluZyhyZWdleHApLCAiKEBy
ZSIsIHJlLCAiKSIpOwogfQogCi1zdGF0aWMgU3RyaW5nIHBvaW50ZXJUb1NvdXJjZVN0cmluZyh2
b2lkKiBwKQorc3RhdGljIENTdHJpbmcgcG9pbnRlclRvU291cmNlU3RyaW5nKHZvaWQqIHApCiB7
Ci0gICAgY2hhciBidWZmZXJbMiArIDIgKiBzaXplb2Yodm9pZCopICsgMV07IC8vIDB4IFt0d28g
Y2hhcmFjdGVycyBwZXIgYnl0ZV0gXDAKLSAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZm
ZXIpLCAiJXAiLCBwKTsKLSAgICByZXR1cm4gYnVmZmVyOworICAgIHJldHVybiB0b0NTdHJpbmco
UmF3UG9pbnRlcihwKSk7CiB9CiAKIE5FVkVSX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogZGVi
dWdIb29rTmFtZShpbnQgZGVidWdIb29rSUQpCkBAIC0yMTEsMjcgKzE4NiwyNyBAQCBORVZFUl9J
TkxJTkUgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnSG9vCiAgICAgcmV0dXJuICIiOwogfQogCi12
b2lkIENvZGVCbG9jazo6cHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSog
ZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBv
cCkKK3ZvaWQgQ29kZUJsb2NrOjpwcmludFVuYXJ5T3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0
YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBv
cCkKIHsKICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKIAotICAgIG91dC5wcmludGYoIlslNGRdICVzXHRcdCAlcywgJXMiLCBs
b2NhdGlvbiwgb3AsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
ZXhlYywgcjEpLmRhdGEoKSk7CisgICAgb3V0LnByaW50ZigiWyU0ZF0gJXNcdFx0ICVzLCAlcyIs
IGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnByaW50QmluYXJ5T3AoUHJpbnRTdHJlYW0m
IG91dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYg
aXQsIGNvbnN0IGNoYXIqIG9wKQordm9pZCBDb2RlQmxvY2s6OnByaW50QmluYXJ5T3AoUHJpbnRT
dHJlYW0mIG91dCwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiom
IGl0LCBjb25zdCBjaGFyKiBvcCkKIHsKICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgcjIgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICBvdXQucHJpbnRmKCJbJTRkXSAlc1x0XHQgJXMsICVzLCAlcyIsIGxvY2F0
aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVj
LCByMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjIpLmRhdGEoKSk7CisgICAgb3V0LnBy
aW50ZigiWyU0ZF0gJXNcdFx0ICVzLCAlcywgJXMiLCBsb2NhdGlvbiwgb3AsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5k
YXRhKCkpOwogfQogCi12b2lkIENvZGVCbG9jazo6cHJpbnRDb25kaXRpb25hbEp1bXAoUHJpbnRT
dHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiosIGNvbnN0IElu
c3RydWN0aW9uKiYgaXQsIGludCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApCit2b2lkIENvZGVC
bG9jazo6cHJpbnRDb25kaXRpb25hbEp1bXAoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBpbnQgbG9jYXRpb24s
IGNvbnN0IGNoYXIqIG9wKQogewogICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
IGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBvdXQucHJpbnRmKCJbJTRkXSAl
c1x0XHQgJXMsICVkKC0+JWQpIiwgbG9jYXRpb24sIG9wLCByZWdpc3Rlck5hbWUoZXhlYywgcjAp
LmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgb3V0LnByaW50ZigiWyU0
ZF0gJXNcdFx0ICVzLCAlZCgtPiVkKSIsIGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogfQogCiB2b2lkIENvZGVCbG9jazo6
cHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9j
YXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQpCkBAIC0yODcsNyArMjYyLDcgQEAgdm9pZCBD
b2RlQmxvY2s6OnByaW50R2V0QnlJZE9wKFByaW50U3RyZQogICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgIGludCBpZDAg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBvdXQucHJpbnRmKCJbJTRkXSAlc1x0ICVzLCAlcywg
JXMiLCBsb2NhdGlvbiwgb3AsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5k
YXRhKCkpOworICAgIG91dC5wcmludGYoIlslNGRdICVzXHQgJXMsICVzLCAlcyIsIGxvY2F0aW9u
LCBvcCwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBp
ZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSk7CiAgICAgaXQgKz0gNDsgLy8g
SW5jcmVtZW50IHVwIHRvIHRoZSB2YWx1ZSBwcm9maWxlci4KIH0KIApAQCAtMjk5LDcgKzI3NCw3
IEBAIHN0YXRpYyB2b2lkIGR1bXBTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBv
dXQucHJpbnRmKCIlcyA9ICVwIiwgbmFtZSwgc3RydWN0dXJlKTsKICAgICAKLSAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldChleGVjLT52bSgpLCBpZGVudCk7CisgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoZXhlYy0+
dm0oKSwgaWRlbnQuaW1wbCgpKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpCiAg
ICAgICAgIG91dC5wcmludGYoIiAob2Zmc2V0ID0gJWQpIiwgb2Zmc2V0KTsKIH0KQEAgLTQzOCwx
MiArNDEzLDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICNl
bmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mIG91dCwg
RXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNv
bnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2RlIGNhY2hlRHVtcE1vZGUpCit2b2lkIENvZGVCbG9j
azo6cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9u
LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBj
YWNoZUR1bXBNb2RlKQogewogICAgIGludCBmdW5jID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAg
aW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgb3V0LnByaW50ZigiWyU0ZF0gJXNcdCAlcywgJWQs
ICVkIiwgbG9jYXRpb24sIG9wLCByZWdpc3Rlck5hbWUoZXhlYywgZnVuYykuZGF0YSgpLCBhcmdD
b3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgIG91dC5wcmludGYoIlslNGRdICVzXHQgJXMsICVk
LCAlZCIsIGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKGZ1bmMpLmRhdGEoKSwgYXJnQ291bnQs
IHJlZ2lzdGVyT2Zmc2V0KTsKICAgICBpZiAoY2FjaGVEdW1wTW9kZSA9PSBEdW1wQ2FjaGVzKSB7
CiAjaWYgRU5BQkxFKExMSU5UKQogICAgICAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvID0gaXRbMV0udS5jYWxsTGlua0luZm87CkBAIC00NjYsMTkgKzQ0MSwxOSBAQCB2b2lkIENv
ZGVCbG9jazo6cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mCiAgICAgaXQgKz0gMjsKIH0KIAotdm9p
ZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSog
ZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBv
cCkKK3ZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRPcChQcmludFN0cmVhbSYgb3V0LCBFeGVj
U3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIq
IG9wKQogewogICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgIGludCBpZDAgPSAo
KytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBv
dXQucHJpbnRmKCJbJTRkXSAlc1x0ICVzLCAlcywgJXMiLCBsb2NhdGlvbiwgb3AsIHJlZ2lzdGVy
TmFtZShleGVjLCByMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCkpOworICAgIG91dC5wcmludGYoIlsl
NGRdICVzXHQgJXMsICVzLCAlcyIsIGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRh
KCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSk7CiAgICAgaXQgKz0gNTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnByaW50U3Ry
dWN0dXJlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IEluc3RydWN0
aW9uKiB2UEMsIGludCBvcGVyYW5kKQogewogICAgIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0
ID0gdlBDIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICBvdXQucHJpbnRmKCIgIFslNGRd
ICVzOiAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsIG5hbWUsIHBvaW50ZXJUb1NvdXJjZVN0cmlu
Zyh2UENbb3BlcmFuZF0udS5zdHJ1Y3R1cmUpLnV0ZjgoKS5kYXRhKCkpOworICAgIG91dC5wcmlu
dGYoIiAgWyU0ZF0gJXM6ICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgbmFtZSwgcG9pbnRlclRv
U291cmNlU3RyaW5nKHZQQ1tvcGVyYW5kXS51LnN0cnVjdHVyZSkuZGF0YSgpKTsKIH0KIAogdm9p
ZCBDb2RlQmxvY2s6OnByaW50U3RydWN0dXJlcyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0
cnVjdGlvbiogdlBDKQpAQCAtNDk1LDE1ICs0NzAsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50
U3RydWN0dXJlcyhQcmludFN0cgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh2UENb
MF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfYnlfaWRfcHJvdG8p
KSB7Ci0gICAgICAgIG91dC5wcmludGYoIiAgWyU0ZF0gJXM6ICVzLCAlc1xuIiwgaW5zdHJ1Y3Rp
b25PZmZzZXQsICJnZXRfYnlfaWRfcHJvdG8iLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodlBDWzRd
LnUuc3RydWN0dXJlKS51dGY4KCkuZGF0YSgpLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodlBDWzVd
LnUuc3RydWN0dXJlKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgb3V0LnByaW50ZigiICBbJTRk
XSAlczogJXMsICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgImdldF9ieV9pZF9wcm90byIsIHBv
aW50ZXJUb1NvdXJjZVN0cmluZyh2UENbNF0udS5zdHJ1Y3R1cmUpLmRhdGEoKSwgcG9pbnRlclRv
U291cmNlU3RyaW5nKHZQQ1s1XS51LnN0cnVjdHVyZSkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNv
ZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb24pKSB7Ci0gICAgICAgIG91dC5wcmludGYoIiAgWyU0
ZF0gJXM6ICVzLCAlcywgJXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0LCAicHV0X2J5X2lkX3RyYW5z
aXRpb24iLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodlBDWzRdLnUuc3RydWN0dXJlKS51dGY4KCku
ZGF0YSgpLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodlBDWzVdLnUuc3RydWN0dXJlKS51dGY4KCku
ZGF0YSgpLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodlBDWzZdLnUuc3RydWN0dXJlQ2hhaW4pLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICBvdXQucHJpbnRmKCIgIFslNGRdICVzOiAlcywgJXMsICVz
XG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgInB1dF9ieV9pZF90cmFuc2l0aW9uIiwgcG9pbnRlclRv
U291cmNlU3RyaW5nKHZQQ1s0XS51LnN0cnVjdHVyZSkuZGF0YSgpLCBwb2ludGVyVG9Tb3VyY2VT
dHJpbmcodlBDWzVdLnUuc3RydWN0dXJlKS5kYXRhKCksIHBvaW50ZXJUb1NvdXJjZVN0cmluZyh2
UENbNl0udS5zdHJ1Y3R1cmVDaGFpbikuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfZ2V0
X2J5X2lkX2NoYWluKSkgewotICAgICAgICBvdXQucHJpbnRmKCIgIFslNGRdICVzOiAlcywgJXNc
biIsIGluc3RydWN0aW9uT2Zmc2V0LCAiZ2V0X2J5X2lkX2NoYWluIiwgcG9pbnRlclRvU291cmNl
U3RyaW5nKHZQQ1s0XS51LnN0cnVjdHVyZSkudXRmOCgpLmRhdGEoKSwgcG9pbnRlclRvU291cmNl
U3RyaW5nKHZQQ1s1XS51LnN0cnVjdHVyZUNoYWluKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
b3V0LnByaW50ZigiICBbJTRkXSAlczogJXMsICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgImdl
dF9ieV9pZF9jaGFpbiIsIHBvaW50ZXJUb1NvdXJjZVN0cmluZyh2UENbNF0udS5zdHJ1Y3R1cmUp
LmRhdGEoKSwgcG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1s1XS51LnN0cnVjdHVyZUNoYWluKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh2UENbMF0udS5vcGNvZGUg
PT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9wdXRfYnlfaWQpKSB7CkBAIC01NjksNyArNTQ0
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICBv
dXQucHJpbnRmKCJcbkNvbnN0YW50czpcbiIpOwogICAgICAgICBzaXplX3QgaSA9IDA7CiAgICAg
ICAgIGRvIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiAgIGsldSA9ICVzXG4iLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaSksIHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywgbV9jb25zdGFudFJl
Z2lzdGVyc1tpXS5nZXQoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIgICBrJXUgPSAlc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCB0b0NTdHJpbmcobV9j
b25zdGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkuZGF0YSgpKTsKICAgICAgICAgICAgICsraTsKICAg
ICAgICAgfSB3aGlsZSAoaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICB9CkBA
IC01NzgsNyArNTUzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVh
bQogICAgICAgICBvdXQucHJpbnRmKCJcbm1fcmVnZXhwczpcbiIpOwogICAgICAgICBzaXplX3Qg
aSA9IDA7CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiAgcmUldSA9ICVz
XG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5nKG1fdW5s
aW5rZWRDb2RlLT5yZWdleHAoaSkpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiICByZSV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9T
b3VyY2VTdHJpbmcobV91bmxpbmtlZENvZGUtPnJlZ2V4cChpKSkuZGF0YSgpKTsKICAgICAgICAg
ICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8IGNvdW50KTsKICAgICB9CkBAIC03MTYsMjIg
KzY5MSwyMiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjogewogICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRk
XSBjcmVhdGVfYWN0aXZhdGlvbiAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjAp
LmRhdGEoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBjcmVhdGVfYWN0aXZhdGlv
biAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsKICAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiWyU0ZF0gY3JlYXRlX2FyZ3VtZW50c1x0ICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGNyZWF0
ZV9hcmd1bWVudHNcdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2luaXRfbGF6eV9y
ZWc6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgb3V0LnByaW50ZigiWyU0ZF0gaW5pdF9sYXp5X3JlZ1x0ICVzIiwgbG9jYXRpb24sIHJlZ2lz
dGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRd
IGluaXRfbGF6eV9yZWdcdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9jYWxs
ZWU6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgb3V0LnByaW50ZigiWyU0ZF0gb3BfZ2V0X2NhbGxlZSAlc1xuIiwgbG9jYXRpb24sIHJlZ2lz
dGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRd
IG9wX2dldF9jYWxsZWUgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7
CiAgICAgICAgICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTcz
OSwxOSArNzE0LDE5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0K
ICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElu
bGluZUNhcGFjaXR5ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRm
KCJbJTRkXSBjcmVhdGVfdGhpcyAlcywgJXMsICV1IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShl
eGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgaW5mZXJyZWRJ
bmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBjcmVhdGVfdGhp
cyAlcywgJXMsICV1IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczogewogICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRm
KCJbJTRkXSBjb252ZXJ0X3RoaXNcdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywg
cjApLmRhdGEoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBjb252ZXJ0X3RoaXNc
dCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CiAgICAgICAgICAgICAr
K2l0OyAvLyBTa2lwIHZhbHVlIHByb2ZpbGUuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX25ld19vYmplY3Q6IHsKICAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgdW5zaWduZWQgaW5mZXJyZWRJbmxpbmVDYXBh
Y2l0eSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0g
bmV3X29iamVjdFx0ICVzLCAldSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRh
dGEoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJb
JTRkXSBuZXdfb2JqZWN0XHQgJXMsICV1IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0
YSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5KTsKICAgICAgICAgICAgICsraXQ7IC8vIFNraXAg
b2JqZWN0IGFsbG9jYXRpb24gcHJvZmlsZS4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC03NTksMTQgKzczNCwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50
U3RyZWFtCiAgICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ2Mg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIG5ld19h
cnJheVx0ICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGRzdCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgYXJndikuZGF0YSgpLCBhcmdjKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIlslNGRdIG5ld19hcnJheVx0ICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYXJndikuZGF0YSgpLCBhcmdjKTsK
ICAgICAgICAgICAgICsraXQ7IC8vIFNraXAgYXJyYXkgYWxsb2NhdGlvbiBwcm9maWxlLgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0
aF9zaXplOiB7CiAgICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBpbnQgbGVuZ3RoID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCJbJTRkXSBuZXdfYXJyYXlfd2l0aF9zaXplXHQgJXMsICVzIiwgbG9jYXRpb24sIHJl
Z2lzdGVyTmFtZShleGVjLCBkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGxlbmd0aCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIG5ld19hcnJheV93aXRoX3Np
emVcdCAlcywgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUobGVuZ3RoKS5kYXRhKCkpOwogICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBhcnJheSBh
bGxvY2F0aW9uIHByb2ZpbGUuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzc0
LDE0ICs3NDksMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQog
ICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50
IGFyZ3YgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmdjID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBuZXdfYXJyYXlfYnVm
ZmVyXHQgJXMsICVkLCAlZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgZHN0KS5kYXRh
KCksIGFyZ3YsIGFyZ2MpOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gbmV3X2FycmF5
X2J1ZmZlclx0ICVzLCAlZCwgJWQiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgp
LCBhcmd2LCBhcmdjKTsKICAgICAgICAgICAgICsraXQ7IC8vIFNraXAgYXJyYXkgYWxsb2NhdGlv
biBwcm9maWxlLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9uZXdfcmVnZXhwOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGludCByZTAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91
dC5wcmludGYoIlslNGRdIG5ld19yZWdleHBcdCAlcywgIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIG5ld19y
ZWdleHBcdCAlcywgIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKICAgICAg
ICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlJl
Z0V4cHMoKSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2V4cE5hbWUocmUw
LCByZWdleHAocmUwKSkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTc5MSw3ICs3NjYs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgIGNh
c2Ugb3BfbW92OiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiWyU0ZF0gbW92XHRcdCAlcywgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIlslNGRdIG1vdlx0XHQgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25vdDogewpAQCAtODQwLDEyICs4MTUsMTIg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICB9CiAg
ICAgICAgIGNhc2Ugb3BfcHJlX2luYzogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBwcmVfaW5jXHRcdCAlcyIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCJbJTRkXSBwcmVfaW5jXHRcdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IG9wX3ByZV9kZWM6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcHJlX2RlY1x0XHQgJXMiLCBsb2NhdGlvbiwg
cmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0LnByaW50Zigi
WyU0ZF0gcHJlX2RlY1x0XHQgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wb3N0X2lu
YzogewpAQCAtOTIwLDE0ICs4OTUsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQ
cmludFN0cmVhbQogICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBvZmZz
ZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGNo
ZWNrX2hhc19pbnN0YW5jZVx0XHQgJXMsICVzLCAlcywgJWQoLT4lZCkiLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgp
LCByZWdpc3Rlck5hbWUoZXhlYywgcjIpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNl
dCk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBjaGVja19oYXNfaW5zdGFuY2VcdFx0
ICVzLCAlcywgJXMsICVkKC0+JWQpIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIG9mZnNl
dCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCJbJTRkXSBpbnN0YW5jZW9mXHRcdCAlcywgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVy
TmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKGV4ZWMsIHIyKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0
ZF0gaW5zdGFuY2VvZlx0XHQgJXMsICVzLCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfdHlwZW9m
OiB7CkBAIC05NjgsNyArOTQzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmlu
dFN0cmVhbQogICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAg
ICAgICAgaW50IHZhbHVlID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcmVz
b2x2ZUluZm8gPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlsl
NGRdIHB1dF90b19iYXNlXHQgJXMsICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1l
KGV4ZWMsIGJhc2UpLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShleGVjLCB2YWx1ZSkuZGF0YSgpLCByZXNvbHZlSW5mbyk7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBwdXRfdG9fYmFzZVx0ICVzLCAlcywgJXMsICVkIiwg
bG9jYXRpb24sIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRp
ZmllcnNbaWQwXSkuZGF0YSgpLCByZWdpc3Rlck5hbWUodmFsdWUpLmRhdGEoKSwgcmVzb2x2ZUlu
Zm8pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNv
bHZlOgpAQCAtOTgwLDcgKzk1NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJp
bnRTdHJlYW0KICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAg
ICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHJlc29s
dmVJbmZvID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRk
XSByZXNvbHZlXHRcdCAlcywgJXMsICVkIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBy
MCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgcmVzb2x2
ZUluZm8pOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcmVzb2x2ZVx0XHQgJXMsICVz
LCAlZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9p
ZGVudGlmaWVyc1tpZDBdKS5kYXRhKCksIHJlc29sdmVJbmZvKTsKICAgICAgICAgICAgIGR1bXBW
YWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC05ODgsNyArOTYzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CiAgICAgICAgICAgICBpbnQgaW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGludCBza2lwTGV2ZWxzID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCJbJTRkXSBnZXRfc2NvcGVkX3Zhclx0ICVzLCAlZCwgJWQiLCBsb2NhdGlvbiwg
cmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIGluZGV4LCBza2lwTGV2ZWxzKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIlslNGRdIGdldF9zY29wZWRfdmFyXHQgJXMsICVkLCAlZCIsIGxv
Y2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaW5kZXgsIHNraXBMZXZlbHMpOwogICAg
ICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTk5Niw3ICs5NzEsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICBpbnQgaW5k
ZXggPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBza2lwTGV2ZWxzID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHB1dF9zY29wZWRfdmFyXHQgJWQsICVkLCAl
cyIsIGxvY2F0aW9uLCBpbmRleCwgc2tpcExldmVscywgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5k
YXRhKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcHV0X3Njb3BlZF92YXJcdCAl
ZCwgJWQsICVzIiwgbG9jYXRpb24sIGluZGV4LCBza2lwTGV2ZWxzLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9w
X2luaXRfZ2xvYmFsX2NvbnN0X25vcDogewpAQCAtMTAxMCw3ICs5ODUsNyBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9i
YWxfY29uc3Q6IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQ
b2ludGVyID0gKCsraXQpLT51LnJlZ2lzdGVyUG9pbnRlcjsKICAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gaW5pdF9n
bG9iYWxfY29uc3RcdCBnJWQoJXApLCAlcyIsIGxvY2F0aW9uLCBtX2dsb2JhbE9iamVjdC0+Zmlu
ZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKSwgcmVnaXN0ZXJQb2ludGVyLCByZWdpc3Rl
ck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBp
bml0X2dsb2JhbF9jb25zdFx0IGclZCglcCksICVzIiwgbG9jYXRpb24sIG1fZ2xvYmFsT2JqZWN0
LT5maW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpLCByZWdpc3RlclBvaW50ZXIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKICAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBp
dCsrOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDE4LDcgKzk5Myw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgY2FzZSBvcF9pbml0X2dsb2Jh
bF9jb25zdF9jaGVjazogewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdp
c3RlclBvaW50ZXIgPSAoKytpdCktPnUucmVnaXN0ZXJQb2ludGVyOwogICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBp
bml0X2dsb2JhbF9jb25zdF9jaGVja1x0IGclZCglcCksICVzIiwgbG9jYXRpb24sIG1fZ2xvYmFs
T2JqZWN0LT5maW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpLCByZWdpc3RlclBvaW50
ZXIsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIlslNGRdIGluaXRfZ2xvYmFsX2NvbnN0X2NoZWNrXHQgZyVkKCVwKSwgJXMiLCBsb2NhdGlv
biwgbV9nbG9iYWxPYmplY3QtPmZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlciksIHJl
Z2lzdGVyUG9pbnRlciwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgaXQr
KzsKICAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMzMsMTQgKzEw
MDgsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAg
ICAgICAgaW50IGlzU3RyaWN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQg
cmVzb2x2ZUluZm8gPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBwdXRUb0Jh
c2VJbmZvID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRk
XSByZXNvbHZlX2Jhc2Ulc1x0ICVzLCAlcywgJWQsICVkIiwgbG9jYXRpb24sIGlzU3RyaWN0ID8g
Il9zdHJpY3QiIDogIiIsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpZE5hbWUoaWQw
LCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgcmVzb2x2ZUluZm8sIHB1dFRvQmFzZUluZm8p
OworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcmVzb2x2ZV9iYXNlJXNcdCAlcywgJXMs
ICVkLCAlZCIsIGxvY2F0aW9uLCBpc1N0cmljdCA/ICJfc3RyaWN0IiA6ICIiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCksIHJl
c29sdmVJbmZvLCBwdXRUb0Jhc2VJbmZvKTsKICAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGlu
ZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0czogewogICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgaWQwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBlbnN1cmVf
cHJvcGVydHlfZXhpc3RzXHQgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBy
MCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSk7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBlbnN1cmVfcHJvcGVydHlfZXhpc3RzXHQgJXMsICVz
IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50
aWZpZXJzW2lkMF0pLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF9iYXNlOiB7CkBAIC0xMDQ5LDcgKzEwMjQsNyBAQCB2
b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICBpbnQg
aWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcmVzb2x2ZUluZm8gPSAo
KytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBwdXRUb0Jhc2VJbmZvID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSByZXNvbHZlX3dpdGhf
YmFzZSAlcywgJXMsICVzLCAlZCwgJWQiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lk
ZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgcmVzb2x2ZUluZm8sIHB1dFRvQmFzZUluZm8pOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcmVzb2x2ZV93aXRoX2Jhc2UgJXMsICVzLCAlcywg
JWQsICVkIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCksIHJlc29s
dmVJbmZvLCBwdXRUb0Jhc2VJbmZvKTsKICAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhv
dXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0xMDU4LDcgKzEwMzMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByZXNv
bHZlSW5mbyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0
ZF0gcmVzb2x2ZV93aXRoX3RoaXMgJXMsICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVnaXN0ZXJO
YW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCBpZE5h
bWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgcmVzb2x2ZUluZm8pOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcmVzb2x2ZV93aXRoX3RoaXMgJXMsICVzLCAlcywgJWQi
LCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSwgcmVzb2x2ZUluZm8p
OwogICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9m
aWxpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExMjcsMjEgKzExMDIs
MjEgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICAg
ICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHB1dF9nZXR0ZXJfc2V0dGVyXHQgJXMsICVz
LCAlcywgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIGlkTmFt
ZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIyKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiWyU0ZF0gcHV0X2dldHRlcl9zZXR0ZXJcdCAlcywgJXMsICVzLCAlcyIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tp
ZDBdKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRh
dGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2Rl
bF9ieV9pZDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBpZDAg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGRlbF9i
eV9pZFx0ICVzLCAlcywgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZp
ZXJzW2lkMF0pLmRhdGEoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBkZWxfYnlf
aWRcdCAlcywgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjEpLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRh
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRf
YnlfdmFsOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIyID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBnZXRfYnlf
dmFsXHQgJXMsICVzLCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMiku
ZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGdldF9ieV92YWxcdCAlcywg
JXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOwogICAgICAgICAgICAgZHVtcEFy
cmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAgICAg
ZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xMTUwLDcgKzExMjUsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5
dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRk
XSBnZXRfYXJndW1lbnRfYnlfdmFsXHQgJXMsICVzLCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5h
bWUoZXhlYywgcjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShleGVjLCByMikuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRd
IGdldF9hcmd1bWVudF9ieV92YWxcdCAlcywgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5k
YXRhKCkpOwogICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGlu
ZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTE2MiwxNCArMTEzNywxNCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3Ry
ZWFtCiAgICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAg
IGludCByNCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHI1ID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBnZXRfYnlfcG5hbWVc
dCAlcywgJXMsICVzLCAlcywgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBy
MCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMykuZGF0YSgpLCByZWdpc3Rlck5h
bWUoZXhlYywgcjQpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHI1KS5kYXRhKCkpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gZ2V0X2J5X3BuYW1lXHQgJXMsICVzLCAlcywgJXMs
ICVzLCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHI0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyNSkuZGF0YSgpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMiA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcHV0X2J5X3ZhbFx0
ICVzLCAlcywgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjIpLmRhdGEo
KSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBwdXRfYnlfdmFsXHQgJXMsICVzLCAl
cyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKICAgICAgICAgICAgIGR1bXBBcnJheVBy
b2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0xMTc3LDE0ICsxMTUyLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlsl
NGRdIGRlbF9ieV92YWxcdCAlcywgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVj
LCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KGV4ZWMsIHIyKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gZGVsX2J5
X3ZhbFx0ICVzLCAlcywgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDogewog
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICB1bnNp
Z25lZCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBwdXRfYnlfaW5kZXhc
dCAlcywgJXUsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBu
MCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiWyU0ZF0gcHV0X2J5X2luZGV4XHQgJXMsICV1LCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgbjAsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bfam1wOiB7CkBAIC0xMjI1LDkxICsx
MjAwLDkxIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgU3BlY2lhbDo6
UG9pbnRlciBwb2ludGVyID0gKCsraXQpLT51LnNwZWNpYWxQb2ludGVyOwogICAgICAgICAgICAg
aW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50Zigi
WyU0ZF0gam5lcV9wdHJcdFx0ICVzLCAlZCAoJXApLCAlZCgtPiVkKSIsIGxvY2F0aW9uLCByZWdp
c3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgcG9pbnRlciwgbV9nbG9iYWxPYmplY3QtPmFjdHVh
bFBvaW50ZXJGb3IocG9pbnRlciksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiWyU0ZF0gam5lcV9wdHJcdFx0ICVzLCAlZCAoJXApLCAlZCgtPiVk
KSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcG9pbnRlciwgbV9nbG9iYWxP
YmplY3QtPmFjdHVhbFBvaW50ZXJGb3IocG9pbnRlciksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZz
ZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9qbGVz
czogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGpsZXNzXHRc
dCAlcywgJXMsICVkKC0+JWQpIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9m
ZnNldCk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBqbGVzc1x0XHQgJXMsICVzLCAl
ZCgtPiVkKSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9qbGVzc2VxOiB7CiAgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gamxlc3NlcVx0XHQgJXMsICVzLCAlZCgtPiVk
KSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KGV4ZWMsIHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiWyU0ZF0gamxlc3NlcVx0XHQgJXMsICVzLCAlZCgtPiVkKSIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9m
ZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcjogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAg
ICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91
dC5wcmludGYoIlslNGRdIGpncmVhdGVyXHRcdCAlcywgJXMsICVkKC0+JWQpIiwgbG9jYXRpb24s
IHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRh
dGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCJbJTRkXSBqZ3JlYXRlclx0XHQgJXMsICVzLCAlZCgtPiVkKSIsIGxvY2F0aW9uLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRp
b24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF9qZ3JlYXRlcmVxOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50Zigi
WyU0ZF0gamdyZWF0ZXJlcVx0XHQgJXMsICVzLCAlZCgtPiVkKSIsIGxvY2F0aW9uLCByZWdpc3Rl
ck5hbWUoZXhlYywgcjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCksIG9m
ZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0g
amdyZWF0ZXJlcVx0XHQgJXMsICVzLCAlZCgtPiVkKSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBv
ZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9q
bmxlc3M6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAg
ICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBqbmxl
c3NcdFx0ICVzLCAlcywgJWQoLT4lZCkiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9u
ICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGpubGVzc1x0XHQgJXMs
ICVzLCAlZCgtPiVkKSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcTogewogICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGpubGVzc2VxXHRcdCAlcywgJXMs
ICVkKC0+JWQpIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBqbmxlc3NlcVx0XHQgJXMsICVzLCAlZCgtPiVk
KSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5k
YXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6IHsKICAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBqbmdyZWF0ZXJcdFx0ICVzLCAlcywgJWQoLT4lZCki
LCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShl
eGVjLCByMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIlslNGRdIGpuZ3JlYXRlclx0XHQgJXMsICVzLCAlZCgtPiVkKSIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9m
ZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcTogewogICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIlslNGRdIGpuZ3JlYXRlcmVxXHRcdCAlcywgJXMsICVkKC0+JWQpIiwgbG9j
YXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywg
cjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCJbJTRkXSBqbmdyZWF0ZXJlcVx0XHQgJXMsICVzLCAlZCgtPiVkKSIsIGxvY2F0aW9u
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNl
dCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3M6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCJbJTRkXSBsb29wX2lmX2xlc3NcdCAlcywgJXMsICVkKC0+JWQpIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEp
LmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCJbJTRkXSBsb29wX2lmX2xlc3NcdCAlcywgJXMsICVkKC0+JWQpIiwgbG9jYXRpb24sIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBs
b2NhdGlvbiArIG9mZnNldCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIG9wX2xvb3BfaWZfbGVzc2VxOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0
LnByaW50ZigiWyU0ZF0gbG9vcF9pZl9sZXNzZXFcdCAlcywgJXMsICVkKC0+JWQpIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEp
LmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCJbJTRkXSBsb29wX2lmX2xlc3NlcVx0ICVzLCAlcywgJWQoLT4lZCkiLCBsb2NhdGlvbiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQs
IGxvY2F0aW9uICsgb2Zmc2V0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3BfbG9vcF9pZl9ncmVhdGVyOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwog
ICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
b3V0LnByaW50ZigiWyU0ZF0gbG9vcF9pZl9ncmVhdGVyXHQgJXMsICVzLCAlZCgtPiVkKSIsIGxv
Y2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiWyU0ZF0gbG9vcF9pZl9ncmVhdGVyXHQgJXMsICVzLCAlZCgtPiVkKSIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9m
ZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2dyZWF0ZXJlcTogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIG91dC5wcmludGYoIlslNGRdIGxvb3BfaWZfZ3JlYXRlcmVxXHQgJXMsICVzLCAlZCgt
PiVkKSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGV4ZWMsIHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiWyU0ZF0gbG9vcF9pZl9ncmVhdGVyZXFcdCAlcywgJXMsICVkKC0+
JWQpIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2xvb3BfaGludDogewpAQCAtMTMyMCwzNCArMTI5
NSwzNCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAg
ICAgICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50
IGRlZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBzY3J1
dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50
ZigiWyU0ZF0gc3dpdGNoX2ltbVx0ICVkLCAlZCgtPiVkKSwgJXMiLCBsb2NhdGlvbiwgdGFibGVJ
bmRleCwgZGVmYXVsdFRhcmdldCwgbG9jYXRpb24gKyBkZWZhdWx0VGFyZ2V0LCByZWdpc3Rlck5h
bWUoZXhlYywgc2NydXRpbmVlUmVnaXN0ZXIpLmRhdGEoKSk7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCJbJTRkXSBzd2l0Y2hfaW1tXHQgJWQsICVkKC0+JWQpLCAlcyIsIGxvY2F0aW9uLCB0YWJs
ZUluZGV4LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbiArIGRlZmF1bHRUYXJnZXQsIHJlZ2lzdGVy
TmFtZShzY3J1dGluZWVSZWdpc3RlcikuZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKICAgICAgICAgICAgIGludCB0
YWJsZUluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgZGVmYXVsdFRh
cmdldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJlZ2lz
dGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBz
d2l0Y2hfY2hhclx0ICVkLCAlZCgtPiVkKSwgJXMiLCBsb2NhdGlvbiwgdGFibGVJbmRleCwgZGVm
YXVsdFRhcmdldCwgbG9jYXRpb24gKyBkZWZhdWx0VGFyZ2V0LCByZWdpc3Rlck5hbWUoZXhlYywg
c2NydXRpbmVlUmVnaXN0ZXIpLmRhdGEoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRk
XSBzd2l0Y2hfY2hhclx0ICVkLCAlZCgtPiVkKSwgJXMiLCBsb2NhdGlvbiwgdGFibGVJbmRleCwg
ZGVmYXVsdFRhcmdldCwgbG9jYXRpb24gKyBkZWZhdWx0VGFyZ2V0LCByZWdpc3Rlck5hbWUoc2Ny
dXRpbmVlUmVnaXN0ZXIpLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IHsKICAgICAgICAgICAgIGludCB0YWJsZUlu
ZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgZGVmYXVsdFRhcmdldCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJlZ2lzdGVyID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBzd2l0Y2hf
c3RyaW5nXHQgJWQsICVkKC0+JWQpLCAlcyIsIGxvY2F0aW9uLCB0YWJsZUluZGV4LCBkZWZhdWx0
VGFyZ2V0LCBsb2NhdGlvbiArIGRlZmF1bHRUYXJnZXQsIHJlZ2lzdGVyTmFtZShleGVjLCBzY3J1
dGluZWVSZWdpc3RlcikuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHN3
aXRjaF9zdHJpbmdcdCAlZCwgJWQoLT4lZCksICVzIiwgbG9jYXRpb24sIHRhYmxlSW5kZXgsIGRl
ZmF1bHRUYXJnZXQsIGxvY2F0aW9uICsgZGVmYXVsdFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0
aW5lZVJlZ2lzdGVyKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGludCBzaG91bGRDaGVjayA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
b3V0LnByaW50ZigiWyU0ZF0gbmV3X2Z1bmNcdFx0ICVzLCBmJWQsICVzIiwgbG9jYXRpb24sIHJl
Z2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBmMCwgc2hvdWxkQ2hlY2sgPyAiPENoZWNrZWQ+
IiA6ICI8VW5jaGVja2VkPiIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gbmV3X2Z1
bmNcdFx0ICVzLCBmJWQsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBm
MCwgc2hvdWxkQ2hlY2sgPyAiPENoZWNrZWQ+IiA6ICI8VW5jaGVja2VkPiIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6IHsKICAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGYw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBuZXdf
ZnVuY19leHBcdCAlcywgZiVkIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0
YSgpLCBmMCk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBuZXdfZnVuY19leHBcdCAl
cywgZiVkIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhbGw6IHsKQEAgLTEzNjMs
MzUgKzEzMzgsMzUgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQog
ICAgICAgICAgICAgaW50IHRoaXNWYWx1ZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAg
ICAgaW50IGFyZ3VtZW50cyA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGZp
cnN0RnJlZVJlZ2lzdGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCJbJTRkXSBjYWxsX3ZhcmFyZ3NcdCAlcywgJXMsICVzLCAlZCIsIGxvY2F0aW9uLCByZWdp
c3Rlck5hbWUoZXhlYywgY2FsbGVlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCB0aGlzVmFs
dWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGFyZ3VtZW50cykuZGF0YSgpLCBmaXJzdEZy
ZWVSZWdpc3Rlcik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBjYWxsX3ZhcmFyZ3Nc
dCAlcywgJXMsICVzLCAlZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoY2FsbGVlKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZSh0aGlzVmFsdWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGFyZ3VtZW50cyku
ZGF0YSgpLCBmaXJzdEZyZWVSZWdpc3Rlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FjdGl2YXRpb246IHsKICAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0g
dGVhcl9vZmZfYWN0aXZhdGlvblx0ICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBy
MCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHRlYXJfb2ZmX2FjdGl2
YXRpb25cdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50
czogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlsl
NGRdIHRlYXJfb2ZmX2FyZ3VtZW50cyAlcywgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIlslNGRdIHRlYXJfb2ZmX2FyZ3VtZW50cyAlcywgJXMiLCBsb2NhdGlv
biwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcmV0OiB7CiAgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIlslNGRdIHJldFx0XHQgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5k
YXRhKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcmV0XHRcdCAlcyIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDogewogICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBj
YWxsX3B1dF9yZXN1bHRcdFx0ICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGNhbGxfcHV0X3Jlc3VsdFx0
XHQgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwogICAgICAgICAgICAg
ZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXRfb2JqZWN0X29yX3Ro
aXM6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAg
ICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJb
JTRkXSBjb25zdHJ1Y3Rvcl9yZXRcdFx0ICVzICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShl
eGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSk7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCJbJTRkXSBjb25zdHJ1Y3Rvcl9yZXRcdFx0ICVzICVzIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDog
ewpAQCAtMTQwMiwxMyArMTM3NywxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGNvdW50
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBzdHJj
YXRcdFx0ICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCBjb3VudCk7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCJbJTRkXSBzdHJjYXRcdFx0ICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBjb3VudCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZTog
ewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRd
IHRvX3ByaW1pdGl2ZVx0ICVzLCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiWyU0ZF0gdG9fcHJpbWl0aXZlXHQgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9wbmFtZXM6IHsKQEAgLTE0MTcs
NyArMTM5Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAg
ICAgICAgICAgIGludCByMiA9IGl0WzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMyA9
IGl0WzRdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSBpdFs1XS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBnZXRfcG5hbWVzXHQgJXMsICVzLCAl
cywgJXMsICVkKC0+JWQpIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIyKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMykuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsg
b2Zmc2V0KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGdldF9wbmFtZXNcdCAlcywg
JXMsICVzLCAlcywgJWQoLT4lZCkiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIzKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAg
ICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfcG5hbWVzKSAtIDE7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMTQyOCwxMyArMTQwMywxMyBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICBpbnQgc2l6ZSA9IGl0WzRdLnUu
b3BlcmFuZDsKICAgICAgICAgICAgIGludCBpdGVyID0gaXRbNV0udS5vcGVyYW5kOwogICAgICAg
ICAgICAgaW50IG9mZnNldCA9IGl0WzZdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIlslNGRdIG5leHRfcG5hbWVcdCAlcywgJXMsICVzLCAlcywgJXMsICVkKC0+JWQpIiwgbG9j
YXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBkZXN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVj
LCBiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCBpKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShleGVjLCBzaXplKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCBpdGVyKS5kYXRhKCksIG9m
ZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0g
bmV4dF9wbmFtZVx0ICVzLCAlcywgJXMsICVzLCAlcywgJWQoLT4lZCkiLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKGRlc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGkpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHNpemUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KGl0ZXIpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CiAgICAgICAgICAgICBp
dCArPSBPUENPREVfTEVOR1RIKG9wX25leHRfcG5hbWUpIC0gMTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOiB7CiAgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYo
IlslNGRdIHB1c2hfd2l0aF9zY29wZVx0ICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVj
LCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHB1c2hfd2l0aF9z
Y29wZVx0ICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcG9wX3Njb3BlOiB7CkBAIC0x
NDQ1LDcgKzE0MjAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFt
CiAgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXMgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHB1
c2hfbmFtZV9zY29wZSBcdCVzLCAlcywgJXUiLCBsb2NhdGlvbiwgaWROYW1lKGlkMCwgbV9pZGVu
dGlmaWVyc1tpZDBdKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCBhdHRy
aWJ1dGVzKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHB1c2hfbmFtZV9zY29wZSBc
dCVzLCAlcywgJXUiLCBsb2NhdGlvbiwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bfam1wX3Njb3BlczogewpAQCAtMTQ1
NiwxOCArMTQzMSwxOCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFt
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jYXRjaDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBjYXRj
aFx0XHQgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gY2F0Y2hcdFx0ICVzIiwgbG9jYXRpb24sIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3BfdGhyb3c6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gdGhyb3dcdFx0ICVzIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIlslNGRdIHRocm93XHRcdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Rocm93
X3N0YXRpY19lcnJvcjogewogICAgICAgICAgICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7
CiAgICAgICAgICAgICBpbnQgazEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91
dC5wcmludGYoIlslNGRdIHRocm93X3N0YXRpY19lcnJvclx0ICVzLCAlcyIsIGxvY2F0aW9uLCBj
b25zdGFudE5hbWUoZXhlYywgazAsIGdldENvbnN0YW50KGswKSkuZGF0YSgpLCBrMSA/ICJ0cnVl
IiA6ICJmYWxzZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gdGhyb3dfc3RhdGlj
X2Vycm9yXHQgJXMsICVzIiwgbG9jYXRpb24sIGNvbnN0YW50TmFtZShrMCwgZ2V0Q29uc3RhbnQo
azApKS5kYXRhKCksIGsxID8gInRydWUiIDogImZhbHNlIik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CkBAIC0xNDgwLDE3ICsxNDU1LDE3
IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfd2lsbF9jYWxsOiB7CiAgICAgICAgICAgICBpbnQgZnVu
Y3Rpb24gPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRd
IHByb2ZpbGVfd2lsbF9jYWxsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBmdW5j
dGlvbikuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHByb2ZpbGVfd2ls
bF9jYWxsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShmdW5jdGlvbikuZGF0YSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRf
Y2FsbDogewogICAgICAgICAgICAgaW50IGZ1bmN0aW9uID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBwcm9maWxlX2RpZF9jYWxsXHQgJXMiLCBsb2Nh
dGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGZ1bmN0aW9uKS5kYXRhKCkpOworICAgICAgICAgICAg
b3V0LnByaW50ZigiWyU0ZF0gcHJvZmlsZV9kaWRfY2FsbFx0ICVzIiwgbG9jYXRpb24sIHJlZ2lz
dGVyTmFtZShmdW5jdGlvbikuZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2Ugb3BfZW5kOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGVuZFx0XHQgJXMiLCBsb2Nh
dGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiWyU0ZF0gZW5kXHRcdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2lmIEVOQUJMRShMTElOVF9DX0xP
T1ApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMCArMTA5LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAKICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUuZ2V0KCk7IH0KICAgICAgICAgCi0gICAg
ICAgIFN0cmluZyBpbmZlcnJlZE5hbWUoKSBjb25zdDsKKyAgICAgICAgQ1N0cmluZyBpbmZlcnJl
ZE5hbWUoKSBjb25zdDsKICAgICAgICAgQ29kZUJsb2NrSGFzaCBoYXNoKCkgY29uc3Q7Ci0gICAg
ICAgIFN0cmluZyBzb3VyY2VDb2RlRm9yVG9vbHMoKSBjb25zdDsgLy8gTm90IHF1aXRlIHRoZSBh
Y3R1YWwgc291cmNlIHdlIHBhcnNlZDsgdGhpcyB3aWxsIGRvIHRoaW5ncyBsaWtlIHByZWZpeCB0
aGUgc291cmNlIGZvciBhIGZ1bmN0aW9uIHdpdGggYSByZWlmaWVkIHNpZ25hdHVyZS4KLSAgICAg
ICAgU3RyaW5nIHNvdXJjZUNvZGVPbk9uZUxpbmUoKSBjb25zdDsgLy8gQXMgc291cmNlQ29kZUZv
clRvb2xzKCksIGJ1dCByZXBsYWNlcyBhbGwgd2hpdGVzcGFjZSBydW5zIHdpdGggYSBzaW5nbGUg
c3BhY2UuCisgICAgICAgIENTdHJpbmcgc291cmNlQ29kZUZvclRvb2xzKCkgY29uc3Q7IC8vIE5v
dCBxdWl0ZSB0aGUgYWN0dWFsIHNvdXJjZSB3ZSBwYXJzZWQ7IHRoaXMgd2lsbCBkbyB0aGluZ3Mg
bGlrZSBwcmVmaXggdGhlIHNvdXJjZSBmb3IgYSBmdW5jdGlvbiB3aXRoIGEgcmVpZmllZCBzaWdu
YXR1cmUuCisgICAgICAgIENTdHJpbmcgc291cmNlQ29kZU9uT25lTGluZSgpIGNvbnN0OyAvLyBB
cyBzb3VyY2VDb2RlRm9yVG9vbHMoKSwgYnV0IHJlcGxhY2VzIGFsbCB3aGl0ZXNwYWNlIHJ1bnMg
d2l0aCBhIHNpbmdsZSBzcGFjZS4KICAgICAgICAgdm9pZCBkdW1wQXNzdW1pbmdKSVRUeXBlKFBy
aW50U3RyZWFtJiwgSklUQ29kZTo6SklUVHlwZSkgY29uc3Q7CiAgICAgICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKQEAgLTk2OCw3ICs5NjgsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB2b2lkIGR1bXBCeXRlY29kZShQcmludFN0cmVhbSYsIEV4ZWNT
dGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJik7CiAK
LSAgICAgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoRXhlY1N0YXRlKiwgaW50IHIpIGNvbnN0Owor
ICAgICAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Q7CiAgICAgICAgIHZvaWQg
cHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25z
dCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAgICAgIHZvaWQgcHJpbnRCaW5h
cnlPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1
Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOwogICAgICAgICB2b2lkIHByaW50Q29uZGl0aW9uYWxK
dW1wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBJ
bnN0cnVjdGlvbiomLCBpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tIYXNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAJKHJldmlz
aW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tI
YXNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBDb2RlQmxvY2tIYXNoOjpD
b2RlQmxvY2tIYXNoKGNvbnN0IFNvdXJjCiAgICAgOiBtX2hhc2goMCkKIHsKICAgICBTSEExIHNo
YTE7Ci0gICAgc2hhMS5hZGRCeXRlcyhzb3VyY2VDb2RlLnRvU3RyaW5nKCkudXRmOCgpKTsKKyAg
ICBzaGExLmFkZEJ5dGVzKHNvdXJjZUNvZGUudG9VVEY4KCkpOwogICAgIFZlY3Rvcjx1aW50OF90
LCAyMD4gZGlnZXN0OwogICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKICAgICBtX2hhc2gg
Kz0gZGlnZXN0WzBdIHwgKGRpZ2VzdFsxXSA8PCA4KSB8IChkaWdlc3RbMl0gPDwgMTYpIHwgKGRp
Z2VzdFszXSA8PCAyNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDkgKzg3LDkg
QEAgQ29kZUJsb2NrSGFzaCBJbmxpbmVDYWxsRnJhbWU6Omhhc2goKSBjbwogICAgIHJldHVybiBl
eGVjdXRhYmxlLT5oYXNoRm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAotU3RyaW5nIElu
bGluZUNhbGxGcmFtZTo6aW5mZXJyZWROYW1lKCkgY29uc3QKK0NTdHJpbmcgSW5saW5lQ2FsbEZy
YW1lOjppbmZlcnJlZE5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZS5nZXQoKSktPmluZmVycmVkTmFtZSgpLnN0cmluZygpOwor
ICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZS5nZXQoKSkt
PmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKIH0KIAogQ29kZUJsb2NrKiBJbmxpbmVDYWxsRnJhbWU6
OmJhc2VsaW5lQ29kZUJsb2NrKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcg
KzExNCw3IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIC8vIEdldCB0aGUgY2FsbGVl
IGdpdmVuIGEgbWFjaGluZSBjYWxsIGZyYW1lIHRvIHdoaWNoIHRoaXMgSW5saW5lQ2FsbEZyYW1l
IGJlbG9uZ3MuCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlRm9yQ2FsbEZyYW1lKEV4ZWNTdGF0ZSop
IGNvbnN0OwogICAgIAotICAgIFN0cmluZyBpbmZlcnJlZE5hbWUoKSBjb25zdDsKKyAgICBDU3Ry
aW5nIGluZmVycmVkTmFtZSgpIGNvbnN0OwogICAgIENvZGVCbG9ja0hhc2ggaGFzaCgpIGNvbnN0
OwogICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2soKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDExIEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1HZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJ
bnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVu
dGlmaWVyJiBpZGVudCkKK0dldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21M
TEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0
cmluZ0ltcGwqIHVpZCkKIHsKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAg
VU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShpZGVudCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHVpZCk7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBi
eXRlY29kZUluZGV4OwogICAgIApAQCAtNTIsNyArNTIsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAg
ICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwg
aWRlbnQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgKnByb2Zp
bGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwog
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAgICBzcGVjaWZpY1ZhbHVl
ID0gMDsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKQEAgLTY0LDcgKzY0LDcgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogI2VuZGlmCiB9CiAKLXZv
aWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKEdldEJ5SWRTdGF0dXMmIHJlc3VsdCwg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJZGVudGlmaWVyJiBpZGVudCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCit2b2lkIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JDaGFpbihHZXRCeUlkU3Rh
dHVzJiByZXN1bHQsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RyaW5nSW1wbCogdWlkLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICNpZiBFTkFCTEUoSklUKSAmJiBFTkFCTEUoVkFMVUVf
UFJPRklMRVIpCiAgICAgLy8gVmFsaWRhdGUgdGhlIGNoYWluLiBJZiB0aGUgY2hhaW4gaXMgaW52
YWxpZCwgdGhlbiBjdXJyZW50bHkgdGhlIGJlc3QgdGhpbmcKQEAgLTkzLDcgKzkzLDcgQEAgdm9p
ZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oR2V0QgogICAgIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZTsKICAgICAgICAgCiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY3VycmVudFN0cnVjdHVy
ZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQs
IGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgKnByb2ZpbGVkQmxv
Y2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwogICAgIGlm
IChjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgc3BlY2lmaWNWYWx1
ZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNldCkpCkBAIC0xMDQs
MjggKzEwNCwyOCBAQCB2b2lkIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JDaGFpbihHZXRCCiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwogICAgIFVOVVNFRF9QQVJBTShwcm9maWxl
ZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0oaWRlbnQpOworICAgIFVOVVNFRF9QQVJBTSh1aWQp
OwogICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1cmUpOwogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOwogI2VuZGlmCiB9CiAKLUdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElk
ZW50aWZpZXImIGlkZW50KQorR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5n
SW1wbCogdWlkKQogewogICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+
bV9sb2NrKTsKICAgICAKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgVU5V
U0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShpZGVudCk7CisgICAg
VU5VU0VEX1BBUkFNKHVpZCk7CiAjaWYgRU5BQkxFKEpJVCkgJiYgRU5BQkxFKFZBTFVFX1BST0ZJ
TEVSKQogICAgIGlmICghcHJvZmlsZWRCbG9jay0+bnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Mo
KSkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNv
ZGVJbmRleCwgaWRlbnQpOworICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxl
ZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwogICAgIAogICAgIC8vIEZpcnN0IGNoZWNrIGlm
IGl0IG1ha2VzIGVpdGhlciBjYWxscywgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGJlIHN1cGVy
IGNhcmVmdWwsIG9yCiAgICAgLy8gaWYgaXQncyBub3Qgc2V0IGF0IGFsbCwgaW4gd2hpY2ggY2Fz
ZSB3ZSBwdW50LgogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IHByb2ZpbGVkQmxv
Y2stPmdldFN0dWJJbmZvKGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmICghc3R1YkluZm8uc2VlbikK
LSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJ
bmRleCwgaWRlbnQpOworICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJs
b2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwogICAgIAogICAgIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCogbGlzdDsKICAgICBpbnQgbGlzdFNpemU7CkBAIC0xNTcsMTQgKzE1NywxNCBA
QCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgcmVzdWx0Lm1f
d2FzU2VlbkluSklUID0gdHJ1ZTsgLy8gVGhpcyBpcyBpbnRlcmVzdGluZyBmb3IgYnl0ZWNvZGUg
ZHVtcGluZyBvbmx5LgogICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewogICAgIGNh
c2UgYWNjZXNzX3Vuc2V0OgotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxl
ZEJsb2NrLCBieXRlY29kZUluZGV4LCBpZGVudCk7CisgICAgICAgIHJldHVybiBjb21wdXRlRnJv
bUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7CiAgICAgICAgIAogICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOiB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwog
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKICAgICAgICAgSlNDZWxsKiBzcGVj
aWZpY1ZhbHVlOwogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSgKLSAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCwgYXR0cmli
dXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2st
PnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwogICAgICAgICBp
ZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgICAgIHNwZWNpZmljVmFsdWUg
PSAwOwogICAgICAgICAKQEAgLTE4OSw3ICsxODksNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3Jl
ZDsKICAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG15T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAg
ICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50LCBhdHRyaWJ1dGVzSWdub3JlZCwg
c3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVp
ZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwogICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9
IDA7CiAgICAgICAgICAgICAKQEAgLTIyMCw3ICsyMjAsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhN
YWtlc0NhbGxzLCB0cnVlKTsKICAgICAgICAgcmVzdWx0Lm1fY2hhaW4uYXBwZW5kKHN0dWJJbmZv
LnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGNvbXB1
dGVGb3JDaGFpbigKLSAgICAgICAgICAgIHJlc3VsdCwgcHJvZmlsZWRCbG9jaywgaWRlbnQsCisg
ICAgICAgICAgICByZXN1bHQsIHByb2ZpbGVkQmxvY2ssIHVpZCwKICAgICAgICAgICAgIHN0dWJJ
bmZvLnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0yMzEsNyArMjMxLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R1Yklu
Zm8udS5nZXRCeUlkQ2hhaW4uY291bnQ7ICsraSkKICAgICAgICAgICAgIHJlc3VsdC5tX2NoYWlu
LmFwcGVuZChzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi0+aGVhZCgpW2ldLmdldCgpKTsK
ICAgICAgICAgY29tcHV0ZUZvckNoYWluKAotICAgICAgICAgICAgcmVzdWx0LCBwcm9maWxlZEJs
b2NrLCBpZGVudCwKKyAgICAgICAgICAgIHJlc3VsdCwgcHJvZmlsZWRCbG9jaywgdWlkLAogICAg
ICAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI1NSwxMiArMjU1LDEyIEBAIEdldEJ5SWRT
dGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
fQogCi1HZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSWRlbnRpZmllciYgaWRlbnQpCitHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5n
SW1wbCogdWlkKQogewogICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgdGhlIHN1cGVyIHNp
bXBsZSBzZWxmIGFjY2VzcyBjYXNlLiBXZSBjb3VsZCBoYW5kbGUgdGhlCiAgICAgLy8gcHJvdG90
eXBlIGNhc2UgaW4gdGhlIGZ1dHVyZS4KICAgICAKLSAgICBpZiAoUHJvcGVydHlOYW1lKGlkZW50
KS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgIGlmICh0b1VJbnQz
MkZyb21TdHJpbmdJbXBsKHVpZCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICBpZiAoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpKQpAQCAtMjcw
LDEwICsyNzAsMTAgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAog
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICBH
ZXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV93YXNTZWVuSW5KSVQgPSBmYWxzZTsg
Ly8gVG8gbXkga25vd2xlZGdlIG5vYm9keSB0aGF0IHVzZXMgY29tcHV0ZUZvcihWTSYsIFN0cnVj
dHVyZSosIElkZW50aWZpZXImKSByZWFkcyB0aGlzIGZpZWxkLCBidXQgSSBtaWdodCBhcyB3ZWxs
IGJlIGhvbmVzdDogbm8sIGl0IHdhc24ndCBzZWVuIGluIHRoZSBKSVQsIHNpbmNlIEkgY29tcHV0
ZWQgaXQgc3RhdGljYWxseS4KKyAgICByZXN1bHQubV93YXNTZWVuSW5KSVQgPSBmYWxzZTsgLy8g
VG8gbXkga25vd2xlZGdlIG5vYm9keSB0aGF0IHVzZXMgY29tcHV0ZUZvcihWTSYsIFN0cnVjdHVy
ZSosIFN0cmluZ0ltcGwqKSByZWFkcyB0aGlzIGZpZWxkLCBidXQgSSBtaWdodCBhcyB3ZWxsIGJl
IGhvbmVzdDogbm8sIGl0IHdhc24ndCBzZWVuIGluIHRoZSBKSVQsIHNpbmNlIEkgY29tcHV0ZWQg
aXQgc3RhdGljYWxseS4KICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh2bSwgaWRlbnQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIHJlc3VsdC5t
X29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMs
IHNwZWNpZmljVmFsdWUpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQp
KQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsgLy8gSXQncyBw
cm9iYWJseSBhIHByb3RvdHlwZSBsb29rdXAuIEdpdmUgdXAgb24gbGlmZSBmb3Igbm93LCBldmVu
IHRob3VnaCB3ZSBjb3VsZCB0b3RhbGx5IGJlIHdheSBzbWFydGVyIGFib3V0IGl0LgogICAgIGlm
IChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDcgKzMzLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBJ
ZGVudGlmaWVyOwogCiBjbGFzcyBHZXRCeUlkU3RhdHVzIHsKIHB1YmxpYzoKQEAgLTcxLDggKzcw
LDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoKHN0YXRlID09IFNpbXBsZSkgPT0gKG9mZnNl
dCAhPSBpbnZhbGlkT2Zmc2V0KSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBHZXRCeUlkU3Rh
dHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRp
ZmllciYpOwotICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1
cmUqLCBJZGVudGlmaWVyJik7CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOworICAg
IHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUqLCBTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZTsgfQogICAgIApAQCAtOTAsOCArODksOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3YXNTZWVuSW5K
SVQoKSBjb25zdCB7IHJldHVybiBtX3dhc1NlZW5JbkpJVDsgfQogICAgIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgdm9pZCBjb21wdXRlRm9yQ2hhaW4oR2V0QnlJZFN0YXR1cyYgcmVzdWx0LCBDb2Rl
QmxvY2sqLCBJZGVudGlmaWVyJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIEdldEJ5SWRTdGF0
dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJ
ZGVudGlmaWVyJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUZvckNoYWluKEdldEJ5SWRTdGF0
dXMmIHJlc3VsdCwgQ29kZUJsb2NrKiwgU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmUqKTsKKyAg
ICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgU3RhdGUgbV9z
dGF0ZTsKICAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAx
NDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYgaWRl
bnQpCitQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJB
TShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oaWRlbnQpOworICAgIFVOVVNFRF9Q
QVJBTSh1aWQpOwogI2lmIEVOQUJMRShMTElOVCkKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRl
eDsKIApAQCAtNDksNyArNDksNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGcm9tCiAgICAgCiAgICAgaWYgKGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50Ojpn
ZXRPcGNvZGUobGxpbnRfb3BfcHV0X2J5X2lkKQogICAgICAgICB8fCBpbnN0cnVjdGlvblswXS51
Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9pZF9vdXRfb2ZfbGlu
ZSkpIHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkoKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50KTsKKyAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoKnByb2ZpbGVkQmxvY2st
PnZtKCksIHVpZCk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxp
ZE9mZnNldCk7CiAgICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSk7CiAgICAgQVNT
RVJUKGNoYWluKTsKICAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+dm0oKSwgaWRlbnQpOworICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9m
aWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQog
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCAwLCAwLCAwLCBpbnZh
bGlkT2Zmc2V0KTsKICAgICAKQEAgLTc4LDMyICs3OCwzMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYKIH0KIAotUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgSWRlbnRpZmllciYgaWRlbnQpCitQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihw
cm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgIAogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJs
b2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGlkZW50KTsKKyAgICBVTlVTRURfUEFSQU0odWlkKTsKICNpZiBFTkFCTEUoSklUKSAmJiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCiAgICAgaWYgKCFwcm9maWxlZEJsb2NrLT5udW1iZXJPZlN0cnVj
dHVyZVN0dWJJbmZvcygpKQotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxl
ZEJsb2NrLCBieXRlY29kZUluZGV4LCBpZGVudCk7CisgICAgICAgIHJldHVybiBjb21wdXRlRnJv
bUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7CiAgICAgCiAgICAgaWYg
KHByb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKGJ5dGVjb2RlSW5kZXgpKQogICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlk
T2Zmc2V0KTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBwcm9maWxl
ZEJsb2NrLT5nZXRTdHViSW5mbyhieXRlY29kZUluZGV4KTsKICAgICBpZiAoIXN0dWJJbmZvLnNl
ZW4pCi0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVj
b2RlSW5kZXgsIGlkZW50KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmls
ZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKICAgICAKICAgICBzd2l0Y2ggKHN0dWJJbmZv
LmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc191bnNldDoKLSAgICAgICAgcmV0dXJuIGNv
bXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgaWRlbnQpOworICAg
ICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4
LCB1aWQpOwogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZTogewog
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQogICAgICAgICAgICAgc3R1YkluZm8udS5w
dXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAg
ICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIGlkZW50KTsKKyAgICAgICAgICAgICAg
ICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkgewogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoCiAgICAgICAgICAg
ICAgICAgU2ltcGxlUmVwbGFjZSwKQEAgLTExOSw3ICsxMTksNyBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIEFTU0VSVChzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhh
c0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gCiAg
ICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KAotICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCBpZGVudCk7
CisgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKAogICAgICAgICAgICAgICAgIFNpbXBsZVRyYW5zaXRpb24sCkBAIC0xMzksOSArMTM5LDkg
QEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCiB9CiAKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0RpcmVjdCkKK1B1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QpCiB7
Ci0gICAgaWYgKFByb3BlcnR5TmFtZShpZGVudCkuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCkKKyAgICBpZiAodG9VSW50MzJGcm9tU3RyaW5nSW1wbCh1aWQpICE9IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgCiAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QoKSkKQEAgLTE1Myw3ICsxNTMsNyBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICBK
U0NlbGwqIHNwZWNpZmljVmFsdWVJZ25vcmVkOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICB2bSwgaWRlbnQsIGF0dHJpYnV0
ZXMsIHNwZWNpZmljVmFsdWVJZ25vcmVkKTsKKyAgICAgICAgdm0sIHVpZCwgYXR0cmlidXRlcywg
c3BlY2lmaWNWYWx1ZUlnbm9yZWQpOwogICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsK
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoQWNjZXNzb3IgfCBSZWFkT25seSkpCiAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKQEAgLTE3NCw3ICsxNzQs
NyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgCiAgICAg
aWYgKCFpc0RpcmVjdCkgewogICAgICAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBz
ZXR0ZXJzIG9yIHJlYWQtb25seSBwcm9wZXJ0aWVzLCB0aGVuIGdpdmUgdXAuCi0gICAgICAgIGlm
IChzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgaWRlbnQp
KQorICAgICAgICBpZiAoc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3Jl
VG8odm0sIHVpZCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzbid0
IGJlZW4gbm9ybWFsaXplZCAoaS5lLiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJpZXMp
CkBAIC0yMDEsNyArMjAxLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgIC8vIC0gSWYgd2UncmUgbm90IHN0b3JpbmcgYSB2YWx1ZSB0aGF0IGNvdWxkIGJl
IHNwZWNpZmljOiBhZ2FpbiwgdGhpcyB3b3VsZCBvbmx5IGJlIGEKICAgICAvLyAgIHByb2JsZW0g
aWYgdGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgd2hp
Y2ggd2UgY2hlY2sgZm9yCiAgICAgLy8gICBieSBwYXNzaW5nIDAgZm9yIHRoZSBzcGVjaWZpY1Zh
bHVlLgotICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIGlkZW50LCAwLCAwLCBvZmZz
ZXQpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHVpZCwgMCwgMCwgb2Zmc2V0
KTsKICAgICBpZiAoIXRyYW5zaXRpb24pCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOyAvLyBUaGlzIG9jY3VycyBpbiBiaXphcnJlIGNhc2VzIG9ubHkuIFNlZSBh
Ym92ZS4KICAgICBBU1NFUlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lm
aWNWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTEgKzI4LDExIEBA
CiAKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIENvZGVCbG9jazsKLWNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBWTTsKIGNsYXNzIEpT
R2xvYmFsT2JqZWN0OwogY2xhc3MgU3RydWN0dXJlOwpAQCAtOTAsOCArOTAsOCBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVCgobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0g
VGFrZXNTbG93UGF0aCkgPT0gKG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQpKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0
dXMgY29tcHV0ZUZvcihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSWRlbnRpZmll
ciYsIGJvb2wgaXNEaXJlY3QpOworICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3Io
Q29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKKyAg
ICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QpOwogICAgIAogICAgIFN0
YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIApAQCAtMTA3LDcgKzEw
Nyw3IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldDsgfQogICAgIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBj
b21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElkZW50
aWZpZXImKTsKKyAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVC
bG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAg
ICAgU3RhdGUgbV9zdGF0ZTsKICAgICBTdHJ1Y3R1cmUqIG1fb2xkU3RydWN0dXJlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNl
LmNwcAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1JlZHVjZVdoaXRlc3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyNyArMjYsMjkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCiAKLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5n
UHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLVN0cmluZyByZWR1Y2VXaGl0ZXNw
YWNlKGNvbnN0IFN0cmluZyYgaW5wdXQpCitDU3RyaW5nIHJlZHVjZVdoaXRlc3BhY2UoY29uc3Qg
Q1N0cmluZyYgaW5wdXQpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIFN0cmlu
Z1ByaW50U3RyZWFtIG91dDsKKyAgICAKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gaW5wdXQuZGF0
YSgpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGgoKTsp
IHsKLSAgICAgICAgaWYgKGlzQVNDSUlTcGFjZShpbnB1dFtpXSkpIHsKLSAgICAgICAgICAgIHdo
aWxlIChpIDwgaW5wdXQubGVuZ3RoKCkgJiYgaXNBU0NJSVNwYWNlKGlucHV0W2ldKSkKKyAgICAg
ICAgaWYgKGlzQVNDSUlTcGFjZShkYXRhW2ldKSkgeworICAgICAgICAgICAgd2hpbGUgKGkgPCBp
bnB1dC5sZW5ndGgoKSAmJiBpc0FTQ0lJU3BhY2UoZGF0YVtpXSkpCiAgICAgICAgICAgICAgICAg
KytpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgIG91dC5w
cmludChDaGFyYWN0ZXJEdW1wKCcgJykpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW5wdXRbaV0pOworICAgICAgICBvdXQucHJpbnQo
Q2hhcmFjdGVyRHVtcChkYXRhW2ldKSk7CiAgICAgICAgICsraTsKICAgICB9CiAgICAgCi0gICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuaAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsMTIgKzI2LDEyIEBACiAjaWZuZGVmIFJlZHVjZVdoaXRlc3BhY2VfaAogI2RlZmlu
ZSBSZWR1Y2VXaGl0ZXNwYWNlX2gKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIC8vIFJl
cGxhY2UgYWxsIHdoaXRlc3BhY2UgcnVucyB3aXRoIGEgc2luZ2xlIHNwYWNlLgotU3RyaW5nIHJl
ZHVjZVdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJik7CitDU3RyaW5nIHJlZHVjZVdoaXRlc3BhY2Uo
Y29uc3QgQ1N0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNw
cAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jl
c29sdmVHbG9iYWxTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTEgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVzIGNvbXB1dGVG
b3JTdHJ1Y3R1cmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQorc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29tcHV0
ZUZvclN0cnVjdHVyZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKICAg
ICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkoKmNvZGVCbG9jay0+dm0oKSwgaWRlbnRpZmllciwgYXR0
cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpjb2RlQmxvY2stPnZtKCksIHVpZCwgYXR0
cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKQogICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKICAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKQEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0
dXMgY29tcHV0ZUZvclN0cgogICAgIHJldHVybiBSZXNvbHZlR2xvYmFsU3RhdHVzKFJlc29sdmVH
bG9iYWxTdGF0dXM6OlNpbXBsZSwgc3RydWN0dXJlLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUpOwog
fQogCi1SZXNvbHZlR2xvYmFsU3RhdHVzIFJlc29sdmVHbG9iYWxTdGF0dXM6OmNvbXB1dGVGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCwgUmVzb2x2ZU9wZXJhdGlvbiogb3BlcmF0aW9uLCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQorUmVzb2x2ZUdsb2JhbFN0YXR1cyBSZXNvbHZlR2xvYmFs
U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQsIFJlc29sdmVPcGVy
YXRpb24qIG9wZXJhdGlvbiwgU3RyaW5nSW1wbCogdWlkKQogewogICAgIENvZGVCbG9ja0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgIApAQCAtNTQsNyArNTQsNyBAQCBSZXNv
bHZlR2xvYmFsU3RhdHVzIFJlc29sdmVHbG9iYWxTdGF0dXM6CiAgICAgaWYgKCFvcGVyYXRpb24t
Pm1fc3RydWN0dXJlKQogICAgICAgICByZXR1cm4gUmVzb2x2ZUdsb2JhbFN0YXR1cygpOwogICAg
IAotICAgIHJldHVybiBjb21wdXRlRm9yU3RydWN0dXJlKGNvZGVCbG9jaywgb3BlcmF0aW9uLT5t
X3N0cnVjdHVyZS5nZXQoKSwgaWRlbnRpZmllcik7CisgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHJ1
Y3R1cmUoY29kZUJsb2NrLCBvcGVyYXRpb24tPm1fc3RydWN0dXJlLmdldCgpLCB1aWQpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuaAkocmV2aXNpb24gMTQ5MzUxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksMTEgKzI5LDExIEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2lu
Y2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
Q29kZUJsb2NrOwotY2xhc3MgSWRlbnRpZmllcjsKIHN0cnVjdCBSZXNvbHZlT3BlcmF0aW9uOwog
Y2xhc3MgU3RydWN0dXJlOwogCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIHN0YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJs
b2NrKiwgaW50IGJ5dGVjb2RlSW5kZXgsIFJlc29sdmVPcGVyYXRpb24qLCBJZGVudGlmaWVyJik7
CisgICAgc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBp
bnQgYnl0ZWNvZGVJbmRleCwgUmVzb2x2ZU9wZXJhdGlvbiosIFN0cmluZ0ltcGwqIHVpZCk7CiAg
ICAgCiAgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJ
KHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzIsNyArMTI3Miw3IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1
cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLCBzdHJ1
Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9pZGVudGlmaWVyc1tub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKTsKICAgICAgICAgICAg
ICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQXNz
ZXJ0IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUgY29tcHV0ZUZvcigp
IG1ldGhvZAogICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBiZSBhYmxlIHRvIHJl
dHVybi4KQEAgLTE0NzMsNyArMTQ3Myw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVm
ZmVjdHModW5zaWcKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksCiAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLm1faWRlbnRpZmllcnNbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwKICAgICAgICAgICAg
ICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAgaWYgKHN0YXR1
cy5pc1NpbXBsZVJlcGxhY2UoKSkgewogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0OTM1MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQ3LDcgKzExNDcsNyBAQCBwcml2YXRlOgogICAgIC8vIGlubGluaW5n
LgogICAgIGJvb2wgbV9oYXZlQnVpbHRPcGVyYW5kTWFwczsKICAgICAvLyBNYXBwaW5nIGJldHdl
ZW4gaWRlbnRpZmllciBuYW1lcyBhbmQgbnVtYmVycy4KLSAgICBJZGVudGlmaWVyTWFwIG1faWRl
bnRpZmllck1hcDsKKyAgICBDb25jdXJyZW50SWRlbnRpZmllck1hcCBtX2lkZW50aWZpZXJNYXA7
CiAgICAgLy8gTWFwcGluZyBiZXR3ZWVuIHZhbHVlcyBhbmQgY29uc3RhbnQgbnVtYmVycy4KICAg
ICBKU1ZhbHVlTWFwIG1fanNWYWx1ZU1hcDsKICAgICAvLyBJbmRleCBvZiB0aGUgZW1wdHkgdmFs
dWUsIG9yIFVJTlRfTUFYIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcuIFRoaXMgaXMgYSBob3JyaWJs
ZQpAQCAtMTg3Miw3ICsxODcyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZl
T3BlcmF0aQogICAgIFJlc29sdmVPcGVyYXRpb24qIHJlc29sdmVWYWx1ZU9wZXJhdGlvbiA9IHBj
OwogICAgIHN3aXRjaCAocmVzb2x2ZVZhbHVlT3BlcmF0aW9uLT5tX29wZXJhdGlvbikgewogICAg
IGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHk6IHsKLSAg
ICAgICAgUmVzb2x2ZUdsb2JhbFN0YXR1cyBzdGF0dXMgPSBSZXNvbHZlR2xvYmFsU3RhdHVzOjpj
b21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9jdXJyZW50SW5k
ZXgsIHJlc29sdmVWYWx1ZU9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRp
ZmllcikpOworICAgICAgICBSZXNvbHZlR2xvYmFsU3RhdHVzIHN0YXR1cyA9IFJlc29sdmVHbG9i
YWxTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBt
X2N1cnJlbnRJbmRleCwgcmVzb2x2ZVZhbHVlT3BlcmF0aW9uLCBtX2dyYXBoLm1faWRlbnRpZmll
cnNbaWRlbnRpZmllcl0pOwogICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlKCkpOwogCkBAIC0xOTA4LDggKzE5MDgsOCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpCiAKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKIAotICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoaWRlbnRpZmllcik7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudC5pbXBsKCkpOworICAg
ICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmllcl07
CisgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRh
YmxlKCktPmdldCh1aWQpOwogICAgICAgICBpZiAoIW1fZ3JhcGgubV93YXRjaHBvaW50cy5pc1N0
aWxsVmFsaWQoZW50cnkud2F0Y2hwb2ludFNldCgpKSkgewogICAgICAgICAgICAgKnZhbHVlID0g
YWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhnbG9iYWxPYmplY3QtPmFzc2VydFJlZ2lz
dGVySXNJblRoaXNPYmplY3QocGMtPm1fcmVnaXN0ZXJBZGRyZXNzKSksIE9wSW5mbyhwcmVkaWN0
aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI1ODUsOSArMjU4NSw5IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlm
aWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9n
cmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgR2V0QnlJ
ZFN0YXR1cyBnZXRCeUlkU3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAg
ICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1fY3VycmVudElu
ZGV4LCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssIG1fY3VycmVudEluZGV4LCB1aWQpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgICAgIGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5SWRT
dGF0dXMpOwpAQCAtMjYwOCw3ICsyNjA4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzID0g
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXgsCi0g
ICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikp
OworICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVyTnVtYmVy
XSk7CiAgICAgICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAgICAgICAKQEAgLTI3MjEsOCAr
MjcyMSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2s7CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOwotICAgICAgICAgICAgU3ltYm9s
VGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50
aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgubV9p
ZGVudGlmaWVyc1tpZGVudGlmaWVyTnVtYmVyXTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50
cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAg
ICAgICAgaWYgKCFlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7CiAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaCgKICAgICAgICAgICAgICAgICAgICAgUHV0R2xvYmFsVmFyLApAQCAtMzIwOSw3ICsz
MjA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFZhcmlhYmxlUHV0Q2hlY2tlZDog
ewogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2s7CiAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgU3ltYm9s
VGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXIpLmltcGwoKSk7CisgICAgICAgICAgICAgICAg
U3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0
KG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVyXSk7CiAgICAgICAgICAgICAgICAgaWYg
KGVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQdXRHbG9iYWxWYXJDaGVjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8oY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVj
dChwdXRUb0Jhc2UtPm1fcmVnaXN0ZXJBZGRyZXNzKSksCkBAIC0zNTcyLDkgKzM1NzIsOSBAQCBC
eXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7
CiAgICAgICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoaSku
aW1wbCgpOwotICAgICAgICAgICAgSWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGJ5
dGVDb2RlUGFyc2VyLT5tX2lkZW50aWZpZXJNYXAuYWRkKHJlcCwgYnl0ZUNvZGVQYXJzZXItPm1f
Y29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpOworICAgICAgICAgICAgQ29uY3VycmVu
dElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9pZGVu
dGlmaWVyTWFwLmFkZChyZXAsIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1faWRlbnRpZmllcnMu
bnVtYmVyT2ZJZGVudGlmaWVycygpKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZElkZW50
aWZpZXIoSWRlbnRpZmllcihieXRlQ29kZVBhcnNlci0+bV92bSwgcmVwKSk7CisgICAgICAgICAg
ICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9pZGVudGlmaWVycy5hZGRMYXppbHkocmVw
KTsKICAgICAgICAgICAgIG1faWRlbnRpZmllclJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9j
ay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JO
b2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIHZtKCksIHN0cnVjdHVy
ZSwgY29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgICAgICAg
ICAgICAgICAgICB2bSgpLCBzdHJ1Y3R1cmUsIG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlm
aWVyTnVtYmVyXSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0
dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQg
aGFuZGxlIHByb3RvdHlwZSBjYXNlcy4KQEAgLTIyMSw3ICsyMjEsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICB2bSgpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihjb2RlT3JpZ2luKSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLAot
ICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVt
YmVyKSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZp
ZXJOdW1iZXJdLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJl
Y3QpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2lt
cGxlUmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRl
bnRpZmllcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR0Rlc2lyZWRJZGVudGlmaWVycy5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRGVzaXJlZElkZW50aWZpZXJz
OjpEZXNpcmVkSWRlbnRpZmllcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCit7Cit9CisKK0Rlc2lyZWRJZGVudGlmaWVyczo6fkRlc2lyZWRJZGVu
dGlmaWVycygpCit7Cit9CisKK3ZvaWQgRGVzaXJlZElkZW50aWZpZXJzOjphZGRMYXppbHkoU3Ry
aW5nSW1wbCogcmVwKQoreworICAgIG1fYWRkZWRJZGVudGlmaWVycy5hcHBlbmQocmVwKTsKK30K
Kwordm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFkZChWTSYgdm0pCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYWRkZWRJZGVudGlmaWVycy5zaXplKCk7ICsraSkgewor
ICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSBtX2FkZGVkSWRlbnRpZmllcnNbaV07CisgICAgICAg
IEFTU0VSVChyZXAtPmhhc0F0TGVhc3RPbmVSZWYoKSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5h
ZGRJZGVudGlmaWVyKElkZW50aWZpZXIoJnZtLCByZXApKTsKKyAgICB9Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVu
dGlmaWVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNpcmVkSWRlbnRp
ZmllcnNfaAorI2RlZmluZSBERkdEZXNpcmVkSWRlbnRpZmllcnNfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBEZXNpcmVkSWRlbnRpZmllcnMgeworcHVibGljOgorICAgIERlc2ly
ZWRJZGVudGlmaWVycyhDb2RlQmxvY2sqKTsKKyAgICB+RGVzaXJlZElkZW50aWZpZXJzKCk7Cisg
ICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZJZGVudGlmaWVycygpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSArIG1fYWRkZWRJZGVudGlm
aWVycy5zaXplKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkTGF6aWx5KFN0cmluZ0ltcGwq
KTsKKyAgICAKKyAgICBTdHJpbmdJbXBsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIFN0cmluZ0ltcGwqIHJlc3VsdDsKKyAgICAgICAgaWYgKGluZGV4IDwgbV9jb2Rl
QmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGluZGV4KS5pbXBsKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlc3VsdCA9IG1fYWRkZWRJZGVudGlmaWVyc1tpbmRleCAtIG1fY29kZUJsb2NrLT5udW1i
ZXJPZklkZW50aWZpZXJzKCldOworICAgICAgICBBU1NFUlQocmVzdWx0LT5oYXNBdExlYXN0T25l
UmVmKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBTdHJpbmdJ
bXBsKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KKyAgICAKKyAgICB2b2lkIHJlYWxseUFkZChWTSYpOworICAgIAorcHJpdmF0ZToKKyAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFZlY3RvcjxTdHJpbmdJbXBsKj4gbV9hZGRlZElk
ZW50aWZpZXJzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdEZXNpcmVkSWRlbnRpZmllcnNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMSw3ICs3MTEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24o
KSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrKCkt
PmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSB2bSgpLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1faWRlbnRpZmllcnNbbm9kZS0+
aWRlbnRpZmllck51bWJlcigpXSAhPSB2bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwog
ICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKQEAgLTEwMTcsMTIgKzEw
MTcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBMZXQgdGhlIHNsb3cg
cGF0aCB3b3JyeSBhYm91dCBpdC4KICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1N0cmluZ1Byb3Rv
dHlwZU1ldGhvZFNhbmUoU3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50KQorICAgIGJvb2wgaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5l
KFN0cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQpCiAg
ICAgewogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzVW51c2VkOwogICAgICAgICBKU0NlbGwq
IHNwZWNpZmljVmFsdWU7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cmluZ1By
b3RvdHlwZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAgICAgdm0oKSwgaWRl
bnQsIGF0dHJpYnV0ZXNVbnVzZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgdm0oKSwg
dWlkLCBhdHRyaWJ1dGVzVW51c2VkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKCFpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIApA
QCAtMTA2MSw5ICsxMDYxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gKHRoYXQgd291bGQgY2Fs
bCB0b1N0cmluZygpKS4gV2UgZG9uJ3Qgd2FudCB0aGUgREZHIHRvIGhhdmUgdG8gZGlzdGluZ3Vp
c2gKICAgICAgICAgLy8gYmV0d2VlbiB0aGUgdHdvLCBqdXN0IGJlY2F1c2UgdGhhdCBzZWVtcyBs
aWtlIGl0IHdvdWxkIGdldCBjb25mdXNpbmcuIFNvIHdlCiAgICAgICAgIC8vIGp1c3QgcmVxdWly
ZSBib3RoIG1ldGhvZHMgdG8gYmUgc2FuZS4KLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlw
ZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMt
PnZhbHVlT2YpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJp
bmdQcm90b3R5cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90
eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVydHlOYW1l
cy0+dG9TdHJpbmcpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShz
dHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuaW1w
bCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2MKICAgICAsIG1faGFzQXJndW1lbnRzKGZhbHNlKQogICAgICwgbV9vc3JF
bnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICwgbV9tdXN0SGFu
ZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCisgICAgLCBtX2lkZW50aWZpZXJzKGNvZGVCbG9j
aykKICAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKICAgICAsIG1fZm9ybShM
b2FkU3RvcmUpCiAgICAgLCBtX3VuaWZpY2F0aW9uU3RhdGUoTG9jYWxseVVuaWZpZWQpCkBAIC0x
ODgsNyArMTg5LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAog
ICAgIGlmIChub2RlLT5oYXNSZWdpc3RlclBvaW50ZXIoKSkKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiZ2xvYmFsIiwgZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5maW5kUmVn
aXN0ZXJJbmRleChub2RlLT5yZWdpc3RlclBvaW50ZXIoKSksICIoIiwgUmF3UG9pbnRlcihub2Rl
LT5yZWdpc3RlclBvaW50ZXIoKSksICIpIik7CiAgICAgaWYgKG5vZGUtPmhhc0lkZW50aWZpZXIo
KSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCksICJ7IiwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigp
KS5zdHJpbmcoKSwgIn0iKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCksICJ7IiwgbV9pZGVudGlmaWVyc1tub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCldLCAifSIpOwogICAgIGlmIChub2RlLT5oYXNTdHJ1Y3R1cmVTZXQoKSkgewogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytp
KQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9k
ZS0+c3RydWN0dXJlU2V0KClbaV0pLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPnN0cnVj
dHVyZVNldCgpW2ldLT5pbmRleGluZ1R5cGUoKSksICIpIik7CkBAIC0yMTcsNyArMjE4LDcgQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIH0KICAgICBpZiAo
bm9kZS0+aGFzU3RvcmFnZUFjY2Vzc0RhdGEoKSkgewogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0
YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV07Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgc3RvcmFn
ZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyKS5zdHJpbmcoKSwgIn0iKTsKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVy
TnVtYmVyLCAieyIsIG1faWRlbnRpZmllcnNbc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51
bWJlcl0sICJ9Iik7CiAgICAgICAgIG91dC5wcmludCgiLCAiLCBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpOwogICAgIH0KICAgICBBU1NFUlQobm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+aGFzTG9jYWwoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDkzNTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJERkdBcmd1bWVudFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHQXNz
ZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRG
R0Rlc2lyZWRJZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkRGR0Rlc2lyZWRXYXRjaHBvaW50cy5o
IgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0
ZS5oIgpAQCAtNzIyLDYgKzcyMyw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX29zckVudHJ5
Qnl0ZWNvZGVJbmRleDsKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtX211c3RIYW5kbGVWYWx1ZXM7
CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzIG1fd2F0Y2hwb2ludHM7CisgICAgRGVzaXJlZElkZW50
aWZpZXJzIG1faWRlbnRpZmllcnM7CiAgICAgCiAgICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0
ZSBtX2ZpeHBvaW50U3RhdGU7CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNDkzNTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ3LDYgKzI0Nyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICBjb2RlQmxvY2soKS0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRl
U2hyaW5rKTsKICAgICAKICAgICBtX2dyYXBoLm1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKCk7Cisg
ICAgbV9ncmFwaC5tX2lkZW50aWZpZXJzLnJlYWxseUFkZCgqbV92bSk7CiB9CiAKIGJvb2wgSklU
Q29tcGlsZXI6OmNvbXBpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsMTUgKzI2Nywx
NSBAQCB2b2lkKiBERkdfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuCiBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKIAogI2RlZmluZSBKX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIElkZW50aWZpZXIqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZS
T01fQVNNIFdURl9JTlRFUk5BTDsgXAorRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBmdW5j
dGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCos
IFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCiBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKQogCiAjZGVm
aW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikg
XAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJl
c3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIElkZW50aWZpZXIqLCBSZXR1cm5BZGRyZXNz
UHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAorRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZS
T01fQVNNIFdURl9JTlRFUk5BTDsgXAogRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKSShmdW5jdGlvbikKIAogI2RlZmluZSBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi12b2lkIERGR19PUEVSQVRJT04gZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBJ
ZGVudGlmaWVyKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5U
RVJOQUw7IFwKK3ZvaWQgREZHX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5B
ZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAogRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pCiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQ4NCw3MCArNDg0LDc0IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChl
eGVjLCAqcHJvcGVydHlOYW1lLCBzbG90KSk7CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQs
IHNsb3QpKTsKIH0KIAogSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJ
KG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCisKKyAgICBJZGVudGlmaWVy
IGlkZW50KHZtLCB1aWQpOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAg
IFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNl
VmFsdWUuZ2V0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CiAKICAgICBpZiAoYWNjZXNzVHlw
ZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAg
ICAgZGZnQnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsICpwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvKTsKKyAgICAgICAgZGZnQnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
SShvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3QpOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5
TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAor
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwog
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKICAgICAK
ICAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5h
Y2Nlc3NUeXBlKSkKLSAgICAgICAgZGZnQnVpbGRHZXRCeUlEUHJvdG9MaXN0KGV4ZWMsIGJhc2VW
YWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOworICAgICAgICBkZmdCdWlsZEdl
dEJ5SURQcm90b0xpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8pOwog
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBKX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplV2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0Vu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJ
bXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICAKKworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CiAgICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVy
bkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwg
c2xvdCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBz
bG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKSkgewogICAgICAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAg
ICAgICAgICAgIGRmZ1JlcGF0Y2hHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgKnByb3BlcnR5TmFt
ZSwgc2xvdCwgc3R1YkluZm8pOworICAgICAgICAgICAgZGZnUmVwYXRjaEdldEJ5SUQoZXhlYywg
YmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8pOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKICAgICB9CkBAIC01NTUsMTIgKzU1OSwxNCBAQCBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBJZGVudGlmaWVyKiBpZGVudCkKK0Vu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZnVu
Y3Rpb24sIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCAqaWRlbnQp
KTsKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIAorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoZnVuY3Rpb24oZXhlYywgYXNPYmplY3QoYmFzZSksIGlkZW50KSk7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiB2YWx1ZSkKQEAgLTczNyw1MCArNzQzLDU1
IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QKICAgICByZXR1cm4g
YXNSZWdFeHBPYmplY3QoYmFzZSktPnRlc3QoZXhlYywgaW5wdXQpOwogfQogICAgICAgICAKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHBy
b3BlcnR5TmFtZSkKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKKyAgICBJZGVudGlmaWVy
IGlkZW50KHZtLCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOwotICAgIGJh
c2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCAqcHJvcGVydHlOYW1lLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+
cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGZhbHNlKTsKLSAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwgZXhlYywgKnBy
b3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIGJh
c2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCit2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKICAgICBBU1NFUlQoYmFzZS0+aXNP
YmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJv
cGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgYXNP
YmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCit2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJ
bXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CiAgICAgQVNTRVJUKGJh
c2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgKnByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwor
ICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogVl9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpOwot
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAorICAgIElkZW50aWZp
ZXIgaWRlbnQodm0sIHVpZCk7CiAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhl
Yy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5
cGUpOwogCkBAIC03ODgsMjMgKzc5OSwyNCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZFN0cmljCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QodHJ1ZSk7CiAgICAgCi0gICAgYmFzZVZhbHVlLnB1dChleGVjLCAqcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFs
dWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
aWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIGRmZ1JlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VW
YWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7CisgICAgICAg
IGRmZ1JlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBOb3REaXJlY3QpOwogICAgIGVsc2UKICAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CiB9
CiAKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBw
cm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3ZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIApAQCAtODEyLDIzICs4MjQs
MjQgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdAogICAgIEpTVmFs
dWUgYmFzZVZhbHVlKGJhc2UpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlKTsKICAg
ICAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsK
KyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAg
aWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAg
ICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCAqcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKKyAgICAgICAgZGZnUmVwYXRjaFB1dEJ5SUQoZXhl
YywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7CiAgICAgZWxz
ZQogICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKIH0KIAogVl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RP
cHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CiAgICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFk
ZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogCkBAIC04MzYsMjMgKzg0OSwyNCBAQCB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QodHJ1ZSk7CiAgICAgCiAgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2Jq
ZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZh
bHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICBkZmdSZXBhdGNoUHV0QnlJRChleGVjLCBiYXNl
LCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKKyAgICAgICAgZGZnUmVw
YXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwog
ICAgIGVsc2UKICAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CiB9CiAKIFZfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9w
ZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3ZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRk
cmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxs
KiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwog
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIApAQCAtODYwLDIzICs4
NzQsMjQgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlKTsKICAgICAKICAgICBBU1NFUlQoYmFzZS0+aXNPYmpl
Y3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCAqcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVj
LT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIGRmZ1JlcGF0Y2hQ
dXRCeUlEKGV4ZWMsIGJhc2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3Qp
OworICAgICAgICBkZmdSZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1
YkluZm8sIERpcmVjdCk7CiAgICAgZWxzZQogICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsK
IH0KIAogVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRp
b25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJv
cGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CiAgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZv
KHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogCkBAIC04ODQsMjAgKzg5OSwyMSBA
QCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUoYmFzZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CiAgICAgCi0g
ICAgYmFzZVZhbHVlLnB1dChleGVjLCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAg
YmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChh
Y2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgZGZnQnVpbGRQdXRCeUlkTGlzdChleGVjLCBi
YXNlVmFsdWUsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAg
IGRmZ0J1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1Yklu
Zm8sIE5vdERpcmVjdCk7CiB9CiAKIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWls
ZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKKyAgICBJZGVudGlmaWVy
IGlkZW50KHZtLCB1aWQpOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KTsKIApAQCAtOTA1LDIwICs5MjEsMjEgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWROb25TdAogICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGZhbHNlKTsKICAgICAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsICpwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1
ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNz
VHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBk
ZmdCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIE5vdERpcmVjdCk7CisgICAgZGZnQnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNl
VmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKIH0KIAogVl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0QnVpbGRMaXN0KTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVy
dHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CiAgICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJ
bmZvKHJldHVybkFkZHJlc3MpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogICAgIApAQCAtOTI2LDIwICs5
NDMsMjEgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOwogICAgIAogICAgIEFTU0VSVChiYXNlLT5pc09iamVj
dCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksICpwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsICpwcm9wZXJ0
eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworICAgIGRmZ0J1aWxkUHV0QnlJZExpc3Qo
ZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwogfQogCiBWX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVy
KiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3ZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0V2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwg
dWlkKTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2so
KS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
ID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CiAKQEAgLTk0
NywxMiArOTY1LDEyIEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7CiAgICAgCiAgICAgQVNTRVJUKGJhc2Ut
PmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
KnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNz
VHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGRmZ0J1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwg
KnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CisgICAgZGZnQnVpbGRQdXRC
eUlkTGlzdChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CiB9CiAK
IHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
QEAgLTEyMTEsMzAgKzEyMjksMzEgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlm
eUdsb2JhbAogICAgIHdhdGNocG9pbnRTZXQtPm5vdGlmeVdyaXRlKCk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIElk
ZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMpCitF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmUoRXhlY1N0YXRlKiBl
eGVjLCBTdHJpbmdJbXBsKiB1aWQsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2
ZShleGVjLCAqcHJvcGVydHlOYW1lLCBvcGVyYXRpb25zKSk7CisgICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmUo
ZXhlYywgaWRlbnQsIG9wZXJhdGlvbnMpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZShFeGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXIqIHBy
b3BlcnR5TmFtZSwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJh
dGlvbiogcHV0VG9CYXNlT3BlcmF0aW9ucykKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmVzb2x2ZUJhc2UoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiB1aWQsIFJl
c29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFz
ZU9wZXJhdGlvbnMpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlQmFzZShleGVjLCAqcHJvcGVydHlOYW1lLCBmYWxzZSwg
b3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9ucykpOworICAgIElkZW50aWZpZXIgaWRlbnQo
dm0sIHVpZCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlQmFz
ZShleGVjLCBpZGVudCwgZmFsc2UsIG9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbnMpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZVN0
cmljdFB1dChFeGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmVzb2x2
ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3Bl
cmF0aW9ucykKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJh
c2VTdHJpY3RQdXQoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiB1aWQsIFJlc29sdmVPcGVy
YXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlv
bnMpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1Njb3BlOjpyZXNvbHZlQmFzZShleGVjLCAqcHJvcGVydHlOYW1lLCB0cnVlLCBvcGVyYXRpb25z
LCBwdXRUb0Jhc2VPcGVyYXRpb25zKSk7CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsIGlk
ZW50LCB0cnVlLCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb25zKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUq
IGV4ZWMsIFJlc29sdmVPcGVyYXRpb24qIHJlc29sdmVPcGVyYXRpb24sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUqIGV4ZWMsIFJl
c29sdmVPcGVyYXRpb24qIHJlc29sdmVPcGVyYXRpb24sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEyNDIsNyArMTI2
MSw4IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBVTlVT
RURfUEFSQU0ocmVzb2x2ZU9wZXJhdGlvbik7CiAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7CiAgICAgQVNTRVJUKHJlc29sdmVPcGVyYXRpb24tPm1fb3BlcmF0aW9uID09IFJlc29sdmVP
cGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5KTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVHbG9iYWwoZXhlYywgKnByb3BlcnR5TmFtZSwgZ2xv
YmFsT2JqZWN0LCByZXNvbHZlT3BlcmF0aW9uKSk7CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwg
dWlkKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVHbG9iYWwo
ZXhlYywgaWRlbnQsIGdsb2JhbE9iamVjdCwgcmVzb2x2ZU9wZXJhdGlvbikpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDIzICs1NSwy
MyBAQCBleHRlcm4gIkMiIHsKICAgICBTOiBzaXplX3QKICAgICBaOiBpbnQzMl90CiAgICAgRDog
ZG91YmxlCi0gICAgSTogSWRlbnRpZmllcioKKyAgICBJOiBTdHJpbmdJbXBsKgogICAgIEc6IEds
b2JhbFJlc29sdmVJbmZvKgogKi8KIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiAoKkpfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUEpKEV4ZWNTdGF0ZSosIEpTQXJyYXkq
KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9u
X0VBWikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpf
REZHT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSWRlbnRpZmllciopOwordHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNJKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FQ0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VEQSkoRXhlY1N0YXRlKiwgZG91YmxlLCBKU0FycmF5Kik7Ci10eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FR3JpSnNn
SSkoRXhlY1N0YXRlKiwgUmVzb2x2ZU9wZXJhdGlvbiosIEpTR2xvYmFsT2JqZWN0KiwgSWRlbnRp
ZmllciopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRUkpKEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VJUm8pKEV4ZWNTdGF0ZSosIElkZW50
aWZpZXIqLCBSZXNvbHZlT3BlcmF0aW9ucyopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUlSb1B0Ym8pKEV4ZWNTdGF0ZSosIElkZW50aWZp
ZXIqLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRvQmFzZU9wZXJhdGlvbiopOwordHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUdyaUpzZ0kpKEV4
ZWNTdGF0ZSosIFJlc29sdmVPcGVyYXRpb24qLCBKU0dsb2JhbE9iamVjdCosIFN0cmluZ0ltcGwq
KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9u
X0VJKShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSVJvKShFeGVjU3RhdGUqLCBTdHJpbmdJbXBs
KiwgUmVzb2x2ZU9wZXJhdGlvbnMqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiAoKkpfREZHT3BlcmF0aW9uX0VJUm9QdGJvKShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKiwg
UmVzb2x2ZU9wZXJhdGlvbnMqLCBQdXRUb0Jhc2VPcGVyYXRpb24qKTsKIHR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
SkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKik7Cit0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSlApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2
b2lkKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJh
dGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHR5cGVkZWYg
dm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFU
SU9OICgqVl9ERkdPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fRUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIHR5cGVkZWYg
dm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRp
b25fRUpDSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIElkZW50aWZpZXIq
KTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUpDSSkoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYg
dm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUpKSikoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZv
aWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKUFApKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCopOwogdHlwZWRlZiB2b2lkIERGR19PUEVS
QVRJT04gKCpWX0RGR09wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwg
RW5jb2RlZEpTVmFsdWUpOwpAQCAtMTM0LDE3ICsxMzQsMTcgQEAgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25WYQogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUq
LCBKU0FycmF5KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVu
dGlmaWVyKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlm
aWVyKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeUlkUHJvdG9CdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIElkZW50
aWZpZXIqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmll
ciopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYywgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
aW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeUdsb2Jh
bFZhcldyaXRlKFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQpIFdURl9JTlRFUk5BTDsKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZShFeGVjU3RhdGUqLCBJ
ZGVudGlmaWVyKiwgUmVzb2x2ZU9wZXJhdGlvbnMqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlKEV4ZWNTdGF0ZSosIElkZW50
aWZpZXIqLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRvQmFzZU9wZXJhdGlvbiopIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJhc2VT
dHJpY3RQdXQoRXhlY1N0YXRlKiwgSWRlbnRpZmllciosIFJlc29sdmVPcGVyYXRpb25zKiwgUHV0
VG9CYXNlT3BlcmF0aW9uKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZXNvbHZlR2xvYmFsKEV4ZWNTdGF0ZSosIFJlc29sdmVPcGVyYXRpb24q
LCBKU0dsb2JhbE9iamVjdCosIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmUoRXhlY1N0YXRlKiwgU3RyaW5nSW1w
bCosIFJlc29sdmVPcGVyYXRpb25zKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKiwg
UmVzb2x2ZU9wZXJhdGlvbnMqLCBQdXRUb0Jhc2VPcGVyYXRpb24qKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0
KEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRvQmFzZU9w
ZXJhdGlvbiopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUqLCBSZXNvbHZlT3BlcmF0aW9uKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KSBXVEZfSU5URVJOQUw7CiBjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIHNpemVfdCwgc2l6ZV90KSBXVEZfSU5URVJOQUw7CkBAIC0xNjQsMTggKzE2NCwxOCBA
QCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBX
VEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5
UG9wQW5kUmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJO
QUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRp
ZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5B
TDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElk
ZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwotdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRp
ZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5U
RVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1
aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVS
TkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1
aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFM
Owordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWls
ZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiAvLyBUaGVzZSBjb21wYXJpc29ucyByZXR1
cm4gYSBib29sZWFuIHdpdGhpbiBhIHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlzIHplcm8g
ZXh0ZW5kZWQgdG8gZmlsbCB0aGUgcmVnaXN0ZXIuCiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVy
YXRpb25SZWdFeHBUZXN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5B
TDsKIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdU
Rl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQo
Q29kZU8KICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVDaGVjay5tX2p1bXAsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwKICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLAogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcpLCBiYXNlUGF5bG9hZEdQUiwKLSAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgICAgICAgICBpZGVudGlm
aWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKHN0cnVjdHVyZUNoZWNrLm1fanVtcCk7CkBAIC0yOTUsMTQgKzI5NSwxNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsCiAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwKICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSwgYmFzZVBheWxvYWRH
UFIsCi0gICAgICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAg
ICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIXNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpIHsKICAg
ICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIHN0cnVj
dHVyZUNoZWNrLm1fanVtcCwgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLAogICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIGJh
c2VUYWdHUFJPck5vbmUsIGJhc2VQYXlsb2FkR1BSLAotICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXIoaWRlbnRpZmllck51bWJlcikpOworICAgICAgICAgICAgICAgIGlkZW50aWZpZXJVSUQoaWRl
bnRpZmllck51bWJlcikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc3Ry
dWN0dXJlQ2hlY2subV9qdW1wKTsKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRo
Q2FsbCgKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwKICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3Vs
dFBheWxvYWRHUFIpLCBiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9hZEdQUiwKLSAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgICAgICAgICBp
ZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgfQogICAgIH0KICAgICBt
X2ppdC5hZGRQcm9wZXJ0eUFjY2VzcygKQEAgLTM1MSwxNCArMzUxLDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBpZiAoIXNsb3dQYXRoVGFyZ2V0Lmlz
U2V0KCkpIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBz
dHJ1Y3R1cmVDaGVjay5tX2p1bXAsIHRoaXMsIG9wdGltaXplZENhbGwsIE5vUmVzdWx0LCB2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLAotICAgICAgICAgICAgYmFzZVBheWxvYWRHUFIsIGlk
ZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgICAgICAgICAgYmFzZVBheWxvYWRHUFIs
IGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoc3RydWN0dXJlQ2hlY2subV9qdW1wKTsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93
UGF0aFRhcmdldCk7CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBOb1Jlc3VsdCwgdmFsdWVUYWdHUFIs
IHZhbHVlUGF5bG9hZEdQUiwKLSAgICAgICAgICAgIGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVy
KGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgICAgIGJhc2VQYXlsb2FkR1BSLCBpZGVudGlm
aWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICB9CiAgICAgUmVnaXN0ZXJTZXQgY3VycmVu
dGx5VXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnMoKTsKICAgICBjdXJyZW50bHlVc2VkUmVn
aXN0ZXJzLmNsZWFyKHNjcmF0Y2hHUFIpOwpAQCAtNDIxNSw3ICs0MjE1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAgV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludFNldCA9CiAgICAgICAgICAgICBtX2ppdC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKLSAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpKS0+aW1wbCgpKS53
YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICAgICAgaWRlbnRpZmllclVJRChub2RlLT5pZGVu
dGlmaWVyTnVtYmVyRm9yQ2hlY2soKSktPmltcGwoKSkud2F0Y2hwb2ludFNldCgpOwogICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKQEAgLTQyNDMsNyArNDI0Myw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBH
bG9iYWxWYXJXYXRjaHBvaW50OiB7CiAgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1faml0
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3ltYm9sVGFibGUoKS0+Z2V0KAot
ICAgICAgICAgICAgaWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSkt
PmltcGwoKSkud2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAgaWRlbnRpZmllclVJRChub2Rl
LT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSktPmltcGwoKSkud2F0Y2hwb2ludFNldCgpOwog
ICAgICAgICBtX2ppdC5hZGRMYXppbHkoc3BlY3VsYXRpb25XYXRjaHBvaW50KCksIHNldCk7CiAg
ICAgICAgIAogI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKQEAgLTQ0NjQsNyArNDQ2NCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRo
aXMpOwogICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCku
bV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS0+cmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgo
KV07Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZSwgcmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBpZGVudGlmaWVyKGRhdGEuaWRlbnRpZmllck51bWJl
ciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblJlc29sdmUsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgaWRlbnRp
ZmllclVJRChkYXRhLmlkZW50aWZpZXJOdW1iZXIpLCBkYXRhLnJlc29sdmVPcGVyYXRpb25zKTsK
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDc0LDcgKzQ0NzQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlc3Vs
dCByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlz
KTsKICAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1f
cmVzb2x2ZU9wZXJhdGlvbnNEYXRhW25vZGUtPnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCld
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlLCByZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIGlkZW50aWZpZXIoZGF0YS5pZGVudGlmaWVyTnVt
YmVyKSwgZGF0YS5yZXNvbHZlT3BlcmF0aW9ucywgZGF0YS5wdXRUb0Jhc2VPcGVyYXRpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlLCByZXN1bHRUYWcuZ3By
KCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIGlkZW50aWZpZXJVSUQoZGF0YS5pZGVudGlmaWVyTnVt
YmVyKSwgZGF0YS5yZXNvbHZlT3BlcmF0aW9ucywgZGF0YS5wdXRUb0Jhc2VPcGVyYXRpb24pOwog
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0ODQsNyArNDQ4NCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMp
OwogICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9y
ZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS0+cmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpY3RQdXQsIHJl
c3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgaWRlbnRpZmllcihkYXRhLmlkZW50
aWZpZXJOdW1iZXIpLCBkYXRhLnJlc29sdmVPcGVyYXRpb25zLCBkYXRhLnB1dFRvQmFzZU9wZXJh
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpY3RQ
dXQsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgaWRlbnRpZmllclVJRChk
YXRhLmlkZW50aWZpZXJOdW1iZXIpLCBkYXRhLnJlc29sdmVPcGVyYXRpb25zLCBkYXRhLnB1dFRv
QmFzZU9wZXJhdGlvbik7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCBy
ZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDUy
Nyw3ICs0NTI3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZXNOb3RN
YXRjaCwgdGhpcywgb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbCwKICAgICAgICAgICAgICAgICBKU1Zh
bHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCByZXNvbHZlSW5mb0dQUiwg
Z2xvYmFsT2JqZWN0R1BSLAotICAgICAgICAgICAgICAgICZtX2ppdC5jb2RlQmxvY2soKS0+aWRl
bnRpZmllcihkYXRhLmlkZW50aWZpZXJOdW1iZXIpKSk7CisgICAgICAgICAgICAgICAgaWRlbnRp
ZmllclVJRChkYXRhLmlkZW50aWZpZXJOdW1iZXIpKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDE0ICsyNTUsMTQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAgIGlmICghc2xv
d1BhdGhUYXJnZXQuaXNTZXQoKSkgewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgK
ICAgICAgICAgICAgIHN0cnVjdHVyZUNoZWNrLm1fanVtcCwgdGhpcywgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRHUFIsIGJhc2VHUFIsCi0gICAgICAgICAgICBpZGVudGlmaWVyKGlk
ZW50aWZpZXJOdW1iZXIpLCBzcGlsbE1vZGUpOworICAgICAgICAgICAgaWRlbnRpZmllclVJRChp
ZGVudGlmaWVyTnVtYmVyKSwgc3BpbGxNb2RlKTsKICAgICB9IGVsc2UgewogICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0
cnVjdHVyZUNoZWNrLm1fanVtcCk7CiAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhU
YXJnZXQpOwogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRHUFIsIGJhc2VH
UFIsCi0gICAgICAgICAgICBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpLCBzcGlsbE1vZGUp
OworICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSwgc3BpbGxNb2Rl
KTsKICAgICB9CiAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoCiAgICAgICAgIFByb3BlcnR5
QWNjZXNzUmVjb3JkKApAQCAtMzAzLDE0ICszMDMsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIGlmICghc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkgewog
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHN0cnVjdHVyZUNo
ZWNrLm1fanVtcCwgdGhpcywgb3B0aW1pemVkQ2FsbCwgTm9SZXN1bHQsIHZhbHVlR1BSLCBiYXNl
R1BSLAotICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAg
ICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKHN0cnVjdHVyZUNoZWNrLm1fanVtcCk7CiAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
c2xvd1BhdGhUYXJnZXQpOwogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3B0aW1pemVkQ2FsbCwgTm9SZXN1bHQsIHZhbHVlR1BS
LCBiYXNlR1BSLAotICAgICAgICAgICAgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7Cisg
ICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICB9CiAgICAg
UmVnaXN0ZXJTZXQgY3VycmVudGx5VXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnMoKTsKICAg
ICBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2hHUFIpOwpAQCAtNDExMSw3ICs0
MTExLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAKICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCA9CiAgICAgICAgICAgICBt
X2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdl
dCgKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXJGb3JD
aGVjaygpKS0+aW1wbCgpKS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICAgICAgaWRlbnRp
ZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSkpLndhdGNocG9pbnRTZXQo
KTsKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCkBAIC00MTM0LDcgKzQxMzQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAog
ICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDogewogICAgICAgICBXYXRjaHBvaW50U2V0KiBz
ZXQgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxl
KCktPmdldCgKLSAgICAgICAgICAgIGlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlckZv
ckNoZWNrKCkpLT5pbXBsKCkpLndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgIGlkZW50aWZp
ZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkpKS53YXRjaHBvaW50U2V0KCk7
CiAgICAgICAgIG1faml0LmFkZExhemlseShzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwgc2V0KTsK
ICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQpAQCAtNDM1Miw3ICs0MzUyLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBS
ZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZlT3BlcmF0
aW9uc0RhdGFbbm9kZS0+cmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZSwgcmVzdWx0LmdwcigpLCBpZGVudGlmaWVyKGRh
dGEuaWRlbnRpZmllck51bWJlciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmUsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllclVJ
RChkYXRhLmlkZW50aWZpZXJOdW1iZXIpLCBkYXRhLnJlc29sdmVPcGVyYXRpb25zKTsKICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC00MzYxLDcgKzQzNjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7CiAgICAgICAgIFJlc29sdmVPcGVyYXRpb25EYXRhJiBkYXRhID0gbV9qaXQu
Z3JhcGgoKS5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YVtub2RlLT5yZXNvbHZlT3BlcmF0aW9uc0Rh
dGFJbmRleCgpXTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlQmFzZSwg
cmVzdWx0LmdwcigpLCBpZGVudGlmaWVyKGRhdGEuaWRlbnRpZmllck51bWJlciksIGRhdGEucmVz
b2x2ZU9wZXJhdGlvbnMsIGRhdGEucHV0VG9CYXNlT3BlcmF0aW9uKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlQmFzZSwgcmVzdWx0LmdwcigpLCBpZGVudGlmaWVyVUlE
KGRhdGEuaWRlbnRpZmllck51bWJlciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMsIGRhdGEucHV0
VG9CYXNlT3BlcmF0aW9uKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00MzcwLDcgKzQzNzAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIFJlc29sdmVPcGVy
YXRpb25EYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YVtu
b2RlLT5yZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25SZXNvbHZlQmFzZVN0cmljdFB1dCwgcmVzdWx0LmdwcigpLCBpZGVudGlmaWVy
KGRhdGEuaWRlbnRpZmllck51bWJlciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMsIGRhdGEucHV0
VG9CYXNlT3BlcmF0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZl
QmFzZVN0cmljdFB1dCwgcmVzdWx0LmdwcigpLCBpZGVudGlmaWVyVUlEKGRhdGEuaWRlbnRpZmll
ck51bWJlciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMsIGRhdGEucHV0VG9CYXNlT3BlcmF0aW9u
KTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC00NDA5LDcgKzQ0MDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlc0RvbnRNYXRjaCwgdGhpcywgb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbCwK
ICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLCBnbG9iYWxPYmplY3RH
UFIsCi0gICAgICAgICAgICAgICAgJm1faml0LmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGRhdGEu
aWRlbnRpZmllck51bWJlcikpKTsKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyVUlEKGRhdGEu
aWRlbnRpZmllck51bWJlcikpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODAs
OSArNTgwLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9k
ZSkuaXNOdWxsKCk7CiAgICAgfQogCi0gICAgSWRlbnRpZmllciogaWRlbnRpZmllcih1bnNpZ25l
ZCBpbmRleCkKKyAgICBTdHJpbmdJbXBsKiBpZGVudGlmaWVyVUlEKHVuc2lnbmVkIGluZGV4KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihpbmRl
eCk7CisgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpLm1faWRlbnRpZmllcnNbaW5kZXhdOwog
ICAgIH0KIAogICAgIC8vIFNwaWxsIGFsbCBWaXJ0dWFsUmVnaXN0ZXJzIGJhY2sgdG8gdGhlIEpT
U3RhY2suCkBAIC05NTcsMjQgKzk1NywyNCBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gY2FsbDsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FR3JpSnNnSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgSWRlbnRpZmllciogaWRlbnRpZmllcikKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VHcmlKc2dJIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1aWQp
CiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
YXJnMiwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7CisgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBJZGVudGlmaWVyKiBp
ZGVudGlmaWVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJpbmdJbXBsKiB1aWQpCiAgICAg
ewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihpZGVudGlmaWVyKSk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUlSbyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIElkZW50aWZpZXIqIGlkZW50aWZpZXIsIFJlc29sdmVPcGVyYXRpb25z
KiBvcGVyYXRpb25zKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUlSbyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cmluZ0ltcGwqIHVpZCwg
UmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSwgVHJ1c3Rl
ZEltbVB0cihvcGVyYXRpb25zKSk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCksIFRydXN0ZWRJbW1QdHIob3BlcmF0aW9ucykpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRUlSb1B0Ym8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBJZGVu
dGlmaWVyKiBpZGVudGlmaWVyLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucywgUHV0VG9C
YXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb25zKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUlSb1B0Ym8gb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBTdHJpbmdJbXBsKiB1aWQsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQ
dXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCiAgICAgewotICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpZGVudGlmaWVy
KSwgVHJ1c3RlZEltbVB0cihvcGVyYXRpb25zKSwgVHJ1c3RlZEltbVB0cihwdXRUb0Jhc2VPcGVy
YXRpb25zKSk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHVpZCksIFRydXN0ZWRJbW1QdHIob3BlcmF0aW9ucyksIFRydXN0ZWRJbW1QdHIo
cHV0VG9CYXNlT3BlcmF0aW9ucykpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKQEAgLTEwMzIsMTQgKzEwMzIsMTQgQEAgcHVibGlj
OgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3Rl
ZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciogaWRlbnRpZmllcikKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewotICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0
cihpZGVudGlmaWVyKSk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpJIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIElkZW50aWZpZXIqIGlkZW50aWZpZXIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RyaW5nSW1wbCogdWlkKQog
ICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRy
dXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VEQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
QEAgLTEyMDIsOSArMTIwMiw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VK
Q0kgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIElkZW50aWZpZXIqIGlkZW50
aWZpZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlv
bl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1
aWQpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwog
ICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VKSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQpA
QCAtMTM1NSw5ICsxMzU1LDkgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FR3JpSnNnSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIElk
ZW50aWZpZXIqIGlkZW50aWZpZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FR3JpSnNnSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwq
IHVpZCkKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIpKTsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIodWlkKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKQEAgLTEzNjUs
OSArMTM2NSw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgSWRlbnRpZmll
ciogaWRlbnRpZmllcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIpKTsKKyAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKQEAgLTE0MzAsMTkgKzE0
MzAsMTkgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBJZGVudGlmaWVyKiBp
ZGVudGlmaWVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewotICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVy
KSk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVz
dGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpJ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIElkZW50aWZpZXIqIGlkZW50aWZpZXIpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFy
ZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKLSAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJH
IGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIpKTsKKyAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJH
IGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
LCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9ERkdPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBT
dHJpbmdJbXBsKiB1aWQpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIFRydXN0ZWRJbW0zMihh
cmcxVGFnKSwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwg
VHJ1c3RlZEltbTMyKGFyZzFUYWcpLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRURBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIEZQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKQEAgLTE1NzEs
MTUgKzE1NzEsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FSVJvIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIElkZW50aWZpZXIqIGlkZW50aWZpZXIsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25z
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUlS
byBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJp
bmdJbXBsKiB1aWQsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQogICAgIHsKLSAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaWRlbnRp
ZmllciksIFRydXN0ZWRJbW1QdHIob3BlcmF0aW9ucykpOworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cih1aWQpLCBUcnVzdGVkSW1tUHRyKG9w
ZXJhdGlvbnMpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUlSb1B0
Ym8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgSWRl
bnRpZmllciogaWRlbnRpZmllciwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRv
QmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9ucykKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJUm9QdGJvIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCwgUmVzb2x2
ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3Bl
cmF0aW9ucykKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIpLCBUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbnMpLCBU
cnVzdGVkSW1tUHRyKHB1dFRvQmFzZU9wZXJhdGlvbnMpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIodWlkKSwgVHJ1c3RlZEltbVB0cihv
cGVyYXRpb25zKSwgVHJ1c3RlZEltbVB0cihwdXRUb0Jhc2VPcGVyYXRpb25zKSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKQEAgLTE2MTMsOSArMTYxMyw5IEBA
IHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklf
MzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVzdGVkSW1tUHRy
KHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihW
X0RGR09wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcx
UGF5bG9hZCwgR1BSUmVnIGFyZzIsIElkZW50aWZpZXIqIGlkZW50aWZpZXIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIFN0cmluZ0lt
cGwqIHVpZCkKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3Rl
ZEltbVB0cihpZGVudGlmaWVyKSk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwg
VHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJn
M1BheWxvYWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29k
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZUNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNvdXJjZUNvZGUuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK0NTdHJpbmcgU291cmNlQ29kZTo6dG9VVEY4KCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsKKyAg
ICAKKyAgICByZXR1cm4gbV9wcm92aWRlci0+c291cmNlKCkuaW1wbCgpLT51dGY4Rm9yUmFuZ2Uo
bV9zdGFydENoYXIsIG1fZW5kQ2hhciAtIG1fc3RhcnRDaGFyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5o
CShyZXZpc2lvbiAxNDkzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNiArNzQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiBtX3Byb3ZpZGVyLT5nZXRSYW5nZShtX3N0YXJ0Q2hhciwgbV9lbmRD
aGFyKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgQ1N0cmluZyB0b1VURjgoKSBjb25z
dDsKKyAgICAgICAgCiAgICAgICAgIGludHB0cl90IHByb3ZpZGVySUQoKSBjb25zdAogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fcHJvdmlkZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHAJKHJldmlzaW9u
IDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVj
b2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2LDggQEAgSlNWYWx1ZSBCeXRlY29k
ZXM6OnRvSlMoRXhlY1N0YXRlKiBleGVjKQogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKICAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1faWQpKTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
aW5mZXJyZWROYW1lLCBqc1N0cmluZyhleGVjLCBtX2luZmVycmVkTmFtZSkpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zb3VyY2VDb2Rl
LCBqc1N0cmluZyhleGVjLCBtX3NvdXJjZUNvZGUpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaW5mZXJyZWROYW1lLCBqc1N0cmluZyhl
eGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faW5mZXJyZWROYW1lKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zb3VyY2VDb2RlLCBqc1N0
cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fc291cmNlQ29kZSkpKTsKICAgICByZXN1bHQt
PnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGFzaCwganNTdHJp
bmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOCh0b0NTdHJpbmcobV9oYXNoKSkpKTsKICAgICByZXN1
bHQtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaW5zdHJ1Y3Rp
b25Db3VudCwganNOdW1iZXIobV9pbnN0cnVjdGlvbkNvdW50KSk7CiAgICAgYWRkU2VxdWVuY2VQ
cm9wZXJ0aWVzKGV4ZWMsIHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuaAkocmV2aXNpb24gMTQ5MzUxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAgcHVibGljOgogICAgIH5CeXRlY29kZXMoKTsKICAg
ICAKICAgICBzaXplX3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgY29uc3QgU3Ry
aW5nJiBpbmZlcnJlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVycmVkTmFtZTsgfQotICAg
IGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQ29kZTsg
fQorICAgIGNvbnN0IENTdHJpbmcmIGluZmVycmVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5m
ZXJyZWROYW1lOyB9CisgICAgY29uc3QgQ1N0cmluZyYgc291cmNlQ29kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlQ29kZTsgfQogICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2luc3RydWN0aW9uQ291bnQ7IH0KICAgICBDb2RlQmxvY2tIYXNoIGhhc2go
KSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KIApAQCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6CiAg
ICAgCiBwcml2YXRlOgogICAgIHNpemVfdCBtX2lkOwotICAgIFN0cmluZyBtX2luZmVycmVkTmFt
ZTsKLSAgICBTdHJpbmcgbV9zb3VyY2VDb2RlOworICAgIENTdHJpbmcgbV9pbmZlcnJlZE5hbWU7
CisgICAgQ1N0cmluZyBtX3NvdXJjZUNvZGU7CiAgICAgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CiAg
ICAgdW5zaWduZWQgbV9pbnN0cnVjdGlvbkNvdW50OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTksNiArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgpOyB9CiAgICAgICAgIAogICAgICAgICBDU3RyaW5n
IGFzY2lpKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuYXNjaWkoKTsgfQorICAgICAgICBDU3Ry
aW5nIHV0ZjgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy51dGY4KCk7IH0KIAogICAgICAgICBz
dGF0aWMgSWRlbnRpZmllciBjcmVhdGVMQ2hhckZyb21VQ2hhcihWTSogdm0sIGNvbnN0IFVDaGFy
KiBzLCBpbnQgbGVuZ3RoKSB7IHJldHVybiBJZGVudGlmaWVyKHZtLCBhZGQ4KHZtLCBzLCBsZW5n
dGgpKTsgfQogCkBAIC0yNDcsNiArMjQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAog
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGludCwgSWRlbnRpZmllclJl
cEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+ID4sIElkZW50aWZpZXJNYXBJbmRl
eEhhc2hUcmFpdHM+IElkZW50aWZpZXJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0lt
cGwqLCBpbnQsIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFN0cmluZ0ltcGwqPiwgSWRl
bnRpZmllck1hcEluZGV4SGFzaFRyYWl0cz4gQ29uY3VycmVudElkZW50aWZpZXJNYXA7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIEhhc2hTZXQ8U3RyaW5nSW1w
bCo+OjpBZGRSZXN1bHQgSWRlbnRpZmllclRhYmxlOjphZGQoVSB2YWx1ZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTQ5MzUx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIxLDEyICszMjEsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeURp
Y3Rpb25hcnlGdW5jdAogICAgIGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmNsZWFyKCk7CiB9CiAKLVN0
cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBv
ZmZzZXQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlz
dGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBv
ZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKICAgICBB
U1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKIAotICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0
aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KHByb3BlcnR5
TmFtZS51aWQoKSwgYXR0cmlidXRlcykpIHsKKyAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1Ry
YW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldCh1aWQsIGF0dHJpYnV0
ZXMpKSB7CiAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgPSBleGlzdGlu
Z1RyYW5zaXRpb24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCk7CiAgICAgICAgIGlm
IChzcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyAmJiBzcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyAhPSBz
cGVjaWZpY1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMzgsNiArMzM4LDExIEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICByZXR1cm4gMDsK
IH0KIAorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlP
ZmZzZXQmIG9mZnNldCkKK3sKKyAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlz
dGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgYXR0cmlidXRlcywg
c3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KTsKK30KKwogYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdElu
Q2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdAogewogICAgIGZvciAoY29u
c3QgU3RydWN0dXJlKiBjdXJyZW50ID0gdGhpczsgOykgewpAQCAtNzcxLDcgKzc3Niw3IEBAIFBy
b3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGEKICAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y3JlYXRlKHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwg
bV9pbmxpbmVDYXBhY2l0eSkpOwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENv
bmN1cnJlbnRseShWTSYsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRy
aWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1
dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQogewogICAgIC8vIFdlIGNhbid0IGhhbmRsZSB1
bmNhY2hlYWJsZSBkaWN0aW9uYXJpZXMgYmVjYXVzZSB3ZSBjYW4ndCBoYW5kbGUgY29uY3VycmVu
dCByZW1vdmUncwogICAgIC8vIGZyb20gdGhlIHByb3BlcnR5IG1hcHMuCkBAIC03ODQsNyArNzg5
LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bAogICAgIGZpbmRT
dHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwg
dGFibGUpOwogICAgIAogICAgIGlmICh0YWJsZSkgewotICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5
KiBlbnRyeSA9IHRhYmxlLT5maW5kKHByb3BlcnR5TmFtZS51aWQoKSkuZmlyc3Q7CisgICAgICAg
IFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gdGFibGUtPmZpbmQodWlkKS5maXJzdDsKICAgICAg
ICAgaWYgKGVudHJ5KSB7CiAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0
ZXM7CiAgICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gZW50cnktPnNwZWNpZmljVmFsdWUuZ2V0
KCk7CkBAIC03OTcsNyArODAyLDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25j
dXJyZW50bAogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBp
LS07KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07Ci0gICAgICAgIGlmIChz
dHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkgIT0gcHJvcGVydHlOYW1lLnVpZCgpKQor
ICAgICAgICBpZiAoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpICE9IHVpZCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgYXR0cmlidXRlcyA9IHN0cnVj
dHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91czsKQEAgLTk1NiwxMyArOTYxLDEzIEBAIHZvaWQg
U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdGhpc09iamVjdC0+
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpwcm90
b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQorYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVU
byhWTSYgdm0sIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICAvLyBOb3RlLCB0aGlzIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSB0d28ga2luZHMgb2YgcGxhY2VzOiAoMSkgYXNzZXJ0aW9ucyBhbmQgKDIp
CiAgICAgLy8gdGhlIGNvbXBpbGF0aW9uIHRocmVhZC4gQXMgc3VjaCwgaXQgZG9lcyB0aGluZ3Mg
c29tZXdoYXQgY2FyZWZ1bGx5IHRvIGVuc3VyZQogICAgIC8vIHRocmVhZCBzYWZldHkuIEN1cnJl
bnRseSB0aGF0IG9ubHkgYWZmZWN0cyB0aGUgd2F5IHdlIGRvIFN0cnVjdHVyZTo6Z2V0KCkuCiAg
ICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgdW5zaWdu
ZWQgaSA9IHRvVUludDMyRnJvbVN0cmluZ0ltcGwodWlkKTsKICAgICBpZiAoaSAhPSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5SW50
ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCk7CiAgICAgCkBAIC05NzUsNyArOTgwLDcgQEAgYm9vbCBT
dHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAgICAgICAKICAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlczsKICAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXRDb25jdXJyZW50bHkodm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKQEAgLTk4Niw2ICs5OTEsMTEg
QEAgYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAgIH0KIH0KIAor
Ym9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIHByb3RvdHlwZUNoYWlu
TWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKK30KKwogI2lmIERP
X1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwogCiB2b2lkIFByb3BlcnR5VGFibGU6OmNoZWNr
Q29uc2lzdGVuY3koKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUs
IFByb3BlcnR5T2Zmc2V0Jik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQm
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYp
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUpOwpAQCAtMTYxLDYgKzE2Miw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAgICAgICAgIAogICAgIC8vIFdpbGwganVzdCB0aGUgcHJvdG90eXBlIGNoYWluIGludGVyY2Vw
dCB0aGlzIHByb3BlcnR5IGFjY2Vzcz8KKyAgICBib29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJj
ZXB0U3RvcmVUbyhWTSYsIFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgYm9vbCBwcm90b3R5cGVDaGFp
bk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAKICAgICBi
b29sIHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEh
bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQpAQCAtMjQxLDggKzI0Myw4IEBAIHB1YmxpYzoK
ICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1l
LCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CiAKLSAgICBQ
cm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBQcm9wZXJ0eU5hbWUpOwotICAgIFBy
b3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQm
IGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5T2Zmc2V0
IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCk7CisgICAgUHJvcGVydHlPZmZz
ZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCYgYXR0cmli
dXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CiAKICAgICBib29sIGhhc0dldHRlclNldHRl
clByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0dldHRlclNldHRlclByb3BlcnRpZXM7
IH0KICAgICBib29sIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5n
UHJvdG8oKSBjb25zdCB7IHJldHVybiBtX2hhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzRXhjbHVkaW5nUHJvdG87IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtODAsMTIgKzgwLDEyIEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChW
TSYKICAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52YWxpZE9mZnNldDsKIH0K
ICAgICAKLWlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitpbmxpbmUgUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mIHZtLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAg
ICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CiAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
SWdub3JlZDsKICAgICByZXR1cm4gZ2V0Q29uY3VycmVudGx5KAotICAgICAgICB2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUlnbm9yZWQpOworICAgICAg
ICB2bSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUlnbm9yZWQpOwogfQog
CiBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5NDAwKQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAorMjAx
My0wNC0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0
aFRpZXI6IERGRyB0cmllcyB0byByZWYvZGVyZWYgU3RyaW5nSW1wbHMgaW4gYSB0b24gb2YgcGxh
Y2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUz
MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIE1ha2UgaXQgcG9zc2libGUgdG8gZG8gbW9yZSB0aGluZ3MgZGlyZWN0bHkgdG8gU3RyaW5n
SW1wbConcywgaW5jbHVkaW5nIGJlaW5nCisgICAgICAgIGFibGUgdG8gZGlyZWN0bHkgZG8gdXRm
OCBjb252ZXJzaW9uIG9uIGEgc3Vic3RyaW5nIHdpdGhvdXQgY3JlYXRpbmcgdGhlCisgICAgICAg
IHN1YnN0cmluZyBmaXJzdC4KKyAgICAgICAgCisgICAgICAgIEFkZCBhc3NlcnRpb25zIHRvIFN0
cmluZ0ltcGwgdGhhdCBpdCBpc24ndCBiZWluZyByZWYvZGVyZWYnZCBmcm9tIHRoZQorICAgICAg
ICBjb21waWxhdGlvbiB0aHJlYWQuCisKKyAgICAgICAgKiB3dGYvUHJpbnRTdHJlYW0uY3BwOgor
ICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKFdURik6CisgICAgICAgICog
d3RmL1ByaW50U3RyZWFtLmg6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpwcmludElu
dGVybmFsKToKKyAgICAgICAgKiB3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaDoKKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXVEY6OnRvQ1N0cmluZyk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
SW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnV0ZjhGb3JSYW5nZSk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OnV0ZjgpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiB3
dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChTdHJpbmdJbXBsKToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nSW1wbDo6aGFzQXRMZWFzdE9uZVJlZik6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OnJlZik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmRlcmVmKToKKwogMjAxMy0wNC0y
OSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6
IFN0cmluZzo6dXRmOCgpIHNob3VsZCBhbHNvIGJlIGF2YWlsYWJsZSBhcyBTdHJpbmdJbXBsOjp1
dGY4KCkgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byByZWYoKSBhIFN0cmluZ0ltcGwganVzdCB0
byBnZXQgaXRzIHV0ZjgoKQpJbmRleDogU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTQ5
MzUxKQorKysgU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw2ICs2MiwxMSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29u
CiAgICAgb3V0LnByaW50KHN0cmluZy51dGY4KCkpOwogfQogCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nKQoreworICAgIG91dC5w
cmludChzdHJpbmctPnV0ZjgoKSk7Cit9CisKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBib29sIHZhbHVlKQogewogICAgIGlmICh2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1ByaW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJpbnRTdHJl
YW0uaAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3Mg
Q1N0cmluZzsKIGNsYXNzIFN0cmluZzsKK2NsYXNzIFN0cmluZ0ltcGw7CiAKIGNsYXNzIFByaW50
U3RyZWFtIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUHJpbnRTdHJlYW0pOwpAQCAtMjExLDkgKzIxMiwxMSBAQCBwdWJsaWM6CiBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciopOwog
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGNvbnN0
IENTdHJpbmcmKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBjb25zdCBTdHJpbmcmKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBjb25zdCBTdHJpbmdJbXBsKik7CiBpbmxpbmUgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNoYXIqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwo
b3V0LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBDU3RyaW5nJiB2YWx1ZSkgeyBwcmludEludGVy
bmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3QgQ1N0cmluZyY+KHZhbHVlKSk7IH0KIGlubGluZSB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RyaW5nJiB2YWx1ZSkgeyBwcmlu
dEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nJj4odmFsdWUpKTsgfQoraW5s
aW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdHJpbmdJbXBsKiB2YWx1
ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wbCo+KHZh
bHVlKSk7IH0KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBib29sKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBpbnQpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIHVuc2lnbmVkKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAko
cmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAko
d29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsMTQgQEAgQ1N0cmluZyB0b0NTdHJpbmcoY29uc3Qg
VDEmIHZhbHVlMSwgY29ucwogICAgIHJldHVybiBzdHJlYW0udG9DU3RyaW5nKCk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
PgorQ1N0cmluZyB0b0NTdHJpbmcoY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwg
Y29uc3QgVDMmIHZhbHVlMywgY29uc3QgVDQmIHZhbHVlNCkKK3sKKyAgICBTdHJpbmdQcmludFN0
cmVhbSBzdHJlYW07CisgICAgc3RyZWFtLnByaW50KHZhbHVlMSwgdmFsdWUyLCB2YWx1ZTMsIHZh
bHVlNCk7CisgICAgcmV0dXJuIHN0cmVhbS50b0NTdHJpbmcoKTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIFN0cmluZyB0b1N0cmluZyhjb25zdCBUJiB2YWx1ZSkKIHsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTQ5MzUxKQorKysgU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwNSwxMCArMTkwNSwx
MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0VVRGOFRyaXBsZShjaGFyKiYgCiAgICAgKmJ1ZmZl
cisrID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKGNoICYgMHgzRikgfCAweDgwKTsKIH0KIAotQ1N0cmlu
ZyBTdHJpbmdJbXBsOjp1dGY4KENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0CitDU3RyaW5nIFN0
cmluZ0ltcGw6OnV0ZjhGb3JSYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
Q29udmVyc2lvbk1vZGUgbW9kZSkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlz
LT5sZW5ndGgoKTsKLQorICAgIEFTU0VSVChvZmZzZXQgPD0gdGhpcy0+bGVuZ3RoKCkpOworICAg
IEFTU0VSVChvZmZzZXQgKyBsZW5ndGggPD0gdGhpcy0+bGVuZ3RoKCkpOworICAgIAogICAgIGlm
ICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7CiAKQEAgLTE5MjksMTIg
KzE5MzAsMTIgQEAgQ1N0cmluZyBTdHJpbmdJbXBsOjp1dGY4KENvbnZlcnNpb25Nb2RlIAogICAg
IGNoYXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7CiAKICAgICBpZiAoaXM4Qml0KCkp
IHsKLSAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzOCgp
OworICAgICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVycyA9IHRoaXMtPmNoYXJhY3RlcnM4KCkg
KyBvZmZzZXQ7CiAKICAgICAgICAgQ29udmVyc2lvblJlc3VsdCByZXN1bHQgPSBjb252ZXJ0TGF0
aW4xVG9VVEY4KCZjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgbGVuZ3RoLCAmYnVmZmVyLCBidWZm
ZXIgKyBidWZmZXJWZWN0b3Iuc2l6ZSgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdCAhPSB0YXJnZXRFeGhhdXN0ZWQpOyAvLyAobGVuZ3RoICogMykgc2hvdWxkIGJlIHN1
ZmZpY2llbnQgZm9yIGFueSBjb252ZXJzaW9uCiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldDsKIAogICAg
ICAgICBpZiAobW9kZSA9PSBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dh
dGVzV2l0aEZGRkQpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzRW5kID0g
Y2hhcmFjdGVycyArIGxlbmd0aDsKQEAgLTE5ODQsNCArMTk4NSw5IEBAIENTdHJpbmcgU3RyaW5n
SW1wbDo6dXRmOChDb252ZXJzaW9uTW9kZSAKICAgICByZXR1cm4gQ1N0cmluZyhidWZmZXJWZWN0
b3IuZGF0YSgpLCBidWZmZXIgLSBidWZmZXJWZWN0b3IuZGF0YSgpKTsKIH0KIAorQ1N0cmluZyBT
dHJpbmdJbXBsOjp1dGY4KENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHV0ZjhGb3JSYW5nZSgwLCBsZW5ndGgoKSwgbW9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDE0OTM1MSkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsy
NSw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5o
PgorI2luY2x1ZGUgPHd0Zi9Db21waWxhdGlvblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJp
bmdIYXNoZXIuaD4KQEAgLTUzNiw2ICs1MzcsNyBAQCBwdWJsaWM6CiAgICAgUVN0cmluZ0RhdGEq
IHFTdHJpbmdEYXRhKCkgeyByZXR1cm4gYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyQWRvcHRl
ZFFTdHJpbmcgPyBtX3FTdHJpbmdEYXRhIDogMDsgfQogI2VuZGlmCiAgICAgCisgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIENTdHJpbmcgdXRmOEZvclJhbmdlKHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBjb25zdDsK
ICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQ1N0cmluZyB1dGY4KENvbnZlcnNpb25Nb2RlID0g
TGVuaWVudENvbnZlcnNpb24pIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtNTc5LDE5ICs1ODEsMjcg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nSGFzaCgpOwogICAgICAgICBy
ZXR1cm4gaGFzaFNsb3dDYXNlKCk7CiAgICAgfQotCisgICAgCiAgICAgaW5saW5lIGJvb2wgaGFz
T25lUmVmKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3JlZkNvdW50ID09IHNfcmVm
Q291bnRJbmNyZW1lbnQ7CiAgICAgfQorICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWZ1
bCBmb3IgYXNzZXJ0aW9ucy4KKyAgICBpbmxpbmUgYm9vbCBoYXNBdExlYXN0T25lUmVmKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1fcmVmQ291bnQ7CisgICAgfQogCiAgICAgaW5s
aW5lIHZvaWQgcmVmKCkKICAgICB7CisgICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVh
ZCgpKTsKICAgICAgICAgbV9yZWZDb3VudCArPSBzX3JlZkNvdW50SW5jcmVtZW50OwogICAgIH0K
IAogICAgIGlubGluZSB2b2lkIGRlcmVmKCkKICAgICB7CisgICAgICAgIEFTU0VSVCghaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKICAgICAgICAgaWYgKG1fcmVmQ291bnQgPT0gc19yZWZDb3VudElu
Y3JlbWVudCkgewogICAgICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgICAgICAgICByZXR1cm47
Cg==
</data>
<flag name="review"
          id="221670"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>